001package net.minecraft.tileentity;
002
003import java.util.Random;
004import net.minecraft.entity.player.EntityPlayer;
005
006public 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}