aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de
diff options
context:
space:
mode:
authorRime <81419447+Emirlol@users.noreply.github.com>2024-05-31 20:58:22 +0300
committerRime <81419447+Emirlol@users.noreply.github.com>2024-06-08 04:13:47 +0300
commitf8a70f9488263cd101d07c1271c68b15c62f959e (patch)
tree693f1d7209d10c4eebf01b53076eb2abf183fd5d /src/main/java/de
parentf056499d12e7e93c922487f859535c2aa502d6ae (diff)
downloadSkyblocker-f8a70f9488263cd101d07c1271c68b15c62f959e.tar.gz
Skyblocker-f8a70f9488263cd101d07c1271c68b15c62f959e.tar.bz2
Skyblocker-f8a70f9488263cd101d07c1271c68b15c62f959e.zip
Refactor romanToDecimal method to its own class and optimize a few things
Diffstat (limited to 'src/main/java/de')
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/chocolatefactory/ChocolateFactorySolver.java28
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/EnchantmentLevelAdder.java4
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/MinionLevelAdder.java4
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/RomanNumerals.java37
4 files changed, 44 insertions, 29 deletions
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/chocolatefactory/ChocolateFactorySolver.java b/src/main/java/de/hysky/skyblocker/skyblock/chocolatefactory/ChocolateFactorySolver.java
index 7babe7f2..66822962 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/chocolatefactory/ChocolateFactorySolver.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/chocolatefactory/ChocolateFactorySolver.java
@@ -4,6 +4,7 @@ import de.hysky.skyblocker.config.SkyblockerConfigManager;
import de.hysky.skyblocker.skyblock.item.tooltip.adders.LineSmoothener;
import de.hysky.skyblocker.utils.ItemUtils;
import de.hysky.skyblocker.utils.RegexUtils;
+import de.hysky.skyblocker.utils.RomanNumerals;
import de.hysky.skyblocker.utils.render.gui.ColorHighlight;
import de.hysky.skyblocker.utils.render.gui.ContainerSolver;
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
@@ -143,8 +144,8 @@ public class ChocolateFactorySolver extends ContainerSolver {
}
//Time Tower is in slot 39
- timeTowerMultiplier = romanToDecimal(StringUtils.substringAfterLast(slots.get(TIME_TOWER_SLOT).getName().getString(), ' ')) / 10.0; //The name holds the level, which is multiplier * 10 in roman numerals
- Matcher timeTowerStatusMatcher = TIME_TOWER_STATUS_PATTERN.matcher(getConcatenatedLore(slots.get(TIME_TOWER_SLOT)));
+ timeTowerMultiplier = RomanNumerals.romanToDecimal(StringUtils.substringAfterLast(slots.get(39).getName().getString(), ' ')) / 10.0; //The name holds the level, which is multiplier * 10 in roman numerals
+ Matcher timeTowerStatusMatcher = TIME_TOWER_STATUS_PATTERN.matcher(getConcatenatedLore(slots.get(39)));
if (timeTowerStatusMatcher.find()) {
isTimeTowerActive = timeTowerStatusMatcher.group(1).equals("ACTIVE");
}
@@ -358,27 +359,4 @@ public class ChocolateFactorySolver extends ContainerSolver {
private record Rabbit(double cpsIncrease, int cost, int slot, ItemStack itemStack) {
}
-
- //Perhaps the part below can go to a separate file later on, but I couldn't find a proper name for the class, so they're staying here.
- private static final Map<Character, Integer> romanMap = Map.of(
- 'I', 1,
- 'V', 5,
- 'X', 10,
- 'L', 50,
- 'C', 100,
- 'D', 500,
- 'M', 1000
- );
-
- public static int romanToDecimal(String romanNumeral) {
- int decimal = 0;
- int lastNumber = 0;
- for (int i = romanNumeral.length() - 1; i >= 0; i--) {
- char ch = romanNumeral.charAt(i);
- if (!romanMap.containsKey(ch)) return 0;
- decimal = romanMap.get(ch) >= lastNumber ? decimal + romanMap.get(ch) : decimal - romanMap.get(ch);
- lastNumber = romanMap.get(ch);
- }
- return decimal;
- }
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/EnchantmentLevelAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/EnchantmentLevelAdder.java
index 44b3c982..44b12a7e 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/EnchantmentLevelAdder.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/EnchantmentLevelAdder.java
@@ -1,8 +1,8 @@
package de.hysky.skyblocker.skyblock.item.slottext.adders;
-import de.hysky.skyblocker.skyblock.chocolatefactory.ChocolateFactorySolver;
import de.hysky.skyblocker.skyblock.item.slottext.SlotTextAdder;
import de.hysky.skyblocker.utils.ItemUtils;
+import de.hysky.skyblocker.utils.RomanNumerals;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.screen.slot.Slot;
@@ -37,6 +37,6 @@ public class EnchantmentLevelAdder extends SlotTextAdder {
private static int getEnchantLevelFromString(String str) {
String romanNumeral = str.substring(str.lastIndexOf(' ') + 1); //+1 because we don't need the space itself
- return ChocolateFactorySolver.romanToDecimal(romanNumeral); //Temporary line. The method will be moved out later.
+ return RomanNumerals.romanToDecimal(romanNumeral); //Temporary line. The method will be moved out later.
}
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/MinionLevelAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/MinionLevelAdder.java
index d6f53b7d..3a27c022 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/MinionLevelAdder.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/MinionLevelAdder.java
@@ -1,7 +1,7 @@
package de.hysky.skyblocker.skyblock.item.slottext.adders;
-import de.hysky.skyblocker.skyblock.chocolatefactory.ChocolateFactorySolver;
import de.hysky.skyblocker.skyblock.item.slottext.SlotTextAdder;
+import de.hysky.skyblocker.utils.RomanNumerals;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.screen.slot.Slot;
@@ -21,7 +21,7 @@ public class MinionLevelAdder extends SlotTextAdder {
String name = itemStack.getName().getString();
if (!name.contains("Minion")) return null;
String romanNumeral = name.substring(name.lastIndexOf(' ') + 1); //+1 because we don't need the space itself
- int level = ChocolateFactorySolver.romanToDecimal(romanNumeral); //Temporary line. The method will be moved out later.
+ int level = RomanNumerals.romanToDecimal(romanNumeral);
if (level == 0) return null;
return Text.literal(String.valueOf(level)).formatted(Formatting.DARK_PURPLE);
}
diff --git a/src/main/java/de/hysky/skyblocker/utils/RomanNumerals.java b/src/main/java/de/hysky/skyblocker/utils/RomanNumerals.java
new file mode 100644
index 00000000..2ab3c776
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/utils/RomanNumerals.java
@@ -0,0 +1,37 @@
+package de.hysky.skyblocker.utils;
+
+public class RomanNumerals {
+ private static int getDecimalValue(char romanChar) {
+ return switch (romanChar) {
+ case 'I' -> 1;
+ case 'V' -> 5;
+ case 'X' -> 10;
+ case 'L' -> 50;
+ case 'C' -> 100;
+ case 'D' -> 500;
+ case 'M' -> 1000;
+ default -> 0;
+ };
+ }
+
+ /**
+ * Converts a roman numeral to a decimal number.
+ *
+ * @param romanNumeral The roman numeral to convert.
+ * @return The decimal number, or 0 if the roman numeral string is malformed, empty or null.
+ */
+ public static int romanToDecimal(String romanNumeral) {
+ if (romanNumeral == null || romanNumeral.isEmpty()) return 0;
+ romanNumeral = romanNumeral.trim().toUpperCase();
+ int decimal = 0;
+ int lastNumber = 0;
+ for (int i = romanNumeral.length() - 1; i >= 0; i--) {
+ char ch = romanNumeral.charAt(i);
+ int number = getDecimalValue(ch);
+ if (number == 0) return 0; //Malformed roman numeral
+ decimal = number >= lastNumber ? decimal + number : decimal - number;
+ lastNumber = number;
+ }
+ return decimal;
+ }
+}