diff options
Diffstat (limited to 'src/main/java/gregtech/common/covers')
10 files changed, 235 insertions, 234 deletions
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_Arm.java b/src/main/java/gregtech/common/covers/GT_Cover_Arm.java index 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(); |