diff options
Diffstat (limited to 'src/main/java/de/hysky/skyblocker/mixin/yacl')
5 files changed, 159 insertions, 0 deletions
diff --git a/src/main/java/de/hysky/skyblocker/mixin/yacl/DoubleFieldControllerMixin.java b/src/main/java/de/hysky/skyblocker/mixin/yacl/DoubleFieldControllerMixin.java new file mode 100644 index 00000000..ac24c09f --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/mixin/yacl/DoubleFieldControllerMixin.java @@ -0,0 +1,27 @@ +package de.hysky.skyblocker.mixin.yacl; + +import java.text.NumberFormat; +import java.util.function.Function; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; + +import dev.isxander.yacl3.api.Option; +import dev.isxander.yacl3.gui.controllers.string.number.DoubleFieldController; +import dev.isxander.yacl3.gui.controllers.string.number.NumberFieldController; +import net.minecraft.text.Text; + +@Mixin(value = DoubleFieldController.class, remap = false) +public abstract class DoubleFieldControllerMixin extends NumberFieldController<Double> { + private static final NumberFormat NUMBER_FORMAT = NumberFormat.getInstance(); + + + public DoubleFieldControllerMixin(Option<Double> option, Function<Double, Text> displayFormatter) { + super(option, displayFormatter); + } + + @Overwrite + public String getString() { + return NUMBER_FORMAT.format(option().pendingValue()); + } +} diff --git a/src/main/java/de/hysky/skyblocker/mixin/yacl/FloatFieldControllerMixin.java b/src/main/java/de/hysky/skyblocker/mixin/yacl/FloatFieldControllerMixin.java new file mode 100644 index 00000000..d67993c2 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/mixin/yacl/FloatFieldControllerMixin.java @@ -0,0 +1,27 @@ +package de.hysky.skyblocker.mixin.yacl; + +import java.text.NumberFormat; +import java.util.function.Function; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; + +import dev.isxander.yacl3.api.Option; +import dev.isxander.yacl3.gui.controllers.string.number.FloatFieldController; +import dev.isxander.yacl3.gui.controllers.string.number.NumberFieldController; +import net.minecraft.text.Text; + +@Mixin(value = FloatFieldController.class, remap = false) +public abstract class FloatFieldControllerMixin extends NumberFieldController<Float> { + private static final NumberFormat NUMBER_FORMAT = NumberFormat.getInstance(); + + + public FloatFieldControllerMixin(Option<Float> option, Function<Float, Text> displayFormatter) { + super(option, displayFormatter); + } + + @Overwrite + public String getString() { + return NUMBER_FORMAT.format(option().pendingValue()); + } +} diff --git a/src/main/java/de/hysky/skyblocker/mixin/yacl/IntegerFieldControllerMixin.java b/src/main/java/de/hysky/skyblocker/mixin/yacl/IntegerFieldControllerMixin.java new file mode 100644 index 00000000..b95cbef7 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/mixin/yacl/IntegerFieldControllerMixin.java @@ -0,0 +1,31 @@ +package de.hysky.skyblocker.mixin.yacl; + +import java.text.NumberFormat; +import java.util.function.Function; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; + +import dev.isxander.yacl3.api.Option; +import dev.isxander.yacl3.gui.controllers.string.number.IntegerFieldController; +import dev.isxander.yacl3.gui.controllers.string.number.NumberFieldController; +import net.minecraft.text.Text; + +@Mixin(value = IntegerFieldController.class, remap = false) +public abstract class IntegerFieldControllerMixin extends NumberFieldController<Integer> { + private static final NumberFormat NUMBER_FORMAT = NumberFormat.getInstance(); + + public IntegerFieldControllerMixin(Option<Integer> option, Function<Integer, Text> displayFormatter) { + super(option, displayFormatter); + } + + @Overwrite + public String getString() { + return NUMBER_FORMAT.format(option().pendingValue()); + } + + @Overwrite + public boolean isInputValid(String input) { + return super.isInputValid(input); + } +} diff --git a/src/main/java/de/hysky/skyblocker/mixin/yacl/LongFieldControllerMixin.java b/src/main/java/de/hysky/skyblocker/mixin/yacl/LongFieldControllerMixin.java new file mode 100644 index 00000000..99871e2e --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/mixin/yacl/LongFieldControllerMixin.java @@ -0,0 +1,31 @@ +package de.hysky.skyblocker.mixin.yacl; + +import java.text.NumberFormat; +import java.util.function.Function; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; + +import dev.isxander.yacl3.api.Option; +import dev.isxander.yacl3.gui.controllers.string.number.LongFieldController; +import dev.isxander.yacl3.gui.controllers.string.number.NumberFieldController; +import net.minecraft.text.Text; + +@Mixin(value = LongFieldController.class, remap = false) +public abstract class LongFieldControllerMixin extends NumberFieldController<Long> { + private static final NumberFormat NUMBER_FORMAT = NumberFormat.getInstance(); + + public LongFieldControllerMixin(Option<Long> option, Function<Long, Text> displayFormatter) { + super(option, displayFormatter); + } + + @Overwrite + public String getString() { + return NUMBER_FORMAT.format(option().pendingValue()); + } + + @Overwrite + public boolean isInputValid(String input) { + return super.isInputValid(input); + } +} diff --git a/src/main/java/de/hysky/skyblocker/mixin/yacl/NumberFieldControllerMixin.java b/src/main/java/de/hysky/skyblocker/mixin/yacl/NumberFieldControllerMixin.java new file mode 100644 index 00000000..17a99cfd --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/mixin/yacl/NumberFieldControllerMixin.java @@ -0,0 +1,43 @@ +package de.hysky.skyblocker.mixin.yacl; + +import java.text.DecimalFormatSymbols; +import java.text.NumberFormat; +import java.text.ParseException; +import java.text.ParsePosition; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; + +import dev.isxander.yacl3.gui.controllers.slider.ISliderController; +import dev.isxander.yacl3.gui.controllers.string.number.NumberFieldController; +import dev.isxander.yacl3.impl.utils.YACLConstants; +import net.minecraft.util.math.MathHelper; + +@Mixin(value = NumberFieldController.class, remap = false) +public abstract class NumberFieldControllerMixin<T extends Number> implements ISliderController<T> { + private static final NumberFormat NUMBER_FORMAT = NumberFormat.getInstance(); + private static final DecimalFormatSymbols DECIMAL_FORMAT_SYMBOLS = DecimalFormatSymbols.getInstance(); + + @Overwrite + public void setFromString(String value) { + try { + setPendingValue(MathHelper.clamp(NUMBER_FORMAT.parse(value).doubleValue(), min(), max())); + } catch (ParseException ignore) { + YACLConstants.LOGGER.warn("Failed to parse number: {}", value); + } + } + + @Overwrite + public boolean isInputValid(String input) { + input = input.replace(DECIMAL_FORMAT_SYMBOLS.getGroupingSeparator() + "", ""); + ParsePosition parsePosition = new ParsePosition(0); + NUMBER_FORMAT.parse(input, parsePosition); + + return parsePosition.getIndex() == input.length(); + } + + @Overwrite + protected String cleanupNumberString(String number) { + throw new UnsupportedOperationException("This method should no longer be called."); + } +} |