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