001 package net.minecraft.client.gui.inventory; 002 003 import cpw.mods.fml.relauncher.Side; 004 import cpw.mods.fml.relauncher.SideOnly; 005 import java.io.ByteArrayOutputStream; 006 import java.io.DataOutputStream; 007 import java.util.Iterator; 008 import net.minecraft.client.gui.GuiButton; 009 import net.minecraft.client.gui.GuiScreen; 010 import net.minecraft.client.renderer.RenderHelper; 011 import net.minecraft.entity.player.InventoryPlayer; 012 import net.minecraft.inventory.ContainerBeacon; 013 import net.minecraft.item.Item; 014 import net.minecraft.item.ItemStack; 015 import net.minecraft.network.packet.Packet250CustomPayload; 016 import net.minecraft.tileentity.TileEntityBeacon; 017 import net.minecraft.util.StatCollector; 018 import org.lwjgl.opengl.GL11; 019 020 @SideOnly(Side.CLIENT) 021 public class GuiBeacon extends GuiContainer 022 { 023 private TileEntityBeacon beacon; 024 private GuiBeaconButtonConfirm beaconConfirmButton; 025 private boolean buttonsNotDrawn; 026 027 public GuiBeacon(InventoryPlayer par1, TileEntityBeacon par2) 028 { 029 super(new ContainerBeacon(par1, par2)); 030 this.beacon = par2; 031 this.xSize = 230; 032 this.ySize = 219; 033 } 034 035 /** 036 * Adds the buttons (and other controls) to the screen in question. 037 */ 038 public void initGui() 039 { 040 super.initGui(); 041 this.controlList.add(this.beaconConfirmButton = new GuiBeaconButtonConfirm(this, -1, this.guiLeft + 164, this.guiTop + 107)); 042 this.controlList.add(new GuiBeaconButtonCancel(this, -2, this.guiLeft + 190, this.guiTop + 107)); 043 this.buttonsNotDrawn = true; 044 this.beaconConfirmButton.enabled = false; 045 } 046 047 /** 048 * Called from the main game loop to update the screen. 049 */ 050 public void updateScreen() 051 { 052 super.updateScreen(); 053 054 if (this.buttonsNotDrawn && this.beacon.getLevels() >= 0) 055 { 056 this.buttonsNotDrawn = false; 057 int var2; 058 int var3; 059 int var4; 060 int var5; 061 GuiBeaconButtonPower var6; 062 063 for (int var1 = 0; var1 <= 2; ++var1) 064 { 065 var2 = TileEntityBeacon.effectsList[var1].length; 066 var3 = var2 * 22 + (var2 - 1) * 2; 067 068 for (var4 = 0; var4 < var2; ++var4) 069 { 070 var5 = TileEntityBeacon.effectsList[var1][var4].id; 071 var6 = new GuiBeaconButtonPower(this, var1 << 8 | var5, this.guiLeft + 76 + var4 * 24 - var3 / 2, this.guiTop + 22 + var1 * 25, var5, var1); 072 this.controlList.add(var6); 073 074 if (var1 >= this.beacon.getLevels()) 075 { 076 var6.enabled = false; 077 } 078 else if (var5 == this.beacon.getPrimaryEffect()) 079 { 080 var6.func_82254_b(true); 081 } 082 } 083 } 084 085 byte var7 = 3; 086 var2 = TileEntityBeacon.effectsList[var7].length + 1; 087 var3 = var2 * 22 + (var2 - 1) * 2; 088 089 for (var4 = 0; var4 < var2 - 1; ++var4) 090 { 091 var5 = TileEntityBeacon.effectsList[var7][var4].id; 092 var6 = new GuiBeaconButtonPower(this, var7 << 8 | var5, this.guiLeft + 167 + var4 * 24 - var3 / 2, this.guiTop + 47, var5, var7); 093 this.controlList.add(var6); 094 095 if (var7 >= this.beacon.getLevels()) 096 { 097 var6.enabled = false; 098 } 099 else if (var5 == this.beacon.getSecondaryEffect()) 100 { 101 var6.func_82254_b(true); 102 } 103 } 104 105 if (this.beacon.getPrimaryEffect() > 0) 106 { 107 GuiBeaconButtonPower var8 = new GuiBeaconButtonPower(this, var7 << 8 | this.beacon.getPrimaryEffect(), this.guiLeft + 167 + (var2 - 1) * 24 - var3 / 2, this.guiTop + 47, this.beacon.getPrimaryEffect(), var7); 108 this.controlList.add(var8); 109 110 if (var7 >= this.beacon.getLevels()) 111 { 112 var8.enabled = false; 113 } 114 else if (this.beacon.getPrimaryEffect() == this.beacon.getSecondaryEffect()) 115 { 116 var8.func_82254_b(true); 117 } 118 } 119 } 120 121 this.beaconConfirmButton.enabled = this.beacon.getStackInSlot(0) != null && this.beacon.getPrimaryEffect() > 0; 122 } 123 124 /** 125 * Fired when a control is clicked. This is the equivalent of ActionListener.actionPerformed(ActionEvent e). 126 */ 127 protected void actionPerformed(GuiButton par1GuiButton) 128 { 129 if (par1GuiButton.id == -2) 130 { 131 this.mc.displayGuiScreen((GuiScreen)null); 132 } 133 else if (par1GuiButton.id == -1) 134 { 135 String var2 = "MC|Beacon"; 136 ByteArrayOutputStream var3 = new ByteArrayOutputStream(); 137 DataOutputStream var4 = new DataOutputStream(var3); 138 139 try 140 { 141 var4.writeInt(this.beacon.getPrimaryEffect()); 142 var4.writeInt(this.beacon.getSecondaryEffect()); 143 this.mc.getSendQueue().addToSendQueue(new Packet250CustomPayload(var2, var3.toByteArray())); 144 } 145 catch (Exception var6) 146 { 147 var6.printStackTrace(); 148 } 149 150 this.mc.displayGuiScreen((GuiScreen)null); 151 } 152 else if (par1GuiButton instanceof GuiBeaconButtonPower) 153 { 154 if (((GuiBeaconButtonPower)par1GuiButton).func_82255_b()) 155 { 156 return; 157 } 158 159 int var7 = par1GuiButton.id; 160 int var8 = var7 & 255; 161 int var9 = var7 >> 8; 162 163 if (var9 < 3) 164 { 165 this.beacon.func_82128_d(var8); 166 } 167 else 168 { 169 this.beacon.func_82127_e(var8); 170 } 171 172 this.controlList.clear(); 173 this.initGui(); 174 this.updateScreen(); 175 } 176 } 177 178 /** 179 * Draw the foreground layer for the GuiContainer (everything in front of the items) 180 */ 181 protected void drawGuiContainerForegroundLayer(int par1, int par2) 182 { 183 RenderHelper.disableStandardItemLighting(); 184 this.drawCenteredString(this.fontRenderer, StatCollector.translateToLocal("tile.beacon.primary"), 62, 10, 14737632); 185 this.drawCenteredString(this.fontRenderer, StatCollector.translateToLocal("tile.beacon.secondary"), 169, 10, 14737632); 186 Iterator var3 = this.controlList.iterator(); 187 188 while (var3.hasNext()) 189 { 190 GuiButton var4 = (GuiButton)var3.next(); 191 192 if (var4.func_82252_a()) 193 { 194 var4.func_82251_b(par1 - this.guiLeft, par2 - this.guiTop); 195 break; 196 } 197 } 198 199 RenderHelper.enableGUIStandardItemLighting(); 200 } 201 202 /** 203 * Draw the background layer for the GuiContainer (everything behind the items) 204 */ 205 protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) 206 { 207 int var4 = this.mc.renderEngine.getTexture("/gui/beacon.png"); 208 GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); 209 this.mc.renderEngine.bindTexture(var4); 210 int var5 = (this.width - this.xSize) / 2; 211 int var6 = (this.height - this.ySize) / 2; 212 this.drawTexturedModalRect(var5, var6, 0, 0, this.xSize, this.ySize); 213 itemRenderer.zLevel = 100.0F; 214 itemRenderer.renderItemAndEffectIntoGUI(this.fontRenderer, this.mc.renderEngine, new ItemStack(Item.emerald), var5 + 42, var6 + 109); 215 itemRenderer.renderItemAndEffectIntoGUI(this.fontRenderer, this.mc.renderEngine, new ItemStack(Item.diamond), var5 + 42 + 22, var6 + 109); 216 itemRenderer.renderItemAndEffectIntoGUI(this.fontRenderer, this.mc.renderEngine, new ItemStack(Item.ingotGold), var5 + 42 + 44, var6 + 109); 217 itemRenderer.renderItemAndEffectIntoGUI(this.fontRenderer, this.mc.renderEngine, new ItemStack(Item.ingotIron), var5 + 42 + 66, var6 + 109); 218 itemRenderer.zLevel = 0.0F; 219 } 220 }