diff options
author | miozune <miozune@gmail.com> | 2022-11-26 01:45:28 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-11-25 17:45:28 +0100 |
commit | 9a2741128a78bb52eba50a631126e090a5a2abd8 (patch) | |
tree | a90f47aa94951acb4050e45dc3ed60698e79cf32 /src/main/java/gregtech/common/covers/redstone | |
parent | 51537482fefc4f9c6d3fbd93d119c333a63dcd7b (diff) | |
download | GT5-Unofficial-9a2741128a78bb52eba50a631126e090a5a2abd8.tar.gz GT5-Unofficial-9a2741128a78bb52eba50a631126e090a5a2abd8.tar.bz2 GT5-Unofficial-9a2741128a78bb52eba50a631126e090a5a2abd8.zip |
Rewrite GUIs with ModularUI (#1381)
* Base work for ModularUI compat
* Remove useless interface
* Add almost all the widgets
* Invert method
* Refactor NEI stack placement positions
* NEI handlers on ModularUI
* Add some more docs
* AdvDebugStructureWriter
* Fix NEI progressbar not working
* PrimitiveBlastFurnace
* clean
* derp
* clean
* spotlessApply
* Boilers
* Buffers
* clean
* N by N slots containers
* Fix boilers not having bucket interaction
Put opening UI to individual MetaTEs
* Maintenance Hatch
* clean
* spotlessApply
* Add dependency
* IndustrialApiary
* Adapt to ModularUI change
* Base work for covers & fix crash with MP
* Fix crash with server
* Rewrite base work for covers
* Send initial cover data on cover GUI open
so that the time of showing incorrect data will be eliminated
* Covers part 1
* Rename package: ModularUI -> modularui
* Rename class: GT_UIInfo -> GT_UIInfos
* Fix build
* Covers part2
* Fix missing client check with tile UI & fix title overlap
* CoverTabLine
* Move cover window creators to inner class
* Fix crash with null base TE
* Close GUI when tile is broken
* Color cover window with tile colorization
* Change signature of addUIWidgets
* FluidFilter cover, FluidDisplaySlotWidget, BasicTank, BasicGenerator, Output Hatch, MicrowaveEnergyTransmitter, Teleporter, DigitalChest, DigitalTank
* Add title tab
* Move package: modularui -> modularui/widget
* Programmed circuit + IConfigurationCircuitSupport
* clean
* VolumetricFlask
* Remove integrated circuit overlay from recipe input slots
* Input Hatch & Quadruple Input Hatch
* Multiblock
* Deprecate old cover GUI
* BasicMachines
* Finish BasicMachine & NEI
* Expand DTPF NEI to 9 slots
* Fix ME input bus on MP
* Move AESlotWidget to public class
* Move GT_Recipe_Map constructors with mNEIUnificateOutput to setter method
* Move SteamTexture.Variant to outer enum
* Switch to remote repository
* oops
* Update MUI
* Update MUI
* Minor refactor for change amount buttons
* Display items and fluids that exceed usual count
* blah
* use +=, why didn't I do this
* Update MUI
* Move ModularUI to Base (#1510)
* Move ModularUI to Base
* Move most of the ModularUI functionality to `BaseTileEntity` (and `CoverableTileEntity`)
* `CommonMetaTileEntity` delegates ato the MetaTileEntity
* Added several interfaces (with defaults) to indicate if a tile/metatile override/implement certain behaviors.
* Moved `IConfigurationCircuitSupport` interface such that it will work with BaseTileEntity or a MetaTileEntity
* Address reviews
Co-authored-by: miozune <miozune@gmail.com>
* Update MUI
* Minor changes to NEI
* Return :facepalm:
* IGetTabIconSet override
* Some more changes to NEI
* Merge texture getter interfaces to new class GUITextureSet
* Remove BBF structure picture as it's auto-buildable now
* Make unified title tab style of texture angular
* Expose some boiler texture getters for addon
* Fix crash with cover GUI on pipe
* Lower the number of recipe per page for DTPF & update MUI
* Update MUI
* Fix crash with middle-clicking slot on circuit selection GUI
* Fix circuit selection window not syncing item from base machine
* Merge GT_NEI_AssLineHandler into GT_NEI_DefaultHandler
* Update MUI
* Add in TecTech multi message
* Allow changing the way of binding player inventory
* Update MUI
* Update MUI
* Update MUI
* Update MUI
* Update MUI
* Make MUI non-transitive to allow addons to use their own version
* Force enable mixin
* Format fluid amount tooltip
* Add GUITextureSet.STEAM
* Add guard against null ModularWindow creation
* Add constructors for Muffler Hatch with inventory
* Fix output slot on digital chest and tank allowing insertion
* Don't log null ModularWindow
* Add default implementation for IHasWorldObjectAndCoords#openGUI
* Make openGTTileEntityUI accept MultiTE & cleanup
Co-authored-by: Jason Mitchell <mitchej@gmail.com>
Diffstat (limited to 'src/main/java/gregtech/common/covers/redstone')
6 files changed, 393 insertions, 570 deletions
diff --git a/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneReceiverBase.java b/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneReceiverBase.java index d3bf278a94..6b7c7f282e 100644 --- a/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneReceiverBase.java +++ b/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneReceiverBase.java @@ -1,21 +1,22 @@ package gregtech.common.covers.redstone; import com.google.common.io.ByteArrayDataInput; -import gregtech.api.gui.widgets.GT_GuiIcon; -import gregtech.api.gui.widgets.GT_GuiIconButton; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.common.widget.TextWidget; +import gregtech.api.gui.modularui.GT_CoverUIBuildContext; +import gregtech.api.gui.modularui.GT_UITextures; import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.ICoverable; import gregtech.api.util.GT_Utility; import gregtech.api.util.ISerializableObject; +import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; +import gregtech.common.gui.modularui.widget.CoverDataFollower_ToggleButtonWidget; import io.netty.buffer.ByteBuf; +import java.util.Arrays; import java.util.UUID; import javax.annotation.Nonnull; -import net.minecraft.client.gui.GuiButton; -import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.nbt.NBTBase; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; public abstract class GT_Cover_AdvancedRedstoneReceiverBase extends GT_Cover_AdvancedWirelessRedstoneBase<GT_Cover_AdvancedRedstoneReceiverBase.ReceiverData> { @@ -34,18 +35,101 @@ public abstract class GT_Cover_AdvancedRedstoneReceiverBase return createDataObject(); } - /** - * GUI Stuff - */ + // GUI stuff + @Override - public Object getClientGUIImpl( - byte aSide, - int aCoverID, - ReceiverData aCoverVariable, - ICoverable aTileEntity, - EntityPlayer aPlayer, - World aWorld) { - return new ReceiverGUI(aSide, aCoverID, aCoverVariable, aTileEntity); + public ModularWindow createWindow(GT_CoverUIBuildContext buildContext) { + return new AdvancedRedstoneReceiverBaseUIFactory(buildContext).createWindow(); + } + + private class AdvancedRedstoneReceiverBaseUIFactory extends AdvancedWirelessRedstoneBaseUIFactory { + + public AdvancedRedstoneReceiverBaseUIFactory(GT_CoverUIBuildContext buildContext) { + super(buildContext); + } + + @Override + protected int getFrequencyRow() { + return 0; + } + + @Override + protected int getButtonRow() { + return 1; + } + + @Override + protected boolean isShiftPrivateLeft() { + return false; + } + + @Override + protected void addUIWidgets(ModularWindow.Builder builder) { + super.addUIWidgets(builder); + builder.widget(new TextWidget(GT_Utility.trans("335", "Gate Mode")) + .setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(startX + spaceX * 5, 4 + startY + spaceY * 2)); + } + + @SuppressWarnings("PointlessArithmeticExpression") + @Override + protected void addUIForDataController(CoverDataControllerWidget<ReceiverData> controller) { + super.addUIForDataController(controller); + controller + .addFollower( + CoverDataFollower_ToggleButtonWidget.ofDisableable(), + coverData -> coverData.mode == GateMode.AND, + (coverData, state) -> { + coverData.mode = GateMode.AND; + return coverData; + }, + widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_GATE_AND) + .addTooltip(GT_Utility.trans("331", "AND Gate")) + .setPos(spaceX * 0, spaceY * 2)) + .addFollower( + CoverDataFollower_ToggleButtonWidget.ofDisableable(), + coverData -> coverData.mode == GateMode.NAND, + (coverData, state) -> { + coverData.mode = GateMode.NAND; + return coverData; + }, + widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_GATE_NAND) + .addTooltip(GT_Utility.trans("332", "NAND Gate")) + .setPos(spaceX * 1, spaceY * 2)) + .addFollower( + CoverDataFollower_ToggleButtonWidget.ofDisableable(), + coverData -> coverData.mode == GateMode.OR, + (coverData, state) -> { + coverData.mode = GateMode.OR; + return coverData; + }, + widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_GATE_OR) + .addTooltip(GT_Utility.trans("333", "OR Gate")) + .setPos(spaceX * 2, spaceY * 2)) + .addFollower( + CoverDataFollower_ToggleButtonWidget.ofDisableable(), + coverData -> coverData.mode == GateMode.NOR, + (coverData, state) -> { + coverData.mode = GateMode.NOR; + return coverData; + }, + widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_GATE_NOR) + .addTooltip(GT_Utility.trans("334", "NOR Gate")) + .setPos(spaceX * 3, spaceY * 2)) + .addFollower( + CoverDataFollower_ToggleButtonWidget.ofDisableable(), + coverData -> coverData.mode == GateMode.SINGLE_SOURCE, + (coverData, state) -> { + coverData.mode = GateMode.SINGLE_SOURCE; + return coverData; + }, + widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_ANALOG) + .addTooltips(Arrays.asList( + "ANALOG Mode", + "Only use this mode with ONE transmitter in total,", + "no logic involved")) + .setPos(spaceX * 4, spaceY * 2)); + } } public enum GateMode { @@ -110,84 +194,4 @@ public abstract class GT_Cover_AdvancedRedstoneReceiverBase return this; } } - - private static class ReceiverGUI extends WirelessGUI<ReceiverData> { - - private static final int gateModeButtonIdStart = 1; - - public ReceiverGUI(byte aSide, int aCoverID, ReceiverData aCoverVariable, ICoverable aTileEntity) { - super(aSide, aCoverID, aCoverVariable, aTileEntity); - - new GT_GuiIconButton( - this, - gateModeButtonIdStart + 0, - startX + spaceX * 0, - startY + spaceY * 2, - GT_GuiIcon.AND_GATE) - .setTooltipText(GT_Utility.trans("331", "AND Gate")); - new GT_GuiIconButton( - this, - gateModeButtonIdStart + 1, - startX + spaceX * 1, - startY + spaceY * 2, - GT_GuiIcon.NAND_GATE) - .setTooltipText(GT_Utility.trans("332", "NAND Gate")); - new GT_GuiIconButton( - this, - gateModeButtonIdStart + 2, - startX + spaceX * 2, - startY + spaceY * 2, - GT_GuiIcon.OR_GATE) - .setTooltipText(GT_Utility.trans("333", "OR Gate")); - new GT_GuiIconButton( - this, - gateModeButtonIdStart + 3, - startX + spaceX * 3, - startY + spaceY * 2, - GT_GuiIcon.NOR_GATE) - .setTooltipText(GT_Utility.trans("334", "NOR Gate")); - new GT_GuiIconButton( - this, - gateModeButtonIdStart + 4, - startX + spaceX * 4, - startY + spaceY * 2, - GT_GuiIcon.ANALOG_MODE) - .setTooltipText( - "ANALOG Mode", "Only use this mode with ONE transmitter in total,", "no logic involved"); - } - - @Override - public void drawExtras(int mouseX, int mouseY, float parTicks) { - super.drawExtras(mouseX, mouseY, parTicks); - this.getFontRenderer() - .drawString( - GT_Utility.trans("335", "Gate Mode"), - startX + spaceX * 5, - 4 + startY + spaceY * 2, - textColor); - } - - @Override - protected void update() { - super.update(); - updateButtons(); - } - - private void updateButtons() { - GuiButton button; - for (int i = gateModeButtonIdStart; i < gateModeButtonIdStart + 5; ++i) { - button = (GuiButton) this.buttonList.get(i); - button.enabled = (button.id - gateModeButtonIdStart) != coverVariable.mode.ordinal(); - } - } - - @Override - public void buttonClicked(GuiButton btn) { - if (btn.id >= gateModeButtonIdStart && btn.enabled) { - coverVariable.mode = GateMode.values()[btn.id - gateModeButtonIdStart]; - } - - super.buttonClicked(btn); - } - } } diff --git a/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneTransmitterBase.java b/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneTransmitterBase.java index 2af243861a..c065c085b2 100644 --- a/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneTransmitterBase.java +++ b/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneTransmitterBase.java @@ -1,22 +1,23 @@ package gregtech.common.covers.redstone; import com.google.common.io.ByteArrayDataInput; -import gregtech.api.gui.widgets.GT_GuiIcon; -import gregtech.api.gui.widgets.GT_GuiIconCheckButton; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.common.widget.TextWidget; +import gregtech.api.gui.modularui.GT_CoverUIBuildContext; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.tileentity.ICoverable; import gregtech.api.util.GT_Utility; import gregtech.api.util.ISerializableObject; +import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; +import gregtech.common.gui.modularui.widget.CoverDataFollower_ToggleButtonWidget; import io.netty.buffer.ByteBuf; import java.util.Objects; import java.util.UUID; import javax.annotation.Nonnull; -import net.minecraft.client.gui.GuiButton; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.nbt.NBTBase; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; public abstract class GT_Cover_AdvancedRedstoneTransmitterBase< T extends GT_Cover_AdvancedRedstoneTransmitterBase.TransmitterData> @@ -126,69 +127,65 @@ public abstract class GT_Cover_AdvancedRedstoneTransmitterBase< } } - /** - * GUI Stuff - */ + // GUI stuff + @Override - public Object getClientGUIImpl( - byte aSide, - int aCoverID, - TransmitterData aCoverVariable, - ICoverable aTileEntity, - EntityPlayer aPlayer, - World aWorld) { - return new TransmitterGUI<>(aSide, aCoverID, aCoverVariable, aTileEntity); + public ModularWindow createWindow(GT_CoverUIBuildContext buildContext) { + return new AdvancedRedstoneTransmitterBaseUIFactory(buildContext).createWindow(); } - protected class TransmitterGUI<X extends TransmitterData> extends WirelessGUI<X> { - - private final GT_GuiIconCheckButton invertButton; - - private final String INVERTED = GT_Utility.trans("INVERTED", "Inverted"); - private final String NORMAL = GT_Utility.trans("NORMAL", "Normal"); - - public TransmitterGUI( - byte aSide, int aCoverID, X aCoverVariable, ICoverable aTileEntity, int frequencyRow, int buttonRow) { - super(aSide, aCoverID, aCoverVariable, aTileEntity, frequencyRow, buttonRow, true); - invertButton = new GT_GuiIconCheckButton( - this, - 1, - startX + spaceX * 9, - startY + spaceY * buttonRow, - GT_GuiIcon.REDSTONE_ON, - GT_GuiIcon.REDSTONE_OFF, - INVERTED, - NORMAL); + protected class AdvancedRedstoneTransmitterBaseUIFactory extends AdvancedWirelessRedstoneBaseUIFactory { + + public AdvancedRedstoneTransmitterBaseUIFactory(GT_CoverUIBuildContext buildContext) { + super(buildContext); } - public TransmitterGUI(byte aSide, int aCoverID, X aCoverVariable, ICoverable aTileEntity) { - this(aSide, aCoverID, aCoverVariable, aTileEntity, 0, 1); + @Override + protected int getFrequencyRow() { + return 0; } @Override - public void drawExtras(int mouseX, int mouseY, float parTicks) { - super.drawExtras(mouseX, mouseY, parTicks); - this.getFontRenderer() - .drawString( - coverVariable.invert ? INVERTED : NORMAL, - startX + spaceX * 10, - 4 + startY + spaceY * buttonRow, - textColor); + protected int getButtonRow() { + return 1; } @Override - protected void update() { - super.update(); - invertButton.setChecked(coverVariable.invert); + protected boolean isShiftPrivateLeft() { + return true; } @Override - public void buttonClicked(GuiButton btn) { - if (btn == invertButton) { - coverVariable.invert = !coverVariable.invert; - } + protected void addUIWidgets(ModularWindow.Builder builder) { + super.addUIWidgets(builder); + builder.widget(TextWidget.dynamicString(() -> { + T coverData = getCoverData(); + if (coverData != null) { + return getCoverData().invert + ? GT_Utility.trans("INVERTED", "Inverted") + : GT_Utility.trans("NORMAL", "Normal"); + } else { + return ""; + } + }) + .setSynced(false) + .setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(startX + spaceX * 10, 4 + startY + spaceY * getButtonRow())); + } - super.buttonClicked(btn); + @Override + protected void addUIForDataController(CoverDataControllerWidget<T> controller) { + super.addUIForDataController(controller); + controller.addFollower( + CoverDataFollower_ToggleButtonWidget.ofRedstone(), + coverData -> coverData.invert, + (coverData, state) -> { + coverData.invert = state; + return coverData; + }, + widget -> widget.addTooltip(0, GT_Utility.trans("NORMAL", "Normal")) + .addTooltip(1, GT_Utility.trans("INVERTED", "Inverted")) + .setPos(spaceX * 9, spaceY * getButtonRow())); } } } diff --git a/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedWirelessRedstoneBase.java b/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedWirelessRedstoneBase.java index a57b99fd83..c63f2f37d9 100644 --- a/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedWirelessRedstoneBase.java +++ b/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedWirelessRedstoneBase.java @@ -1,32 +1,27 @@ package gregtech.common.covers.redstone; import com.google.common.io.ByteArrayDataInput; +import com.gtnewhorizons.modularui.api.math.MathExpression; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.common.widget.TextWidget; import gregtech.api.GregTech_API; -import gregtech.api.enums.GT_Values; -import gregtech.api.gui.GT_GUICover; -import gregtech.api.gui.widgets.GT_GuiIcon; -import gregtech.api.gui.widgets.GT_GuiIconCheckButton; -import gregtech.api.gui.widgets.GT_GuiIntegerTextBox; -import gregtech.api.interfaces.IGuiScreen; +import gregtech.api.gui.modularui.GT_CoverUIBuildContext; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.net.GT_Packet_TileEntityCoverNew; import gregtech.api.util.GT_CoverBehaviorBase; import gregtech.api.util.GT_Utility; import gregtech.api.util.ISerializableObject; +import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; +import gregtech.common.gui.modularui.widget.CoverDataFollower_TextFieldWidget; +import gregtech.common.gui.modularui.widget.CoverDataFollower_ToggleButtonWidget; import io.netty.buffer.ByteBuf; -import java.util.HashMap; import java.util.Map; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; -import java.util.stream.Collectors; import javax.annotation.Nonnull; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiButton; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.nbt.NBTBase; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.ResourceLocation; import net.minecraftforge.fluids.Fluid; public abstract class GT_Cover_AdvancedWirelessRedstoneBase< @@ -219,225 +214,85 @@ public abstract class GT_Cover_AdvancedWirelessRedstoneBase< } } - /** - * GUI Stuff - */ + // GUI stuff + @Override public boolean hasCoverGUI() { return true; } - protected abstract static class WirelessGUI<X extends WirelessData> extends GT_GUICover { + @Override + public boolean useModularUI() { + return true; + } - protected final byte side; - protected final int coverID; - protected final GT_GuiIntegerTextBox frequencyBox; - protected final GT_GuiIconCheckButton privateButton; - protected final X coverVariable; + protected abstract class AdvancedWirelessRedstoneBaseUIFactory extends UIFactory { protected static final int startX = 10; protected static final int startY = 25; protected static final int spaceX = 18; protected static final int spaceY = 18; - protected final int frequencyRow; - protected final int buttonRow; - private final int privateExtraColumn; - - protected final int textColor = this.getTextColorOrDefault("text", 0xFF555555); - - private static final String guiTexturePath = "gregtech:textures/gui/GuiCoverLong.png"; - - public WirelessGUI( - byte aSide, - int aCoverID, - X aCoverVariable, - ICoverable aTileEntity, - int frequencyRow, - int buttonRow, - boolean shiftPrivateLeft) { - super(aTileEntity, 250, 107, GT_Utility.intToStack(aCoverID)); - this.mGUIbackgroundLocation = new ResourceLocation(guiTexturePath); - this.side = aSide; - this.coverID = aCoverID; - this.coverVariable = aCoverVariable; - this.frequencyRow = frequencyRow; - this.buttonRow = buttonRow; - this.privateExtraColumn = shiftPrivateLeft ? 1 : 5; - - frequencyBox = - new GT_GuiShortTextBox(this, 0, 1 + startX, 2 + startY + spaceY * frequencyRow, spaceX * 5 - 4, 12); - privateButton = - new GT_GuiIconCheckButton(this, 0, startX, startY + spaceY * buttonRow, GT_GuiIcon.CHECKMARK, null); - } - - public WirelessGUI(byte aSide, int aCoverID, X aCoverVariable, ICoverable aTileEntity) { - this(aSide, aCoverID, aCoverVariable, aTileEntity, 0, 1, false); + public AdvancedWirelessRedstoneBaseUIFactory(GT_CoverUIBuildContext buildContext) { + super(buildContext); } @Override - public void drawExtras(int mouseX, int mouseY, float parTicks) { - super.drawExtras(mouseX, mouseY, parTicks); - this.getFontRenderer() - .drawString( - GT_Utility.trans("246", "Frequency"), - startX + spaceX * 5, - 4 + startY + spaceY * frequencyRow, - textColor); - this.getFontRenderer() - .drawString( - GT_Utility.trans("602", "Use Private Frequency"), - startX + spaceX * privateExtraColumn, - 4 + startY + spaceY * buttonRow, - textColor); + protected int getGUIWidth() { + return 250; } @Override - protected void onInitGui(int guiLeft, int guiTop, int gui_width, int gui_height) { - update(); - frequencyBox.setFocused(true); + protected void addUIWidgets(ModularWindow.Builder builder) { + final int privateExtraColumn = isShiftPrivateLeft() ? 1 : 5; + + CoverDataControllerWidget<T> dataController = new CoverDataControllerWidget<>( + this::getCoverData, this::setCoverData, GT_Cover_AdvancedWirelessRedstoneBase.this); + dataController.setPos(startX, startY); + addUIForDataController(dataController); + + builder.widget(dataController) + .widget(new TextWidget(GT_Utility.trans("246", "Frequency")) + .setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(startX + spaceX * 5, 4 + startY + spaceY * getFrequencyRow())) + .widget(new TextWidget(GT_Utility.trans("602", "Use Private Frequency")) + .setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(startX + spaceX * privateExtraColumn, 4 + startY + spaceY * getButtonRow())); } - protected void genericMouseWheel( - GT_GuiIntegerTextBox box, - int delta, - int minValue, - int maxValue, - int baseStep, - int ctrlStep, - int shiftStep) { - long step = Math.max(1, Math.abs(delta / 120)); - step = (isShiftKeyDown() ? shiftStep : isCtrlKeyDown() ? ctrlStep : baseStep) * (delta > 0 ? step : -step); - - long value = parseTextBox(box, minValue, maxValue) + step; - if (value > maxValue) value = maxValue; - else if (value < minValue) value = minValue; - - box.setText(Long.toString(value)); + protected void addUIForDataController(CoverDataControllerWidget<T> controller) { + controller + .addFollower( + new CoverDataFollower_TextFieldWidget<>(), + coverData -> String.valueOf(coverData.frequency), + (coverData, state) -> { + coverData.frequency = (int) MathExpression.parseMathExpression(state); + return coverData; + }, + widget -> widget.setOnScrollNumbers() + .setNumbers(0, Integer.MAX_VALUE) + .setFocusOnGuiOpen(true) + .setPos(1, 2 + spaceY * getFrequencyRow()) + .setSize(spaceX * 5 - 4, 12)) + .addFollower( + CoverDataFollower_ToggleButtonWidget.ofCheck(), + coverData -> coverData.uuid != null, + (coverData, state) -> { + if (state) { + coverData.uuid = + getUIBuildContext().getPlayer().getUniqueID(); + } else { + coverData.uuid = null; + } + return coverData; + }, + widget -> widget.setPos(0, spaceY * getButtonRow())); } - protected void genericMouseWheel(GT_GuiIntegerTextBox box, int delta, int minValue, int maxValue) { - genericMouseWheel(box, delta, minValue, maxValue, 1, 50, 1000); - } + protected abstract int getFrequencyRow(); - @Override - public void onMouseWheel(int x, int y, int delta) { - if (frequencyBox.isFocused()) { - genericMouseWheel(frequencyBox, delta, 0, Integer.MAX_VALUE); - } - } + protected abstract int getButtonRow(); - @Override - public void applyTextBox(GT_GuiIntegerTextBox box) { - if (box == frequencyBox) { - coverVariable.frequency = parseTextBox(frequencyBox); - } - - GT_Values.NW.sendToServer(new GT_Packet_TileEntityCoverNew(side, coverID, coverVariable, tile)); - update(); - } - - @Override - public void resetTextBox(GT_GuiIntegerTextBox box) { - if (box == frequencyBox) { - frequencyBox.setText(Integer.toString(coverVariable.frequency)); - } - } - - protected void update() { - privateButton.setChecked(coverVariable.uuid != null); - resetTextBox(frequencyBox); - } - - @Override - public void buttonClicked(GuiButton btn) { - if (btn == privateButton) { - coverVariable.uuid = coverVariable.uuid == null - ? Minecraft.getMinecraft().thePlayer.getUniqueID() - : null; - } - - GT_Values.NW.sendToServer(new GT_Packet_TileEntityCoverNew(side, coverID, coverVariable, tile)); - update(); - } - - protected int parseTextBox(GT_GuiIntegerTextBox box, int min, int max) { - String text = box.getText(); - if (text == null) { - return 0; - } - - long value; - try { - value = Long.parseLong(text.trim()); - } catch (NumberFormatException e) { - return 0; - } - - if (value >= max) return max; - else if (value < min) return min; - return (int) value; - } - - protected int parseTextBox(GT_GuiIntegerTextBox box) { - return parseTextBox(box, 0, Integer.MAX_VALUE); - } - - protected class GT_GuiShortTextBox extends GT_GuiIntegerTextBox { - - private final int min; - private final int max; - private final Map<String, String> translation; - private final Map<String, String> inverseTranslation; - - public GT_GuiShortTextBox( - IGuiScreen gui, - int id, - int x, - int y, - int width, - int height, - int min, - int max, - Map<String, String> translate) { - super(gui, id, x, y, width, height); - this.min = min; - this.max = max; - this.translation = translate; - this.inverseTranslation = - translate.entrySet().stream().collect(Collectors.toMap(Map.Entry::getValue, Map.Entry::getKey)); - } - - public GT_GuiShortTextBox(IGuiScreen gui, int id, int x, int y, int width, int height, int min, int max) { - this(gui, id, x, y, width, height, min, max, new HashMap<>()); - } - - public GT_GuiShortTextBox(IGuiScreen gui, int id, int x, int y, int width, int height) { - this(gui, id, x, y, width, height, 0, Integer.MAX_VALUE); - } - - @Override - public boolean textboxKeyTyped(char c, int key) { - if (!super.textboxKeyTyped(c, key)) return false; - - String text = getText().trim(); - if (text.length() > 0) { - setText(String.valueOf(parseTextBox(this, min, max))); - } - - return true; - } - - @Override - public String getText() { - String text = super.getText(); - return inverseTranslation.getOrDefault(text, text); - } - - @Override - public void setText(String text) { - super.setText(translation.getOrDefault(text, text)); - } - } + protected abstract boolean isShiftPrivateLeft(); } } diff --git a/src/main/java/gregtech/common/covers/redstone/GT_Cover_WirelessFluidDetector.java b/src/main/java/gregtech/common/covers/redstone/GT_Cover_WirelessFluidDetector.java index 772332820b..67b931dd99 100644 --- a/src/main/java/gregtech/common/covers/redstone/GT_Cover_WirelessFluidDetector.java +++ b/src/main/java/gregtech/common/covers/redstone/GT_Cover_WirelessFluidDetector.java @@ -1,20 +1,23 @@ package gregtech.common.covers.redstone; import com.google.common.io.ByteArrayDataInput; -import gregtech.api.gui.widgets.GT_GuiIntegerTextBox; +import com.gtnewhorizons.modularui.api.math.MathExpression; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.common.widget.TextWidget; +import gregtech.api.gui.modularui.GT_CoverUIBuildContext; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.tileentity.ICoverable; import gregtech.api.util.GT_Utility; import gregtech.api.util.ISerializableObject; import gregtech.common.covers.GT_Cover_LiquidMeter; +import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; +import gregtech.common.gui.modularui.widget.CoverDataFollower_TextFieldWidget; import io.netty.buffer.ByteBuf; import java.util.UUID; import javax.annotation.Nonnull; -import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.nbt.NBTBase; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; public class GT_Cover_WirelessFluidDetector extends GT_Cover_AdvancedRedstoneTransmitterBase<GT_Cover_WirelessFluidDetector.FluidTransmitterData> { @@ -114,72 +117,51 @@ public class GT_Cover_WirelessFluidDetector } } - /** - * GUI Stuff - */ + // GUI stuff + @Override - public Object getClientGUIImpl( - byte aSide, - int aCoverID, - FluidTransmitterData aCoverVariable, - ICoverable aTileEntity, - EntityPlayer aPlayer, - World aWorld) { - return new FluidTransmitterGUI(aSide, aCoverID, aCoverVariable, aTileEntity); + public ModularWindow createWindow(GT_CoverUIBuildContext buildContext) { + return new WirelessFluidDetectorUIFactory(buildContext).createWindow(); } - private class FluidTransmitterGUI extends TransmitterGUI<FluidTransmitterData> { - private final GT_GuiIntegerTextBox thresholdBox; - - public FluidTransmitterGUI( - byte aSide, int aCoverID, FluidTransmitterData aCoverVariable, ICoverable aTileEntity) { - super(aSide, aCoverID, aCoverVariable, aTileEntity, 1, 2); + private class WirelessFluidDetectorUIFactory extends AdvancedRedstoneTransmitterBaseUIFactory { - thresholdBox = new GT_GuiShortTextBox(this, 1, 1 + startX, 2 + startY, spaceX * 5 - 4, 12); + public WirelessFluidDetectorUIFactory(GT_CoverUIBuildContext buildContext) { + super(buildContext); } @Override - public void drawExtras(int mouseX, int mouseY, float parTicks) { - super.drawExtras(mouseX, mouseY, parTicks); - this.getFontRenderer() - .drawString(GT_Utility.trans("222", "Fluid threshold"), startX + spaceX * 5, 4 + startY, textColor); + protected int getFrequencyRow() { + return 1; } @Override - protected void onInitGui(int guiLeft, int guiTop, int gui_width, int gui_height) { - update(); - thresholdBox.setFocused(true); - } - - @Override - public void onMouseWheel(int x, int y, int delta) { - super.onMouseWheel(x, y, delta); - if (thresholdBox.isFocused()) { - genericMouseWheel(thresholdBox, delta, 0, Integer.MAX_VALUE); - } - } - - @Override - public void applyTextBox(GT_GuiIntegerTextBox box) { - if (box == thresholdBox) { - coverVariable.threshold = parseTextBox(thresholdBox); - } - - super.applyTextBox(box); + protected int getButtonRow() { + return 2; } @Override - public void resetTextBox(GT_GuiIntegerTextBox box) { - super.resetTextBox(box); - if (box == thresholdBox) { - thresholdBox.setText(Integer.toString(coverVariable.threshold)); - } + protected void addUIWidgets(ModularWindow.Builder builder) { + super.addUIWidgets(builder); + builder.widget(new TextWidget(GT_Utility.trans("222", "Fluid threshold")) + .setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(startX + spaceX * 5, 4 + startY)); } @Override - protected void update() { - super.update(); - resetTextBox(thresholdBox); + protected void addUIForDataController(CoverDataControllerWidget<FluidTransmitterData> controller) { + super.addUIForDataController(controller); + controller.addFollower( + new CoverDataFollower_TextFieldWidget<>(), + coverData -> String.valueOf(coverData.threshold), + (coverData, state) -> { + coverData.threshold = (int) MathExpression.parseMathExpression(state); + return coverData; + }, + widget -> widget.setOnScrollNumbers() + .setNumbers(0, Integer.MAX_VALUE) + .setPos(1, 2) + .setSize(spaceX * 5 - 4, 12)); } } } diff --git a/src/main/java/gregtech/common/covers/redstone/GT_Cover_WirelessItemDetector.java b/src/main/java/gregtech/common/covers/redstone/GT_Cover_WirelessItemDetector.java index 46e428e1e9..620f0bc35e 100644 --- a/src/main/java/gregtech/common/covers/redstone/GT_Cover_WirelessItemDetector.java +++ b/src/main/java/gregtech/common/covers/redstone/GT_Cover_WirelessItemDetector.java @@ -1,27 +1,31 @@ package gregtech.common.covers.redstone; import com.google.common.io.ByteArrayDataInput; -import gregtech.api.gui.widgets.GT_GuiFakeItemButton; -import gregtech.api.gui.widgets.GT_GuiIcon; -import gregtech.api.gui.widgets.GT_GuiIntegerTextBox; +import com.gtnewhorizons.modularui.api.forge.ItemStackHandler; +import com.gtnewhorizons.modularui.api.math.MathExpression; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.common.widget.TextWidget; +import com.gtnewhorizons.modularui.common.widget.textfield.BaseTextFieldWidget; +import com.gtnewhorizons.modularui.common.widget.textfield.TextFieldWidget; +import gregtech.api.gui.modularui.GT_CoverUIBuildContext; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.tileentity.ICoverable; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.util.GT_Utility; import gregtech.api.util.ISerializableObject; import gregtech.common.covers.GT_Cover_ItemMeter; +import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; +import gregtech.common.gui.modularui.widget.CoverDataFollower_TextFieldWidget; +import gregtech.common.gui.modularui.widget.ItemWatcherSlotWidget; import gregtech.common.tileentities.storage.GT_MetaTileEntity_DigitalChestBase; import io.netty.buffer.ByteBuf; -import java.util.Collections; import java.util.UUID; import javax.annotation.Nonnull; -import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; public class GT_Cover_WirelessItemDetector extends GT_Cover_AdvancedRedstoneTransmitterBase<GT_Cover_WirelessItemDetector.ItemTransmitterData> { @@ -133,128 +137,126 @@ public class GT_Cover_WirelessItemDetector } } - /** - * GUI Stuff - */ + // GUI stuff + @Override - public Object getClientGUIImpl( - byte aSide, - int aCoverID, - ItemTransmitterData aCoverVariable, - ICoverable aTileEntity, - EntityPlayer aPlayer, - World aWorld) { - return new ItemTransmitterGUI(aSide, aCoverID, aCoverVariable, aTileEntity); + public ModularWindow createWindow(GT_CoverUIBuildContext buildContext) { + return new WirelessItemDetectorUIFactory(buildContext).createWindow(); } - private class ItemTransmitterGUI extends TransmitterGUI<ItemTransmitterData> { - private final GT_GuiIntegerTextBox thresholdBox; - private final GT_GuiIntegerTextBox slotBox; - - private final GT_GuiFakeItemButton fakeItemSlot; + private class WirelessItemDetectorUIFactory extends AdvancedRedstoneTransmitterBaseUIFactory { - private final int maxSlot; + private static final String ALL_TEXT = "All"; - public ItemTransmitterGUI( - byte aSide, int aCoverID, ItemTransmitterData aCoverVariable, ICoverable aTileEntity) { - super(aSide, aCoverID, aCoverVariable, aTileEntity, 0, 1); + private int maxSlot; + private final ItemStackHandler targetSlotHandler = new ItemStackHandler(1); - if (tile instanceof TileEntity - && !super.tile.isDead() - && tile instanceof IGregTechTileEntity - && !(((IGregTechTileEntity) tile).getMetaTileEntity() - instanceof GT_MetaTileEntity_DigitalChestBase)) { - maxSlot = tile.getSizeInventory() - 1; - } else { - maxSlot = -1; - } + public WirelessItemDetectorUIFactory(GT_CoverUIBuildContext buildContext) { + super(buildContext); + } - thresholdBox = new GT_GuiShortTextBox( - this, 1, 1 + startX, 2 + startY + spaceY * 2, spaceX * 5 - 4, 12, 0, getMaxCount()); - slotBox = new GT_GuiShortTextBox( - this, - 2, - 1 + startX, - 2 + startY + spaceY * 3, - spaceX * 4 - 8, - 12, - -1, - maxSlot, - Collections.singletonMap("-1", "All")); - fakeItemSlot = - new GT_GuiFakeItemButton(this, startX + spaceX * 4 - 1, startY + spaceY * 3, GT_GuiIcon.SLOT_GRAY); - - slotBox.setEnabled(maxSlot >= 0); - fakeItemSlot.setMimicSlot(true); + @Override + protected int getFrequencyRow() { + return 0; } @Override - public void drawExtras(int mouseX, int mouseY, float parTicks) { - super.drawExtras(mouseX, mouseY, parTicks); - this.getFontRenderer() - .drawString( - GT_Utility.trans("221", "Item threshold"), - startX + spaceX * 5, - 4 + startY + spaceY * 2, - textColor); - this.getFontRenderer() - .drawString( - GT_Utility.trans("254.0", "Detect Slot"), - startX + spaceX * 5, - 4 + startY + spaceY * 3, - textColor); + protected int getButtonRow() { + return 1; } @Override - public void onMouseWheel(int x, int y, int delta) { - super.onMouseWheel(x, y, delta); - if (thresholdBox.isFocused()) { - genericMouseWheel(thresholdBox, delta, 0, getMaxCount(), 1, 10, 64); - } else if (slotBox.isFocused()) { - genericMouseWheel(slotBox, delta, -1, maxSlot, 1, 5, 50); - } + protected void addUIWidgets(ModularWindow.Builder builder) { + maxSlot = getMaxSlot(); + super.addUIWidgets(builder); + builder.widget(new ItemWatcherSlotWidget() + .setGetter(this::getTargetItem) + .setPos(startX + spaceX * 4 - 1, startY + spaceY * 3)) + .widget(new TextWidget(GT_Utility.trans("221", "Item threshold")) + .setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(startX + spaceX * 5, 4 + startY + spaceY * 2)) + .widget(new TextWidget(GT_Utility.trans("254.0", "Detect Slot")) + .setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(startX + spaceX * 5, 4 + startY + spaceY * 3)); } @Override - public void applyTextBox(GT_GuiIntegerTextBox box) { - if (box == thresholdBox) { - coverVariable.threshold = parseTextBox(thresholdBox, 0, getMaxCount()); - } else if (box == slotBox) { - coverVariable.slot = parseTextBox(slotBox, -1, maxSlot); + protected void addUIForDataController(CoverDataControllerWidget<ItemTransmitterData> controller) { + super.addUIForDataController(controller); + controller + .addFollower( + new CoverDataFollower_TextFieldWidget<>(), + coverData -> String.valueOf(coverData.threshold), + (coverData, state) -> { + coverData.threshold = (int) MathExpression.parseMathExpression(state); + return coverData; + }, + widget -> widget.setOnScrollNumbers(1, 10, 64) + .setNumbers(() -> 0, this::getMaxItemCount) + .setPos(1, 2 + spaceY * 2) + .setSize(spaceX * 5 - 4, 12)) + .addFollower( + new CoverDataFollower_TextFieldWidget<>(), + coverData -> getSlotTextFieldContent(coverData.slot), + (coverData, state) -> { + coverData.slot = getIntFromText(state); + return coverData; + }, + widget -> widget.setOnScrollText() + .setValidator(val -> { + final int valSlot = getIntFromText(val); + if (valSlot > -1) { + return TextFieldWidget.format.format(Math.min(valSlot, maxSlot)); + } else { + return ALL_TEXT; + } + }) + .setPattern(BaseTextFieldWidget.NATURAL_NUMS) + .setPos(1, 2 + spaceY * 3) + .setSize(spaceX * 4 - 8, 12)); + } + + private int getMaxSlot() { + final ICoverable tile = getUIBuildContext().getTile(); + if (tile instanceof TileEntity + && !tile.isDead() + && tile instanceof IGregTechTileEntity + && !(((IGregTechTileEntity) tile).getMetaTileEntity() + instanceof GT_MetaTileEntity_DigitalChestBase)) { + return tile.getSizeInventory() - 1; + } else { + return -1; } + } - super.applyTextBox(box); + private int getMaxItemCount() { + return maxSlot > 0 ? maxSlot * 64 : Integer.MAX_VALUE; } - @Override - public void resetTextBox(GT_GuiIntegerTextBox box) { - super.resetTextBox(box); - if (box == thresholdBox) { - thresholdBox.setText(Integer.toString(coverVariable.threshold)); - } else if (box == slotBox) { - slotBox.setText(Integer.toString(coverVariable.slot)); + private int getIntFromText(String text) { + try { + return (int) MathExpression.parseMathExpression(text, -1); + } catch (Exception e) { + return -1; } } - @Override - protected void update() { - super.update(); - resetTextBox(thresholdBox); - resetTextBox(slotBox); + private String getSlotTextFieldContent(int val) { + return val < 0 ? ALL_TEXT : String.valueOf(val); + } - if (coverVariable.slot >= 0 + private ItemStack getTargetItem() { + final ICoverable tile = getUIBuildContext().getTile(); + final ItemTransmitterData coverVariable = getCoverData(); + if (coverVariable != null + && coverVariable.slot >= 0 && tile instanceof TileEntity && !tile.isDead() && tile.getSizeInventory() >= coverVariable.slot) { - ItemStack itemStack = tile.getStackInSlot(coverVariable.slot); - fakeItemSlot.setItem(itemStack); + return tile.getStackInSlot(coverVariable.slot); } else { - fakeItemSlot.setItem(null); + return null; } } - - private int getMaxCount() { - return maxSlot > 0 ? maxSlot * 64 : Integer.MAX_VALUE; - } } } diff --git a/src/main/java/gregtech/common/covers/redstone/GT_Cover_WirelessMaintenanceDetector.java b/src/main/java/gregtech/common/covers/redstone/GT_Cover_WirelessMaintenanceDetector.java index 2505ce8d80..598e289c66 100644 --- a/src/main/java/gregtech/common/covers/redstone/GT_Cover_WirelessMaintenanceDetector.java +++ b/src/main/java/gregtech/common/covers/redstone/GT_Cover_WirelessMaintenanceDetector.java @@ -1,8 +1,10 @@ package gregtech.common.covers.redstone; import com.google.common.io.ByteArrayDataInput; -import gregtech.api.gui.widgets.GT_GuiIcon; -import gregtech.api.gui.widgets.GT_GuiIconCheckButton; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.common.widget.TextWidget; +import gregtech.api.gui.modularui.GT_CoverUIBuildContext; +import gregtech.api.gui.modularui.GT_UITextures; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.ICoverable; @@ -11,17 +13,15 @@ import gregtech.api.items.GT_MetaGenerated_Tool; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_MultiBlockBase; import gregtech.api.util.ISerializableObject; import gregtech.common.covers.GT_Cover_NeedMaintainance; +import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; +import gregtech.common.gui.modularui.widget.CoverDataFollower_ToggleButtonWidget; import io.netty.buffer.ByteBuf; import java.util.UUID; import javax.annotation.Nonnull; -import net.minecraft.client.gui.GuiButton; -import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTBase; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.ResourceLocation; -import net.minecraft.world.World; public class GT_Cover_WirelessMaintenanceDetector extends GT_Cover_AdvancedRedstoneTransmitterBase< @@ -188,82 +188,65 @@ public class GT_Cover_WirelessMaintenanceDetector } } - /** - * GUI Stuff - */ + // GUI stuff + private static final String[] extraTexts = new String[] { "No Issues", ">= 1 Issue", ">= 2 Issues", ">= 3 Issues", ">= 4 Issues", ">= 5 Issues", "Rotor < 80%", "Rotor < 100%" }; @Override - public Object getClientGUIImpl( - byte aSide, - int aCoverID, - MaintenanceTransmitterData aCoverVariable, - ICoverable aTileEntity, - EntityPlayer aPlayer, - World aWorld) { - return new MaintenanceTransmitterGUI(aSide, aCoverID, aCoverVariable, aTileEntity); + public ModularWindow createWindow(GT_CoverUIBuildContext buildContext) { + return new WirelessMaintenanceDetectorUIFactory(buildContext).createWindow(); } - private class MaintenanceTransmitterGUI extends TransmitterGUI<MaintenanceTransmitterData> { - - private static final String guiTexturePath = "gregtech:textures/gui/GuiCoverBig.png"; - private static final int maintenanceButtonIdStart = 2; - - public MaintenanceTransmitterGUI( - byte aSide, int aCoverID, MaintenanceTransmitterData aCoverVariable, ICoverable aTileEntity) { - super(aSide, aCoverID, aCoverVariable, aTileEntity); - this.mGUIbackgroundLocation = new ResourceLocation(guiTexturePath); - this.gui_height = 143; - - for (int i = 0; i < 8; ++i) { - new GT_GuiIconCheckButton( - this, - maintenanceButtonIdStart + i, - startX + spaceX * (i % 2 == 0 ? 0 : 6), - startY + spaceY * (2 + i / 2), - GT_GuiIcon.CHECKMARK, - null); - } + private class WirelessMaintenanceDetectorUIFactory extends AdvancedRedstoneTransmitterBaseUIFactory { + + public WirelessMaintenanceDetectorUIFactory(GT_CoverUIBuildContext buildContext) { + super(buildContext); } @Override - public void drawExtras(int mouseX, int mouseY, float parTicks) { - super.drawExtras(mouseX, mouseY, parTicks); - for (int i = 0; i < 8; ++i) { - this.getFontRenderer() - .drawString( - extraTexts[i], - startX + spaceX * (i % 2 == 0 ? 1 : 7), - 4 + startY + spaceY * (2 + i / 2), - textColor); - } + protected int getGUIHeight() { + return 143; } @Override - protected void update() { - super.update(); - updateButtons(); + protected int getFrequencyRow() { + return 0; } - private void updateButtons() { - GT_GuiIconCheckButton button; - for (int i = maintenanceButtonIdStart; i < maintenanceButtonIdStart + 8; ++i) { - button = (GT_GuiIconCheckButton) this.buttonList.get(i); - button.enabled = (button.id - maintenanceButtonIdStart) != coverVariable.mode.ordinal(); - button.setChecked(!button.enabled); - } + @Override + protected int getButtonRow() { + return 1; } @Override - public void buttonClicked(GuiButton btn) { - if (btn.id >= maintenanceButtonIdStart && btn.enabled) { - coverVariable.mode = MaintenanceMode.values()[btn.id - maintenanceButtonIdStart]; + protected void addUIWidgets(ModularWindow.Builder builder) { + super.addUIWidgets(builder); + for (int i = 0; i < 8; i++) { + builder.widget(new TextWidget(extraTexts[i]) + .setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(startX + spaceX * (i % 2 == 0 ? 1 : 7), 4 + startY + spaceY * (2 + i / 2))); } + } - super.buttonClicked(btn); + @Override + protected void addUIForDataController(CoverDataControllerWidget<MaintenanceTransmitterData> controller) { + super.addUIForDataController(controller); + for (int i = 0; i < 8; i++) { + final int index = i; + controller.addFollower( + CoverDataFollower_ToggleButtonWidget.ofDisableable(), + coverData -> coverData.mode == MaintenanceMode.values()[index], + (coverData, state) -> { + coverData.mode = MaintenanceMode.values()[index]; + return coverData; + }, + widget -> widget.setToggleTexture( + GT_UITextures.OVERLAY_BUTTON_CHECKMARK, GT_UITextures.TRANSPARENT) + .setPos(spaceX * (index % 2 == 0 ? 0 : 6), spaceY * (2 + index / 2))); + } } } } |