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