    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    }