001 package net.minecraft.src;
002
003 import cpw.mods.fml.common.Side;
004 import cpw.mods.fml.common.asm.SideOnly;
005 import java.util.Random;
006 import org.lwjgl.opengl.GL11;
007 import org.lwjgl.opengl.GL12;
008 import org.lwjgl.util.glu.GLU;
009
010 @SideOnly(Side.CLIENT)
011 public class GuiEnchantment extends GuiContainer
012 {
013 /** The book model used on the GUI. */
014 private static ModelBook bookModel = new ModelBook();
015 private Random rand = new Random();
016
017 /** ContainerEnchantment object associated with this gui */
018 private ContainerEnchantment containerEnchantment;
019 public int field_74214_o;
020 public float field_74213_p;
021 public float field_74212_q;
022 public float field_74211_r;
023 public float field_74210_s;
024 public float field_74209_t;
025 public float field_74208_u;
026 ItemStack theItemStack;
027
028 public GuiEnchantment(InventoryPlayer par1InventoryPlayer, World par2World, int par3, int par4, int par5)
029 {
030 super(new ContainerEnchantment(par1InventoryPlayer, par2World, par3, par4, par5));
031 this.containerEnchantment = (ContainerEnchantment)this.inventorySlots;
032 }
033
034 /**
035 * Draw the foreground layer for the GuiContainer (everything in front of the items)
036 */
037 protected void drawGuiContainerForegroundLayer(int par1, int par2)
038 {
039 this.fontRenderer.drawString(StatCollector.translateToLocal("container.enchant"), 12, 6, 4210752);
040 this.fontRenderer.drawString(StatCollector.translateToLocal("container.inventory"), 8, this.ySize - 96 + 2, 4210752);
041 }
042
043 /**
044 * Called from the main game loop to update the screen.
045 */
046 public void updateScreen()
047 {
048 super.updateScreen();
049 this.func_74205_h();
050 }
051
052 /**
053 * Called when the mouse is clicked.
054 */
055 protected void mouseClicked(int par1, int par2, int par3)
056 {
057 super.mouseClicked(par1, par2, par3);
058 int var4 = (this.width - this.xSize) / 2;
059 int var5 = (this.height - this.ySize) / 2;
060
061 for (int var6 = 0; var6 < 3; ++var6)
062 {
063 int var7 = par1 - (var4 + 60);
064 int var8 = par2 - (var5 + 14 + 19 * var6);
065
066 if (var7 >= 0 && var8 >= 0 && var7 < 108 && var8 < 19 && this.containerEnchantment.enchantItem(this.mc.thePlayer, var6))
067 {
068 this.mc.playerController.sendEnchantPacket(this.containerEnchantment.windowId, var6);
069 }
070 }
071 }
072
073 /**
074 * Draw the background layer for the GuiContainer (everything behind the items)
075 */
076 protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3)
077 {
078 int var4 = this.mc.renderEngine.getTexture("/gui/enchant.png");
079 GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
080 this.mc.renderEngine.bindTexture(var4);
081 int var5 = (this.width - this.xSize) / 2;
082 int var6 = (this.height - this.ySize) / 2;
083 this.drawTexturedModalRect(var5, var6, 0, 0, this.xSize, this.ySize);
084 GL11.glPushMatrix();
085 GL11.glMatrixMode(GL11.GL_PROJECTION);
086 GL11.glPushMatrix();
087 GL11.glLoadIdentity();
088 ScaledResolution var7 = new ScaledResolution(this.mc.gameSettings, this.mc.displayWidth, this.mc.displayHeight);
089 GL11.glViewport((var7.getScaledWidth() - 320) / 2 * var7.getScaleFactor(), (var7.getScaledHeight() - 240) / 2 * var7.getScaleFactor(), 320 * var7.getScaleFactor(), 240 * var7.getScaleFactor());
090 GL11.glTranslatef(-0.34F, 0.23F, 0.0F);
091 GLU.gluPerspective(90.0F, 1.3333334F, 9.0F, 80.0F);
092 float var8 = 1.0F;
093 GL11.glMatrixMode(GL11.GL_MODELVIEW);
094 GL11.glLoadIdentity();
095 RenderHelper.enableStandardItemLighting();
096 GL11.glTranslatef(0.0F, 3.3F, -16.0F);
097 GL11.glScalef(var8, var8, var8);
098 float var9 = 5.0F;
099 GL11.glScalef(var9, var9, var9);
100 GL11.glRotatef(180.0F, 0.0F, 0.0F, 1.0F);
101 this.mc.renderEngine.bindTexture(this.mc.renderEngine.getTexture("/item/book.png"));
102 GL11.glRotatef(20.0F, 1.0F, 0.0F, 0.0F);
103 float var10 = this.field_74208_u + (this.field_74209_t - this.field_74208_u) * par1;
104 GL11.glTranslatef((1.0F - var10) * 0.2F, (1.0F - var10) * 0.1F, (1.0F - var10) * 0.25F);
105 GL11.glRotatef(-(1.0F - var10) * 90.0F - 90.0F, 0.0F, 1.0F, 0.0F);
106 GL11.glRotatef(180.0F, 1.0F, 0.0F, 0.0F);
107 float var11 = this.field_74212_q + (this.field_74213_p - this.field_74212_q) * par1 + 0.25F;
108 float var12 = this.field_74212_q + (this.field_74213_p - this.field_74212_q) * par1 + 0.75F;
109 var11 = (var11 - (float)MathHelper.truncateDoubleToInt((double)var11)) * 1.6F - 0.3F;
110 var12 = (var12 - (float)MathHelper.truncateDoubleToInt((double)var12)) * 1.6F - 0.3F;
111
112 if (var11 < 0.0F)
113 {
114 var11 = 0.0F;
115 }
116
117 if (var12 < 0.0F)
118 {
119 var12 = 0.0F;
120 }
121
122 if (var11 > 1.0F)
123 {
124 var11 = 1.0F;
125 }
126
127 if (var12 > 1.0F)
128 {
129 var12 = 1.0F;
130 }
131
132 GL11.glEnable(GL12.GL_RESCALE_NORMAL);
133 bookModel.render((Entity)null, 0.0F, var11, var12, var10, 0.0F, 0.0625F);
134 GL11.glDisable(GL12.GL_RESCALE_NORMAL);
135 RenderHelper.disableStandardItemLighting();
136 GL11.glMatrixMode(GL11.GL_PROJECTION);
137 GL11.glViewport(0, 0, this.mc.displayWidth, this.mc.displayHeight);
138 GL11.glPopMatrix();
139 GL11.glMatrixMode(GL11.GL_MODELVIEW);
140 GL11.glPopMatrix();
141 RenderHelper.disableStandardItemLighting();
142 GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
143 this.mc.renderEngine.bindTexture(var4);
144 EnchantmentNameParts.instance.setRandSeed(this.containerEnchantment.nameSeed);
145
146 for (int var13 = 0; var13 < 3; ++var13)
147 {
148 String var14 = EnchantmentNameParts.instance.generateRandomEnchantName();
149 this.zLevel = 0.0F;
150 this.mc.renderEngine.bindTexture(var4);
151 int var15 = this.containerEnchantment.enchantLevels[var13];
152 GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
153
154 if (var15 == 0)
155 {
156 this.drawTexturedModalRect(var5 + 60, var6 + 14 + 19 * var13, 0, 185, 108, 19);
157 }
158 else
159 {
160 String var16 = "" + var15;
161 FontRenderer var17 = this.mc.standardGalacticFontRenderer;
162 int var18 = 6839882;
163
164 if (this.mc.thePlayer.experienceLevel < var15 && !this.mc.thePlayer.capabilities.isCreativeMode)
165 {
166 this.drawTexturedModalRect(var5 + 60, var6 + 14 + 19 * var13, 0, 185, 108, 19);
167 var17.drawSplitString(var14, var5 + 62, var6 + 16 + 19 * var13, 104, (var18 & 16711422) >> 1);
168 var17 = this.mc.fontRenderer;
169 var18 = 4226832;
170 var17.drawStringWithShadow(var16, var5 + 62 + 104 - var17.getStringWidth(var16), var6 + 16 + 19 * var13 + 7, var18);
171 }
172 else
173 {
174 int var19 = par2 - (var5 + 60);
175 int var20 = par3 - (var6 + 14 + 19 * var13);
176
177 if (var19 >= 0 && var20 >= 0 && var19 < 108 && var20 < 19)
178 {
179 this.drawTexturedModalRect(var5 + 60, var6 + 14 + 19 * var13, 0, 204, 108, 19);
180 var18 = 16777088;
181 }
182 else
183 {
184 this.drawTexturedModalRect(var5 + 60, var6 + 14 + 19 * var13, 0, 166, 108, 19);
185 }
186
187 var17.drawSplitString(var14, var5 + 62, var6 + 16 + 19 * var13, 104, var18);
188 var17 = this.mc.fontRenderer;
189 var18 = 8453920;
190 var17.drawStringWithShadow(var16, var5 + 62 + 104 - var17.getStringWidth(var16), var6 + 16 + 19 * var13 + 7, var18);
191 }
192 }
193 }
194 }
195
196 public void func_74205_h()
197 {
198 ItemStack var1 = this.inventorySlots.getSlot(0).getStack();
199
200 if (!ItemStack.areItemStacksEqual(var1, this.theItemStack))
201 {
202 this.theItemStack = var1;
203
204 do
205 {
206 this.field_74211_r += (float)(this.rand.nextInt(4) - this.rand.nextInt(4));
207 }
208 while (this.field_74213_p <= this.field_74211_r + 1.0F && this.field_74213_p >= this.field_74211_r - 1.0F);
209 }
210
211 ++this.field_74214_o;
212 this.field_74212_q = this.field_74213_p;
213 this.field_74208_u = this.field_74209_t;
214 boolean var2 = false;
215
216 for (int var3 = 0; var3 < 3; ++var3)
217 {
218 if (this.containerEnchantment.enchantLevels[var3] != 0)
219 {
220 var2 = true;
221 }
222 }
223
224 if (var2)
225 {
226 this.field_74209_t += 0.2F;
227 }
228 else
229 {
230 this.field_74209_t -= 0.2F;
231 }
232
233 if (this.field_74209_t < 0.0F)
234 {
235 this.field_74209_t = 0.0F;
236 }
237
238 if (this.field_74209_t > 1.0F)
239 {
240 this.field_74209_t = 1.0F;
241 }
242
243 float var5 = (this.field_74211_r - this.field_74213_p) * 0.4F;
244 float var4 = 0.2F;
245
246 if (var5 < -var4)
247 {
248 var5 = -var4;
249 }
250
251 if (var5 > var4)
252 {
253 var5 = var4;
254 }
255
256 this.field_74210_s += (var5 - this.field_74210_s) * 0.9F;
257 this.field_74213_p += this.field_74210_s;
258 }
259 }