    001package net.minecraft.client.gui.inventory;
    002
    003import cpw.mods.fml.relauncher.Side;
    004import cpw.mods.fml.relauncher.SideOnly;
    005import java.io.ByteArrayOutputStream;
    006import java.io.DataOutputStream;
    007import java.util.Iterator;
    008import net.minecraft.client.gui.GuiButton;
    009import net.minecraft.client.gui.GuiScreen;
    010import net.minecraft.client.renderer.RenderHelper;
    011import net.minecraft.entity.player.InventoryPlayer;
    012import net.minecraft.inventory.ContainerBeacon;
    013import net.minecraft.item.Item;
    014import net.minecraft.item.ItemStack;
    015import net.minecraft.network.packet.Packet250CustomPayload;
    016import net.minecraft.tileentity.TileEntityBeacon;
    017import net.minecraft.util.StatCollector;
    018import org.lwjgl.opengl.GL11;
    019
    020@SideOnly(Side.CLIENT)
    021public 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}