From 26c8407b9d22dbe4e3b98b4e08acfcdbfdd89f45 Mon Sep 17 00:00:00 2001 From: Abdiel Kavash <19243993+AbdielKavash@users.noreply.github.com> Date: Tue, 12 Mar 2024 19:00:02 -0600 Subject: Numeric widget and localized number formatting. (#2532) * Cover widgets * Volumetric flask * Misc textfields * Update GT_MetaTileEntity_MultiBlockBase.java * Update GT_MetaTileEntity_MultiBlockBase.java * Fixes decimal digits --------- Co-authored-by: Martin Robertz --- .../java/gregtech/common/covers/GT_Cover_Arm.java | 94 +++++++++------------- .../gregtech/common/covers/GT_Cover_EUMeter.java | 39 +++++---- .../common/covers/GT_Cover_FluidLimiter.java | 11 ++- .../common/covers/GT_Cover_FluidRegulator.java | 45 ++++++----- .../gregtech/common/covers/GT_Cover_ItemMeter.java | 90 ++++++++++----------- .../common/covers/GT_Cover_LiquidMeter.java | 43 +++++----- .../covers/GT_Cover_RedstoneWirelessBase.java | 25 +++--- .../GT_Cover_AdvancedWirelessRedstoneBase.java | 14 ++-- .../redstone/GT_Cover_WirelessFluidDetector.java | 40 ++++++--- .../redstone/GT_Cover_WirelessItemDetector.java | 68 +++++++--------- .../gregtech/common/gui/MachineGUIProvider.java | 16 +++- .../widget/CoverDataFollower_NumericWidget.java | 60 ++++++++++++++ .../widget/CoverDataFollower_TextFieldWidget.java | 24 +++++- .../gregtech/common/items/GT_VolumetricFlask.java | 89 +++++++------------- .../GT_MetaTileEntity_Hatch_InputBus_ME.java | 18 ++--- .../machines/GT_MetaTileEntity_Hatch_Input_ME.java | 18 ++--- ..._MetaTileEntity_MicrowaveEnergyTransmitter.java | 11 ++- .../basic/GT_MetaTileEntity_Teleporter.java | 11 ++- .../GT_MetaTileEntity_ConcreteBackfillerBase.java | 5 +- .../multi/GT_MetaTileEntity_FusionComputer.java | 7 +- .../multi/GT_MetaTileEntity_OilDrillBase.java | 31 ++++--- .../GT_MetaTileEntity_OreDrillingPlantBase.java | 28 +++---- .../multi/GT_MetaTileEntity_PCBFactory.java | 50 ++++++------ .../machines/multiblock/AdvChemicalProcessor.java | 8 +- .../machines/multiblock/LaserEngraver.java | 8 +- .../GT_MetaTileEntity_DigitalChestBase.java | 9 ++- .../storage/GT_MetaTileEntity_DigitalTankBase.java | 5 +- 27 files changed, 471 insertions(+), 396 deletions(-) create mode 100644 src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollower_NumericWidget.java (limited to 'src/main/java/gregtech/common') 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 dc44e2b390..f2440ebc44 100644 --- a/src/main/java/gregtech/common/covers/GT_Cover_Arm.java +++ b/src/main/java/gregtech/common/covers/GT_Cover_Arm.java @@ -1,16 +1,16 @@ package gregtech.common.covers; -import net.minecraft.client.gui.GuiScreen; +import java.text.FieldPosition; + import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.Fluid; -import com.gtnewhorizons.modularui.api.math.MathExpression; +import com.gtnewhorizons.modularui.api.NumberFormatMUI; import com.gtnewhorizons.modularui.api.screen.ModularWindow; import com.gtnewhorizons.modularui.common.widget.TextWidget; -import com.gtnewhorizons.modularui.common.widget.textfield.BaseTextFieldWidget; import gregtech.api.gui.modularui.GT_CoverUIBuildContext; import gregtech.api.gui.modularui.GT_UITextures; @@ -21,7 +21,7 @@ import gregtech.api.util.GT_CoverBehavior; 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_NumericWidget; import gregtech.common.gui.modularui.widget.CoverDataFollower_ToggleButtonWidget; public class GT_Cover_Arm extends GT_CoverBehavior { @@ -34,10 +34,6 @@ 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"; - public GT_Cover_Arm(int aTickRate, ITexture coverTexture) { super(coverTexture); this.mTickRate = aTickRate; @@ -299,6 +295,21 @@ public class GT_Cover_Arm extends GT_CoverBehavior { private int maxSlot; + /** + * Display the text "Any" instead of a number when the slot is set to -1. + */ + protected static final NumberFormatMUI numberFormatAny = new NumberFormatMUI() { + + @Override + public StringBuffer format(double number, StringBuffer toAppendTo, FieldPosition pos) { + if (number < 0) { + return toAppendTo.append(GT_Utility.trans("ANY", "Any")); + } else { + return super.format(number, toAppendTo, pos); + } + } + }; + protected ArmUIFactory(GT_CoverUIBuildContext buildContext) { super(buildContext); } @@ -339,41 +350,34 @@ public class GT_Cover_Arm extends GT_CoverBehavior { .addTooltip(GT_Utility.trans("007", "Import")) .setPos(spaceX * 1, spaceY * 0)) .addFollower( - new CoverDataFollower_TextFieldWidget<>(), - coverData -> getTextFieldContent(getFlagInternalSlot(convert(coverData)) - 1), + new CoverDataFollower_NumericWidget<>(), + coverData -> (double) (getFlagInternalSlot(convert(coverData)) - 1), (coverData, state) -> { final int coverVariable = convert(coverData); return new ISerializableObject.LegacyCoverData( - getFlagExport(coverVariable) | ((getIntFromText(state) + 1) & SLOT_ID_MASK) + getFlagExport(coverVariable) | ((state.intValue() + 1) & SLOT_ID_MASK) | (getFlagAdjacentSlot(coverVariable) << 14) | CONVERTED_BIT); }, - widget -> widget.setOnScrollText() - .setValidator(val -> { - final int valSlot = getIntFromText(val); - if (valSlot > -1) { - return widget.getDecimalFormatter() - .format(Math.min(valSlot, maxSlot)); - } else { - return ANY_TEXT; - } - }) - .setPattern(BaseTextFieldWidget.NATURAL_NUMS) - .setFocusOnGuiOpen(true) + widget -> widget.setBounds(-1, maxSlot) + .setDefaultValue(-1) + .setScrollValues(1, 100, 10) + .setNumberFormat(numberFormatAny) .setPos(spaceX * 0, spaceY * 1 + 2) .setSize(spaceX * 2 + 5, 12)) .addFollower( - new CoverDataFollower_TextFieldWidget<>(), - coverData -> getTextFieldContent(getFlagAdjacentSlot(convert(coverData)) - 1), + new CoverDataFollower_NumericWidget<>(), + coverData -> (double) (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) + | (((state.intValue() + 1) & SLOT_ID_MASK) << 14) | CONVERTED_BIT); }, widget -> widget.setValidator(val -> { - final int valSlot = getIntFromText(val); + // We need to check the adjacent inventory here, and can't simply set a maximum value, + // because it can change while this cover is alive. final int adjacentMaxSlot; final ICoverable tile = getUIBuildContext().getTile(); if (tile instanceof TileEntity && !tile.isDead()) { @@ -384,30 +388,20 @@ public class GT_Cover_Arm extends GT_CoverBehavior { } else { adjacentMaxSlot = -1; } - if (valSlot > -1) { - return widget.getDecimalFormatter() - .format(Math.min(valSlot, adjacentMaxSlot)); - } else { - return ANY_TEXT; - } + return Math.min(val, adjacentMaxSlot); }) - .setOnScroll((text, direction) -> { - final int val = getIntFromText(text); - int step = (GuiScreen.isShiftKeyDown() ? 50 : GuiScreen.isCtrlKeyDown() ? 5 : 1) - * direction; - return widget.getDecimalFormatter() - .format(val + step); - }) - .setPattern(BaseTextFieldWidget.NATURAL_NUMS) + .setMinValue(-1) + .setDefaultValue(-1) + .setScrollValues(1, 100, 10) + .setNumberFormat(numberFormatAny) .setPos(spaceX * 0, spaceY * 2 + 2) .setSize(spaceX * 2 + 5, 12)) .setPos(startX, startY)) .widget( - TextWidget - .dynamicString( + new TextWidget() + .setStringSupplier( () -> (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( @@ -427,18 +421,6 @@ public class GT_Cover_Arm extends GT_CoverBehavior { } } - private String getTextFieldContent(int val) { - return val < 0 ? ANY_TEXT : String.valueOf(val); - } - - private int getIntFromText(String text) { - try { - return (int) MathExpression.parseMathExpression(text, -1); - } catch (Exception e) { - return -1; - } - } - private int getFlagExport(int coverVariable) { return coverVariable & EXPORT_MASK; } diff --git a/src/main/java/gregtech/common/covers/GT_Cover_EUMeter.java b/src/main/java/gregtech/common/covers/GT_Cover_EUMeter.java index de1f934a71..0010f7745b 100644 --- a/src/main/java/gregtech/common/covers/GT_Cover_EUMeter.java +++ b/src/main/java/gregtech/common/covers/GT_Cover_EUMeter.java @@ -13,8 +13,8 @@ import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.Fluid; 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.FakeSyncWidget; import com.gtnewhorizons.modularui.common.widget.TextWidget; import gregtech.api.gui.modularui.GT_CoverUIBuildContext; @@ -29,7 +29,7 @@ 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_CycleButtonWidget; -import gregtech.common.gui.modularui.widget.CoverDataFollower_TextFieldWidget; +import gregtech.common.gui.modularui.widget.CoverDataFollower_NumericWidget; import gregtech.common.gui.modularui.widget.CoverDataFollower_ToggleButtonWidget; import io.netty.buffer.ByteBuf; @@ -199,6 +199,8 @@ public class GT_Cover_EUMeter extends GT_CoverBehaviorBase numericWidget = new CoverDataFollower_NumericWidget<>(); + builder.widget( new CoverDataControllerWidget<>(this::getCoverData, this::setCoverData, GT_Cover_EUMeter.this) .addFollower( @@ -224,33 +226,36 @@ public class GT_Cover_EUMeter extends GT_CoverBehaviorBase widget.addTooltip(0, NORMAL) .addTooltip(1, INVERTED) .setPos(spaceX * 0, spaceY * 1)) - .addFollower( - new CoverDataFollower_TextFieldWidget<>(), - coverData -> String.valueOf(coverData.threshold), - (coverData, state) -> { - coverData.threshold = (long) MathExpression.parseMathExpression(state); - return coverData; - }, - widget -> widget.setOnScrollNumbersLong(1000, 100, 100000) - .setNumbersLong(() -> 0L, () -> Long.MAX_VALUE) + .addFollower(numericWidget, coverData -> (double) coverData.threshold, (coverData, state) -> { + coverData.threshold = state.longValue(); + return coverData; + }, + widget -> widget.setScrollValues(1000, 100, 100000) .setFocusOnGuiOpen(true) .setPos(spaceX * 0, spaceY * 2 + 2) .setSize(spaceX * 8, 12)) .setPos(startX, startY)) .widget( - TextWidget.dynamicString(() -> getCoverData() != null ? getCoverData().type.getTitle() : "") - .setSynced(false) + new TextWidget() + .setStringSupplier(() -> getCoverData() != null ? getCoverData().type.getTitle() : "") .setDefaultColor(COLOR_TEXT_GRAY.get()) .setPos(startX + spaceX, 4 + startY)) .widget( - TextWidget - .dynamicString(() -> getCoverData() != null ? getCoverData().inverted ? INVERTED : NORMAL : "") - .setSynced(false) + new TextWidget() + .setStringSupplier( + () -> getCoverData() != null ? getCoverData().inverted ? INVERTED : NORMAL : "") .setDefaultColor(COLOR_TEXT_GRAY.get()) .setPos(startX + spaceX, 4 + startY + spaceY)) .widget( new TextWidget(GT_Utility.trans("222.1", "Energy threshold")).setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(startX, startY + spaceY * 3 + 4)); + .setPos(startX, startY + spaceY * 3 + 4)) + + .widget( + new FakeSyncWidget.LongSyncer( + () -> getCoverData() != null + ? getCoverData().type.getTileEntityEnergyCapacity(getUIBuildContext().getTile()) + : Long.MAX_VALUE, + value -> numericWidget.setMaxValue(value))); } } diff --git a/src/main/java/gregtech/common/covers/GT_Cover_FluidLimiter.java b/src/main/java/gregtech/common/covers/GT_Cover_FluidLimiter.java index 871f89a07b..142cb875c3 100644 --- a/src/main/java/gregtech/common/covers/GT_Cover_FluidLimiter.java +++ b/src/main/java/gregtech/common/covers/GT_Cover_FluidLimiter.java @@ -13,7 +13,6 @@ import net.minecraftforge.fluids.FluidTankInfo; import net.minecraftforge.fluids.IFluidHandler; 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; @@ -24,7 +23,7 @@ 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_NumericWidget; import io.netty.buffer.ByteBuf; /*** @@ -190,13 +189,13 @@ public class GT_Cover_FluidLimiter extends GT_CoverBehaviorBase(this::getCoverData, this::setCoverData, GT_Cover_FluidLimiter.this) .addFollower( - new CoverDataFollower_TextFieldWidget<>(), - coverData -> String.valueOf(Math.round(coverData.threshold * 100)), + new CoverDataFollower_NumericWidget<>(), + coverData -> (double) Math.round(coverData.threshold * 100), (coverData, val) -> { - coverData.threshold = (float) (MathExpression.parseMathExpression(val) / 100); + coverData.threshold = val.floatValue() / 100; return coverData; }, - widget -> widget.setNumbers(0, 100) + widget -> widget.setBounds(0, 100) .setFocusOnGuiOpen(true) .setPos(startX, startY + spaceY * 2 - 24) .setSize(spaceX * 4 - 3, 12))) diff --git a/src/main/java/gregtech/common/covers/GT_Cover_FluidRegulator.java b/src/main/java/gregtech/common/covers/GT_Cover_FluidRegulator.java index 7d2afb838d..483f882e91 100644 --- a/src/main/java/gregtech/common/covers/GT_Cover_FluidRegulator.java +++ b/src/main/java/gregtech/common/covers/GT_Cover_FluidRegulator.java @@ -15,11 +15,10 @@ import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.IFluidHandler; import com.google.common.io.ByteArrayDataInput; +import com.gtnewhorizons.modularui.api.NumberFormatMUI; import com.gtnewhorizons.modularui.api.drawable.Text; -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 gregtech.api.gui.modularui.GT_CoverUIBuildContext; import gregtech.api.gui.modularui.GT_UITextures; @@ -30,7 +29,7 @@ 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_NumericWidget; import gregtech.common.gui.modularui.widget.CoverDataFollower_ToggleButtonWidget; import io.netty.buffer.ByteBuf; @@ -252,6 +251,12 @@ public class GT_Cover_FluidRegulator extends GT_CoverBehaviorBase(), - coverData -> String.valueOf(coverData.speed), + new CoverDataFollower_NumericWidget<>(), + coverData -> (double) coverData.speed, (coverData, state) -> { - coverData.speed = (int) MathExpression.parseMathExpression(state); + coverData.speed = state.intValue(); return coverData; }, - widget -> widget.setOnScrollNumbersLong(1, 5, 50) - .setNumbersLong(val -> { + widget -> widget.setBounds(Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY) + .setValidator(val -> { final int tickRate = getCoverData() != null ? getCoverData().tickRate : 0; final long maxFlow = (long) mTransferRate * GT_Utility.clamp(tickRate, TICK_RATE_MIN, TICK_RATE_MAX); @@ -335,19 +340,19 @@ public class GT_Cover_FluidRegulator extends GT_CoverBehaviorBase(), - coverData -> String.valueOf(coverData.tickRate), + new CoverDataFollower_NumericWidget<>(), + coverData -> (double) coverData.tickRate, (coverData, state) -> { - coverData.tickRate = (int) MathExpression.parseMathExpression(state); + coverData.tickRate = state.intValue(); return coverData; }, - widget -> widget.setOnScrollNumbersLong(1, 5, 50) - .setNumbersLong(val -> { + widget -> widget.setBounds(0, TICK_RATE_MAX) + .setValidator(val -> { final int speed = getCoverData() != null ? getCoverData().speed : 0; warn.set(false); if (val > TICK_RATE_MAX) { @@ -362,7 +367,6 @@ public class GT_Cover_FluidRegulator extends GT_CoverBehaviorBase { + .widget(new TextWidget().setTextSupplier(() -> { FluidRegulatorData coverVariable = getCoverData(); if (coverVariable == null) return new Text(""); return new Text( - String.format( - GT_Utility.trans("210", "Average: %.2f L/sec"), - coverVariable.tickRate == 0 ? 0 : coverVariable.speed * 20d / coverVariable.tickRate)) + GT_Utility.trans("210.1", "Average:") + " " + + numberFormat.format( + coverVariable.tickRate == 0 ? 0 : coverVariable.speed * 20d / coverVariable.tickRate) + + " " + + GT_Utility.trans("210.2", "L/sec")) .color(warn.get() ? COLOR_TEXT_WARN.get() : COLOR_TEXT_GRAY.get()); }) - .setSynced(false) .setPos(startX + spaceX * 0, 4 + startY + spaceY * 3)); } } diff --git a/src/main/java/gregtech/common/covers/GT_Cover_ItemMeter.java b/src/main/java/gregtech/common/covers/GT_Cover_ItemMeter.java index 2339bd2243..bb2364cf0e 100644 --- a/src/main/java/gregtech/common/covers/GT_Cover_ItemMeter.java +++ b/src/main/java/gregtech/common/covers/GT_Cover_ItemMeter.java @@ -1,5 +1,7 @@ package gregtech.common.covers; +import java.text.FieldPosition; + import javax.annotation.Nonnull; import net.minecraft.entity.player.EntityPlayer; @@ -12,10 +14,9 @@ import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.Fluid; import com.google.common.io.ByteArrayDataInput; -import com.gtnewhorizons.modularui.api.math.MathExpression; +import com.gtnewhorizons.modularui.api.NumberFormatMUI; import com.gtnewhorizons.modularui.api.screen.ModularWindow; import com.gtnewhorizons.modularui.common.widget.TextWidget; -import com.gtnewhorizons.modularui.common.widget.textfield.BaseTextFieldWidget; import gregtech.api.gui.modularui.GT_CoverUIBuildContext; import gregtech.api.interfaces.ITexture; @@ -26,7 +27,7 @@ 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_NumericWidget; import gregtech.common.gui.modularui.widget.CoverDataFollower_ToggleButtonWidget; import gregtech.common.gui.modularui.widget.ItemWatcherSlotWidget; import gregtech.common.tileentities.machines.GT_MetaTileEntity_Hatch_OutputBus_ME; @@ -204,7 +205,21 @@ public class GT_Cover_ItemMeter extends GT_CoverBehaviorBase(), - coverData -> getSlotTextFieldContent(coverData.slot), + new CoverDataFollower_NumericWidget<>(), + coverData -> (double) coverData.threshold, (coverData, state) -> { - coverData.slot = getIntFromText(state); + coverData.threshold = state.intValue(); return coverData; }, - widget -> widget.setOnScrollText() - .setValidator(val -> { - final int valSlot = getIntFromText(val); - if (valSlot > -1) { - return widget.getDecimalFormatter() - .format(Math.min(valSlot, maxSlot)); - } else { - return ALL_TEXT; - } - }) - .setPattern(BaseTextFieldWidget.NATURAL_NUMS) + widget -> widget.setBounds(0, maxThreshold) + .setScrollValues(1, 64, 1000) .setFocusOnGuiOpen(true) - .setPos(0, spaceY + 2) - .setSize(spaceX * 2 + 5, 12)) + .setPos(0, 2 + spaceY) + .setSize(spaceX * 4 + 5, 12)) .addFollower( - new CoverDataFollower_TextFieldWidget<>(), - coverData -> String.valueOf(coverData.threshold), + new CoverDataFollower_NumericWidget<>(), + coverData -> (double) coverData.slot, (coverData, state) -> { - coverData.threshold = (int) MathExpression.parseMathExpression(state); + coverData.slot = state.intValue(); return coverData; }, - widget -> widget.setOnScrollNumbers(1, 10, 64) - .setNumbers(0, maxThreshold) - .setPos(0, spaceY * 2 + 2) - .setSize(spaceX * 4 + 5, 12)) + widget -> widget.setBounds(-1, maxSlot) + .setDefaultValue(-1) + .setScrollValues(1, 100, 10) + .setNumberFormat(numberFormatAll) + .setPos(0, 2 + spaceY * 2) + .setSize(spaceX * 3 + 1, 12)) .setPos(startX, startY)) .widget( new ItemWatcherSlotWidget().setGetter(this::getTargetItem) - .setPos(startX + spaceX * 8 - 4, startY + spaceY)) + .setPos(startX + spaceX * 3 + 8, startY + spaceY * 2)) .widget( - TextWidget - .dynamicString(() -> getCoverData() != null ? getCoverData().inverted ? INVERTED : NORMAL : "") - .setSynced(false) + new TextWidget() + .setStringSupplier( + () -> getCoverData() != null ? getCoverData().inverted ? INVERTED : NORMAL : "") .setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(startX + spaceX * 3, 4 + startY)) + .setPos(startX + spaceX, 4 + startY)) .widget( - new TextWidget(GT_Utility.trans("254", "Detect slot#")).setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(startX + spaceX * 3, 4 + startY + spaceY)) + new TextWidget(GT_Utility.trans("254", "Detect slot #")).setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(startX + spaceX * 4 + 9, 4 + startY + spaceY * 2)) .widget( new TextWidget(GT_Utility.trans("221", "Item threshold")).setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(startX + spaceX * 5 - 10, startY + spaceY * 2 + 4)); + .setPos(startX + spaceX * 4 + 9, 4 + startY + spaceY)); } private void setMaxSlot() { @@ -303,18 +311,6 @@ public class GT_Cover_ItemMeter extends GT_CoverBehaviorBase tank.capacity) - .sum(); - } else { - maxCapacity = -1; - } + setMaxCapacity(); builder.widget( new CoverDataControllerWidget<>(this::getCoverData, this::setCoverData, GT_Cover_LiquidMeter.this) @@ -213,28 +204,40 @@ public class GT_Cover_LiquidMeter extends GT_CoverBehaviorBase(), - coverData -> String.valueOf(coverData.threshold), + new CoverDataFollower_NumericWidget<>(), + coverData -> (double) coverData.threshold, (coverData, state) -> { - coverData.threshold = (int) MathExpression.parseMathExpression(state); + coverData.threshold = state.intValue(); return coverData; }, - widget -> widget.setOnScrollNumbers(1000, 100, 100000) - .setNumbers(0, maxCapacity > 0 ? maxCapacity : Integer.MAX_VALUE) + widget -> widget.setBounds(0, maxCapacity > 0 ? maxCapacity : Integer.MAX_VALUE) + .setScrollValues(1000, 144, 100000) .setFocusOnGuiOpen(true) .setPos(spaceX * 0, spaceY * 1 + 2) .setSize(spaceX * 4 + 5, 12)) .setPos(startX, startY)) .widget( - TextWidget - .dynamicString(() -> getCoverData() != null ? getCoverData().inverted ? INVERTED : NORMAL : "") - .setSynced(false) + new TextWidget() + .setStringSupplier( + () -> getCoverData() != null ? getCoverData().inverted ? INVERTED : NORMAL : "") .setDefaultColor(COLOR_TEXT_GRAY.get()) .setPos(startX + spaceX * 1, 4 + startY + spaceY * 0)) .widget( new TextWidget(GT_Utility.trans("222", "Fluid threshold")).setDefaultColor(COLOR_TEXT_GRAY.get()) .setPos(startX + spaceX * 5 - 10, startY + spaceY * 1 + 4)); } + + private void setMaxCapacity() { + final ICoverable tile = getUIBuildContext().getTile(); + if (!tile.isDead() && tile instanceof IFluidHandler) { + FluidTankInfo[] tanks = ((IFluidHandler) tile).getTankInfo(ForgeDirection.UNKNOWN); + maxCapacity = Arrays.stream(tanks) + .mapToInt(tank -> tank.capacity) + .sum(); + } else { + maxCapacity = -1; + } + } } public static class LiquidMeterData implements ISerializableObject { diff --git a/src/main/java/gregtech/common/covers/GT_Cover_RedstoneWirelessBase.java b/src/main/java/gregtech/common/covers/GT_Cover_RedstoneWirelessBase.java index 45441025e5..df298c2489 100644 --- a/src/main/java/gregtech/common/covers/GT_Cover_RedstoneWirelessBase.java +++ b/src/main/java/gregtech/common/covers/GT_Cover_RedstoneWirelessBase.java @@ -4,7 +4,6 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.Fluid; -import com.gtnewhorizons.modularui.api.math.MathExpression; import com.gtnewhorizons.modularui.api.screen.ModularWindow; import com.gtnewhorizons.modularui.common.widget.TextWidget; @@ -16,7 +15,7 @@ import gregtech.api.util.GT_CoverBehavior; 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_NumericWidget; import gregtech.common.gui.modularui.widget.CoverDataFollower_ToggleButtonWidget; public abstract class GT_Cover_RedstoneWirelessBase extends GT_CoverBehavior { @@ -195,16 +194,18 @@ public abstract class GT_Cover_RedstoneWirelessBase extends GT_CoverBehavior { new CoverDataControllerWidget<>( this::getCoverData, this::setCoverData, - GT_Cover_RedstoneWirelessBase.this).addFollower( - new CoverDataFollower_TextFieldWidget<>(), - coverData -> String.valueOf(getFlagFrequency(convert(coverData))), - (coverData, text) -> new ISerializableObject.LegacyCoverData( - (int) MathExpression.parseMathExpression(text) | getFlagCheckbox(convert(coverData))), - widget -> widget.setOnScrollNumbers() - .setNumbers(0, MAX_CHANNEL) - .setFocusOnGuiOpen(true) - .setPos(spaceX * 0, spaceY * 0 + 2) - .setSize(spaceX * 4 - 3, 12)) + GT_Cover_RedstoneWirelessBase.this) + + .addFollower( + new CoverDataFollower_NumericWidget<>(), + coverData -> (double) getFlagFrequency(convert(coverData)), + (coverData, state) -> new ISerializableObject.LegacyCoverData( + state.intValue() | getFlagCheckbox(convert(coverData))), + widget -> widget.setBounds(0, MAX_CHANNEL) + .setScrollValues(1, 1000, 10) + .setFocusOnGuiOpen(true) + .setPos(spaceX * 0, spaceY * 0 + 2) + .setSize(spaceX * 4 - 3, 12)) .addFollower( CoverDataFollower_ToggleButtonWidget.ofCheck(), coverData -> getFlagCheckbox(convert(coverData)) > 0, 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 e04a6664ac..d19db38177 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 @@ -13,7 +13,6 @@ import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.Fluid; 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; @@ -25,7 +24,7 @@ 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_NumericWidget; import gregtech.common.gui.modularui.widget.CoverDataFollower_ToggleButtonWidget; import io.netty.buffer.ByteBuf; @@ -270,15 +269,14 @@ public abstract class GT_Cover_AdvancedWirelessRedstoneBase controller) { controller.addFollower( - new CoverDataFollower_TextFieldWidget<>(), - coverData -> String.valueOf(coverData.frequency), + new CoverDataFollower_NumericWidget<>(), + coverData -> (double) coverData.frequency, (coverData, state) -> { - coverData.frequency = (int) MathExpression.parseMathExpression(state); + coverData.frequency = state.intValue(); return coverData; }, - widget -> widget.setOnScrollNumbers() - .setNumbers(0, Integer.MAX_VALUE) - .setFocusOnGuiOpen(true) + widget -> widget.setScrollValues(1, 1000, 10) + .setBounds(0, Integer.MAX_VALUE) .setPos(1, 2 + spaceY * getFrequencyRow()) .setSize(spaceX * 5 - 4, 12)) .addFollower( 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 ab5d26356f..9a9d419be6 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,5 +1,6 @@ package gregtech.common.covers.redstone; +import java.util.Arrays; import java.util.UUID; import javax.annotation.Nonnull; @@ -8,9 +9,10 @@ import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.nbt.NBTBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidTankInfo; +import net.minecraftforge.fluids.IFluidHandler; 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; @@ -21,7 +23,7 @@ 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 gregtech.common.gui.modularui.widget.CoverDataFollower_NumericWidget; import io.netty.buffer.ByteBuf; public class GT_Cover_WirelessFluidDetector @@ -127,42 +129,58 @@ public class GT_Cover_WirelessFluidDetector private class WirelessFluidDetectorUIFactory extends AdvancedRedstoneTransmitterBaseUIFactory { + private int maxCapacity; + public WirelessFluidDetectorUIFactory(GT_CoverUIBuildContext buildContext) { super(buildContext); } @Override protected int getFrequencyRow() { - return 1; + return 0; } @Override protected int getButtonRow() { - return 2; + return 1; } @Override protected void addUIWidgets(ModularWindow.Builder builder) { + setMaxCapacity(); super.addUIWidgets(builder); builder.widget( new TextWidget(GT_Utility.trans("222", "Fluid threshold")).setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(startX + spaceX * 5, 4 + startY)); + .setPos(startX + spaceX * 5, 4 + startY + spaceY * 2)); } @Override protected void addUIForDataController(CoverDataControllerWidget controller) { super.addUIForDataController(controller); controller.addFollower( - new CoverDataFollower_TextFieldWidget<>(), - coverData -> String.valueOf(coverData.threshold), + new CoverDataFollower_NumericWidget<>(), + coverData -> (double) coverData.threshold, (coverData, state) -> { - coverData.threshold = (int) MathExpression.parseMathExpression(state); + coverData.threshold = state.intValue(); return coverData; }, - widget -> widget.setOnScrollNumbers() - .setNumbers(0, Integer.MAX_VALUE) - .setPos(1, 2) + widget -> widget.setBounds(0, maxCapacity > 0 ? maxCapacity : Integer.MAX_VALUE) + .setScrollValues(1000, 144, 100000) + .setFocusOnGuiOpen(true) + .setPos(1, 2 + spaceY * 2) .setSize(spaceX * 5 - 4, 12)); } + + private void setMaxCapacity() { + final ICoverable tile = getUIBuildContext().getTile(); + if (!tile.isDead() && tile instanceof IFluidHandler) { + FluidTankInfo[] tanks = ((IFluidHandler) tile).getTankInfo(ForgeDirection.UNKNOWN); + maxCapacity = Arrays.stream(tanks) + .mapToInt(tank -> tank.capacity) + .sum(); + } else { + maxCapacity = -1; + } + } } } 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 fb7fa93ea7..3cc7f60984 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,5 +1,6 @@ package gregtech.common.covers.redstone; +import java.text.FieldPosition; import java.util.UUID; import javax.annotation.Nonnull; @@ -12,10 +13,9 @@ import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; import com.google.common.io.ByteArrayDataInput; -import com.gtnewhorizons.modularui.api.math.MathExpression; +import com.gtnewhorizons.modularui.api.NumberFormatMUI; import com.gtnewhorizons.modularui.api.screen.ModularWindow; import com.gtnewhorizons.modularui.common.widget.TextWidget; -import com.gtnewhorizons.modularui.common.widget.textfield.BaseTextFieldWidget; import gregtech.api.gui.modularui.GT_CoverUIBuildContext; import gregtech.api.interfaces.ITexture; @@ -25,7 +25,7 @@ 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.CoverDataFollower_NumericWidget; import gregtech.common.gui.modularui.widget.ItemWatcherSlotWidget; import gregtech.common.tileentities.storage.GT_MetaTileEntity_DigitalChestBase; import io.netty.buffer.ByteBuf; @@ -149,10 +149,22 @@ public class GT_Cover_WirelessItemDetector private class WirelessItemDetectorUIFactory extends AdvancedRedstoneTransmitterBaseUIFactory { - private static final String ALL_TEXT = "All"; - private int maxSlot; private int maxThreshold; + /** + * Display the text "All" instead of a number when the slot is set to -1. + */ + private static final NumberFormatMUI numberFormatAll = new NumberFormatMUI() { + + @Override + public StringBuffer format(double number, StringBuffer toAppendTo, FieldPosition pos) { + if (number < 0) { + return toAppendTo.append(GT_Utility.trans("ALL", "All")); + } else { + return super.format(number, toAppendTo, pos); + } + } + }; public WirelessItemDetectorUIFactory(GT_CoverUIBuildContext buildContext) { super(buildContext); @@ -180,7 +192,7 @@ public class GT_Cover_WirelessItemDetector 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()) + new TextWidget(GT_Utility.trans("254", "Detect Slot #")).setDefaultColor(COLOR_TEXT_GRAY.get()) .setPos(startX + spaceX * 5, 4 + startY + spaceY * 3)); } @@ -188,34 +200,28 @@ public class GT_Cover_WirelessItemDetector protected void addUIForDataController(CoverDataControllerWidget controller) { super.addUIForDataController(controller); controller.addFollower( - new CoverDataFollower_TextFieldWidget<>(), - coverData -> String.valueOf(coverData.threshold), + new CoverDataFollower_NumericWidget<>(), + coverData -> (double) coverData.threshold, (coverData, state) -> { - coverData.threshold = (int) MathExpression.parseMathExpression(state); + coverData.threshold = state.intValue(); return coverData; }, - widget -> widget.setOnScrollNumbers(1, 10, 64) - .setNumbers(0, maxThreshold) + widget -> widget.setBounds(0, maxThreshold) + .setScrollValues(1, 64, 1000) + .setFocusOnGuiOpen(true) .setPos(1, 2 + spaceY * 2) .setSize(spaceX * 5 - 4, 12)) .addFollower( - new CoverDataFollower_TextFieldWidget<>(), - coverData -> getSlotTextFieldContent(coverData.slot), + new CoverDataFollower_NumericWidget<>(), + coverData -> (double) coverData.slot, (coverData, state) -> { - coverData.slot = getIntFromText(state); + coverData.slot = state.intValue(); return coverData; }, - widget -> widget.setOnScrollText() - .setValidator(val -> { - final int valSlot = getIntFromText(val); - if (valSlot > -1) { - return widget.getDecimalFormatter() - .format(Math.min(valSlot, maxSlot)); - } else { - return ALL_TEXT; - } - }) - .setPattern(BaseTextFieldWidget.NATURAL_NUMS) + widget -> widget.setBounds(-1, maxSlot) + .setDefaultValue(-1) + .setScrollValues(1, 100, 10) + .setNumberFormat(numberFormatAll) .setPos(1, 2 + spaceY * 3) .setSize(spaceX * 4 - 8, 12)); } @@ -240,18 +246,6 @@ public class GT_Cover_WirelessItemDetector } } - private int getIntFromText(String text) { - try { - return (int) MathExpression.parseMathExpression(text, -1); - } catch (Exception e) { - return -1; - } - } - - private String getSlotTextFieldContent(int val) { - return val < 0 ? ALL_TEXT : String.valueOf(val); - } - private ItemStack getTargetItem() { final ICoverable tile = getUIBuildContext().getTile(); final ItemTransmitterData coverVariable = getCoverData(); diff --git a/src/main/java/gregtech/common/gui/MachineGUIProvider.java b/src/main/java/gregtech/common/gui/MachineGUIProvider.java index 91d14c209a..3cc889f000 100644 --- a/src/main/java/gregtech/common/gui/MachineGUIProvider.java +++ b/src/main/java/gregtech/common/gui/MachineGUIProvider.java @@ -13,6 +13,7 @@ import javax.annotation.Nonnull; import net.minecraft.util.StatCollector; import com.gtnewhorizons.modularui.api.ModularUITextures; +import com.gtnewhorizons.modularui.api.NumberFormatMUI; import com.gtnewhorizons.modularui.api.drawable.IDrawable; import com.gtnewhorizons.modularui.api.drawable.ItemDrawable; import com.gtnewhorizons.modularui.api.drawable.UITexture; @@ -59,6 +60,8 @@ public class MachineGUIProvider power.getStoredEnergy() + "/" + power.getCapacity() + " EU") + new TextWidget() + .setStringSupplier( + () -> numberFormat.format(power.getStoredEnergy()) + "/" + + numberFormat.format(power.getCapacity()) + + " EU") .setPos(10, 30)) .addChild( - TextWidget.dynamicString(() -> power.getVoltage() + " EU/t" + "(" + power.getMaxAmperage() + " A)") + new TextWidget() + .setStringSupplier( + () -> numberFormat.format(power.getVoltage()) + " EU/t" + + "(" + + numberFormat.format(power.getMaxAmperage()) + + " A)") .setPos(10, 60)); } diff --git a/src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollower_NumericWidget.java b/src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollower_NumericWidget.java new file mode 100644 index 0000000000..f641ed090b --- /dev/null +++ b/src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollower_NumericWidget.java @@ -0,0 +1,60 @@ +package gregtech.common.gui.modularui.widget; + +import java.util.function.Consumer; +import java.util.function.Function; + +import com.gtnewhorizons.modularui.api.math.Alignment; +import com.gtnewhorizons.modularui.api.math.Color; +import com.gtnewhorizons.modularui.common.widget.textfield.NumericWidget; + +import gregtech.api.gui.modularui.GT_UITextures; +import gregtech.api.gui.modularui.IDataFollowerWidget; +import gregtech.api.util.ISerializableObject; + +public class CoverDataFollower_NumericWidget extends NumericWidget + implements IDataFollowerWidget { + + private Function dataToStateGetter; + + public CoverDataFollower_NumericWidget() { + super(); + setGetter(() -> 0); // fake getter; used only for init + setSynced(false, false); + setTextColor(Color.WHITE.dark(1)); + setTextAlignment(Alignment.CenterLeft); + setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD.withOffset(-1, -1, 2, 2)); + } + + @Override + public void onPostInit() { + // Widget#onPostInit is called earlier than IDataFollowerWidget#onPostInit, + // so we make sure cursor is set after text is set + super.onPostInit(); + + // On first call #handler does not contain text. + // On second call, it contains correct text to update #lastText, + // but #shouldGetFocus call is skipped by Cursor#updateFocused, + // so we need to manually call this. + if (focusOnGuiOpen) { + shouldGetFocus(); + } + } + + @Override + public CoverDataFollower_NumericWidget setDataToStateGetter(Function dataToStateGetter) { + this.dataToStateGetter = dataToStateGetter; + return this; + } + + @Override + public CoverDataFollower_NumericWidget setStateSetter(Consumer setter) { + super.setSetter(setter::accept); + return this; + } + + @Override + public void updateState(T data) { + setValue(dataToStateGetter.apply(data)); + } + +} diff --git a/src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollower_TextFieldWidget.java b/src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollower_TextFieldWidget.java index df2dfa48f7..1907aaf22f 100644 --- a/src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollower_TextFieldWidget.java +++ b/src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollower_TextFieldWidget.java @@ -5,9 +5,9 @@ import java.util.function.Function; import net.minecraft.client.gui.GuiScreen; +import com.gtnewhorizon.gtnhlib.util.parsing.MathExpressionParser; import com.gtnewhorizons.modularui.api.math.Alignment; import com.gtnewhorizons.modularui.api.math.Color; -import com.gtnewhorizons.modularui.api.math.MathExpression; import com.gtnewhorizons.modularui.common.widget.textfield.TextFieldWidget; import gregtech.api.gui.modularui.GT_UITextures; @@ -60,6 +60,10 @@ public class CoverDataFollower_TextFieldWidget ex setText(dataToStateGetter.apply(data)); } + /** + * @deprecated Use {@link CoverDataFollower_NumericWidget} + */ + @Deprecated public CoverDataFollower_TextFieldWidget setOnScrollNumbers(int baseStep, int ctrlStep, int shiftStep) { setOnScrollNumbers((val, direction) -> { int step = (GuiScreen.isShiftKeyDown() ? shiftStep : GuiScreen.isCtrlKeyDown() ? ctrlStep : baseStep) @@ -74,13 +78,21 @@ public class CoverDataFollower_TextFieldWidget ex return this; } + /** + * @deprecated Use {@link CoverDataFollower_NumericWidget} + */ + @Deprecated public CoverDataFollower_TextFieldWidget setOnScrollNumbers() { return setOnScrollNumbers(1, 50, 1000); } + /** + * @deprecated Use {@link CoverDataFollower_NumericWidget} + */ + @Deprecated public CoverDataFollower_TextFieldWidget setOnScrollText(int baseStep, int ctrlStep, int shiftStep) { setOnScroll((text, direction) -> { - int val = (int) MathExpression.parseMathExpression(text, -1); + int val = (int) MathExpressionParser.parse(text); int step = (GuiScreen.isShiftKeyDown() ? shiftStep : GuiScreen.isCtrlKeyDown() ? ctrlStep : baseStep) * direction; try { @@ -94,10 +106,18 @@ public class CoverDataFollower_TextFieldWidget ex return this; } + /** + * @deprecated Use {@link CoverDataFollower_NumericWidget} + */ + @Deprecated public CoverDataFollower_TextFieldWidget setOnScrollText() { return setOnScrollText(1, 5, 50); } + /** + * @deprecated Use {@link CoverDataFollower_NumericWidget} + */ + @Deprecated public CoverDataFollower_TextFieldWidget setOnScrollNumbersLong(long baseStep, long ctrlStep, long shiftStep) { setOnScrollNumbersLong((val, direction) -> { long step = (GuiScreen.isShiftKeyDown() ? shiftStep : GuiScreen.isCtrlKeyDown() ? ctrlStep : baseStep) diff --git a/src/main/java/gregtech/common/items/GT_VolumetricFlask.java b/src/main/java/gregtech/common/items/GT_VolumetricFlask.java index fc19daff83..4dc761dc60 100644 --- a/src/main/java/gregtech/common/items/GT_VolumetricFlask.java +++ b/src/main/java/gregtech/common/items/GT_VolumetricFlask.java @@ -7,7 +7,6 @@ import static ic2.core.util.LiquidUtil.fillContainerStack; import static ic2.core.util.LiquidUtil.placeFluid; import java.util.List; -import java.util.function.Function; import net.minecraft.block.Block; import net.minecraft.client.renderer.texture.IIconRegister; @@ -34,15 +33,12 @@ import net.minecraftforge.fluids.IFluidHandler; import com.gtnewhorizons.modularui.api.ModularUITextures; import com.gtnewhorizons.modularui.api.math.Alignment; import com.gtnewhorizons.modularui.api.math.Color; -import com.gtnewhorizons.modularui.api.math.MathExpression; -import com.gtnewhorizons.modularui.api.math.Pos2d; -import com.gtnewhorizons.modularui.api.math.Size; import com.gtnewhorizons.modularui.api.screen.IItemWithModularUI; import com.gtnewhorizons.modularui.api.screen.ModularWindow; import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.TextWidget; import com.gtnewhorizons.modularui.common.widget.VanillaButtonWidget; -import com.gtnewhorizons.modularui.common.widget.textfield.BaseTextFieldWidget; -import com.gtnewhorizons.modularui.common.widget.textfield.TextFieldWidget; +import com.gtnewhorizons.modularui.common.widget.textfield.NumericWidget; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -315,78 +311,47 @@ public class GT_Volumetri