diff options
Diffstat (limited to 'src')
29 files changed, 509 insertions, 422 deletions
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicTank.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicTank.java index d09120fdef..c810614161 100644 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicTank.java +++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicTank.java @@ -7,6 +7,7 @@ import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidTankInfo; +import com.gtnewhorizons.modularui.api.NumberFormatMUI; import com.gtnewhorizons.modularui.api.screen.ModularWindow; import com.gtnewhorizons.modularui.api.screen.UIBuildContext; import com.gtnewhorizons.modularui.common.fluid.FluidStackTank; @@ -309,6 +310,8 @@ public abstract class GT_MetaTileEntity_BasicTank extends GT_MetaTileEntity_Tier // Do nothing } + protected static final NumberFormatMUI numberFormat = new NumberFormatMUI(); + @Override public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { builder.widget( @@ -334,7 +337,7 @@ public abstract class GT_MetaTileEntity_BasicTank extends GT_MetaTileEntity_Tier new TextWidget("Liquid Amount").setDefaultColor(COLOR_TEXT_WHITE.get()) .setPos(10, 20)) .widget( - TextWidget.dynamicString(() -> GT_Utility.parseNumberToString(mFluid != null ? mFluid.amount : 0)) + new TextWidget().setStringSupplier(() -> numberFormat.format(mFluid != null ? mFluid.amount : 0)) .setDefaultColor(COLOR_TEXT_WHITE.get()) .setPos(10, 30)); } diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java index 2bbd99a36a..e240625f99 100644 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java +++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java @@ -16,7 +16,7 @@ import java.util.List; import java.util.Map; import java.util.Optional; import java.util.function.Consumer; -import java.util.function.Function; +import java.util.function.IntConsumer; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -43,6 +43,7 @@ import org.lwjgl.input.Keyboard; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; +import com.gtnewhorizons.modularui.api.NumberFormatMUI; import com.gtnewhorizons.modularui.api.math.Alignment; import com.gtnewhorizons.modularui.api.math.Pos2d; import com.gtnewhorizons.modularui.api.screen.ModularWindow; @@ -2213,27 +2214,35 @@ public abstract class GT_MetaTileEntity_MultiBlockBase extends MetaTileEntity return true; } + protected final NumberFormatMUI numberFormat = new NumberFormatMUI(); + protected String generateCurrentRecipeInfoString() { - StringBuilder ret = new StringBuilder(EnumChatFormatting.WHITE + "Progress: ") - .append(String.format("%,.2f", (double) mProgresstime / 20)) - .append("s / ") - .append(String.format("%,.2f", (double) mMaxProgresstime / 20)) - .append("s (") - .append(String.format("%,.1f", (double) mProgresstime / mMaxProgresstime * 100)) - .append("%)\n"); - - Function<Integer, Void> appendRate = (Integer amount) -> { + StringBuffer ret = new StringBuffer(EnumChatFormatting.WHITE + "Progress: "); + + numberFormat.setMinimumFractionDigits(2); + numberFormat.setMaximumFractionDigits(2); + numberFormat.format((double) mProgresstime / 20, ret); + ret.append("s / "); + numberFormat.format((double) mMaxProgresstime / 20, ret); + ret.append("s ("); + numberFormat.setMinimumFractionDigits(1); + numberFormat.setMaximumFractionDigits(1); + numberFormat.format((double) mProgresstime / mMaxProgresstime * 100, ret); + ret.append("%)\n"); + numberFormat.setMinimumFractionDigits(0); + numberFormat.setMaximumFractionDigits(2); + + IntConsumer appendRate = (amount) -> { double processPerTick = (double) amount / mMaxProgresstime * 20; if (processPerTick > 1) { - ret.append(" (") - .append(formatNumbers(Math.round(processPerTick * 10) / 10.0)) - .append("/s)"); + ret.append(" ("); + numberFormat.format(Math.round(processPerTick * 10) / 10.0, ret); + ret.append("/s)"); } else { - ret.append(" (") - .append(formatNumbers(Math.round(1 / processPerTick * 10) / 10.0)) - .append("s/ea)"); + ret.append(" ("); + numberFormat.format(Math.round(1 / processPerTick * 10) / 10.0, ret); + ret.append("s/ea)"); } - return null; }; int lines = 0; @@ -2251,10 +2260,10 @@ public abstract class GT_MetaTileEntity_MultiBlockBase extends MetaTileEntity .append(item.getDisplayName()) .append(EnumChatFormatting.WHITE) .append(" x ") - .append(EnumChatFormatting.GOLD) - .append(formatNumbers(item.stackSize)) - .append(EnumChatFormatting.WHITE); - appendRate.apply(item.stackSize); + .append(EnumChatFormatting.GOLD); + numberFormat.format(item.stackSize, ret); + ret.append(EnumChatFormatting.WHITE); + appendRate.accept(item.stackSize); ret.append('\n'); } } @@ -2270,11 +2279,11 @@ public abstract class GT_MetaTileEntity_MultiBlockBase extends MetaTileEntity .append(fluid.getLocalizedName()) .append(EnumChatFormatting.WHITE) .append(" x ") - .append(EnumChatFormatting.GOLD) - .append(formatNumbers(fluid.amount)) - .append("L") + .append(EnumChatFormatting.GOLD); + numberFormat.format(fluid.amount, ret); + ret.append("L") .append(EnumChatFormatting.WHITE); - appendRate.apply(fluid.amount); + appendRate.accept(fluid.amount); ret.append('\n'); } } 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<GT_Cover_EUMeter.EUMe final String INVERTED = GT_Utility.trans("INVERTED", "Inverted"); final String NORMAL = GT_Utility.trans("NORMAL", "Normal"); + final CoverDataFollower_NumericWidget<EUMeterData> 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<GT_Cover_EUMeter.EUMe widget -> 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<GT_Cover_FluidLi builder.widget( new CoverDataControllerWidget<>(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<GT_Cover_Fluid private static final int spaceX = 18; private static final int spaceY = 18; + private static final NumberFormatMUI numberFormat; + static { + numberFormat = new NumberFormatMUI(); + numberFormat.setMaximumFractionDigits(2); + } + public FluidRegulatorUIFactory(GT_CoverUIBuildContext buildContext) { super(buildContext); } @@ -314,14 +319,14 @@ public class GT_Cover_FluidRegulator extends GT_CoverBehaviorBase<GT_Cover_Fluid .addTooltip(GT_Utility.trans("343.1", "Use Inverted Machine Processing State")) .setPos(spaceX * 2, spaceY * 1)) .addFollower( - new CoverDataFollower_TextFieldWidget<>(), - 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<GT_Cover_Fluid } return val; }) - .setPattern(BaseTextFieldWidget.WHOLE_NUMS) + .setScrollValues(1, 144, 1000) .setFocusOnGuiOpen(true) .setPos(spaceX * 0, spaceY * 2 + 2) .setSize(spaceX * 4 - 3, 12)) .addFollower( - new CoverDataFollower_TextFieldWidget<>(), - 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<GT_Cover_Fluid } return val; }) - .setPattern(BaseTextFieldWidget.WHOLE_NUMS) .setPos(spaceX * 5, spaceY * 2 + 2) .setSize(spaceX * 2 - 3, 12)) .setPos(startX, startY)) @@ -378,16 +382,17 @@ public class GT_Cover_FluidRegulator extends GT_CoverBehaviorBase<GT_Cover_Fluid .widget( new TextWidget(GT_Utility.trans("209", " ticks")).setDefaultColor(COLOR_TEXT_GRAY.get()) .setPos(startX + spaceX * 7, 4 + startY + spaceY * 2)) - .widget(TextWidget.dynamicText(() -> { + .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<GT_Cover_ItemMeter. private static final int startY = 25; private static final int spaceX = 18; private static final int spaceY = 18; - private static final String ALL_TEXT = "All"; + + /** + * Display the text "All" instead of a number when the slot is set to -1. + */ + protected 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); + } + } + }; private int maxSlot; private int maxThreshold; @@ -234,53 +249,46 @@ public class GT_Cover_ItemMeter extends GT_CoverBehaviorBase<GT_Cover_ItemMeter. .addTooltip(1, INVERTED) .setPos(0, 0)) .addFollower( - new CoverDataFollower_TextFieldWidget<>(), - 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<GT_Cover_ItemMeter. } } - 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() { ItemMeterData coverVariable = getCoverData(); if (coverVariable == null || coverVariable.slot < 0) { diff --git a/src/main/java/gregtech/common/covers/GT_Cover_LiquidMeter.java b/src/main/java/gregtech/common/covers/GT_Cover_LiquidMeter.java index e011954cdd..c3a4b4ff89 100644 --- a/src/main/java/gregtech/common/covers/GT_Cover_LiquidMeter.java +++ b/src/main/java/gregtech/common/covers/GT_Cover_LiquidMeter.java @@ -15,7 +15,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; @@ -27,7 +26,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.tileentities.storage.GT_MetaTileEntity_DigitalTankBase; import io.netty.buffer.ByteBuf; @@ -178,6 +177,7 @@ public class GT_Cover_LiquidMeter extends GT_CoverBehaviorBase<GT_Cover_LiquidMe private static final int startY = 25; private static final int spaceX = 18; private static final int spaceY = 18; + private int maxCapacity; public LiquidMeterUIFactory(GT_CoverUIBuildContext buildContext) { super(buildContext); @@ -188,17 +188,8 @@ public class GT_Cover_LiquidMeter extends GT_CoverBehaviorBase<GT_Cover_LiquidMe protected void addUIWidgets(ModularWindow.Builder builder) { final String INVERTED = GT_Utility.trans("INVERTED", "Inverted"); final String NORMAL = GT_Utility.trans("NORMAL", "Normal"); - final int maxCapacity; - if (getUIBuildContext().getTile() instanceof IFluidHandler) { - FluidTankInfo[] tanks = ((IFluidHandler) getUIBuildContext().getTile()) - .getTankInfo(ForgeDirection.UNKNOWN); - maxCapacity = Arrays.stream(tanks) - .mapToInt(tank -> 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<GT_Cover_LiquidMe .addTooltip(1, INVERTED) .setPos(spaceX * 0, spaceY * 0)) .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(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<T extends GT_Cover_A protected void addUIForDataController(CoverDataControllerWidget<T> 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<FluidTransmitterData> 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<ItemTransmitterData> 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<T extends GUIHost & ProcessingLogicHost<? extend @Nonnull protected static final Pos2d RECIPE_LOCKING_BUTTON_DEFAULT_POS = new Pos2d(0, 0); + protected static final NumberFormatMUI numberFormat = new NumberFormatMUI(); + public MachineGUIProvider(@Nonnull T host) { super(host); } @@ -252,10 +255,19 @@ public class MachineGUIProvider<T extends GUIHost & ProcessingLogicHost<? extend @Nonnull UIBuildContext uiBuildContext) { PowerLogic power = host.getPowerLogic(); tab.addChild( - TextWidget.dynamicString(() -> 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<T extends ISerializableObject> extends NumericWidget + implements IDataFollowerWidget<T, Double> { + + private Function<T, Double> 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<T> setDataToStateGetter(Function<T, Double> dataToStateGetter) { + this.dataToStateGetter = dataToStateGetter; + return this; + } + + @Override + public CoverDataFollower_NumericWidget<T> setStateSetter(Consumer<Double> 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<T extends ISerializableObject> ex setText(dataToStateGetter.apply(data)); } + /** + * @deprecated Use {@link CoverDataFollower_NumericWidget} + */ + @Deprecated public CoverDataFollower_TextFieldWidget<T> 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<T extends ISerializableObject> ex return this; } + /** + * @deprecated Use {@link CoverDataFollower_NumericWidget} + */ + @Deprecated public CoverDataFollower_TextFieldWidget<T> setOnScrollNumbers() { return setOnScrollNumbers(1, 50, 1000); } + /** + * @deprecated Use {@link CoverDataFollower_NumericWidget} + */ + @Deprecated public CoverDataFollower_TextFieldWidget<T> 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<T extends ISerializableObject> ex return this; } + /** + * @deprecated Use {@link CoverDataFollower_NumericWidget} + */ + @Deprecated public CoverDataFollower_TextFieldWidget<T> setOnScrollText() { return setOnScrollText(1, 5, 50); } + /** + * @deprecated Use {@link CoverDataFollower_NumericWidget} + */ + @Deprecated public CoverDataFollower_TextFieldWidget<T> 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_VolumetricFlask extends GT_Generic_Item implements IFluidContain private class VolumetricFlaskUIFactory { private final UIBuildContext buildContext; + private int capacity; private final int maxCapacity; - private TextFieldWidget textField; public VolumetricFlaskUIFactory(UIBuildContext buildContext, ItemStack flask) { this.buildContext = buildContext; - this.maxCapacity = ((GT_VolumetricFlask) flask.getItem()).getMaxCapacity(); + GT_VolumetricFlask flaskItem = (GT_VolumetricFlask) flask.getItem(); + this.capacity = flaskItem.getCapacity(flask); + this.maxCapacity = flaskItem.getMaxCapacity(); } public ModularWindow createWindow() { - ModularWindow.Builder builder = ModularWindow.builder(176, 107); + ModularWindow.Builder builder = ModularWindow.builder(150, 54); builder.setBackground(ModularUITextures.VANILLA_BACKGROUND); - textField = new TextFieldWidget() { - - @Override - public void onDestroy() { - if (isClient()) return; - setCapacity(getCurrentItem(), (int) MathExpression.parseMathExpression(getText(), 1)); - getContext().onWidgetUpdate(); - } - }; - textField.setText( - String.valueOf(((GT_VolumetricFlask) getCurrentItem().getItem()).getCapacity(getCurrentItem()))); builder.widget( - textField.setNumbers(() -> 1, () -> maxCapacity) - .setPattern(BaseTextFieldWidget.NATURAL_NUMS) - .setTextAlignment(Alignment.CenterLeft) + new NumericWidget().setGetter(() -> capacity) + .setSetter(value -> setCapacity(getCurrentItem(), capacity = (int) value)) + .setBounds(1, maxCapacity) + .setScrollValues(1, 144, 1000) + .setDefaultValue(capacity) .setTextColor(Color.WHITE.dark(1)) + .setTextAlignment(Alignment.CenterLeft) .setFocusOnGuiOpen(true) - .setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD_LIGHT_GRAY.withOffset(-1, -1, 2, 2)) - .setPos(60, 55) - .setSize(59, 12)); - - addChangeAmountButton(builder, "+1", new Pos2d(20, 26), new Size(22, 20), val -> val + 1); - addChangeAmountButton(builder, "+10", new Pos2d(48, 26), new Size(28, 20), val -> val + 10); - addChangeAmountButton(builder, "+100", new Pos2d(82, 26), new Size(32, 20), val -> val + 100); - addChangeAmountButton(builder, "+1000", new Pos2d(120, 26), new Size(38, 20), val -> val + 1000); - addChangeAmountButton(builder, "-1", new Pos2d(20, 75), new Size(22, 20), val -> val - 1); - addChangeAmountButton(builder, "-10", new Pos2d(48, 75), new Size(28, 20), val -> val - 10); - addChangeAmountButton(builder, "-100", new Pos2d(82, 75), new Size(32, 20), val -> val - 100); - addChangeAmountButton(builder, "-1000", new Pos2d(120, 75), new Size(38, 20), val -> val - 1000); - builder.widget( - new VanillaButtonWidget().setDisplayString("Accept") - .setClickableGetter(() -> MathExpression.parseMathExpression(textField.getText()) > 0) - .setOnClick((clickData, widget) -> { - if (widget.isClient()) { - textField.onRemoveFocus(); - } else { - widget.getWindow() - .tryClose(); - } - }) - .setPos(128, 51) - .setSize(38, 20)); + .setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD.withOffset(-1, -1, 2, 2)) + .setPos(8, 8) + .setSize(77, 12)) + .widget(new TextWidget("Capacity").setPos(88, 10)) + .widget( + new VanillaButtonWidget().setDisplayString("Confirm") + .setOnClick((clickData, widget) -> { + if (!widget.isClient()) { + widget.getWindow() + .tryClose(); + } + }) + .setPos(8, 26) + .setSize(48, 20)); return builder.build(); } - private void addChangeAmountButton(ModularWindow.Builder builder, String text, Pos2d pos, Size size, - Function<Integer, Integer> function) { - builder.widget( - new VanillaButtonWidget().setDisplayString(text) - .setOnClick((clickData, widget) -> { - String currentText = textField.getText(); - int amount = (int) MathExpression.parseMathExpression(currentText, 1); - amount = Math.min(maxCapacity, Math.max(1, function.apply(amount))); - textField.setText(String.valueOf(amount)); - }) - .setPos(pos) - .setSize(size)); - } - private ItemStack getCurrentItem() { return buildContext.getPlayer().inventory.getCurrentItem(); } diff --git a/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_InputBus_ME.java b/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_InputBus_ME.java index 41d9b21de1..91d1355869 100644 --- a/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_InputBus_ME.java +++ b/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_InputBus_ME.java @@ -40,7 +40,7 @@ import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; import com.gtnewhorizons.modularui.common.widget.SlotGroup; import com.gtnewhorizons.modularui.common.widget.SlotWidget; import com.gtnewhorizons.modularui.common.widget.TextWidget; -import com.gtnewhorizons.modularui.common.widget.textfield.TextFieldWidget; +import com.gtnewhorizons.modularui.common.widget.textfield.NumericWidget; import appeng.api.config.Actionable; import appeng.api.config.PowerMultiplier; @@ -699,10 +699,10 @@ public class GT_MetaTileEntity_Hatch_InputBus_ME extends GT_MetaTileEntity_Hatch .setPos(3, 2) .setSize(74, 14)) .widget( - new TextFieldWidget().setSetterInt(val -> minAutoPullStackSize = val) - .setGetterInt(() -> minAutoPullStackSize) - .setNumbers(1, Integer.MAX_VALUE) - .setOnScrollNumbers(1, 4, 64) + new NumericWidget().setSetter(val -> minAutoPullStackSize = (int) val) + .setGetter(() -> minAutoPullStackSize) + .setBounds(1, Integer.MAX_VALUE) + .setScrollValues(1, 4, 64) .setTextAlignment(Alignment.Center) .setTextColor(Color.WHITE.normal) .setSize(70, 18) @@ -713,10 +713,10 @@ public class GT_MetaTileEntity_Hatch_InputBus_ME extends GT_MetaTileEntity_Hatch .setPos(3, 42) .setSize(74, 14)) .widget( - new TextFieldWidget().setSetterInt(val -> autoPullRefreshTime = val) - .setGetterInt(() -> autoPullRefreshTime) - .setNumbers(1, Integer.MAX_VALUE) - .setOnScrollNumbers(1, 4, 64) + new NumericWidget().setSetter(val -> autoPullRefreshTime = (int) val) + .setGetter(() -> autoPullRefreshTime) + .setBounds(1, Integer.MAX_VALUE) + .setScrollValues(1, 4, 64) .setTextAlignment(Alignment.Center) .setTextColor(Color.WHITE.normal) .setSize(70, 18) diff --git a/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_Input_ME.java b/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_Input_ME.java index ea723c18fa..20be0f0005 100644 --- a/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_Input_ME.java +++ b/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_Input_ME.java @@ -45,7 +45,7 @@ import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; import com.gtnewhorizons.modularui.common.widget.FluidSlotWidget; import com.gtnewhorizons.modularui.common.widget.SlotGroup; import com.gtnewhorizons.modularui.common.widget.TextWidget; -import com.gtnewhorizons.modularui.common.widget.textfield.TextFieldWidget; +import com.gtnewhorizons.modularui.common.widget.textfield.NumericWidget; import appeng.api.config.Actionable; import appeng.api.config.PowerMultiplier; @@ -778,10 +778,10 @@ public class GT_MetaTileEntity_Hatch_Input_ME extends GT_MetaTileEntity_Hatch_In .setPos(3, 2) .setSize(74, 14)) .widget( - new TextFieldWidget().setSetterInt(val -> minAutoPullAmount = val) - .setGetterInt(() -> minAutoPullAmount) - .setNumbers(1, Integer.MAX_VALUE) - .setOnScrollNumbers(1, 4, 64) + new NumericWidget().setSetter(val -> minAutoPullAmount = (int) val) + .setGetter(() -> minAutoPullAmount) + .setBounds(1, Integer.MAX_VALUE) + .setScrollValues(1, 4, 64) .setTextAlignment(Alignment.Center) .setTextColor(Color.WHITE.normal) .setSize(70, 18) @@ -792,10 +792,10 @@ public class GT_MetaTileEntity_Hatch_Input_ME extends GT_MetaTileEntity_Hatch_In .setPos(3, 42) .setSize(74, 14)) .widget( - new TextFieldWidget().setSetterInt(val -> autoPullRefreshTime = val) - .setGetterInt(() -> autoPullRefreshTime) - .setNumbers(1, Integer.MAX_VALUE) - .setOnScrollNumbers(1, 4, 64) + new NumericWidget().setSetter(val -> autoPullRefreshTime = (int) val) + .setGetter(() -> autoPullRefreshTime) + .setBounds(1, Integer.MAX_VALUE) + .setScrollValues(1, 4, 64) .setTextAlignment(Alignment.Center) .setTextColor(Color.WHITE.normal) .setSize(70, 18) diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_MicrowaveEnergyTransmitter.java b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_MicrowaveEnergyTransmitter.java index d7ddd84d21..fc6afbd06f 100644 --- a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_MicrowaveEnergyTransmitter.java +++ b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_MicrowaveEnergyTransmitter.java @@ -18,6 +18,7 @@ import net.minecraftforge.common.DimensionManager; import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.FluidStack; +import com.gtnewhorizons.modularui.api.NumberFormatMUI; import com.gtnewhorizons.modularui.api.drawable.IDrawable; import com.gtnewhorizons.modularui.api.screen.ModularWindow; import com.gtnewhorizons.modularui.api.screen.UIBuildContext; @@ -412,6 +413,8 @@ public class GT_MetaTileEntity_MicrowaveEnergyTransmitter extends GT_MetaTileEnt return true; } + protected static final NumberFormatMUI numberFormat = new NumberFormatMUI(); + @Override public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { builder.widget( @@ -419,19 +422,19 @@ public class GT_MetaTileEntity_MicrowaveEnergyTransmitter extends GT_MetaTileEnt .setSize(90, 72) .setPos(43, 4)) .widget( - TextWidget.dynamicString(() -> "X: " + GT_Utility.parseNumberToString(mTargetX)) + new TextWidget().setStringSupplier(() -> "X: " + numberFormat.format(mTargetX)) .setDefaultColor(COLOR_TEXT_WHITE.get()) .setPos(46, 8)) .widget( - TextWidget.dynamicString(() -> "Y: " + GT_Utility.parseNumberToString(mTargetY)) + new TextWidget().setStringSupplier(() -> "Y: " + numberFormat.format(mTargetY)) .setDefaultColor(COLOR_TEXT_WHITE.get()) .setPos(46, 16)) .widget( - TextWidget.dynamicString(() -> "Z: " + GT_Utility.parseNumberToString(mTargetZ)) + new TextWidget().setStringSupplier(() -> "Z: " + numberFormat.format(mTargetZ)) .setDefaultColor(COLOR_TEXT_WHITE.get()) .setPos(46, 24)) .widget( - TextWidget.dynamicString(() -> "Dim: " + GT_Utility.parseNumberToString(mTargetD)) + new TextWidget().setStringSupplier(() -> "Dim: " + numberFormat.format(mTargetD)) .setDefaultColor(COLOR_TEXT_WHITE.get()) .setPos(46, 32)) .widget( diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Teleporter.java b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Teleporter.java index 6b343b5ca8..0666c55ac4 100644 --- a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Teleporter.java +++ b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Teleporter.java @@ -41,6 +41,7 @@ import net.minecraftforge.common.DimensionManager; import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.FluidStack; +import com.gtnewhorizons.modularui.api.NumberFormatMUI; import com.gtnewhorizons.modularui.api.drawable.IDrawable; import com.gtnewhorizons.modularui.api.screen.ModularWindow; import com.gtnewhorizons.modularui.api.screen.UIBuildContext; @@ -520,6 +521,8 @@ public class GT_MetaTileEntity_Teleporter extends GT_MetaTileEntity_BasicTank return true; } + protected static final NumberFormatMUI numberFormat = new NumberFormatMUI(); + @Override public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { builder.widget( @@ -527,19 +530,19 @@ public class GT_MetaTileEntity_Teleporter extends GT_MetaTileEntity_BasicTank .setSize(90, 72) .setPos(43, 4)) .widget( - TextWidget.dynamicString(() -> "X: " + GT_Utility.parseNumberToString(mTargetX)) + new TextWidget().setStringSupplier(() -> "X: " + numberFormat.format(mTargetX)) .setDefaultColor(COLOR_TEXT_WHITE.get()) .setPos(46, 8)) .widget( - TextWidget.dynamicString(() -> "Y: " + GT_Utility.parseNumberToString(mTargetY)) + new TextWidget().setStringSupplier(() -> "Y: " + numberFormat.format(mTargetY)) .setDefaultColor(COLOR_TEXT_WHITE.get()) .setPos(46, 16)) .widget( - TextWidget.dynamicString(() -> "Z: " + GT_Utility.parseNumberToString(mTargetZ)) + new TextWidget().setStringSupplier(() -> "Z: " + numberFormat.format(mTargetZ)) .setDefaultColor(COLOR_TEXT_WHITE.get()) .setPos(46, 24)) .widget( - TextWidget.dynamicString(() -> "Dim: " + GT_Utility.parseNumberToString(mTargetD)) + new TextWidget().setStringSupplier(() -> "Dim: " + numberFormat.format(mTargetD)) .setDefaultColor(COLOR_TEXT_WHITE.get()) .setPos(46, 32)) .widget( diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ConcreteBackfillerBase.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ConcreteBackfillerBase.java index ce8abe7a73..e520b87e43 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ConcreteBackfillerBase.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ConcreteBackfillerBase.java @@ -12,6 +12,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.StatCollector; import com.google.common.collect.ImmutableList; +import com.gtnewhorizons.modularui.api.NumberFormatMUI; import com.gtnewhorizons.modularui.api.math.Alignment; import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; @@ -158,6 +159,8 @@ public abstract class GT_MetaTileEntity_ConcreteBackfillerBase extends GT_MetaTi return true; } + protected static final NumberFormatMUI numberFormat = new NumberFormatMUI(); + @Override protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inventorySlot) { super.drawTexts(screenElements, inventorySlot); @@ -167,7 +170,7 @@ public abstract class GT_MetaTileEntity_ConcreteBackfillerBase extends GT_MetaTi .dynamicString( () -> StatCollector.translateToLocalFormatted( "GT5U.gui.text.backfiller_current_area", - GT_Utility.formatNumbers(clientYHead))) + numberFormat.format(clientYHead))) .setSynced(false) .setTextAlignment(Alignment.CenterLeft) .setEnabled(widget -> getBaseMetaTileEntity().isActive() && workState == STATE_UPWARD)) diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_FusionComputer.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_FusionComputer.java index 168fda93ca..89f180f1c1 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_FusionComputer.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_FusionComputer.java @@ -32,6 +32,7 @@ import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructa import com.gtnewhorizon.structurelib.structure.IStructureDefinition; import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; import com.gtnewhorizon.structurelib.structure.StructureDefinition; +import com.gtnewhorizons.modularui.api.NumberFormatMUI; import com.gtnewhorizons.modularui.api.math.Alignment; import com.gtnewhorizons.modularui.api.screen.ModularWindow; import com.gtnewhorizons.modularui.api.screen.UIBuildContext; @@ -565,6 +566,8 @@ public abstract class GT_MetaTileEntity_FusionComputer return 166; } + protected static final NumberFormatMUI numberFormat = new NumberFormatMUI(); + @Override public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { builder @@ -610,7 +613,7 @@ public abstract class GT_MetaTileEntity_FusionComputer .setTexture(GT_UITextures.PROGRESSBAR_STORED_EU, 147) .setPos(5, 156) .setSize(147, 5)) - .widget(TextWidget.dynamicString(() -> { + .widget(new TextWidget().setStringSupplier(() -> { long energy = getBaseMetaTileEntity().getStoredEU(); if (energy > 160_000_000L && energy < 160_010_000L) { energy = 160_000_000L; @@ -624,7 +627,7 @@ public abstract class GT_MetaTileEntity_FusionComputer if (energy > 5_120_000_000L && energy < 5_120_080_000L) { energy = 5_120_000_000L; } - return GT_Utility.formatNumbers(energy) + " EU"; + return numberFormat.format(energy) + " EU"; }) .setDefaultColor(COLOR_TEXT_RED.get()) .setPos(50, 155)) diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OilDrillBase.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OilDrillBase.java index 254f5bf0b0..c4028f1819 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OilDrillBase.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OilDrillBase.java @@ -36,6 +36,7 @@ import net.minecraftforge.fluids.FluidStack; import org.jetbrains.annotations.NotNull; import com.google.common.collect.ImmutableList; +import com.gtnewhorizons.modularui.api.NumberFormatMUI; import com.gtnewhorizons.modularui.api.math.Alignment; import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; @@ -401,7 +402,7 @@ public abstract class GT_MetaTileEntity_OilDrillBase extends GT_MetaTileEntity_D builder.add( StatCollector.translateToLocalFormatted( "GT5U.gui.text.pump_rate.1", - EnumChatFormatting.AQUA + getFlowRatePerTick()) + EnumChatFormatting.AQUA + numberFormat.format(getFlowRatePerTick())) + StatCollector.translateToLocal("GT5U.gui.text.pump_rate.2"), getReservoirContents() + StatCollector.translateToLocal("GT5U.gui.text.pump_recovery.2")); } else { @@ -423,9 +424,8 @@ public abstract class GT_MetaTileEntity_OilDrillBase extends GT_MetaTileEntity_D return ImmutableList.of(failureReason); } - @NotNull - protected String getFlowRatePerTick() { - return GT_Utility.formatNumbers(this.mMaxProgresstime > 0 ? (mOilFlow / this.mMaxProgresstime) : 0); + protected int getFlowRatePerTick() { + return this.mMaxProgresstime > 0 ? (mOilFlow / this.mMaxProgresstime) : 0; } @NotNull @@ -438,7 +438,7 @@ public abstract class GT_MetaTileEntity_OilDrillBase extends GT_MetaTileEntity_D } private @NotNull String clientFluidType = ""; - private @NotNull String clientPumpRate = ""; + private int clientPumpRate = 0; private @NotNull String clientReservoirContents = ""; @NotNull @@ -455,42 +455,41 @@ public abstract class GT_MetaTileEntity_OilDrillBase extends GT_MetaTileEntity_D .translateToLocalFormatted("GT5U.gui.text.pump_recovery.1", GT_Utility.formatNumbers(amount)); } + protected static final NumberFormatMUI numberFormat = new NumberFormatMUI(); + @Override protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inventorySlot) { super.drawTexts(screenElements, inventorySlot); screenElements .widget( - TextWidget - .dynamicString( + new TextWidget() + .setStringSupplier( () -> EnumChatFormatting.GRAY + StatCollector.translateToLocalFormatted("GT5U.gui.text.pump_fluid_type", clientFluidType)) - .setSynced(false) .setTextAlignment(Alignment.CenterLeft) .setEnabled(widget -> getBaseMetaTileEntity().isActive() && workState == STATE_AT_BOTTOM)) .widget( - TextWidget - .dynamicString( + new TextWidget() + .setStringSupplier( () -> EnumChatFormatting.GRAY + StatCollector.translateToLocalFormatted( "GT5U.gui.text.pump_rate.1", - EnumChatFormatting.AQUA + clientPumpRate) + EnumChatFormatting.AQUA + numberFormat.format(clientPumpRate)) + EnumChatFormatting.GRAY + StatCollector.translateToLocal("GT5U.gui.text.pump_rate.2")) - .setSynced(false) .setTextAlignment(Alignment.CenterLeft) .setEnabled(widget -> getBaseMetaTileEntity().isActive() && workState == STATE_AT_BOTTOM)) .widget( - TextWidget - .dynamicString( + new TextWidget() + .setStringSupplier( () -> EnumChatFormatting.GRAY + clientReservoirContents + EnumChatFormatting.GRAY + StatCollector.translateToLocal("GT5U.gui.text.pump_recovery.2")) - .setSynced(false) .setTextAlignment(Alignment.CenterLeft) .setEnabled(widget -> getBaseMetaTileEntity().isActive() && workState == STATE_AT_BOTTOM)) .widget(new FakeSyncWidget.IntegerSyncer(() -> workState, newInt -> workState = newInt)) .widget(new FakeSyncWidget.StringSyncer(this::getFluidName, newString -> clientFluidType = newString)) - .widget(new FakeSyncWidget.StringSyncer(this::getFlowRatePerTick, newString -> clientPumpRate = newString)) + .widget(new FakeSyncWidget.IntegerSyncer(this::getFlowRatePerTick, newInt -> clientPumpRate = newInt)) .widget( new FakeSyncWidget.StringSyncer( this::getReservoirContents, diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OreDrillingPlantBase.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OreDrillingPlantBase.java index e719f8db0f..045374823f 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OreDrillingPlantBase.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OreDrillingPlantBase.java @@ -30,6 +30,7 @@ import net.minecraftforge.fluids.FluidStack; import org.jetbrains.annotations.NotNull; import com.google.common.collect.ImmutableList; +import com.gtnewhorizons.modularui.api.NumberFormatMUI; import com.gtnewhorizons.modularui.api.drawable.IDrawable; import com.gtnewhorizons.modularui.api.math.Alignment; import com.gtnewhorizons.modularui.api.screen.ModularWindow; @@ -588,40 +589,39 @@ public abstract class GT_MetaTileEntity_OreDrillingPlantBase extends GT_MetaTile return tt; } + protected static final NumberFormatMUI numberFormat = new NumberFormatMUI(); + @Override protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inventorySlot) { super.drawTexts(screenElements, inventorySlot); screenElements .widget( - TextWidget - .dynamicString( + new TextWidget() + .setStringSupplier( () -> EnumChatFormatting.GRAY + StatCollector.translateToLocalFormatted( "GT5U.gui.text.drill_ores_left_chunk", - GT_Utility.formatNumbers(clientOreListSize))) - .setSynced(false) + numberFormat.format(clientOreListSize))) .setTextAlignment(Alignment.CenterLeft) .setEnabled( widget -> getBaseMetaTileEntity().isActive() && clientOreListSize > 0 && workState == STATE_AT_BOTTOM)) .widget( - TextWidget - .dynamicString( + new TextWidget() + .setStringSupplier( () -> EnumChatFormatting.GRAY + StatCollector.translateToLocalFormatted( "GT5U.gui.text.drill_ores_left_layer", - GT_Utility.formatNumbers(clientYHead), - GT_Utility.formatNumbers(clientOreListSize))) - .setSynced(false) + numberFormat.format(clientYHead), + numberFormat.format(clientOreListSize))) .setTextAlignment(Alignment.CenterLeft) .setEnabled( widget -> getBaseMetaTileEntity().isActive() && clientYHead > 0 && workState == STATE_DOWNWARD)) .widget( - TextWidget - .dynamicString( + new TextWidget() + .setStringSupplier( () -> EnumChatFormatting.GRAY + StatCollector.translateToLocalFormatted( "GT5U.gui.text.drill_chunks_left", - GT_Utility.formatNumbers(clientCurrentChunk), - GT_Utility.formatNumbers(clientTotalChunks))) - .setSynced(false) + numberFormat.format(clientCurrentChunk), + numberFormat.format(clientTotalChunks))) .setTextAlignment(Alignment.CenterLeft) .setEnabled( widget -> getBaseMetaTileEntity().isActive() && clientCurrentChunk > 0 diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PCBFactory.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PCBFactory.java index 0f6fa77197..547ec67921 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PCBFactory.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PCBFactory.java @@ -54,7 +54,7 @@ import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; import com.gtnewhorizons.modularui.common.widget.DynamicPositionedRow; import com.gtnewhorizons.modularui.common.widget.MultiChildWidget; import com.gtnewhorizons.modularui.common.widget.TextWidget; -import com.gtnewhorizons.modularui.common.widget.textfield.TextFieldWidget; +import com.gtnewhorizons.modularui.common.widget.textfield.NumericWidget; import gregtech.api.GregTech_API; import gregtech.api.enums.Materials; @@ -1050,9 +1050,9 @@ public class GT_MetaTileEntity_PCBFactory extends .setSize(20, 16) .setPos(173, 98)) .widget( - new TextFieldWidget().setGetterInt(() -> mSetTier) - .setSetterInt(val -> mSetTier = val) - .setNumbers(1, 3) + new NumericWidget().setGetter(() -> mSetTier) + .setSetter(val -> mSetTier = (int) val) + .setBounds(1, 3) .setTextColor(Color.WHITE.normal) .setTextAlignment(Alignment.Center) .addTooltip("PCB Factory Tier") @@ -1161,9 +1161,9 @@ public class GT_MetaTileEntity_PCBFactory extends .setEnabled(widget -> !getBaseMetaTileEntity().isActive()) .setPos(0, 4)) .widget( - new TextFieldWidget().setGetterInt(() -> (int) ((1f / mRoughnessMultiplier) * 100f)) - .setSetterInt(val -> mRoughnessMultiplier = 100f / val) - .setNumbers(50, 200) + new NumericWidget().setGetter(() -> (int) ((1f / mRoughnessMultiplier) * 100f)) + .setSetter(val -> mRoughnessMultiplier = 100f / (int) val) + .setBounds(50, 200) .setTextColor(Color.WHITE.normal) .setTextAlignment(Alignment.Center) .addTooltip( @@ -1184,18 +1184,18 @@ public class GT_MetaTileEntity_PCBFactory extends .widget( new DynamicPositionedRow().setSynced(false) .widget( - new TextFieldWidget().setGetterInt(() -> mBioOffsets[0]) - .setSetterInt(val -> mBioOffsets[0] = val) - .setNumbers(-16, 16) + new NumericWidget().setGetter(() -> mBioOffsets[0]) + .setSetter(val -> mBioOffsets[0] = (int) val) + .setBounds(-16, 16) .setTextColor(Color.WHITE.normal) .setTextAlignment(Alignment.Center) .addTooltip("X Offset") .setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD) .setSize(36, 18)) .widget( - new TextFieldWidget().setGetterInt(() -> mBioOffsets[1]) - .setSetterInt(val -> mBioOffsets[1] = val) - .setNumbers(-16, 16) + new NumericWidget().setGetter(() -> mBioOffsets[1]) + .setSetter(val -> mBioOffsets[1] = (int) val) + .setBounds(-16, 16) .setTextColor(Color.WHITE.normal) .setTextAlignment(Alignment.Center) .addTooltip("Z Offset") @@ -1208,18 +1208,18 @@ public class GT_MetaTileEntity_PCBFactory extends .widget( new DynamicPositionedRow().setSynced(false) .widget( - new TextFieldWidget().setGetterInt(() -> mOCTier1Offsets[0]) - .setSetterInt(val -> mOCTier1Offsets[0] = val) - .setNumbers(-16, 16) + new NumericWidget().setGetter(() -> mOCTier1Offsets[0]) + .setSetter(val -> mOCTier1Offsets[0] = (int) val) + .setBounds(-16, 16) .setTextColor(Color.WHITE.normal) .setTextAlignment(Alignment.Center) .addTooltip("X Offset") .setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD) .setSize(36, 18)) .widget( - new TextFieldWidget().setGetterInt(() -> mOCTier1Offsets[1]) - .setSetterInt(val -> mOCTier1Offsets[1] = val) - .setNumbers(-16, 16) + new NumericWidget().setGetter(() -> mOCTier1Offsets[1]) + .setSetter(val -> mOCTier1Offsets[1] = (int) val) + .setBounds(-16, 16) .setTextColor(Color.WHITE.normal) .setTextAlignment(Alignment.Center) .addTooltip("Z Offset") @@ -1232,18 +1232,18 @@ public class GT_MetaTileEntity_PCBFactory extends .widget( new DynamicPositionedRow().setSynced(false) .widget( - new TextFieldWidget().setGetterInt(() -> mOCTier2Offsets[0]) - .setSetterInt(val -> mOCTier2Offsets[0] = val) - .setNumbers(-16, 16) + new NumericWidget().setGetter(() -> mOCTier2Offsets[0]) + .setSetter(val -> mOCTier2Offsets[0] = (int) val) + .setBounds(-16, 16) .setTextColor(Color.WHITE.normal) .setTextAlignment(Alignment.Center) .addTooltip("X Offset") .setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD) .setSize(36, 18)) .widget( - new TextFieldWidget().setGetterInt(() -> mOCTier2Offsets[1]) - .setSetterInt(val -> mOCTier2Offsets[1] = val) - .setNumbers(-16, 16) + new NumericWidget().setGetter(() -> mOCTier2Offsets[1]) + .setSetter(val -> mOCTier2Offsets[1] = (int) val) + .setBounds(-16, 16) .setTextColor(Color.WHITE.normal) .setTextAlignment(Alignment.Center) .addTooltip("Z Offset") diff --git a/src/main/java/gregtech/common/tileentities/machines/multiblock/AdvChemicalProcessor.java b/src/main/java/gregtech/common/tileentities/machines/multiblock/AdvChemicalProcessor.java index a253f6ac1e..87e986f941 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multiblock/AdvChemicalProcessor.java +++ b/src/main/java/gregtech/common/tileentities/machines/multiblock/AdvChemicalProcessor.java @@ -38,7 +38,7 @@ import com.gtnewhorizons.modularui.common.widget.ButtonWidget; import com.gtnewhorizons.modularui.common.widget.MultiChildWidget; import com.gtnewhorizons.modularui.common.widget.SlotGroup; import com.gtnewhorizons.modularui.common.widget.TextWidget; -import com.gtnewhorizons.modularui.common.widget.textfield.TextFieldWidget; +import com.gtnewhorizons.modularui.common.widget.textfield.NumericWidget; import gregtech.api.GregTech_API; import gregtech.api.enums.GT_Values; @@ -390,9 +390,9 @@ public class AdvChemicalProcessor .setPos(20 * (i % 4) + 18, 18 + (i / 4) * 20)); } child.addChild( - new TextFieldWidget().setGetterInt(() -> maxComplexParallels) - .setSetterInt(parallel -> setMaxComplexParallels(parallel, true)) - .setNumbers(1, MAX_PROCESSES) + new NumericWidget().setGetter(() -> maxComplexParallels) + .setSetter(parallel -> setMaxComplexParallels((int) parallel, true)) + .setBounds(1, MAX_PROCESSES) .setTextColor(Color.WHITE.normal) .setTextAlignment(Alignment.Center) .addTooltip("Tier") diff --git a/src/main/java/gregtech/common/tileentities/machines/multiblock/LaserEngraver.java b/src/main/java/gregtech/common/tileentities/machines/multiblock/LaserEngraver.java index 93bcc09a0b..d4a7283f3e 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multiblock/LaserEngraver.java +++ b/src/main/java/gregtech/common/tileentities/machines/multiblock/LaserEngraver.java @@ -23,7 +23,7 @@ import com.gtnewhorizons.modularui.api.math.Color; import com.gtnewhorizons.modularui.api.widget.IWidgetBuilder; import com.gtnewhorizons.modularui.common.widget.ButtonWidget; import com.gtnewhorizons.modularui.common.widget.MultiChildWidget; -import com.gtnewhorizons.modularui.common.widget.textfield.TextFieldWidget; +import com.gtnewhorizons.modularui.common.widget.textfield.NumericWidget; import gregtech.api.GregTech_API; import gregtech.api.enums.GT_Values; @@ -250,9 +250,9 @@ public class LaserEngraver extends ComplexParallelController<LaserEngraver, Lase .setPos(20 * (i % 4) + 18, 18 + (i / 4) * 20)); } child.addChild( - new TextFieldWidget().setGetterInt(() -> maxComplexParallels) - .setSetterInt(parallel -> setMaxComplexParallels(parallel, true)) - .setNumbers(1, MAX_PROCESSES) + new NumericWidget().setGetter(() -> maxComplexParallels) + .setSetter(parallel -> setMaxComplexParallels((int) parallel, true)) + .setBounds(1, MAX_PROCESSES) .setTextColor(Color.WHITE.normal) .setTextAlignment(Alignment.Center) .addTooltip("Tier") diff --git a/src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_DigitalChestBase.java b/src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_DigitalChestBase.java index fa4147f34c..91ff46c007 100644 --- a/src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_DigitalChestBase.java +++ b/src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_DigitalChestBase.java @@ -19,6 +19,7 @@ import net.minecraft.world.World; import net.minecraftforge.common.util.Constants; import net.minecraftforge.common.util.ForgeDirection; +import com.gtnewhorizons.modularui.api.NumberFormatMUI; import com.gtnewhorizons.modularui.api.screen.ModularWindow; import com.gtnewhorizons.modularui.api.screen.UIBuildContext; import com.gtnewhorizons.modularui.common.widget.DrawableWidget; @@ -522,6 +523,8 @@ public abstract class GT_MetaTileEntity_DigitalChestBase extends GT_MetaTileEnti return true; } + protected static final NumberFormatMUI numberFormat = new NumberFormatMUI(); + @Override public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { builder.widget( @@ -545,9 +548,9 @@ public abstract class GT_MetaTileEntity_DigitalChestBase extends GT_MetaTileEnti new TextWidget("Item Amount").setDefaultColor(COLOR_TEXT_WHITE.get()) .setPos(10, 20)) .widget( - TextWidget - .dynamicString( - () -> GT_Utility.parseNumberToString( + new TextWidget() + .setStringSupplier( + () -> numberFormat.format( this instanceof GT_MetaTileEntity_QuantumChest ? ((GT_MetaTileEntity_QuantumChest) this).mItemCount : 0)) diff --git a/src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_DigitalTankBase.java b/src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_DigitalTankBase.java index 0c640d9ace..bb4ef5e709 100644 --- a/src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_DigitalTankBase.java +++ b/src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_DigitalTankBase.java @@ -26,6 +26,7 @@ import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidTankInfo; import net.minecraftforge.fluids.IFluidHandler; +import com.gtnewhorizons.modularui.api.NumberFormatMUI; import com.gtnewhorizons.modularui.api.math.Alignment; import com.gtnewhorizons.modularui.api.screen.ModularWindow; import com.gtnewhorizons.modularui.api.screen.UIBuildContext; @@ -543,6 +544,8 @@ public abstract class GT_MetaTileEntity_DigitalTankBase extends GT_MetaTileEntit return true; } + protected static final NumberFormatMUI numberFormat = new NumberFormatMUI(); + @Override public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { fluidTank.setAllowOverflow(allowOverflow()); @@ -570,7 +573,7 @@ public abstract class GT_MetaTileEntity_DigitalTankBase extends GT_MetaTileEntit .setDefaultColor(COLOR_TEXT_WHITE.get()) .setPos(10, 20)) .widget( - TextWidget.dynamicString(() -> GT_Utility.parseNumberToString(mFluid != null ? mFluid.amount : 0)) + new TextWidget().setStringSupplier(() -> numberFormat.format(mFluid != null ? mFluid.amount : 0)) .setDefaultColor(COLOR_TEXT_WHITE.get()) .setPos(10, 30)) .widget( |