diff --git a/gradle.properties b/gradle.properties index 7b5730b..05d278a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -117,7 +117,7 @@ minimizeShadowedDependencies = false # If disabled, won't rename the shadowed classes. relocateShadowedDependencies = false -# Adds the GTNH maven, CurseMaven, IC2/Player maven, and some more well-known 1.7.10 repositories. +# Adds the GTNH maven, CurseMaven, Modrinth, and some more well-known 1.7.10 repositories. includeWellKnownRepositories = true # Change these to your Maven coordinates if you want to publish to a custom Maven repository instead of the default GTNH Maven. diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index d64cd49..e644113 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index a80b22c..b82aa23 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/settings.gradle b/settings.gradle index 16a5b4c..378da58 100644 --- a/settings.gradle +++ b/settings.gradle @@ -17,7 +17,7 @@ pluginManagement { } plugins { - id 'com.gtnewhorizons.gtnhsettingsconvention' version '1.0.14' + id 'com.gtnewhorizons.gtnhsettingsconvention' version '1.0.21' } diff --git a/src/main/java/com/gtnewhorizon/gtnhlib/util/parsing/MathExpressionParser.java b/src/main/java/com/gtnewhorizon/gtnhlib/util/parsing/MathExpressionParser.java index b108f37..1bb0316 100644 --- a/src/main/java/com/gtnewhorizon/gtnhlib/util/parsing/MathExpressionParser.java +++ b/src/main/java/com/gtnewhorizon/gtnhlib/util/parsing/MathExpressionParser.java @@ -19,8 +19,8 @@ public class MathExpressionParser { * strings that do not evaluate to a valid value. See {@link #parse(String, Context)} for an explanation of the * syntax. */ - public static final Pattern EXPRESSION_PATTERN = Pattern.compile("[0-9.,  _’+\\-*/^()eEkKmMgGbBtT%]*"); - // Character ' ' (non-breaking space) to support French locale thousands separator. + public static final Pattern EXPRESSION_PATTERN = Pattern.compile("[0-9., \u202F_’+\\-*/^()eEkKmMgGbBtTsSiI%]*"); + // Character \u202F (' ') (non-breaking space) to support French locale thousands separator. private static final Context defaultContext = new Context(); @@ -178,6 +178,16 @@ public static double parse(String expr, Context ctx) { case 'T': handleSuffix(stack, Suffix.TRILLION, c, ctx); break; + + case 's': + case 'S': + handleSuffix(stack, Suffix.STACK, c, ctx); + break; + case 'i': + case 'I': + handleSuffix(stack, Suffix.INGOT, c, ctx); + break; + case '%': handleSuffix(stack, Suffix.PERCENT, c, ctx); break; @@ -511,6 +521,8 @@ private enum Suffix { MILLION(1_000_000d), BILLION(1_000_000_000d), TRILLION(1_000_000_000_000d), + STACK(64), + INGOT(144), PERCENT(0); // Handled separately. public final double multiplier; diff --git a/src/test/java/com/gtnewhorizon/gtnhlib/test/util/parsing/MathExpressionParserTest.java b/src/test/java/com/gtnewhorizon/gtnhlib/test/util/parsing/MathExpressionParserTest.java index 6bd1488..4ad5ff0 100644 --- a/src/test/java/com/gtnewhorizon/gtnhlib/test/util/parsing/MathExpressionParserTest.java +++ b/src/test/java/com/gtnewhorizon/gtnhlib/test/util/parsing/MathExpressionParserTest.java @@ -141,6 +141,14 @@ void SuffixesBasic_Test() { assertEquals(10_000_000_000_000D, MathExpressionParser.parse("10t")); assertEquals(11_000_000_000_000D, MathExpressionParser.parse("11T")); + assertEquals(12 * 64, MathExpressionParser.parse("12s")); + assertEquals(13 * 64, MathExpressionParser.parse("13S")); + assertEquals(14 * 144, MathExpressionParser.parse("14i")); + assertEquals(15 * 144, MathExpressionParser.parse("15I")); + + assertEquals(16 * 64 + 16, MathExpressionParser.parse("16.25s", ctxEN)); + assertEquals(17 * 144 + 72, MathExpressionParser.parse("17.5i", ctxEN)); + assertEquals(2050, MathExpressionParser.parse("2.05k", ctxEN)); assertEquals(50, MathExpressionParser.parse("0.05k", ctxEN)); assertEquals(3000, MathExpressionParser.parse("3 k")); @@ -157,6 +165,10 @@ void SuffixesArithmetic_Test() { assertEquals(3_000_000, MathExpressionParser.parse("3kk")); assertEquals(4_000_000_000D, MathExpressionParser.parse("4kkk")); + // Ideally we would want "1/9i" to parse into this too, but that would require a larger rework. + // Currently, suffixes are hardcoded to have the highest priority. + assertEquals(16, MathExpressionParser.parse("(1/9)i")); + // Not supported, but shouldn't fail. assertEquals(6_000_000_000d, MathExpressionParser.parse("6km")); assertEquals(500_000, MathExpressionParser.parse("0.5ke3", ctxEN));