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 }