001    package net.minecraft.entity.monster;
002    
003    import cpw.mods.fml.relauncher.Side;
004    import cpw.mods.fml.relauncher.SideOnly;
005    import net.minecraft.item.Item;
006    import net.minecraft.world.World;
007    
008    public class EntityMagmaCube extends EntitySlime
009    {
010        public EntityMagmaCube(World par1World)
011        {
012            super(par1World);
013            this.texture = "/mob/lava.png";
014            this.isImmuneToFire = true;
015            this.landMovementFactor = 0.2F;
016        }
017    
018        /**
019         * Checks if the entity's current position is a valid location to spawn this entity.
020         */
021        public boolean getCanSpawnHere()
022        {
023            return this.worldObj.difficultySetting > 0 && this.worldObj.checkIfAABBIsClear(this.boundingBox) && this.worldObj.getCollidingBoundingBoxes(this, this.boundingBox).isEmpty() && !this.worldObj.isAnyLiquid(this.boundingBox);
024        }
025    
026        /**
027         * Returns the current armor value as determined by a call to InventoryPlayer.getTotalArmorValue
028         */
029        public int getTotalArmorValue()
030        {
031            return this.getSlimeSize() * 3;
032        }
033    
034        @SideOnly(Side.CLIENT)
035        public int getBrightnessForRender(float par1)
036        {
037            return 15728880;
038        }
039    
040        /**
041         * Gets how bright this entity is.
042         */
043        public float getBrightness(float par1)
044        {
045            return 1.0F;
046        }
047    
048        /**
049         * Returns the name of a particle effect that may be randomly created by EntitySlime.onUpdate()
050         */
051        protected String getSlimeParticle()
052        {
053            return "flame";
054        }
055    
056        protected EntitySlime createInstance()
057        {
058            return new EntityMagmaCube(this.worldObj);
059        }
060    
061        /**
062         * Returns the item ID for the item the mob drops on death.
063         */
064        protected int getDropItemId()
065        {
066            return Item.magmaCream.itemID;
067        }
068    
069        /**
070         * Drop 0-2 items of this living's type. @param par1 - Whether this entity has recently been hit by a player. @param
071         * par2 - Level of Looting used to kill this mob.
072         */
073        protected void dropFewItems(boolean par1, int par2)
074        {
075            int var3 = this.getDropItemId();
076    
077            if (var3 > 0 && this.getSlimeSize() > 1)
078            {
079                int var4 = this.rand.nextInt(4) - 2;
080    
081                if (par2 > 0)
082                {
083                    var4 += this.rand.nextInt(par2 + 1);
084                }
085    
086                for (int var5 = 0; var5 < var4; ++var5)
087                {
088                    this.dropItem(var3, 1);
089                }
090            }
091        }
092    
093        /**
094         * Returns true if the entity is on fire. Used by render to add the fire effect on rendering.
095         */
096        public boolean isBurning()
097        {
098            return false;
099        }
100    
101        /**
102         * Gets the amount of time the slime needs to wait between jumps.
103         */
104        protected int getJumpDelay()
105        {
106            return super.getJumpDelay() * 4;
107        }
108    
109        protected void func_70808_l()
110        {
111            this.field_70813_a *= 0.9F;
112        }
113    
114        /**
115         * Causes this entity to do an upwards motion (jumping).
116         */
117        protected void jump()
118        {
119            this.motionY = (double)(0.42F + (float)this.getSlimeSize() * 0.1F);
120            this.isAirBorne = true;
121        }
122    
123        /**
124         * Called when the mob is falling. Calculates and applies fall damage.
125         */
126        protected void fall(float par1) {}
127    
128        /**
129         * Indicates weather the slime is able to damage the player (based upon the slime's size)
130         */
131        protected boolean canDamagePlayer()
132        {
133            return true;
134        }
135    
136        /**
137         * Gets the amount of damage dealt to the player when "attacked" by the slime.
138         */
139        protected int getAttackStrength()
140        {
141            return super.getAttackStrength() + 2;
142        }
143    
144        /**
145         * Returns the sound this mob makes when it is hurt.
146         */
147        protected String getHurtSound()
148        {
149            return "mob.slime." + (this.getSlimeSize() > 1 ? "big" : "small");
150        }
151    
152        /**
153         * Returns the sound this mob makes on death.
154         */
155        protected String getDeathSound()
156        {
157            return "mob.slime." + (this.getSlimeSize() > 1 ? "big" : "small");
158        }
159    
160        /**
161         * Returns the name of the sound played when the slime jumps.
162         */
163        protected String getJumpSound()
164        {
165            return this.getSlimeSize() > 1 ? "mob.magmacube.big" : "mob.magmacube.small";
166        }
167    
168        /**
169         * Whether or not the current entity is in lava
170         */
171        public boolean handleLavaMovement()
172        {
173            return false;
174        }
175    
176        /**
177         * Returns true if the slime makes a sound when it lands after a jump (based upon the slime's size)
178         */
179        protected boolean makesSoundOnLand()
180        {
181            return true;
182        }
183    }