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 }