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