package com.cricketcraft.chisel.entity.fx; import net.minecraft.client.particle.EntityFX; import net.minecraft.client.renderer.Tessellator; import net.minecraft.util.IIcon; import net.minecraft.world.World; import org.lwjgl.opengl.GL11; import com.cricketcraft.chisel.block.BlockSnakestoneObsidian; import com.cricketcraft.chisel.init.ChiselItems; import com.cricketcraft.chisel.utils.General; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; public class EntityBallOMossFX extends EntityFX { BlockSnakestoneObsidian block; double tx, ty, tz; double speed; float u0, u1, v0, v1; IIcon icon; IIcon iconPlus = new IIcon() { @Override @SideOnly(Side.CLIENT) public int getIconWidth() { return 0; } @Override @SideOnly(Side.CLIENT) public int getIconHeight() { return 0; } @Override @SideOnly(Side.CLIENT) public float getMinU() { return u0; } @Override @SideOnly(Side.CLIENT) public float getMaxU() { return u1; } @Override @SideOnly(Side.CLIENT) public float getInterpolatedU(double d0) { return (float) (u0 + d0 * (u1 - u0) / 16.0f); } @Override @SideOnly(Side.CLIENT) public float getMinV() { return v0; } @Override @SideOnly(Side.CLIENT) public float getMaxV() { return v1; } @Override @SideOnly(Side.CLIENT) public float getInterpolatedV(double d0) { return (float) (v0 + d0 * (v1 - v0) / 16.0f); } @Override @SideOnly(Side.CLIENT) public String getIconName() { return ""; } }; public EntityBallOMossFX(World world, double x, double y, double z) { super(world, x, y + 0.5, z, 0, 0, 0); particleScale = 0.5f + 0.5f * General.rand.nextFloat(); speed = 0.4 + 0.4 * General.rand.nextDouble(); particleMaxAge = (int) (General.rand.nextDouble() * 10.0) + 5; if (General.rand.nextInt(10) == 0) particleMaxAge += General.rand.nextDouble() * 40.0; motionX = (General.rand.nextDouble() - 0.5) * 0.7; motionY = (General.rand.nextDouble() * 0.5) * 0.7; motionZ = (General.rand.nextDouble() - 0.5) * 0.7; particleGravity = 2.0f; // setParticleIcon(block.particles[General.rand.nextInt(block.particles.length)]); icon = ChiselItems.ballomoss.getIconFromDamage(0); float width = 4.0f + General.rand.nextFloat() * 8.0f; float uu = General.rand.nextFloat() * (16.0f - width); float vv = General.rand.nextFloat() * (16.0f - width); u0 = icon.getInterpolatedU(uu); u1 = icon.getInterpolatedU(uu + width); v0 = icon.getInterpolatedV(vv); v1 = icon.getInterpolatedV(vv + width); setParticleIcon(iconPlus); } @Override public int getFXLayer() { return 2; } @Override public void renderParticle(Tessellator tessellator, float partialTick, float rotX, float rotXZ, float rotZ, float rotYZ, float rotXY) { GL11.glDepthMask(false); GL11.glEnable(3042); GL11.glBlendFunc(770, 771); super.renderParticle(tessellator, partialTick, rotX, rotXZ, rotZ, rotYZ, rotXY); } @Override public void onUpdate() { super.onUpdate(); double remaining = particleMaxAge - particleAge; if (remaining < 5) { particleAlpha = (float) (remaining / 5.0); } else { particleAlpha = 1.0f; } } }