diff options
Diffstat (limited to 'src/main/java')
4 files changed, 25 insertions, 29 deletions
diff --git a/src/main/java/de/hysky/skyblocker/mixins/SignEditScreenMixin.java b/src/main/java/de/hysky/skyblocker/mixins/SignEditScreenMixin.java index 88c54878..d1800e9b 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/SignEditScreenMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/SignEditScreenMixin.java @@ -1,4 +1,4 @@ -package de.hysky.skyblocker.mixin; +package de.hysky.skyblocker.mixins; import de.hysky.skyblocker.config.SkyblockerConfigManager; @@ -16,7 +16,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import java.util.Objects; @Mixin(AbstractSignEditScreen.class) -public abstract class SignEditScreenMixin{ +public abstract class SignEditScreenMixin { @Shadow @Final private String[] messages; @@ -32,15 +32,13 @@ public abstract class SignEditScreenMixin{ @Inject(method = "finishEditing", at = @At("HEAD")) private void skyblocker$finishEditing(CallbackInfo ci) { //if the sign is being used to enter number get number from calculator for if maths has been done - if (Utils.isOnSkyblock() && SkyblockerConfigManager.get().general.enableSignCalculator && Objects.equals(messages[1], "^^^^^^^^^^^^^^^")) { + if (Utils.isOnSkyblock() && SkyblockerConfigManager.get().general.enableSignCalculator && Objects.equals(messages[1], "^^^^^^^^^^^^^^^")) { boolean isPrice = messages[2].contains("price"); String value = SignCalculator.getNewValue(isPrice); if (value.length() >= 15) { - value = value.substring(0,15); + value = value.substring(0, 15); } messages[0] = value; } - } - } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/calculators/CalculatorCommand.java b/src/main/java/de/hysky/skyblocker/skyblock/calculators/CalculatorCommand.java index f9b8b4cf..d78e2c0d 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/calculators/CalculatorCommand.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/calculators/CalculatorCommand.java @@ -33,7 +33,7 @@ public class CalculatorCommand { dispatcher.register(literal(SkyblockerMod.NAMESPACE) .then(literal("calculate") .then(argument("equation", StringArgumentType.greedyString()) - .executes(context -> doCalculation(getString(context, "equation")) ) + .executes(context -> doCalculation(getString(context, "equation"))) ) ) ); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/calculators/SignCalculator.java b/src/main/java/de/hysky/skyblocker/skyblock/calculators/SignCalculator.java index 7dbeabd9..82d86ba7 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/calculators/SignCalculator.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/calculators/SignCalculator.java @@ -12,21 +12,19 @@ public class SignCalculator { private static final MinecraftClient CLIENT = MinecraftClient.getInstance(); - private static final DecimalFormat FORMATTER = new DecimalFormat("#,###.##"); + private static final DecimalFormat FORMATTER = new DecimalFormat("#,###.##"); private static String lastInput; private static String input; private static Double output; - public static void renderSign(DrawContext context, String[] messages){ + public static void renderSign(DrawContext context, String[] messages) { input = messages[0]; - - //only update output if new input if (!input.equals(lastInput)) { // try { output = Calculator.calculate(input); - } catch (Exception e){ + } catch (Exception e) { output = null; } } @@ -52,11 +50,10 @@ public class SignCalculator { Text text; if (output == null) { text = Text.translatable("text.autoconfig.skyblocker.option.general.enableSignCalculator.invalidEquation").formatted(Formatting.RED); - } - else { - text = Text.literal(input +" = " + FORMATTER.format(output)).formatted(Formatting.GREEN); + } else { + text = Text.literal(input + " = " + FORMATTER.format(output)).formatted(Formatting.GREEN); } - context.drawCenteredTextWithShadow(CLIENT.textRenderer, text,context.getScaledWindowWidth() /2 , 55,0xFFFFFFFF); + context.drawCenteredTextWithShadow(CLIENT.textRenderer, text, context.getScaledWindowWidth() / 2, 55, 0xFFFFFFFF); } } diff --git a/src/main/java/de/hysky/skyblocker/utils/Calculator.java b/src/main/java/de/hysky/skyblocker/utils/Calculator.java index 19155708..bb6ed768 100644 --- a/src/main/java/de/hysky/skyblocker/utils/Calculator.java +++ b/src/main/java/de/hysky/skyblocker/utils/Calculator.java @@ -11,11 +11,13 @@ public class Calculator { public enum TokenType { NUMBER, OPERATOR, L_PARENTHESIS, R_PARENTHESIS } + public static class Token { public TokenType type; String value; int tokenLength; } + private static final Pattern NUMBER_PATTERN = Pattern.compile("(\\d+\\.?\\d*)([kmbs]?)"); private static final HashMap<String, Integer> magnitudeValues = Util.make(new HashMap<>(), map -> { map.put("s", 64); @@ -24,15 +26,14 @@ public class Calculator { map.put("b", 1000000000); }); - private static List<Token> lex(String input) { List<Token> tokens = new ArrayList<>(); - input = input.replace(" ", "").toLowerCase().replace("x","*"); + input = input.replace(" ", "").toLowerCase().replace("x", "*"); int i = 0; while (i < input.length()) { Token token = new Token(); switch (input.charAt(i)) { - case '+','-','*','/' -> { + case '+', '-', '*', '/' -> { token.type = TokenType.OPERATOR; token.value = String.valueOf(input.charAt(i)); token.tokenLength = 1; @@ -43,8 +44,8 @@ public class Calculator { token.value = String.valueOf(input.charAt(i)); token.tokenLength = 1; //add implicit multiplication when there is a number before brackets - if (!tokens.isEmpty() ) { - TokenType lastType = tokens.get(tokens.size()-1).type; + if (!tokens.isEmpty()) { + TokenType lastType = tokens.get(tokens.size() - 1).type; if (lastType == TokenType.R_PARENTHESIS || lastType == TokenType.NUMBER) { Token mutliplyToken = new Token(); mutliplyToken.type = TokenType.OPERATOR; @@ -66,8 +67,8 @@ public class Calculator { if (!numberMatcher.find()) {//invalid value to lex throw new UnsupportedOperationException("invalid character"); } - int end = numberMatcher.end(); - token.value = input.substring(i,i + end); + int end = numberMatcher.end(); + token.value = input.substring(i, i + end); token.tokenLength = end; } } @@ -80,7 +81,8 @@ public class Calculator { } /** - * This is an implementation of the shunting yard algorithm to convert the equation to reverse polish notation + * This is an implementation of the shunting yard algorithm to convert the equation to reverse polish notation + * * @param tokens equation in infix notation order * @return equation in RPN order */ @@ -114,7 +116,7 @@ public class Calculator { case L_PARENTHESIS -> { operatorStack.push(shuntingToken); } - case R_PARENTHESIS -> { + case R_PARENTHESIS -> { while (true) { if (operatorStack.isEmpty()) { throw new UnsupportedOperationException("Unbalanced left parenthesis"); @@ -139,12 +141,13 @@ public class Calculator { return outputQueue.stream().toList(); } + private static int getPrecedence(String operator) { switch (operator) { - case "+","-" -> { + case "+", "-" -> { return 0; } - case "*","/" -> { + case "*", "/" -> { return 1; } default -> throw new UnsupportedOperationException("Invalid operator"); @@ -152,7 +155,6 @@ public class Calculator { } /** - * * @param tokens list of Tokens in reverse polish notation * @return answer to equation */ @@ -216,5 +218,4 @@ public class Calculator { public static double calculate(String equation) { return evaluate(shunt(lex(equation))); } - } |