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