001package net.minecraft.tileentity; 002 003import java.util.Random; 004import net.minecraft.entity.player.EntityPlayer; 005import net.minecraft.nbt.NBTTagCompound; 006 007public class TileEntityEnchantmentTable extends TileEntity 008{ 009 /** Used by the render to make the book 'bounce' */ 010 public int tickCount; 011 012 /** Value used for determining how the page flip should look. */ 013 public float pageFlip; 014 015 /** The last tick's pageFlip value. */ 016 public float pageFlipPrev; 017 public float field_70373_d; 018 public float field_70374_e; 019 020 /** The amount that the book is open. */ 021 public float bookSpread; 022 023 /** The amount that the book is open. */ 024 public float bookSpreadPrev; 025 public float bookRotation2; 026 public float bookRotationPrev; 027 public float bookRotation; 028 private static Random rand = new Random(); 029 private String field_94136_s; 030 031 /** 032 * Writes a tile entity to NBT. 033 */ 034 public void writeToNBT(NBTTagCompound par1NBTTagCompound) 035 { 036 super.writeToNBT(par1NBTTagCompound); 037 038 if (this.func_94135_b()) 039 { 040 par1NBTTagCompound.setString("CustomName", this.field_94136_s); 041 } 042 } 043 044 /** 045 * Reads a tile entity from NBT. 046 */ 047 public void readFromNBT(NBTTagCompound par1NBTTagCompound) 048 { 049 super.readFromNBT(par1NBTTagCompound); 050 051 if (par1NBTTagCompound.hasKey("CustomName")) 052 { 053 this.field_94136_s = par1NBTTagCompound.getString("CustomName"); 054 } 055 } 056 057 /** 058 * Allows the entity to update its state. Overridden in most subclasses, e.g. the mob spawner uses this to count 059 * ticks and creates a new spawn inside its implementation. 060 */ 061 public void updateEntity() 062 { 063 super.updateEntity(); 064 this.bookSpreadPrev = this.bookSpread; 065 this.bookRotationPrev = this.bookRotation2; 066 EntityPlayer entityplayer = this.worldObj.getClosestPlayer((double)((float)this.xCoord + 0.5F), (double)((float)this.yCoord + 0.5F), (double)((float)this.zCoord + 0.5F), 3.0D); 067 068 if (entityplayer != null) 069 { 070 double d0 = entityplayer.posX - (double)((float)this.xCoord + 0.5F); 071 double d1 = entityplayer.posZ - (double)((float)this.zCoord + 0.5F); 072 this.bookRotation = (float)Math.atan2(d1, d0); 073 this.bookSpread += 0.1F; 074 075 if (this.bookSpread < 0.5F || rand.nextInt(40) == 0) 076 { 077 float f = this.field_70373_d; 078 079 do 080 { 081 this.field_70373_d += (float)(rand.nextInt(4) - rand.nextInt(4)); 082 } 083 while (f == this.field_70373_d); 084 } 085 } 086 else 087 { 088 this.bookRotation += 0.02F; 089 this.bookSpread -= 0.1F; 090 } 091 092 while (this.bookRotation2 >= (float)Math.PI) 093 { 094 this.bookRotation2 -= ((float)Math.PI * 2F); 095 } 096 097 while (this.bookRotation2 < -(float)Math.PI) 098 { 099 this.bookRotation2 += ((float)Math.PI * 2F); 100 } 101 102 while (this.bookRotation >= (float)Math.PI) 103 { 104 this.bookRotation -= ((float)Math.PI * 2F); 105 } 106 107 while (this.bookRotation < -(float)Math.PI) 108 { 109 this.bookRotation += ((float)Math.PI * 2F); 110 } 111 112 float f1; 113 114 for (f1 = this.bookRotation - this.bookRotation2; f1 >= (float)Math.PI; f1 -= ((float)Math.PI * 2F)) 115 { 116 ; 117 } 118 119 while (f1 < -(float)Math.PI) 120 { 121 f1 += ((float)Math.PI * 2F); 122 } 123 124 this.bookRotation2 += f1 * 0.4F; 125 126 if (this.bookSpread < 0.0F) 127 { 128 this.bookSpread = 0.0F; 129 } 130 131 if (this.bookSpread > 1.0F) 132 { 133 this.bookSpread = 1.0F; 134 } 135 136 ++this.tickCount; 137 this.pageFlipPrev = this.pageFlip; 138 float f2 = (this.field_70373_d - this.pageFlip) * 0.4F; 139 float f3 = 0.2F; 140 141 if (f2 < -f3) 142 { 143 f2 = -f3; 144 } 145 146 if (f2 > f3) 147 { 148 f2 = f3; 149 } 150 151 this.field_70374_e += (f2 - this.field_70374_e) * 0.9F; 152 this.pageFlip += this.field_70374_e; 153 } 154 155 public String func_94133_a() 156 { 157 return this.func_94135_b() ? this.field_94136_s : "container.enchant"; 158 } 159 160 public boolean func_94135_b() 161 { 162 return this.field_94136_s != null && this.field_94136_s.length() > 0; 163 } 164 165 public void func_94134_a(String par1Str) 166 { 167 this.field_94136_s = par1Str; 168 } 169}