| package com.legacy.aether.entities.particles; |
| |
| import net.minecraft.client.particle.EntityFX; |
| import net.minecraft.client.renderer.Tessellator; |
| import net.minecraft.world.World; |
| |
| public class EntityCloudSmokeFX extends EntityFX { |
| |
| float smokeParticleScale; |
| |
| public double riseRate; |
| |
| public EntityCloudSmokeFX(World world, double x, double y, double z, double initialMotionX, double initialMotionY, double intialMotionZ, float size, float red, float blue, float green, double riseRate) { |
| super(world, x, y, z, 0.0D, 0.0D, 0.0D); |
| |
| this.motionX *= 0.10000000149011612D; |
| this.motionY *= 0.10000000149011612D; |
| this.motionZ *= 0.10000000149011612D; |
| this.motionX += initialMotionX; |
| this.motionY += initialMotionY; |
| this.motionZ += intialMotionZ; |
| this.particleRed = red; |
| this.particleBlue = blue; |
| this.particleGreen = green; |
| this.particleScale *= 0.75F; |
| this.particleScale *= size; |
| this.smokeParticleScale = this.particleScale; |
| this.particleMaxAge = (int) (8D / (Math.random() * 0.80000000000000004D + 0.20000000000000001D)); |
| this.particleMaxAge *= size / 4; |
| this.riseRate = riseRate; |
| } |
| |
| @Override |
| public void renderParticle(Tessellator renderer, float f, float f1, float f2, float f3, float f4, float f5) { |
| super.renderParticle(renderer, f, f1, f2, f3, f4, f5); |
| |
| float f6 = (((float) this.particleAge + f) / (float) this.particleMaxAge) * 32F; |
| if (f6 < 0.0F) { |
| f6 = 0.0F; |
| } |
| if (f6 > 1.0F) { |
| f6 = 1.0F; |
| } |
| this.particleScale = this.smokeParticleScale * f6; |
| float f61 = (float) this.particleTextureIndexX / 16.0F; |
| float f7 = f61 + 0.0624375F; |
| float f8 = (float) this.particleTextureIndexY / 16.0F; |
| float f9 = f8 + 0.0624375F; |
| float f10 = 0.1F * this.particleScale; |
| |
| if (this.particleIcon != null) { |
| f61 = this.particleIcon.getMinU(); |
| f7 = this.particleIcon.getMaxU(); |
| f8 = this.particleIcon.getMinV(); |
| f9 = this.particleIcon.getMaxV(); |
| } |
| |
| float f11 = (float) (this.prevPosX + (this.posX - this.prevPosX) * (double) f - interpPosX); |
| float f12 = (float) (this.prevPosY + (this.posY - this.prevPosY) * (double) f - interpPosY); |
| float f13 = (float) (this.prevPosZ + (this.posZ - this.prevPosZ) * (double) f - interpPosZ); |
| renderer.setColorRGBA_F(this.particleRed, this.particleGreen, this.particleBlue, this.particleAlpha); |
| renderer.addVertexWithUV((double) (f11 - f1 * f10 - f4 * f10), (double) (f12 - f2 * f10), (double) (f13 - f3 * f10 - f5 * f10), (double) f7, (double) f9); |
| renderer.addVertexWithUV((double) (f11 - f1 * f10 + f4 * f10), (double) (f12 + f2 * f10), (double) (f13 - f3 * f10 + f5 * f10), (double) f7, (double) f8); |
| renderer.addVertexWithUV((double) (f11 + f1 * f10 + f4 * f10), (double) (f12 + f2 * f10), (double) (f13 + f3 * f10 + f5 * f10), (double) f61, (double) f8); |
| renderer.addVertexWithUV((double) (f11 + f1 * f10 - f4 * f10), (double) (f12 - f2 * f10), (double) (f13 + f3 * f10 - f5 * f10), (double) f61, (double) f9); |
| } |
| |
| @Override |
| public void onUpdate() { |
| this.prevPosX = this.posX; |
| this.prevPosY = this.posY; |
| this.prevPosZ = this.posZ; |
| |
| if (this.particleAge++ >= this.particleMaxAge) { |
| this.setDead(); |
| } |
| |
| this.setParticleTextureIndex(7 - (this.particleAge * 8) / this.particleMaxAge); |
| this.motionY += this.riseRate; |
| |
| this.moveEntity(this.motionX, this.motionY, this.motionZ); |
| |
| if (this.posY == this.prevPosY) { |
| this.motionX *= 1.1000000000000001D; |
| this.motionZ *= 1.1000000000000001D; |
| } |
| |
| this.motionX *= 0.95999997854232788D; |
| this.motionY *= this.riseRate; |
| this.motionZ *= 0.95999997854232788D; |
| |
| if (this.isCollided) { |
| this.motionX *= 0.69999998807907104D; |
| this.motionZ *= 0.69999998807907104D; |
| } |
| } |
| |
| } |