001    package net.minecraft.src;
002    
003    public abstract class EntityAgeable extends EntityCreature
004    {
005        public EntityAgeable(World par1World)
006        {
007            super(par1World);
008        }
009    
010        protected void entityInit()
011        {
012            super.entityInit();
013            this.dataWatcher.addObject(12, new Integer(0));
014        }
015    
016        /**
017         * The age value may be negative or positive or zero. If it's negative, it get's incremented on each tick, if it's
018         * positive, it get's decremented each tick. Don't confuse this with EntityLiving.getAge. With a negative value the
019         * Entity is considered a child.
020         */
021        public int getGrowingAge()
022        {
023            return this.dataWatcher.getWatchableObjectInt(12);
024        }
025    
026        /**
027         * The age value may be negative or positive or zero. If it's negative, it get's incremented on each tick, if it's
028         * positive, it get's decremented each tick. With a negative value the Entity is considered a child.
029         */
030        public void setGrowingAge(int par1)
031        {
032            this.dataWatcher.updateObject(12, Integer.valueOf(par1));
033        }
034    
035        /**
036         * (abstract) Protected helper method to write subclass entity data to NBT.
037         */
038        public void writeEntityToNBT(NBTTagCompound par1NBTTagCompound)
039        {
040            super.writeEntityToNBT(par1NBTTagCompound);
041            par1NBTTagCompound.setInteger("Age", this.getGrowingAge());
042        }
043    
044        /**
045         * (abstract) Protected helper method to read subclass entity data from NBT.
046         */
047        public void readEntityFromNBT(NBTTagCompound par1NBTTagCompound)
048        {
049            super.readEntityFromNBT(par1NBTTagCompound);
050            this.setGrowingAge(par1NBTTagCompound.getInteger("Age"));
051        }
052    
053        /**
054         * Called frequently so the entity can update its state every tick as required. For example, zombies and skeletons
055         * use this to react to sunlight and start to burn.
056         */
057        public void onLivingUpdate()
058        {
059            super.onLivingUpdate();
060            int var1 = this.getGrowingAge();
061    
062            if (var1 < 0)
063            {
064                ++var1;
065                this.setGrowingAge(var1);
066            }
067            else if (var1 > 0)
068            {
069                --var1;
070                this.setGrowingAge(var1);
071            }
072        }
073    
074        /**
075         * If Animal, checks if the age timer is negative
076         */
077        public boolean isChild()
078        {
079            return this.getGrowingAge() < 0;
080        }
081    }