    001    package net.minecraft.src;
    002
    003    import java.util.Random;
    004
    005    public class TileEntityEnchantmentTable extends TileEntity
    006    {
    007        /** Used by the render to make the book 'bounce' */
    008        public int tickCount;
    009
    010        /** Value used for determining how the page flip should look. */
    011        public float pageFlip;
    012
    013        /** The last tick's pageFlip value. */
    014        public float pageFlipPrev;
    015        public float field_70373_d;
    016        public float field_70374_e;
    017
    018        /** The amount that the book is open. */
    019        public float bookSpread;
    020
    021        /** The amount that the book is open. */
    022        public float bookSpreadPrev;
    023        public float bookRotation2;
    024        public float bookRotationPrev;
    025        public float bookRotation;
    026        private static Random rand = new Random();
    027
    028        /**
    029         * Allows the entity to update its state. Overridden in most subclasses, e.g. the mob spawner uses this to count
    030         * ticks and creates a new spawn inside its implementation.
    031         */
    032        public void updateEntity()
    033        {
    034            super.updateEntity();
    035            this.bookSpreadPrev = this.bookSpread;
    036            this.bookRotationPrev = this.bookRotation2;
    037            EntityPlayer var1 = this.worldObj.getClosestPlayer((double)((float)this.xCoord + 0.5F), (double)((float)this.yCoord + 0.5F), (double)((float)this.zCoord + 0.5F), 3.0D);
    038
    039            if (var1 != null)
    040            {
    041                double var2 = var1.posX - (double)((float)this.xCoord + 0.5F);
    042                double var4 = var1.posZ - (double)((float)this.zCoord + 0.5F);
    043                this.bookRotation = (float)Math.atan2(var4, var2);
    044                this.bookSpread += 0.1F;
    045
    046                if (this.bookSpread < 0.5F || rand.nextInt(40) == 0)
    047                {
    048                    float var6 = this.field_70373_d;
    049
    050                    do
    051                    {
    052                        this.field_70373_d += (float)(rand.nextInt(4) - rand.nextInt(4));
    053                    }
    054                    while (var6 == this.field_70373_d);
    055                }
    056            }
    057            else
    058            {
    059                this.bookRotation += 0.02F;
    060                this.bookSpread -= 0.1F;
    061            }
    062
    063            while (this.bookRotation2 >= (float)Math.PI)
    064            {
    065                this.bookRotation2 -= ((float)Math.PI * 2F);
    066            }
    067
    068            while (this.bookRotation2 < -(float)Math.PI)
    069            {
    070                this.bookRotation2 += ((float)Math.PI * 2F);
    071            }
    072
    073            while (this.bookRotation >= (float)Math.PI)
    074            {
    075                this.bookRotation -= ((float)Math.PI * 2F);
    076            }
    077
    078            while (this.bookRotation < -(float)Math.PI)
    079            {
    080                this.bookRotation += ((float)Math.PI * 2F);
    081            }
    082
    083            float var7;
    084
    085            for (var7 = this.bookRotation - this.bookRotation2; var7 >= (float)Math.PI; var7 -= ((float)Math.PI * 2F))
    086            {
    087                ;
    088            }
    089
    090            while (var7 < -(float)Math.PI)
    091            {
    092                var7 += ((float)Math.PI * 2F);
    093            }
    094
    095            this.bookRotation2 += var7 * 0.4F;
    096
    097            if (this.bookSpread < 0.0F)
    098            {
    099                this.bookSpread = 0.0F;
    100            }
    101
    102            if (this.bookSpread > 1.0F)
    103            {
    104                this.bookSpread = 1.0F;
    105            }
    106
    107            ++this.tickCount;
    108            this.pageFlipPrev = this.pageFlip;
    109            float var3 = (this.field_70373_d - this.pageFlip) * 0.4F;
    110            float var8 = 0.2F;
    111
    112            if (var3 < -var8)
    113            {
    114                var3 = -var8;
    115            }
    116
    117            if (var3 > var8)
    118            {
    119                var3 = var8;
    120            }
    121
    122            this.field_70374_e += (var3 - this.field_70374_e) * 0.9F;
    123            this.pageFlip += this.field_70374_e;
    124        }
    125    }