diff options
Diffstat (limited to 'src/main')
3 files changed, 107 insertions, 0 deletions
diff --git a/src/main/java/de/hysky/skyblocker/mixins/SignEditScreenMixin.java b/src/main/java/de/hysky/skyblocker/mixins/SignEditScreenMixin.java new file mode 100644 index 00000000..a88f97ef --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/mixins/SignEditScreenMixin.java @@ -0,0 +1,32 @@ +package de.hysky.skyblocker.mixin; + + +import de.hysky.skyblocker.skyblock.SignCalculator; +import net.minecraft.block.entity.SignBlockEntity; +import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.gui.screen.ingame.AbstractSignEditScreen; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import java.util.Objects; + +@Mixin(AbstractSignEditScreen.class) +public abstract class SignEditScreenMixin{ + @Shadow + @Final + private String[] messages; + + @Inject(method = "render", at = @At("HEAD")) + private void skyblocker$render(DrawContext context, int mouseX, int mouseY, float delta, CallbackInfo ci) { + //if the sign is being used to enter number send it to the sign calculator + if (Objects.equals(messages[1], "^^^^^^^^^^^^^^^")) { + SignCalculator.renderSign(context, messages); + } + + } + +} 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); + } +} diff --git a/src/main/resources/skyblocker.mixins.json b/src/main/resources/skyblocker.mixins.json index 0032a557..828cc206 100644 --- a/src/main/resources/skyblocker.mixins.json +++ b/src/main/resources/skyblocker.mixins.json @@ -32,6 +32,7 @@ "PlayerSkinTextureMixin", "RenderFishMixin", "ScoreboardMixin", + "SignEditScreenMixin", "SocialInteractionsPlayerListWidgetMixin", "WindowMixin", "WorldRendererMixin", |