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 }