aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/common/covers
diff options
context:
space:
mode:
authormiozune <miozune@gmail.com>2022-11-26 01:45:28 +0900
committerGitHub <noreply@github.com>2022-11-25 17:45:28 +0100
commit9a2741128a78bb52eba50a631126e090a5a2abd8 (patch)
treea90f47aa94951acb4050e45dc3ed60698e79cf32 /src/main/java/gregtech/common/covers
parent51537482fefc4f9c6d3fbd93d119c333a63dcd7b (diff)
downloadGT5-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')
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_Arm.java350
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_ControlsWork.java158
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_Conveyor.java153
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_DoesWork.java136
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_EUMeter.java238
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_FacadeBase.java158
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_FluidLimiter.java101
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_FluidRegulator.java399
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_Fluidfilter.java237
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_ItemFilter.java159
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_ItemMeter.java363
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_LiquidMeter.java238
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_NeedMaintainance.java214
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_PlayerDetector.java113
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_Pump.java153
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_RedstoneWirelessBase.java207
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_Shutter.java131
-rw-r--r--src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneReceiverBase.java198
-rw-r--r--src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneTransmitterBase.java101
-rw-r--r--src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedWirelessRedstoneBase.java271
-rw-r--r--src/main/java/gregtech/common/covers/redstone/GT_Cover_WirelessFluidDetector.java88
-rw-r--r--src/main/java/gregtech/common/covers/redstone/GT_Cover_WirelessItemDetector.java200
-rw-r--r--src/main/java/gregtech/common/covers/redstone/GT_Cover_WirelessMaintenanceDetector.java105
23 files changed, 1920 insertions, 2551 deletions
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_Arm.java b/src/main/java/gregtech/common/covers/GT_Cover_Arm.java
index fb556989c1..6a7711a242 100644
--- a/src/main/java/gregtech/common/covers/GT_Cover_Arm.java
+++ b/src/main/java/gregtech/common/covers/GT_Cover_Arm.java
@@ -1,19 +1,22 @@
package gregtech.common.covers;
-import gregtech.api.enums.GT_Values;
-import gregtech.api.gui.GT_GUICover;
-import gregtech.api.gui.widgets.GT_GuiFakeItemButton;
-import gregtech.api.gui.widgets.GT_GuiIcon;
-import gregtech.api.gui.widgets.GT_GuiIconButton;
-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 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.gui.modularui.GT_UITextures;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.tileentity.ICoverable;
import gregtech.api.interfaces.tileentity.IMachineProgress;
-import gregtech.api.net.GT_Packet_TileEntityCover;
import gregtech.api.util.GT_CoverBehavior;
import gregtech.api.util.GT_Utility;
import gregtech.api.util.ISerializableObject;
-import net.minecraft.client.gui.GuiButton;
+import gregtech.common.gui.modularui.widget.CoverDataControllerWidget;
+import gregtech.common.gui.modularui.widget.CoverDataFollower_TextFieldWidget;
+import gregtech.common.gui.modularui.widget.CoverDataFollower_ToggleButtonWidget;
+import net.minecraft.client.gui.GuiScreen;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.tileentity.TileEntity;
@@ -28,6 +31,10 @@ public class GT_Cover_Arm extends GT_CoverBehavior {
protected static final int SLOT_ID_MIN = 0;
protected static final int CONVERTED_BIT = 0x80000000;
+ // This used to be translatable, but now that cover GUI is synced with server, having conflicting texts
+ // among players doesn't make sense.
+ private static final String ANY_TEXT = "Any";
+
/**
* @deprecated use {@link #GT_Cover_Arm(int aTickRate, ITexture coverTexture)} instead
*/
@@ -264,223 +271,182 @@ public class GT_Cover_Arm extends GT_CoverBehavior {
return this.mTickRate;
}
- /**
- * GUI Stuff
- */
+ // GUI stuff
+
@Override
public boolean hasCoverGUI() {
return true;
}
@Override
- public Object getClientGUI(byte aSide, int aCoverID, int coverData, ICoverable aTileEntity) {
- return new GT_Cover_Arm.GUI(aSide, aCoverID, coverData, aTileEntity);
+ public boolean useModularUI() {
+ return true;
}
- private class GUI extends GT_GUICover {
- private final byte side;
- private final int coverID;
- private GT_GuiIntegerTextBox intSlot, adjSlot;
- private GT_GuiFakeItemButton intSlotIcon, adjSlotIcon;
- private int coverVariable;
+ @Override
+ public ModularWindow createWindow(GT_CoverUIBuildContext buildContext) {
+ return new ArmUIFactory(buildContext).createWindow();
+ }
+
+ private class ArmUIFactory extends UIFactory {
private static final int startX = 10;
private static final int startY = 25;
private static final int spaceX = 18;
private static final int spaceY = 18;
- private final String ANY_TEXT = GT_Utility.trans("ANY", "Any");
-
- private boolean export;
- private int internalSlotID, adjacentSlotID;
- private final int maxIntSlot, maxAdjSlot;
-
- private final int textColor = this.getTextColorOrDefault("text", 0xFF555555);
-
- public GUI(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
- super(aTileEntity, 176, 107, GT_Utility.intToStack(aCoverID));
- this.side = aSide;
- this.coverID = aCoverID;
- this.coverVariable = aCoverVariable;
-
- export = (coverVariable & EXPORT_MASK) > 0;
- internalSlotID = (coverVariable & SLOT_ID_MASK);
- adjacentSlotID = (coverVariable >> 14) & SLOT_ID_MASK;
-
- new GT_GuiIconButton(this, 0, startX + spaceX * 0, startY + spaceY * 0, GT_GuiIcon.EXPORT)
- .setTooltipText(GT_Utility.trans("006", "Export"));
- new GT_GuiIconButton(this, 1, startX + spaceX * 1, startY + spaceY * 0, GT_GuiIcon.IMPORT)
- .setTooltipText(GT_Utility.trans("007", "Import"));
-
- intSlot =
- new GT_GuiIntegerTextBox(this, 2, startX + spaceX * 0, startY + spaceY * 1 + 2, spaceX * 2 + 5, 12);
- setBoxText(intSlot, internalSlotID - 1);
- intSlot.setMaxStringLength(6);
-
- adjSlot =
- new GT_GuiIntegerTextBox(this, 3, startX + spaceX * 0, startY + spaceY * 2 + 2, spaceX * 2 + 5, 12);
- setBoxText(adjSlot, adjacentSlotID - 1);
- adjSlot.setMaxStringLength(6);
-
- // intSlotIcon = new GT_GuiFakeItemButton(this, startX + spaceX * 8-4, startY + spaceY * 1,
- // GT_GuiIcon.SLOT_GRAY);
- // adjSlotIcon = new GT_GuiFakeItemButton(this, startX + spaceX * 8-4, startY + spaceY * 2,
- // GT_GuiIcon.SLOT_GRAY);
-
- if (super.tile instanceof TileEntity && !super.tile.isDead()) {
- maxIntSlot = tile.getSizeInventory() - 1;
-
- TileEntity adj = super.tile.getTileEntityAtSide(side);
- if (adj instanceof IInventory) maxAdjSlot = ((IInventory) adj).getSizeInventory() - 1;
- else maxAdjSlot = -1;
- } else {
- maxIntSlot = -1;
- maxAdjSlot = -1;
- }
- }
-
- @Override
- public void drawExtras(int mouseX, int mouseY, float parTicks) {
- super.drawExtras(mouseX, mouseY, parTicks);
- if (export)
- this.getFontRenderer()
- .drawString(
- GT_Utility.trans("006", "Export"),
- startX + spaceX * 3,
- 4 + startY + spaceY * 0,
- textColor);
- else
- this.getFontRenderer()
- .drawString(
- GT_Utility.trans("007", "Import"),
- startX + spaceX * 3,
- 4 + startY + spaceY * 0,
- textColor);
-
- this.getFontRenderer()
- .drawString(
- GT_Utility.trans("254.1", "Internal slot#"),
- startX + spaceX * 3,
- 4 + startY + spaceY * 1,
- textColor);
- this.getFontRenderer()
- .drawString(
- GT_Utility.trans("255", "Adjacent slot#"),
- startX + spaceX * 3,
- 4 + startY + spaceY * 2,
- textColor);
- }
-
- @Override
- protected void onInitGui(int guiLeft, int guiTop, int gui_width, int gui_height) {
- intSlot.setFocused(true);
- updateButtons();
-
- // updateInventorySlots();
- }
+ private int maxSlot;
- @Override
- public void buttonClicked(GuiButton btn) {
- if (buttonClickable(btn.id)) {
- export = btn.id == 0;
- coverVariable = getNewCoverVariable();
- GT_Values.NW.sendToServer(new GT_Packet_TileEntityCover(side, coverID, coverVariable, tile));
- }
- updateButtons();
- }
-
- private void updateButtons() {
- GuiButton b;
- for (Object o : buttonList) {
- b = (GuiButton) o;
- b.enabled = buttonClickable(b.id);
- }
+ protected ArmUIFactory(GT_CoverUIBuildContext buildContext) {
+ super(buildContext);
}
+ @SuppressWarnings("PointlessArithmeticExpression")
@Override
- public void onMouseWheel(int x, int y, int delta) {
- for (GT_GuiIntegerTextBox box : textBoxes) {
- if (box.isFocused()) {
- int step = Math.max(1, Math.abs(delta / 120));
- step = (isShiftKeyDown() ? 50 : isCtrlKeyDown() ? 5 : 1) * (delta > 0 ? step : -step);
- int maxSlot = box.id == 3 ? maxAdjSlot : maxIntSlot;
- int val = parseTextBox(box, maxSlot);
- if (val < 0) val = -1;
- val = val + step;
-
- if (maxSlot < val)
- if (maxSlot < 0) val = -1;
- else val = maxSlot;
- else if (val < SLOT_ID_MIN) val = -1;
-
- setBoxText(box, val);
- return;
- }
- }
+ protected void addUIWidgets(ModularWindow.Builder builder) {
+ maxSlot = getMaxSlot();
+ builder.widget(new CoverDataControllerWidget<>(this::getCoverData, this::setCoverData, GT_Cover_Arm.this)
+ .addFollower(
+ CoverDataFollower_ToggleButtonWidget.ofDisableable(),
+ coverData -> getFlagExport(convert(coverData)) > 0,
+ (coverData, state) -> {
+ if (state) {
+ return new ISerializableObject.LegacyCoverData(
+ convert(coverData) | EXPORT_MASK | CONVERTED_BIT);
+ } else {
+ return new ISerializableObject.LegacyCoverData(
+ convert(coverData) & ~EXPORT_MASK | CONVERTED_BIT);
+ }
+ },
+ widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_EXPORT)
+ .addTooltip(GT_Utility.trans("006", "Export"))
+ .setPos(spaceX * 0, spaceY * 0))
+ .addFollower(
+ CoverDataFollower_ToggleButtonWidget.ofDisableable(),
+ coverData -> getFlagExport(convert(coverData)) == 0,
+ (coverData, state) -> {
+ if (state) {
+ return new ISerializableObject.LegacyCoverData(
+ convert(coverData) & ~EXPORT_MASK | CONVERTED_BIT);
+ } else {
+ return new ISerializableObject.LegacyCoverData(
+ convert(coverData) | EXPORT_MASK | CONVERTED_BIT);
+ }
+ },
+ widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_IMPORT)
+ .addTooltip(GT_Utility.trans("007", "Import"))
+ .setPos(spaceX * 1, spaceY * 0))
+ .addFollower(
+ new CoverDataFollower_TextFieldWidget<>(),
+ coverData -> getTextFieldContent(getFlagInternalSlot(convert(coverData)) - 1),
+ (coverData, state) -> {
+ final int coverVariable = convert(coverData);
+ return new ISerializableObject.LegacyCoverData(getFlagExport(coverVariable)
+ | ((getIntFromText(state) + 1) & SLOT_ID_MASK)
+ | (getFlagAdjacentSlot(coverVariable) << 14)
+ | CONVERTED_BIT);
+ },
+ widget -> widget.setOnScrollText()
+ .setValidator(val -> {
+ final int valSlot = getIntFromText(val);
+ if (valSlot > -1) {
+ return TextFieldWidget.format.format(Math.min(valSlot, maxSlot));
+ } else {
+ return ANY_TEXT;
+ }
+ })
+ .setPattern(BaseTextFieldWidget.NATURAL_NUMS)
+ .setFocusOnGuiOpen(true)
+ .setPos(spaceX * 0, spaceY * 1 + 2)
+ .setSize(spaceX * 2 + 5, 12))
+ .addFollower(
+ new CoverDataFollower_TextFieldWidget<>(),
+ coverData -> getTextFieldContent(getFlagAdjacentSlot(convert(coverData)) - 1),
+ (coverData, state) -> {
+ final int coverVariable = convert(coverData);
+ return new ISerializableObject.LegacyCoverData(getFlagExport(coverVariable)
+ | getFlagInternalSlot(coverVariable)
+ | (((getIntFromText(state) + 1) & SLOT_ID_MASK) << 14)
+ | CONVERTED_BIT);
+ },
+ widget -> widget.setValidator(val -> {
+ final int valSlot = getIntFromText(val);
+ final int adjacentMaxSlot;
+ final ICoverable tile =
+ getUIBuildContext().getTile();
+ if (tile instanceof TileEntity && !tile.isDead()) {
+ TileEntity adj = tile.getTileEntityAtSide(
+ getUIBuildContext().getCoverSide());
+ if (adj instanceof IInventory)
+ adjacentMaxSlot = ((IInventory) adj).getSizeInventory() - 1;
+ else adjacentMaxSlot = -1;
+ } else {
+ adjacentMaxSlot = -1;
+ }
+ if (valSlot > -1) {
+ return TextFieldWidget.format.format(
+ Math.min(valSlot, adjacentMaxSlot));
+ } else {
+ return ANY_TEXT;
+ }
+ })
+ .setOnScroll((text, direction) -> {
+ final int val = getIntFromText(text);
+ int step = (GuiScreen.isShiftKeyDown()
+ ? 50
+ : GuiScreen.isCtrlKeyDown() ? 5 : 1)
+ * direction;
+ return TextFieldWidget.format.format(val + step);
+ })
+ .setPattern(BaseTextFieldWidget.NATURAL_NUMS)
+ .setPos(spaceX * 0, spaceY * 2 + 2)
+ .setSize(spaceX * 2 + 5, 12))
+ .setPos(startX, startY))
+ .widget(TextWidget.dynamicString(() -> (convert(getCoverData()) & EXPORT_MASK) > 0
+ ? GT_Utility.trans("006", "Export")
+ : GT_Utility.trans("007", "Import"))
+ .setSynced(false)
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(startX + spaceX * 3, 4 + startY + spaceY * 0))
+ .widget(new TextWidget(GT_Utility.trans("254.1", "Internal slot#"))
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(startX + spaceX * 3, 4 + startY + spaceY * 1))
+ .widget(new TextWidget(GT_Utility.trans("255", "Adjacent slot#"))
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(startX + spaceX * 3, 4 + startY + spaceY * 2));
}
- @Override
- public void applyTextBox(GT_GuiIntegerTextBox box) {
- int val = -1;
-
- if (box.id == 2) {
- val = parseTextBox(box, maxIntSlot);
- internalSlotID = val + 1;
- } else if (box.id == 3) {
- val = parseTextBox(box, maxAdjSlot);
- adjacentSlotID = val + 1;
+ private int getMaxSlot() {
+ final ICoverable tile = getUIBuildContext().getTile();
+ if (tile instanceof TileEntity && !tile.isDead()) {
+ return tile.getSizeInventory() - 1;
+ } else {
+ return -1;
}
-
- setBoxText(box, val);
- coverVariable = getNewCoverVariable();
- GT_Values.NW.sendToServer(new GT_Packet_TileEntityCover(side, coverID, coverVariable, tile));
- // updateInventorySlots();
}
- @Override
- public void resetTextBox(GT_GuiIntegerTextBox box) {
- int val = 0;
- if (box.id == 2) val = internalSlotID - 1;
- else if (box.id == 3) val = adjacentSlotID - 1;
- setBoxText(box, val);
+ private String getTextFieldContent(int val) {
+ return val < 0 ? ANY_TEXT : String.valueOf(val);
}
- private void setBoxText(GT_GuiIntegerTextBox box, int val) {
- box.setText(val < 0 ? ANY_TEXT : String.valueOf(val));
- }
-
- private int parseTextBox(GT_GuiIntegerTextBox box, int maxSlot) {
- String text = box.getText();
- if (text == null) return -1;
- text = text.trim();
- if (text.startsWith(ANY_TEXT)) text = text.substring(ANY_TEXT.length());
-
- if (text.isEmpty()) return -1;
-
- int val;
+ private int getIntFromText(String text) {
try {
- val = Integer.parseInt(text);
- } catch (NumberFormatException e) {
+ return (int) MathExpression.parseMathExpression(text, -1);
+ } catch (Exception e) {
return -1;
}
+ }
- if (maxSlot < val)
- if (maxSlot < 0) return -1;
- else return maxSlot;
- else if (val < SLOT_ID_MIN) return SLOT_ID_MIN;
- return val;
+ private int getFlagExport(int coverVariable) {
+ return coverVariable & EXPORT_MASK;
}
- private int getNewCoverVariable() {
- return (export ? EXPORT_MASK : 0)
- | ((adjacentSlotID & SLOT_ID_MASK) << 14)
- | (internalSlotID & SLOT_ID_MASK)
- | CONVERTED_BIT;
+ private int getFlagInternalSlot(int coverVariable) {
+ return coverVariable & SLOT_ID_MASK;
}
- private boolean buttonClickable(int id) {
- if (id == 0) return !export;
- return export;
+ private int getFlagAdjacentSlot(int coverVariable) {
+ return (coverVariable >> 14) & SLOT_ID_MASK;
}
}
}
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_ControlsWork.java b/src/main/java/gregtech/common/covers/GT_Cover_ControlsWork.java
index d8f09619bc..ee0a740d68 100644
--- a/src/main/java/gregtech/common/covers/GT_Cover_ControlsWork.java
+++ b/src/main/java/gregtech/common/covers/GT_Cover_ControlsWork.java
@@ -1,17 +1,17 @@
package gregtech.common.covers;
-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_GuiIconButton;
-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.tileentity.ICoverable;
import gregtech.api.interfaces.tileentity.IMachineProgress;
-import gregtech.api.net.GT_Packet_TileEntityCover;
import gregtech.api.util.GT_CoverBehavior;
import gregtech.api.util.GT_Utility;
-import net.minecraft.client.gui.GuiButton;
+import gregtech.api.util.ISerializableObject;
+import gregtech.common.gui.modularui.widget.CoverDataControllerWidget;
+import gregtech.common.gui.modularui.widget.CoverDataFollower_ToggleButtonWidget;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fluids.Fluid;
@@ -171,113 +171,103 @@ public class GT_Cover_ControlsWork extends GT_CoverBehavior {
return true;
}
- /**
- * GUI Stuff
- */
+ // GUI stuff
+
@Override
public boolean hasCoverGUI() {
return true;
}
@Override
- public Object getClientGUI(byte aSide, int aCoverID, int coverData, ICoverable aTileEntity) {
- return new GT_Cover_ControlsWork.GUI(aSide, aCoverID, coverData, aTileEntity);
+ public boolean useModularUI() {
+ return true;
}
- private class GUI extends GT_GUICover {
- private final byte side;
- private final int coverID;
- private int coverVariable;
+ @Override
+ public ModularWindow createWindow(GT_CoverUIBuildContext buildContext) {
+ return new ControlsWorkUIFactory(buildContext).createWindow();
+ }
+
+ private class ControlsWorkUIFactory extends UIFactory {
private static final int startX = 10;
private static final int startY = 25;
private static final int spaceX = 18;
private static final int spaceY = 18;
- private final int textColor = this.getTextColorOrDefault("text", 0xFF555555);
-
- public GUI(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
- super(aTileEntity, 176, 107, GT_Utility.intToStack(aCoverID));
- this.side = aSide;
- this.coverID = aCoverID;
- this.coverVariable = aCoverVariable;
-
- new GT_GuiIconButton(this, 0, startX + spaceX * 0, startY + spaceY * 0, GT_GuiIcon.REDSTONE_ON);
- new GT_GuiIconButton(this, 1, startX + spaceX * 0, startY + spaceY * 1, GT_GuiIcon.REDSTONE_OFF);
- new GT_GuiIconButton(this, 2, startX + spaceX * 0, startY + spaceY * 2, GT_GuiIcon.CROSS);
-
- new GT_GuiIconCheckButton(
- this, 3, startX + spaceX * 0, startY + spaceY * 3, GT_GuiIcon.CHECKMARK, GT_GuiIcon.CROSS)
- .setChecked(aCoverVariable > 2);
- }
-
- @Override
- public void drawExtras(int mouseX, int mouseY, float parTicks) {
- super.drawExtras(mouseX, mouseY, parTicks);
- this.fontRendererObj.drawString(
- GT_Utility.trans("243", "Enable with Redstone"),
- 3 + startX + spaceX * 1,
- 4 + startY + spaceY * 0,
- textColor);
- this.fontRendererObj.drawString(
- GT_Utility.trans("244", "Disable with Redstone"),
- 3 + startX + spaceX * 1,
- 4 + startY + spaceY * 1,
- textColor);
- this.fontRendererObj.drawString(
- GT_Utility.trans("245", "Disable machine"),
- 3 + startX + spaceX * 1,
- 4 + startY + spaceY * 2,
- textColor);
- this.fontRendererObj.drawString(
- GT_Utility.trans("507", "Safe Mode"), 3 + startX + spaceX * 1, 4 + startY + spaceY * 3, textColor);
+ public ControlsWorkUIFactory(GT_CoverUIBuildContext buildContext) {
+ super(buildContext);
}
+ @SuppressWarnings("PointlessArithmeticExpression")
@Override
- protected void onInitGui(int guiLeft, int guiTop, int gui_width, int gui_height) {
- updateButtons();
+ protected void addUIWidgets(ModularWindow.Builder builder) {
+ builder.widget(new CoverDataControllerWidget.CoverDataIndexedControllerWidget_ToggleButtons<>(
+ this::getCoverData,
+ this::setCoverData,
+ GT_Cover_ControlsWork.this,
+ (id, coverData) -> !getClickable(id, convert(coverData)),
+ (id, coverData) -> new ISerializableObject.LegacyCoverData(
+ getNewCoverVariable(id, convert(coverData))))
+ .addToggleButton(
+ 0,
+ CoverDataFollower_ToggleButtonWidget.ofDisableable(),
+ widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_REDSTONE_ON)
+ .setPos(spaceX * 0, spaceY * 0))
+ .addToggleButton(
+ 1,
+ CoverDataFollower_ToggleButtonWidget.ofDisableable(),
+ widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_REDSTONE_OFF)
+ .setPos(spaceX * 0, spaceY * 1))
+ .addToggleButton(
+ 2,
+ CoverDataFollower_ToggleButtonWidget.ofDisableable(),
+ widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_CROSS)
+ .setPos(spaceX * 0, spaceY * 2))
+ .setPos(startX, startY))
+ .widget(new CoverDataControllerWidget<>(
+ this::getCoverData, this::setCoverData, GT_Cover_ControlsWork.this)
+ .addFollower(
+ CoverDataFollower_ToggleButtonWidget.ofCheckAndCross(),
+ coverData -> convert(coverData) > 2,
+ (coverData, state) -> new ISerializableObject.LegacyCoverData(
+ adjustCoverVariable(state, convert(coverData))),
+ widget -> widget.setPos(spaceX * 0, spaceY * 3))
+ .setPos(startX, startY))
+ .widget(new TextWidget(GT_Utility.trans("243", "Enable with Redstone"))
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(3 + startX + spaceX * 1, 4 + startY + spaceY * 0))
+ .widget(new TextWidget(GT_Utility.trans("244", "Disable with Redstone"))
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(3 + startX + spaceX * 1, 4 + startY + spaceY * 1))