package net.minecraft.client.gui; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import java.util.Arrays; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.resources.I18n; import net.minecraft.client.settings.GameSettings; import net.minecraft.client.settings.KeyBinding; import net.minecraft.util.EnumChatFormatting; import org.apache.commons.lang3.ArrayUtils; @SideOnly(Side.CLIENT) public class GuiKeyBindingList extends GuiListExtended { private final GuiControls field_148191_k; private final Minecraft mc; private final GuiListExtended.IGuiListEntry[] listEntries; private int maxListLabelWidth = 0; private static final String __OBFID = "CL_00000732"; public GuiKeyBindingList(GuiControls p_i45031_1_, Minecraft p_i45031_2_) { super(p_i45031_2_, p_i45031_1_.width, p_i45031_1_.height, 63, p_i45031_1_.height - 32, 20); this.field_148191_k = p_i45031_1_; this.mc = p_i45031_2_; KeyBinding[] akeybinding = (KeyBinding[])ArrayUtils.clone(p_i45031_2_.gameSettings.keyBindings); this.listEntries = new GuiListExtended.IGuiListEntry[akeybinding.length + KeyBinding.getKeybinds().size()]; Arrays.sort(akeybinding); int i = 0; String s = null; KeyBinding[] akeybinding1 = akeybinding; int j = akeybinding.length; for (int k = 0; k < j; ++k) { KeyBinding keybinding = akeybinding1[k]; String s1 = keybinding.getKeyCategory(); if (!s1.equals(s)) { s = s1; this.listEntries[i++] = new GuiKeyBindingList.CategoryEntry(s1); } int l = p_i45031_2_.fontRendererObj.getStringWidth(I18n.format(keybinding.getKeyDescription(), new Object[0])); if (l > this.maxListLabelWidth) { this.maxListLabelWidth = l; } this.listEntries[i++] = new GuiKeyBindingList.KeyEntry(keybinding, null); } } protected int getSize() { return this.listEntries.length; } /** * Gets the IGuiListEntry object for the given index */ public GuiListExtended.IGuiListEntry getListEntry(int p_148180_1_) { return this.listEntries[p_148180_1_]; } protected int getScrollBarX() { return super.getScrollBarX() + 15; } /** * Gets the width of the list */ public int getListWidth() { return super.getListWidth() + 32; } @SideOnly(Side.CLIENT) public class CategoryEntry implements GuiListExtended.IGuiListEntry { private final String labelText; private final int labelWidth; private static final String __OBFID = "CL_00000734"; public CategoryEntry(String p_i45028_2_) { this.labelText = I18n.format(p_i45028_2_, new Object[0]); this.labelWidth = GuiKeyBindingList.this.mc.fontRendererObj.getStringWidth(this.labelText); } public void drawEntry(int p_148279_1_, int p_148279_2_, int p_148279_3_, int p_148279_4_, int p_148279_5_, Tessellator p_148279_6_, int p_148279_7_, int p_148279_8_, boolean p_148279_9_) { GuiKeyBindingList.this.mc.fontRendererObj.drawString(this.labelText, GuiKeyBindingList.this.mc.currentScreen.width / 2 - this.labelWidth / 2, p_148279_3_ + p_148279_5_ - GuiKeyBindingList.this.mc.fontRendererObj.FONT_HEIGHT - 1, 16777215); } /** * Returns true if the mouse has been pressed on this control. */ public boolean mousePressed(int p_148278_1_, int p_148278_2_, int p_148278_3_, int p_148278_4_, int p_148278_5_, int p_148278_6_) { return false; } /** * Fired when the mouse button is released. Arguments: index, x, y, mouseEvent, relativeX, relativeY */ public void mouseReleased(int p_148277_1_, int p_148277_2_, int p_148277_3_, int p_148277_4_, int p_148277_5_, int p_148277_6_) {} } @SideOnly(Side.CLIENT) public class KeyEntry implements GuiListExtended.IGuiListEntry { private final KeyBinding field_148282_b; private final String field_148283_c; private final GuiButton btnChangeKeyBinding; private final GuiButton btnReset; private static final String __OBFID = "CL_00000735"; private KeyEntry(KeyBinding p_i45029_2_) { this.field_148282_b = p_i45029_2_; this.field_148283_c = I18n.format(p_i45029_2_.getKeyDescription(), new Object[0]); this.btnChangeKeyBinding = new GuiButton(0, 0, 0, 75, 18, I18n.format(p_i45029_2_.getKeyDescription(), new Object[0])); this.btnReset = new GuiButton(0, 0, 0, 50, 18, I18n.format("controls.reset", new Object[0])); } public void drawEntry(int p_148279_1_, int p_148279_2_, int p_148279_3_, int p_148279_4_, int p_148279_5_, Tessellator p_148279_6_, int p_148279_7_, int p_148279_8_, boolean p_148279_9_) { boolean flag1 = GuiKeyBindingList.this.field_148191_k.buttonId == this.field_148282_b; GuiKeyBindingList.this.mc.fontRendererObj.drawString(this.field_148283_c, p_148279_2_ + 90 - GuiKeyBindingList.this.maxListLabelWidth, p_148279_3_ + p_148279_5_ / 2 - GuiKeyBindingList.this.mc.fontRendererObj.FONT_HEIGHT / 2, 16777215); this.btnReset.xPosition = p_148279_2_ + 190; this.btnReset.yPosition = p_148279_3_; this.btnReset.enabled = this.field_148282_b.getKeyCode() != this.field_148282_b.getKeyCodeDefault(); this.btnReset.drawButton(GuiKeyBindingList.this.mc, p_148279_7_, p_148279_8_); this.btnChangeKeyBinding.xPosition = p_148279_2_ + 105; this.btnChangeKeyBinding.yPosition = p_148279_3_; this.btnChangeKeyBinding.displayString = GameSettings.getKeyDisplayString(this.field_148282_b.getKeyCode()); boolean flag2 = false; if (this.field_148282_b.getKeyCode() != 0) { KeyBinding[] akeybinding = GuiKeyBindingList.this.mc.gameSettings.keyBindings; int l1 = akeybinding.length; for (int i2 = 0; i2 < l1; ++i2) { KeyBinding keybinding = akeybinding[i2]; if (keybinding != this.field_148282_b && keybinding.getKeyCode() == this.field_148282_b.getKeyCode()) { flag2 = true; break; } } } if (flag1) { this.btnChangeKeyBinding.displayString = EnumChatFormatting.WHITE + "> " + EnumChatFormatting.YELLOW + this.btnChangeKeyBinding.displayString + EnumChatFormatting.WHITE + " <"; } else if (flag2) { this.btnChangeKeyBinding.displayString = EnumChatFormatting.RED + this.btnChangeKeyBinding.displayString; } this.btnChangeKeyBinding.drawButton(GuiKeyBindingList.this.mc, p_148279_7_, p_148279_8_); } /** * Returns true if the mouse has been pressed on this control. */ public boolean mousePressed(int p_148278_1_, int p_148278_2_, int p_148278_3_, int p_148278_4_, int p_148278_5_, int p_148278_6_) { if (this.btnChangeKeyBinding.mousePressed(GuiKeyBindingList.this.mc, p_148278_2_, p_148278_3_)) { GuiKeyBindingList.this.field_148191_k.buttonId = this.field_148282_b; return true; } else if (this.btnReset.mousePressed(GuiKeyBindingList.this.mc, p_148278_2_, p_148278_3_)) { GuiKeyBindingList.this.mc.gameSettings.setOptionKeyBinding(this.field_148282_b, this.field_148282_b.getKeyCodeDefault()); KeyBinding.resetKeyBindingArrayAndHash(); return true; } else { return false; } } /** * Fired when the mouse button is released. Arguments: index, x, y, mouseEvent, relativeX, relativeY */ public void mouseReleased(int p_148277_1_, int p_148277_2_, int p_148277_3_, int p_148277_4_, int p_148277_5_, int p_148277_6_) { this.btnChangeKeyBinding.mouseReleased(p_148277_2_, p_148277_3_); this.btnReset.mouseReleased(p_148277_2_, p_148277_3_); } KeyEntry(KeyBinding p_i45030_2_, Object p_i45030_3_) { this(p_i45030_2_); } } }