001 package net.minecraft.entity.passive;
002
003 import net.minecraft.block.material.Material;
004 import net.minecraft.entity.EntityCreature;
005 import net.minecraft.entity.player.EntityPlayer;
006 import net.minecraft.util.DamageSource;
007 import net.minecraft.world.World;
008
009 public abstract class EntityWaterMob extends EntityCreature implements IAnimals
010 {
011 public EntityWaterMob(World par1World)
012 {
013 super(par1World);
014 }
015
016 public boolean canBreatheUnderwater()
017 {
018 return true;
019 }
020
021 /**
022 * Checks if the entity's current position is a valid location to spawn this entity.
023 */
024 public boolean getCanSpawnHere()
025 {
026 return this.worldObj.checkIfAABBIsClear(this.boundingBox);
027 }
028
029 /**
030 * Get number of ticks, at least during which the living entity will be silent.
031 */
032 public int getTalkInterval()
033 {
034 return 120;
035 }
036
037 /**
038 * Determines if an entity can be despawned, used on idle far away entities
039 */
040 protected boolean canDespawn()
041 {
042 return true;
043 }
044
045 /**
046 * Get the experience points the entity currently has.
047 */
048 protected int getExperiencePoints(EntityPlayer par1EntityPlayer)
049 {
050 return 1 + this.worldObj.rand.nextInt(3);
051 }
052
053 /**
054 * Gets called every tick from main Entity class
055 */
056 public void onEntityUpdate()
057 {
058 int var1 = this.getAir();
059 super.onEntityUpdate();
060
061 if (this.isEntityAlive() && !this.isInsideOfMaterial(Material.water))
062 {
063 --var1;
064 this.setAir(var1);
065
066 if (this.getAir() == -20)
067 {
068 this.setAir(0);
069 this.attackEntityFrom(DamageSource.drown, 2);
070 }
071 }
072 else
073 {
074 this.setAir(300);
075 }
076 }
077 }