001package net.minecraft.client.particle;
002
003import cpw.mods.fml.relauncher.Side;
004import cpw.mods.fml.relauncher.SideOnly;
005import net.minecraft.client.renderer.Tessellator;
006import net.minecraft.util.AxisAlignedBB;
007import net.minecraft.world.World;
008
009@SideOnly(Side.CLIENT)
010public class EntityFireworkSparkFX extends EntityFX
011{
012    private int field_92049_a = 160;
013    private boolean field_92054_ax;
014    private boolean field_92048_ay;
015    private final EffectRenderer field_92047_az;
016    private float field_92050_aA;
017    private float field_92051_aB;
018    private float field_92052_aC;
019    private boolean field_92053_aD;
020
021    public EntityFireworkSparkFX(World par1World, double par2, double par4, double par6, double par8, double par10, double par12, EffectRenderer par14EffectRenderer)
022    {
023        super(par1World, par2, par4, par6);
024        this.motionX = par8;
025        this.motionY = par10;
026        this.motionZ = par12;
027        this.field_92047_az = par14EffectRenderer;
028        this.particleScale *= 0.75F;
029        this.particleMaxAge = 48 + this.rand.nextInt(12);
030        this.noClip = false;
031    }
032
033    public void func_92045_e(boolean par1)
034    {
035        this.field_92054_ax = par1;
036    }
037
038    public void func_92043_f(boolean par1)
039    {
040        this.field_92048_ay = par1;
041    }
042
043    public void func_92044_a(int par1)
044    {
045        float f = (float)((par1 & 16711680) >> 16) / 255.0F;
046        float f1 = (float)((par1 & 65280) >> 8) / 255.0F;
047        float f2 = (float)((par1 & 255) >> 0) / 255.0F;
048        float f3 = 1.0F;
049        this.setRBGColorF(f * f3, f1 * f3, f2 * f3);
050    }
051
052    public void func_92046_g(int par1)
053    {
054        this.field_92050_aA = (float)((par1 & 16711680) >> 16) / 255.0F;
055        this.field_92051_aB = (float)((par1 & 65280) >> 8) / 255.0F;
056        this.field_92052_aC = (float)((par1 & 255) >> 0) / 255.0F;
057        this.field_92053_aD = true;
058    }
059
060    /**
061     * returns the bounding box for this entity
062     */
063    public AxisAlignedBB getBoundingBox()
064    {
065        return null;
066    }
067
068    /**
069     * Returns true if this entity should push and be pushed by other entities when colliding.
070     */
071    public boolean canBePushed()
072    {
073        return false;
074    }
075
076    public void renderParticle(Tessellator par1Tessellator, float par2, float par3, float par4, float par5, float par6, float par7)
077    {
078        if (!this.field_92048_ay || this.particleAge < this.particleMaxAge / 3 || (this.particleAge + this.particleMaxAge) / 3 % 2 == 0)
079        {
080            super.renderParticle(par1Tessellator, par2, par3, par4, par5, par6, par7);
081        }
082    }
083
084    /**
085     * Called to update the entity's position/logic.
086     */
087    public void onUpdate()
088    {
089        this.prevPosX = this.posX;
090        this.prevPosY = this.posY;
091        this.prevPosZ = this.posZ;
092
093        if (this.particleAge++ >= this.particleMaxAge)
094        {
095            this.setDead();
096        }
097
098        if (this.particleAge > this.particleMaxAge / 2)
099        {
100            this.setAlphaF(1.0F - ((float)this.particleAge - (float)(this.particleMaxAge / 2)) / (float)this.particleMaxAge);
101
102            if (this.field_92053_aD)
103            {
104                this.particleRed += (this.field_92050_aA - this.particleRed) * 0.2F;
105                this.particleGreen += (this.field_92051_aB - this.particleGreen) * 0.2F;
106                this.particleBlue += (this.field_92052_aC - this.particleBlue) * 0.2F;
107            }
108        }
109
110        this.setParticleTextureIndex(this.field_92049_a + (7 - this.particleAge * 8 / this.particleMaxAge));
111        this.motionY -= 0.004D;
112        this.moveEntity(this.motionX, this.motionY, this.motionZ);
113        this.motionX *= 0.9100000262260437D;
114        this.motionY *= 0.9100000262260437D;
115        this.motionZ *= 0.9100000262260437D;
116
117        if (this.onGround)
118        {
119            this.motionX *= 0.699999988079071D;
120            this.motionZ *= 0.699999988079071D;
121        }
122
123        if (this.field_92054_ax && this.particleAge < this.particleMaxAge / 2 && (this.particleAge + this.particleMaxAge) % 2 == 0)
124        {
125            EntityFireworkSparkFX entityfireworksparkfx = new EntityFireworkSparkFX(this.worldObj, this.posX, this.posY, this.posZ, 0.0D, 0.0D, 0.0D, this.field_92047_az);
126            entityfireworksparkfx.setRBGColorF(this.particleRed, this.particleGreen, this.particleBlue);
127            entityfireworksparkfx.particleAge = entityfireworksparkfx.particleMaxAge / 2;
128
129            if (this.field_92053_aD)
130            {
131                entityfireworksparkfx.field_92053_aD = true;
132                entityfireworksparkfx.field_92050_aA = this.field_92050_aA;
133                entityfireworksparkfx.field_92051_aB = this.field_92051_aB;
134                entityfireworksparkfx.field_92052_aC = this.field_92052_aC;
135            }
136
137            entityfireworksparkfx.field_92048_ay = this.field_92048_ay;
138            this.field_92047_az.addEffect(entityfireworksparkfx);
139        }
140    }
141
142    public int getBrightnessForRender(float par1)
143    {
144        return 15728880;
145    }
146
147    /**
148     * Gets how bright this entity is.
149     */
150    public float getBrightness(float par1)
151    {
152        return 1.0F;
153    }
154}