diff options
| author | Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> | 2024-05-11 21:29:26 -0400 | 
|---|---|---|
| committer | Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> | 2024-05-11 21:29:26 -0400 | 
| commit | 34a804caaebf08c448ac3ced76d265b9a8ba9457 (patch) | |
| tree | 53d4ecd2cbfc75e6d66b075c1aaf7d83549a1b6a /src | |
| parent | 2d77a7265176fd5fb7e728e362c0c3c2d59bf25d (diff) | |
| download | Skyblocker-34a804caaebf08c448ac3ced76d265b9a8ba9457.tar.gz Skyblocker-34a804caaebf08c448ac3ced76d265b9a8ba9457.tar.bz2 Skyblocker-34a804caaebf08c448ac3ced76d265b9a8ba9457.zip | |
Fix invalid equation text and refactor
Diffstat (limited to 'src')
6 files changed, 38 insertions, 56 deletions
| diff --git a/src/main/java/de/hysky/skyblocker/config/configs/UIAndVisualsConfig.java b/src/main/java/de/hysky/skyblocker/config/configs/UIAndVisualsConfig.java index 99c6381f..03d300f4 100644 --- a/src/main/java/de/hysky/skyblocker/config/configs/UIAndVisualsConfig.java +++ b/src/main/java/de/hysky/skyblocker/config/configs/UIAndVisualsConfig.java @@ -247,7 +247,7 @@ public class UIAndVisualsConfig {          public boolean enabled = true;          @SerialEntry -        public boolean requiresEquals = true; +        public boolean requiresEquals = false;      }      public static class FlameOverlay { diff --git a/src/main/java/de/hysky/skyblocker/skyblock/auction/EditBidPopup.java b/src/main/java/de/hysky/skyblocker/skyblock/auction/EditBidPopup.java index 9114fc52..f96e3231 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/auction/EditBidPopup.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/auction/EditBidPopup.java @@ -76,8 +76,7 @@ public class EditBidPopup extends AbstractPopupScreen {          if (SkyblockerConfigManager.get().uiAndVisuals.inputCalculator.enabled) {              if (!isStringGood(SignCalculator.getNewValue(false))) return;              sendPacket(SignCalculator.getNewValue(false)); -        } -        else { +        } else {              if (!isStringGood(textFieldWidget.getText().trim())) return;              sendPacket(textFieldWidget.getText().trim());          } 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 9c0d83e0..d103bcdd 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/calculators/CalculatorCommand.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/calculators/CalculatorCommand.java @@ -14,7 +14,7 @@ import net.minecraft.text.MutableText;  import net.minecraft.text.Text;  import net.minecraft.util.Formatting; -import java.text.DecimalFormat; +import java.text.NumberFormat;  import static com.mojang.brigadier.arguments.StringArgumentType.getString;  import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.argument; @@ -22,8 +22,7 @@ import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.lit  public class CalculatorCommand {      private static final MinecraftClient CLIENT = MinecraftClient.getInstance(); - -    private static final DecimalFormat FORMATTER = new DecimalFormat("#,###.##"); +    private static final NumberFormat FORMATTER = NumberFormat.getInstance();      public static void init() {          ClientCommandRegistrationCallback.EVENT.register(CalculatorCommand::calculate); @@ -44,7 +43,7 @@ public class CalculatorCommand {          try {              text.append(Text.literal(FORMATTER.format(Calculator.calculate(calculation))).formatted(Formatting.GREEN));          } catch (UnsupportedOperationException e) { -            text.append(Text.translatable("text.autoconfig.skyblocker.option.general.inputCalculator.invalidEquation").formatted(Formatting.RED)); +            text.append(Text.translatable("skyblocker.config.uiAndVisuals.inputCalculator.invalidEquation").formatted(Formatting.RED));          }          if (CLIENT == null || CLIENT.player == null) { 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 02701c16..f9bb1e9f 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/calculators/SignCalculator.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/calculators/SignCalculator.java @@ -7,16 +7,14 @@ import net.minecraft.client.gui.DrawContext;  import net.minecraft.text.Text;  import net.minecraft.util.Formatting; -import java.text.DecimalFormat; +import java.text.NumberFormat;  public class SignCalculator { -      private static final MinecraftClient CLIENT = MinecraftClient.getInstance(); - -    private static final DecimalFormat FORMATTER = new DecimalFormat("#,###.##"); +    private static final NumberFormat FORMATTER = NumberFormat.getInstance();      private static String lastInput; -    private static Double output; +    private static double output;      public static void renderCalculator(DrawContext context, String message, int renderX, int renderY) {          if (SkyblockerConfigManager.get().uiAndVisuals.inputCalculator.requiresEquals) { @@ -24,7 +22,7 @@ public class SignCalculator {                  message = message.substring(1);              }              else { -                output = null; +                output = -1;                  lastInput = message;                  return;              } @@ -34,7 +32,7 @@ public class SignCalculator {              try {                  output = Calculator.calculate(message);              } catch (Exception e) { -                output = null; +                output = -1;              }          } @@ -44,14 +42,14 @@ public class SignCalculator {      }      public static String getNewValue(Boolean isPrice) { -        if (output == null) { +        if (output == -1) {              //if mode is not activated or just invalid equation return what the user typed in              return lastInput;          }          //price can except decimals and exponents          if (isPrice) { -            return output.toString(); +            return FORMATTER.format(output);          }          //amounts want an integer number so round          return Long.toString(Math.round(output)); @@ -59,8 +57,8 @@ public class SignCalculator {      private static void render(DrawContext context, String input, int renderX, int renderY) {          Text text; -        if (output == null) { -            text = Text.translatable("text.autoconfig.skyblocker.option.general.inputCalculator.invalidEquation").formatted(Formatting.RED); +        if (output == -1) { +            text = Text.translatable("skyblocker.config.uiAndVisuals.inputCalculator.invalidEquation").formatted(Formatting.RED);          } else {              text = Text.literal(input + " = " + FORMATTER.format(output)).formatted(Formatting.GREEN);          } diff --git a/src/main/java/de/hysky/skyblocker/utils/Calculator.java b/src/main/java/de/hysky/skyblocker/utils/Calculator.java index 9991c697..30c1ee64 100644 --- a/src/main/java/de/hysky/skyblocker/utils/Calculator.java +++ b/src/main/java/de/hysky/skyblocker/utils/Calculator.java @@ -1,14 +1,10 @@  package de.hysky.skyblocker.utils; -import de.hysky.skyblocker.config.SkyblockerConfigManager; -import net.minecraft.util.Util; -  import java.util.*;  import java.util.regex.Matcher;  import java.util.regex.Pattern;  public class Calculator { -      public enum TokenType {          NUMBER, OPERATOR, L_PARENTHESIS, R_PARENTHESIS      } @@ -20,13 +16,13 @@ public class Calculator {      }      private static final Pattern NUMBER_PATTERN = Pattern.compile("(\\d+\\.?\\d*)([kmbse]?)"); -    private static final HashMap<String, Integer> magnitudeValues = Util.make(new HashMap<>(), map -> { -        map.put("s", 64); -        map.put("e", 160); -        map.put("k", 1000); -        map.put("m", 1000000); -        map.put("b", 1000000000); -    }); +    private static final Map<String, Integer> magnitudeValues = Map.of( +        "s", 64, +        "e", 160, +        "k", 1000, +        "m", 1000000, +        "b", 1000000000 +    );      private static List<Token> lex(String input) {          List<Token> tokens = new ArrayList<>(); @@ -88,16 +84,13 @@ public class Calculator {       * @param tokens equation in infix notation order       * @return equation in RPN order       */ -      private static List<Token> shunt(List<Token> tokens) {          Deque<Token> operatorStack = new ArrayDeque<>();          List<Token> outputQueue = new ArrayList<>();          for (Token shuntingToken : tokens)              switch (shuntingToken.type) { -                case NUMBER -> { -                    outputQueue.add(shuntingToken); -                } +                case NUMBER -> outputQueue.add(shuntingToken);                  case OPERATOR -> {                      int precedence = getPrecedence(shuntingToken.value);                      while (!operatorStack.isEmpty()) { @@ -115,9 +108,7 @@ public class Calculator {                      }                      operatorStack.push(shuntingToken);                  } -                case L_PARENTHESIS -> { -                    operatorStack.push(shuntingToken); -                } +                case L_PARENTHESIS -> operatorStack.push(shuntingToken);                  case R_PARENTHESIS -> {                      while (true) {                          if (operatorStack.isEmpty()) { @@ -164,33 +155,23 @@ public class Calculator {          Deque<Double> values = new ArrayDeque<>();          for (Token token : tokens) {              switch (token.type) { -                case NUMBER -> { -                    values.push(calculateValue(token.value)); -                } +                case NUMBER -> values.push(calculateValue(token.value));                  case OPERATOR -> {                      double right = values.pop();                      double left = values.pop();                      switch (token.value) { -                        case "+" -> { -                            values.push(left + right); -                        } -                        case "-" -> { -                            values.push(left - right); -                        } +                        case "+" -> values.push(left + right); +                        case "-" -> values.push(left - right);                          case "/" -> {                              if (right == 0) {                                  throw new UnsupportedOperationException("Can not divide by 0");                              }                              values.push(left / right);                          } -                        case "*" -> { -                            values.push(left * right); -                        } +                        case "*" -> values.push(left * right);                      }                  } -                case L_PARENTHESIS, R_PARENTHESIS -> { -                    throw new UnsupportedOperationException("Equation is not in RPN"); -                } +                case L_PARENTHESIS, R_PARENTHESIS -> throw new UnsupportedOperationException("Equation is not in RPN");              }          }          if (values.isEmpty()) { diff --git a/src/test/java/de/hysky/skyblocker/utils/CalculatorTest.java b/src/test/java/de/hysky/skyblocker/utils/CalculatorTest.java index 84834c57..c29efdf2 100644 --- a/src/test/java/de/hysky/skyblocker/utils/CalculatorTest.java +++ b/src/test/java/de/hysky/skyblocker/utils/CalculatorTest.java @@ -5,22 +5,27 @@ import org.junit.jupiter.api.Test;  public class CalculatorTest {      @Test -    void testCalculator() { -        //check the magnitudes are working +    void testShorthands() {          Assertions.assertEquals(Calculator.calculate("1k"), 1000);          Assertions.assertEquals(Calculator.calculate("0.12k"), 120);          Assertions.assertEquals(Calculator.calculate("1k + 0.12k"), 1120);          Assertions.assertEquals(Calculator.calculate("1 + 1s + 1k + 1m + 1b"), 1001001065); +    } -        //check precedence works +    @Test +    void testPrecedence() {          Assertions.assertEquals(Calculator.calculate("5 + 2 * 2"), 9);          Assertions.assertEquals(Calculator.calculate("5 - 2 / 2"), 4);          Assertions.assertEquals(Calculator.calculate("5 * (1 + 2)"), 15); +    } -        //check implicit multiplication +    @Test +    void testImplicitMultiplication() {          Assertions.assertEquals(Calculator.calculate("5(2 + 2)"), 20); +    } -        //check unclosed parenthesis work +    @Test +    void testImplicitClosingParenthesis() {          Assertions.assertEquals(Calculator.calculate("5(2 + 2"), 20);      }  } | 
