package mcjty.rftools.blocks.dimlets; import mcjty.lib.container.GenericGuiContainer; import mcjty.lib.gui.Window; import mcjty.lib.gui.events.ChoiceEvent; import mcjty.lib.gui.layout.HorizontalAlignment; import mcjty.lib.gui.layout.PositionalLayout; import mcjty.lib.gui.widgets.*; import mcjty.lib.gui.widgets.Label; import mcjty.lib.gui.widgets.Panel; import mcjty.lib.network.Argument; import mcjty.rftools.RFTools; import mcjty.rftools.blocks.RedstoneMode; import mcjty.rftools.network.RFToolsMessages; import net.minecraft.util.ResourceLocation; import net.minecraftforge.common.util.ForgeDirection; import java.awt.*; public class GuiDimensionBuilder extends GenericGuiContainer<DimensionBuilderTileEntity> { public static final int BUILDER_WIDTH = 180; public static final int BUILDER_HEIGHT = 152; private EnergyBar energyBar; private ImageLabel stages; private Label percentage; private Label error1; private Label error2; private ImageChoiceLabel redstoneMode; private static final ResourceLocation iconLocation = new ResourceLocation(RFTools.MODID, "textures/gui/dimensionbuilder.png"); private static final ResourceLocation iconStages = new ResourceLocation(RFTools.MODID, "textures/gui/dimensionbuilderstages.png"); private static final ResourceLocation iconGuiElements = new ResourceLocation(RFTools.MODID, "textures/gui/guielements.png"); public GuiDimensionBuilder(DimensionBuilderTileEntity dimensionBuilderTileEntity, DimensionBuilderContainer container) { super(RFTools.instance, RFToolsMessages.INSTANCE, dimensionBuilderTileEntity, container, RFTools.GUI_MANUAL_DIMENSION, "builder"); dimensionBuilderTileEntity.setCurrentRF(dimensionBuilderTileEntity.getEnergyStored(ForgeDirection.DOWN)); xSize = BUILDER_WIDTH; ySize = BUILDER_HEIGHT; } @Override public void initGui() { super.initGui(); int maxEnergyStored = tileEntity.getMaxEnergyStored(ForgeDirection.DOWN); energyBar = new EnergyBar(mc, this).setVertical().setMaxValue(maxEnergyStored).setLayoutHint(new PositionalLayout.PositionalHint(10, 7, 8, 54)).setShowText(false); energyBar.setValue(tileEntity.getCurrentRF()); stages = new ImageLabel(mc, this).setImage(iconStages, 0, 0); stages.setLayoutHint(new PositionalLayout.PositionalHint(61, 9, 48, 48)); percentage = new Label(mc, this).setText("0%").setHorizontalAlignment(HorizontalAlignment.ALIGH_LEFT); percentage.setLayoutHint(new PositionalLayout.PositionalHint(115, 25, 50, 16)); error1 = new Label(mc, this).setText("").setHorizontalAlignment(HorizontalAlignment.ALIGH_LEFT).setColor(0xff0000); error1.setLayoutHint(new PositionalLayout.PositionalHint(115, 15, 60, 16)); error2 = new Label(mc, this).setText("").setHorizontalAlignment(HorizontalAlignment.ALIGH_LEFT).setColor(0xff0000); error2.setLayoutHint(new PositionalLayout.PositionalHint(115, 28, 60, 16)); initRedstoneMode(); Widget toplevel = new Panel(mc, this).setBackground(iconLocation).setLayout(new PositionalLayout()).addChild(energyBar). addChild(stages).addChild(percentage).addChild(error1).addChild(error2).addChild(redstoneMode); toplevel.setBounds(new Rectangle(guiLeft, guiTop, xSize, ySize)); window = new Window(this, toplevel); tileEntity.requestRfFromServer(RFToolsMessages.INSTANCE); tileEntity.requestBuildingPercentage(); } private void initRedstoneMode() { redstoneMode = new ImageChoiceLabel(mc, this). addChoiceEvent(new ChoiceEvent() { @Override public void choiceChanged(Widget parent, String newChoice) { changeRedstoneMode(); } }). addChoice(RedstoneMode.REDSTONE_IGNORED.getDescription(), "Redstone mode:\nIgnored", iconGuiElements, 0, 0). addChoice(RedstoneMode.REDSTONE_OFFREQUIRED.getDescription(), "Redstone mode:\nOff to activate", iconGuiElements, 16, 0). addChoice(RedstoneMode.REDSTONE_ONREQUIRED.getDescription(), "Redstone mode:\nOn to activate", iconGuiElements, 32, 0); redstoneMode.setLayoutHint(new PositionalLayout.PositionalHint(150, 46, 16, 16)); redstoneMode.setCurrentChoice(tileEntity.getRedstoneMode().ordinal()); } private void changeRedstoneMode() { tileEntity.setRedstoneMode(RedstoneMode.values()[redstoneMode.getCurrentChoiceIndex()]); sendServerCommand(RFToolsMessages.INSTANCE, DimensionBuilderTileEntity.CMD_RSMODE, new Argument("rs", RedstoneMode.values()[redstoneMode.getCurrentChoiceIndex()].getDescription())); } @Override protected void drawGuiContainerBackgroundLayer(float v, int i, int i2) { int pct = tileEntity.getBuildPercentage(); if (pct == DimensionBuilderTileEntity.ERROR_NOOWNER) { error1.setText("Builder has"); error2.setText("no owner!"); percentage.setText(""); } else if (pct == DimensionBuilderTileEntity.ERROR_TOOMANYDIMENSIONS) { error1.setText("Too many"); error2.setText("dimensions!"); percentage.setText(""); } else { int x = ((pct - 1) / 4) % 5; int y = ((pct - 1) / 4) / 5; stages.setImage(iconStages, x * 48, y * 48); percentage.setText(pct + "%"); error1.setText(""); error2.setText(""); } drawWindow(); energyBar.setValue(tileEntity.getCurrentRF()); tileEntity.requestRfFromServer(RFToolsMessages.INSTANCE); tileEntity.requestBuildingPercentage(); } }