diff options
| author | Aaron <51387595+AzureAaron@users.noreply.github.com> | 2025-06-28 12:50:43 -0400 |
|---|---|---|
| committer | Aaron <51387595+AzureAaron@users.noreply.github.com> | 2025-06-28 12:50:43 -0400 |
| commit | cd3baf49b7a764edab05dd9d80f4fef7a307fa76 (patch) | |
| tree | efb74f83593ca7450996997098a5a5f0714c5fa2 /src/main/java | |
| parent | 1ca7228952213dc13bad052a1b901a1a793550ea (diff) | |
| download | Skyblocker-cd3baf49b7a764edab05dd9d80f4fef7a307fa76.tar.gz Skyblocker-cd3baf49b7a764edab05dd9d80f4fef7a307fa76.tar.bz2 Skyblocker-cd3baf49b7a764edab05dd9d80f4fef7a307fa76.zip | |
Add new shards to dungeon profit calculators
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/de/hysky/skyblocker/skyblock/ChestValue.java | 33 | ||||
| -rw-r--r-- | src/main/java/de/hysky/skyblocker/skyblock/dungeon/CroesusProfit.java | 4 |
2 files changed, 37 insertions, 0 deletions
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/ChestValue.java b/src/main/java/de/hysky/skyblocker/skyblock/ChestValue.java index 975edceb..544933a4 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/ChestValue.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/ChestValue.java @@ -7,6 +7,7 @@ import de.hysky.skyblocker.config.configs.UIAndVisualsConfig; import de.hysky.skyblocker.mixins.accessors.HandledScreenAccessor; import de.hysky.skyblocker.mixins.accessors.ScreenAccessor; import de.hysky.skyblocker.utils.ItemUtils; +import de.hysky.skyblocker.utils.RegexUtils; import de.hysky.skyblocker.utils.Utils; import de.hysky.skyblocker.utils.networth.NetworthCalculator; import it.unimi.dsi.fastutil.doubles.DoubleBooleanPair; @@ -46,6 +47,7 @@ public class ChestValue { private static final Logger LOGGER = LoggerFactory.getLogger(ChestValue.class); private static final Set<String> DUNGEON_CHESTS = Set.of("Wood Chest", "Gold Chest", "Diamond Chest", "Emerald Chest", "Obsidian Chest", "Bedrock Chest"); private static final Pattern ESSENCE_PATTERN = Pattern.compile("(?<type>[A-Za-z]+) Essence x(?<amount>\\d+)"); + private static final Pattern SHARD_PATTERN = Pattern.compile("[A-Za-z ]+ Shard x(?<amount>\\d+)"); private static final Pattern MINION_PATTERN = Pattern.compile("Minion (I|II|III|IV|V|VI|VII|VIII|IX|X|XI|XII)$"); private static final DecimalFormat FORMATTER = new DecimalFormat("#,###"); @@ -134,6 +136,37 @@ public class ChestValue { } } + //Shard Prices + if (name.contains("Shard")) { + Matcher matcher = SHARD_PATTERN.matcher(name); + + if (matcher.matches()) { + //I do not believe it is possible to get more than 1 in a single chest but in the interest of + //future-proofing we will handle it anyways + int shards = RegexUtils.parseOptionalIntFromMatcher(matcher, "amount").orElse(1); + String shardApiId = switch (name) { + case String s when s.startsWith("Wither") -> "SHARD_WITHER"; + case String s when s.startsWith("Apex Dragon") -> "SHARD_APEX_DRAGON"; + case String s when s.startsWith("Power Dragon") -> "SHARD_POWER_DRAGON"; + default -> ""; + }; + + if (shardApiId.isEmpty()) { + LOGGER.warn("[Skyblocker Profit Calculator] Encountered unknown shard {}", name); + continue; + } + + DoubleBooleanPair priceData = ItemUtils.getItemPrice(shardApiId); + + if (!priceData.rightBoolean()) hasIncompleteData = true; + + //Add the price of the shard to the profit + profit += priceData.leftDouble() * shards; + + continue; + } + } + //Determine the cost of the chest if (name.contains("Open Reward Chest")) { String foundString = searchLoreFor(stack, "Coins"); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/CroesusProfit.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/CroesusProfit.java index 3a5d16d9..cf298e13 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/CroesusProfit.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/CroesusProfit.java @@ -248,6 +248,10 @@ public class CroesusProfit extends SimpleContainerSolver { map.put("Watcher Disc", "DUNGEON_DISC_3"); map.put("Old Disc", "DUNGEON_DISC_4"); map.put("Necron Disc", "DUNGEON_DISC_5"); + + map.put("Wither", "SHARD_WITHER"); + map.put("Apex Dragon", "SHARD_APEX_DRAGON"); + map.put("Power Dragon", "SHARD_POWER_DRAGON"); }); } |
