aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de/hysky
diff options
context:
space:
mode:
authorKevin <92656833+kevinthegreat1@users.noreply.github.com>2024-03-28 17:03:13 -0400
committerGitHub <noreply@github.com>2024-03-28 17:03:13 -0400
commite27a78393240db57774f0d5dbce825768db245f3 (patch)
tree3d74e9aa36467aca85f39655aeec44a83bb50bb5 /src/main/java/de/hysky
parent126f13afaf08c0a3c303793266da572447de4bfe (diff)
downloadSkyblocker-e27a78393240db57774f0d5dbce825768db245f3.tar.gz
Skyblocker-e27a78393240db57774f0d5dbce825768db245f3.tar.bz2
Skyblocker-e27a78393240db57774f0d5dbce825768db245f3.zip
Add New Year Cakes Helper (#603)
Diffstat (limited to 'src/main/java/de/hysky')
-rw-r--r--src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java3
-rw-r--r--src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java8
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/accessories/newyearcakes/NewYearCakeBagHelper.java33
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/accessories/newyearcakes/NewYearCakesHelper.java79
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/render/gui/ContainerSolverManager.java6
5 files changed, 128 insertions, 1 deletions
diff --git a/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java b/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java
index a3e710c1..43a64061 100644
--- a/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java
+++ b/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java
@@ -178,6 +178,9 @@ public class SkyblockerConfig {
public boolean dungeonQuality = true;
@SerialEntry
+ public boolean enableNewYearCakesHelper = true;
+
+ @SerialEntry
public TabHudConf tabHud = new TabHudConf();
@SerialEntry
diff --git a/src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java
index 23ce7bb6..fe73a6a7 100644
--- a/src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java
+++ b/src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java
@@ -86,6 +86,14 @@ public class GeneralCategory {
newValue -> config.general.dungeonQuality = newValue)
.controller(ConfigUtils::createBooleanController)
.build())
+ .option(Option.<Boolean>createBuilder()
+ .name(Text.translatable("text.autoconfig.skyblocker.option.general.enableNewYearCakesHelper"))
+ .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.general.enableNewYearCakesHelper.@Tooltip")))
+ .binding(defaults.general.enableNewYearCakesHelper,
+ () -> config.general.enableNewYearCakesHelper,
+ newValue -> config.general.enableNewYearCakesHelper = newValue)
+ .controller(ConfigUtils::createBooleanController)
+ .build())
//Tab Hud
.group(OptionGroup.createBuilder()
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/accessories/newyearcakes/NewYearCakeBagHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/accessories/newyearcakes/NewYearCakeBagHelper.java
new file mode 100644
index 00000000..e0d67fbe
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/skyblock/accessories/newyearcakes/NewYearCakeBagHelper.java
@@ -0,0 +1,33 @@
+package de.hysky.skyblocker.skyblock.accessories.newyearcakes;
+
+import de.hysky.skyblocker.config.SkyblockerConfigManager;
+import de.hysky.skyblocker.utils.render.gui.ColorHighlight;
+import de.hysky.skyblocker.utils.render.gui.ContainerSolver;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.item.ItemStack;
+import net.minecraft.screen.slot.Slot;
+
+import java.util.List;
+import java.util.Map;
+
+public class NewYearCakeBagHelper extends ContainerSolver {
+ public NewYearCakeBagHelper() {
+ super("New Year Cake Bag");
+ }
+
+ @Override
+ protected boolean isEnabled() {
+ return SkyblockerConfigManager.get().general.enableNewYearCakesHelper;
+ }
+
+ @Override
+ protected List<ColorHighlight> getColors(String[] groups, Map<Integer, ItemStack> slots) {
+ MinecraftClient client = MinecraftClient.getInstance();
+ if (client.player != null) {
+ for (Slot slot : client.player.currentScreenHandler.slots) {
+ NewYearCakesHelper.INSTANCE.addCake(NewYearCakesHelper.getCakeYear(slot.getStack()));
+ }
+ }
+ return List.of();
+ }
+}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/accessories/newyearcakes/NewYearCakesHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/accessories/newyearcakes/NewYearCakesHelper.java
new file mode 100644
index 00000000..b722849b
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/skyblock/accessories/newyearcakes/NewYearCakesHelper.java
@@ -0,0 +1,79 @@
+package de.hysky.skyblocker.skyblock.accessories.newyearcakes;
+
+import de.hysky.skyblocker.config.SkyblockerConfigManager;
+import de.hysky.skyblocker.utils.Utils;
+import de.hysky.skyblocker.utils.render.gui.ColorHighlight;
+import de.hysky.skyblocker.utils.render.gui.ContainerSolver;
+import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
+import it.unimi.dsi.fastutil.ints.IntSet;
+import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents;
+import net.minecraft.item.ItemStack;
+import net.minecraft.text.Text;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.text.NumberFormat;
+import java.text.ParseException;
+import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class NewYearCakesHelper extends ContainerSolver {
+ private static final Logger LOGGER = LoggerFactory.getLogger(NewYearCakeBagHelper.class);
+ private static final Pattern NEW_YEAR_CAKE = Pattern.compile("New Year Cake \\(Year (?<year>\\d+)\\)");
+ private static final Pattern NEW_YEAR_CAKE_PURCHASE = Pattern.compile("You purchased New Year Cake \\(Year (?<year>\\d+)\\) for .+ coins!");
+ private static final NumberFormat NUMBER_FORMAT = NumberFormat.getInstance(Locale.US);
+ public static final NewYearCakesHelper INSTANCE = new NewYearCakesHelper();
+ private final Map<String, IntSet> cakes = new HashMap<>();
+
+ private NewYearCakesHelper() {
+ super("Auctions: \".*\"");
+ ClientReceiveMessageEvents.GAME.register(this::onChatMessage);
+ }
+
+ public static int getCakeYear(ItemStack stack) {
+ return getCakeYear(NEW_YEAR_CAKE, stack.getName().getString());
+ }
+
+ public static int getCakeYear(Pattern pattern, String name) {
+ Matcher matcher = pattern.matcher(name);
+ if (matcher.matches()) {
+ try {
+ return NUMBER_FORMAT.parse(matcher.group("year")).intValue();
+ } catch (ParseException e) {
+ LOGGER.info("Failed to parse year from New Year Cake: " + name, e);
+ }
+ }
+ return -1;
+ }
+
+ @Override
+ protected boolean isEnabled() {
+ return SkyblockerConfigManager.get().general.enableNewYearCakesHelper;
+ }
+
+ public boolean addCake(int year) {
+ if (year < 0) return false;
+ return cakes.computeIfAbsent(Utils.getProfile(), _profile -> new IntOpenHashSet()).add(year);
+ }
+
+ private void onChatMessage(Text message, boolean overlay) {
+ if (isEnabled()) {
+ addCake(getCakeYear(NEW_YEAR_CAKE_PURCHASE, message.getString()));
+ }
+ }
+
+ @Override
+ protected List<ColorHighlight> getColors(String[] groups, Map<Integer, ItemStack> slots) {
+ String profile = Utils.getProfile();
+ if (cakes.isEmpty() || !cakes.containsKey(profile) || cakes.containsKey(profile) && cakes.get(profile).isEmpty()) return List.of();
+ List<ColorHighlight> highlights = new ArrayList<>();
+ for (Map.Entry<Integer, ItemStack> entry : slots.entrySet()) {
+ int year = getCakeYear(entry.getValue());
+ if (year >= 0 && cakes.containsKey(profile)) {
+ highlights.add(cakes.get(profile).contains(year) ? ColorHighlight.red(entry.getKey()) : ColorHighlight.green(entry.getKey()));
+ }
+ }
+ return highlights;
+ }
+}
diff --git a/src/main/java/de/hysky/skyblocker/utils/render/gui/ContainerSolverManager.java b/src/main/java/de/hysky/skyblocker/utils/render/gui/ContainerSolverManager.java
index 460f34dd..d506ffe1 100644
--- a/src/main/java/de/hysky/skyblocker/utils/render/gui/ContainerSolverManager.java
+++ b/src/main/java/de/hysky/skyblocker/utils/render/gui/ContainerSolverManager.java
@@ -2,6 +2,8 @@ package de.hysky.skyblocker.utils.render.gui;
import com.mojang.blaze3d.systems.RenderSystem;
import de.hysky.skyblocker.mixin.accessor.HandledScreenAccessor;
+import de.hysky.skyblocker.skyblock.accessories.newyearcakes.NewYearCakeBagHelper;
+import de.hysky.skyblocker.skyblock.accessories.newyearcakes.NewYearCakesHelper;
import de.hysky.skyblocker.skyblock.dungeon.CroesusHelper;
import de.hysky.skyblocker.skyblock.dungeon.CroesusProfit;
import de.hysky.skyblocker.skyblock.dungeon.terminal.ColorTerminal;
@@ -44,7 +46,9 @@ public class ContainerSolverManager {
new CroesusProfit(),
new ChronomatronSolver(),
new SuperpairsSolver(),
- UltrasequencerSolver.INSTANCE
+ UltrasequencerSolver.INSTANCE,
+ new NewYearCakeBagHelper(),
+ NewYearCakesHelper.INSTANCE
};
}