    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.shiftedIndex;
    067        }
    068
    069        /**
    070         * Drop 0-2 items of this living's type
    071         */
    072        protected void dropFewItems(boolean par1, int par2)
    073        {
    074            int var3 = this.getDropItemId();
    075
    076            if (var3 > 0 && this.getSlimeSize() > 1)
    077            {
    078                int var4 = this.rand.nextInt(4) - 2;
    079
    080                if (par2 > 0)
    081                {
    082                    var4 += this.rand.nextInt(par2 + 1);
    083                }
    084
    085                for (int var5 = 0; var5 < var4; ++var5)
    086                {
    087                    this.dropItem(var3, 1);
    088                }
    089            }
    090        }
    091
    092        /**
    093         * Returns true if the entity is on fire. Used by render to add the fire effect on rendering.
    094         */
    095        public boolean isBurning()
    096        {
    097            return false;
    098        }
    099
    100        /**
    101         * Gets the amount of time the slime needs to wait between jumps.
    102         */
    103        protected int getJumpDelay()
    104        {
    105            return super.getJumpDelay() * 4;
    106        }
    107
    108        protected void func_70808_l()
    109        {
    110            this.field_70813_a *= 0.9F;
    111        }
    112
    113        /**
    114         * Causes this entity to do an upwards motion (jumping).
    115         */
    116        protected void jump()
    117        {
    118            this.motionY = (double)(0.42F + (float)this.getSlimeSize() * 0.1F);
    119            this.isAirBorne = true;
    120        }
    121
    122        /**
    123         * Called when the mob is falling. Calculates and applies fall damage.
    124         */
    125        protected void fall(float par1) {}
    126
    127        /**
    128         * Indicates weather the slime is able to damage the player (based upon the slime's size)
    129         */
    130        protected boolean canDamagePlayer()
    131        {
    132            return true;
    133        }
    134
    135        /**
    136         * Gets the amount of damage dealt to the player when "attacked" by the slime.
    137         */
    138        protected int getAttackStrength()
    139        {
    140            return super.getAttackStrength() + 2;
    141        }
    142
    143        /**
    144         * Returns the sound this mob makes when it is hurt.
    145         */
    146        protected String getHurtSound()
    147        {
    148            return "mob.slime." + (this.getSlimeSize() > 1 ? "big" : "small");
    149        }
    150
    151        /**
    152         * Returns the sound this mob makes on death.
    153         */
    154        protected String getDeathSound()
    155        {
    156            return "mob.slime." + (this.getSlimeSize() > 1 ? "big" : "small");
    157        }
    158
    159        /**
    160         * Returns the name of the sound played when the slime jumps.
    161         */
    162        protected String getJumpSound()
    163        {
    164            return this.getSlimeSize() > 1 ? "mob.magmacube.big" : "mob.magmacube.small";
    165        }
    166
    167        /**
    168         * Whether or not the current entity is in lava
    169         */
    170        public boolean handleLavaMovement()
    171        {
    172            return false;
    173        }
    174
    175        /**
    176         * Returns true if the slime makes a sound when it lands after a jump (based upon the slime's size)
    177         */
    178        protected boolean makesSoundOnLand()
    179        {
    180            return true;
    181        }
    182    }