    001    package net.minecraft.src;
    002
    003    import cpw.mods.fml.common.Side;
    004    import cpw.mods.fml.common.asm.SideOnly;
    005
    006    @SideOnly(Side.CLIENT)
    007    public class EntityDropParticleFX extends EntityFX
    008    {
    009        /** the material type for dropped items/blocks */
    010        private Material materialType;
    011
    012        /** The height of the current bob */
    013        private int bobTimer;
    014
    015        public EntityDropParticleFX(World par1World, double par2, double par4, double par6, Material par8Material)
    016        {
    017            super(par1World, par2, par4, par6, 0.0D, 0.0D, 0.0D);
    018            this.motionX = this.motionY = this.motionZ = 0.0D;
    019
    020            if (par8Material == Material.water)
    021            {
    022                this.particleRed = 0.0F;
    023                this.particleGreen = 0.0F;
    024                this.particleBlue = 1.0F;
    025            }
    026            else
    027            {
    028                this.particleRed = 1.0F;
    029                this.particleGreen = 0.0F;
    030                this.particleBlue = 0.0F;
    031            }
    032
    033            this.setParticleTextureIndex(113);
    034            this.setSize(0.01F, 0.01F);
    035            this.particleGravity = 0.06F;
    036            this.materialType = par8Material;
    037            this.bobTimer = 40;
    038            this.particleMaxAge = (int)(64.0D / (Math.random() * 0.8D + 0.2D));
    039            this.motionX = this.motionY = this.motionZ = 0.0D;
    040        }
    041
    042        public int getBrightnessForRender(float par1)
    043        {
    044            return this.materialType == Material.water ? super.getBrightnessForRender(par1) : 257;
    045        }
    046
    047        /**
    048         * Gets how bright this entity is.
    049         */
    050        public float getBrightness(float par1)
    051        {
    052            return this.materialType == Material.water ? super.getBrightness(par1) : 1.0F;
    053        }
    054
    055        /**
    056         * Called to update the entity's position/logic.
    057         */
    058        public void onUpdate()
    059        {
    060            this.prevPosX = this.posX;
    061            this.prevPosY = this.posY;
    062            this.prevPosZ = this.posZ;
    063
    064            if (this.materialType == Material.water)
    065            {
    066                this.particleRed = 0.2F;
    067                this.particleGreen = 0.3F;
    068                this.particleBlue = 1.0F;
    069            }
    070            else
    071            {
    072                this.particleRed = 1.0F;
    073                this.particleGreen = 16.0F / (float)(40 - this.bobTimer + 16);
    074                this.particleBlue = 4.0F / (float)(40 - this.bobTimer + 8);
    075            }
    076
    077            this.motionY -= (double)this.particleGravity;
    078
    079            if (this.bobTimer-- > 0)
    080            {
    081                this.motionX *= 0.02D;
    082                this.motionY *= 0.02D;
    083                this.motionZ *= 0.02D;
    084                this.setParticleTextureIndex(113);
    085            }
    086            else
    087            {
    088                this.setParticleTextureIndex(112);
    089            }
    090
    091            this.moveEntity(this.motionX, this.motionY, this.motionZ);
    092            this.motionX *= 0.9800000190734863D;
    093            this.motionY *= 0.9800000190734863D;
    094            this.motionZ *= 0.9800000190734863D;
    095
    096            if (this.particleMaxAge-- <= 0)
    097            {
    098                this.setDead();
    099            }
    100
    101            if (this.onGround)
    102            {
    103                if (this.materialType == Material.water)
    104                {
    105                    this.setDead();
    106                    this.worldObj.spawnParticle("splash", this.posX, this.posY, this.posZ, 0.0D, 0.0D, 0.0D);
    107                }
    108                else
    109                {
    110                    this.setParticleTextureIndex(114);
    111                }
    112
    113                this.motionX *= 0.699999988079071D;
    114                this.motionZ *= 0.699999988079071D;
    115            }
    116
    117            Material var1 = this.worldObj.getBlockMaterial(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posY), MathHelper.floor_double(this.posZ));
    118
    119            if (var1.isLiquid() || var1.isSolid())
    120            {
    121                double var2 = (double)((float)(MathHelper.floor_double(this.posY) + 1) - BlockFluid.getFluidHeightPercent(this.worldObj.getBlockMetadata(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posY), MathHelper.floor_double(this.posZ))));
    122
    123                if (this.posY < var2)
    124                {
    125                    this.setDead();
    126                }
    127            }
    128        }
    129    }