2024-12-03 16:40:56 +01:00

68 lines
2.9 KiB
Java

package com.hbm.particle.helper;
import java.util.Random;
import com.hbm.particle.ParticleBlackPowderSmoke;
import com.hbm.particle.ParticleBlackPowderSpark;
import com.hbm.util.Vec3NT;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.texture.TextureManager;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.World;
public class BlackPowderCreator implements IParticleCreator {
public static void composeEffect(World world, double x, double y, double z, double headingX, double headingY, double headingZ, int cloudCount, float cloudScale, float cloudSpeedMult, int sparkCount, float sparkSpeedMult) {
NBTTagCompound data = new NBTTagCompound();
data.setString("type", "blackPowder");
data.setInteger("cloudCount", cloudCount);
data.setFloat("cloudScale", cloudScale);
data.setFloat("cloudSpeedMult", cloudSpeedMult);
data.setInteger("sparkCount", sparkCount);
data.setFloat("sparkSpeedMult", sparkSpeedMult);
data.setDouble("hX", headingX);
data.setDouble("hY", headingY);
data.setDouble("hZ", headingZ);
IParticleCreator.sendPacket(world, x, y, z, 200, data);
}
@Override
@SideOnly(Side.CLIENT)
public void makeParticle(World world, EntityPlayer player, TextureManager texman, Random rand, double x, double y, double z, NBTTagCompound data) {
double headingX = data.getDouble("hX");
double headingY = data.getDouble("hY");
double headingZ = data.getDouble("hZ");
int cloudCount = data.getInteger("cloudCount");
float cloudScale = data.getFloat("cloudScale");
float cloudSpeedMult = data.getFloat("cloudSpeedMult");
int sparkCount = data.getInteger("sparkCount");
float sparkSpeedMult = data.getFloat("sparkSpeedMult");
Vec3NT heading = new Vec3NT(headingX, headingY, headingZ).normalizeSelf();
for(int i = 0; i < cloudCount; i++) {
ParticleBlackPowderSmoke particle = new ParticleBlackPowderSmoke(world, x, y, z, cloudScale);
double speedMult = 0.85 + rand.nextDouble() * 0.3;
particle.motionX = heading.xCoord * cloudSpeedMult * speedMult + rand.nextGaussian() * 0.05;
particle.motionY = heading.yCoord * cloudSpeedMult * speedMult + rand.nextGaussian() * 0.05;
particle.motionZ = heading.zCoord * cloudSpeedMult * speedMult + rand.nextGaussian() * 0.05;
Minecraft.getMinecraft().effectRenderer.addEffect(particle);
}
for(int i = 0; i < sparkCount; i++) {
double speedMult = 0.85 + rand.nextDouble() * 0.3;
ParticleBlackPowderSpark particle = new ParticleBlackPowderSpark(world, x, y, z,
heading.xCoord * sparkSpeedMult * speedMult + rand.nextGaussian() * 0.02,
heading.yCoord * sparkSpeedMult * speedMult + rand.nextGaussian() * 0.02,
heading.zCoord * sparkSpeedMult * speedMult + rand.nextGaussian() * 0.02);
Minecraft.getMinecraft().effectRenderer.addEffect(particle);
}
}
}