diff options
| author | Abdiel Kavash <19243993+AbdielKavash@users.noreply.github.com> | 2024-03-12 19:00:02 -0600 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-03-13 02:00:02 +0100 |
| commit | 26c8407b9d22dbe4e3b98b4e08acfcdbfdd89f45 (patch) | |
| tree | ed601445c225fc184a76cf7a0fa8b6d80113c2e0 /src/main/java/gregtech/common/covers/redstone | |
| parent | 056eb3667f76e260d99b9ad72ea83253be162543 (diff) | |
| download | GT5-Unofficial-26c8407b9d22dbe4e3b98b4e08acfcdbfdd89f45.tar.gz GT5-Unofficial-26c8407b9d22dbe4e3b98b4e08acfcdbfdd89f45.tar.bz2 GT5-Unofficial-26c8407b9d22dbe4e3b98b4e08acfcdbfdd89f45.zip | |
Numeric widget and localized number formatting. (#2532)
* Cover widgets
* Volumetric flask
* Misc textfields
* Update GT_MetaTileEntity_MultiBlockBase.java
* Update GT_MetaTileEntity_MultiBlockBase.java
* Fixes decimal digits
---------
Co-authored-by: Martin Robertz <dream-master@gmx.net>
Diffstat (limited to 'src/main/java/gregtech/common/covers/redstone')
3 files changed, 66 insertions, 56 deletions
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(); |
