001package net.minecraft.client.gui.achievement;
002
003import cpw.mods.fml.relauncher.Side;
004import cpw.mods.fml.relauncher.SideOnly;
005import net.minecraft.client.Minecraft;
006import net.minecraft.client.gui.FontRenderer;
007import net.minecraft.client.gui.GuiButton;
008import net.minecraft.client.gui.GuiScreen;
009import net.minecraft.client.gui.GuiSlot;
010import net.minecraft.client.renderer.RenderHelper;
011import net.minecraft.client.renderer.Tessellator;
012import net.minecraft.client.renderer.entity.RenderItem;
013import net.minecraft.item.ItemStack;
014import net.minecraft.stats.StatFileWriter;
015import net.minecraft.util.StatCollector;
016import net.minecraft.util.StringTranslate;
017import org.lwjgl.opengl.GL11;
018import org.lwjgl.opengl.GL12;
019
020@SideOnly(Side.CLIENT)
021public class GuiStats extends GuiScreen
022{
023    private static RenderItem renderItem = new RenderItem();
024    protected GuiScreen parentGui;
025
026    /** The title of the stats screen. */
027    protected String statsTitle = "Select world";
028
029    /** The slot for general stats. */
030    private GuiSlotStatsGeneral slotGeneral;
031
032    /** The slot for item stats. */
033    private GuiSlotStatsItem slotItem;
034
035    /** The slot for block stats. */
036    private GuiSlotStatsBlock slotBlock;
037    private StatFileWriter statFileWriter;
038
039    /** The currently-selected slot. */
040    private GuiSlot selectedSlot = null;
041
042    public GuiStats(GuiScreen par1GuiScreen, StatFileWriter par2StatFileWriter)
043    {
044        this.parentGui = par1GuiScreen;
045        this.statFileWriter = par2StatFileWriter;
046    }
047
048    /**
049     * Adds the buttons (and other controls) to the screen in question.
050     */
051    public void initGui()
052    {
053        this.statsTitle = StatCollector.translateToLocal("gui.stats");
054        this.slotGeneral = new GuiSlotStatsGeneral(this);
055        this.slotGeneral.registerScrollButtons(this.controlList, 1, 1);
056        this.slotItem = new GuiSlotStatsItem(this);
057        this.slotItem.registerScrollButtons(this.controlList, 1, 1);
058        this.slotBlock = new GuiSlotStatsBlock(this);
059        this.slotBlock.registerScrollButtons(this.controlList, 1, 1);
060        this.selectedSlot = this.slotGeneral;
061        this.addHeaderButtons();
062    }
063
064    /**
065     * Creates the buttons that appear at the top of the Stats GUI.
066     */
067    public void addHeaderButtons()
068    {
069        StringTranslate var1 = StringTranslate.getInstance();
070        this.controlList.add(new GuiButton(0, this.width / 2 + 4, this.height - 28, 150, 20, var1.translateKey("gui.done")));
071        this.controlList.add(new GuiButton(1, this.width / 2 - 154, this.height - 52, 100, 20, var1.translateKey("stat.generalButton")));
072        GuiButton var2;
073        this.controlList.add(var2 = new GuiButton(2, this.width / 2 - 46, this.height - 52, 100, 20, var1.translateKey("stat.blocksButton")));
074        GuiButton var3;
075        this.controlList.add(var3 = new GuiButton(3, this.width / 2 + 62, this.height - 52, 100, 20, var1.translateKey("stat.itemsButton")));
076
077        if (this.slotBlock.getSize() == 0)
078        {
079            var2.enabled = false;
080        }
081
082        if (this.slotItem.getSize() == 0)
083        {
084            var3.enabled = false;
085        }
086    }
087
088    /**
089     * Fired when a control is clicked. This is the equivalent of ActionListener.actionPerformed(ActionEvent e).
090     */
091    protected void actionPerformed(GuiButton par1GuiButton)
092    {
093        if (par1GuiButton.enabled)
094        {
095            if (par1GuiButton.id == 0)
096            {
097                this.mc.displayGuiScreen(this.parentGui);
098            }
099            else if (par1GuiButton.id == 1)
100            {
101                this.selectedSlot = this.slotGeneral;
102            }
103            else if (par1GuiButton.id == 3)
104            {
105                this.selectedSlot = this.slotItem;
106            }
107            else if (par1GuiButton.id == 2)
108            {
109                this.selectedSlot = this.slotBlock;
110            }
111            else
112            {
113                this.selectedSlot.actionPerformed(par1GuiButton);
114            }
115        }
116    }
117
118    /**
119     * Draws the screen and all the components in it.
120     */
121    public void drawScreen(int par1, int par2, float par3)
122    {
123        this.selectedSlot.drawScreen(par1, par2, par3);
124        this.drawCenteredString(this.fontRenderer, this.statsTitle, this.width / 2, 20, 16777215);
125        super.drawScreen(par1, par2, par3);
126    }
127
128    /**
129     * Draws the item sprite on top of the background sprite.
130     */
131    private void drawItemSprite(int par1, int par2, int par3)
132    {
133        this.drawButtonBackground(par1 + 1, par2 + 1);
134        GL11.glEnable(GL12.GL_RESCALE_NORMAL);
135        RenderHelper.enableGUIStandardItemLighting();
136        renderItem.renderItemIntoGUI(this.fontRenderer, this.mc.renderEngine, new ItemStack(par3, 1, 0), par1 + 2, par2 + 2);
137        RenderHelper.disableStandardItemLighting();
138        GL11.glDisable(GL12.GL_RESCALE_NORMAL);
139    }
140
141    /**
142     * Draws a gray box that serves as a button background.
143     */
144    private void drawButtonBackground(int par1, int par2)
145    {
146        this.drawSprite(par1, par2, 0, 0);
147    }
148
149    /**
150     * Draws a sprite from /gui/slot.png.
151     */
152    private void drawSprite(int par1, int par2, int par3, int par4)
153    {
154        int var5 = this.mc.renderEngine.getTexture("/gui/slot.png");
155        GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
156        this.mc.renderEngine.bindTexture(var5);
157        Tessellator var10 = Tessellator.instance;
158        var10.startDrawingQuads();
159        var10.addVertexWithUV((double)(par1 + 0), (double)(par2 + 18), (double)this.zLevel, (double)((float)(par3 + 0) * 0.0078125F), (double)((float)(par4 + 18) * 0.0078125F));
160        var10.addVertexWithUV((double)(par1 + 18), (double)(par2 + 18), (double)this.zLevel, (double)((float)(par3 + 18) * 0.0078125F), (double)((float)(par4 + 18) * 0.0078125F));
161        var10.addVertexWithUV((double)(par1 + 18), (double)(par2 + 0), (double)this.zLevel, (double)((float)(par3 + 18) * 0.0078125F), (double)((float)(par4 + 0) * 0.0078125F));
162        var10.addVertexWithUV((double)(par1 + 0), (double)(par2 + 0), (double)this.zLevel, (double)((float)(par3 + 0) * 0.0078125F), (double)((float)(par4 + 0) * 0.0078125F));
163        var10.draw();
164    }
165
166    static Minecraft getMinecraft(GuiStats par0GuiStats)
167    {
168        return par0GuiStats.mc;
169    }
170
171    /**
172     * there are 11 identical methods like this
173     */
174    static FontRenderer getFontRenderer1(GuiStats par0GuiStats)
175    {
176        return par0GuiStats.fontRenderer;
177    }
178
179    static StatFileWriter getStatsFileWriter(GuiStats par0GuiStats)
180    {
181        return par0GuiStats.statFileWriter;
182    }
183
184    /**
185     * there are 11 identical methods like this
186     */
187    static FontRenderer getFontRenderer2(GuiStats par0GuiStats)
188    {
189        return par0GuiStats.fontRenderer;
190    }
191
192    /**
193     * there are 11 identical methods like this
194     */
195    static FontRenderer getFontRenderer3(GuiStats par0GuiStats)
196    {
197        return par0GuiStats.fontRenderer;
198    }
199
200    /**
201     * exactly the same as 27141
202     */
203    static Minecraft getMinecraft1(GuiStats par0GuiStats)
204    {
205        return par0GuiStats.mc;
206    }
207
208    /**
209     * Draws a sprite from /gui/slot.png.
210     */
211    static void drawSprite(GuiStats par0GuiStats, int par1, int par2, int par3, int par4)
212    {
213        par0GuiStats.drawSprite(par1, par2, par3, par4);
214    }
215
216    /**
217     * exactly the same as 27141 and 27143
218     */
219    static Minecraft getMinecraft2(GuiStats par0GuiStats)
220    {
221        return par0GuiStats.mc;
222    }
223
224    /**
225     * there are 11 identical methods like this
226     */
227    static FontRenderer getFontRenderer4(GuiStats par0GuiStats)
228    {
229        return par0GuiStats.fontRenderer;
230    }
231
232    /**
233     * there are 11 identical methods like this
234     */
235    static FontRenderer getFontRenderer5(GuiStats par0GuiStats)
236    {
237        return par0GuiStats.fontRenderer;
238    }
239
240    /**
241     * there are 11 identical methods like this
242     */
243    static FontRenderer getFontRenderer6(GuiStats par0GuiStats)
244    {
245        return par0GuiStats.fontRenderer;
246    }
247
248    /**
249     * there are 11 identical methods like this
250     */
251    static FontRenderer getFontRenderer7(GuiStats par0GuiStats)
252    {
253        return par0GuiStats.fontRenderer;
254    }
255
256    /**
257     * there are 11 identical methods like this
258     */
259    static FontRenderer getFontRenderer8(GuiStats par0GuiStats)
260    {
261        return par0GuiStats.fontRenderer;
262    }
263
264    static void drawGradientRect(GuiStats par0GuiStats, int par1, int par2, int par3, int par4, int par5, int par6)
265    {
266        par0GuiStats.drawGradientRect(par1, par2, par3, par4, par5, par6);
267    }
268
269    /**
270     * there are 11 identical methods like this
271     */
272    static FontRenderer getFontRenderer9(GuiStats par0GuiStats)
273    {
274        return par0GuiStats.fontRenderer;
275    }
276
277    /**
278     * there are 11 identical methods like this
279     */
280    static FontRenderer getFontRenderer10(GuiStats par0GuiStats)
281    {
282        return par0GuiStats.fontRenderer;
283    }
284
285    /**
286     * exactly the same as 27129
287     */
288    static void drawGradientRect1(GuiStats par0GuiStats, int par1, int par2, int par3, int par4, int par5, int par6)
289    {
290        par0GuiStats.drawGradientRect(par1, par2, par3, par4, par5, par6);
291    }
292
293    /**
294     * there are 11 identical methods like this
295     */
296    static FontRenderer getFontRenderer11(GuiStats par0GuiStats)
297    {
298        return par0GuiStats.fontRenderer;
299    }
300
301    /**
302     * Draws the item sprite on top of the background sprite.
303     */
304    static void drawItemSprite(GuiStats par0GuiStats, int par1, int par2, int par3)
305    {
306        par0GuiStats.drawItemSprite(par1, par2, par3);
307    }
308}