diff options
author | olim <bobq4582@gmail.com> | 2024-04-23 17:09:31 +0100 |
---|---|---|
committer | olim <bobq4582@gmail.com> | 2024-05-09 22:42:34 +0100 |
commit | e950575d4e11d27acbb6682b248de8f477a9ba50 (patch) | |
tree | c6a2186e54aece812c924774e9799306dd8c859d /src/main/java/de/hysky/skyblocker/skyblock | |
parent | 5eb9d273d2eb56cebaf0be0f90716b362916400b (diff) | |
download | Skyblocker-e950575d4e11d27acbb6682b248de8f477a9ba50.tar.gz Skyblocker-e950575d4e11d27acbb6682b248de8f477a9ba50.tar.bz2 Skyblocker-e950575d4e11d27acbb6682b248de8f477a9ba50.zip |
create mixin to render to the sign input screen and basic converter for k,m,b
Diffstat (limited to 'src/main/java/de/hysky/skyblocker/skyblock')
-rw-r--r-- | src/main/java/de/hysky/skyblocker/skyblock/SignCalculator.java | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/SignCalculator.java b/src/main/java/de/hysky/skyblocker/skyblock/SignCalculator.java new file mode 100644 index 00000000..ab0d417c --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/SignCalculator.java @@ -0,0 +1,74 @@ +package de.hysky.skyblocker.skyblock; + +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.DrawContext; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; +import net.minecraft.util.Util; +import net.minecraft.util.math.Vec3i; + +import java.awt.*; +import java.awt.image.LookupTable; +import java.text.DecimalFormat; +import java.util.HashMap; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class SignCalculator { + + private static final MinecraftClient CLIENT = MinecraftClient.getInstance(); + + private static final Pattern NUMBER_PATTERN = Pattern.compile("(\\d+\\.?\\d*)([kmb]?)"); + private static final DecimalFormat FORMATTER = new DecimalFormat("#,###.##"); + + private static final HashMap<String, Integer> magnitudeValues = Util.make(new HashMap<>(), map -> { + map.put("k", 1000); + map.put("m", 1000000); + map.put("b", 1000000000); + }); + + private static String input; + private static Double output; + + public static void renderSign(DrawContext context, String[] messages){ + input = messages[0]; + + calculateValue(); + + render(context); + } + + public static void calculateValue() { + Matcher numberMatcher = NUMBER_PATTERN.matcher(input.toLowerCase()); + if (!numberMatcher.matches()) { + output = null; + return; + } + double number = Double.parseDouble(numberMatcher.group(1)); // + String magnitude = numberMatcher.group(2); + + if (!magnitude.isEmpty()) { + if (!magnitudeValues.containsKey(magnitude)) {//its invalid if its another letter + output = null; + return; + } + number *= magnitudeValues.get(magnitude); + } + + output = number; + + } + + + private static void render(DrawContext context) { + Text text; + if (output == null) { + text = Text.literal("test").formatted(Formatting.RED); + } + else { + text = Text.literal(input +" = " + FORMATTER.format(output)).formatted(Formatting.GREEN); + } + + context.drawCenteredTextWithShadow(CLIENT.textRenderer, text,context.getScaledWindowWidth() /2 , 55,0xFFFFFFFF); + } +} |