aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKevinthegreat <92656833+kevinthegreat1@users.noreply.github.com>2024-05-17 17:11:03 -0400
committerKevinthegreat <92656833+kevinthegreat1@users.noreply.github.com>2024-05-20 16:52:29 -0400
commit3faf4f2e23ee6d7dccaa9bd724b9fd6d2ecbfb0c (patch)
treebc25f1b17d5a633a48d5d1f72e6d8c5db600dd1b /src
parentf7210c0b8392823995f90936e7c5055d8ed44314 (diff)
downloadSkyblocker-3faf4f2e23ee6d7dccaa9bd724b9fd6d2ecbfb0c.tar.gz
Skyblocker-3faf4f2e23ee6d7dccaa9bd724b9fd6d2ecbfb0c.tar.bz2
Skyblocker-3faf4f2e23ee6d7dccaa9bd724b9fd6d2ecbfb0c.zip
Add cultivating counter
Diffstat (limited to 'src')
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHud.java51
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHudWidget.java2
2 files changed, 41 insertions, 12 deletions
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHud.java b/src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHud.java
index 201e6716..9f7f5ac9 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHud.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHud.java
@@ -33,8 +33,8 @@ import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.lit
public class FarmingHud {
private static final Logger LOGGER = LoggerFactory.getLogger(FarmingHud.class);
public static final NumberFormat NUMBER_FORMAT = NumberFormat.getInstance(Locale.US);
- private static final Pattern COUNTER = Pattern.compile("Counter: (?<count>[\\d,]+) .+");
private static final Pattern FARMING_XP = Pattern.compile("ยง3\\+(?<xp>\\d+.?\\d*) Farming \\((?<percent>[\\d,]+.?\\d*)%\\)");
+ private static CounterType counterType;
private static final Deque<IntLongPair> counter = new ArrayDeque<>();
private static final LongPriorityQueue blockBreaks = new LongArrayFIFOQueue();
private static final Queue<FloatLongPair> farmingXp = new ArrayDeque<>();
@@ -54,16 +54,12 @@ public class FarmingHud {
}
ItemStack stack = MinecraftClient.getInstance().player.getMainHandStack();
- Matcher matcher = ItemUtils.getLoreLineIfMatch(stack, FarmingHud.COUNTER);
- if (matcher != null) {
- try {
- int count = NUMBER_FORMAT.parse(matcher.group("count")).intValue();
- if (counter.isEmpty() || counter.peekLast().leftInt() != count) {
- counter.offer(IntLongPair.of(count, System.currentTimeMillis()));
- }
- } catch (ParseException e) {
- LOGGER.error("[Skyblocker Farming HUD] Failed to parse counter", e);
- }
+ if (tryParseCounter(stack, CounterType.CULTIVATING.pattern)) {
+ counterType = CounterType.CULTIVATING;
+ } else if (tryParseCounter(stack, CounterType.COUNTER.pattern)) {
+ counterType = CounterType.COUNTER;
+ } else {
+ counterType = CounterType.NONE;
}
FarmingHudWidget.INSTANCE.update();
@@ -92,10 +88,29 @@ public class FarmingHud {
.executes(Scheduler.queueOpenScreenCommand(() -> new FarmingHudConfigScreen(null)))))));
}
+ private static boolean tryParseCounter(ItemStack stack, Pattern counterPattern) {
+ Matcher matcher = ItemUtils.getLoreLineIfMatch(stack, counterPattern);
+ if (matcher == null) return false;
+ try {
+ int count = NUMBER_FORMAT.parse(matcher.group("count")).intValue();
+ if (counter.isEmpty() || counter.peekLast().leftInt() != count) {
+ counter.offer(IntLongPair.of(count, System.currentTimeMillis()));
+ }
+ return true;
+ } catch (ParseException e) {
+ LOGGER.error("[Skyblocker Farming HUD] Failed to parse counter", e);
+ return false;
+ }
+ }
+
private static boolean shouldRender() {
return SkyblockerConfigManager.get().farming.garden.farmingHud.enableHud && Utils.getLocation() == Location.GARDEN;
}
+ public static String counterText() {
+ return counterType.text;
+ }
+
public static int counter() {
return counter.isEmpty() ? 0 : counter.peekLast().leftInt();
}
@@ -120,4 +135,18 @@ public class FarmingHud {
public static double farmingXpPerHour() {
return farmingXp.stream().mapToDouble(FloatLongPair::leftFloat).sum() * blockBreaks() * 1800; // Hypixel only sends xp updates around every half a second
}
+
+ public enum CounterType {
+ NONE(Pattern.compile(""), "No Counter: "),
+ COUNTER(Pattern.compile("Counter: (?<count>[\\d,]+) .+"), "Counter: "),
+ CULTIVATING(Pattern.compile("Cultivating (?<cultivating>[IVXLCDM]+) (?<count>[\\d,]+)"), "Cultivating Counter: ");
+
+ private final Pattern pattern;
+ private final String text;
+
+ CounterType(Pattern pattern, String text) {
+ this.pattern = pattern;
+ this.text = text;
+ }
+ }
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHudWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHudWidget.java
index d9e0902b..143567d4 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHudWidget.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHudWidget.java
@@ -60,7 +60,7 @@ public class FarmingHudWidget extends Widget {
if (client.player == null) return;
ItemStack farmingTool = client.player.getMainHandStack();
- addSimpleIcoText(farmingTool, "Counter: ", Formatting.YELLOW, FarmingHud.NUMBER_FORMAT.format(FarmingHud.counter()));
+ addSimpleIcoText(farmingTool, FarmingHud.counterText(), Formatting.YELLOW, FarmingHud.NUMBER_FORMAT.format(FarmingHud.counter()));
float cropsPerMinute = FarmingHud.cropsPerMinute();
addSimpleIcoText(farmingTool, "Crops/min: ", Formatting.YELLOW, FarmingHud.NUMBER_FORMAT.format((int) cropsPerMinute / 10 * 10));
DoubleBooleanPair itemPrice = ItemUtils.getItemPrice(FARMING_TOOLS.get(ItemUtils.getItemId(farmingTool)));