aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorAaron <51387595+AzureAaron@users.noreply.github.com>2025-06-28 12:50:43 -0400
committerAaron <51387595+AzureAaron@users.noreply.github.com>2025-06-28 12:50:43 -0400
commitcd3baf49b7a764edab05dd9d80f4fef7a307fa76 (patch)
treeefb74f83593ca7450996997098a5a5f0714c5fa2 /src/main/java
parent1ca7228952213dc13bad052a1b901a1a793550ea (diff)
downloadSkyblocker-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.java33
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/dungeon/CroesusProfit.java4
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");
});
}