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 }