    001    package net.minecraft.client.gui.inventory;
    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 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    }