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 |
