package advancedsystemsmanager.flow.menus; import advancedsystemsmanager.flow.FlowComponent; import advancedsystemsmanager.flow.elements.CheckBox; import advancedsystemsmanager.flow.elements.CheckBoxList; import advancedsystemsmanager.flow.elements.TextBoxNumber; import advancedsystemsmanager.flow.elements.TextBoxNumberList; import advancedsystemsmanager.client.gui.GuiManager; import advancedsystemsmanager.network.ASMPacket; import advancedsystemsmanager.reference.Names; import advancedsystemsmanager.registry.ConnectionSet; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.nbt.NBTTagCompound; import java.util.List; public class MenuRedstoneStrength extends Menu { public static final int CHECK_BOX_X = 5; public static final int CHECK_BOX_Y = 50; public static final int TEXT_BOX_X_LEFT = 10; public static final int TEXT_BOX_X_RIGHT = 77; public static final int TEXT_BOX_Y = 30; public static final int TEXT_BOX_TEXT_X = 46; public static final int TEXT_BOX_TEXT_Y = 33; public static final int MENU_WIDTH = 120; public static final int TEXT_MARGIN_X = 5; public static final int TEXT_Y = 5; public static final String NBT_LOW = "LowRange"; public static final String NBT_HIGH = "HighRange"; public static final String NBT_INVERTED = "Inverted"; public CheckBoxList checkBoxes; public TextBoxNumberList textBoxes; public boolean inverted; public TextBoxNumber lowTextBox; public TextBoxNumber highTextBox; public MenuRedstoneStrength(FlowComponent parent) { super(parent); checkBoxes = new CheckBoxList(); checkBoxes.addCheckBox(new CheckBox(getParent(), Names.INVERT_SELECTION, CHECK_BOX_X, CHECK_BOX_Y) { @Override public void setValue(boolean val) { inverted = val; } @Override public boolean getValue() { return inverted; } }); textBoxes = new TextBoxNumberList(); textBoxes.addTextBox(lowTextBox = new TextBoxNumber(getParent(), TEXT_BOX_X_LEFT, TEXT_BOX_Y, 2, true) { @Override public int getMaxNumber() { return 15; } }); textBoxes.addTextBox(highTextBox = new TextBoxNumber(getParent(), TEXT_BOX_X_RIGHT, TEXT_BOX_Y, 2, true) { @Override public int getMaxNumber() { return 15; } }); lowTextBox.setNumber(1); highTextBox.setNumber(15); } public void writeData(ASMPacket dw, int id) { boolean isTextBox = id != 2; dw.writeBoolean(isTextBox); if (isTextBox) { boolean isHigh = id == 1; dw.writeBoolean(isHigh); TextBoxNumber textBox = isHigh ? highTextBox : lowTextBox; dw.writeByte(textBox.getNumber()); } else { dw.writeBoolean(inverted); } } @Override public String getName() { return Names.REDSTONE_STRENGTH_MENU; } @SideOnly(Side.CLIENT) @Override public void draw(GuiManager gui, int mX, int mY) { gui.drawSplitString(Names.REDSTONE_STRENGTH_INFO, TEXT_MARGIN_X, TEXT_Y, MENU_WIDTH - 2 * TEXT_MARGIN_X, 0.7F, 0x404040); gui.drawString(Names.THROUGH, TEXT_BOX_TEXT_X, TEXT_BOX_TEXT_Y, 0.7F, 0x404040); checkBoxes.draw(gui, mX, mY); textBoxes.draw(gui, mX, mY); } @SideOnly(Side.CLIENT) @Override public void onClick(int mX, int mY, int button) { checkBoxes.onClick(mX, mY); textBoxes.onClick(mX, mY, button); } @SideOnly(Side.CLIENT) @Override public boolean onKeyStroke(GuiManager gui, char c, int k) { return textBoxes.onKeyStroke(gui, c, k); } @Override public void copyFrom(Menu menu) { MenuRedstoneStrength menuStrength = (MenuRedstoneStrength)menu; lowTextBox.setNumber(menuStrength.lowTextBox.getNumber()); highTextBox.setNumber(menuStrength.highTextBox.getNumber()); inverted = menuStrength.inverted; } @Override public void readFromNBT(NBTTagCompound nbtTagCompound, boolean pickup) { lowTextBox.setNumber(nbtTagCompound.getByte(NBT_LOW)); highTextBox.setNumber(nbtTagCompound.getByte(NBT_HIGH)); inverted = nbtTagCompound.getBoolean(NBT_INVERTED); } @Override public void writeToNBT(NBTTagCompound nbtTagCompound, boolean pickup) { nbtTagCompound.setByte(NBT_LOW, (byte)lowTextBox.getNumber()); nbtTagCompound.setByte(NBT_HIGH, (byte)highTextBox.getNumber()); nbtTagCompound.setBoolean(NBT_INVERTED, inverted); } @Override public void addErrors(List<String> errors) { if (getLow() > getHigh()) { errors.add(Names.INVALID_REDSTONE_RANGE_ERROR); } else if (getLow() == 0 && getHigh() == 15) { errors.add(Names.REDUNDANT_REDSTONE_RANGE_ERROR); } } @Override public boolean isVisible() { return getParent().getConnectionSet() == ConnectionSet.REDSTONE; } public int getLow() { return lowTextBox.getNumber(); } public int getHigh() { return highTextBox.getNumber(); } public boolean isInverted() { return inverted; } }