From 4c398333b9802a9000cc65d50ae4a2d13f300ca8 Mon Sep 17 00:00:00 2001 From: Rime <81419447+Emirlol@users.noreply.github.com> Date: Wed, 19 Jun 2024 18:57:43 +0300 Subject: Refactor container matcher implementations into interfaces --- .../java/de/hysky/skyblocker/SkyblockerMod.java | 2 +- .../skyblocker/mixins/HandledScreenMixin.java | 8 +- .../newyearcakes/NewYearCakeBagHelper.java | 6 +- .../newyearcakes/NewYearCakesHelper.java | 8 +- .../chocolatefactory/ChocolateFactorySolver.java | 14 +- .../skyblocker/skyblock/dungeon/CroesusHelper.java | 7 +- .../skyblocker/skyblock/dungeon/CroesusProfit.java | 13 +- .../skyblock/dungeon/terminal/ColorTerminal.java | 13 +- .../dungeon/terminal/LightsOnTerminal.java | 12 +- .../skyblock/dungeon/terminal/OrderTerminal.java | 16 +-- .../dungeon/terminal/StartsWithTerminal.java | 13 +- .../skyblock/dungeon/terminal/TerminalSolver.java | 1 - .../skyblock/experiment/ChronomatronSolver.java | 5 +- .../skyblock/experiment/ExperimentSolver.java | 16 +-- .../skyblock/experiment/SuperpairsSolver.java | 8 +- .../skyblock/experiment/UltrasequencerSolver.java | 5 +- .../skyblock/item/slottext/SlotTextAdder.java | 23 +-- .../skyblock/item/slottext/SlotTextManager.java | 19 ++- .../skyblock/item/tooltip/TooltipAdder.java | 43 +++--- .../skyblock/item/tooltip/TooltipInfoType.java | 10 -- .../skyblock/item/tooltip/TooltipManager.java | 21 +-- .../item/tooltip/adders/AccessoryTooltip.java | 7 +- .../item/tooltip/adders/AvgBinTooltip.java | 59 ++++---- .../item/tooltip/adders/BazaarPriceTooltip.java | 7 +- .../skyblock/item/tooltip/adders/ColorTooltip.java | 7 +- .../item/tooltip/adders/DungeonQualityTooltip.java | 8 +- .../skyblock/item/tooltip/adders/LBinTooltip.java | 7 +- .../item/tooltip/adders/LineSmoothener.java | 5 + .../skyblock/item/tooltip/adders/MotesTooltip.java | 7 +- .../item/tooltip/adders/MuseumTooltip.java | 7 +- .../item/tooltip/adders/NpcPriceTooltip.java | 7 +- .../item/tooltip/adders/ObtainedDateTooltip.java | 18 +-- .../item/tooltip/adders/SupercraftReminder.java | 5 + .../utils/container/AbstractContainerMatcher.java | 17 +++ .../utils/container/AbstractContainerSolver.java | 37 +++++ .../utils/container/AbstractSlotTextAdder.java | 21 +++ .../utils/container/AbstractTooltipAdder.java | 18 +++ .../utils/container/ContainerSolver.java | 38 +++++ .../utils/container/ContainerSolverManager.java | 150 ++++++++++++++++++++ .../utils/container/RegexContainerMatcher.java | 68 +++++++++ .../utils/render/gui/AbstractContainerMatcher.java | 29 ---- .../utils/render/gui/ContainerSolver.java | 52 ------- .../utils/render/gui/ContainerSolverManager.java | 157 --------------------- 43 files changed, 574 insertions(+), 420 deletions(-) create mode 100644 src/main/java/de/hysky/skyblocker/utils/container/AbstractContainerMatcher.java create mode 100644 src/main/java/de/hysky/skyblocker/utils/container/AbstractContainerSolver.java create mode 100644 src/main/java/de/hysky/skyblocker/utils/container/AbstractSlotTextAdder.java create mode 100644 src/main/java/de/hysky/skyblocker/utils/container/AbstractTooltipAdder.java create mode 100644 src/main/java/de/hysky/skyblocker/utils/container/ContainerSolver.java create mode 100644 src/main/java/de/hysky/skyblocker/utils/container/ContainerSolverManager.java create mode 100644 src/main/java/de/hysky/skyblocker/utils/container/RegexContainerMatcher.java delete mode 100644 src/main/java/de/hysky/skyblocker/utils/render/gui/AbstractContainerMatcher.java (limited to 'src/main/java/de/hysky/skyblocker') diff --git a/src/main/java/de/hysky/skyblocker/SkyblockerMod.java b/src/main/java/de/hysky/skyblocker/SkyblockerMod.java index 08b0915a..58b1b48d 100644 --- a/src/main/java/de/hysky/skyblocker/SkyblockerMod.java +++ b/src/main/java/de/hysky/skyblocker/SkyblockerMod.java @@ -54,7 +54,7 @@ import de.hysky.skyblocker.utils.chat.ChatMessageListener; import de.hysky.skyblocker.utils.discord.DiscordRPCManager; import de.hysky.skyblocker.utils.render.RenderHelper; import de.hysky.skyblocker.utils.render.culling.OcclusionCulling; -import de.hysky.skyblocker.utils.render.gui.ContainerSolverManager; +import de.hysky.skyblocker.utils.container.ContainerSolverManager; import de.hysky.skyblocker.utils.render.title.TitleContainer; import de.hysky.skyblocker.utils.scheduler.MessageScheduler; import de.hysky.skyblocker.utils.scheduler.Scheduler; diff --git a/src/main/java/de/hysky/skyblocker/mixins/HandledScreenMixin.java b/src/main/java/de/hysky/skyblocker/mixins/HandledScreenMixin.java index 709b8697..ca1cddf8 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/HandledScreenMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/HandledScreenMixin.java @@ -22,7 +22,7 @@ import de.hysky.skyblocker.skyblock.quicknav.QuickNav; import de.hysky.skyblocker.skyblock.quicknav.QuickNavButton; import de.hysky.skyblocker.utils.ItemUtils; import de.hysky.skyblocker.utils.Utils; -import de.hysky.skyblocker.utils.render.gui.ContainerSolver; +import de.hysky.skyblocker.utils.container.AbstractContainerSolver; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.ingame.HandledScreen; @@ -203,7 +203,7 @@ public abstract class HandledScreenMixin extends Screen */ @Unique private ItemStack skyblocker$experimentSolvers$getStack(Slot slot, @NotNull ItemStack stack) { - ContainerSolver currentSolver = SkyblockerMod.getInstance().containerSolverManager.getCurrentSolver(); + AbstractContainerSolver currentSolver = SkyblockerMod.getInstance().containerSolverManager.getCurrentSolver(); if ((currentSolver instanceof SuperpairsSolver || currentSolver instanceof UltrasequencerSolver) && ((ExperimentSolver) currentSolver).getState() == ExperimentSolver.State.SHOW && slot.inventory instanceof SimpleInventory) { ItemStack itemStack = ((ExperimentSolver) currentSolver).getSlots().get(slot.getIndex()); return itemStack == null ? stack : itemStack; @@ -231,12 +231,12 @@ public abstract class HandledScreenMixin extends Screen if (slot == null) return; String title = getTitle().getString(); ItemStack stack = skyblocker$experimentSolvers$getStack(slot, slot.getStack()); - ContainerSolver currentSolver = SkyblockerMod.getInstance().containerSolverManager.getCurrentSolver(); + AbstractContainerSolver currentSolver = SkyblockerMod.getInstance().containerSolverManager.getCurrentSolver(); // Prevent clicks on filler items if (SkyblockerConfigManager.get().uiAndVisuals.hideEmptyTooltips && FILLER_ITEMS.contains(stack.getName().getString()) && // Allow clicks in Ultrasequencer and Superpairs - (!UltrasequencerSolver.INSTANCE.getName().matcher(title).matches() || SkyblockerConfigManager.get().helpers.experiments.enableUltrasequencerSolver)) { + (!UltrasequencerSolver.INSTANCE.getTitlePattern().matcher(title).matches() || SkyblockerConfigManager.get().helpers.experiments.enableUltrasequencerSolver)) { ci.cancel(); return; } 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 index 747ce9b4..aa5d1cd4 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/accessories/newyearcakes/NewYearCakeBagHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/accessories/newyearcakes/NewYearCakeBagHelper.java @@ -2,7 +2,7 @@ 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 de.hysky.skyblocker.utils.container.ContainerSolver; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.client.MinecraftClient; import net.minecraft.item.ItemStack; @@ -16,12 +16,12 @@ public class NewYearCakeBagHelper extends ContainerSolver { } @Override - protected boolean isEnabled() { + public boolean isEnabled() { return SkyblockerConfigManager.get().helpers.enableNewYearCakesHelper; } @Override - protected List getColors(String[] groups, Int2ObjectMap slots) { + public List getColors(Int2ObjectMap slots) { MinecraftClient client = MinecraftClient.getInstance(); if (client.player != null) { for (Slot slot : client.player.currentScreenHandler.slots) { 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 index c403a81b..e31d4238 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/accessories/newyearcakes/NewYearCakesHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/accessories/newyearcakes/NewYearCakesHelper.java @@ -3,7 +3,7 @@ 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 de.hysky.skyblocker.utils.container.ContainerSolver; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.ints.IntOpenHashSet; import it.unimi.dsi.fastutil.ints.IntSet; @@ -20,7 +20,7 @@ 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 Logger LOGGER = LoggerFactory.getLogger(NewYearCakesHelper.class); private static final Pattern NEW_YEAR_CAKE = Pattern.compile("New Year Cake \\(Year (?\\d+)\\)"); private static final Pattern NEW_YEAR_CAKE_PURCHASE = Pattern.compile("You purchased New Year Cake \\(Year (?\\d+)\\) for .+ coins!"); private static final NumberFormat NUMBER_FORMAT = NumberFormat.getInstance(Locale.US); @@ -49,7 +49,7 @@ public class NewYearCakesHelper extends ContainerSolver { } @Override - protected boolean isEnabled() { + public boolean isEnabled() { return SkyblockerConfigManager.get().helpers.enableNewYearCakesHelper; } @@ -65,7 +65,7 @@ public class NewYearCakesHelper extends ContainerSolver { } @Override - protected List getColors(String[] groups, Int2ObjectMap slots) { + public List getColors(Int2ObjectMap slots) { String profile = Utils.getProfile(); if (cakes.isEmpty() || !cakes.containsKey(profile) || cakes.containsKey(profile) && cakes.get(profile).isEmpty()) return List.of(); List highlights = new ArrayList<>(); 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 04f6536d..e1d2c59e 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/chocolatefactory/ChocolateFactorySolver.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/chocolatefactory/ChocolateFactorySolver.java @@ -6,7 +6,7 @@ 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.render.gui.ColorHighlight; -import de.hysky.skyblocker.utils.render.gui.ContainerSolver; +import de.hysky.skyblocker.utils.container.ContainerSolver; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.objects.ObjectArrayList; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; @@ -89,12 +89,12 @@ public class ChocolateFactorySolver extends ContainerSolver { } @Override - protected boolean isEnabled() { + public boolean isEnabled() { return SkyblockerConfigManager.get().helpers.chocolateFactory.enableChocolateFactoryHelper; } @Override - protected List getColors(String[] groups, Int2ObjectMap slots) { + public List getColors(Int2ObjectMap slots) { updateFactoryInfo(slots); List highlights = new ArrayList<>(); @@ -240,7 +240,7 @@ public class ChocolateFactorySolver extends ContainerSolver { } @Override - protected void reset() { + public void reset() { cpsIncreaseFactors.clear(); totalChocolate = -1L; totalCps = -1.0; @@ -264,6 +264,7 @@ public class ChocolateFactorySolver extends ContainerSolver { private record Rabbit(double cpsIncrease, long cost, int slot) {} + //Todo: Merge this into the outer class once #786 is merged public static final class Tooltip extends TooltipAdder { public Tooltip() { super("^Chocolate Factory$", 0); //The priority doesn't really matter here as this is the only tooltip adder for the Chocolate Factory. @@ -394,5 +395,10 @@ public class ChocolateFactorySolver extends ContainerSolver { } return Text.literal(builder.toString()).formatted(Formatting.GOLD); } + + @Override + public boolean isEnabled() { + return SkyblockerConfigManager.get().helpers.chocolateFactory.enableChocolateFactoryHelper; + } } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/CroesusHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/CroesusHelper.java index d317a2e8..de9bd048 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/CroesusHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/CroesusHelper.java @@ -3,7 +3,7 @@ package de.hysky.skyblocker.skyblock.dungeon; import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.utils.ItemUtils; import de.hysky.skyblocker.utils.render.gui.ColorHighlight; -import de.hysky.skyblocker.utils.render.gui.ContainerSolver; +import de.hysky.skyblocker.utils.container.ContainerSolver; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.component.DataComponentTypes; import net.minecraft.item.ItemStack; @@ -12,18 +12,17 @@ import java.util.ArrayList; import java.util.List; public class CroesusHelper extends ContainerSolver { - public CroesusHelper() { super("^Croesus$"); } @Override - protected boolean isEnabled() { + public boolean isEnabled() { return SkyblockerConfigManager.get().dungeons.croesusHelper; } @Override - protected List getColors(String[] groups, Int2ObjectMap slots) { + public List getColors(Int2ObjectMap slots) { List highlights = new ArrayList<>(); for (Int2ObjectMap.Entry entry : slots.int2ObjectEntrySet()) { ItemStack stack = entry.getValue(); 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 0f459c9d..e0bb2748 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/CroesusProfit.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/CroesusProfit.java @@ -1,16 +1,13 @@ package de.hysky.skyblocker.skyblock.dungeon; -import com.google.gson.JsonObject; import de.hysky.skyblocker.config.SkyblockerConfigManager; -import de.hysky.skyblocker.skyblock.item.tooltip.TooltipInfoType; import de.hysky.skyblocker.utils.ItemUtils; import de.hysky.skyblocker.utils.render.gui.ColorHighlight; -import de.hysky.skyblocker.utils.render.gui.ContainerSolver; +import de.hysky.skyblocker.utils.container.ContainerSolver; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.item.ItemStack; import net.minecraft.text.Text; import net.minecraft.util.Util; - import org.jetbrains.annotations.NotNull; import java.util.ArrayList; @@ -21,18 +18,18 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; public class CroesusProfit extends ContainerSolver { - private static final Pattern ESSENCE_PATTERN = Pattern.compile("(?[A-Za-z]+) Essence x(?[0-9]+)"); + private static final Pattern ESSENCE_PATTERN = Pattern.compile("(?[A-Za-z]+) Essence x(?\\d+)"); public CroesusProfit() { super(".*Catacombs - Floor.*"); } @Override - protected boolean isEnabled() { + public boolean isEnabled() { return SkyblockerConfigManager.get().dungeons.dungeonChestProfit.croesusProfit; } @Override - protected List getColors(String[] groups, Int2ObjectMap slots) { + public List getColors(Int2ObjectMap slots) { List highlights = new ArrayList<>(); ItemStack bestChest = null, secondBestChest = null; double bestValue = 0, secondBestValue = 0; // If negative value of chest - it is out of the question @@ -82,7 +79,7 @@ public class CroesusProfit extends ContainerSolver { } else if (lineString.isEmpty()) { processingContents = false; } else if (lineString.contains("Coins") && !processingContents) { - chestPrice = Integer.parseInt(lineString.replaceAll(",", "").replaceAll("\\D", "")); + chestPrice = Integer.parseInt(lineString.replace(",", "").replaceAll("\\D", "")); } if (processingContents) { diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal/ColorTerminal.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal/ColorTerminal.java index 7a966b48..4ee81256 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal/ColorTerminal.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal/ColorTerminal.java @@ -1,8 +1,9 @@ package de.hysky.skyblocker.skyblock.dungeon.terminal; import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.utils.container.AbstractContainerSolver; import de.hysky.skyblocker.utils.render.gui.ColorHighlight; -import de.hysky.skyblocker.utils.render.gui.ContainerSolver; +import de.hysky.skyblocker.utils.container.ContainerSolver; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -27,20 +28,20 @@ public final class ColorTerminal extends ContainerSolver implements TerminalSolv } @Override - protected boolean isEnabled() { + public boolean isEnabled() { targetColor = null; return SkyblockerConfigManager.get().dungeons.terminals.solveColor; } @Override - protected List getColors(String[] groups, Int2ObjectMap slots) { - trimEdges(slots, 6); + public List getColors(Int2ObjectMap slots) { + AbstractContainerSolver.trimEdges(slots, 6); List highlights = new ArrayList<>(); String colorString = groups[0]; if (targetColor == null) { targetColor = colorFromName.get(colorString); if (targetColor == null) { - LOGGER.error("[Skyblocker] Couldn't find dye color corresponding to \"" + colorString + "\""); + LOGGER.error("[Skyblocker] Couldn't find dye color corresponding to \"{}\"", colorString); return Collections.emptyList(); } } @@ -54,7 +55,7 @@ public final class ColorTerminal extends ContainerSolver implements TerminalSolv } @Override - protected boolean onClickSlot(int slot, ItemStack stack, int screenId, String[] groups) { + public boolean onClickSlot(int slot, ItemStack stack, int screenId) { if (stack.hasGlint() || !targetColor.equals(itemColor.get(stack.getItem()))) { return shouldBlockIncorrectClicks(); } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal/LightsOnTerminal.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal/LightsOnTerminal.java index 4975b90b..2c024633 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal/LightsOnTerminal.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal/LightsOnTerminal.java @@ -1,13 +1,13 @@ package de.hysky.skyblocker.skyblock.dungeon.terminal; -import java.util.List; - +import de.hysky.skyblocker.utils.container.ContainerSolver; import de.hysky.skyblocker.utils.render.gui.ColorHighlight; -import de.hysky.skyblocker.utils.render.gui.ContainerSolver; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; +import java.util.List; + /** * The terminal where you change all the panes that are red to green. * @@ -21,17 +21,17 @@ public final class LightsOnTerminal extends ContainerSolver implements TerminalS } @Override - protected boolean isEnabled() { + public boolean isEnabled() { return shouldBlockIncorrectClicks(); } @Override - protected List getColors(String[] groups, Int2ObjectMap slots) { + public List getColors(Int2ObjectMap slots) { return EMPTY; } @Override - protected boolean onClickSlot(int slot, ItemStack stack, int screenId, String[] groups) { + public boolean onClickSlot(int slot, ItemStack stack, int screenId) { return stack.isOf(Items.LIME_STAINED_GLASS_PANE); } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal/OrderTerminal.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal/OrderTerminal.java index 05998988..e628cf8f 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal/OrderTerminal.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal/OrderTerminal.java @@ -1,8 +1,9 @@ package de.hysky.skyblocker.skyblock.dungeon.terminal; import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.utils.container.AbstractContainerSolver; import de.hysky.skyblocker.utils.render.gui.ColorHighlight; -import de.hysky.skyblocker.utils.render.gui.ContainerSolver; +import de.hysky.skyblocker.utils.container.ContainerSolver; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; @@ -12,7 +13,7 @@ import java.util.Collections; import java.util.List; public final class OrderTerminal extends ContainerSolver implements TerminalSolver { - private final int PANES_NUM = 14; + private static final int PANES_NUM = 14; private int[] orderedSlots; private int currentNum = Integer.MAX_VALUE; @@ -21,14 +22,14 @@ public final class OrderTerminal extends ContainerSolver implements TerminalSolv } @Override - protected boolean isEnabled() { + public boolean isEnabled() { orderedSlots = null; currentNum = 0; return SkyblockerConfigManager.get().dungeons.terminals.solveOrder; } @Override - protected List getColors(String[] groups, Int2ObjectMap slots) { + public List getColors(Int2ObjectMap slots) { if(orderedSlots == null && !orderSlots(slots)) return Collections.emptyList(); while(currentNum < PANES_NUM && Items.LIME_STAINED_GLASS_PANE.equals(slots.get(orderedSlots[currentNum]).getItem())) @@ -42,22 +43,21 @@ public final class OrderTerminal extends ContainerSolver implements TerminalSolv } public boolean orderSlots(Int2ObjectMap slots) { - trimEdges(slots, 4); + AbstractContainerSolver.trimEdges(slots, 4); orderedSlots = new int[PANES_NUM]; for(Int2ObjectMap.Entry slot : slots.int2ObjectEntrySet()) { if(Items.AIR.equals(slot.getValue().getItem())) { orderedSlots = null; return false; } - else - orderedSlots[slot.getValue().getCount() - 1] = slot.getIntKey(); + else orderedSlots[slot.getValue().getCount() - 1] = slot.getIntKey(); } currentNum = 0; return true; } @Override - protected boolean onClickSlot(int slot, ItemStack stack, int screenId, String[] groups) { + public boolean onClickSlot(int slot, ItemStack stack, int screenId) { if (stack == null || stack.isEmpty()) return false; if (!stack.isOf(Items.RED_STAINED_GLASS_PANE) || stack.getCount() != currentNum + 1) { diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal/StartsWithTerminal.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal/StartsWithTerminal.java index 8b0f1801..a9ff0e80 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal/StartsWithTerminal.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal/StartsWithTerminal.java @@ -1,8 +1,9 @@ package de.hysky.skyblocker.skyblock.dungeon.terminal; import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.utils.container.AbstractContainerSolver; import de.hysky.skyblocker.utils.render.gui.ColorHighlight; -import de.hysky.skyblocker.utils.render.gui.ContainerSolver; +import de.hysky.skyblocker.utils.container.ContainerSolver; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import it.unimi.dsi.fastutil.objects.ObjectSet; @@ -22,13 +23,13 @@ public final class StartsWithTerminal extends ContainerSolver implements Termina } @Override - protected boolean isEnabled() { + public boolean isEnabled() { return SkyblockerConfigManager.get().dungeons.terminals.solveStartsWith; } @Override - protected List getColors(String[] groups, Int2ObjectMap slots) { - trimEdges(slots, 6); + public List getColors(Int2ObjectMap slots) { + AbstractContainerSolver.trimEdges(slots, 6); setupState(slots); String prefix = groups[0]; @@ -50,7 +51,7 @@ public final class StartsWithTerminal extends ContainerSolver implements Termina } @Override - protected boolean onClickSlot(int slot, ItemStack stack, int screenId, String[] groups) { + public boolean onClickSlot(int slot, ItemStack stack, int screenId) { //Some random glass pane was clicked or something if (!trackedItemStates.containsKey(slot) || stack == null || stack.isEmpty()) return false; @@ -74,7 +75,7 @@ public final class StartsWithTerminal extends ContainerSolver implements Termina return false; } - //We only setup the state when all items aren't null or empty. This prevents the state from being reset due to unsent items or server lag spikes/bad TPS (fix ur servers Hypixel) + //We only set up the state when all items aren't null or empty. This prevents the state from being reset due to unsent items or server lag spikes/bad TPS (fix ur servers Hypixel) private void setupState(Int2ObjectMap usefulSlots) { Predicate> notNullOrEmpty = e -> e.getValue() != null && !e.getValue().isEmpty(); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal/TerminalSolver.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal/TerminalSolver.java index f20c35b5..cf384f08 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal/TerminalSolver.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal/TerminalSolver.java @@ -3,7 +3,6 @@ package de.hysky.skyblocker.skyblock.dungeon.terminal; import de.hysky.skyblocker.config.SkyblockerConfigManager; public sealed interface TerminalSolver permits ColorTerminal, LightsOnTerminal, OrderTerminal, StartsWithTerminal { - default boolean shouldBlockIncorrectClicks() { return SkyblockerConfigManager.get().dungeons.terminals.blockIncorrectClicks; } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/experiment/ChronomatronSolver.java b/src/main/java/de/hysky/skyblocker/skyblock/experiment/ChronomatronSolver.java index 308452ef..a4d34a1b 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/experiment/ChronomatronSolver.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/experiment/ChronomatronSolver.java @@ -103,7 +103,7 @@ public final class ChronomatronSolver extends ExperimentSolver { } @Override - protected List getColors(String[] groups, Int2ObjectMap slots) { + public List getColors(Int2ObjectMap slots) { List highlights = new ArrayList<>(); if (getState() == State.SHOW && chronomatronSlots.size() > chronomatronCurrentOrdinal) { for (Int2ObjectMap.Entry indexStack : slots.int2ObjectEntrySet()) { @@ -119,8 +119,7 @@ public final class ChronomatronSolver extends ExperimentSolver { } @Override - protected void reset() { - super.reset(); + public void reset() { chronomatronSlots.clear(); chronomatronChainLengthCount = 0; chronomatronCurrentSlot = 0; diff --git a/src/main/java/de/hysky/skyblocker/skyblock/experiment/ExperimentSolver.java b/src/main/java/de/hysky/skyblocker/skyblock/experiment/ExperimentSolver.java index ad2800e0..6339eb39 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/experiment/ExperimentSolver.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/experiment/ExperimentSolver.java @@ -2,16 +2,18 @@ package de.hysky.skyblocker.skyblock.experiment; import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.config.configs.HelperConfig; -import de.hysky.skyblocker.utils.render.gui.ContainerSolver; +import de.hysky.skyblocker.utils.container.ContainerSolver; import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.ingame.GenericContainerScreen; import net.minecraft.item.ItemStack; +import org.intellij.lang.annotations.Language; +import org.jetbrains.annotations.NotNull; import java.util.HashMap; import java.util.Map; -public sealed abstract class ExperimentSolver extends ContainerSolver permits ChronomatronSolver, SuperpairsSolver, UltrasequencerSolver { +public abstract sealed class ExperimentSolver extends ContainerSolver permits ChronomatronSolver, SuperpairsSolver, UltrasequencerSolver { public enum State { REMEMBER, WAIT, SHOW, END } @@ -19,7 +21,7 @@ public sealed abstract class ExperimentSolver extends ContainerSolver permits Ch private State state = State.REMEMBER; private final Map slots = new HashMap<>(); - protected ExperimentSolver(String containerName) { + protected ExperimentSolver(@NotNull @Language("RegExp") String containerName) { super(containerName); } @@ -36,22 +38,20 @@ public sealed abstract class ExperimentSolver extends ContainerSolver permits Ch } @Override - protected final boolean isEnabled() { + public final boolean isEnabled() { return isEnabled(SkyblockerConfigManager.get().helpers.experiments); } protected abstract boolean isEnabled(HelperConfig.Experiments experimentsConfig); @Override - protected void start(GenericContainerScreen screen) { - super.start(screen); + public void start(GenericContainerScreen screen) { state = State.REMEMBER; ScreenEvents.afterTick(screen).register(this::tick); } @Override - protected void reset() { - super.reset(); + public void reset() { state = State.REMEMBER; slots.clear(); } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/experiment/SuperpairsSolver.java b/src/main/java/de/hysky/skyblocker/skyblock/experiment/SuperpairsSolver.java index 5c2ed152..f2d4c55d 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/experiment/SuperpairsSolver.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/experiment/SuperpairsSolver.java @@ -33,14 +33,12 @@ public final class SuperpairsSolver extends ExperimentSolver { } @Override - protected void start(GenericContainerScreen screen) { - super.start(screen); + public void start(GenericContainerScreen screen) { setState(State.SHOW); } @Override - protected void reset() { - super.reset(); + public void reset() { superpairsPrevClickedSlot = 0; superpairsCurrentSlot = null; superpairsDuplicatedSlots.clear(); @@ -63,7 +61,7 @@ public final class SuperpairsSolver extends ExperimentSolver { } @Override - protected List getColors(String[] groups, Int2ObjectMap displaySlots) { + public List getColors(Int2ObjectMap displaySlots) { List highlights = new ArrayList<>(); if (getState() == State.SHOW) { for (Int2ObjectMap.Entry indexStack : displaySlots.int2ObjectEntrySet()) { diff --git a/src/main/java/de/hysky/skyblocker/skyblock/experiment/UltrasequencerSolver.java b/src/main/java/de/hysky/skyblocker/skyblock/experiment/UltrasequencerSolver.java index a4d1e4b6..796c80ee 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/experiment/UltrasequencerSolver.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/experiment/UltrasequencerSolver.java @@ -2,6 +2,7 @@ package de.hysky.skyblocker.skyblock.experiment; import de.hysky.skyblocker.config.configs.HelperConfig; import de.hysky.skyblocker.utils.render.gui.ColorHighlight; +import de.hysky.skyblocker.utils.container.AbstractContainerSolver; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.ingame.GenericContainerScreen; @@ -55,7 +56,7 @@ public final class UltrasequencerSolver extends ExperimentSolver { case WAIT -> { if (genericContainerScreen.getScreenHandler().getInventory().getStack(49).getName().getString().startsWith("Timer: ")) { setState(State.SHOW); - markHighlightsDirty(); + AbstractContainerSolver.markHighlightsDirty(); } } case END -> { @@ -76,7 +77,7 @@ public final class UltrasequencerSolver extends ExperimentSolver { } @Override - protected List getColors(String[] groups, Int2ObjectMap slots) { + public List getColors(Int2ObjectMap slots) { return getState() == State.SHOW && ultrasequencerNextSlot != 0 ? List.of(ColorHighlight.green(ultrasequencerNextSlot)) : new ArrayList<>(); } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextAdder.java index 71d9aa30..7ac403df 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextAdder.java @@ -1,18 +1,18 @@ package de.hysky.skyblocker.skyblock.item.slottext; import de.hysky.skyblocker.config.SkyblockerConfigManager; -import de.hysky.skyblocker.utils.render.gui.AbstractContainerMatcher; -import net.minecraft.screen.slot.Slot; +import de.hysky.skyblocker.utils.container.AbstractSlotTextAdder; +import de.hysky.skyblocker.utils.container.RegexContainerMatcher; import org.intellij.lang.annotations.Language; import org.jetbrains.annotations.NotNull; -import java.util.List; import java.util.regex.Pattern; /** + * Simple implementation of a slot text adder. * Extend this class and add it to {@link SlotTextManager#adders} to add text to any arbitrary slot. */ -public abstract class SlotTextAdder extends AbstractContainerMatcher { +public abstract class SlotTextAdder extends RegexContainerMatcher implements AbstractSlotTextAdder { /** * Utility constructor that will compile the given string into a pattern. * @@ -38,20 +38,7 @@ public abstract class SlotTextAdder extends AbstractContainerMatcher { super(); } - /** - * This method will be called for each rendered slot. Consider using a switch statement on {@link Slot#id} if you wish to add different text to different slots. - * - * @return A list of positioned text to be rendered. Return {@link List#of()} if no text should be rendered. - * @implNote By minecraft's design, scaled text inexplicably moves around. - * So, limit your text to 3 characters (or roughly less than 20 width) if you want it to not look horrible. - */ - public abstract @NotNull List getText(Slot slot); - - /** - * Override this method to add conditions to enable or disable this adder. - * @return Whether this adder is enabled. - * @implNote The slot text adders only work while in skyblock, so no need to check for that again. - */ + @Override public boolean isEnabled() { return SkyblockerConfigManager.get().general.itemInfoDisplay.slotText; } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextManager.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextManager.java index aa9bf939..fe38e340 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextManager.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextManager.java @@ -3,8 +3,8 @@ package de.hysky.skyblocker.skyblock.item.slottext; import de.hysky.skyblocker.skyblock.bazaar.BazaarHelper; import de.hysky.skyblocker.skyblock.item.slottext.adders.*; import de.hysky.skyblocker.utils.Utils; +import de.hysky.skyblocker.utils.container.AbstractSlotTextAdder; import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents; -import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.ingame.HandledScreen; import net.minecraft.screen.slot.Slot; import org.jetbrains.annotations.NotNull; @@ -13,7 +13,7 @@ import java.util.ArrayList; import java.util.List; public class SlotTextManager { - private static final SlotTextAdder[] adders = new SlotTextAdder[]{ + private static final AbstractSlotTextAdder[] adders = new AbstractSlotTextAdder[]{ new EssenceShopAdder(), new EnchantmentLevelAdder(), new MinionLevelAdder(), @@ -34,25 +34,24 @@ public class SlotTextManager { new BazaarHelper(), new StatsTuningAdder() }; - private static final ArrayList currentScreenAdders = new ArrayList<>(); + private static final ArrayList currentScreenAdders = new ArrayList<>(); private SlotTextManager() { } public static void init() { ScreenEvents.AFTER_INIT.register((client, screen, width, height) -> { - if (screen instanceof HandledScreen && Utils.isOnSkyblock()) { - onScreenChange(screen); + if (screen instanceof HandledScreen handledScreen && Utils.isOnSkyblock()) { + onScreenChange(handledScreen); ScreenEvents.remove(screen).register(ignored -> currentScreenAdders.clear()); } }); } - private static void onScreenChange(Screen screen) { - final String title = screen.getTitle().getString(); - for (SlotTextAdder adder : adders) { + private static void onScreenChange(HandledScreen screen) { + for (AbstractSlotTextAdder adder : adders) { if (!adder.isEnabled()) continue; - if (adder.titlePattern == null || adder.titlePattern.matcher(title).find()) { + if (adder.test(screen)) { currentScreenAdders.add(adder); } } @@ -68,7 +67,7 @@ public class SlotTextManager { @NotNull public static List getText(Slot slot) { if (currentScreenAdders.isEmpty()) return List.of(); - for (SlotTextAdder adder : currentScreenAdders) { + for (AbstractSlotTextAdder adder : currentScreenAdders) { List text = adder.getText(slot); if (!text.isEmpty()) return text; } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipAdder.java index f3395def..84571149 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipAdder.java @@ -1,46 +1,57 @@ package de.hysky.skyblocker.skyblock.item.tooltip; -import de.hysky.skyblocker.utils.render.gui.AbstractContainerMatcher; -import net.minecraft.item.ItemStack; -import net.minecraft.screen.slot.Slot; -import net.minecraft.text.Text; +import de.hysky.skyblocker.utils.container.RegexContainerMatcher; +import de.hysky.skyblocker.utils.container.AbstractTooltipAdder; import org.intellij.lang.annotations.Language; -import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.NotNull; -import java.util.List; import java.util.regex.Pattern; /** + * Simple implementation of a tooltip adder. * Extend this class and add it to {@link TooltipManager#adders} to add additional text to tooltips. */ -public abstract class TooltipAdder extends AbstractContainerMatcher { +public abstract class TooltipAdder extends RegexContainerMatcher implements AbstractTooltipAdder { /** * The priority of this adder. Lower priority means it will be applied first. - * @apiNote Consider taking this value on your class' constructor and setting it from {@link TooltipManager#adders} to make it easy to read and maintain. + * @apiNote Consider adding this as a parameter to your class' constructor and + * setting it from {@link TooltipManager#adders} to make it easy to read and maintain. */ - public final int priority; + private final int priority; - protected TooltipAdder(@Language("RegExp") String titlePattern, int priority) { + /** + * Utility constructor that will compile the given string into a pattern. + * + * @see #TooltipAdder(Pattern, int) + */ + protected TooltipAdder(@NotNull @Language("RegExp") String titlePattern, int priority) { super(titlePattern); this.priority = priority; } - protected TooltipAdder(Pattern titlePattern, int priority) { + /** + * Creates a TooltipAdder that will be applied to screens with titles that match the given pattern. + * + * @param titlePattern The pattern to match the screen title against. + * @param priority The priority of this adder. Lower priority means it will be applied first. + */ + protected TooltipAdder(@NotNull Pattern titlePattern, int priority) { super(titlePattern); this.priority = priority; } /** * Creates a TooltipAdder that will be applied to all screens. + * + * @param priority The priority of this adder. Lower priority means it will be applied first. */ protected TooltipAdder(int priority) { super(); this.priority = priority; } - /** - * @implNote The first element of the lines list holds the item's display name, - * as it's a list of all lines that will be displayed in the tooltip. - */ - public abstract void addToTooltip(@Nullable Slot focusedSlot, ItemStack stack, List lines); + @Override + public int getPriority() { + return priority; + } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipInfoType.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipInfoType.java index 46f4cb58..d8327383 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipInfoType.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipInfoType.java @@ -117,16 +117,6 @@ public enum TooltipInfoType implements Runnable { } else return data.has(memberName); } - /** - * Checks if the tooltip is enabled and the data has the given member name and sends a warning message if data is null. - * - * @param memberName the member name to check - * @return whether the tooltip is enabled and the data has the given member name or not - */ - public boolean isTooltipEnabledAndHasOrNullWarning(String memberName) { - return isTooltipEnabled() && hasOrNullWarning(memberName); - } - /** * Downloads the data if it is enabled. * diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipManager.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipManager.java index c3399b58..2c81cff4 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipManager.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipManager.java @@ -6,10 +6,10 @@ import de.hysky.skyblocker.skyblock.chocolatefactory.ChocolateFactorySolver; import de.hysky.skyblocker.skyblock.item.tooltip.adders.*; import de.hysky.skyblocker.skyblock.item.tooltip.adders.CraftPriceTooltip; import de.hysky.skyblocker.utils.Utils; +import de.hysky.skyblocker.utils.container.AbstractTooltipAdder; import net.fabricmc.fabric.api.client.item.v1.ItemTooltipCallback; import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.ingame.HandledScreen; import net.minecraft.item.ItemStack; import net.minecraft.screen.slot.Slot; @@ -21,7 +21,7 @@ import java.util.Comparator; import java.util.List; public class TooltipManager { - private static final TooltipAdder[] adders = new TooltipAdder[]{ + private static final AbstractTooltipAdder[] adders = new AbstractTooltipAdder[]{ new LineSmoothener(), // Applies before anything else new SupercraftReminder(), new ChocolateFactorySolver.Tooltip(), @@ -39,7 +39,7 @@ public class TooltipManager { new ColorTooltip(11), new AccessoryTooltip(12), }; - private static final ArrayList currentScreenAdders = new ArrayList<>(); + private static final ArrayList currentScreenAdders = new ArrayList<>(); private TooltipManager() { } @@ -53,20 +53,21 @@ public class TooltipManager { } }); ScreenEvents.AFTER_INIT.register((client, screen, width, height) -> { - onScreenChange(screen); + if (screen instanceof HandledScreen handledScreen) { + onScreenChange(handledScreen); + } ScreenEvents.remove(screen).register(ignored -> currentScreenAdders.clear()); }); } - private static void onScreenChange(Screen screen) { - final String title = screen.getTitle().getString(); + private static void onScreenChange(HandledScreen screen) { currentScreenAdders.clear(); - for (TooltipAdder adder : adders) { - if (adder.titlePattern == null || adder.titlePattern.matcher(title).find()) { + for (AbstractTooltipAdder adder : adders) { + if (adder.isEnabled() && adder.test(screen)) { currentScreenAdders.add(adder); } } - currentScreenAdders.sort(Comparator.comparingInt(adder -> adder.priority)); + currentScreenAdders.sort(Comparator.comparingInt(AbstractTooltipAdder::getPriority)); } /** @@ -84,7 +85,7 @@ public class TooltipManager { @Deprecated public static List addToTooltip(@Nullable Slot focusedSlot, ItemStack stack, List lines) { if (!Utils.isOnSkyblock()) return lines; - for (TooltipAdder adder : currentScreenAdders) { + for (AbstractTooltipAdder adder : currentScreenAdders) { adder.addToTooltip(focusedSlot, stack, lines); } return lines; diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/AccessoryTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/AccessoryTooltip.java index caed0e0e..0aeb1cc6 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/AccessoryTooltip.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/AccessoryTooltip.java @@ -21,7 +21,7 @@ public class AccessoryTooltip extends TooltipAdder { @Override public void addToTooltip(@Nullable Slot focusedSlot, ItemStack stack, List lines) { final String internalID = stack.getSkyblockId(); - if (TooltipInfoType.ACCESSORIES.isTooltipEnabledAndHasOrNullWarning(internalID)) { + if (TooltipInfoType.ACCESSORIES.hasOrNullWarning(internalID)) { Pair report = AccessoriesHelper.calculateReport4Accessory(internalID); if (report.left() != AccessoriesHelper.AccessoryReport.INELIGIBLE) { @@ -42,4 +42,9 @@ public class AccessoryTooltip extends TooltipAdder { } } } + + @Override + public boolean isEnabled() { + return TooltipInfoType.ACCESSORIES.isTooltipEnabled(); + } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/AvgBinTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/AvgBinTooltip.java index d7a56b95..1f0180ff 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/AvgBinTooltip.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/AvgBinTooltip.java @@ -1,6 +1,5 @@ package de.hysky.skyblocker.skyblock.item.tooltip.adders; -import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.config.configs.GeneralConfig; import de.hysky.skyblocker.skyblock.item.tooltip.ItemTooltip; import de.hysky.skyblocker.skyblock.item.tooltip.TooltipAdder; @@ -24,40 +23,44 @@ public class AvgBinTooltip extends TooltipAdder { String internalID = stack.getSkyblockId(); if (neuName == null || internalID == null) return; - if (SkyblockerConfigManager.get().general.itemTooltip.enableAvgBIN) { - if (TooltipInfoType.ONE_DAY_AVERAGE.getData() == null || TooltipInfoType.THREE_DAY_AVERAGE.getData() == null) { - ItemTooltip.nullWarning(); - } else { + if (TooltipInfoType.ONE_DAY_AVERAGE.getData() == null || TooltipInfoType.THREE_DAY_AVERAGE.getData() == null) { + ItemTooltip.nullWarning(); + } else { /* We are skipping check average prices for potions, runes and enchanted books because there is no data for their in API. */ - if (!neuName.isEmpty() && LBinTooltip.lbinExist) { - GeneralConfig.Average type = ItemTooltip.config.avg; + if (!neuName.isEmpty() && LBinTooltip.lbinExist) { + GeneralConfig.Average type = ItemTooltip.config.avg; - // "No data" line because of API not keeping old data, it causes NullPointerException - if (type == GeneralConfig.Average.ONE_DAY || type == GeneralConfig.Average.BOTH) { - lines.add( - Text.literal(String.format("%-19s", "1 Day Avg. Price:")) - .formatted(Formatting.GOLD) - .append(TooltipInfoType.ONE_DAY_AVERAGE.getData().get(neuName) == null - ? Text.literal("No data").formatted(Formatting.RED) - : ItemTooltip.getCoinsMessage(TooltipInfoType.ONE_DAY_AVERAGE.getData().get(neuName).getAsDouble(), stack.getCount()) - ) - ); - } - if (type == GeneralConfig.Average.THREE_DAY || type == GeneralConfig.Average.BOTH) { - lines.add( - Text.literal(String.format("%-19s", "3 Day Avg. Price:")) - .formatted(Formatting.GOLD) - .append(TooltipInfoType.THREE_DAY_AVERAGE.getData().get(neuName) == null - ? Text.literal("No data").formatted(Formatting.RED) - : ItemTooltip.getCoinsMessage(TooltipInfoType.THREE_DAY_AVERAGE.getData().get(neuName).getAsDouble(), stack.getCount()) - ) - ); - } + // "No data" line because of API not keeping old data, it causes NullPointerException + if (type == GeneralConfig.Average.ONE_DAY || type == GeneralConfig.Average.BOTH) { + lines.add( + Text.literal(String.format("%-19s", "1 Day Avg. Price:")) + .formatted(Formatting.GOLD) + .append(TooltipInfoType.ONE_DAY_AVERAGE.getData().get(neuName) == null + ? Text.literal("No data").formatted(Formatting.RED) + : ItemTooltip.getCoinsMessage(TooltipInfoType.ONE_DAY_AVERAGE.getData().get(neuName).getAsDouble(), stack.getCount()) + ) + ); + } + if (type == GeneralConfig.Average.THREE_DAY || type == GeneralConfig.Average.BOTH) { + lines.add( + Text.literal(String.format("%-19s", "3 Day Avg. Price:")) + .formatted(Formatting.GOLD) + .append(TooltipInfoType.THREE_DAY_AVERAGE.getData().get(neuName) == null + ? Text.literal("No data").formatted(Formatting.RED) + : ItemTooltip.getCoinsMessage(TooltipInfoType.THREE_DAY_AVERAGE.getData().get(neuName).getAsDouble(), stack.getCount()) + ) + ); } } } } + + @Override + public boolean isEnabled() { + //Both 1 day and 3 day averages use the same config option, so we only need to check one + return TooltipInfoType.THREE_DAY_AVERAGE.isTooltipEnabled(); + } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/BazaarPriceTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/BazaarPriceTooltip.java index d2fa563b..36023182 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/BazaarPriceTooltip.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/BazaarPriceTooltip.java @@ -30,7 +30,7 @@ public class BazaarPriceTooltip extends TooltipAdder { if (name.startsWith("ISSHINY_")) name = "SHINY_" + internalID; - if (TooltipInfoType.BAZAAR.isTooltipEnabledAndHasOrNullWarning(name)) { + if (TooltipInfoType.BAZAAR.hasOrNullWarning(name)) { int amount; if (lines.get(1).getString().endsWith("Sack")) { //The amount is in the 2nd sibling of the 3rd line of the lore. here V @@ -54,4 +54,9 @@ public class BazaarPriceTooltip extends TooltipAdder { bazaarExist = true; } } + + @Override + public boolean isEnabled() { + return TooltipInfoType.BAZAAR.isTooltipEnabled(); + } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/ColorTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/ColorTooltip.java index 7546d37a..d66ca378 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/ColorTooltip.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/ColorTooltip.java @@ -25,10 +25,15 @@ public class ColorTooltip extends TooltipAdder { super(priority); } + @Override + public boolean isEnabled() { + return TooltipInfoType.COLOR.isTooltipEnabled(); + } + @Override public void addToTooltip(@Nullable Slot focusedSlot, ItemStack stack, List lines) { final String internalID = stack.getSkyblockId(); - if (TooltipInfoType.COLOR.isTooltipEnabledAndHasOrNullWarning(internalID) && stack.contains(DataComponentTypes.DYED_COLOR)) { + if (TooltipInfoType.COLOR.hasOrNullWarning(internalID) && stack.contains(DataComponentTypes.DYED_COLOR)) { //DyedColorComponent#getColor can be ARGB so we mask out the alpha bits int dyeColor = stack.get(DataComponentTypes.DYED_COLOR).rgb() & 0x00FFFFFF; String colorHex = String.format("%06X", dyeColor); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/DungeonQualityTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/DungeonQualityTooltip.java index 0b1d993d..4cd1d2b5 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/DungeonQualityTooltip.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/DungeonQualityTooltip.java @@ -19,7 +19,6 @@ public class DungeonQualityTooltip extends TooltipAdder { @Override public void addToTooltip(@Nullable Slot focusedSlot, ItemStack stack, List lines) { - if (!SkyblockerConfigManager.get().general.itemTooltip.dungeonQuality) return; NbtCompound customData = ItemUtils.getCustomData(stack); if (customData == null || !customData.contains("baseStatBoostPercentage")) return; int baseStatBoostPercentage = customData.getInt("baseStatBoostPercentage"); @@ -40,7 +39,7 @@ public class DungeonQualityTooltip extends TooltipAdder { } } - final String getItemTierFloor(int tier) { + private String getItemTierFloor(int tier) { return switch (tier) { case 0 -> "E"; case 1 -> "F1"; @@ -56,4 +55,9 @@ public class DungeonQualityTooltip extends TooltipAdder { default -> "Unknown"; }; } + + @Override + public boolean isEnabled() { + return SkyblockerConfigManager.get().general.itemTooltip.dungeonQuality; + } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/LBinTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/LBinTooltip.java index e6930c32..b2186203 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/LBinTooltip.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/LBinTooltip.java @@ -18,6 +18,11 @@ public class LBinTooltip extends TooltipAdder { super(priority); } + @Override + public boolean isEnabled() { + return TooltipInfoType.LOWEST_BINS.isTooltipEnabled(); + } + @Override public void addToTooltip(@Nullable Slot focusedSlot, ItemStack stack, List lines) { lbinExist = false; @@ -30,7 +35,7 @@ public class LBinTooltip extends TooltipAdder { // bazaarOpened & bazaarExist check for lbin, because Skytils keeps some bazaar item data in lbin api - if (TooltipInfoType.LOWEST_BINS.isTooltipEnabledAndHasOrNullWarning(name) && !BazaarPriceTooltip.bazaarExist) { + if (TooltipInfoType.LOWEST_BINS.hasOrNullWarning(name) && !BazaarPriceTooltip.bazaarExist) { lines.add(Text.literal(String.format("%-19s", "Lowest BIN Price:")) .formatted(Formatting.GOLD) .append(ItemTooltip.getCoinsMessage(TooltipInfoType.LOWEST_BINS.getData().get(name).getAsDouble(), stack.getCount()))); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/LineSmoothener.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/LineSmoothener.java index 0e997834..c459f76b 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/LineSmoothener.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/LineSmoothener.java @@ -17,6 +17,11 @@ public class LineSmoothener extends TooltipAdder { return Text.literal(" ").formatted(Formatting.DARK_GRAY, Formatting.STRIKETHROUGH, Formatting.BOLD); } + @Override + public boolean isEnabled() { + return true; + } + public LineSmoothener() { super(Integer.MIN_VALUE); } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/MotesTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/MotesTooltip.java index a0aa8d94..6a612594 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/MotesTooltip.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/MotesTooltip.java @@ -21,13 +21,18 @@ public class MotesTooltip extends TooltipAdder { @Override public void addToTooltip(@Nullable Slot focusedSlot, ItemStack stack, List lines) { final String internalID = stack.getSkyblockId(); - if (internalID != null && TooltipInfoType.MOTES.isTooltipEnabledAndHasOrNullWarning(internalID)) { + if (internalID != null && TooltipInfoType.MOTES.hasOrNullWarning(internalID)) { lines.add(Text.literal(String.format("%-20s", "Motes Price:")) .formatted(Formatting.LIGHT_PURPLE) .append(getMotesMessage(TooltipInfoType.MOTES.getData().get(internalID).getAsInt(), stack.getCount()))); } } + @Override + public boolean isEnabled() { + return TooltipInfoType.MOTES.isTooltipEnabled(); + } + private static Text getMotesMessage(int price, int count) { float motesMultiplier = SkyblockerConfigManager.get().otherLocations.rift.mcGrubberStacks * 0.05f + 1; diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/MuseumTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/MuseumTooltip.java index 5c21d2df..e6e06064 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/MuseumTooltip.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/MuseumTooltip.java @@ -18,10 +18,15 @@ public class MuseumTooltip extends TooltipAdder { super(priority); } + @Override + public boolean isEnabled() { + return TooltipInfoType.MOTES.isTooltipEnabled(); + } + @Override public void addToTooltip(@Nullable Slot focusedSlot, ItemStack stack, List lines) { final String internalID = stack.getSkyblockId(); - if (TooltipInfoType.MUSEUM.isTooltipEnabledAndHasOrNullWarning(internalID)) { + if (TooltipInfoType.MUSEUM.hasOrNullWarning(internalID)) { String itemCategory = TooltipInfoType.MUSEUM.getData().get(internalID).getAsString(); String format = switch (itemCategory) { case "Weapons" -> "%-18s"; diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/NpcPriceTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/NpcPriceTooltip.java index d556c9b2..fcdd15e6 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/NpcPriceTooltip.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/NpcPriceTooltip.java @@ -17,10 +17,15 @@ public class NpcPriceTooltip extends TooltipAdder { super(priority); } + @Override + public boolean isEnabled() { + return TooltipInfoType.NPC.isTooltipEnabled(); + } + @Override public void addToTooltip(@Nullable Slot focusedSlot, ItemStack stack, List lines) { final String internalID = stack.getSkyblockId(); - if (internalID != null && TooltipInfoType.NPC.isTooltipEnabledAndHasOrNullWarning(internalID)) { + if (internalID != null && TooltipInfoType.NPC.hasOrNullWarning(internalID)) { int amount; if (lines.get(1).getString().endsWith("Sack")) { //The amount is in the 2nd sibling of the 3rd line of the lore. here V diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/ObtainedDateTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/ObtainedDateTooltip.java index 9f405c58..fc3ac28d 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/ObtainedDateTooltip.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/ObtainedDateTooltip.java @@ -27,15 +27,17 @@ public class ObtainedDateTooltip extends TooltipAdder { } @Override - public void addToTooltip(@Nullable Slot focusedSlot, ItemStack stack, List lines) { - if (TooltipInfoType.OBTAINED.isTooltipEnabled()) { - String timestamp = getTimestamp(stack); + public boolean isEnabled() { + return TooltipInfoType.OBTAINED.isTooltipEnabled(); + } - if (!timestamp.isEmpty()) { - lines.add(Text.empty() - .append(Text.literal(String.format("%-21s", "Obtained: ")).formatted(Formatting.LIGHT_PURPLE)) - .append(Text.literal(timestamp).formatted(Formatting.RED))); - } + @Override + public void addToTooltip(@Nullable Slot focusedSlot, ItemStack stack, List lines) { + String timestamp = getTimestamp(stack); + if (!timestamp.isEmpty()) { + lines.add(Text.empty() + .append(Text.literal(String.format("%-21s", "Obtained: ")).formatted(Formatting.LIGHT_PURPLE)) + .append(Text.literal(timestamp).formatted(Formatting.RED))); } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/SupercraftReminder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/SupercraftReminder.java index 47d2bd48..767832c0 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/SupercraftReminder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/SupercraftReminder.java @@ -29,4 +29,9 @@ public class SupercraftReminder extends TooltipAdder { if (lines.get(lines.size() - 2).getString().equals("Recipe not unlocked!")) index--; //Place it right below the "Right-Click to set amount" line lines.add(index, Text.literal("Shift-Click to maximize the amount!").formatted(Formatting.GOLD)); } + + @Override + public boolean isEnabled() { + return true; + } } diff --git a/src/main/java/de/hysky/skyblocker/utils/container/AbstractContainerMatcher.java b/src/main/java/de/hysky/skyblocker/utils/container/AbstractContainerMatcher.java new file mode 100644 index 00000000..5509b9a4 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/utils/container/AbstractContainerMatcher.java @@ -0,0 +1,17 @@ +package de.hysky.skyblocker.utils.container; + +import net.minecraft.client.gui.screen.ingame.HandledScreen; +import org.jetbrains.annotations.NotNull; + +public interface AbstractContainerMatcher { + /** + * Tests if the given screen should be handled by this matcher. + * @return {@code true} if this matcher should apply to the given screen, {@code false} otherwise + */ + boolean test(@NotNull HandledScreen screen); + + /** + * @return {@code true} if this matcher is enabled, {@code false} otherwise + */ + boolean isEnabled(); +} diff --git a/src/main/java/de/hysky/skyblocker/utils/container/AbstractContainerSolver.java b/src/main/java/de/hysky/skyblocker/utils/container/AbstractContainerSolver.java new file mode 100644 index 00000000..38bc32dd --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/utils/container/AbstractContainerSolver.java @@ -0,0 +1,37 @@ +package de.hysky.skyblocker.utils.container; + +import de.hysky.skyblocker.SkyblockerMod; +import de.hysky.skyblocker.utils.render.gui.ColorHighlight; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; +import net.minecraft.client.gui.screen.ingame.GenericContainerScreen; +import net.minecraft.item.ItemStack; + +import java.util.List; + +public interface AbstractContainerSolver extends AbstractContainerMatcher { + + List getColors(Int2ObjectMap slots); + + default void start(GenericContainerScreen screen) {} + + default void reset() {} + + default boolean onClickSlot(int slot, ItemStack stack, int screenId) { + return false; + } + + static void markHighlightsDirty() { + SkyblockerMod.getInstance().containerSolverManager.markDirty(); + } + + static void trimEdges(Int2ObjectMap slots, int rows) { + for (int i = 0; i < rows; i++) { + slots.remove(9 * i); + slots.remove(9 * i + 8); + } + for (int i = 1; i < 8; i++) { + slots.remove(i); + slots.remove((rows - 1) * 9 + i); + } + } +} diff --git a/src/main/java/de/hysky/skyblocker/utils/container/AbstractSlotTextAdder.java b/src/main/java/de/hysky/skyblocker/utils/container/AbstractSlotTextAdder.java new file mode 100644 index 00000000..4034e88d --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/utils/container/AbstractSlotTextAdder.java @@ -0,0 +1,21 @@ +package de.hysky.skyblocker.utils.container; + +import de.hysky.skyblocker.skyblock.item.slottext.SlotText; +import net.minecraft.screen.slot.Slot; +import org.jetbrains.annotations.NotNull; + +import java.util.List; + +public interface AbstractSlotTextAdder extends AbstractContainerMatcher { + + /** + * This method will be called for each rendered slot. Consider using a switch statement on {@link Slot#id} if you wish to add different text to different slots. + * + * @return A list of positioned text to be rendered. Return {@link List#of()} if no text should be rendered. + * @implNote By minecraft's design, scaled text inexplicably moves around. + * It's also not anti-aliased, so it looks horribly jagged and unreadable when scaled down too much. + * So, limit your text to 3 characters (or roughly less than 20 width) if you want it to not look horrible. + */ + @NotNull + List getText(Slot slot); +} diff --git a/src/main/java/de/hysky/skyblocker/utils/container/AbstractTooltipAdder.java b/src/main/java/de/hysky/skyblocker/utils/container/AbstractTooltipAdder.java new file mode 100644 index 00000000..3cc84f35 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/utils/container/AbstractTooltipAdder.java @@ -0,0 +1,18 @@ +package de.hysky.skyblocker.utils.container; + +import net.minecraft.item.ItemStack; +import net.minecraft.screen.slot.Slot; +import net.minecraft.text.Text; +import org.jetbrains.annotations.Nullable; + +import java.util.List; + +public interface AbstractTooltipAdder extends AbstractContainerMatcher { + /** + * @implNote The first element of the lines list holds the item's display name, + * as it's a list of all lines that will be displayed in the tooltip. + */ + void addToTooltip(@Nullable Slot focusedSlot, ItemStack stack, List lines); + + int getPriority(); +} diff --git a/src/main/java/de/hysky/skyblocker/utils/container/ContainerSolver.java b/src/main/java/de/hysky/skyblocker/utils/container/ContainerSolver.java new file mode 100644 index 00000000..6d3240ea --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/utils/container/ContainerSolver.java @@ -0,0 +1,38 @@ +package de.hysky.skyblocker.utils.container; + +import org.intellij.lang.annotations.Language; +import org.jetbrains.annotations.NotNull; + +import java.util.regex.Pattern; + +/** + * Simple implementation of a container solver. Extend this class to add a new gui solver, + * like terminal solvers or experiment solvers and add it to {@link ContainerSolverManager#solvers}. + */ +public abstract class ContainerSolver extends RegexContainerMatcher implements AbstractContainerSolver { + /** + * Utility constructor that will compile the given string into a pattern. + * + * @see #ContainerSolver(Pattern) + */ + protected ContainerSolver(@NotNull @Language("RegExp") String titlePattern) { + super(titlePattern); + } + + /** + * Creates a ContainerSolver that will be applied to screens with titles that match the given pattern. + * + * @param titlePattern The pattern to match the screen title against. + */ + protected ContainerSolver(@NotNull Pattern titlePattern) { + super(titlePattern); + } + + // A container solver that applies to every screen doesn't make sense, + // so we don't provide a constructor for that and force getTitlePattern to be @NotNull + @Override + public @NotNull Pattern getTitlePattern() { + assert super.getTitlePattern() != null; + return super.getTitlePattern(); + } +} diff --git a/src/main/java/de/hysky/skyblocker/utils/container/ContainerSolverManager.java b/src/main/java/de/hysky/skyblocker/utils/container/ContainerSolverManager.java new file mode 100644 index 00000000..77833a67 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/utils/container/ContainerSolverManager.java @@ -0,0 +1,150 @@ +package de.hysky.skyblocker.utils.container; + +import com.mojang.blaze3d.systems.RenderSystem; +import de.hysky.skyblocker.mixins.accessors.HandledScreenAccessor; +import de.hysky.skyblocker.skyblock.accessories.newyearcakes.NewYearCakeBagHelper; +import de.hysky.skyblocker.skyblock.accessories.newyearcakes.NewYearCakesHelper; +import de.hysky.skyblocker.skyblock.chocolatefactory.ChocolateFactorySolver; +import de.hysky.skyblocker.skyblock.dungeon.CroesusHelper; +import de.hysky.skyblocker.skyblock.dungeon.CroesusProfit; +import de.hysky.skyblocker.skyblock.dungeon.terminal.ColorTerminal; +import de.hysky.skyblocker.skyblock.dungeon.terminal.LightsOnTerminal; +import de.hysky.skyblocker.skyblock.dungeon.terminal.OrderTerminal; +import de.hysky.skyblocker.skyblock.dungeon.terminal.StartsWithTerminal; +import de.hysky.skyblocker.skyblock.experiment.ChronomatronSolver; +import de.hysky.skyblocker.skyblock.experiment.SuperpairsSolver; +import de.hysky.skyblocker.skyblock.experiment.UltrasequencerSolver; +import de.hysky.skyblocker.utils.Utils; +import de.hysky.skyblocker.utils.render.gui.ColorHighlight; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; +import it.unimi.dsi.fastutil.ints.Int2ObjectRBTreeMap; +import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents; +import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.gui.screen.ingame.GenericContainerScreen; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.item.ItemStack; +import net.minecraft.screen.slot.Slot; +import org.jetbrains.annotations.NotNull; + +import java.util.List; + +/** + * Manager class for {@link ContainerSolver}s like terminal solvers and experiment solvers. To add a new gui solver, extend {@link ContainerSolver} and register it in {@link #ContainerSolverManager()}. + */ +public class ContainerSolverManager { + private final AbstractContainerSolver[] solvers; + private AbstractContainerSolver currentSolver = null; + private List highlights; + /** + * Useful for keeping track of a solver's state in a Screen instance, such as if Hypixel closes & reopens a screen after every click (as they do with terminals). + */ + private int screenId = 0; + + public ContainerSolverManager() { + solvers = new AbstractContainerSolver[]{ + new ColorTerminal(), + new OrderTerminal(), + new StartsWithTerminal(), + new LightsOnTerminal(), + new CroesusHelper(), + new CroesusProfit(), + new ChronomatronSolver(), + new SuperpairsSolver(), + UltrasequencerSolver.INSTANCE, + new NewYearCakeBagHelper(), + NewYearCakesHelper.INSTANCE, + new ChocolateFactorySolver() + }; + } + + public AbstractContainerSolver getCurrentSolver() { + return currentSolver; + } + + public void init() { + ScreenEvents.BEFORE_INIT.register((client, screen, scaledWidth, scaledHeight) -> { + if (Utils.isOnSkyblock() && screen instanceof GenericContainerScreen genericContainerScreen) { + ScreenEvents.afterRender(screen).register((screen1, context, mouseX, mouseY, delta) -> { + MatrixStack matrices = context.getMatrices(); + matrices.push(); + matrices.translate(((HandledScreenAccessor) genericContainerScreen).getX(), ((HandledScreenAccessor) genericContainerScreen).getY(), 300); + onDraw(context, genericContainerScreen.getScreenHandler().slots.subList(0, genericContainerScreen.getScreenHandler().getRows() * 9)); + matrices.pop(); + }); + ScreenEvents.remove(screen).register(screen1 -> clearScreen()); + onSetScreen(genericContainerScreen); + } else { + clearScreen(); + } + }); + } + + public void onSetScreen(@NotNull GenericContainerScreen screen) { + String screenName = screen.getTitle().getString(); + for (AbstractContainerSolver solver : solvers) { + if (solver.isEnabled()) { + if (solver instanceof ContainerSolver containerSolver && containerSolver.test(screenName)) { + ++screenId; + currentSolver = containerSolver; + currentSolver.start(screen); + markDirty(); + + return; + } else if (solver.test(screen)) { + ++screenId; + currentSolver = solver; + currentSolver.start(screen); + markDirty(); + + return; + } + } + } + clearScreen(); + } + + public void clearScreen() { + if (currentSolver != null) { + currentSolver.reset(); + currentSolver = null; + } + } + + public void markDirty() { + highlights = null; + } + + /** + * @return Whether the click should be disallowed. + */ + public boolean onSlotClick(int slot, ItemStack stack) { + if (currentSolver != null) { + return currentSolver.onClickSlot(slot, stack, screenId); + } + + return false; + } + + public void onDraw(DrawContext context, List slots) { + if (currentSolver == null) + return; + if (highlights == null) + highlights = currentSolver.getColors(slotMap(slots)); + RenderSystem.enableDepthTest(); + RenderSystem.colorMask(true, true, true, false); + for (ColorHighlight highlight : highlights) { + Slot slot = slots.get(highlight.slot()); + int color = highlight.color(); + context.fill(slot.x, slot.y, slot.x + 16, slot.y + 16, color); + } + RenderSystem.colorMask(true, true, true, true); + } + + private Int2ObjectMap slotMap(List slots) { + Int2ObjectMap slotMap = new Int2ObjectRBTreeMap<>(); + for (int i = 0; i < slots.size(); i++) { + slotMap.put(i, slots.get(i).getStack()); + } + return slotMap; + } +} diff --git a/src/main/java/de/hysky/skyblocker/utils/container/RegexContainerMatcher.java b/src/main/java/de/hysky/skyblocker/utils/container/RegexContainerMatcher.java new file mode 100644 index 00000000..a8a8e3c2 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/utils/container/RegexContainerMatcher.java @@ -0,0 +1,68 @@ +package de.hysky.skyblocker.utils.container; + +import de.hysky.skyblocker.skyblock.ChestValue; +import net.minecraft.client.gui.screen.ingame.HandledScreen; +import org.intellij.lang.annotations.Language; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * A regex implementation of {@link AbstractContainerMatcher} that matches the title of the screen. + */ +public abstract class RegexContainerMatcher implements AbstractContainerMatcher { + /** + * The title of the screen must match this pattern for this to be applied. Null means it will be applied to all screens. + * + * @implNote Don't end your regex with a {@code $} as {@link ChestValue} appends text to the end of the title, + * so the regex will stop matching if the player uses chest value. + */ + @Nullable + public final Pattern titlePattern; + + @Nullable + public String[] groups = null; + + @Override + public boolean test(@NotNull HandledScreen screen) { + return test(screen.getTitle().getString()); + } + + public boolean test(@NotNull String title) { + if (titlePattern == null) return true; + Matcher matcher = titlePattern.matcher(title); + if (matcher.matches()) { + int groupCount = matcher.groupCount(); + if (groupCount >= 1) { //No need to initialize the array if there are no groups + groups = new String[groupCount]; + for (int i = 0; i < groupCount; i++) { + groups[i] = matcher.group(i + 1); // +1 because first group is the whole match, which is useless + } + } + return true; + } + return false; + } + + protected RegexContainerMatcher() { + this((Pattern) null); + } + + protected RegexContainerMatcher(@NotNull @Language("RegExp") String titlePattern) { + this(Pattern.compile(titlePattern)); + } + + protected RegexContainerMatcher(@Nullable Pattern titlePattern) { + this.titlePattern = titlePattern; + } + + public @Nullable Pattern getTitlePattern() { + return titlePattern; + } + + public final @Nullable String[] getGroups() { + return groups; + } +} diff --git a/src/main/java/de/hysky/skyblocker/utils/render/gui/AbstractContainerMatcher.java b/src/main/java/de/hysky/skyblocker/utils/render/gui/AbstractContainerMatcher.java deleted file mode 100644 index bf255218..00000000 --- a/src/main/java/de/hysky/skyblocker/utils/render/gui/AbstractContainerMatcher.java +++ /dev/null @@ -1,29 +0,0 @@ -package de.hysky.skyblocker.utils.render.gui; - -import de.hysky.skyblocker.skyblock.ChestValue; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.regex.Pattern; - -public abstract class AbstractContainerMatcher { - /** - * The title of the screen must match this pattern for this to be applied. Null means it will be applied to all screens. - * @implNote Don't end your regex with a {@code $} as {@link ChestValue} appends text to the end of the title, - * so the regex will stop matching if the player uses chest value. - */ - @Nullable - public final Pattern titlePattern; - - protected AbstractContainerMatcher() { - this((Pattern) null); - } - - protected AbstractContainerMatcher(@NotNull String titlePattern) { - this(Pattern.compile(titlePattern)); - } - - protected AbstractContainerMatcher(@Nullable Pattern titlePattern) { - this.titlePattern = titlePattern; - } -} diff --git a/src/main/java/de/hysky/skyblocker/utils/render/gui/ContainerSolver.java b/src/main/java/de/hysky/skyblocker/utils/render/gui/ContainerSolver.java index 9a9d0907..e69de29b 100644 --- a/src/main/java/de/hysky/skyblocker/utils/render/gui/ContainerSolver.java +++ b/src/main/java/de/hysky/skyblocker/utils/render/gui/ContainerSolver.java @@ -1,52 +0,0 @@ -package de.hysky.skyblocker.utils.render.gui; - -import de.hysky.skyblocker.SkyblockerMod; -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import net.minecraft.client.gui.screen.ingame.GenericContainerScreen; -import net.minecraft.item.ItemStack; -import org.intellij.lang.annotations.Language; - -import java.util.List; -import java.util.regex.Pattern; - -/** - * Abstract class for gui solvers. Extend this class to add a new gui solver, like terminal solvers or experiment solvers. - */ -public abstract class ContainerSolver extends AbstractContainerMatcher { - protected ContainerSolver(@Language("RegExp") String titlePattern) { - super(titlePattern); - } - - protected abstract boolean isEnabled(); - - public final Pattern getName() { - return titlePattern; - } - - protected void start(GenericContainerScreen screen) { - } - - protected void reset() { - } - - protected void markHighlightsDirty() { - SkyblockerMod.getInstance().containerSolverManager.markDirty(); - } - - protected boolean onClickSlot(int slot, ItemStack stack, int screenId, String[] groups) { - return false; - } - - protected abstract List getColors(String[] groups, Int2ObjectMap slots); - - protected final void trimEdges(Int2ObjectMap slots, int rows) { - for (int i = 0; i < rows; i++) { - slots.remove(9 * i); - slots.remove(9 * i + 8); - } - for (int i = 1; i < 8; i++) { - slots.remove(i); - slots.remove((rows - 1) * 9 + i); - } - } -} 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 79cc78f5..e69de29b 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 @@ -1,157 +0,0 @@ -package de.hysky.skyblocker.utils.render.gui; - -import com.mojang.blaze3d.systems.RenderSystem; -import de.hysky.skyblocker.mixins.accessors.HandledScreenAccessor; -import de.hysky.skyblocker.skyblock.accessories.newyearcakes.NewYearCakeBagHelper; -import de.hysky.skyblocker.skyblock.accessories.newyearcakes.NewYearCakesHelper; -import de.hysky.skyblocker.skyblock.bazaar.ReorderHelper; -import de.hysky.skyblocker.skyblock.chocolatefactory.ChocolateFactorySolver; -import de.hysky.skyblocker.skyblock.dungeon.CroesusHelper; -import de.hysky.skyblocker.skyblock.dungeon.CroesusProfit; -import de.hysky.skyblocker.skyblock.dungeon.terminal.ColorTerminal; -import de.hysky.skyblocker.skyblock.dungeon.terminal.LightsOnTerminal; -import de.hysky.skyblocker.skyblock.dungeon.terminal.OrderTerminal; -import de.hysky.skyblocker.skyblock.dungeon.terminal.StartsWithTerminal; -import de.hysky.skyblocker.skyblock.dwarven.CommissionHighlight; -import de.hysky.skyblocker.skyblock.experiment.ChronomatronSolver; -import de.hysky.skyblocker.skyblock.experiment.SuperpairsSolver; -import de.hysky.skyblocker.skyblock.experiment.UltrasequencerSolver; -import de.hysky.skyblocker.utils.Utils; -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import it.unimi.dsi.fastutil.ints.Int2ObjectRBTreeMap; -import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.screen.ingame.GenericContainerScreen; -import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.item.ItemStack; -import net.minecraft.screen.slot.Slot; -import org.jetbrains.annotations.NotNull; - -import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -/** - * Manager class for {@link ContainerSolver}s like terminal solvers and experiment solvers. To add a new gui solver, extend {@link ContainerSolver} and register it in {@link #ContainerSolverManager()}. - */ -public class ContainerSolverManager { - private static final Pattern PLACEHOLDER_PATTERN = Pattern.compile(""); - private final ContainerSolver[] solvers; - private ContainerSolver currentSolver = null; - private String[] groups; - private List highlights; - /** - * Useful for keeping track of a solver's state in a Screen instance, such as if Hypixel closes & reopens a screen after every click (as they do with terminals). - */ - private int screenId = 0; - - public ContainerSolverManager() { - solvers = new ContainerSolver[]{ - new ColorTerminal(), - new OrderTerminal(), - new StartsWithTerminal(), - new LightsOnTerminal(), - new CroesusHelper(), - new CommissionHighlight(), - new CroesusProfit(), - new ChronomatronSolver(), - new SuperpairsSolver(), - UltrasequencerSolver.INSTANCE, - new NewYearCakeBagHelper(), - NewYearCakesHelper.INSTANCE, - new ChocolateFactorySolver(), - new ReorderHelper() - }; - } - - public ContainerSolver getCurrentSolver() { - return currentSolver; - } - - public void init() { - ScreenEvents.BEFORE_INIT.register((client, screen, scaledWidth, scaledHeight) -> { - if (Utils.isOnSkyblock() && screen instanceof GenericContainerScreen genericContainerScreen) { - ScreenEvents.afterRender(screen).register((screen1, context, mouseX, mouseY, delta) -> { - MatrixStack matrices = context.getMatrices(); - matrices.push(); - matrices.translate(((HandledScreenAccessor) genericContainerScreen).getX(), ((HandledScreenAccessor) genericContainerScreen).getY(), 300); - onDraw(context, genericContainerScreen.getScreenHandler().slots.subList(0, genericContainerScreen.getScreenHandler().getRows() * 9)); - matrices.pop(); - }); - ScreenEvents.remove(screen).register(screen1 -> clearScreen()); - onSetScreen(genericContainerScreen); - } else { - clearScreen(); - } - }); - } - - public void onSetScreen(@NotNull GenericContainerScreen screen) { - String screenName = screen.getTitle().getString(); - Matcher matcher = PLACEHOLDER_PATTERN.matcher(screenName); - for (ContainerSolver solver : solvers) { - if (solver.isEnabled()) { - matcher.usePattern(solver.getName()); - matcher.reset(); - if (matcher.matches()) { - ++screenId; - currentSolver = solver; - groups = new String[matcher.groupCount()]; - for (int i = 0; i < groups.length; i++) { - groups[i] = matcher.group(i + 1); - } - currentSolver.start(screen); - markDirty(); - - return; - } - } - } - clearScreen(); - } - - public void clearScreen() { - if (currentSolver != null) { - currentSolver.reset(); - currentSolver = null; - } - } - - public void markDirty() { - highlights = null; - } - - /** - * @return Whether the click should be disallowed. - */ - public boolean onSlotClick(int slot, ItemStack stack) { - if (currentSolver != null) { - return currentSolver.onClickSlot(slot, stack, screenId, groups); - } - - return false; - } - - public void onDraw(DrawContext context, List slots) { - if (currentSolver == null) - return; - if (highlights == null) - highlights = currentSolver.getColors(groups, slotMap(slots)); - RenderSystem.enableDepthTest(); - RenderSystem.colorMask(true, true, true, false); - for (ColorHighlight highlight : highlights) { - Slot slot = slots.get(highlight.slot()); - int color = highlight.color(); - context.fill(slot.x, slot.y, slot.x + 16, slot.y + 16, color); - } - RenderSystem.colorMask(true, true, true, true); - } - - private Int2ObjectMap slotMap(List slots) { - Int2ObjectMap slotMap = new Int2ObjectRBTreeMap<>(); - for (int i = 0; i < slots.size(); i++) { - slotMap.put(i, slots.get(i).getStack()); - } - return slotMap; - } -} -- cgit From 8f540ffc0f2e6dc90f8c9a1ac249ff9185243d3c Mon Sep 17 00:00:00 2001 From: Rime <81419447+Emirlol@users.noreply.github.com> Date: Fri, 21 Jun 2024 07:38:03 +0300 Subject: A lot of stuff. - Refactored SlotTextAdders to take in ItemStack and int slotId rather than Slot - Refactored the renderSlotText method from HandledScreenMixin into SlotTextManager and added an overloading function that takes in the itemstack, slot id, x and y and the previous function with the Slot parameter just delegates to it with the relevant fields from that Slot object - As a result of the above 2 changes the logic in CommunityShopAdder had to be changed too, now it figures out the screen from the method calls to `getText` rather than the Slot's inventory. - Fixed slot text not being rendered in backpack preview - Added private constructor for BackpackPreview (because it's all static methods anyway) --- .../skyblocker/mixins/HandledScreenMixin.java | 29 ++-------------- .../skyblock/item/slottext/SlotTextManager.java | 40 ++++++++++++++++++++-- .../item/slottext/adders/AttributeShardAdder.java | 5 +-- .../item/slottext/adders/CatacombsLevelAdder.java | 19 +++++----- .../item/slottext/adders/CollectionAdder.java | 4 +-- .../item/slottext/adders/CommunityShopAdder.java | 31 ++++++++--------- .../slottext/adders/EnchantmentLevelAdder.java | 5 +-- .../item/slottext/adders/EssenceShopAdder.java | 5 +-- .../item/slottext/adders/MinionLevelAdder.java | 5 +-- .../item/slottext/adders/PetLevelAdder.java | 4 +-- .../item/slottext/adders/PotionLevelAdder.java | 6 ++-- .../slottext/adders/PowerStonesGuideAdder.java | 14 +++----- .../item/slottext/adders/PrehistoricEggAdder.java | 15 ++++---- .../slottext/adders/RancherBootsSpeedAdder.java | 7 ++-- .../item/slottext/adders/SkillLevelAdder.java | 8 ++--- .../item/slottext/adders/SkyblockLevelAdder.java | 8 ++--- .../item/slottext/adders/StatsTuningAdder.java | 5 +-- .../item/slottext/adders/YourEssenceAdder.java | 4 +-- .../skyblock/item/tooltip/BackpackPreview.java | 7 ++-- .../utils/container/AbstractContainerSolver.java | 1 - .../utils/container/AbstractSlotTextAdder.java | 6 ++-- 21 files changed, 101 insertions(+), 127 deletions(-) (limited to 'src/main/java/de/hysky/skyblocker') diff --git a/src/main/java/de/hysky/skyblocker/mixins/HandledScreenMixin.java b/src/main/java/de/hysky/skyblocker/mixins/HandledScreenMixin.java index ca1cddf8..b8e15eb5 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/HandledScreenMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/HandledScreenMixin.java @@ -14,7 +14,6 @@ import de.hysky.skyblocker.skyblock.item.ItemProtection; import de.hysky.skyblocker.skyblock.item.ItemRarityBackgrounds; import de.hysky.skyblocker.skyblock.item.MuseumItemCache; import de.hysky.skyblocker.skyblock.item.WikiLookup; -import de.hysky.skyblocker.skyblock.item.slottext.SlotText; import de.hysky.skyblocker.skyblock.item.slottext.SlotTextManager; import de.hysky.skyblocker.skyblock.item.tooltip.BackpackPreview; import de.hysky.skyblocker.skyblock.item.tooltip.CompactorDeletorPreview; @@ -26,7 +25,6 @@ import de.hysky.skyblocker.utils.container.AbstractContainerSolver; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.ingame.HandledScreen; -import net.minecraft.client.util.math.MatrixStack; import net.minecraft.inventory.SimpleInventory; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -335,31 +333,8 @@ public abstract class HandledScreenMixin extends Screen @Inject(method = "drawSlot", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/DrawContext;drawItemInSlot(Lnet/minecraft/client/font/TextRenderer;Lnet/minecraft/item/ItemStack;IILjava/lang/String;)V")) private void skyblocker$drawSlotText(DrawContext context, Slot slot, CallbackInfo ci) { - List textList = SlotTextManager.getText(slot); - if (textList.isEmpty()) return; - MatrixStack matrices = context.getMatrices(); - - for (SlotText slotText : textList) { - matrices.push(); - matrices.translate(0.0f, 0.0f, 200.0f); - int length = textRenderer.getWidth(slotText.text()); - if (length > 16) { - matrices.scale(16.0f / length, 16.0f / length, 1.0f); //Make them fit in the slot. FYI, a slot is sized 16×16. - final float x = (slot.x * length / 16.0f) - slot.x; //Save in a variable to not recalculate - switch (slotText.position()) { - case TOP_LEFT, TOP_RIGHT -> matrices.translate(x, (slot.y * length / 16.0f) - slot.y, 0.0f); - case BOTTOM_LEFT, BOTTOM_RIGHT -> matrices.translate(x, ((slot.y + 16f - textRenderer.fontHeight + 2f + 0.7f) * length / 16.0f) - slot.y, 0.0f); - } - } else { - switch (slotText.position()) { - case TOP_LEFT -> { /*Do Nothing*/ } - case TOP_RIGHT -> matrices.translate(16f - length, 0.0f, 0.0f); - case BOTTOM_LEFT -> matrices.translate(0.0f, 16f - textRenderer.fontHeight + 2f, 0.0f); - case BOTTOM_RIGHT -> matrices.translate(16f - length, 16f - textRenderer.fontHeight + 2f, 0.0f); - } - } - context.drawText(textRenderer, slotText.text(), slot.x, slot.y, 0xFFFFFF, true); - matrices.pop(); + if (Utils.isOnSkyblock()) { + SlotTextManager.renderSlotText(context, textRenderer, slot); } } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextManager.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextManager.java index fe38e340..a13bc28a 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextManager.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextManager.java @@ -5,7 +5,11 @@ import de.hysky.skyblocker.skyblock.item.slottext.adders.*; import de.hysky.skyblocker.utils.Utils; import de.hysky.skyblocker.utils.container.AbstractSlotTextAdder; import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents; +import net.minecraft.client.font.TextRenderer; +import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.ingame.HandledScreen; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.item.ItemStack; import net.minecraft.screen.slot.Slot; import org.jetbrains.annotations.NotNull; @@ -65,12 +69,44 @@ public class SlotTextManager { * The order of the adders remains the same as they were added to the {@link SlotTextManager#adders} array. */ @NotNull - public static List getText(Slot slot) { + public static List getText(@NotNull ItemStack itemStack, int slotId) { if (currentScreenAdders.isEmpty()) return List.of(); for (AbstractSlotTextAdder adder : currentScreenAdders) { - List text = adder.getText(slot); + List text = adder.getText(itemStack, slotId); if (!text.isEmpty()) return text; } return List.of(); } + + public static void renderSlotText(DrawContext context, TextRenderer textRenderer, Slot slot) { + renderSlotText(context, textRenderer, slot.getStack(), slot.id, slot.x, slot.y); + } + + public static void renderSlotText(DrawContext context, TextRenderer textRenderer, ItemStack itemStack, int slotId, int x, int y) { + List textList = SlotTextManager.getText(itemStack, slotId); + if (textList.isEmpty()) return; + MatrixStack matrices = context.getMatrices(); + + for (SlotText slotText : textList) { + matrices.push(); + matrices.translate(0.0f, 0.0f, 200.0f); + int length = textRenderer.getWidth(slotText.text()); + if (length > 16) { + matrices.scale(16f / length, 16f / length, 1.0f); + switch (slotText.position()) { + case TOP_LEFT, TOP_RIGHT -> matrices.translate(x * length / 16f - x, (y * length / 16.0f) - y, 0.0f); + case BOTTOM_LEFT, BOTTOM_RIGHT -> matrices.translate(x * length / 16f - x, ((y + 16f - textRenderer.fontHeight + 2f + 0.7f) * length / 16.0f) - y, 0.0f); + } + } else { + switch (slotText.position()) { + case TOP_LEFT -> { /*Do Nothing*/ } + case TOP_RIGHT -> matrices.translate(16f - length, 0.0f, 0.0f); + case BOTTOM_LEFT -> matrices.translate(0.0f, 16f - textRenderer.fontHeight + 2f, 0.0f); + case BOTTOM_RIGHT -> matrices.translate(16f - length, 16f - textRenderer.fontHeight + 2f, 0.0f); + } + } + context.drawText(textRenderer, slotText.text(), x, y, 0xFFFFFF, true); + matrices.pop(); + } + } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/AttributeShardAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/AttributeShardAdder.java index eac0a7f0..33259172 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/AttributeShardAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/AttributeShardAdder.java @@ -8,9 +8,7 @@ import it.unimi.dsi.fastutil.objects.Object2ObjectMap; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NbtCompound; -import net.minecraft.screen.slot.Slot; import net.minecraft.text.Text; -import net.minecraft.util.Formatting; import org.jetbrains.annotations.NotNull; import java.util.List; @@ -70,8 +68,7 @@ public class AttributeShardAdder extends SlotTextAdder { } @Override - public @NotNull List getText(Slot slot) { - final ItemStack stack = slot.getStack(); + public @NotNull List getText(@NotNull ItemStack stack, int slotId) { NbtCompound customData = ItemUtils.getCustomData(stack); if (!ItemUtils.getItemId(stack).equals("ATTRIBUTE_SHARD")) return List.of(); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CatacombsLevelAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CatacombsLevelAdder.java index 6c99ebf9..f4066313 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CatacombsLevelAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CatacombsLevelAdder.java @@ -4,7 +4,6 @@ import de.hysky.skyblocker.skyblock.item.slottext.SlotText; import de.hysky.skyblocker.skyblock.item.slottext.SlotTextAdder; import de.hysky.skyblocker.utils.RomanNumerals; import net.minecraft.item.ItemStack; -import net.minecraft.screen.slot.Slot; import net.minecraft.text.Text; import net.minecraft.util.Formatting; import org.apache.commons.lang3.math.NumberUtils; @@ -27,10 +26,10 @@ public class CatacombsLevelAdder { } @Override - public @NotNull List getText(Slot slot) { - switch (slot.id) { + public @NotNull List getText(@NotNull ItemStack itemStack, int slotId) { + switch (slotId) { case 12, 29, 30, 31, 32, 33 -> { - Matcher matcher = LEVEL_PATTERN.matcher(slot.getStack().getName().getString()); + Matcher matcher = LEVEL_PATTERN.matcher(itemStack.getName().getString()); if (!matcher.matches()) return List.of(); String arabic = matcher.group("arabic"); String roman = matcher.group("roman"); @@ -60,10 +59,10 @@ public class CatacombsLevelAdder { } @Override - public @NotNull List getText(Slot slot) { - switch (slot.id) { + public @NotNull List getText(@NotNull ItemStack itemStack, int slotId) { + switch (slotId) { case 11, 12, 13, 14, 15 -> { - String level = getBracketedLevelFromName(slot.getStack()); + String level = getBracketedLevelFromName(itemStack); if (!NumberUtils.isDigits(level)) return List.of(); return List.of(SlotText.bottomLeft(Text.literal(level).withColor(0xFFDDC1))); } @@ -81,10 +80,10 @@ public class CatacombsLevelAdder { } @Override - public @NotNull List getText(Slot slot) { - switch (slot.id) { + public @NotNull List getText(@NotNull ItemStack itemStack, int slotId) { + switch (slotId) { case 29, 30, 31, 32, 33 -> { - String level = getBracketedLevelFromName(slot.getStack()); + String level = getBracketedLevelFromName(itemStack); if (!NumberUtils.isDigits(level)) return List.of(); return List.of(SlotText.bottomLeft(Text.literal(level).withColor(0xFFDDC1))); } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CollectionAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CollectionAdder.java index d6ced22a..016f20b4 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CollectionAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CollectionAdder.java @@ -5,7 +5,6 @@ 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.screen.slot.Slot; import net.minecraft.text.Text; import org.jetbrains.annotations.NotNull; @@ -21,8 +20,7 @@ public class CollectionAdder extends SlotTextAdder { } @Override - public @NotNull List getText(Slot slot) { - final ItemStack stack = slot.getStack(); + public @NotNull List getText(@NotNull ItemStack stack, int slotId) { Matcher matcher = COLLECTION.matcher(stack.getName().getString()); if (matcher.matches()) { int level = RomanNumerals.romanToDecimal(matcher.group("level")); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CommunityShopAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CommunityShopAdder.java index d94d6405..924900e8 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CommunityShopAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CommunityShopAdder.java @@ -6,7 +6,6 @@ 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; import net.minecraft.text.Text; import net.minecraft.util.Formatting; import org.jetbrains.annotations.NotNull; @@ -16,28 +15,27 @@ import java.util.List; public class CommunityShopAdder extends SlotTextAdder { private static final byte CATEGORIES_START = 10; private static final byte CATEGORIES_END = 14; //Inclusive + private static byte currentScreen = -1; // 0 = city projects, 1 = upgrades, 2 = booster cookie, 3 = bits shop, 4 = fire sales, any other number = invalid public CommunityShopAdder() { super("^Community Shop"); } @Override - public @NotNull List getText(Slot slot) { - for (byte i = CATEGORIES_START; i <= CATEGORIES_END; i++) { - if (slot.inventory.getStack(i).isOf(Items.LIME_STAINED_GLASS_PANE)) { //Only the selected category has a lime stained glass pane, the others have a gray one. - return switch (i) { //This is a switch to allow adding more categories easily in the future, if we ever add more. - case 11 -> getTextForUpgradesScreen(slot); - default -> List.of(); - }; - } + public @NotNull List getText(@NotNull ItemStack itemStack, int slotId) { + if (slotId >= CATEGORIES_START && slotId <= CATEGORIES_END && itemStack.isOf(Items.LIME_STAINED_GLASS_PANE)) { //Only the selected category has a lime stained glass pane, the others have a gray one. + currentScreen = (byte) (slotId - CATEGORIES_START); + return List.of(); } - return List.of(); + return switch (currentScreen) { //This is a switch statement to allow easily adding other categories in the future. + case 1 -> getTextForUpgradesScreen(itemStack, slotId); + default -> List.of(); + }; } - private static List getTextForUpgradesScreen(Slot slot) { - final ItemStack stack = slot.getStack(); - switch (slot.id) { - case 30, 31, 32, 33, 34, 38, 39, 40, 41, 42, 43, 44 -> { + private static List getTextForUpgradesScreen(ItemStack stack, int slotId) { + switch (slotId) { + case 30, 31, 32, 33, 34, 38, 39, 40, 41, 42, 43, 44 -> { String name = stack.getName().getString(); int lastIndex = name.lastIndexOf(' '); String roman = name.substring(lastIndex + 1); // + 1 as we don't want the space @@ -52,9 +50,10 @@ public class CommunityShopAdder extends SlotTextAdder { case "Click to claim!" -> Text.literal("✅").withColor(0xa6e3a1).formatted(Formatting.BOLD); default -> Text.literal(String.valueOf(RomanNumerals.romanToDecimal(roman))).withColor(0xcba6f7); })); - + } + default -> { + return List.of(); } } - return List.of(); } } 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 5530035d..2c6fe4e4 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 @@ -8,9 +8,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.nbt.NbtCompound; import net.minecraft.nbt.NbtElement; -import net.minecraft.screen.slot.Slot; import net.minecraft.text.Text; -import net.minecraft.util.Formatting; import org.jetbrains.annotations.NotNull; import java.util.List; @@ -21,8 +19,7 @@ public class EnchantmentLevelAdder extends SlotTextAdder { } @Override - public @NotNull List getText(Slot slot) { - final ItemStack itemStack = slot.getStack(); + public @NotNull List getText(@NotNull ItemStack itemStack, int slotId) { if (!itemStack.isOf(Items.ENCHANTED_BOOK)) return List.of(); String name = itemStack.getName().getString(); if (name.equals("Enchanted Book")) { diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/EssenceShopAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/EssenceShopAdder.java index 65574a5a..1a3e889e 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/EssenceShopAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/EssenceShopAdder.java @@ -5,7 +5,6 @@ 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.screen.slot.Slot; import net.minecraft.text.Text; import org.jetbrains.annotations.NotNull; @@ -25,9 +24,7 @@ public class EssenceShopAdder extends SlotTextAdder { } @Override - public @NotNull List getText(Slot slot) { - final ItemStack stack = slot.getStack(); - + public @NotNull List getText(@NotNull ItemStack stack, int slotId) { Matcher essenceLevelMatcher = ESSENCELEVEL.matcher(stack.getName().getString()); Matcher essenceAmountMatcher = ItemUtils.getLoreLineIfMatch(stack, ESSENCE); 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 fc46f153..ee4bd356 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 @@ -5,9 +5,7 @@ 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; import net.minecraft.text.Text; -import net.minecraft.util.Formatting; import org.jetbrains.annotations.NotNull; import java.util.List; @@ -21,8 +19,7 @@ public class MinionLevelAdder extends SlotTextAdder { } @Override - public @NotNull List getText(Slot slot) { - ItemStack itemStack = slot.getStack(); + public @NotNull List getText(@NotNull ItemStack itemStack, int slotId) { if (!itemStack.isOf(Items.PLAYER_HEAD)) return List.of(); Matcher matcher = MINION_PATTERN.matcher(itemStack.getName().getString()); if (!matcher.matches()) return List.of(); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PetLevelAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PetLevelAdder.java index 3049cd3f..27ed7aa0 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PetLevelAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PetLevelAdder.java @@ -5,7 +5,6 @@ import de.hysky.skyblocker.skyblock.item.slottext.SlotTextAdder; import de.hysky.skyblocker.utils.ItemUtils; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; -import net.minecraft.screen.slot.Slot; import net.minecraft.text.Text; import org.apache.commons.lang3.math.NumberUtils; import org.jetbrains.annotations.NotNull; @@ -18,8 +17,7 @@ public class PetLevelAdder extends SlotTextAdder { } @Override - public @NotNull List getText(Slot slot) { - ItemStack itemStack = slot.getStack(); + public @NotNull List getText(@NotNull ItemStack itemStack, int slotId) { if (!itemStack.isOf(Items.PLAYER_HEAD)) return List.of(); String level = CatacombsLevelAdder.getBracketedLevelFromName(itemStack); if (!NumberUtils.isDigits(level) || "100".equals(level) || "200".equals(level)) return List.of(); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PotionLevelAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PotionLevelAdder.java index 1c3ef4bc..94d1b8c0 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PotionLevelAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PotionLevelAdder.java @@ -6,7 +6,6 @@ import de.hysky.skyblocker.utils.ItemUtils; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NbtCompound; import net.minecraft.nbt.NbtElement; -import net.minecraft.screen.slot.Slot; import net.minecraft.text.Text; import org.jetbrains.annotations.NotNull; @@ -14,13 +13,12 @@ import java.util.List; public class PotionLevelAdder extends SlotTextAdder { @Override - public @NotNull List getText(Slot slot) { - final ItemStack stack = slot.getStack(); + public @NotNull List getText(@NotNull ItemStack stack, int slotId) { NbtCompound customData = ItemUtils.getCustomData(stack); String title = stack.getName().getString(); if (customData.contains("potion_level", NbtElement.INT_TYPE) && !title.contains("Healer Class") && !title.contains("Class Passives")) { if (title.contains("Healer Level ")){ - String level = title.replaceAll("[^0-9]", ""); + String level = title.replaceAll("\\D", ""); return List.of(SlotText.bottomRight(Text.literal(level).withColor(0xFFFFFF))); } else { int level = customData.getInt("potion_level"); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PowerStonesGuideAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PowerStonesGuideAdder.java index 0bb37165..0f3d6b24 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PowerStonesGuideAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PowerStonesGuideAdder.java @@ -4,7 +4,6 @@ import de.hysky.skyblocker.skyblock.item.slottext.SlotText; import de.hysky.skyblocker.skyblock.item.slottext.SlotTextAdder; import de.hysky.skyblocker.utils.ItemUtils; import net.minecraft.item.ItemStack; -import net.minecraft.screen.slot.Slot; import net.minecraft.text.Text; import org.jetbrains.annotations.NotNull; @@ -20,18 +19,13 @@ public class PowerStonesGuideAdder extends SlotTextAdder { } @Override - public @NotNull List getText(Slot slot) { - final ItemStack stack = slot.getStack(); - + public @NotNull List getText(@NotNull ItemStack stack, int slotId) { Matcher match = ItemUtils.getLoreLineIfMatch(stack, LEARNED); if (match == null) return List.of(); String symbol = match.group("symbol"); - Text text; - if (symbol.equals("✖")) { - text = Text.literal("✖").withColor(0xFF7276); - } else { - text = Text.literal("✔").withColor(0x90ee90); - } + Text text = symbol.equals("✖") + ? Text.literal("✖").withColor(0xFF7276) + : Text.literal("✔").withColor(0x90ee90); return List.of(SlotText.bottomRight(text)); } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PrehistoricEggAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PrehistoricEggAdder.java index ce29297e..63cb4bd8 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PrehistoricEggAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PrehistoricEggAdder.java @@ -7,9 +7,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.nbt.NbtCompound; import net.minecraft.nbt.NbtElement; -import net.minecraft.screen.slot.Slot; import net.minecraft.text.Text; -import net.minecraft.util.Formatting; import org.apache.commons.lang3.StringUtils; import org.jetbrains.annotations.NotNull; @@ -17,18 +15,17 @@ import java.util.List; public class PrehistoricEggAdder extends SlotTextAdder { @Override - public @NotNull List getText(Slot slot) { - final ItemStack stack = slot.getStack(); + public @NotNull List getText(@NotNull ItemStack stack, int slotId) { if (!stack.isOf(Items.PLAYER_HEAD) || !StringUtils.equals(stack.getSkyblockId(), "PREHISTORIC_EGG")) return List.of(); NbtCompound nbt = ItemUtils.getCustomData(stack); if (!nbt.contains("blocks_walked", NbtElement.INT_TYPE)) return List.of(); int walked = nbt.getInt("blocks_walked"); - String walkedstr; - if (walked < 1000) walkedstr = String.valueOf(walked); - else if (walked < 10000) walkedstr = String.format("%.1fk", walked/1000.0f); - else walkedstr = walked / 1000 + "k"; + String walkedStr; + if (walked < 1000) walkedStr = String.valueOf(walked); + else if (walked < 10000) walkedStr = String.format("%.1fk", walked/1000.0f); + else walkedStr = walked / 1000 + "k"; - return List.of(SlotText.bottomLeft(Text.literal(walkedstr).withColor(0xFFDDC1))); + return List.of(SlotText.bottomLeft(Text.literal(walkedStr).withColor(0xFFDDC1))); } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/RancherBootsSpeedAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/RancherBootsSpeedAdder.java index 7de5a5be..4762c0fd 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/RancherBootsSpeedAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/RancherBootsSpeedAdder.java @@ -5,9 +5,7 @@ import de.hysky.skyblocker.skyblock.item.slottext.SlotTextAdder; import de.hysky.skyblocker.utils.ItemUtils; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; -import net.minecraft.screen.slot.Slot; import net.minecraft.text.Text; -import net.minecraft.util.Formatting; import org.apache.commons.lang3.StringUtils; import org.jetbrains.annotations.NotNull; @@ -23,11 +21,10 @@ public class RancherBootsSpeedAdder extends SlotTextAdder { } @Override - public @NotNull List getText(Slot slot) { - final ItemStack itemStack = slot.getStack(); + public @NotNull List getText(@NotNull ItemStack itemStack, int slotId) { // V null-safe equals. if (!itemStack.isOf(Items.LEATHER_BOOTS) && !StringUtils.equals(itemStack.getSkyblockId(), "RANCHERS_BOOTS")) return List.of(); - Matcher matcher = ItemUtils.getLoreLineIfMatch(slot.getStack(), SPEED_PATTERN); + Matcher matcher = ItemUtils.getLoreLineIfMatch(itemStack, SPEED_PATTERN); if (matcher == null) return List.of(); String speed = matcher.group(2); if (speed == null) speed = matcher.group(1); //2nd group only matches when the speed cap is set to a number beyond the player's actual speed cap. diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/SkillLevelAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/SkillLevelAdder.java index 18dbd2f7..541e2058 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/SkillLevelAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/SkillLevelAdder.java @@ -5,7 +5,6 @@ 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.screen.slot.Slot; import net.minecraft.text.Text; import net.minecraft.util.Formatting; import org.jetbrains.annotations.NotNull; @@ -18,11 +17,10 @@ public class SkillLevelAdder extends SlotTextAdder { } @Override - public @NotNull List getText(Slot slot) { - switch (slot.id) { + public @NotNull List getText(@NotNull ItemStack stack, int slotId) { + switch (slotId) { case 19, 20, 21, 22, 23, 24, 25, 29, 30, 31, 32 -> { //These are the slots that contain the skill items. Note that they aren't continuous, as there are 2 rows. - String name = slot.getStack().getName().getString(); - final ItemStack stack = slot.getStack(); + String name = stack.getName().getString(); int lastIndex = name.lastIndexOf(' '); if (lastIndex == -1) return List.of(SlotText.bottomLeft(Text.literal("0").formatted(Formatting.LIGHT_PURPLE))); //Skills without any levels don't display any roman numerals. Probably because 0 doesn't exist. String romanNumeral = name.substring(lastIndex + 1); //+1 because we don't need the space itself diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/SkyblockLevelAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/SkyblockLevelAdder.java index 0fc07922..e64dce1f 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/SkyblockLevelAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/SkyblockLevelAdder.java @@ -3,7 +3,7 @@ package de.hysky.skyblocker.skyblock.item.slottext.adders; import de.hysky.skyblocker.skyblock.item.slottext.SlotText; import de.hysky.skyblocker.skyblock.item.slottext.SlotTextAdder; import de.hysky.skyblocker.utils.ItemUtils; -import net.minecraft.screen.slot.Slot; +import net.minecraft.item.ItemStack; import net.minecraft.text.Text; import org.apache.commons.lang3.math.NumberUtils; import org.jetbrains.annotations.NotNull; @@ -16,9 +16,9 @@ public class SkyblockLevelAdder extends SlotTextAdder { } @Override - public @NotNull List getText(Slot slot) { - if (slot.getIndex() != 22) return List.of(); - List lore = ItemUtils.getLore(slot.getStack()); + public @NotNull List getText(@NotNull ItemStack itemStack, int slotId) { + if (slotId != 22) return List.of(); + List lore = ItemUtils.getLore(itemStack); if (lore.isEmpty()) return List.of(); List siblings = lore.getFirst().getSiblings(); if (siblings.size() < 3) return List.of(); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/StatsTuningAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/StatsTuningAdder.java index 3079d8f2..45c53fd0 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/StatsTuningAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/StatsTuningAdder.java @@ -4,7 +4,6 @@ import de.hysky.skyblocker.skyblock.item.slottext.SlotText; import de.hysky.skyblocker.skyblock.item.slottext.SlotTextAdder; import de.hysky.skyblocker.utils.ItemUtils; import net.minecraft.item.ItemStack; -import net.minecraft.screen.slot.Slot; import net.minecraft.text.Text; import org.jetbrains.annotations.NotNull; @@ -21,9 +20,7 @@ public class StatsTuningAdder extends SlotTextAdder { } @Override - public @NotNull List getText(Slot slot) { - final ItemStack stack = slot.getStack(); - + public @NotNull List getText(@NotNull ItemStack stack, int slotId) { Matcher statMatcher = ItemUtils.getLoreLineIfMatch(stack, STATHAS); Matcher unassignedMatcher = ItemUtils.getLoreLineIfMatch(stack, UNASSIGNEDPOINTS); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/YourEssenceAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/YourEssenceAdder.java index ec1bd561..f68b36a8 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/YourEssenceAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/YourEssenceAdder.java @@ -4,7 +4,6 @@ import de.hysky.skyblocker.skyblock.item.slottext.SlotText; import de.hysky.skyblocker.skyblock.item.slottext.SlotTextAdder; import de.hysky.skyblocker.utils.ItemUtils; import net.minecraft.item.ItemStack; -import net.minecraft.screen.slot.Slot; import net.minecraft.text.Text; import org.jetbrains.annotations.NotNull; @@ -22,8 +21,7 @@ public class YourEssenceAdder extends SlotTextAdder { } @Override - public @NotNull List getText(Slot slot) { - final ItemStack stack = slot.getStack(); + public @NotNull List getText(@NotNull ItemStack stack, int slotId) { String name = stack.getName().getString(); if (name.contains("Essence")) { List lore = ItemUtils.getLore(stack); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/BackpackPreview.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/BackpackPreview.java index cad1eaab..b3017baf 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/BackpackPreview.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/BackpackPreview.java @@ -7,6 +7,7 @@ import de.hysky.skyblocker.SkyblockerMod; import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.skyblock.item.ItemProtection; import de.hysky.skyblocker.skyblock.item.ItemRarityBackgrounds; +import de.hysky.skyblocker.skyblock.item.slottext.SlotTextManager; import de.hysky.skyblocker.utils.ItemUtils; import de.hysky.skyblocker.utils.Utils; import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents; @@ -15,7 +16,6 @@ import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.ingame.HandledScreen; -import net.minecraft.client.network.ClientPlayNetworkHandler; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.inventory.Inventory; import net.minecraft.inventory.SimpleInventory; @@ -50,6 +50,8 @@ public class BackpackPreview { private static final Storage[] storages = new Storage[STORAGE_SIZE]; + private BackpackPreview() {} + /** * The profile id of the currently loaded backpack preview. */ @@ -119,7 +121,7 @@ public class BackpackPreview { writer.write(new StringNbtWriter().apply(Storage.CODEC.encodeStart(getOps(), storages[index]).getOrThrow())); storages[index].markClean(); } catch (Exception e) { - LOGGER.error("Failed to save backpack preview file: {}", storageFile.getFileName().toString(), e); + LOGGER.error("Failed to save backpack preview file: {}", storageFile.getFileName(), e); } } @@ -171,6 +173,7 @@ public class BackpackPreview { context.drawItem(currentStack, itemX, itemY); context.drawItemInSlot(textRenderer, currentStack, itemX, itemY); + SlotTextManager.renderSlotText(context, textRenderer, currentStack, i, itemX, itemY); } matrices.pop(); diff --git a/src/main/java/de/hysky/skyblocker/utils/container/AbstractContainerSolver.java b/src/main/java/de/hysky/skyblocker/utils/container/AbstractContainerSolver.java index 38bc32dd..d4c52212 100644 --- a/src/main/java/de/hysky/skyblocker/utils/container/AbstractContainerSolver.java +++ b/src/main/java/de/hysky/skyblocker/utils/container/AbstractContainerSolver.java @@ -9,7 +9,6 @@ import net.minecraft.item.ItemStack; import java.util.List; public interface AbstractContainerSolver extends AbstractContainerMatcher { - List getColors(Int2ObjectMap slots); default void start(GenericContainerScreen screen) {} diff --git a/src/main/java/de/hysky/skyblocker/utils/container/AbstractSlotTextAdder.java b/src/main/java/de/hysky/skyblocker/utils/container/AbstractSlotTextAdder.java index 4034e88d..fce3fcf5 100644 --- a/src/main/java/de/hysky/skyblocker/utils/container/AbstractSlotTextAdder.java +++ b/src/main/java/de/hysky/skyblocker/utils/container/AbstractSlotTextAdder.java @@ -1,7 +1,7 @@ package de.hysky.skyblocker.utils.container; import de.hysky.skyblocker.skyblock.item.slottext.SlotText; -import net.minecraft.screen.slot.Slot; +import net.minecraft.item.ItemStack; import org.jetbrains.annotations.NotNull; import java.util.List; @@ -9,7 +9,7 @@ import java.util.List; public interface AbstractSlotTextAdder extends AbstractContainerMatcher { /** - * This method will be called for each rendered slot. Consider using a switch statement on {@link Slot#id} if you wish to add different text to different slots. + * This method will be called for each rendered slot. Consider using a switch statement on {@code slotId} if you wish to limit the text to specific slots. * * @return A list of positioned text to be rendered. Return {@link List#of()} if no text should be rendered. * @implNote By minecraft's design, scaled text inexplicably moves around. @@ -17,5 +17,5 @@ public interface AbstractSlotTextAdder extends AbstractContainerMatcher { * So, limit your text to 3 characters (or roughly less than 20 width) if you want it to not look horrible. */ @NotNull - List getText(Slot slot); + List getText(@NotNull ItemStack itemStack, int slotId); } -- cgit From 99dd2eb4e024c6b5d6355eef342af63649d9fb08 Mon Sep 17 00:00:00 2001 From: Rime <81419447+Emirlol@users.noreply.github.com> Date: Fri, 21 Jun 2024 07:43:33 +0300 Subject: Rename AbstractContainerMatcher and its extending interfaces to remove the `Abstract` prefix and rename simple implementations with a `Simple` prefix --- .../skyblocker/mixins/HandledScreenMixin.java | 6 +- .../newyearcakes/NewYearCakeBagHelper.java | 4 +- .../newyearcakes/NewYearCakesHelper.java | 4 +- .../chocolatefactory/ChocolateFactorySolver.java | 8 +-- .../skyblocker/skyblock/dungeon/CroesusHelper.java | 4 +- .../skyblocker/skyblock/dungeon/CroesusProfit.java | 4 +- .../skyblock/dungeon/terminal/ColorTerminal.java | 8 +-- .../dungeon/terminal/LightsOnTerminal.java | 4 +- .../skyblock/dungeon/terminal/OrderTerminal.java | 8 +-- .../dungeon/terminal/StartsWithTerminal.java | 8 +-- .../skyblock/experiment/ExperimentSolver.java | 4 +- .../skyblock/experiment/UltrasequencerSolver.java | 4 +- .../item/slottext/SimpleSlotTextAdder.java | 45 ++++++++++++++ .../skyblock/item/slottext/SlotTextAdder.java | 45 -------------- .../item/slottext/adders/AttributeShardAdder.java | 4 +- .../item/slottext/adders/CatacombsLevelAdder.java | 8 +-- .../item/slottext/adders/CollectionAdder.java | 4 +- .../item/slottext/adders/CommunityShopAdder.java | 4 +- .../slottext/adders/EnchantmentLevelAdder.java | 4 +- .../item/slottext/adders/EssenceShopAdder.java | 4 +- .../item/slottext/adders/MinionLevelAdder.java | 4 +- .../item/slottext/adders/PetLevelAdder.java | 4 +- .../item/slottext/adders/PotionLevelAdder.java | 4 +- .../slottext/adders/PowerStonesGuideAdder.java | 4 +- .../item/slottext/adders/PrehistoricEggAdder.java | 4 +- .../slottext/adders/RancherBootsSpeedAdder.java | 4 +- .../item/slottext/adders/SkillLevelAdder.java | 4 +- .../item/slottext/adders/SkyblockLevelAdder.java | 4 +- .../item/slottext/adders/StatsTuningAdder.java | 4 +- .../item/slottext/adders/YourEssenceAdder.java | 4 +- .../skyblock/item/tooltip/SimpleTooltipAdder.java | 57 ++++++++++++++++++ .../skyblock/item/tooltip/TooltipAdder.java | 57 ------------------ .../item/tooltip/adders/AccessoryTooltip.java | 4 +- .../item/tooltip/adders/AvgBinTooltip.java | 4 +- .../item/tooltip/adders/BazaarPriceTooltip.java | 4 +- .../skyblock/item/tooltip/adders/ColorTooltip.java | 4 +- .../item/tooltip/adders/DungeonQualityTooltip.java | 4 +- .../skyblock/item/tooltip/adders/LBinTooltip.java | 4 +- .../item/tooltip/adders/LineSmoothener.java | 4 +- .../skyblock/item/tooltip/adders/MotesTooltip.java | 4 +- .../item/tooltip/adders/MuseumTooltip.java | 4 +- .../item/tooltip/adders/NpcPriceTooltip.java | 4 +- .../item/tooltip/adders/ObtainedDateTooltip.java | 4 +- .../item/tooltip/adders/SupercraftReminder.java | 4 +- .../utils/container/AbstractContainerMatcher.java | 17 ------ .../utils/container/AbstractContainerSolver.java | 36 ------------ .../utils/container/AbstractSlotTextAdder.java | 2 +- .../utils/container/AbstractTooltipAdder.java | 2 +- .../utils/container/ContainerMatcher.java | 17 ++++++ .../utils/container/ContainerSolver.java | 68 +++++++++++----------- .../utils/container/ContainerSolverManager.java | 14 ++--- .../utils/container/RegexContainerMatcher.java | 4 +- .../utils/container/SimpleContainerSolver.java | 38 ++++++++++++ 53 files changed, 292 insertions(+), 292 deletions(-) create mode 100644 src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SimpleSlotTextAdder.java delete mode 100644 src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextAdder.java create mode 100644 src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/SimpleTooltipAdder.java delete mode 100644 src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipAdder.java delete mode 100644 src/main/java/de/hysky/skyblocker/utils/container/AbstractContainerMatcher.java delete mode 100644 src/main/java/de/hysky/skyblocker/utils/container/AbstractContainerSolver.java create mode 100644 src/main/java/de/hysky/skyblocker/utils/container/ContainerMatcher.java create mode 100644 src/main/java/de/hysky/skyblocker/utils/container/SimpleContainerSolver.java (limited to 'src/main/java/de/hysky/skyblocker') diff --git a/src/main/java/de/hysky/skyblocker/mixins/HandledScreenMixin.java b/src/main/java/de/hysky/skyblocker/mixins/HandledScreenMixin.java index b8e15eb5..2f22a870 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/HandledScreenMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/HandledScreenMixin.java @@ -21,7 +21,7 @@ import de.hysky.skyblocker.skyblock.quicknav.QuickNav; import de.hysky.skyblocker.skyblock.quicknav.QuickNavButton; import de.hysky.skyblocker.utils.ItemUtils; import de.hysky.skyblocker.utils.Utils; -import de.hysky.skyblocker.utils.container.AbstractContainerSolver; +import de.hysky.skyblocker.utils.container.ContainerSolver; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.ingame.HandledScreen; @@ -201,7 +201,7 @@ public abstract class HandledScreenMixin extends Screen */ @Unique private ItemStack skyblocker$experimentSolvers$getStack(Slot slot, @NotNull ItemStack stack) { - AbstractContainerSolver currentSolver = SkyblockerMod.getInstance().containerSolverManager.getCurrentSolver(); + ContainerSolver currentSolver = SkyblockerMod.getInstance().containerSolverManager.getCurrentSolver(); if ((currentSolver instanceof SuperpairsSolver || currentSolver instanceof UltrasequencerSolver) && ((ExperimentSolver) currentSolver).getState() == ExperimentSolver.State.SHOW && slot.inventory instanceof SimpleInventory) { ItemStack itemStack = ((ExperimentSolver) currentSolver).getSlots().get(slot.getIndex()); return itemStack == null ? stack : itemStack; @@ -229,7 +229,7 @@ public abstract class HandledScreenMixin extends Screen if (slot == null) return; String title = getTitle().getString(); ItemStack stack = skyblocker$experimentSolvers$getStack(slot, slot.getStack()); - AbstractContainerSolver currentSolver = SkyblockerMod.getInstance().containerSolverManager.getCurrentSolver(); + ContainerSolver currentSolver = SkyblockerMod.getInstance().containerSolverManager.getCurrentSolver(); // Prevent clicks on filler items if (SkyblockerConfigManager.get().uiAndVisuals.hideEmptyTooltips && FILLER_ITEMS.contains(stack.getName().getString()) && 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 index aa5d1cd4..11c99daa 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/accessories/newyearcakes/NewYearCakeBagHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/accessories/newyearcakes/NewYearCakeBagHelper.java @@ -2,7 +2,7 @@ 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.container.ContainerSolver; +import de.hysky.skyblocker.utils.container.SimpleContainerSolver; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.client.MinecraftClient; import net.minecraft.item.ItemStack; @@ -10,7 +10,7 @@ import net.minecraft.screen.slot.Slot; import java.util.List; -public class NewYearCakeBagHelper extends ContainerSolver { +public class NewYearCakeBagHelper extends SimpleContainerSolver { public NewYearCakeBagHelper() { super("New Year Cake Bag"); } 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 index e31d4238..4b3dbda8 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/accessories/newyearcakes/NewYearCakesHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/accessories/newyearcakes/NewYearCakesHelper.java @@ -3,7 +3,7 @@ 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.container.ContainerSolver; +import de.hysky.skyblocker.utils.container.SimpleContainerSolver; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.ints.IntOpenHashSet; import it.unimi.dsi.fastutil.ints.IntSet; @@ -19,7 +19,7 @@ import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; -public class NewYearCakesHelper extends ContainerSolver { +public class NewYearCakesHelper extends SimpleContainerSolver { private static final Logger LOGGER = LoggerFactory.getLogger(NewYearCakesHelper.class); private static final Pattern NEW_YEAR_CAKE = Pattern.compile("New Year Cake \\(Year (?\\d+)\\)"); private static final Pattern NEW_YEAR_CAKE_PURCHASE = Pattern.compile("You purchased New Year Cake \\(Year (?\\d+)\\) for .+ coins!"); 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 e1d2c59e..bd863fc2 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/chocolatefactory/ChocolateFactorySolver.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/chocolatefactory/ChocolateFactorySolver.java @@ -1,12 +1,12 @@ package de.hysky.skyblocker.skyblock.chocolatefactory; import de.hysky.skyblocker.config.SkyblockerConfigManager; -import de.hysky.skyblocker.skyblock.item.tooltip.TooltipAdder; +import de.hysky.skyblocker.skyblock.item.tooltip.SimpleTooltipAdder; 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.render.gui.ColorHighlight; -import de.hysky.skyblocker.utils.container.ContainerSolver; +import de.hysky.skyblocker.utils.container.SimpleContainerSolver; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.objects.ObjectArrayList; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; @@ -28,7 +28,7 @@ import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; -public class ChocolateFactorySolver extends ContainerSolver { +public class ChocolateFactorySolver extends SimpleContainerSolver { //Patterns private static final Pattern CPS_PATTERN = Pattern.compile("([\\d,.]+) Chocolate per second"); private static final Pattern CPS_INCREASE_PATTERN = Pattern.compile("\\+([\\d,]+) Chocolate per second"); @@ -265,7 +265,7 @@ public class ChocolateFactorySolver extends ContainerSolver { private record Rabbit(double cpsIncrease, long cost, int slot) {} //Todo: Merge this into the outer class once #786 is merged - public static final class Tooltip extends TooltipAdder { + public static final class Tooltip extends SimpleTooltipAdder { public Tooltip() { super("^Chocolate Factory$", 0); //The priority doesn't really matter here as this is the only tooltip adder for the Chocolate Factory. } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/CroesusHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/CroesusHelper.java index de9bd048..1a0aa347 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/CroesusHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/CroesusHelper.java @@ -3,7 +3,7 @@ package de.hysky.skyblocker.skyblock.dungeon; import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.utils.ItemUtils; import de.hysky.skyblocker.utils.render.gui.ColorHighlight; -import de.hysky.skyblocker.utils.container.ContainerSolver; +import de.hysky.skyblocker.utils.container.SimpleContainerSolver; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.component.DataComponentTypes; import net.minecraft.item.ItemStack; @@ -11,7 +11,7 @@ import net.minecraft.item.ItemStack; import java.util.ArrayList; import java.util.List; -public class CroesusHelper extends ContainerSolver { +public class CroesusHelper extends SimpleContainerSolver { public CroesusHelper() { super("^Croesus$"); } 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 e0bb2748..82acc3f2 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/CroesusProfit.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/CroesusProfit.java @@ -3,7 +3,7 @@ package de.hysky.skyblocker.skyblock.dungeon; import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.utils.ItemUtils; import de.hysky.skyblocker.utils.render.gui.ColorHighlight; -import de.hysky.skyblocker.utils.container.ContainerSolver; +import de.hysky.skyblocker.utils.container.SimpleContainerSolver; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.item.ItemStack; import net.minecraft.text.Text; @@ -17,7 +17,7 @@ import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; -public class CroesusProfit extends ContainerSolver { +public class CroesusProfit extends SimpleContainerSolver { private static final Pattern ESSENCE_PATTERN = Pattern.compile("(?[A-Za-z]+) Essence x(?\\d+)"); public CroesusProfit() { super(".*Catacombs - Floor.*"); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal/ColorTerminal.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal/ColorTerminal.java index 4ee81256..6cbb86ec 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal/ColorTerminal.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal/ColorTerminal.java @@ -1,9 +1,9 @@ package de.hysky.skyblocker.skyblock.dungeon.terminal; import de.hysky.skyblocker.config.SkyblockerConfigManager; -import de.hysky.skyblocker.utils.container.AbstractContainerSolver; -import de.hysky.skyblocker.utils.render.gui.ColorHighlight; import de.hysky.skyblocker.utils.container.ContainerSolver; +import de.hysky.skyblocker.utils.container.SimpleContainerSolver; +import de.hysky.skyblocker.utils.render.gui.ColorHighlight; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -17,7 +17,7 @@ import org.slf4j.LoggerFactory; import java.util.*; -public final class ColorTerminal extends ContainerSolver implements TerminalSolver { +public final class ColorTerminal extends SimpleContainerSolver implements TerminalSolver { private static final Logger LOGGER = LoggerFactory.getLogger(ColorTerminal.class.getName()); private static final Map colorFromName; private DyeColor targetColor; @@ -35,7 +35,7 @@ public final class ColorTerminal extends ContainerSolver implements TerminalSolv @Override public List getColors(Int2ObjectMap slots) { - AbstractContainerSolver.trimEdges(slots, 6); + ContainerSolver.trimEdges(slots, 6); List highlights = new ArrayList<>(); String colorString = groups[0]; if (targetColor == null) { diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal/LightsOnTerminal.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal/LightsOnTerminal.java index 2c024633..741a2f9b 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal/LightsOnTerminal.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal/LightsOnTerminal.java @@ -1,6 +1,6 @@ package de.hysky.skyblocker.skyblock.dungeon.terminal; -import de.hysky.skyblocker.utils.container.ContainerSolver; +import de.hysky.skyblocker.utils.container.SimpleContainerSolver; import de.hysky.skyblocker.utils.render.gui.ColorHighlight; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.item.ItemStack; @@ -13,7 +13,7 @@ import java.util.List; * * This doesn't solve the terminal because you don't need a solver for it, but rather to simply allow for click blocking. */ -public final class LightsOnTerminal extends ContainerSolver implements TerminalSolver { +public final class LightsOnTerminal extends SimpleContainerSolver implements TerminalSolver { private static final List EMPTY = List.of(); public LightsOnTerminal() { diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal/OrderTerminal.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal/OrderTerminal.java index e628cf8f..8e7b619c 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal/OrderTerminal.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal/OrderTerminal.java @@ -1,9 +1,9 @@ package de.hysky.skyblocker.skyblock.dungeon.terminal; import de.hysky.skyblocker.config.SkyblockerConfigManager; -import de.hysky.skyblocker.utils.container.AbstractContainerSolver; -import de.hysky.skyblocker.utils.render.gui.ColorHighlight; import de.hysky.skyblocker.utils.container.ContainerSolver; +import de.hysky.skyblocker.utils.container.SimpleContainerSolver; +import de.hysky.skyblocker.utils.render.gui.ColorHighlight; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; @@ -12,7 +12,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -public final class OrderTerminal extends ContainerSolver implements TerminalSolver { +public final class OrderTerminal extends SimpleContainerSolver implements TerminalSolver { private static final int PANES_NUM = 14; private int[] orderedSlots; private int currentNum = Integer.MAX_VALUE; @@ -43,7 +43,7 @@ public final class OrderTerminal extends ContainerSolver implements TerminalSolv } public boolean orderSlots(Int2ObjectMap slots) { - AbstractContainerSolver.trimEdges(slots, 4); + ContainerSolver.trimEdges(slots, 4); orderedSlots = new int[PANES_NUM]; for(Int2ObjectMap.Entry slot : slots.int2ObjectEntrySet()) { if(Items.AIR.equals(slot.getValue().getItem())) { diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal/StartsWithTerminal.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal/StartsWithTerminal.java index a9ff0e80..893e9f61 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal/StartsWithTerminal.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal/StartsWithTerminal.java @@ -1,9 +1,9 @@ package de.hysky.skyblocker.skyblock.dungeon.terminal; import de.hysky.skyblocker.config.SkyblockerConfigManager; -import de.hysky.skyblocker.utils.container.AbstractContainerSolver; -import de.hysky.skyblocker.utils.render.gui.ColorHighlight; import de.hysky.skyblocker.utils.container.ContainerSolver; +import de.hysky.skyblocker.utils.container.SimpleContainerSolver; +import de.hysky.skyblocker.utils.render.gui.ColorHighlight; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import it.unimi.dsi.fastutil.objects.ObjectSet; @@ -14,7 +14,7 @@ import java.util.ArrayList; import java.util.List; import java.util.function.Predicate; -public final class StartsWithTerminal extends ContainerSolver implements TerminalSolver { +public final class StartsWithTerminal extends SimpleContainerSolver implements TerminalSolver { private final Int2ObjectOpenHashMap trackedItemStates = new Int2ObjectOpenHashMap<>(); private int lastKnownScreenId = Integer.MIN_VALUE; @@ -29,7 +29,7 @@ public final class StartsWithTerminal extends ContainerSolver implements Termina @Override public List getColors(Int2ObjectMap slots) { - AbstractContainerSolver.trimEdges(slots, 6); + ContainerSolver.trimEdges(slots, 6); setupState(slots); String prefix = groups[0]; diff --git a/src/main/java/de/hysky/skyblocker/skyblock/experiment/ExperimentSolver.java b/src/main/java/de/hysky/skyblocker/skyblock/experiment/ExperimentSolver.java index 6339eb39..8d9b8311 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/experiment/ExperimentSolver.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/experiment/ExperimentSolver.java @@ -2,7 +2,7 @@ package de.hysky.skyblocker.skyblock.experiment; import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.config.configs.HelperConfig; -import de.hysky.skyblocker.utils.container.ContainerSolver; +import de.hysky.skyblocker.utils.container.SimpleContainerSolver; import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.ingame.GenericContainerScreen; @@ -13,7 +13,7 @@ import org.jetbrains.annotations.NotNull; import java.util.HashMap; import java.util.Map; -public abstract sealed class ExperimentSolver extends ContainerSolver permits ChronomatronSolver, SuperpairsSolver, UltrasequencerSolver { +public abstract sealed class ExperimentSolver extends SimpleContainerSolver permits ChronomatronSolver, SuperpairsSolver, UltrasequencerSolver { public enum State { REMEMBER, WAIT, SHOW, END } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/experiment/UltrasequencerSolver.java b/src/main/java/de/hysky/skyblocker/skyblock/experiment/UltrasequencerSolver.java index 796c80ee..f39c1ffe 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/experiment/UltrasequencerSolver.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/experiment/UltrasequencerSolver.java @@ -2,7 +2,7 @@ package de.hysky.skyblocker.skyblock.experiment; import de.hysky.skyblocker.config.configs.HelperConfig; import de.hysky.skyblocker.utils.render.gui.ColorHighlight; -import de.hysky.skyblocker.utils.container.AbstractContainerSolver; +import de.hysky.skyblocker.utils.container.ContainerSolver; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.ingame.GenericContainerScreen; @@ -56,7 +56,7 @@ public final class UltrasequencerSolver extends ExperimentSolver { case WAIT -> { if (genericContainerScreen.getScreenHandler().getInventory().getStack(49).getName().getString().startsWith("Timer: ")) { setState(State.SHOW); - AbstractContainerSolver.markHighlightsDirty(); + ContainerSolver.markHighlightsDirty(); } } case END -> { diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SimpleSlotTextAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SimpleSlotTextAdder.java new file mode 100644 index 00000000..068640e4 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SimpleSlotTextAdder.java @@ -0,0 +1,45 @@ +package de.hysky.skyblocker.skyblock.item.slottext; + +import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.utils.container.AbstractSlotTextAdder; +import de.hysky.skyblocker.utils.container.RegexContainerMatcher; +import org.intellij.lang.annotations.Language; +import org.jetbrains.annotations.NotNull; + +import java.util.regex.Pattern; + +/** + * Simple implementation of a slot text adder. + * Extend this class and add it to {@link SlotTextManager#adders} to add text to any arbitrary slot. + */ +public abstract class SimpleSlotTextAdder extends RegexContainerMatcher implements AbstractSlotTextAdder { + /** + * Utility constructor that will compile the given string into a pattern. + * + * @see #SimpleSlotTextAdder(Pattern) + */ + protected SimpleSlotTextAdder(@NotNull @Language("RegExp") String titlePattern) { + super(titlePattern); + } + + /** + * Creates a SlotTextAdder that will be applied to screens with titles that match the given pattern. + * + * @param titlePattern The pattern to match the screen title against. + */ + protected SimpleSlotTextAdder(@NotNull Pattern titlePattern) { + super(titlePattern); + } + + /** + * Creates a SlotTextAdder that will be applied to all screens. + */ + protected SimpleSlotTextAdder() { + super(); + } + + @Override + public boolean isEnabled() { + return SkyblockerConfigManager.get().general.itemInfoDisplay.slotText; + } +} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextAdder.java deleted file mode 100644 index 7ac403df..00000000 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextAdder.java +++ /dev/null @@ -1,45 +0,0 @@ -package de.hysky.skyblocker.skyblock.item.slottext; - -import de.hysky.skyblocker.config.SkyblockerConfigManager; -import de.hysky.skyblocker.utils.container.AbstractSlotTextAdder; -import de.hysky.skyblocker.utils.container.RegexContainerMatcher; -import org.intellij.lang.annotations.Language; -import org.jetbrains.annotations.NotNull; - -import java.util.regex.Pattern; - -/** - * Simple implementation of a slot text adder. - * Extend this class and add it to {@link SlotTextManager#adders} to add text to any arbitrary slot. - */ -public abstract class SlotTextAdder extends RegexContainerMatcher implements AbstractSlotTextAdder { - /** - * Utility constructor that will compile the given string into a pattern. - * - * @see #SlotTextAdder(Pattern) - */ - protected SlotTextAdder(@NotNull @Language("RegExp") String titlePattern) { - super(titlePattern); - } - - /** - * Creates a SlotTextAdder that will be applied to screens with titles that match the given pattern. - * - * @param titlePattern The pattern to match the screen title against. - */ - protected SlotTextAdder(@NotNull Pattern titlePattern) { - super(titlePattern); - } - - /** - * Creates a SlotTextAdder that will be applied to all screens. - */ - protected SlotTextAdder() { - super(); - } - - @Override - public boolean isEnabled() { - return SkyblockerConfigManager.get().general.itemInfoDisplay.slotText; - } -} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/AttributeShardAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/AttributeShardAdder.java index 33259172..8f3e55a2 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/AttributeShardAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/AttributeShardAdder.java @@ -2,7 +2,7 @@ package de.hysky.skyblocker.skyblock.item.slottext.adders; import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.skyblock.item.slottext.SlotText; -import de.hysky.skyblocker.skyblock.item.slottext.SlotTextAdder; +import de.hysky.skyblocker.skyblock.item.slottext.SimpleSlotTextAdder; import de.hysky.skyblocker.utils.ItemUtils; import it.unimi.dsi.fastutil.objects.Object2ObjectMap; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; @@ -13,7 +13,7 @@ import org.jetbrains.annotations.NotNull; import java.util.List; -public class AttributeShardAdder extends SlotTextAdder { +public class AttributeShardAdder extends SimpleSlotTextAdder { private static final Object2ObjectMap ID_2_SHORT_NAME = new Object2ObjectOpenHashMap<>(); static { diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CatacombsLevelAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CatacombsLevelAdder.java index f4066313..6c95c11e 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CatacombsLevelAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CatacombsLevelAdder.java @@ -1,7 +1,7 @@ package de.hysky.skyblocker.skyblock.item.slottext.adders; import de.hysky.skyblocker.skyblock.item.slottext.SlotText; -import de.hysky.skyblocker.skyblock.item.slottext.SlotTextAdder; +import de.hysky.skyblocker.skyblock.item.slottext.SimpleSlotTextAdder; import de.hysky.skyblocker.utils.RomanNumerals; import net.minecraft.item.ItemStack; import net.minecraft.text.Text; @@ -19,7 +19,7 @@ public class CatacombsLevelAdder { private CatacombsLevelAdder() { } - public static class Dungeoneering extends SlotTextAdder { + public static class Dungeoneering extends SimpleSlotTextAdder { private static final Pattern LEVEL_PATTERN = Pattern.compile(".*?(?:(?\\d+)|(?\\S+))? ?✯?"); public Dungeoneering() { super("^Dungeoneering"); @@ -52,7 +52,7 @@ public class CatacombsLevelAdder { } } - public static class DungeonClasses extends SlotTextAdder { + public static class DungeonClasses extends SimpleSlotTextAdder { public DungeonClasses() { super("^Dungeon Classes"); //Applies to both screens as they are same in both the placement and the style of the level text. @@ -73,7 +73,7 @@ public class CatacombsLevelAdder { } } - public static class ReadyUp extends SlotTextAdder { + public static class ReadyUp extends SimpleSlotTextAdder { public ReadyUp() { super("^Ready Up"); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CollectionAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CollectionAdder.java index 016f20b4..2eb491d4 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CollectionAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CollectionAdder.java @@ -1,7 +1,7 @@ package de.hysky.skyblocker.skyblock.item.slottext.adders; import de.hysky.skyblocker.skyblock.item.slottext.SlotText; -import de.hysky.skyblocker.skyblock.item.slottext.SlotTextAdder; +import de.hysky.skyblocker.skyblock.item.slottext.SimpleSlotTextAdder; import de.hysky.skyblocker.utils.ItemUtils; import de.hysky.skyblocker.utils.RomanNumerals; import net.minecraft.item.ItemStack; @@ -12,7 +12,7 @@ import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; -public class CollectionAdder extends SlotTextAdder { +public class CollectionAdder extends SimpleSlotTextAdder { private static final Pattern COLLECTION = Pattern.compile("^[\\w ]+ (?[IVXLCDM]+)$"); public CollectionAdder() { diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CommunityShopAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CommunityShopAdder.java index 924900e8..684f9ae2 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CommunityShopAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CommunityShopAdder.java @@ -1,7 +1,7 @@ package de.hysky.skyblocker.skyblock.item.slottext.adders; import de.hysky.skyblocker.skyblock.item.slottext.SlotText; -import de.hysky.skyblocker.skyblock.item.slottext.SlotTextAdder; +import de.hysky.skyblocker.skyblock.item.slottext.SimpleSlotTextAdder; import de.hysky.skyblocker.utils.ItemUtils; import de.hysky.skyblocker.utils.RomanNumerals; import net.minecraft.item.ItemStack; @@ -12,7 +12,7 @@ import org.jetbrains.annotations.NotNull; import java.util.List; -public class CommunityShopAdder extends SlotTextAdder { +public class CommunityShopAdder extends SimpleSlotTextAdder { private static final byte CATEGORIES_START = 10; private static final byte CATEGORIES_END = 14; //Inclusive private static byte currentScreen = -1; // 0 = city projects, 1 = upgrades, 2 = booster cookie, 3 = bits shop, 4 = fire sales, any other number = invalid 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 2c6fe4e4..0535f110 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,7 +1,7 @@ package de.hysky.skyblocker.skyblock.item.slottext.adders; import de.hysky.skyblocker.skyblock.item.slottext.SlotText; -import de.hysky.skyblocker.skyblock.item.slottext.SlotTextAdder; +import de.hysky.skyblocker.skyblock.item.slottext.SimpleSlotTextAdder; import de.hysky.skyblocker.utils.ItemUtils; import de.hysky.skyblocker.utils.RomanNumerals; import net.minecraft.item.ItemStack; @@ -13,7 +13,7 @@ import org.jetbrains.annotations.NotNull; import java.util.List; -public class EnchantmentLevelAdder extends SlotTextAdder { +public class EnchantmentLevelAdder extends SimpleSlotTextAdder { public EnchantmentLevelAdder() { super(); } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/EssenceShopAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/EssenceShopAdder.java index 1a3e889e..3d8d935b 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/EssenceShopAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/EssenceShopAdder.java @@ -1,7 +1,7 @@ package de.hysky.skyblocker.skyblock.item.slottext.adders; import de.hysky.skyblocker.skyblock.item.slottext.SlotText; -import de.hysky.skyblocker.skyblock.item.slottext.SlotTextAdder; +import de.hysky.skyblocker.skyblock.item.slottext.SimpleSlotTextAdder; import de.hysky.skyblocker.utils.ItemUtils; import de.hysky.skyblocker.utils.RomanNumerals; import net.minecraft.item.ItemStack; @@ -14,7 +14,7 @@ import java.util.Locale; import java.util.regex.Matcher; import java.util.regex.Pattern; -public class EssenceShopAdder extends SlotTextAdder { +public class EssenceShopAdder extends SimpleSlotTextAdder { private static final Pattern ESSENCELEVEL = Pattern.compile("^[\\w ]+ (?[IVXLCDM]+)$"); private static final Pattern UNLOCKED = Pattern.compile("UNLOCKED"); private static final Pattern ESSENCE = Pattern.compile("Your \\w+ Essence: (?[\\d,]+)"); 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 ee4bd356..1282354b 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.item.slottext.SlotText; -import de.hysky.skyblocker.skyblock.item.slottext.SlotTextAdder; +import de.hysky.skyblocker.skyblock.item.slottext.SimpleSlotTextAdder; import de.hysky.skyblocker.utils.RomanNumerals; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; @@ -12,7 +12,7 @@ import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; -public class MinionLevelAdder extends SlotTextAdder { +public class MinionLevelAdder extends SimpleSlotTextAdder { private static final Pattern MINION_PATTERN = Pattern.compile(".* Minion ([IVXLCDM]+)"); public MinionLevelAdder() { super(); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PetLevelAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PetLevelAdder.java index 27ed7aa0..b7cc50fc 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PetLevelAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PetLevelAdder.java @@ -1,7 +1,7 @@ package de.hysky.skyblocker.skyblock.item.slottext.adders; import de.hysky.skyblocker.skyblock.item.slottext.SlotText; -import de.hysky.skyblocker.skyblock.item.slottext.SlotTextAdder; +import de.hysky.skyblocker.skyblock.item.slottext.SimpleSlotTextAdder; import de.hysky.skyblocker.utils.ItemUtils; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; @@ -11,7 +11,7 @@ import org.jetbrains.annotations.NotNull; import java.util.List; -public class PetLevelAdder extends SlotTextAdder { +public class PetLevelAdder extends SimpleSlotTextAdder { public PetLevelAdder() { super(); } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PotionLevelAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PotionLevelAdder.java index 94d1b8c0..770a9c0e 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PotionLevelAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PotionLevelAdder.java @@ -1,7 +1,7 @@ package de.hysky.skyblocker.skyblock.item.slottext.adders; import de.hysky.skyblocker.skyblock.item.slottext.SlotText; -import de.hysky.skyblocker.skyblock.item.slottext.SlotTextAdder; +import de.hysky.skyblocker.skyblock.item.slottext.SimpleSlotTextAdder; import de.hysky.skyblocker.utils.ItemUtils; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NbtCompound; @@ -11,7 +11,7 @@ import org.jetbrains.annotations.NotNull; import java.util.List; -public class PotionLevelAdder extends SlotTextAdder { +public class PotionLevelAdder extends SimpleSlotTextAdder { @Override public @NotNull List getText(@NotNull ItemStack stack, int slotId) { NbtCompound customData = ItemUtils.getCustomData(stack); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PowerStonesGuideAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PowerStonesGuideAdder.java index 0f3d6b24..a09d8782 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PowerStonesGuideAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PowerStonesGuideAdder.java @@ -1,7 +1,7 @@ package de.hysky.skyblocker.skyblock.item.slottext.adders; import de.hysky.skyblocker.skyblock.item.slottext.SlotText; -import de.hysky.skyblocker.skyblock.item.slottext.SlotTextAdder; +import de.hysky.skyblocker.skyblock.item.slottext.SimpleSlotTextAdder; import de.hysky.skyblocker.utils.ItemUtils; import net.minecraft.item.ItemStack; import net.minecraft.text.Text; @@ -11,7 +11,7 @@ import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; -public class PowerStonesGuideAdder extends SlotTextAdder { +public class PowerStonesGuideAdder extends SimpleSlotTextAdder { private static final Pattern LEARNED = Pattern.compile("Learned: (Yes|Not Yet) (?[✖✔])"); public PowerStonesGuideAdder() { diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PrehistoricEggAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PrehistoricEggAdder.java index 63cb4bd8..936b61a1 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PrehistoricEggAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PrehistoricEggAdder.java @@ -1,7 +1,7 @@ package de.hysky.skyblocker.skyblock.item.slottext.adders; import de.hysky.skyblocker.skyblock.item.slottext.SlotText; -import de.hysky.skyblocker.skyblock.item.slottext.SlotTextAdder; +import de.hysky.skyblocker.skyblock.item.slottext.SimpleSlotTextAdder; import de.hysky.skyblocker.utils.ItemUtils; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; @@ -13,7 +13,7 @@ import org.jetbrains.annotations.NotNull; import java.util.List; -public class PrehistoricEggAdder extends SlotTextAdder { +public class PrehistoricEggAdder extends SimpleSlotTextAdder { @Override public @NotNull List getText(@NotNull ItemStack stack, int slotId) { if (!stack.isOf(Items.PLAYER_HEAD) || !StringUtils.equals(stack.getSkyblockId(), "PREHISTORIC_EGG")) return List.of(); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/RancherBootsSpeedAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/RancherBootsSpeedAdder.java index 4762c0fd..9bea52d0 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/RancherBootsSpeedAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/RancherBootsSpeedAdder.java @@ -1,7 +1,7 @@ package de.hysky.skyblocker.skyblock.item.slottext.adders; import de.hysky.skyblocker.skyblock.item.slottext.SlotText; -import de.hysky.skyblocker.skyblock.item.slottext.SlotTextAdder; +import de.hysky.skyblocker.skyblock.item.slottext.SimpleSlotTextAdder; import de.hysky.skyblocker.utils.ItemUtils; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; @@ -13,7 +13,7 @@ import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; -public class RancherBootsSpeedAdder extends SlotTextAdder { +public class RancherBootsSpeedAdder extends SimpleSlotTextAdder { private static final Pattern SPEED_PATTERN = Pattern.compile("Current Speed Cap: (\\d+) ?(\\d+)?"); public RancherBootsSpeedAdder() { diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/SkillLevelAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/SkillLevelAdder.java index 541e2058..7e9420f9 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/SkillLevelAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/SkillLevelAdder.java @@ -1,7 +1,7 @@ package de.hysky.skyblocker.skyblock.item.slottext.adders; import de.hysky.skyblocker.skyblock.item.slottext.SlotText; -import de.hysky.skyblocker.skyblock.item.slottext.SlotTextAdder; +import de.hysky.skyblocker.skyblock.item.slottext.SimpleSlotTextAdder; import de.hysky.skyblocker.utils.ItemUtils; import de.hysky.skyblocker.utils.RomanNumerals; import net.minecraft.item.ItemStack; @@ -11,7 +11,7 @@ import org.jetbrains.annotations.NotNull; import java.util.List; -public class SkillLevelAdder extends SlotTextAdder { +public class SkillLevelAdder extends SimpleSlotTextAdder { public SkillLevelAdder() { super("^Your Skills"); } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/SkyblockLevelAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/SkyblockLevelAdder.java index e64dce1f..061f99c9 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/SkyblockLevelAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/SkyblockLevelAdder.java @@ -1,7 +1,7 @@ package de.hysky.skyblocker.skyblock.item.slottext.adders; import de.hysky.skyblocker.skyblock.item.slottext.SlotText; -import de.hysky.skyblocker.skyblock.item.slottext.SlotTextAdder; +import de.hysky.skyblocker.skyblock.item.slottext.SimpleSlotTextAdder; import de.hysky.skyblocker.utils.ItemUtils; import net.minecraft.item.ItemStack; import net.minecraft.text.Text; @@ -10,7 +10,7 @@ import org.jetbrains.annotations.NotNull; import java.util.List; -public class SkyblockLevelAdder extends SlotTextAdder { +public class SkyblockLevelAdder extends SimpleSlotTextAdder { public SkyblockLevelAdder() { super("^SkyBlock Menu"); } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/StatsTuningAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/StatsTuningAdder.java index 45c53fd0..e94fddc5 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/StatsTuningAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/StatsTuningAdder.java @@ -1,7 +1,7 @@ package de.hysky.skyblocker.skyblock.item.slottext.adders; import de.hysky.skyblocker.skyblock.item.slottext.SlotText; -import de.hysky.skyblocker.skyblock.item.slottext.SlotTextAdder; +import de.hysky.skyblocker.skyblock.item.slottext.SimpleSlotTextAdder; import de.hysky.skyblocker.utils.ItemUtils; import net.minecraft.item.ItemStack; import net.minecraft.text.Text; @@ -11,7 +11,7 @@ import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; -public class StatsTuningAdder extends SlotTextAdder { +public class StatsTuningAdder extends SimpleSlotTextAdder { private static final Pattern STATHAS = Pattern.compile("Stat has: (?\\d+) (points|point)"); private static final Pattern UNASSIGNEDPOINTS = Pattern.compile("Unassigned Points: (?\\d+)!!!"); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/YourEssenceAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/YourEssenceAdder.java index f68b36a8..f5a5886f 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/YourEssenceAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/YourEssenceAdder.java @@ -1,7 +1,7 @@ package de.hysky.skyblocker.skyblock.item.slottext.adders; import de.hysky.skyblocker.skyblock.item.slottext.SlotText; -import de.hysky.skyblocker.skyblock.item.slottext.SlotTextAdder; +import de.hysky.skyblocker.skyblock.item.slottext.SimpleSlotTextAdder; import de.hysky.skyblocker.utils.ItemUtils; import net.minecraft.item.ItemStack; import net.minecraft.text.Text; @@ -13,7 +13,7 @@ import java.util.Locale; import java.util.regex.Matcher; import java.util.regex.Pattern; -public class YourEssenceAdder extends SlotTextAdder { +public class YourEssenceAdder extends SimpleSlotTextAdder { private static final Pattern ESSENCE = Pattern.compile("You currently own (?[\\d,]+)"); public YourEssenceAdder() { diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/SimpleTooltipAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/SimpleTooltipAdder.java new file mode 100644 index 00000000..d9533da3 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/SimpleTooltipAdder.java @@ -0,0 +1,57 @@ +package de.hysky.skyblocker.skyblock.item.tooltip; + +import de.hysky.skyblocker.utils.container.RegexContainerMatcher; +import de.hysky.skyblocker.utils.container.AbstractTooltipAdder; +import org.intellij.lang.annotations.Language; +import org.jetbrains.annotations.NotNull; + +import java.util.regex.Pattern; + +/** + * Simple implementation of a tooltip adder. + * Extend this class and add it to {@link TooltipManager#adders} to add additional text to tooltips. + */ +public abstract class SimpleTooltipAdder extends RegexContainerMatcher implements AbstractTooltipAdder { + /** + * The priority of this adder. Lower priority means it will be applied first. + * @apiNote Consider adding this as a parameter to your class' constructor and + * setting it from {@link TooltipManager#adders} to make it easy to read and maintain. + */ + private final int priority; + + /** + * Utility constructor that will compile the given string into a pattern. + * + * @see #SimpleTooltipAdder(Pattern, int) + */ + protected SimpleTooltipAdder(@NotNull @Language("RegExp") String titlePattern, int priority) { + super(titlePattern); + this.priority = priority; + } + + /** + * Creates a TooltipAdder that will be applied to screens with titles that match the given pattern. + * + * @param titlePattern The pattern to match the screen title against. + * @param priority The priority of this adder. Lower priority means it will be applied first. + */ + protected SimpleTooltipAdder(@NotNull Pattern titlePattern, int priority) { + super(titlePattern); + this.priority = priority; + } + + /** + * Creates a TooltipAdder that will be applied to all screens. + * + * @param priority The priority of this adder. Lower priority means it will be applied first. + */ + protected SimpleTooltipAdder(int priority) { + super(); + this.priority = priority; + } + + @Override + public int getPriority() { + return priority; + } +} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipAdder.java deleted file mode 100644 index 84571149..00000000 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipAdder.java +++ /dev/null @@ -1,57 +0,0 @@ -package de.hysky.skyblocker.skyblock.item.tooltip; - -import de.hysky.skyblocker.utils.container.RegexContainerMatcher; -import de.hysky.skyblocker.utils.container.AbstractTooltipAdder; -import org.intellij.lang.annotations.Language; -import org.jetbrains.annotations.NotNull; - -import java.util.regex.Pattern; - -/** - * Simple implementation of a tooltip adder. - * Extend this class and add it to {@link TooltipManager#adders} to add additional text to tooltips. - */ -public abstract class TooltipAdder extends RegexContainerMatcher implements AbstractTooltipAdder { - /** - * The priority of this adder. Lower priority means it will be applied first. - * @apiNote Consider adding this as a parameter to your class' constructor and - * setting it from {@link TooltipManager#adders} to make it easy to read and maintain. - */ - private final int priority; - - /** - * Utility constructor that will compile the given string into a pattern. - * - * @see #TooltipAdder(Pattern, int) - */ - protected TooltipAdder(@NotNull @Language("RegExp") String titlePattern, int priority) { - super(titlePattern); - this.priority = priority; - } - - /** - * Creates a TooltipAdder that will be applied to screens with titles that match the given pattern. - * - * @param titlePattern The pattern to match the screen title against. - * @param priority The priority of this adder. Lower priority means it will be applied first. - */ - protected TooltipAdder(@NotNull Pattern titlePattern, int priority) { - super(titlePattern); - this.priority = priority; - } - - /** - * Creates a TooltipAdder that will be applied to all screens. - * - * @param priority The priority of this adder. Lower priority means it will be applied first. - */ - protected TooltipAdder(int priority) { - super(); - this.priority = priority; - } - - @Override - public int getPriority() { - return priority; - } -} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/AccessoryTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/AccessoryTooltip.java index 0aeb1cc6..a5e13501 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/AccessoryTooltip.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/AccessoryTooltip.java @@ -1,7 +1,7 @@ package de.hysky.skyblocker.skyblock.item.tooltip.adders; import de.hysky.skyblocker.skyblock.item.tooltip.AccessoriesHelper; -import de.hysky.skyblocker.skyblock.item.tooltip.TooltipAdder; +import de.hysky.skyblocker.skyblock.item.tooltip.SimpleTooltipAdder; import de.hysky.skyblocker.skyblock.item.tooltip.TooltipInfoType; import it.unimi.dsi.fastutil.Pair; import net.minecraft.item.ItemStack; @@ -13,7 +13,7 @@ import org.jetbrains.annotations.Nullable; import java.util.List; -public class AccessoryTooltip extends TooltipAdder { +public class AccessoryTooltip extends SimpleTooltipAdder { public AccessoryTooltip(int priority) { super(priority); } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/AvgBinTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/AvgBinTooltip.java index 1f0180ff..e81879af 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/AvgBinTooltip.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/AvgBinTooltip.java @@ -2,7 +2,7 @@ package de.hysky.skyblocker.skyblock.item.tooltip.adders; import de.hysky.skyblocker.config.configs.GeneralConfig; import de.hysky.skyblocker.skyblock.item.tooltip.ItemTooltip; -import de.hysky.skyblocker.skyblock.item.tooltip.TooltipAdder; +import de.hysky.skyblocker.skyblock.item.tooltip.SimpleTooltipAdder; import de.hysky.skyblocker.skyblock.item.tooltip.TooltipInfoType; import net.minecraft.item.ItemStack; import net.minecraft.screen.slot.Slot; @@ -12,7 +12,7 @@ import org.jetbrains.annotations.Nullable; import java.util.List; -public class AvgBinTooltip extends TooltipAdder { +public class AvgBinTooltip extends SimpleTooltipAdder { public AvgBinTooltip(int priority) { super(priority); } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/BazaarPriceTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/BazaarPriceTooltip.java index 36023182..658c50a9 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/BazaarPriceTooltip.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/BazaarPriceTooltip.java @@ -2,7 +2,7 @@ package de.hysky.skyblocker.skyblock.item.tooltip.adders; import com.google.gson.JsonObject; import de.hysky.skyblocker.skyblock.item.tooltip.ItemTooltip; -import de.hysky.skyblocker.skyblock.item.tooltip.TooltipAdder; +import de.hysky.skyblocker.skyblock.item.tooltip.SimpleTooltipAdder; import de.hysky.skyblocker.skyblock.item.tooltip.TooltipInfoType; import net.minecraft.item.ItemStack; import net.minecraft.screen.slot.Slot; @@ -13,7 +13,7 @@ import org.jetbrains.annotations.Nullable; import java.util.List; -public class BazaarPriceTooltip extends TooltipAdder { +public class BazaarPriceTooltip extends SimpleTooltipAdder { public static boolean bazaarExist = false; public BazaarPriceTooltip(int priority) { diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/ColorTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/ColorTooltip.java index d66ca378..8d9d8fbb 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/ColorTooltip.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/ColorTooltip.java @@ -1,6 +1,6 @@ package de.hysky.skyblocker.skyblock.item.tooltip.adders; -import de.hysky.skyblocker.skyblock.item.tooltip.TooltipAdder; +import de.hysky.skyblocker.skyblock.item.tooltip.SimpleTooltipAdder; import de.hysky.skyblocker.skyblock.item.tooltip.TooltipInfoType; import de.hysky.skyblocker.utils.Constants; import de.hysky.skyblocker.utils.ItemUtils; @@ -18,7 +18,7 @@ import org.slf4j.LoggerFactory; import java.util.List; -public class ColorTooltip extends TooltipAdder { +public class ColorTooltip extends SimpleTooltipAdder { private static final Logger LOGGER = LoggerFactory.getLogger(ColorTooltip.class); public ColorTooltip(int priority) { diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/DungeonQualityTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/DungeonQualityTooltip.java index 4cd1d2b5..f6efc2f2 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/DungeonQualityTooltip.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/DungeonQualityTooltip.java @@ -1,7 +1,7 @@ package de.hysky.skyblocker.skyblock.item.tooltip.adders; import de.hysky.skyblocker.config.SkyblockerConfigManager; -import de.hysky.skyblocker.skyblock.item.tooltip.TooltipAdder; +import de.hysky.skyblocker.skyblock.item.tooltip.SimpleTooltipAdder; import de.hysky.skyblocker.utils.ItemUtils; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NbtCompound; @@ -12,7 +12,7 @@ import org.jetbrains.annotations.Nullable; import java.util.List; -public class DungeonQualityTooltip extends TooltipAdder { +public class DungeonQualityTooltip extends SimpleTooltipAdder { public DungeonQualityTooltip(int priority) { super(priority); } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/LBinTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/LBinTooltip.java index b2186203..aa90bf09 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/LBinTooltip.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/LBinTooltip.java @@ -1,7 +1,7 @@ package de.hysky.skyblocker.skyblock.item.tooltip.adders; import de.hysky.skyblocker.skyblock.item.tooltip.ItemTooltip; -import de.hysky.skyblocker.skyblock.item.tooltip.TooltipAdder; +import de.hysky.skyblocker.skyblock.item.tooltip.SimpleTooltipAdder; import de.hysky.skyblocker.skyblock.item.tooltip.TooltipInfoType; import net.minecraft.item.ItemStack; import net.minecraft.screen.slot.Slot; @@ -11,7 +11,7 @@ import org.jetbrains.annotations.Nullable; import java.util.List; -public class LBinTooltip extends TooltipAdder { +public class LBinTooltip extends SimpleTooltipAdder { public static boolean lbinExist = false; public LBinTooltip(int priority) { diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/LineSmoothener.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/LineSmoothener.java index c459f76b..347abdad 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/LineSmoothener.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/LineSmoothener.java @@ -1,6 +1,6 @@ package de.hysky.skyblocker.skyblock.item.tooltip.adders; -import de.hysky.skyblocker.skyblock.item.tooltip.TooltipAdder; +import de.hysky.skyblocker.skyblock.item.tooltip.SimpleTooltipAdder; import net.minecraft.item.ItemStack; import net.minecraft.screen.slot.Slot; import net.minecraft.text.Text; @@ -9,7 +9,7 @@ import org.jetbrains.annotations.Nullable; import java.util.List; -public class LineSmoothener extends TooltipAdder { +public class LineSmoothener extends SimpleTooltipAdder { //This is static to not create a new text object for each line in every item private static final Text BUMPY_LINE = Text.literal("-----------------").formatted(Formatting.DARK_GRAY, Formatting.STRIKETHROUGH); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/MotesTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/MotesTooltip.java index 6a612594..42348b78 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/MotesTooltip.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/MotesTooltip.java @@ -1,7 +1,7 @@ package de.hysky.skyblocker.skyblock.item.tooltip.adders; import de.hysky.skyblocker.config.SkyblockerConfigManager; -import de.hysky.skyblocker.skyblock.item.tooltip.TooltipAdder; +import de.hysky.skyblocker.skyblock.item.tooltip.SimpleTooltipAdder; import de.hysky.skyblocker.skyblock.item.tooltip.TooltipInfoType; import net.minecraft.item.ItemStack; import net.minecraft.screen.slot.Slot; @@ -13,7 +13,7 @@ import org.jetbrains.annotations.Nullable; import java.util.List; import java.util.Locale; -public class MotesTooltip extends TooltipAdder { +public class MotesTooltip extends SimpleTooltipAdder { public MotesTooltip(int priority) { super(priority); } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/MuseumTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/MuseumTooltip.java index e6e06064..fcc9bd97 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/MuseumTooltip.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/MuseumTooltip.java @@ -1,7 +1,7 @@ package de.hysky.skyblocker.skyblock.item.tooltip.adders; import de.hysky.skyblocker.skyblock.item.MuseumItemCache; -import de.hysky.skyblocker.skyblock.item.tooltip.TooltipAdder; +import de.hysky.skyblocker.skyblock.item.tooltip.SimpleTooltipAdder; import de.hysky.skyblocker.skyblock.item.tooltip.TooltipInfoType; import de.hysky.skyblocker.utils.ItemUtils; import net.minecraft.item.ItemStack; @@ -13,7 +13,7 @@ import org.jetbrains.annotations.Nullable; import java.util.List; -public class MuseumTooltip extends TooltipAdder { +public class MuseumTooltip extends SimpleTooltipAdder { public MuseumTooltip(int priority) { super(priority); } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/NpcPriceTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/NpcPriceTooltip.java index fcdd15e6..17cb80e3 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/NpcPriceTooltip.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/NpcPriceTooltip.java @@ -1,7 +1,7 @@ package de.hysky.skyblocker.skyblock.item.tooltip.adders; import de.hysky.skyblocker.skyblock.item.tooltip.ItemTooltip; -import de.hysky.skyblocker.skyblock.item.tooltip.TooltipAdder; +import de.hysky.skyblocker.skyblock.item.tooltip.SimpleTooltipAdder; import de.hysky.skyblocker.skyblock.item.tooltip.TooltipInfoType; import net.minecraft.item.ItemStack; import net.minecraft.screen.slot.Slot; @@ -12,7 +12,7 @@ import org.jetbrains.annotations.Nullable; import java.util.List; -public class NpcPriceTooltip extends TooltipAdder { +public class NpcPriceTooltip extends SimpleTooltipAdder { public NpcPriceTooltip(int priority) { super(priority); } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/ObtainedDateTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/ObtainedDateTooltip.java index fc3ac28d..31aa3de4 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/ObtainedDateTooltip.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/ObtainedDateTooltip.java @@ -1,6 +1,6 @@ package de.hysky.skyblocker.skyblock.item.tooltip.adders; -import de.hysky.skyblocker.skyblock.item.tooltip.TooltipAdder; +import de.hysky.skyblocker.skyblock.item.tooltip.SimpleTooltipAdder; import de.hysky.skyblocker.skyblock.item.tooltip.TooltipInfoType; import de.hysky.skyblocker.utils.ItemUtils; import net.minecraft.item.ItemStack; @@ -18,7 +18,7 @@ import java.time.temporal.TemporalAccessor; import java.util.List; import java.util.Locale; -public class ObtainedDateTooltip extends TooltipAdder { +public class ObtainedDateTooltip extends SimpleTooltipAdder { private static final DateTimeFormatter OBTAINED_DATE_FORMATTER = DateTimeFormatter.ofPattern("MMMM d, yyyy").withZone(ZoneId.systemDefault()).localizedBy(Locale.ENGLISH); private static final DateTimeFormatter OLD_OBTAINED_DATE_FORMAT = DateTimeFormatter.ofPattern("M/d/yy h:m a").withZone(ZoneId.of("UTC")).localizedBy(Locale.ENGLISH); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/SupercraftReminder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/SupercraftReminder.java index 767832c0..c34e1650 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/SupercraftReminder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/SupercraftReminder.java @@ -1,6 +1,6 @@ package de.hysky.skyblocker.skyblock.item.tooltip.adders; -import de.hysky.skyblocker.skyblock.item.tooltip.TooltipAdder; +import de.hysky.skyblocker.skyblock.item.tooltip.SimpleTooltipAdder; import de.hysky.skyblocker.utils.ItemUtils; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; @@ -12,7 +12,7 @@ import org.jetbrains.annotations.Nullable; import java.util.List; import java.util.regex.Pattern; -public class SupercraftReminder extends TooltipAdder { +public class SupercraftReminder extends SimpleTooltipAdder { private static final byte SUPERCRAFT_SLOT = 32; private static final byte RECIPE_RESULT_SLOT = 25; diff --git a/src/main/java/de/hysky/skyblocker/utils/container/AbstractContainerMatcher.java b/src/main/java/de/hysky/skyblocker/utils/container/AbstractContainerMatcher.java deleted file mode 100644 index 5509b9a4..00000000 --- a/src/main/java/de/hysky/skyblocker/utils/container/AbstractContainerMatcher.java +++ /dev/null @@ -1,17 +0,0 @@ -package de.hysky.skyblocker.utils.container; - -import net.minecraft.client.gui.screen.ingame.HandledScreen; -import org.jetbrains.annotations.NotNull; - -public interface AbstractContainerMatcher { - /** - * Tests if the given screen should be handled by this matcher. - * @return {@code true} if this matcher should apply to the given screen, {@code false} otherwise - */ - boolean test(@NotNull HandledScreen screen); - - /** - * @return {@code true} if this matcher is enabled, {@code false} otherwise - */ - boolean isEnabled(); -} diff --git a/src/main/java/de/hysky/skyblocker/utils/container/AbstractContainerSolver.java b/src/main/java/de/hysky/skyblocker/utils/container/AbstractContainerSolver.java deleted file mode 100644 index d4c52212..00000000 --- a/src/main/java/de/hysky/skyblocker/utils/container/AbstractContainerSolver.java +++ /dev/null @@ -1,36 +0,0 @@ -package de.hysky.skyblocker.utils.container; - -import de.hysky.skyblocker.SkyblockerMod; -import de.hysky.skyblocker.utils.render.gui.ColorHighlight; -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import net.minecraft.client.gui.screen.ingame.GenericContainerScreen; -import net.minecraft.item.ItemStack; - -import java.util.List; - -public interface AbstractContainerSolver extends AbstractContainerMatcher { - List getColors(Int2ObjectMap slots); - - default void start(GenericContainerScreen screen) {} - - default void reset() {} - - default boolean onClickSlot(int slot, ItemStack stack, int screenId) { - return false; - } - - static void markHighlightsDirty() { - SkyblockerMod.getInstance().containerSolverManager.markDirty(); - } - - static void trimEdges(Int2ObjectMap slots, int rows) { - for (int i = 0; i < rows; i++) { - slots.remove(9 * i); - slots.remove(9 * i + 8); - } - for (int i = 1; i < 8; i++) { - slots.remove(i); - slots.remove((rows - 1) * 9 + i); - } - } -} diff --git a/src/main/java/de/hysky/skyblocker/utils/container/AbstractSlotTextAdder.java b/src/main/java/de/hysky/skyblocker/utils/container/AbstractSlotTextAdder.java index fce3fcf5..5e13c644 100644 --- a/src/main/java/de/hysky/skyblocker/utils/container/AbstractSlotTextAdder.java +++ b/src/main/java/de/hysky/skyblocker/utils/container/AbstractSlotTextAdder.java @@ -6,7 +6,7 @@ import org.jetbrains.annotations.NotNull; import java.util.List; -public interface AbstractSlotTextAdder extends AbstractContainerMatcher { +public interface AbstractSlotTextAdder extends ContainerMatcher { /** * This method will be called for each rendered slot. Consider using a switch statement on {@code slotId} if you wish to limit the text to specific slots. diff --git a/src/main/java/de/hysky/skyblocker/utils/container/AbstractTooltipAdder.java b/src/main/java/de/hysky/skyblocker/utils/container/AbstractTooltipAdder.java index 3cc84f35..5da64f52 100644 --- a/src/main/java/de/hysky/skyblocker/utils/container/AbstractTooltipAdder.java +++ b/src/main/java/de/hysky/skyblocker/utils/container/AbstractTooltipAdder.java @@ -7,7 +7,7 @@ import org.jetbrains.annotations.Nullable; import java.util.List; -public interface AbstractTooltipAdder extends AbstractContainerMatcher { +public interface AbstractTooltipAdder extends ContainerMatcher { /** * @implNote The first element of the lines list holds the item's display name, * as it's a list of all lines that will be displayed in the tooltip. diff --git a/src/main/java/de/hysky/skyblocker/utils/container/ContainerMatcher.java b/src/main/java/de/hysky/skyblocker/utils/container/ContainerMatcher.java new file mode 100644 index 00000000..52418f22 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/utils/container/ContainerMatcher.java @@ -0,0 +1,17 @@ +package de.hysky.skyblocker.utils.container; + +import net.minecraft.client.gui.screen.ingame.HandledScreen; +import org.jetbrains.annotations.NotNull; + +public interface ContainerMatcher { + /** + * Tests if the given screen should be handled by this matcher. + * @return {@code true} if this matcher should apply to the given screen, {@code false} otherwise + */ + boolean test(@NotNull HandledScreen screen); + + /** + * @return {@code true} if this matcher is enabled, {@code false} otherwise + */ + boolean isEnabled(); +} diff --git a/src/main/java/de/hysky/skyblocker/utils/container/ContainerSolver.java b/src/main/java/de/hysky/skyblocker/utils/container/ContainerSolver.java index 6d3240ea..f3cb400e 100644 --- a/src/main/java/de/hysky/skyblocker/utils/container/ContainerSolver.java +++ b/src/main/java/de/hysky/skyblocker/utils/container/ContainerSolver.java @@ -1,38 +1,36 @@ package de.hysky.skyblocker.utils.container; -import org.intellij.lang.annotations.Language; -import org.jetbrains.annotations.NotNull; - -import java.util.regex.Pattern; - -/** - * Simple implementation of a container solver. Extend this class to add a new gui solver, - * like terminal solvers or experiment solvers and add it to {@link ContainerSolverManager#solvers}. - */ -public abstract class ContainerSolver extends RegexContainerMatcher implements AbstractContainerSolver { - /** - * Utility constructor that will compile the given string into a pattern. - * - * @see #ContainerSolver(Pattern) - */ - protected ContainerSolver(@NotNull @Language("RegExp") String titlePattern) { - super(titlePattern); - } - - /** - * Creates a ContainerSolver that will be applied to screens with titles that match the given pattern. - * - * @param titlePattern The pattern to match the screen title against. - */ - protected ContainerSolver(@NotNull Pattern titlePattern) { - super(titlePattern); - } - - // A container solver that applies to every screen doesn't make sense, - // so we don't provide a constructor for that and force getTitlePattern to be @NotNull - @Override - public @NotNull Pattern getTitlePattern() { - assert super.getTitlePattern() != null; - return super.getTitlePattern(); - } +import de.hysky.skyblocker.SkyblockerMod; +import de.hysky.skyblocker.utils.render.gui.ColorHighlight; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; +import net.minecraft.client.gui.screen.ingame.GenericContainerScreen; +import net.minecraft.item.ItemStack; + +import java.util.List; + +public interface ContainerSolver extends ContainerMatcher { + List getColors(Int2ObjectMap slots); + + default void start(GenericContainerScreen screen) {} + + default void reset() {} + + default boolean onClickSlot(int slot, ItemStack stack, int screenId) { + return false; + } + + static void markHighlightsDirty() { + SkyblockerMod.getInstance().containerSolverManager.markDirty(); + } + + static void trimEdges(Int2ObjectMap slots, int rows) { + for (int i = 0; i < rows; i++) { + slots.remove(9 * i); + slots.remove(9 * i + 8); + } + for (int i = 1; i < 8; i++) { + slots.remove(i); + slots.remove((rows - 1) * 9 + i); + } + } } diff --git a/src/main/java/de/hysky/skyblocker/utils/container/ContainerSolverManager.java b/src/main/java/de/hysky/skyblocker/utils/container/ContainerSolverManager.java index 77833a67..1e2bce16 100644 --- a/src/main/java/de/hysky/skyblocker/utils/container/ContainerSolverManager.java +++ b/src/main/java/de/hysky/skyblocker/utils/container/ContainerSolverManager.java @@ -29,11 +29,11 @@ import org.jetbrains.annotations.NotNull; import java.util.List; /** - * Manager class for {@link ContainerSolver}s like terminal solvers and experiment solvers. To add a new gui solver, extend {@link ContainerSolver} and register it in {@link #ContainerSolverManager()}. + * Manager class for {@link SimpleContainerSolver}s like terminal solvers and experiment solvers. To add a new gui solver, extend {@link SimpleContainerSolver} and register it in {@link #ContainerSolverManager()}. */ public class ContainerSolverManager { - private final AbstractContainerSolver[] solvers; - private AbstractContainerSolver currentSolver = null; + private final ContainerSolver[] solvers; + private ContainerSolver currentSolver = null; private List highlights; /** * Useful for keeping track of a solver's state in a Screen instance, such as if Hypixel closes & reopens a screen after every click (as they do with terminals). @@ -41,7 +41,7 @@ public class ContainerSolverManager { private int screenId = 0; public ContainerSolverManager() { - solvers = new AbstractContainerSolver[]{ + solvers = new ContainerSolver[]{ new ColorTerminal(), new OrderTerminal(), new StartsWithTerminal(), @@ -57,7 +57,7 @@ public class ContainerSolverManager { }; } - public AbstractContainerSolver getCurrentSolver() { + public ContainerSolver getCurrentSolver() { return currentSolver; } @@ -81,9 +81,9 @@ public class ContainerSolverManager { public void onSetScreen(@NotNull GenericContainerScreen screen) { String screenName = screen.getTitle().getString(); - for (AbstractContainerSolver solver : solvers) { + for (ContainerSolver solver : solvers) { if (solver.isEnabled()) { - if (solver instanceof ContainerSolver containerSolver && containerSolver.test(screenName)) { + if (solver instanceof SimpleContainerSolver containerSolver && containerSolver.test(screenName)) { ++screenId; currentSolver = containerSolver; currentSolver.start(screen); diff --git a/src/main/java/de/hysky/skyblocker/utils/container/RegexContainerMatcher.java b/src/main/java/de/hysky/skyblocker/utils/container/RegexContainerMatcher.java index a8a8e3c2..4df0fe1a 100644 --- a/src/main/java/de/hysky/skyblocker/utils/container/RegexContainerMatcher.java +++ b/src/main/java/de/hysky/skyblocker/utils/container/RegexContainerMatcher.java @@ -10,9 +10,9 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; /** - * A regex implementation of {@link AbstractContainerMatcher} that matches the title of the screen. + * A regex implementation of {@link ContainerMatcher} that matches the title of the screen. */ -public abstract class RegexContainerMatcher implements AbstractContainerMatcher { +public abstract class RegexContainerMatcher implements ContainerMatcher { /** * The title of the screen must match this pattern for this to be applied. Null means it will be applied to all screens. * diff --git a/src/main/java/de/hysky/skyblocker/utils/container/SimpleContainerSolver.java b/src/main/java/de/hysky/skyblocker/utils/container/SimpleContainerSolver.java new file mode 100644 index 00000000..7d8b7417 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/utils/container/SimpleContainerSolver.java @@ -0,0 +1,38 @@ +package de.hysky.skyblocker.utils.container; + +import org.intellij.lang.annotations.Language; +import org.jetbrains.annotations.NotNull; + +import java.util.regex.Pattern; + +/** + * Simple implementation of a container solver. Extend this class to add a new gui solver, + * like terminal solvers or experiment solvers and add it to {@link ContainerSolverManager#solvers}. + */ +public abstract class SimpleContainerSolver extends RegexContainerMatcher implements ContainerSolver { + /** + * Utility constructor that will compile the given string into a pattern. + * + * @see #SimpleContainerSolver(Pattern) + */ + protected SimpleContainerSolver(@NotNull @Language("RegExp") String titlePattern) { + super(titlePattern); + } + + /** + * Creates a ContainerSolver that will be applied to screens with titles that match the given pattern. + * + * @param titlePattern The pattern to match the screen title against. + */ + protected SimpleContainerSolver(@NotNull Pattern titlePattern) { + super(titlePattern); + } + + // A container solver that applies to every screen doesn't make sense, + // so we don't provide a constructor for that and force getTitlePattern to be @NotNull + @Override + public @NotNull Pattern getTitlePattern() { + assert super.getTitlePattern() != null; + return super.getTitlePattern(); + } +} -- cgit From f26ac1e5a63d47d73995e22b12ebdcbc0e26a57f Mon Sep 17 00:00:00 2001 From: Rime <81419447+Emirlol@users.noreply.github.com> Date: Fri, 21 Jun 2024 07:47:26 +0300 Subject: Oops, missed a few --- .../skyblock/item/slottext/SimpleSlotTextAdder.java | 4 ++-- .../skyblock/item/slottext/SlotTextManager.java | 10 +++++----- .../skyblock/item/tooltip/SimpleTooltipAdder.java | 4 ++-- .../skyblock/item/tooltip/TooltipManager.java | 12 ++++++------ .../utils/container/AbstractSlotTextAdder.java | 21 --------------------- .../utils/container/AbstractTooltipAdder.java | 18 ------------------ .../skyblocker/utils/container/SlotTextAdder.java | 21 +++++++++++++++++++++ .../skyblocker/utils/container/TooltipAdder.java | 18 ++++++++++++++++++ 8 files changed, 54 insertions(+), 54 deletions(-) delete mode 100644 src/main/java/de/hysky/skyblocker/utils/container/AbstractSlotTextAdder.java delete mode 100644 src/main/java/de/hysky/skyblocker/utils/container/AbstractTooltipAdder.java create mode 100644 src/main/java/de/hysky/skyblocker/utils/container/SlotTextAdder.java create mode 100644 src/main/java/de/hysky/skyblocker/utils/container/TooltipAdder.java (limited to 'src/main/java/de/hysky/skyblocker') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SimpleSlotTextAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SimpleSlotTextAdder.java index 068640e4..1eb3e5c2 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SimpleSlotTextAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SimpleSlotTextAdder.java @@ -1,7 +1,7 @@ package de.hysky.skyblocker.skyblock.item.slottext; import de.hysky.skyblocker.config.SkyblockerConfigManager; -import de.hysky.skyblocker.utils.container.AbstractSlotTextAdder; +import de.hysky.skyblocker.utils.container.SlotTextAdder; import de.hysky.skyblocker.utils.container.RegexContainerMatcher; import org.intellij.lang.annotations.Language; import org.jetbrains.annotations.NotNull; @@ -12,7 +12,7 @@ import java.util.regex.Pattern; * Simple implementation of a slot text adder. * Extend this class and add it to {@link SlotTextManager#adders} to add text to any arbitrary slot. */ -public abstract class SimpleSlotTextAdder extends RegexContainerMatcher implements AbstractSlotTextAdder { +public abstract class SimpleSlotTextAdder extends RegexContainerMatcher implements SlotTextAdder { /** * Utility constructor that will compile the given string into a pattern. * diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextManager.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextManager.java index a13bc28a..fa7036c2 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextManager.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextManager.java @@ -3,7 +3,7 @@ package de.hysky.skyblocker.skyblock.item.slottext; import de.hysky.skyblocker.skyblock.bazaar.BazaarHelper; import de.hysky.skyblocker.skyblock.item.slottext.adders.*; import de.hysky.skyblocker.utils.Utils; -import de.hysky.skyblocker.utils.container.AbstractSlotTextAdder; +import de.hysky.skyblocker.utils.container.SlotTextAdder; import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawContext; @@ -17,7 +17,7 @@ import java.util.ArrayList; import java.util.List; public class SlotTextManager { - private static final AbstractSlotTextAdder[] adders = new AbstractSlotTextAdder[]{ + private static final SlotTextAdder[] adders = new SlotTextAdder[]{ new EssenceShopAdder(), new EnchantmentLevelAdder(), new MinionLevelAdder(), @@ -38,7 +38,7 @@ public class SlotTextManager { new BazaarHelper(), new StatsTuningAdder() }; - private static final ArrayList currentScreenAdders = new ArrayList<>(); + private static final ArrayList currentScreenAdders = new ArrayList<>(); private SlotTextManager() { } @@ -53,7 +53,7 @@ public class SlotTextManager { } private static void onScreenChange(HandledScreen screen) { - for (AbstractSlotTextAdder adder : adders) { + for (SlotTextAdder adder : adders) { if (!adder.isEnabled()) continue; if (adder.test(screen)) { currentScreenAdders.add(adder); @@ -71,7 +71,7 @@ public class SlotTextManager { @NotNull public static List getText(@NotNull ItemStack itemStack, int slotId) { if (currentScreenAdders.isEmpty()) return List.of(); - for (AbstractSlotTextAdder adder : currentScreenAdders) { + for (SlotTextAdder adder : currentScreenAdders) { List text = adder.getText(itemStack, slotId); if (!text.isEmpty()) return text; } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/SimpleTooltipAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/SimpleTooltipAdder.java index d9533da3..565fecbb 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/SimpleTooltipAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/SimpleTooltipAdder.java @@ -1,7 +1,7 @@ package de.hysky.skyblocker.skyblock.item.tooltip; import de.hysky.skyblocker.utils.container.RegexContainerMatcher; -import de.hysky.skyblocker.utils.container.AbstractTooltipAdder; +import de.hysky.skyblocker.utils.container.TooltipAdder; import org.intellij.lang.annotations.Language; import org.jetbrains.annotations.NotNull; @@ -11,7 +11,7 @@ import java.util.regex.Pattern; * Simple implementation of a tooltip adder. * Extend this class and add it to {@link TooltipManager#adders} to add additional text to tooltips. */ -public abstract class SimpleTooltipAdder extends RegexContainerMatcher implements AbstractTooltipAdder { +public abstract class SimpleTooltipAdder extends RegexContainerMatcher implements TooltipAdder { /** * The priority of this adder. Lower priority means it will be applied first. * @apiNote Consider adding this as a parameter to your class' constructor and diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipManager.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipManager.java index 2c81cff4..e89a1995 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipManager.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipManager.java @@ -6,7 +6,7 @@ import de.hysky.skyblocker.skyblock.chocolatefactory.ChocolateFactorySolver; import de.hysky.skyblocker.skyblock.item.tooltip.adders.*; import de.hysky.skyblocker.skyblock.item.tooltip.adders.CraftPriceTooltip; import de.hysky.skyblocker.utils.Utils; -import de.hysky.skyblocker.utils.container.AbstractTooltipAdder; +import de.hysky.skyblocker.utils.container.TooltipAdder; import net.fabricmc.fabric.api.client.item.v1.ItemTooltipCallback; import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents; import net.minecraft.client.MinecraftClient; @@ -21,7 +21,7 @@ import java.util.Comparator; import java.util.List; public class TooltipManager { - private static final AbstractTooltipAdder[] adders = new AbstractTooltipAdder[]{ + private static final TooltipAdder[] adders = new TooltipAdder[]{ new LineSmoothener(), // Applies before anything else new SupercraftReminder(), new ChocolateFactorySolver.Tooltip(), @@ -39,7 +39,7 @@ public class TooltipManager { new ColorTooltip(11), new AccessoryTooltip(12), }; - private static final ArrayList currentScreenAdders = new ArrayList<>(); + private static final ArrayList currentScreenAdders = new ArrayList<>(); private TooltipManager() { } @@ -62,12 +62,12 @@ public class TooltipManager { private static void onScreenChange(HandledScreen screen) { currentScreenAdders.clear(); - for (AbstractTooltipAdder adder : adders) { + for (TooltipAdder adder : adders) { if (adder.isEnabled() && adder.test(screen)) { currentScreenAdders.add(adder); } } - currentScreenAdders.sort(Comparator.comparingInt(AbstractTooltipAdder::getPriority)); + currentScreenAdders.sort(Comparator.comparingInt(TooltipAdder::getPriority)); } /** @@ -85,7 +85,7 @@ public class TooltipManager { @Deprecated public static List addToTooltip(@Nullable Slot focusedSlot, ItemStack stack, List lines) { if (!Utils.isOnSkyblock()) return lines; - for (AbstractTooltipAdder adder : currentScreenAdders) { + for (TooltipAdder adder : currentScreenAdders) { adder.addToTooltip(focusedSlot, stack, lines); } return lines; diff --git a/src/main/java/de/hysky/skyblocker/utils/container/AbstractSlotTextAdder.java b/src/main/java/de/hysky/skyblocker/utils/container/AbstractSlotTextAdder.java deleted file mode 100644 index 5e13c644..00000000 --- a/src/main/java/de/hysky/skyblocker/utils/container/AbstractSlotTextAdder.java +++ /dev/null @@ -1,21 +0,0 @@ -package de.hysky.skyblocker.utils.container; - -import de.hysky.skyblocker.skyblock.item.slottext.SlotText; -import net.minecraft.item.ItemStack; -import org.jetbrains.annotations.NotNull; - -import java.util.List; - -public interface AbstractSlotTextAdder extends ContainerMatcher { - - /** - * This method will be called for each rendered slot. Consider using a switch statement on {@code slotId} if you wish to limit the text to specific slots. - * - * @return A list of positioned text to be rendered. Return {@link List#of()} if no text should be rendered. - * @implNote By minecraft's design, scaled text inexplicably moves around. - * It's also not anti-aliased, so it looks horribly jagged and unreadable when scaled down too much. - * So, limit your text to 3 characters (or roughly less than 20 width) if you want it to not look horrible. - */ - @NotNull - List getText(@NotNull ItemStack itemStack, int slotId); -} diff --git a/src/main/java/de/hysky/skyblocker/utils/container/AbstractTooltipAdder.java b/src/main/java/de/hysky/skyblocker/utils/container/AbstractTooltipAdder.java deleted file mode 100644 index 5da64f52..00000000 --- a/src/main/java/de/hysky/skyblocker/utils/container/AbstractTooltipAdder.java +++ /dev/null @@ -1,18 +0,0 @@ -package de.hysky.skyblocker.utils.container; - -import net.minecraft.item.ItemStack; -import net.minecraft.screen.slot.Slot; -import net.minecraft.text.Text; -import org.jetbrains.annotations.Nullable; - -import java.util.List; - -public interface AbstractTooltipAdder extends ContainerMatcher { - /** - * @implNote The first element of the lines list holds the item's display name, - * as it's a list of all lines that will be displayed in the tooltip. - */ - void addToTooltip(@Nullable Slot focusedSlot, ItemStack stack, List lines); - - int getPriority(); -} diff --git a/src/main/java/de/hysky/skyblocker/utils/container/SlotTextAdder.java b/src/main/java/de/hysky/skyblocker/utils/container/SlotTextAdder.java new file mode 100644 index 00000000..c0e4bc1c --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/utils/container/SlotTextAdder.java @@ -0,0 +1,21 @@ +package de.hysky.skyblocker.utils.container; + +import de.hysky.skyblocker.skyblock.item.slottext.SlotText; +import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; + +import java.util.List; + +public interface SlotTextAdder extends ContainerMatcher { + + /** + * This method will be called for each rendered slot. Consider using a switch statement on {@code slotId} if you wish to limit the text to specific slots. + * + * @return A list of positioned text to be rendered. Return {@link List#of()} if no text should be rendered. + * @implNote By minecraft's design, scaled text inexplicably moves around. + * It's also not anti-aliased, so it looks horribly jagged and unreadable when scaled down too much. + * So, limit your text to 3 characters (or roughly less than 20 width) if you want it to not look horrible. + */ + @NotNull + List getText(@NotNull ItemStack itemStack, int slotId); +} diff --git a/src/main/java/de/hysky/skyblocker/utils/container/TooltipAdder.java b/src/main/java/de/hysky/skyblocker/utils/container/TooltipAdder.java new file mode 100644 index 00000000..2ff3fdf1 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/utils/container/TooltipAdder.java @@ -0,0 +1,18 @@ +package de.hysky.skyblocker.utils.container; + +import net.minecraft.item.ItemStack; +import net.minecraft.screen.slot.Slot; +import net.minecraft.text.Text; +import org.jetbrains.annotations.Nullable; + +import java.util.List; + +public interface TooltipAdder extends ContainerMatcher { + /** + * @implNote The first element of the lines list holds the item's display name, + * as it's a list of all lines that will be displayed in the tooltip. + */ + void addToTooltip(@Nullable Slot focusedSlot, ItemStack stack, List lines); + + int getPriority(); +} -- cgit From 3de616fcaca8e39a4d1caef6fdd4f984adb7e000 Mon Sep 17 00:00:00 2001 From: Rime <81419447+Emirlol@users.noreply.github.com> Date: Fri, 21 Jun 2024 09:12:11 +0300 Subject: Change slot text to have multiple states The enum SlotTextState is very self-descriptive if you wonder what the states are --- .../config/categories/GeneralCategory.java | 16 ++++++++-- .../skyblocker/config/configs/GeneralConfig.java | 6 +++- .../item/slottext/SimpleSlotTextAdder.java | 8 +---- .../skyblock/item/slottext/SlotTextManager.java | 35 +++++++++++++++++++--- .../skyblock/item/slottext/SlotTextState.java | 23 ++++++++++++++ .../skyblock/item/slottext/TextPosition.java | 3 ++ .../skyblocker/utils/container/SlotTextAdder.java | 7 +++++ .../resources/assets/skyblocker/lang/en_us.json | 3 ++ 8 files changed, 87 insertions(+), 14 deletions(-) create mode 100644 src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextState.java (limited to 'src/main/java/de/hysky/skyblocker') 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 ab674b18..abfb7c16 100644 --- a/src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java +++ b/src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java @@ -5,10 +5,12 @@ import de.hysky.skyblocker.config.ConfigUtils; import de.hysky.skyblocker.config.SkyblockerConfig; import de.hysky.skyblocker.config.configs.GeneralConfig; import de.hysky.skyblocker.skyblock.item.tooltip.adders.CraftPriceTooltip; +import de.hysky.skyblocker.skyblock.item.slottext.SlotTextState; import de.hysky.skyblocker.skyblock.shortcut.ShortcutsConfigScreen; import dev.isxander.yacl3.api.*; import dev.isxander.yacl3.api.controller.FloatSliderControllerBuilder; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.screen.option.KeybindsScreen; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -234,13 +236,18 @@ public class GeneralCategory { .group(OptionGroup.createBuilder() .name(Text.translatable("skyblocker.config.general.itemInfoDisplay")) .collapsed(true) - .option(Option.createBuilder() + .option(Option.createBuilder() .name(Text.translatable("skyblocker.config.general.itemInfoDisplay.slotText")) .description(OptionDescription.of(Text.translatable("skyblocker.config.general.itemInfoDisplay.slotText.@Tooltip"))) .binding(defaults.general.itemInfoDisplay.slotText, () -> config.general.itemInfoDisplay.slotText, newValue -> config.general.itemInfoDisplay.slotText = newValue) - .controller(ConfigUtils::createBooleanController) + .controller(ConfigUtils::createEnumCyclingListController) + .build()) + .option(ButtonOption.createBuilder() + .name(Text.translatable("skyblocker.config.general.itemInfoDisplay.slotText.shortcutToKeybindsSettings")) + .action((screen, opt) -> MinecraftClient.getInstance().setScreen(new KeybindsScreen(screen, MinecraftClient.getInstance().options))) + .text(Text.translatable("skyblocker.config.general.itemInfoDisplay.slotText.shortcutToKeybindsSettings.@Text")) .build()) .option(Option.createBuilder() .name(Text.translatable("skyblocker.config.general.itemInfoDisplay.attributeShardInfo")) @@ -301,6 +308,11 @@ public class GeneralCategory { newValue -> config.general.wikiLookup.enableWikiLookup = newValue) .controller(ConfigUtils::createBooleanController) .build()) + .option(ButtonOption.createBuilder() + .name(Text.translatable("skyblocker.config.shortcutToKeybindsSettings")) + .action((screen, opt) -> MinecraftClient.getInstance().setScreen(new KeybindsScreen(screen, MinecraftClient.getInstance().options))) + .text(Text.translatable("skyblocker.config.shortcutToKeybindsSettings.@Text")) + .build()) .option(Option.createBuilder() .name(Text.translatable("skyblocker.config.general.wikiLookup.officialWiki")) .description(OptionDescription.of(Text.translatable("skyblocker.config.general.wikiLookup.officialWiki.@Tooltip"))) diff --git a/src/main/java/de/hysky/skyblocker/config/configs/GeneralConfig.java b/src/main/java/de/hysky/skyblocker/config/configs/GeneralConfig.java index 691e6f79..7ea1616e 100644 --- a/src/main/java/de/hysky/skyblocker/config/configs/GeneralConfig.java +++ b/src/main/java/de/hysky/skyblocker/config/configs/GeneralConfig.java @@ -3,6 +3,7 @@ package de.hysky.skyblocker.config.configs; import de.hysky.skyblocker.SkyblockerMod; import de.hysky.skyblocker.skyblock.item.CustomArmorAnimatedDyes; import de.hysky.skyblocker.skyblock.item.CustomArmorTrims; +import de.hysky.skyblocker.skyblock.item.slottext.SlotTextState; import dev.isxander.yacl3.config.v2.api.SerialEntry; import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; @@ -164,7 +165,10 @@ public class GeneralConfig { public static class ItemInfoDisplay { @SerialEntry - public boolean slotText = true; + public SlotTextState slotText = SlotTextState.ENABLED; + + @SerialEntry + public boolean slotTextToggled = true; @SerialEntry public boolean attributeShardInfo = true; diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SimpleSlotTextAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SimpleSlotTextAdder.java index 1eb3e5c2..205e48d8 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SimpleSlotTextAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SimpleSlotTextAdder.java @@ -1,8 +1,7 @@ package de.hysky.skyblocker.skyblock.item.slottext; -import de.hysky.skyblocker.config.SkyblockerConfigManager; -import de.hysky.skyblocker.utils.container.SlotTextAdder; import de.hysky.skyblocker.utils.container.RegexContainerMatcher; +import de.hysky.skyblocker.utils.container.SlotTextAdder; import org.intellij.lang.annotations.Language; import org.jetbrains.annotations.NotNull; @@ -37,9 +36,4 @@ public abstract class SimpleSlotTextAdder extends RegexContainerMatcher implemen protected SimpleSlotTextAdder() { super(); } - - @Override - public boolean isEnabled() { - return SkyblockerConfigManager.get().general.itemInfoDisplay.slotText; - } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextManager.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextManager.java index fa7036c2..7ab7570c 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextManager.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextManager.java @@ -1,17 +1,22 @@ package de.hysky.skyblocker.skyblock.item.slottext; +import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.skyblock.bazaar.BazaarHelper; import de.hysky.skyblocker.skyblock.item.slottext.adders.*; import de.hysky.skyblocker.utils.Utils; import de.hysky.skyblocker.utils.container.SlotTextAdder; +import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper; import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents; +import net.fabricmc.fabric.api.client.screen.v1.ScreenKeyboardEvents; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.ingame.HandledScreen; +import net.minecraft.client.option.KeyBinding; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.item.ItemStack; import net.minecraft.screen.slot.Slot; import org.jetbrains.annotations.NotNull; +import org.lwjgl.glfw.GLFW; import java.util.ArrayList; import java.util.List; @@ -39,6 +44,8 @@ public class SlotTextManager { new StatsTuningAdder() }; private static final ArrayList currentScreenAdders = new ArrayList<>(); + private static final KeyBinding keyBinding = KeyBindingHelper.registerKeyBinding(new KeyBinding("key.skyblocker.slottext", GLFW.GLFW_KEY_LEFT_ALT, "key.categories.skyblocker")); + private static boolean keyHeld = false; private SlotTextManager() { } @@ -49,13 +56,23 @@ public class SlotTextManager { onScreenChange(handledScreen); ScreenEvents.remove(screen).register(ignored -> currentScreenAdders.clear()); } + ScreenKeyboardEvents.afterKeyPress(screen).register((screen1, key, scancode, modifiers) -> { + if (keyBinding.matchesKey(key, scancode)) { + SkyblockerConfigManager.get().general.itemInfoDisplay.slotTextToggled = !SkyblockerConfigManager.get().general.itemInfoDisplay.slotTextToggled; + keyHeld = true; + } + }); + ScreenKeyboardEvents.afterKeyRelease(screen).register((screen1, key, scancode, modifiers) -> { + if (keyBinding.matchesKey(key, scancode)) { + keyHeld = false; + } + }); }); } private static void onScreenChange(HandledScreen screen) { for (SlotTextAdder adder : adders) { - if (!adder.isEnabled()) continue; - if (adder.test(screen)) { + if (adder.isEnabled() && adder.test(screen)) { currentScreenAdders.add(adder); } } @@ -70,7 +87,7 @@ public class SlotTextManager { */ @NotNull public static List getText(@NotNull ItemStack itemStack, int slotId) { - if (currentScreenAdders.isEmpty()) return List.of(); + if (currentScreenAdders.isEmpty() || !isEnabled()) return List.of(); for (SlotTextAdder adder : currentScreenAdders) { List text = adder.getText(itemStack, slotId); if (!text.isEmpty()) return text; @@ -83,7 +100,7 @@ public class SlotTextManager { } public static void renderSlotText(DrawContext context, TextRenderer textRenderer, ItemStack itemStack, int slotId, int x, int y) { - List textList = SlotTextManager.getText(itemStack, slotId); + List textList = getText(itemStack, slotId); if (textList.isEmpty()) return; MatrixStack matrices = context.getMatrices(); @@ -109,4 +126,14 @@ public class SlotTextManager { matrices.pop(); } } + + public static boolean isEnabled() { + return switch (SkyblockerConfigManager.get().general.itemInfoDisplay.slotText) { + case ENABLED -> true; + case DISABLED -> false; + case PRESS_TO_TOGGLE -> SkyblockerConfigManager.get().general.itemInfoDisplay.slotTextToggled; + case HOLD_TO_HIDE -> !keyHeld; + case HOLD_TO_SHOW -> keyHeld; + }; + } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextState.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextState.java new file mode 100644 index 00000000..38280166 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextState.java @@ -0,0 +1,23 @@ +package de.hysky.skyblocker.skyblock.item.slottext; + +/** + * Used in {@link SlotTextManager#isEnabled()} to determine whether the slot text should be shown or not. + */ +public enum SlotTextState { + ENABLED, + HOLD_TO_SHOW, + PRESS_TO_TOGGLE, + HOLD_TO_HIDE, + DISABLED; + + @Override + public String toString() { + return switch (this) { + case ENABLED -> "Enabled"; + case HOLD_TO_SHOW -> "Hold to Show"; + case PRESS_TO_TOGGLE -> "Press to Toggle"; + case HOLD_TO_HIDE -> "Hold to Hide"; + case DISABLED -> "Disabled"; + }; + } +} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/TextPosition.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/TextPosition.java index 052b228d..59f5e7e8 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/TextPosition.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/TextPosition.java @@ -1,5 +1,8 @@ package de.hysky.skyblocker.skyblock.item.slottext; +/** + * Used in {@link SlotText#position} to determine where the slot text should be rendered. + */ public enum TextPosition { TOP_LEFT, TOP_RIGHT, diff --git a/src/main/java/de/hysky/skyblocker/utils/container/SlotTextAdder.java b/src/main/java/de/hysky/skyblocker/utils/container/SlotTextAdder.java index c0e4bc1c..2ee41820 100644 --- a/src/main/java/de/hysky/skyblocker/utils/container/SlotTextAdder.java +++ b/src/main/java/de/hysky/skyblocker/utils/container/SlotTextAdder.java @@ -1,6 +1,8 @@ package de.hysky.skyblocker.utils.container; +import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.skyblock.item.slottext.SlotText; +import de.hysky.skyblocker.skyblock.item.slottext.SlotTextState; import net.minecraft.item.ItemStack; import org.jetbrains.annotations.NotNull; @@ -18,4 +20,9 @@ public interface SlotTextAdder extends ContainerMatcher { */ @NotNull List getText(@NotNull ItemStack itemStack, int slotId); + + @Override + default boolean isEnabled() { + return SkyblockerConfigManager.get().general.itemInfoDisplay.slotText != SlotTextState.DISABLED; + } } diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json index 875b45dd..4ee3ece0 100644 --- a/src/main/resources/assets/skyblocker/lang/en_us.json +++ b/src/main/resources/assets/skyblocker/lang/en_us.json @@ -10,6 +10,7 @@ "key.skyblocker.toggleA": "Toggle tab HUD to screen A", "key.wikiLookup": "Wiki Lookup", "key.itemProtection": "Protect Item", + "key.skyblocker.slottext": "Slot Text", "text.skyblocker.open": "Open", "text.skyblocker.quit_config": "Changes Not Saved", @@ -224,6 +225,8 @@ "skyblocker.config.general.itemInfoDisplay.itemRarityBackgroundsOpacity": "Item Rarity Backgrounds Opacity", "skyblocker.config.general.itemInfoDisplay.slotText": "Slot Text", "skyblocker.config.general.itemInfoDisplay.slotText.@Tooltip": "Displays information such as enchantment book level, minion level, pet level, potion level, prehistoric egg blocks walked, rancher's boots speed cap, and skill level", + "skyblocker.config.general.itemInfoDisplay.slotText.shortcutToKeybindsSettings": "Slot Text Keybind", + "skyblocker.config.general.itemInfoDisplay.slotText.shortcutToKeybindsSettings.@Text": "Click... (opens up keybinds settings)", "skyblocker.config.general.itemList": "Item List", "skyblocker.config.general.itemList.enableItemList": "Enable Item List", -- cgit From 1a550c6a77581a247571da6ce0c5f232525e79e8 Mon Sep 17 00:00:00 2001 From: Rime <81419447+Emirlol@users.noreply.github.com> Date: Fri, 21 Jun 2024 12:03:05 +0300 Subject: Un-debug some stuff in Utils for convenience --- src/main/java/de/hysky/skyblocker/utils/Utils.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) (limited to 'src/main/java/de/hysky/skyblocker') diff --git a/src/main/java/de/hysky/skyblocker/utils/Utils.java b/src/main/java/de/hysky/skyblocker/utils/Utils.java index 042095d1..4de32710 100644 --- a/src/main/java/de/hysky/skyblocker/utils/Utils.java +++ b/src/main/java/de/hysky/skyblocker/utils/Utils.java @@ -3,6 +3,7 @@ package de.hysky.skyblocker.utils; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.mojang.util.UndashedUuid; +import de.hysky.skyblocker.debug.Debug; import de.hysky.skyblocker.events.SkyblockEvents; import de.hysky.skyblocker.mixins.accessors.MessageHandlerAccessor; import de.hysky.skyblocker.skyblock.item.MuseumItemCache; @@ -17,7 +18,6 @@ import net.azureaaron.hmapi.network.packet.s2c.HelloS2CPacket; import net.azureaaron.hmapi.network.packet.s2c.HypixelS2CPacket; import net.azureaaron.hmapi.network.packet.v1.s2c.LocationUpdateS2CPacket; import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents; -import net.fabricmc.loader.api.FabricLoader; import net.minecraft.client.MinecraftClient; import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.client.network.PlayerListEntry; @@ -239,9 +239,8 @@ public class Utils { public static void updatePlayerPresenceFromScoreboard(MinecraftClient client) { List sidebar = STRING_SCOREBOARD; - FabricLoader fabricLoader = FabricLoader.getInstance(); if (client.world == null || client.isInSingleplayer() || sidebar.isEmpty()) { - if (fabricLoader.isDevelopmentEnvironment()) { + if (Debug.debugEnabled()) { sidebar = Collections.emptyList(); } else { isOnSkyblock = false; @@ -249,13 +248,13 @@ public class Utils { } } - if (sidebar.isEmpty() && !fabricLoader.isDevelopmentEnvironment()) return; + if (sidebar.isEmpty() && !Debug.debugEnabled()) return; - if (fabricLoader.isDevelopmentEnvironment() || isConnectedToHypixel(client)) { + if (Debug.debugEnabled() || isConnectedToHypixel(client)) { if (!isOnHypixel) { isOnHypixel = true; } - if (fabricLoader.isDevelopmentEnvironment() || sidebar.getFirst().contains("SKYBLOCK") || sidebar.getFirst().contains("SKIBLOCK")) { + if (Debug.debugEnabled() || sidebar.getFirst().contains("SKYBLOCK") || sidebar.getFirst().contains("SKIBLOCK")) { if (!isOnSkyblock) { if (!isInjected) { isInjected = true; -- cgit From 147ff2ea47d282e6faf81a85f1053b49f6ee73ff Mon Sep 17 00:00:00 2001 From: Rime <81419447+Emirlol@users.noreply.github.com> Date: Wed, 10 Jul 2024 17:28:17 +0300 Subject: Rebase onto master --- .../skyblocker/skyblock/dwarven/CommissionHighlight.java | 9 ++++----- .../skyblock/item/tooltip/adders/CraftPriceTooltip.java | 12 +++++++----- .../skyblocker/utils/container/ContainerSolverManager.java | 2 ++ 3 files changed, 13 insertions(+), 10 deletions(-) (limited to 'src/main/java/de/hysky/skyblocker') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/CommissionHighlight.java b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/CommissionHighlight.java index de26809c..c22a4440 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/CommissionHighlight.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/CommissionHighlight.java @@ -2,8 +2,8 @@ package de.hysky.skyblocker.skyblock.dwarven; import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.utils.ItemUtils; +import de.hysky.skyblocker.utils.container.SimpleContainerSolver; import de.hysky.skyblocker.utils.render.gui.ColorHighlight; -import de.hysky.skyblocker.utils.render.gui.ContainerSolver; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.component.DataComponentTypes; import net.minecraft.item.ItemStack; @@ -11,19 +11,18 @@ import net.minecraft.item.ItemStack; import java.util.ArrayList; import java.util.List; -public class CommissionHighlight extends ContainerSolver { - +public class CommissionHighlight extends SimpleContainerSolver { public CommissionHighlight() { super("^Commissions$"); } @Override - protected boolean isEnabled() { + public boolean isEnabled() { return SkyblockerConfigManager.get().mining.commissionHighlight; } @Override - protected List getColors(String[] groups, Int2ObjectMap slots) { + public List getColors(Int2ObjectMap slots) { List highlights = new ArrayList<>(); for (Int2ObjectMap.Entry entry : slots.int2ObjectEntrySet()) { ItemStack stack = entry.getValue(); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/CraftPriceTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/CraftPriceTooltip.java index f7af446e..20b6b962 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/CraftPriceTooltip.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/CraftPriceTooltip.java @@ -3,7 +3,7 @@ package de.hysky.skyblocker.skyblock.item.tooltip.adders; import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.config.configs.GeneralConfig; import de.hysky.skyblocker.skyblock.item.tooltip.ItemTooltip; -import de.hysky.skyblocker.skyblock.item.tooltip.TooltipAdder; +import de.hysky.skyblocker.skyblock.item.tooltip.SimpleTooltipAdder; import de.hysky.skyblocker.skyblock.item.tooltip.TooltipInfoType; import de.hysky.skyblocker.utils.NEURepoManager; import io.github.moulberry.repo.data.NEUIngredient; @@ -18,12 +18,11 @@ import org.jetbrains.annotations.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -public class CraftPriceTooltip extends TooltipAdder { +public class CraftPriceTooltip extends SimpleTooltipAdder { protected static final Logger LOGGER = LoggerFactory.getLogger(CraftPriceTooltip.class.getName()); private static final Map cachedCraftCosts = new ConcurrentHashMap<>(); private static final int MAX_RECURSION_DEPTH = 15; @@ -34,8 +33,6 @@ public class CraftPriceTooltip extends TooltipAdder { @Override public void addToTooltip(@Nullable Slot focusedSloFt, ItemStack stack, List lines) { - if (SkyblockerConfigManager.get().general.itemTooltip.enableCraftingCost == GeneralConfig.Craft.OFF) return; - String internalID = stack.getSkyblockId(); if (stack.getNeuName() == null || internalID == null) return; @@ -112,4 +109,9 @@ public class CraftPriceTooltip extends TooltipAdder { public static void clearCache() { cachedCraftCosts.clear(); } + + @Override + public boolean isEnabled() { + return SkyblockerConfigManager.get().general.itemTooltip.enableCraftingCost != GeneralConfig.Craft.OFF; + } } diff --git a/src/main/java/de/hysky/skyblocker/utils/container/ContainerSolverManager.java b/src/main/java/de/hysky/skyblocker/utils/container/ContainerSolverManager.java index 1e2bce16..6194852b 100644 --- a/src/main/java/de/hysky/skyblocker/utils/container/ContainerSolverManager.java +++ b/src/main/java/de/hysky/skyblocker/utils/container/ContainerSolverManager.java @@ -11,6 +11,7 @@ import de.hysky.skyblocker.skyblock.dungeon.terminal.ColorTerminal; import de.hysky.skyblocker.skyblock.dungeon.terminal.LightsOnTerminal; import de.hysky.skyblocker.skyblock.dungeon.terminal.OrderTerminal; import de.hysky.skyblocker.skyblock.dungeon.terminal.StartsWithTerminal; +import de.hysky.skyblocker.skyblock.dwarven.CommissionHighlight; import de.hysky.skyblocker.skyblock.experiment.ChronomatronSolver; import de.hysky.skyblocker.skyblock.experiment.SuperpairsSolver; import de.hysky.skyblocker.skyblock.experiment.UltrasequencerSolver; @@ -49,6 +50,7 @@ public class ContainerSolverManager { new CroesusHelper(), new CroesusProfit(), new ChronomatronSolver(), + new CommissionHighlight(), new SuperpairsSolver(), UltrasequencerSolver.INSTANCE, new NewYearCakeBagHelper(), -- cgit From e316a165d8f7f812afa6d3c9f2f0f576fd1e6f93 Mon Sep 17 00:00:00 2001 From: Rime <81419447+Emirlol@users.noreply.github.com> Date: Wed, 10 Jul 2024 17:37:05 +0300 Subject: Change tooltip manager to allow adding tooltips on non-handled screens --- .../de/hysky/skyblocker/skyblock/item/tooltip/TooltipManager.java | 8 +++----- .../de/hysky/skyblocker/utils/container/ContainerMatcher.java | 4 ++-- .../hysky/skyblocker/utils/container/RegexContainerMatcher.java | 4 ++-- 3 files changed, 7 insertions(+), 9 deletions(-) (limited to 'src/main/java/de/hysky/skyblocker') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipManager.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipManager.java index e89a1995..ad4e181d 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipManager.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipManager.java @@ -4,12 +4,12 @@ import de.hysky.skyblocker.mixins.accessors.HandledScreenAccessor; import de.hysky.skyblocker.skyblock.bazaar.ReorderHelper; import de.hysky.skyblocker.skyblock.chocolatefactory.ChocolateFactorySolver; import de.hysky.skyblocker.skyblock.item.tooltip.adders.*; -import de.hysky.skyblocker.skyblock.item.tooltip.adders.CraftPriceTooltip; import de.hysky.skyblocker.utils.Utils; import de.hysky.skyblocker.utils.container.TooltipAdder; import net.fabricmc.fabric.api.client.item.v1.ItemTooltipCallback; import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.ingame.HandledScreen; import net.minecraft.item.ItemStack; import net.minecraft.screen.slot.Slot; @@ -53,14 +53,12 @@ public class TooltipManager { } }); ScreenEvents.AFTER_INIT.register((client, screen, width, height) -> { - if (screen instanceof HandledScreen handledScreen) { - onScreenChange(handledScreen); - } + onScreenChange(screen); ScreenEvents.remove(screen).register(ignored -> currentScreenAdders.clear()); }); } - private static void onScreenChange(HandledScreen screen) { + private static void onScreenChange(Screen screen) { currentScreenAdders.clear(); for (TooltipAdder adder : adders) { if (adder.isEnabled() && adder.test(screen)) { diff --git a/src/main/java/de/hysky/skyblocker/utils/container/ContainerMatcher.java b/src/main/java/de/hysky/skyblocker/utils/container/ContainerMatcher.java index 52418f22..61d3821e 100644 --- a/src/main/java/de/hysky/skyblocker/utils/container/ContainerMatcher.java +++ b/src/main/java/de/hysky/skyblocker/utils/container/ContainerMatcher.java @@ -1,6 +1,6 @@ package de.hysky.skyblocker.utils.container; -import net.minecraft.client.gui.screen.ingame.HandledScreen; +import net.minecraft.client.gui.screen.Screen; import org.jetbrains.annotations.NotNull; public interface ContainerMatcher { @@ -8,7 +8,7 @@ public interface ContainerMatcher { * Tests if the given screen should be handled by this matcher. * @return {@code true} if this matcher should apply to the given screen, {@code false} otherwise */ - boolean test(@NotNull HandledScreen screen); + boolean test(@NotNull Screen screen); /** * @return {@code true} if this matcher is enabled, {@code false} otherwise diff --git a/src/main/java/de/hysky/skyblocker/utils/container/RegexContainerMatcher.java b/src/main/java/de/hysky/skyblocker/utils/container/RegexContainerMatcher.java index 4df0fe1a..4f9d49ae 100644 --- a/src/main/java/de/hysky/skyblocker/utils/container/RegexContainerMatcher.java +++ b/src/main/java/de/hysky/skyblocker/utils/container/RegexContainerMatcher.java @@ -1,7 +1,7 @@ package de.hysky.skyblocker.utils.container; import de.hysky.skyblocker.skyblock.ChestValue; -import net.minecraft.client.gui.screen.ingame.HandledScreen; +import net.minecraft.client.gui.screen.Screen; import org.intellij.lang.annotations.Language; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -26,7 +26,7 @@ public abstract class RegexContainerMatcher implements ContainerMatcher { public String[] groups = null; @Override - public boolean test(@NotNull HandledScreen screen) { + public boolean test(@NotNull Screen screen) { return test(screen.getTitle().getString()); } -- cgit From a846b52122422887e464d83ca01f0b771f3882f5 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Mon, 22 Jul 2024 14:55:03 +0800 Subject: Clean up rebased code --- .../skyblocker/skyblock/bazaar/BazaarHelper.java | 20 +- .../skyblocker/skyblock/bazaar/ReorderHelper.java | 39 ++- .../chocolatefactory/ChocolateFactorySolver.java | 302 ++++++++++----------- .../skyblock/item/slottext/SlotTextManager.java | 13 +- .../item/slottext/adders/AttributeShardAdder.java | 4 +- .../item/slottext/adders/CatacombsLevelAdder.java | 14 +- .../item/slottext/adders/CollectionAdder.java | 4 +- .../item/slottext/adders/CommunityShopAdder.java | 8 +- .../slottext/adders/EnchantmentLevelAdder.java | 10 +- .../item/slottext/adders/EssenceShopAdder.java | 4 +- .../item/slottext/adders/MinionLevelAdder.java | 8 +- .../item/slottext/adders/PetLevelAdder.java | 10 +- .../item/slottext/adders/PotionLevelAdder.java | 4 +- .../slottext/adders/PowerStonesGuideAdder.java | 4 +- .../item/slottext/adders/PrehistoricEggAdder.java | 4 +- .../slottext/adders/RancherBootsSpeedAdder.java | 8 +- .../item/slottext/adders/SkillLevelAdder.java | 4 +- .../item/slottext/adders/SkyblockLevelAdder.java | 6 +- .../item/slottext/adders/StatsTuningAdder.java | 4 +- .../item/slottext/adders/YourEssenceAdder.java | 4 +- .../skyblock/item/tooltip/BackpackPreview.java | 2 +- .../skyblock/item/tooltip/TooltipManager.java | 4 +- .../item/tooltip/adders/EssenceShopPrice.java | 11 +- .../utils/container/ContainerSolverManager.java | 4 +- .../skyblocker/utils/container/SlotTextAdder.java | 4 +- 25 files changed, 271 insertions(+), 228 deletions(-) (limited to 'src/main/java/de/hysky/skyblocker') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/bazaar/BazaarHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/bazaar/BazaarHelper.java index 8b83b06b..8fbeb6e0 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/bazaar/BazaarHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/bazaar/BazaarHelper.java @@ -1,8 +1,8 @@ package de.hysky.skyblocker.skyblock.bazaar; import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.skyblock.item.slottext.SimpleSlotTextAdder; import de.hysky.skyblocker.skyblock.item.slottext.SlotText; -import de.hysky.skyblocker.skyblock.item.slottext.SlotTextAdder; import de.hysky.skyblocker.utils.ItemUtils; import net.minecraft.item.ItemStack; import net.minecraft.screen.slot.Slot; @@ -11,12 +11,13 @@ import net.minecraft.text.Text; import net.minecraft.util.Formatting; import org.apache.commons.lang3.math.NumberUtils; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; -public class BazaarHelper extends SlotTextAdder { +public class BazaarHelper extends SimpleSlotTextAdder { private static final Pattern FILLED_PATTERN = Pattern.compile("Filled: \\S+ \\(?([\\d.]+)%\\)?!?"); private static final int RED = 0xe60b1e; private static final int YELLOW = 0xe6ba0b; @@ -27,14 +28,19 @@ public class BazaarHelper extends SlotTextAdder { } @Override - public @NotNull List getText(Slot slot) { - if (!SkyblockerConfigManager.get().helpers.bazaar.enableBazaarHelper) return List.of(); + public boolean isEnabled() { + return SkyblockerConfigManager.get().helpers.bazaar.enableBazaarHelper; + } + + @Override + public @NotNull List getText(@Nullable Slot slot, @NotNull ItemStack stack, int slotId) { + if (slot == null) return List.of(); // Skip the first row as it's always glass panes. - if (slot.id < 10) return List.of(); + if (slotId < 10) return List.of(); // Skip the last 10 items. 11 is subtracted because size is 1-based so the last slot is size - 1. - if (slot.id > slot.inventory.size() - 11) return List.of(); //Note that this also skips the slots in player's inventory (anything above 36/45/54 depending on the order count) + if (slotId > slot.inventory.size() - 11) return List.of(); //Note that this also skips the slots in player's inventory (anything above 36/45/54 depending on the order count) - int column = slot.id % 9; + int column = slotId % 9; if (column == 0 || column == 8) return List.of(); // Skip the first and last column as those are always glass panes as well. ItemStack item = slot.getStack(); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/bazaar/ReorderHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/bazaar/ReorderHelper.java index c2b11926..f6c53528 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/bazaar/ReorderHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/bazaar/ReorderHelper.java @@ -1,9 +1,9 @@ package de.hysky.skyblocker.skyblock.bazaar; -import de.hysky.skyblocker.skyblock.item.tooltip.TooltipAdder; import de.hysky.skyblocker.utils.ItemUtils; +import de.hysky.skyblocker.utils.container.SimpleContainerSolver; +import de.hysky.skyblocker.utils.container.TooltipAdder; import de.hysky.skyblocker.utils.render.gui.ColorHighlight; -import de.hysky.skyblocker.utils.render.gui.ContainerSolver; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.client.MinecraftClient; import net.minecraft.client.util.InputUtil; @@ -19,7 +19,7 @@ import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; -public class ReorderHelper extends ContainerSolver { +public class ReorderHelper extends SimpleContainerSolver implements TooltipAdder { private static final Pattern BUY_PATTERN = Pattern.compile("([\\d,]+)x missing items\\."); private static final Pattern SELL_PATTERN = Pattern.compile("([\\d,]+)x items\\."); @@ -28,12 +28,12 @@ public class ReorderHelper extends ContainerSolver { } @Override - protected boolean isEnabled() { + public boolean isEnabled() { return true; } @Override - protected boolean onClickSlot(int slot, ItemStack stack, int screenId, String[] groups) { + public boolean onClickSlot(int slot, ItemStack stack, int screenId) { // V This part is so that it short-circuits if not necessary if ((slot == 11 || slot == 13) && stack.isOf(Items.GREEN_TERRACOTTA) && InputUtil.isKeyPressed(MinecraftClient.getInstance().getWindow().getHandle(), GLFW.GLFW_KEY_LEFT_CONTROL)) { Matcher matcher; @@ -49,25 +49,24 @@ public class ReorderHelper extends ContainerSolver { } @Override - protected List getColors(String[] groups, Int2ObjectMap slots) { + public List getColors(Int2ObjectMap slots) { return List.of(); } - public static class Tooltip extends TooltipAdder { - public Tooltip() { - super("^Order options", Integer.MIN_VALUE); - } - - @Override - public void addToTooltip(@Nullable Slot focusedSlot, ItemStack stack, List lines) { - if (focusedSlot == null || !stack.isOf(Items.GREEN_TERRACOTTA)) return; - switch (focusedSlot.id) { - case 11, 13 -> { - lines.add(Text.empty()); - lines.add(Text.empty().append(Text.translatable("skyblocker.reorderHelper.tooltip.line1")).formatted(Formatting.DARK_GRAY, Formatting.ITALIC)); - lines.add(Text.empty().append(Text.translatable("skyblocker.reorderHelper.tooltip.line2")).formatted(Formatting.DARK_GRAY, Formatting.ITALIC)); - } + @Override + public void addToTooltip(@Nullable Slot focusedSlot, ItemStack stack, List lines) { + if (focusedSlot == null || !stack.isOf(Items.GREEN_TERRACOTTA)) return; + switch (focusedSlot.id) { + case 11, 13 -> { + lines.add(Text.empty()); + lines.add(Text.empty().append(Text.translatable("skyblocker.reorderHelper.tooltip.line1")).formatted(Formatting.DARK_GRAY, Formatting.ITALIC)); + lines.add(Text.empty().append(Text.translatable("skyblocker.reorderHelper.tooltip.line2")).formatted(Formatting.DARK_GRAY, Formatting.ITALIC)); } } } + + @Override + public int getPriority() { + return Integer.MIN_VALUE; + } } 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 bd863fc2..edb6aa0d 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/chocolatefactory/ChocolateFactorySolver.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/chocolatefactory/ChocolateFactorySolver.java @@ -1,12 +1,12 @@ package de.hysky.skyblocker.skyblock.chocolatefactory; import de.hysky.skyblocker.config.SkyblockerConfigManager; -import de.hysky.skyblocker.skyblock.item.tooltip.SimpleTooltipAdder; 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.render.gui.ColorHighlight; import de.hysky.skyblocker.utils.container.SimpleContainerSolver; +import de.hysky.skyblocker.utils.container.TooltipAdder; +import de.hysky.skyblocker.utils.render.gui.ColorHighlight; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.objects.ObjectArrayList; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; @@ -28,7 +28,7 @@ import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; -public class ChocolateFactorySolver extends SimpleContainerSolver { +public class ChocolateFactorySolver extends SimpleContainerSolver implements TooltipAdder { //Patterns private static final Pattern CPS_PATTERN = Pattern.compile("([\\d,.]+) Chocolate per second"); private static final Pattern CPS_INCREASE_PATTERN = Pattern.compile("\\+([\\d,]+) Chocolate per second"); @@ -52,19 +52,18 @@ public class ChocolateFactorySolver extends SimpleContainerSolver { private static final byte STRAY_RABBIT_START = 0; private static final byte STRAY_RABBIT_END = 26; - // TODO: Convert to instance fields in #788 - private static final ObjectArrayList cpsIncreaseFactors = new ObjectArrayList<>(8); - private static long totalChocolate = -1L; - private static double totalCps = -1.0; - private static double totalCpsMultiplier = -1.0; - private static long requiredUntilNextPrestige = -1L; - private static boolean canPrestige = false; - private static boolean reachedMaxPrestige = false; - private static double timeTowerMultiplier = -1.0; - private static boolean isTimeTowerMaxed = false; - private static boolean isTimeTowerActive = false; - private static int bestUpgrade = -1; - private static int bestAffordableUpgrade = -1; + private final ObjectArrayList cpsIncreaseFactors = new ObjectArrayList<>(8); + private long totalChocolate = -1L; + private double totalCps = -1.0; + private double totalCpsMultiplier = -1.0; + private long requiredUntilNextPrestige = -1L; + private boolean canPrestige = false; + private boolean reachedMaxPrestige = false; + private double timeTowerMultiplier = -1.0; + private boolean isTimeTowerMaxed = false; + private boolean isTimeTowerActive = false; + private int bestUpgrade = -1; + private int bestAffordableUpgrade = -1; private static StraySound ding = StraySound.NONE; private static int dingTick = 0; @@ -93,6 +92,8 @@ public class ChocolateFactorySolver extends SimpleContainerSolver { return SkyblockerConfigManager.get().helpers.chocolateFactory.enableChocolateFactoryHelper; } + // ======== Container Solver ======== + @Override public List getColors(Int2ObjectMap slots) { updateFactoryInfo(slots); @@ -239,166 +240,163 @@ public class ChocolateFactorySolver extends SimpleContainerSolver { return highlights; } - @Override - public void reset() { - cpsIncreaseFactors.clear(); - totalChocolate = -1L; - totalCps = -1.0; - totalCpsMultiplier = -1.0; - requiredUntilNextPrestige = -1L; - canPrestige = false; - reachedMaxPrestige = false; - timeTowerMultiplier = -1.0; - isTimeTowerMaxed = false; - isTimeTowerActive = false; - bestUpgrade = -1; - bestAffordableUpgrade = -1; - ding = StraySound.NONE; - } - - private enum StraySound { - NONE, - NORMAL, - GOLDEN - } - - private record Rabbit(double cpsIncrease, long cost, int slot) {} + // ======== Tooltip Adder ======== - //Todo: Merge this into the outer class once #786 is merged - public static final class Tooltip extends SimpleTooltipAdder { - public Tooltip() { - super("^Chocolate Factory$", 0); //The priority doesn't really matter here as this is the only tooltip adder for the Chocolate Factory. - } + @Override + public void addToTooltip(@Nullable Slot focusedSlot, ItemStack stack, List lines) { + if (focusedSlot == null) return; - @Override - public void addToTooltip(@Nullable Slot focusedSlot, ItemStack stack, List lines) { - if (!SkyblockerConfigManager.get().helpers.chocolateFactory.enableChocolateFactoryHelper || focusedSlot == null) return; + int lineIndex = lines.size(); + //This boolean is used to determine if we should add a smooth line to separate the added information from the rest of the tooltip. + //It should be set to true if there's any information added, false otherwise. + boolean shouldAddLine = false; - int lineIndex = lines.size(); - //This boolean is used to determine if we should add a smooth line to separate the added information from the rest of the tooltip. - //It should be set to true if there's any information added, false otherwise. - boolean shouldAddLine = false; + String lore = ItemUtils.concatenateLore(lines); + Matcher costMatcher = COST_PATTERN.matcher(lore); + OptionalLong cost = RegexUtils.getLongFromMatcher(costMatcher); + //Available on all items with a chocolate cost + if (cost.isPresent()) shouldAddLine |= addUpgradeTimerToLore(lines, cost.getAsLong()); - String lore = ItemUtils.concatenateLore(lines); - Matcher costMatcher = COST_PATTERN.matcher(lore); - OptionalLong cost = RegexUtils.getLongFromMatcher(costMatcher); - //Available on all items with a chocolate cost - if (cost.isPresent()) shouldAddLine |= addUpgradeTimerToLore(lines, cost.getAsLong()); + int index = focusedSlot.id; - int index = focusedSlot.id; + //Prestige item + if (index == PRESTIGE_SLOT) { + shouldAddLine |= addPrestigeTimerToLore(lines); + } + //Time tower + else if (index == TIME_TOWER_SLOT) { + shouldAddLine |= addTimeTowerStatsToLore(lines); + } + //Rabbits + else if (index == COACH_SLOT || (index >= RABBITS_START && index <= RABBITS_END)) { + shouldAddLine |= addRabbitStatsToLore(lines, index); + } - //Prestige item - if (index == PRESTIGE_SLOT) { - shouldAddLine |= addPrestigeTimerToLore(lines); - } - //Time tower - else if (index == TIME_TOWER_SLOT) { - shouldAddLine |= addTimeTowerStatsToLore(lines); - } - //Rabbits - else if (index == COACH_SLOT || (index >= RABBITS_START && index <= RABBITS_END)) { - shouldAddLine |= addRabbitStatsToLore(lines, index); - } + //This is an ArrayList, so this operation is probably not very efficient, but logically it's pretty much the only way I can think of + if (shouldAddLine) lines.add(lineIndex, LineSmoothener.createSmoothLine()); + } - //This is an ArrayList, so this operation is probably not very efficient, but logically it's pretty much the only way I can think of - if (shouldAddLine) lines.add(lineIndex, LineSmoothener.createSmoothLine()); - } + private boolean addUpgradeTimerToLore(List lines, long cost) { + if (totalChocolate < 0L || totalCps < 0.0) return false; + lines.add(Text.empty() + .append(Text.literal("Time until upgrade: ").formatted(Formatting.GRAY)) + .append(formatTime((cost - totalChocolate) / totalCps))); + return true; + } - private boolean addUpgradeTimerToLore(List lines, long cost) { - if (totalChocolate < 0L || totalCps < 0.0) return false; + private boolean addPrestigeTimerToLore(List lines) { + if (totalCps < 0.0 || reachedMaxPrestige) return false; + if (requiredUntilNextPrestige > 0 && !canPrestige) { lines.add(Text.empty() - .append(Text.literal("Time until upgrade: ").formatted(Formatting.GRAY)) - .append(formatTime((cost - totalChocolate) / totalCps))); - return true; - } - - private boolean addPrestigeTimerToLore(List lines) { - if (totalCps < 0.0 || reachedMaxPrestige) return false; - if (requiredUntilNextPrestige > 0 && !canPrestige) { - lines.add(Text.empty() - .append(Text.literal("Chocolate until next prestige: ").formatted(Formatting.GRAY)) - .append(Text.literal(DECIMAL_FORMAT.format(requiredUntilNextPrestige)).formatted(Formatting.GOLD))); - } - lines.add(Text.empty() //Keep this outside of the `if` to match the format of the upgrade tooltips, that say "Time until upgrade: Now" when it's possible - .append(Text.literal("Time until next prestige: ").formatted(Formatting.GRAY)) - .append(formatTime(requiredUntilNextPrestige / totalCps))); - return true; + .append(Text.literal("Chocolate until next prestige: ").formatted(Formatting.GRAY)) + .append(Text.literal(DECIMAL_FORMAT.format(requiredUntilNextPrestige)).formatted(Formatting.GOLD))); } + lines.add(Text.empty() //Keep this outside of the `if` to match the format of the upgrade tooltips, that say "Time until upgrade: Now" when it's possible + .append(Text.literal("Time until next prestige: ").formatted(Formatting.GRAY)) + .append(formatTime(requiredUntilNextPrestige / totalCps))); + return true; + } - private boolean addTimeTowerStatsToLore(List lines) { - if (totalCps < 0.0 || totalCpsMultiplier < 0.0 || timeTowerMultiplier < 0.0) return false; - lines.add(Text.literal("Current stats:").formatted(Formatting.GRAY)); + private boolean addTimeTowerStatsToLore(List lines) { + if (totalCps < 0.0 || totalCpsMultiplier < 0.0 || timeTowerMultiplier < 0.0) return false; + lines.add(Text.literal("Current stats:").formatted(Formatting.GRAY)); + lines.add(Text.empty() + .append(Text.literal(" CPS increase: ").formatted(Formatting.GRAY)) + .append(Text.literal(DECIMAL_FORMAT.format(totalCps / totalCpsMultiplier * timeTowerMultiplier)).formatted(Formatting.GOLD))); + lines.add(Text.empty() + .append(Text.literal(" CPS when active: ").formatted(Formatting.GRAY)) + .append(Text.literal(DECIMAL_FORMAT.format(isTimeTowerActive ? totalCps : totalCps / totalCpsMultiplier * (timeTowerMultiplier + totalCpsMultiplier))).formatted(Formatting.GOLD))); + if (!isTimeTowerMaxed) { + lines.add(Text.literal("Stats after upgrade:").formatted(Formatting.GRAY)); lines.add(Text.empty() .append(Text.literal(" CPS increase: ").formatted(Formatting.GRAY)) - .append(Text.literal(DECIMAL_FORMAT.format(totalCps / totalCpsMultiplier * timeTowerMultiplier)).formatted(Formatting.GOLD))); + .append(Text.literal(DECIMAL_FORMAT.format(totalCps / (totalCpsMultiplier) * (timeTowerMultiplier + 0.1))).formatted(Formatting.GOLD))); lines.add(Text.empty() .append(Text.literal(" CPS when active: ").formatted(Formatting.GRAY)) - .append(Text.literal(DECIMAL_FORMAT.format(isTimeTowerActive ? totalCps : totalCps / totalCpsMultiplier * (timeTowerMultiplier + totalCpsMultiplier))).formatted(Formatting.GOLD))); - if (!isTimeTowerMaxed) { - lines.add(Text.literal("Stats after upgrade:").formatted(Formatting.GRAY)); - lines.add(Text.empty() - .append(Text.literal(" CPS increase: ").formatted(Formatting.GRAY)) - .append(Text.literal(DECIMAL_FORMAT.format(totalCps / (totalCpsMultiplier) * (timeTowerMultiplier + 0.1))).formatted(Formatting.GOLD))); - lines.add(Text.empty() - .append(Text.literal(" CPS when active: ").formatted(Formatting.GRAY)) - .append(Text.literal(DECIMAL_FORMAT.format(isTimeTowerActive ? totalCps / totalCpsMultiplier * (totalCpsMultiplier + 0.1) : totalCps / totalCpsMultiplier * (timeTowerMultiplier + 0.1 + totalCpsMultiplier))).formatted(Formatting.GOLD))); - } - return true; + .append(Text.literal(DECIMAL_FORMAT.format(isTimeTowerActive ? totalCps / totalCpsMultiplier * (totalCpsMultiplier + 0.1) : totalCps / totalCpsMultiplier * (timeTowerMultiplier + 0.1 + totalCpsMultiplier))).formatted(Formatting.GOLD))); } + return true; + } + + private boolean addRabbitStatsToLore(List lines, int slot) { + if (cpsIncreaseFactors.isEmpty()) return false; + for (Rabbit rabbit : cpsIncreaseFactors) { + if (rabbit.slot == slot) { + lines.add(Text.empty() + .append(Text.literal("CPS Increase: ").formatted(Formatting.GRAY)) + .append(Text.literal(DECIMAL_FORMAT.format(rabbit.cpsIncrease)).formatted(Formatting.GOLD))); - private boolean addRabbitStatsToLore(List lines, int slot) { - if (cpsIncreaseFactors.isEmpty()) return false; - for (Rabbit rabbit : cpsIncreaseFactors) { - if (rabbit.slot == slot) { - lines.add(Text.empty() - .append(Text.literal("CPS Increase: ").formatted(Formatting.GRAY)) - .append(Text.literal(DECIMAL_FORMAT.format(rabbit.cpsIncrease)).formatted(Formatting.GOLD))); - - lines.add(Text.empty() - .append(Text.literal("Cost per CPS: ").formatted(Formatting.GRAY)) - .append(Text.literal(DECIMAL_FORMAT.format(rabbit.cost / rabbit.cpsIncrease)).formatted(Formatting.GOLD))); - - if (rabbit.slot == bestUpgrade) { - if (rabbit.cost <= totalChocolate) { - lines.add(Text.literal("Best upgrade").formatted(Formatting.GREEN)); - } else { - lines.add(Text.literal("Best upgrade, can't afford").formatted(Formatting.YELLOW)); - } - } else if (rabbit.slot == bestAffordableUpgrade && rabbit.cost <= totalChocolate) { - lines.add(Text.literal("Best upgrade you can afford").formatted(Formatting.GREEN)); + lines.add(Text.empty() + .append(Text.literal("Cost per CPS: ").formatted(Formatting.GRAY)) + .append(Text.literal(DECIMAL_FORMAT.format(rabbit.cost / rabbit.cpsIncrease)).formatted(Formatting.GOLD))); + + if (rabbit.slot == bestUpgrade) { + if (rabbit.cost <= totalChocolate) { + lines.add(Text.literal("Best upgrade").formatted(Formatting.GREEN)); + } else { + lines.add(Text.literal("Best upgrade, can't afford").formatted(Formatting.YELLOW)); } - return true; + } else if (rabbit.slot == bestAffordableUpgrade && rabbit.cost <= totalChocolate) { + lines.add(Text.literal("Best upgrade you can afford").formatted(Formatting.GREEN)); } + return true; } - return false; } + return false; + } - private MutableText formatTime(double seconds) { - seconds = Math.ceil(seconds); - if (seconds <= 0) return Text.literal("Now").formatted(Formatting.GREEN); + private MutableText formatTime(double seconds) { + seconds = Math.ceil(seconds); + if (seconds <= 0) return Text.literal("Now").formatted(Formatting.GREEN); - StringBuilder builder = new StringBuilder(); - if (seconds >= 86400) { - builder.append((int) (seconds / 86400)).append("d "); - seconds %= 86400; - } - if (seconds >= 3600) { - builder.append((int) (seconds / 3600)).append("h "); - seconds %= 3600; - } - if (seconds >= 60) { - builder.append((int) (seconds / 60)).append("m "); - seconds %= 60; - } - if (seconds >= 1) { - builder.append((int) seconds).append("s"); - } - return Text.literal(builder.toString()).formatted(Formatting.GOLD); + StringBuilder builder = new StringBuilder(); + if (seconds >= 86400) { + builder.append((int) (seconds / 86400)).append("d "); + seconds %= 86400; } - - @Override - public boolean isEnabled() { - return SkyblockerConfigManager.get().helpers.chocolateFactory.enableChocolateFactoryHelper; + if (seconds >= 3600) { + builder.append((int) (seconds / 3600)).append("h "); + seconds %= 3600; + } + if (seconds >= 60) { + builder.append((int) (seconds / 60)).append("m "); + seconds %= 60; } + if (seconds >= 1) { + builder.append((int) seconds).append("s"); + } + return Text.literal(builder.toString()).formatted(Formatting.GOLD); + } + + @Override + public int getPriority() { + return 0; //The priority doesn't really matter here as this is the only tooltip adder for the Chocolate Factory. + } + + // ======== Reset and Other Classes ======== + + @Override + public void reset() { + cpsIncreaseFactors.clear(); + totalChocolate = -1L; + totalCps = -1.0; + totalCpsMultiplier = -1.0; + requiredUntilNextPrestige = -1L; + canPrestige = false; + reachedMaxPrestige = false; + timeTowerMultiplier = -1.0; + isTimeTowerMaxed = false; + isTimeTowerActive = false; + bestUpgrade = -1; + bestAffordableUpgrade = -1; + ding = StraySound.NONE; } + + private enum StraySound { + NONE, + NORMAL, + GOLDEN + } + + private record Rabbit(double cpsIncrease, long cost, int slot) {} } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextManager.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextManager.java index 7ab7570c..91971985 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextManager.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextManager.java @@ -16,6 +16,7 @@ import net.minecraft.client.util.math.MatrixStack; import net.minecraft.item.ItemStack; import net.minecraft.screen.slot.Slot; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.lwjgl.glfw.GLFW; import java.util.ArrayList; @@ -86,21 +87,21 @@ public class SlotTextManager { * The order of the adders remains the same as they were added to the {@link SlotTextManager#adders} array. */ @NotNull - public static List getText(@NotNull ItemStack itemStack, int slotId) { + public static List getText(@Nullable Slot slot, @NotNull ItemStack stack, int slotId) { if (currentScreenAdders.isEmpty() || !isEnabled()) return List.of(); for (SlotTextAdder adder : currentScreenAdders) { - List text = adder.getText(itemStack, slotId); + List text = adder.getText(slot, stack, slotId); if (!text.isEmpty()) return text; } return List.of(); } - public static void renderSlotText(DrawContext context, TextRenderer textRenderer, Slot slot) { - renderSlotText(context, textRenderer, slot.getStack(), slot.id, slot.x, slot.y); + public static void renderSlotText(DrawContext context, TextRenderer textRenderer, @NotNull Slot slot) { + renderSlotText(context, textRenderer, slot, slot.getStack(), slot.id, slot.x, slot.y); } - public static void renderSlotText(DrawContext context, TextRenderer textRenderer, ItemStack itemStack, int slotId, int x, int y) { - List textList = getText(itemStack, slotId); + public static void renderSlotText(DrawContext context, TextRenderer textRenderer, @Nullable Slot slot, ItemStack stack, int slotId, int x, int y) { + List textList = getText(slot, stack, slotId); if (textList.isEmpty()) return; MatrixStack matrices = context.getMatrices(); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/AttributeShardAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/AttributeShardAdder.java index 8f3e55a2..27856ab8 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/AttributeShardAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/AttributeShardAdder.java @@ -8,8 +8,10 @@ import it.unimi.dsi.fastutil.objects.Object2ObjectMap; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NbtCompound; +import net.minecraft.screen.slot.Slot; import net.minecraft.text.Text; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.List; @@ -68,7 +70,7 @@ public class AttributeShardAdder extends SimpleSlotTextAdder { } @Override - public @NotNull List getText(@NotNull ItemStack stack, int slotId) { + public @NotNull List getText(@Nullable Slot slot, @NotNull ItemStack stack, int slotId) { NbtCompound customData = ItemUtils.getCustomData(stack); if (!ItemUtils.getItemId(stack).equals("ATTRIBUTE_SHARD")) return List.of(); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CatacombsLevelAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CatacombsLevelAdder.java index 6c95c11e..ce0e3872 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CatacombsLevelAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CatacombsLevelAdder.java @@ -4,10 +4,12 @@ import de.hysky.skyblocker.skyblock.item.slottext.SlotText; import de.hysky.skyblocker.skyblock.item.slottext.SimpleSlotTextAdder; import de.hysky.skyblocker.utils.RomanNumerals; import net.minecraft.item.ItemStack; +import net.minecraft.screen.slot.Slot; import net.minecraft.text.Text; import net.minecraft.util.Formatting; import org.apache.commons.lang3.math.NumberUtils; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.List; import java.util.regex.Matcher; @@ -26,10 +28,10 @@ public class CatacombsLevelAdder { } @Override - public @NotNull List getText(@NotNull ItemStack itemStack, int slotId) { + public @NotNull List getText(@Nullable Slot slot, @NotNull ItemStack stack, int slotId) { switch (slotId) { case 12, 29, 30, 31, 32, 33 -> { - Matcher matcher = LEVEL_PATTERN.matcher(itemStack.getName().getString()); + Matcher matcher = LEVEL_PATTERN.matcher(stack.getName().getString()); if (!matcher.matches()) return List.of(); String arabic = matcher.group("arabic"); String roman = matcher.group("roman"); @@ -59,10 +61,10 @@ public class CatacombsLevelAdder { } @Override - public @NotNull List getText(@NotNull ItemStack itemStack, int slotId) { + public @NotNull List getText(@Nullable Slot slot, @NotNull ItemStack stack, int slotId) { switch (slotId) { case 11, 12, 13, 14, 15 -> { - String level = getBracketedLevelFromName(itemStack); + String level = getBracketedLevelFromName(stack); if (!NumberUtils.isDigits(level)) return List.of(); return List.of(SlotText.bottomLeft(Text.literal(level).withColor(0xFFDDC1))); } @@ -80,10 +82,10 @@ public class CatacombsLevelAdder { } @Override - public @NotNull List getText(@NotNull ItemStack itemStack, int slotId) { + public @NotNull List getText(@Nullable Slot slot, @NotNull ItemStack stack, int slotId) { switch (slotId) { case 29, 30, 31, 32, 33 -> { - String level = getBracketedLevelFromName(itemStack); + String level = getBracketedLevelFromName(stack); if (!NumberUtils.isDigits(level)) return List.of(); return List.of(SlotText.bottomLeft(Text.literal(level).withColor(0xFFDDC1))); } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CollectionAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CollectionAdder.java index 2eb491d4..66d7f6e1 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CollectionAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CollectionAdder.java @@ -5,8 +5,10 @@ import de.hysky.skyblocker.skyblock.item.slottext.SimpleSlotTextAdder; import de.hysky.skyblocker.utils.ItemUtils; import de.hysky.skyblocker.utils.RomanNumerals; import net.minecraft.item.ItemStack; +import net.minecraft.screen.slot.Slot; import net.minecraft.text.Text; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.List; import java.util.regex.Matcher; @@ -20,7 +22,7 @@ public class CollectionAdder extends SimpleSlotTextAdder { } @Override - public @NotNull List getText(@NotNull ItemStack stack, int slotId) { + public @NotNull List getText(@Nullable Slot slot, @NotNull ItemStack stack, int slotId) { Matcher matcher = COLLECTION.matcher(stack.getName().getString()); if (matcher.matches()) { int level = RomanNumerals.romanToDecimal(matcher.group("level")); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CommunityShopAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CommunityShopAdder.java index 684f9ae2..65215b28 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CommunityShopAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CommunityShopAdder.java @@ -6,9 +6,11 @@ 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; import net.minecraft.text.Text; import net.minecraft.util.Formatting; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.List; @@ -22,13 +24,13 @@ public class CommunityShopAdder extends SimpleSlotTextAdder { } @Override - public @NotNull List getText(@NotNull ItemStack itemStack, int slotId) { - if (slotId >= CATEGORIES_START && slotId <= CATEGORIES_END && itemStack.isOf(Items.LIME_STAINED_GLASS_PANE)) { //Only the selected category has a lime stained glass pane, the others have a gray one. + public @NotNull List getText(@Nullable Slot slot, @NotNull ItemStack stack, int slotId) { + if (slotId >= CATEGORIES_START && slotId <= CATEGORIES_END && stack.isOf(Items.LIME_STAINED_GLASS_PANE)) { //Only the selected category has a lime stained glass pane, the others have a gray one. currentScreen = (byte) (slotId - CATEGORIES_START); return List.of(); } return switch (currentScreen) { //This is a switch statement to allow easily adding other categories in the future. - case 1 -> getTextForUpgradesScreen(itemStack, slotId); + case 1 -> getTextForUpgradesScreen(stack, slotId); default -> List.of(); }; } 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 0535f110..b4f89cdd 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 @@ -8,8 +8,10 @@ import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.nbt.NbtCompound; import net.minecraft.nbt.NbtElement; +import net.minecraft.screen.slot.Slot; import net.minecraft.text.Text; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.List; @@ -19,11 +21,11 @@ public class EnchantmentLevelAdder extends SimpleSlotTextAdder { } @Override - public @NotNull List getText(@NotNull ItemStack itemStack, int slotId) { - if (!itemStack.isOf(Items.ENCHANTED_BOOK)) return List.of(); - String name = itemStack.getName().getString(); + public @NotNull List getText(@Nullable Slot slot, @NotNull ItemStack stack, int slotId) { + if (!stack.isOf(Items.ENCHANTED_BOOK)) return List.of(); + String name = stack.getName().getString(); if (name.equals("Enchanted Book")) { - NbtCompound nbt = ItemUtils.getCustomData(itemStack); + NbtCompound nbt = ItemUtils.getCustomData(stack); if (nbt.isEmpty() || !nbt.contains("enchantments", NbtElement.COMPOUND_TYPE)) return List.of(); NbtCompound enchantments = nbt.getCompound("enchantments"); if (enchantments.getSize() != 1) return List.of(); //Only makes sense to display the level when there's one enchant. diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/EssenceShopAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/EssenceShopAdder.java index 3d8d935b..ec0eb346 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/EssenceShopAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/EssenceShopAdder.java @@ -5,8 +5,10 @@ import de.hysky.skyblocker.skyblock.item.slottext.SimpleSlotTextAdder; import de.hysky.skyblocker.utils.ItemUtils; import de.hysky.skyblocker.utils.RomanNumerals; import net.minecraft.item.ItemStack; +import net.minecraft.screen.slot.Slot; import net.minecraft.text.Text; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.text.NumberFormat; import java.util.List; @@ -24,7 +26,7 @@ public class EssenceShopAdder extends SimpleSlotTextAdder { } @Override - public @NotNull List getText(@NotNull ItemStack stack, int slotId) { + public @NotNull List getText(@Nullable Slot slot, @NotNull ItemStack stack, int slotId) { Matcher essenceLevelMatcher = ESSENCELEVEL.matcher(stack.getName().getString()); Matcher essenceAmountMatcher = ItemUtils.getLoreLineIfMatch(stack, ESSENCE); 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 1282354b..b54e6c73 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 @@ -5,8 +5,10 @@ import de.hysky.skyblocker.skyblock.item.slottext.SimpleSlotTextAdder; import de.hysky.skyblocker.utils.RomanNumerals; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; +import net.minecraft.screen.slot.Slot; import net.minecraft.text.Text; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.List; import java.util.regex.Matcher; @@ -19,9 +21,9 @@ public class MinionLevelAdder extends SimpleSlotTextAdder { } @Override - public @NotNull List getText(@NotNull ItemStack itemStack, int slotId) { - if (!itemStack.isOf(Items.PLAYER_HEAD)) return List.of(); - Matcher matcher = MINION_PATTERN.matcher(itemStack.getName().getString()); + public @NotNull List getText(@Nullable Slot slot, @NotNull ItemStack stack, int slotId) { + if (!stack.isOf(Items.PLAYER_HEAD)) return List.of(); + Matcher matcher = MINION_PATTERN.matcher(stack.getName().getString()); if (!matcher.matches()) return List.of(); String romanNumeral = matcher.group(1); if (!RomanNumerals.isValidRomanNumeral(romanNumeral)) return List.of(); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PetLevelAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PetLevelAdder.java index b7cc50fc..fbacc65c 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PetLevelAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PetLevelAdder.java @@ -5,9 +5,11 @@ import de.hysky.skyblocker.skyblock.item.slottext.SimpleSlotTextAdder; import de.hysky.skyblocker.utils.ItemUtils; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; +import net.minecraft.screen.slot.Slot; import net.minecraft.text.Text; import org.apache.commons.lang3.math.NumberUtils; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.List; @@ -17,11 +19,11 @@ public class PetLevelAdder extends SimpleSlotTextAdder { } @Override - public @NotNull List getText(@NotNull ItemStack itemStack, int slotId) { - if (!itemStack.isOf(Items.PLAYER_HEAD)) return List.of(); - String level = CatacombsLevelAdder.getBracketedLevelFromName(itemStack); + public @NotNull List getText(@Nullable Slot slot, @NotNull ItemStack stack, int slotId) { + if (!stack.isOf(Items.PLAYER_HEAD)) return List.of(); + String level = CatacombsLevelAdder.getBracketedLevelFromName(stack); if (!NumberUtils.isDigits(level) || "100".equals(level) || "200".equals(level)) return List.of(); - if (!ItemUtils.getItemId(itemStack).equals("PET")) return List.of(); + if (!ItemUtils.getItemId(stack).equals("PET")) return List.of(); return List.of(SlotText.topLeft(Text.literal(level).withColor(0xFFDDC1))); } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PotionLevelAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PotionLevelAdder.java index 770a9c0e..e229bc57 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PotionLevelAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PotionLevelAdder.java @@ -6,14 +6,16 @@ import de.hysky.skyblocker.utils.ItemUtils; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NbtCompound; import net.minecraft.nbt.NbtElement; +import net.minecraft.screen.slot.Slot; import net.minecraft.text.Text; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.List; public class PotionLevelAdder extends SimpleSlotTextAdder { @Override - public @NotNull List getText(@NotNull ItemStack stack, int slotId) { + public @NotNull List getText(@Nullable Slot slot, @NotNull ItemStack stack, int slotId) { NbtCompound customData = ItemUtils.getCustomData(stack); String title = stack.getName().getString(); if (customData.contains("potion_level", NbtElement.INT_TYPE) && !title.contains("Healer Class") && !title.contains("Class Passives")) { diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PowerStonesGuideAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PowerStonesGuideAdder.java index a09d8782..e3ee5eda 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PowerStonesGuideAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PowerStonesGuideAdder.java @@ -4,8 +4,10 @@ import de.hysky.skyblocker.skyblock.item.slottext.SlotText; import de.hysky.skyblocker.skyblock.item.slottext.SimpleSlotTextAdder; import de.hysky.skyblocker.utils.ItemUtils; import net.minecraft.item.ItemStack; +import net.minecraft.screen.slot.Slot; import net.minecraft.text.Text; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.List; import java.util.regex.Matcher; @@ -19,7 +21,7 @@ public class PowerStonesGuideAdder extends SimpleSlotTextAdder { } @Override - public @NotNull List getText(@NotNull ItemStack stack, int slotId) { + public @NotNull List getText(@Nullable Slot slot, @NotNull ItemStack stack, int slotId) { Matcher match = ItemUtils.getLoreLineIfMatch(stack, LEARNED); if (match == null) return List.of(); String symbol = match.group("symbol"); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PrehistoricEggAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PrehistoricEggAdder.java index 936b61a1..87781e1e 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PrehistoricEggAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PrehistoricEggAdder.java @@ -7,15 +7,17 @@ import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.nbt.NbtCompound; import net.minecraft.nbt.NbtElement; +import net.minecraft.screen.slot.Slot; import net.minecraft.text.Text; import org.apache.commons.lang3.StringUtils; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.List; public class PrehistoricEggAdder extends SimpleSlotTextAdder { @Override - public @NotNull List getText(@NotNull ItemStack stack, int slotId) { + public @NotNull List getText(@Nullable Slot slot, @NotNull ItemStack stack, int slotId) { if (!stack.isOf(Items.PLAYER_HEAD) || !StringUtils.equals(stack.getSkyblockId(), "PREHISTORIC_EGG")) return List.of(); NbtCompound nbt = ItemUtils.getCustomData(stack); if (!nbt.contains("blocks_walked", NbtElement.INT_TYPE)) return List.of(); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/RancherBootsSpeedAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/RancherBootsSpeedAdder.java index 9bea52d0..b34e67c1 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/RancherBootsSpeedAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/RancherBootsSpeedAdder.java @@ -5,9 +5,11 @@ import de.hysky.skyblocker.skyblock.item.slottext.SimpleSlotTextAdder; import de.hysky.skyblocker.utils.ItemUtils; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; +import net.minecraft.screen.slot.Slot; import net.minecraft.text.Text; import org.apache.commons.lang3.StringUtils; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.List; import java.util.regex.Matcher; @@ -21,10 +23,10 @@ public class RancherBootsSpeedAdder extends SimpleSlotTextAdder { } @Override - public @NotNull List getText(@NotNull ItemStack itemStack, int slotId) { + public @NotNull List getText(@Nullable Slot slot, @NotNull ItemStack stack, int slotId) { // V null-safe equals. - if (!itemStack.isOf(Items.LEATHER_BOOTS) && !StringUtils.equals(itemStack.getSkyblockId(), "RANCHERS_BOOTS")) return List.of(); - Matcher matcher = ItemUtils.getLoreLineIfMatch(itemStack, SPEED_PATTERN); + if (!stack.isOf(Items.LEATHER_BOOTS) && !StringUtils.equals(stack.getSkyblockId(), "RANCHERS_BOOTS")) return List.of(); + Matcher matcher = ItemUtils.getLoreLineIfMatch(stack, SPEED_PATTERN); if (matcher == null) return List.of(); String speed = matcher.group(2); if (speed == null) speed = matcher.group(1); //2nd group only matches when the speed cap is set to a number beyond the player's actual speed cap. diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/SkillLevelAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/SkillLevelAdder.java index 7e9420f9..5ffce34a 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/SkillLevelAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/SkillLevelAdder.java @@ -5,9 +5,11 @@ import de.hysky.skyblocker.skyblock.item.slottext.SimpleSlotTextAdder; import de.hysky.skyblocker.utils.ItemUtils; import de.hysky.skyblocker.utils.RomanNumerals; import net.minecraft.item.ItemStack; +import net.minecraft.screen.slot.Slot; import net.minecraft.text.Text; import net.minecraft.util.Formatting; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.List; @@ -17,7 +19,7 @@ public class SkillLevelAdder extends SimpleSlotTextAdder { } @Override - public @NotNull List getText(@NotNull ItemStack stack, int slotId) { + public @NotNull List getText(@Nullable Slot slot, @NotNull ItemStack stack, int slotId) { switch (slotId) { case 19, 20, 21, 22, 23, 24, 25, 29, 30, 31, 32 -> { //These are the slots that contain the skill items. Note that they aren't continuous, as there are 2 rows. String name = stack.getName().getString(); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/SkyblockLevelAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/SkyblockLevelAdder.java index 061f99c9..aa7b577e 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/SkyblockLevelAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/SkyblockLevelAdder.java @@ -4,9 +4,11 @@ import de.hysky.skyblocker.skyblock.item.slottext.SlotText; import de.hysky.skyblocker.skyblock.item.slottext.SimpleSlotTextAdder; import de.hysky.skyblocker.utils.ItemUtils; import net.minecraft.item.ItemStack; +import net.minecraft.screen.slot.Slot; import net.minecraft.text.Text; import org.apache.commons.lang3.math.NumberUtils; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.List; @@ -16,9 +18,9 @@ public class SkyblockLevelAdder extends SimpleSlotTextAdder { } @Override - public @NotNull List getText(@NotNull ItemStack itemStack, int slotId) { + public @NotNull List getText(@Nullable Slot slot, @NotNull ItemStack stack, int slotId) { if (slotId != 22) return List.of(); - List lore = ItemUtils.getLore(itemStack); + List lore = ItemUtils.getLore(stack); if (lore.isEmpty()) return List.of(); List siblings = lore.getFirst().getSiblings(); if (siblings.size() < 3) return List.of(); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/StatsTuningAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/StatsTuningAdder.java index e94fddc5..5c175b1b 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/StatsTuningAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/StatsTuningAdder.java @@ -4,8 +4,10 @@ import de.hysky.skyblocker.skyblock.item.slottext.SlotText; import de.hysky.skyblocker.skyblock.item.slottext.SimpleSlotTextAdder; import de.hysky.skyblocker.utils.ItemUtils; import net.minecraft.item.ItemStack; +import net.minecraft.screen.slot.Slot; import net.minecraft.text.Text; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.List; import java.util.regex.Matcher; @@ -20,7 +22,7 @@ public class StatsTuningAdder extends SimpleSlotTextAdder { } @Override - public @NotNull List getText(@NotNull ItemStack stack, int slotId) { + public @NotNull List getText(@Nullable Slot slot, @NotNull ItemStack stack, int slotId) { Matcher statMatcher = ItemUtils.getLoreLineIfMatch(stack, STATHAS); Matcher unassignedMatcher = ItemUtils.getLoreLineIfMatch(stack, UNASSIGNEDPOINTS); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/YourEssenceAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/YourEssenceAdder.java index f5a5886f..98dd9807 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/YourEssenceAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/YourEssenceAdder.java @@ -4,8 +4,10 @@ import de.hysky.skyblocker.skyblock.item.slottext.SlotText; import de.hysky.skyblocker.skyblock.item.slottext.SimpleSlotTextAdder; import de.hysky.skyblocker.utils.ItemUtils; import net.minecraft.item.ItemStack; +import net.minecraft.screen.slot.Slot; import net.minecraft.text.Text; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.text.NumberFormat; import java.util.List; @@ -21,7 +23,7 @@ public class YourEssenceAdder extends SimpleSlotTextAdder { } @Override - public @NotNull List getText(@NotNull ItemStack stack, int slotId) { + public @NotNull List getText(@Nullable Slot slot, @NotNull ItemStack stack, int slotId) { String name = stack.getName().getString(); if (name.contains("Essence")) { List lore = ItemUtils.getLore(stack); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/BackpackPreview.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/BackpackPreview.java index b3017baf..3fb52b3a 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/BackpackPreview.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/BackpackPreview.java @@ -173,7 +173,7 @@ public class BackpackPreview { context.drawItem(currentStack, itemX, itemY); context.drawItemInSlot(textRenderer, currentStack, itemX, itemY); - SlotTextManager.renderSlotText(context, textRenderer, currentStack, i, itemX, itemY); + SlotTextManager.renderSlotText(context, textRenderer, null, currentStack, i, itemX, itemY); } matrices.pop(); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipManager.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipManager.java index ad4e181d..ce40d06c 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipManager.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipManager.java @@ -24,8 +24,8 @@ public class TooltipManager { private static final TooltipAdder[] adders = new TooltipAdder[]{ new LineSmoothener(), // Applies before anything else new SupercraftReminder(), - new ChocolateFactorySolver.Tooltip(), - new ReorderHelper.Tooltip(), + new ChocolateFactorySolver(), + new ReorderHelper(), new NpcPriceTooltip(1), new BazaarPriceTooltip(2), new LBinTooltip(3), diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/EssenceShopPrice.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/EssenceShopPrice.java index 5a7051d3..bc478d50 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/EssenceShopPrice.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/EssenceShopPrice.java @@ -3,7 +3,7 @@ package de.hysky.skyblocker.skyblock.item.tooltip.adders; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import de.hysky.skyblocker.config.SkyblockerConfigManager; -import de.hysky.skyblocker.skyblock.item.tooltip.TooltipAdder; +import de.hysky.skyblocker.skyblock.item.tooltip.SimpleTooltipAdder; import de.hysky.skyblocker.utils.ItemUtils; import de.hysky.skyblocker.utils.RegexUtils; import it.unimi.dsi.fastutil.objects.Object2LongArrayMap; @@ -20,7 +20,7 @@ import java.util.OptionalLong; import java.util.regex.Matcher; import java.util.regex.Pattern; -public class EssenceShopPrice extends TooltipAdder { +public class EssenceShopPrice extends SimpleTooltipAdder { private static final Pattern ESSENCE_PATTERN = Pattern.compile("Cost (?[\\d,]+) (?[A-Za-z]+) Essence"); private static final NumberFormat DECIMAL_FORMAT = NumberFormat.getInstance(Locale.US); private static final String[] ESSENCE_TYPES = {"WITHER", "SPIDER", "UNDEAD", "DRAGON", "GOLD", "DIAMOND", "ICE", "CRIMSON"}; @@ -45,8 +45,6 @@ public class EssenceShopPrice extends TooltipAdder { //Todo: maybe move the price value right after the essence amount ex: "1,500 Wither Essence (645k coins)" @Override public void addToTooltip(@Nullable Slot focusedSlot, ItemStack stack, List lines) { - if (!SkyblockerConfigManager.get().general.itemTooltip.showEssenceCost) return; - String lore = ItemUtils.concatenateLore(lines); Matcher essenceMatcher = ESSENCE_PATTERN.matcher(lore); OptionalLong cost = RegexUtils.getLongFromMatcher(essenceMatcher); @@ -64,4 +62,9 @@ public class EssenceShopPrice extends TooltipAdder { .append(Text.literal(")").formatted(Formatting.GRAY)) ); } + + @Override + public boolean isEnabled() { + return SkyblockerConfigManager.get().general.itemTooltip.showEssenceCost; + } } diff --git a/src/main/java/de/hysky/skyblocker/utils/container/ContainerSolverManager.java b/src/main/java/de/hysky/skyblocker/utils/container/ContainerSolverManager.java index 6194852b..b67b9edf 100644 --- a/src/main/java/de/hysky/skyblocker/utils/container/ContainerSolverManager.java +++ b/src/main/java/de/hysky/skyblocker/utils/container/ContainerSolverManager.java @@ -4,6 +4,7 @@ import com.mojang.blaze3d.systems.RenderSystem; import de.hysky.skyblocker.mixins.accessors.HandledScreenAccessor; import de.hysky.skyblocker.skyblock.accessories.newyearcakes.NewYearCakeBagHelper; import de.hysky.skyblocker.skyblock.accessories.newyearcakes.NewYearCakesHelper; +import de.hysky.skyblocker.skyblock.bazaar.ReorderHelper; import de.hysky.skyblocker.skyblock.chocolatefactory.ChocolateFactorySolver; import de.hysky.skyblocker.skyblock.dungeon.CroesusHelper; import de.hysky.skyblocker.skyblock.dungeon.CroesusProfit; @@ -55,7 +56,8 @@ public class ContainerSolverManager { UltrasequencerSolver.INSTANCE, new NewYearCakeBagHelper(), NewYearCakesHelper.INSTANCE, - new ChocolateFactorySolver() + new ChocolateFactorySolver(), + new ReorderHelper() }; } diff --git a/src/main/java/de/hysky/skyblocker/utils/container/SlotTextAdder.java b/src/main/java/de/hysky/skyblocker/utils/container/SlotTextAdder.java index 2ee41820..4caf8cea 100644 --- a/src/main/java/de/hysky/skyblocker/utils/container/SlotTextAdder.java +++ b/src/main/java/de/hysky/skyblocker/utils/container/SlotTextAdder.java @@ -4,7 +4,9 @@ import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.skyblock.item.slottext.SlotText; import de.hysky.skyblocker.skyblock.item.slottext.SlotTextState; import net.minecraft.item.ItemStack; +import net.minecraft.screen.slot.Slot; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.List; @@ -19,7 +21,7 @@ public interface SlotTextAdder extends ContainerMatcher { * So, limit your text to 3 characters (or roughly less than 20 width) if you want it to not look horrible. */ @NotNull - List getText(@NotNull ItemStack itemStack, int slotId); + List getText(@Nullable Slot slot, @NotNull ItemStack stack, int slotId); @Override default boolean isEnabled() { -- cgit From 14d4abe61f1344f29a9eebb73d6a3d7004dfc2d5 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Mon, 22 Jul 2024 15:46:14 +0800 Subject: Code review part 1 --- .../skyblock/item/slottext/adders/CommunityShopAdder.java | 14 ++++++-------- .../skyblock/item/tooltip/adders/MuseumTooltip.java | 2 +- .../hysky/skyblocker/utils/container/ContainerMatcher.java | 5 ++++- .../hysky/skyblocker/utils/container/ContainerSolver.java | 4 +++- .../hysky/skyblocker/utils/render/gui/ContainerSolver.java | 0 .../utils/render/gui/ContainerSolverManager.java | 0 6 files changed, 14 insertions(+), 11 deletions(-) delete mode 100644 src/main/java/de/hysky/skyblocker/utils/render/gui/ContainerSolver.java delete mode 100644 src/main/java/de/hysky/skyblocker/utils/render/gui/ContainerSolverManager.java (limited to 'src/main/java/de/hysky/skyblocker') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CommunityShopAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CommunityShopAdder.java index 65215b28..4450c0b3 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CommunityShopAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CommunityShopAdder.java @@ -36,26 +36,24 @@ public class CommunityShopAdder extends SimpleSlotTextAdder { } private static List getTextForUpgradesScreen(ItemStack stack, int slotId) { - switch (slotId) { + return switch (slotId) { case 30, 31, 32, 33, 34, 38, 39, 40, 41, 42, 43, 44 -> { String name = stack.getName().getString(); int lastIndex = name.lastIndexOf(' '); String roman = name.substring(lastIndex + 1); // + 1 as we don't want the space - if (!RomanNumerals.isValidRomanNumeral(roman)) return List.of(); + if (!RomanNumerals.isValidRomanNumeral(roman)) yield List.of(); List lore = ItemUtils.getLore(stack); - if (lore.isEmpty()) return List.of(); + if (lore.isEmpty()) yield List.of(); String lastLine = lore.getLast().getString(); - return List.of(SlotText.bottomLeft(switch (lastLine) { + yield List.of(SlotText.bottomLeft(switch (lastLine) { case "Maxed out!" -> Text.literal("Max").withColor(0xfab387); case "Currently upgrading!", "Click to instantly upgrade!" -> Text.literal("⏰").withColor(0xf9e2af).formatted(Formatting.BOLD); case "Click to claim!" -> Text.literal("✅").withColor(0xa6e3a1).formatted(Formatting.BOLD); default -> Text.literal(String.valueOf(RomanNumerals.romanToDecimal(roman))).withColor(0xcba6f7); })); } - default -> { - return List.of(); - } - } + default -> List.of(); + }; } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/MuseumTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/MuseumTooltip.java index fcc9bd97..6a53dbdb 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/MuseumTooltip.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/MuseumTooltip.java @@ -20,7 +20,7 @@ public class MuseumTooltip extends SimpleTooltipAdder { @Override public boolean isEnabled() { - return TooltipInfoType.MOTES.isTooltipEnabled(); + return TooltipInfoType.MUSEUM.isTooltipEnabled(); } @Override diff --git a/src/main/java/de/hysky/skyblocker/utils/container/ContainerMatcher.java b/src/main/java/de/hysky/skyblocker/utils/container/ContainerMatcher.java index 61d3821e..159f399e 100644 --- a/src/main/java/de/hysky/skyblocker/utils/container/ContainerMatcher.java +++ b/src/main/java/de/hysky/skyblocker/utils/container/ContainerMatcher.java @@ -3,11 +3,14 @@ package de.hysky.skyblocker.utils.container; import net.minecraft.client.gui.screen.Screen; import org.jetbrains.annotations.NotNull; -public interface ContainerMatcher { +import java.util.function.Predicate; + +public interface ContainerMatcher extends Predicate { /** * Tests if the given screen should be handled by this matcher. * @return {@code true} if this matcher should apply to the given screen, {@code false} otherwise */ + @Override boolean test(@NotNull Screen screen); /** diff --git a/src/main/java/de/hysky/skyblocker/utils/container/ContainerSolver.java b/src/main/java/de/hysky/skyblocker/utils/container/ContainerSolver.java index f3cb400e..c6162049 100644 --- a/src/main/java/de/hysky/skyblocker/utils/container/ContainerSolver.java +++ b/src/main/java/de/hysky/skyblocker/utils/container/ContainerSolver.java @@ -1,6 +1,7 @@ package de.hysky.skyblocker.utils.container; import de.hysky.skyblocker.SkyblockerMod; +import de.hysky.skyblocker.utils.Resettable; import de.hysky.skyblocker.utils.render.gui.ColorHighlight; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.client.gui.screen.ingame.GenericContainerScreen; @@ -8,11 +9,12 @@ import net.minecraft.item.ItemStack; import java.util.List; -public interface ContainerSolver extends ContainerMatcher { +public interface ContainerSolver extends ContainerMatcher, Resettable { List getColors(Int2ObjectMap slots); default void start(GenericContainerScreen screen) {} + @Override default void reset() {} default boolean onClickSlot(int slot, ItemStack stack, int screenId) { diff --git a/src/main/java/de/hysky/skyblocker/utils/render/gui/ContainerSolver.java b/src/main/java/de/hysky/skyblocker/utils/render/gui/ContainerSolver.java deleted file mode 100644 index e69de29b..00000000 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 deleted file mode 100644 index e69de29b..00000000 -- cgit From c6c3f30fcbacb018a6aaa8aab89395e987ca99ab Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Mon, 22 Jul 2024 16:28:26 +0800 Subject: Add slot text config data fixer --- .../skyblocker/config/SkyblockerConfigManager.java | 2 +- .../config/datafixer/ConfigDataFixer.java | 2 + .../config/datafixer/ConfigFix3SlotText.java | 25 + .../config/datafixer/ConfigDataFixerTest.java | 12 +- .../assets/skyblocker/config/skyblocker-v3.1.json | 606 +++++++++++++++++++++ .../assets/skyblocker/config/skyblocker-v4.json | 606 +++++++++++++++++++++ 6 files changed, 1251 insertions(+), 2 deletions(-) create mode 100644 src/main/java/de/hysky/skyblocker/config/datafixer/ConfigFix3SlotText.java create mode 100644 src/test/resources/assets/skyblocker/config/skyblocker-v3.1.json create mode 100644 src/test/resources/assets/skyblocker/config/skyblocker-v4.json (limited to 'src/main/java/de/hysky/skyblocker') diff --git a/src/main/java/de/hysky/skyblocker/config/SkyblockerConfigManager.java b/src/main/java/de/hysky/skyblocker/config/SkyblockerConfigManager.java index f519473c..4af606ec 100644 --- a/src/main/java/de/hysky/skyblocker/config/SkyblockerConfigManager.java +++ b/src/main/java/de/hysky/skyblocker/config/SkyblockerConfigManager.java @@ -26,7 +26,7 @@ import java.lang.StackWalker.Option; import java.nio.file.Path; public class SkyblockerConfigManager { - public static final int CONFIG_VERSION = 3; + public static final int CONFIG_VERSION = 4; private static final Path CONFIG_FILE = FabricLoader.getInstance().getConfigDir().resolve("skyblocker.json"); private static final ConfigClassHandler HANDLER = ConfigClassHandler.createBuilder(SkyblockerConfig.class) .serializer(config -> GsonConfigSerializerBuilder.create(config) diff --git a/src/main/java/de/hysky/skyblocker/config/datafixer/ConfigDataFixer.java b/src/main/java/de/hysky/skyblocker/config/datafixer/ConfigDataFixer.java index b887d415..f1ab23df 100644 --- a/src/main/java/de/hysky/skyblocker/config/datafixer/ConfigDataFixer.java +++ b/src/main/java/de/hysky/skyblocker/config/datafixer/ConfigDataFixer.java @@ -68,6 +68,8 @@ public class ConfigDataFixer { builder.addFixer(new ConfigFix1(schema2, true)); Schema schema3 = builder.addSchema(3, Schema::new); builder.addFixer(new ConfigFix2QuickNav(schema3, true)); + Schema schema4 = builder.addSchema(4, Schema::new); + builder.addFixer(new ConfigFix3SlotText(schema4, true)); return builder.build().fixer(); } diff --git a/src/main/java/de/hysky/skyblocker/config/datafixer/ConfigFix3SlotText.java b/src/main/java/de/hysky/skyblocker/config/datafixer/ConfigFix3SlotText.java new file mode 100644 index 00000000..1518fe92 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/config/datafixer/ConfigFix3SlotText.java @@ -0,0 +1,25 @@ +package de.hysky.skyblocker.config.datafixer; + +import com.mojang.datafixers.DSL; +import com.mojang.datafixers.TypeRewriteRule; +import com.mojang.datafixers.schemas.Schema; +import com.mojang.serialization.Dynamic; + +public class ConfigFix3SlotText extends ConfigDataFix { + public ConfigFix3SlotText(Schema outputSchema, boolean changesType) { + super(outputSchema, changesType); + } + + @Override + protected TypeRewriteRule makeRule() { + return fixTypeEverywhereTyped( + "ConfigFix3SlotText", + getInputSchema().getType(ConfigDataFixer.CONFIG_TYPE), + typed -> typed.update(DSL.remainderFinder(), this::fix) + ); + } + + private Dynamic fix(Dynamic dynamic) { + return fixVersion(dynamic).update("general", general -> general.update("itemInfoDisplay", itemInfoDisplay -> itemInfoDisplay.update("slotText", slotText -> slotText.createString(slotText.asBoolean(true) ? "ENABLED" : "DISABLED")))); + } +} diff --git a/src/test/java/de/hysky/skyblocker/config/datafixer/ConfigDataFixerTest.java b/src/test/java/de/hysky/skyblocker/config/datafixer/ConfigDataFixerTest.java index fcdbc314..7e73b9e9 100644 --- a/src/test/java/de/hysky/skyblocker/config/datafixer/ConfigDataFixerTest.java +++ b/src/test/java/de/hysky/skyblocker/config/datafixer/ConfigDataFixerTest.java @@ -37,6 +37,16 @@ public class ConfigDataFixerTest { @SuppressWarnings("DataFlowIssue") JsonObject expectedNewConfig = GSON.fromJson(new InputStreamReader(ConfigDataFixerTest.class.getResourceAsStream("/assets/skyblocker/config/skyblocker-v3.json")), JsonObject.class); - Assertions.assertEquals(expectedNewConfig, ConfigDataFixer.apply(oldConfig)); + Assertions.assertEquals(expectedNewConfig, ConfigDataFixer.apply(oldConfig, 3)); + } + + @Test + void testDataFixer3SlotText() { + @SuppressWarnings("DataFlowIssue") + JsonObject oldConfig = GSON.fromJson(new InputStreamReader(ConfigDataFixerTest.class.getResourceAsStream("/assets/skyblocker/config/skyblocker-v3.1.json")), JsonObject.class); + @SuppressWarnings("DataFlowIssue") + JsonObject expectedNewConfig = GSON.fromJson(new InputStreamReader(ConfigDataFixerTest.class.getResourceAsStream("/assets/skyblocker/config/skyblocker-v4.json")), JsonObject.class); + + Assertions.assertEquals(expectedNewConfig, ConfigDataFixer.apply(oldConfig, 4)); } } diff --git a/src/test/resources/assets/skyblocker/config/skyblocker-v3.1.json b/src/test/resources/assets/skyblocker/config/skyblocker-v3.1.json new file mode 100644 index 00000000..5c4e1348 --- /dev/null +++ b/src/test/resources/assets/skyblocker/config/skyblocker-v3.1.json @@ -0,0 +1,606 @@ +{ + "version": 3, + "general": { + "enableTips": true, + "acceptReparty": true, + "shortcuts": { + "enableShortcuts": true, + "enableCommandShortcuts": true, + "enableCommandArgShortcuts": true + }, + "quiverWarning": { + "enableQuiverWarning": true, + "enableQuiverWarningInDungeons": true, + "enableQuiverWarningAfterDungeon": true + }, + "itemList": { + "enableItemList": true + }, + "itemTooltip": { + "enableNPCPrice": true, + "enableMotesPrice": true, + "enableAvgBIN": true, + "avg": "THREE_DAY", + "enableLowestBIN": true, + "enableBazaarPrice": true, + "enableObtainedDate": true, + "enableMuseumInfo": true, + "enableExoticTooltip": true, + "enableAccessoriesHelper": true, + "dungeonQuality": true + }, + "itemInfoDisplay": { + "slotText": true, + "attributeShardInfo": true, + "itemRarityBackgrounds": false, + "itemRarityBackgroundStyle": "CIRCULAR", + "itemRarityBackgroundsOpacity": 1.0 + }, + "itemProtection": { + "slotLockStyle": "FANCY" + }, + "wikiLookup": { + "enableWikiLookup": true, + "officialWiki": true + }, + "specialEffects": { + "rareDungeonDropEffects": true + }, + "hitbox": { + "oldFarmlandHitbox": false, + "oldLeverHitbox": false + }, + "lockedSlots": [], + "protectedItems": [], + "customItemNames": {}, + "customDyeColors": {}, + "customArmorTrims": {}, + "customAnimatedDyes": {} + }, + "uiAndVisuals": { + "compactorDeletorPreview": true, + "dontStripSkinAlphaValues": true, + "backpackPreviewWithoutShift": false, + "hideEmptyTooltips": true, + "fancyCraftingTable": true, + "hideStatusEffectOverlay": false, + "chestValue": { + "enableChestValue": true, + "color": "DARK_GREEN", + "incompleteColor": "BLUE" + }, + "itemCooldown": { + "enableItemCooldowns": true + }, + "titleContainer": { + "titleContainerScale": 100.0, + "x": 540, + "y": 10, + "direction": "HORIZONTAL", + "alignment": "MIDDLE" + }, + "tabHud": { + "tabHudEnabled": true, + "tabHudScale": 100, + "enableHudBackground": true, + "plainPlayerNames": false, + "nameSorting": "DEFAULT" + }, + "fancyAuctionHouse": { + "enabled": false, + "highlightCheapBIN": true + }, + "bars": { + "enableBars": true, + "barPositions": { + "healthBarPosition": "LAYER1", + "manaBarPosition": "LAYER1", + "defenceBarPosition": "LAYER1", + "experienceBarPosition": "LAYER1" + } + }, + "waypoints": { + "enableWaypoints": true, + "waypointType": "WAYPOINT" + }, + "teleportOverlay": { + "enableTeleportOverlays": true, + "enableWeirdTransmission": true, + "enableInstantTransmission": true, + "enableEtherTransmission": true, + "enableSinrecallTransmission": true, + "enableWitherImpact": true + }, + "searchOverlay": { + "enableBazaar": true, + "enableAuctionHouse": true, + "keepPreviousSearches": false, + "maxSuggestions": 3, + "historyLength": 3, + "enableCommands": false, + "bazaarHistory": [ + "ab", + "Mystical Mushroom Soup", + "Enchanted Cocoa Beans" + ], + "auctionHistory": [ + "Rich Chocolate Chunk", + "Smooth Chocolate Bar", + "Juju Shortbow" + ] + }, + "inputCalculator": { + "enabled": true, + "requiresEquals": false + }, + "flameOverlay": { + "flameHeight": 100, + "flameOpacity": 100 + }, + "compactDamage": { + "enabled": true, + "precision": 1, + "normalDamageColor": -1, + "critDamageGradientStart": -171, + "critDamageGradientEnd": -43691 + } + }, + "helpers": { + "enableNewYearCakesHelper": true, + "mythologicalRitual": { + "enableMythologicalRitualHelper": true + }, + "experiments": { + "enableChronomatronSolver": true, + "enableSuperpairsSolver": true, + "enableUltrasequencerSolver": true + }, + "fishing": { + "enableFishingHelper": true, + "enableFishingTimer": false, + "changeTimerColor": true, + "fishingTimerScale": 1.0, + "hideOtherPlayersRods": false + }, + "fairySouls": { + "enableFairySoulsHelper": false, + "highlightFoundSouls": true, + "highlightOnlyNearbySouls": false + }, + "chocolateFactory": { + "enableChocolateFactoryHelper": true, + "enableEggFinder": true, + "sendEggFoundMessages": true, + "waypointType": "WAYPOINT", + "enableTimeTowerReminder": true + } + }, + "dungeons": { + "fancyPartyFinder": true, + "croesusHelper": true, + "playerSecretsTracker": false, + "starredMobGlow": false, + "starredMobBoundingBoxes": true, + "allowDroppingProtectedItems": false, + "hideSoulweaverSkulls": false, + "dungeonMap": { + "enableMap": true, + "mapScaling": 1.0, + "mapX": 2, + "mapY": 2 + }, + "puzzleSolvers": { + "solveTicTacToe": true, + "solveThreeWeirdos": true, + "creeperSolver": true, + "solveWaterboard": true, + "blazeSolver": true, + "solveBoulder": true, + "solveIceFill": true, + "solveSilverfish": true, + "solveTrivia": true + }, + "theProfessor": { + "fireFreezeStaffTimer": true, + "floor3GuardianHealthDisplay": true + }, + "livid": { + "enableLividColorGlow": true, + "enableLividColorText": true, + "enableLividColorTitle": true, + "lividColorText": "The livid color is [color]" + }, + "terminals": { + "solveColor": true, + "solveOrder": true, + "solveStartsWith": true, + "blockIncorrectClicks": false + }, + "secretWaypoints": { + "enableRoomMatching": true, + "enableSecretWaypoints": true, + "waypointType": "WAYPOINT", + "showSecretText": true, + "enableEntranceWaypoints": true, + "enableSuperboomWaypoints": true, + "enableChestWaypoints": true, + "enableItemWaypoints": true, + "enableBatWaypoints": true, + "enableWitherWaypoints": true, + "enableLeverWaypoints": true, + "enableFairySoulWaypoints": true, + "enableStonkWaypoints": true, + "enableAotvWaypoints": true, + "enablePearlWaypoints": true, + "enableDefaultWaypoints": true + }, + "mimicMessage": { + "sendMimicMessage": true, + "mimicMessage": "Mimic dead!" + }, + "doorHighlight": { + "enableDoorHighlight": true, + "doorHighlightType": "OUTLINED_HIGHLIGHT" + }, + "dungeonScore": { + "enableDungeonScore270Message": false, + "enableDungeonScore270Title": false, + "enableDungeonScore270Sound": false, + "dungeonScore270Message": "270 Score Reached!", + "enableDungeonScore300Message": true, + "enableDungeonScore300Title": true, + "enableDungeonScore300Sound": true, + "dungeonScore300Message": "300 Score Reached!", + "enableDungeonCryptsMessage": true, + "dungeonCryptsMessageThreshold": 250, + "dungeonCryptsMessage": "We only have [crypts] crypts out of 5, we need more!", + "enableScoreHUD": true, + "scoreX": 29, + "scoreY": 134, + "scoreScaling": 1.0 + }, + "dungeonChestProfit": { + "enableProfitCalculator": true, + "includeKismet": false, + "includeEssence": true, + "croesusProfit": true, + "neutralThreshold": 1000, + "neutralColor": "DARK_GRAY", + "profitColor": "DARK_GREEN", + "lossColor": "RED", + "incompleteColor": "BLUE" + } + }, + "foraging": { + "hunting": {} + }, + "crimsonIsle": { + "kuudra": { + "supplyWaypoints": true, + "fuelWaypoints": true, + "suppliesAndFuelWaypointType": "WAYPOINT", + "ballistaBuildWaypoints": true, + "safeSpotWaypoints": true, + "pearlWaypoints": true, + "noArrowPoisonWarning": true, + "arrowPoisonThreshold": 32 + } + }, + "mining": { + "enableDrillFuel": true, + "dwarvenMines": { + "solveFetchur": true, + "solvePuzzler": true + }, + "dwarvenHud": { + "enabledCommissions": true, + "enabledPowder": true, + "style": "SIMPLE", + "commissionsX": 842, + "commissionsY": 0, + "powderX": 872, + "powderY": 59 + }, + "crystalHollows": { + "metalDetectorHelper": true + }, + "crystalsHud": { + "enabled": true, + "showLocations": true, + "locationSize": 8, + "x": 9, + "y": 181, + "mapScaling": 1.0 + }, + "crystalsWaypoints": { + "enabled": true, + "findInChat": true + }, + "commissionWaypoints": { + "mode": "BOTH", + "useColor": true, + "textScale": 1.0, + "showBaseCamp": false, + "showEmissary": true + }, + "glacite": { + "coldOverlay": true + } + }, + "farming": { + "garden": { + "farmingHud": { + "enableHud": true, + "x": 0, + "y": 0 + }, + "dicerTitlePrevent": true, + "visitorHelper": true, + "lockMouseTool": false, + "lockMouseGroundOnly": false + } + }, + "otherLocations": { + "barn": { + "solveHungryHiker": true, + "solveTreasureHunter": true + }, + "rift": { + "mirrorverseWaypoints": true, + "blobbercystGlow": true, + "enigmaSoulWaypoints": false, + "highlightFoundEnigmaSouls": true, + "mcGrubberStacks": 0 + }, + "end": { + "enableEnderNodeHelper": true, + "hudEnabled": true, + "zealotKillsEnabled": true, + "protectorLocationEnabled": true, + "waypoint": true, + "x": 10, + "y": 10 + }, + "spidersDen": { + "relics": { + "enableRelicsHelper": false, + "highlightFoundRelics": true + } + } + }, + "slayers": { + "endermanSlayer": { + "enableYangGlyphsNotification": true, + "highlightBeacons": true, + "highlightNukekubiHeads": true + }, + "vampireSlayer": { + "enableEffigyWaypoints": true, + "compactEffigyWaypoints": false, + "effigyUpdateFrequency": 5, + "enableHolyIceIndicator": true, + "holyIceIndicatorTickDelay": 10, + "holyIceUpdateFrequency": 5, + "enableHealingMelonIndicator": true, + "healingMelonHealthThreshold": 4.0, + "enableSteakStakeIndicator": true, + "steakStakeUpdateFrequency": 5, + "enableManiaIndicator": true, + "maniaUpdateFrequency": 5 + } + }, + "chat": { + "hideAbility": "PASS", + "hideHeal": "PASS", + "hideAOTE": "PASS", + "hideImplosion": "PASS", + "hideMoltenWave": "PASS", + "hideAds": "PASS", + "hideTeleportPad": "PASS", + "hideCombo": "PASS", + "hideAutopet": "PASS", + "hideShowOff": "PASS", + "hideToggleSkyMall": "PASS", + "hideMimicKill": "PASS", + "hideDeath": "PASS", + "hideMana": false, + "hideDicer": "PASS", + "chatRuleConfig": { + "announcementLength": 60, + "announcementScale": 3 + } + }, + "quickNav": { + "enableQuickNav": true, + "button1": { + "render": true, + "itemData": { + "item": "minecraft:diamond_sword", + "count": 1, + "components": "[]" + }, + "uiTitle": "Your Skills", + "clickEvent": "/skills" + }, + "button2": { + "render": true, + "itemData": { + "item": "minecraft:painting", + "count": 1, + "components": "[]" + }, + "uiTitle": "Collections", + "clickEvent": "/collection" + }, + "button3": { + "render": true, + "itemData": { + "item": "minecraft:bone", + "count": 1, + "components": "[]" + }, + "uiTitle": "Pets(:? \\(\\d+\\/\\d+\\))?", + "clickEvent": "/pets" + }, + "button4": { + "render": true, + "itemData": { + "item": "minecraft:leather_chestplate", + "count": 1, + "components": "[minecraft:dyed_color={rgb:8991416}]" + }, + "uiTitle": "Wardrobe \\([12]/2\\)", + "clickEvent": "/wardrobe" + }, + "button5": { + "render": true, + "itemData": { + "item": "minecraft:player_head", + "count": 1, + "components": "[minecraft:profile={id:[I;-2081424676,-57521078,-2073572414,158072763],name:\"\",properties:[{name:\"textures\",value:\"ewogICJ0aW1lc3RhbXAiIDogMTU5MTMxMDU4NTYwOSwKICAicHJvZmlsZUlkIiA6ICI0MWQzYWJjMmQ3NDk0MDBjOTA5MGQ1NDM0ZDAzODMxYiIsCiAgInByb2ZpbGVOYW1lIiA6ICJNZWdha2xvb24iLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvODBhMDc3ZTI0OGQxNDI3NzJlYTgwMDg2NGY4YzU3OGI5ZDM2ODg1YjI5ZGFmODM2YjY0YTcwNjg4MmI2ZWMxMCIKICAgIH0KICB9Cn0=\"}]}]" + }, + "uiTitle": "Sack of Sacks", + "clickEvent": "/sacks" + }, + "button6": { + "render": true, + "itemData": { + "item": "minecraft:player_head", + "count": 1, + "components": "[minecraft:profile={name:\"5da6bec64bd942bc\",id:[I;1571208902,1272529596,-1566400349,-679283814],properties:[{name:\"textures\",value:\"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTYxYTkxOGMwYzQ5YmE4ZDA1M2U1MjJjYjkxYWJjNzQ2ODkzNjdiNGQ4YWEwNmJmYzFiYTkxNTQ3MzA5ODVmZiJ9fX0=\"}]}]" + }, + "uiTitle": "Accessory Bag(?: \\(\\d/\\d\\))?", + "clickEvent": "/accessories" + }, + "button7": { + "render": true, + "itemData": { + "item": "minecraft:ender_chest", + "count": 1, + "components": "[]" + }, + "uiTitle": "(?:Rift )?Storage(?: \\(\\d/\\d\\))?", + "clickEvent": "/storage" + }, + "button8": { + "render": true, + "itemData": { + "item": "minecraft:player_head", + "count": 1, + "components": "[minecraft:profile={name:\"421a8ef40eff47f4\",id:[I;1109036788,251611124,-2126904485,-130621758],properties:[{name:\"textures\",value:\"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzljODg4MWU0MjkxNWE5ZDI5YmI2MWExNmZiMjZkMDU5OTEzMjA0ZDI2NWRmNWI0MzliM2Q3OTJhY2Q1NiJ9fX0=\"}]}]" + }, + "uiTitle": "", + "clickEvent": "/is" + }, + "button9": { + "render": true, + "itemData": { + "item": "minecraft:player_head", + "count": 1, + "components": "[minecraft:profile={name:\"e30e30d02878417c\",id:[I;-485609264,678969724,-1929747597,-718202427],properties:[{name:\"textures\",value:\"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZjQ4ODBkMmMxZTdiODZlODc1MjJlMjA4ODI2NTZmNDViYWZkNDJmOTQ5MzJiMmM1ZTBkNmVjYWE0OTBjYjRjIn19fQ==\"}]}]" + }, + "uiTitle": "", + "clickEvent": "/warp garden" + }, + "button10": { + "render": true, + "itemData": { + "item": "minecraft:player_head", + "count": 1, + "components": "[minecraft:profile={id:[I;-300151517,-631415889,-1193921967,-1821784279],name:\"\",properties:[{name:\"textures\",value:\"e3RleHR1cmVzOntTS0lOOnt1cmw6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZDdjYzY2ODc0MjNkMDU3MGQ1NTZhYzUzZTA2NzZjYjU2M2JiZGQ5NzE3Y2Q4MjY5YmRlYmVkNmY2ZDRlN2JmOCJ9fX0=\"}]}]" + }, + "uiTitle": "none", + "clickEvent": "/hub" + }, + "button11": { + "render": true, + "itemData": { + "item": "minecraft:enchanting_table", + "count": 1, + "components": "[]" + }, + "uiTitle": "Enchant Item", + "clickEvent": "/etable" + }, + "button12": { + "render": true, + "itemData": { + "item": "minecraft:gold_block", + "count": 1, + "components": "[]" + }, + "uiTitle": "", + "clickEvent": "/ah" + }, + "button13": { + "render": true, + "itemData": { + "item": "minecraft:player_head", + "count": 1, + "components": "[minecraft:profile={id:[I;-562285948,532499670,-1705302742,775653035],name:\"\",properties:[{name:\"textures\",value:\"e3RleHR1cmVzOntTS0lOOnt1cmw6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZmZlMmRjZGE0MWVjM2FmZjhhZjUwZjI3MmVjMmUwNmE4ZjUwOWUwZjgwN2YyMzU1YTFmNWEzM2MxYjY2ZTliNCJ9fX0=\"}]}]" + }, + "uiTitle": "Bazaar .*", + "clickEvent": "/bz" + }, + "button14": { + "render": true, + "itemData": { + "item": "minecraft:crafting_table", + "count": 1, + "components": "[]" + }, + "uiTitle": "Craft Item", + "clickEvent": "/craft" + } + }, + "eventNotifications": { + "criterion": "SKYBLOCK", + "reminderSound": "PLING", + "eventsReminderTimes": { + "Season of Jerry": [ + 60, + 300 + ], + "New Year Celebration": [ + 60, + 300 + ], + "Jacob's Farming Contest": [ + 60, + 300 + ], + "Dark Auction": [ + 60, + 300 + ], + "Election Booth Opens": [ + 60, + 300 + ], + "Traveling Zoo": [ + 60, + 300 + ], + "Spooky Festival": [ + 60, + 300 + ], + "Jerry's Workshop Opens": [ + 60, + 300 + ], + "SkyBlock Anniversary": [ + 60, + 300 + ] + } + }, + "misc": { + "richPresence": { + "enableRichPresence": false, + "info": "LOCATION", + "cycleMode": false, + "customMessage": "Playing Skyblock" + } + } +} \ No newline at end of file diff --git a/src/test/resources/assets/skyblocker/config/skyblocker-v4.json b/src/test/resources/assets/skyblocker/config/skyblocker-v4.json new file mode 100644 index 00000000..907e6ad1 --- /dev/null +++ b/src/test/resources/assets/skyblocker/config/skyblocker-v4.json @@ -0,0 +1,606 @@ +{ + "version": 4, + "general": { + "enableTips": true, + "acceptReparty": true, + "shortcuts": { + "enableShortcuts": true, + "enableCommandShortcuts": true, + "enableCommandArgShortcuts": true + }, + "quiverWarning": { + "enableQuiverWarning": true, + "enableQuiverWarningInDungeons": true, + "enableQuiverWarningAfterDungeon": true + }, + "itemList": { + "enableItemList": true + }, + "itemTooltip": { + "enableNPCPrice": true, + "enableMotesPrice": true, + "enableAvgBIN": true, + "avg": "THREE_DAY", + "enableLowestBIN": true, + "enableBazaarPrice": true, + "enableObtainedDate": true, + "enableMuseumInfo": true, + "enableExoticTooltip": true, + "enableAccessoriesHelper": true, + "dungeonQuality": true + }, + "itemInfoDisplay": { + "slotText": "ENABLED", + "attributeShardInfo": true, + "itemRarityBackgrounds": false, + "itemRarityBackgroundStyle": "CIRCULAR", + "itemRarityBackgroundsOpacity": 1.0 + }, + "itemProtection": { + "slotLockStyle": "FANCY" + }, + "wikiLookup": { + "enableWikiLookup": true, + "officialWiki": true + }, + "specialEffects": { + "rareDungeonDropEffects": true + }, + "hitbox": { + "oldFarmlandHitbox": false, + "oldLeverHitbox": false + }, + "lockedSlots": [], + "protectedItems": [], + "customItemNames": {}, + "customDyeColors": {}, + "customArmorTrims": {}, + "customAnimatedDyes": {} + }, + "uiAndVisuals": { + "compactorDeletorPreview": true, + "dontStripSkinAlphaValues": true, + "backpackPreviewWithoutShift": false, + "hideEmptyTooltips": true, + "fancyCraftingTable": true, + "hideStatusEffectOverlay": false, + "chestValue": { + "enableChestValue": true, + "color": "DARK_GREEN", + "incompleteColor": "BLUE" + }, + "itemCooldown": { + "enableItemCooldowns": true + }, + "titleContainer": { + "titleContainerScale": 100.0, + "x": 540, + "y": 10, + "direction": "HORIZONTAL", + "alignment": "MIDDLE" + }, + "tabHud": { + "tabHudEnabled": true, + "tabHudScale": 100, + "enableHudBackground": true, + "plainPlayerNames": false, + "nameSorting": "DEFAULT" + }, + "fancyAuctionHouse": { + "enabled": false, + "highlightCheapBIN": true + }, + "bars": { + "enableBars": true, + "barPositions": { + "healthBarPosition": "LAYER1", + "manaBarPosition": "LAYER1", + "defenceBarPosition": "LAYER1", + "experienceBarPosition": "LAYER1" + } + }, + "waypoints": { + "enableWaypoints": true, + "waypointType": "WAYPOINT" + }, + "teleportOverlay": { + "enableTeleportOverlays": true, + "enableWeirdTransmission": true, + "enableInstantTransmission": true, + "enableEtherTransmission": true, + "enableSinrecallTransmission": true, + "enableWitherImpact": true + }, + "searchOverlay": { + "enableBazaar": true, + "enableAuctionHouse": true, + "keepPreviousSearches": false, + "maxSuggestions": 3, + "historyLength": 3, + "enableCommands": false, + "bazaarHistory": [ + "ab", + "Mystical Mushroom Soup", + "Enchanted Cocoa Beans" + ], + "auctionHistory": [ + "Rich Chocolate Chunk", + "Smooth Chocolate Bar", + "Juju Shortbow" + ] + }, + "inputCalculator": { + "enabled": true, + "requiresEquals": false + }, + "flameOverlay": { + "flameHeight": 100, + "flameOpacity": 100 + }, + "compactDamage": { + "enabled": true, + "precision": 1, + "normalDamageColor": -1, + "critDamageGradientStart": -171, + "critDamageGradientEnd": -43691 + } + }, + "helpers": { + "enableNewYearCakesHelper": true, + "mythologicalRitual": { + "enableMythologicalRitualHelper": true + }, + "experiments": { + "enableChronomatronSolver": true, + "enableSuperpairsSolver": true, + "enableUltrasequencerSolver": true + }, + "fishing": { + "enableFishingHelper": true, + "enableFishingTimer": false, + "changeTimerColor": true, + "fishingTimerScale": 1.0, + "hideOtherPlayersRods": false + }, + "fairySouls": { + "enableFairySoulsHelper": false, + "highlightFoundSouls": true, + "highlightOnlyNearbySouls": false + }, + "chocolateFactory": { + "enableChocolateFactoryHelper": true, + "enableEggFinder": true, + "sendEggFoundMessages": true, + "waypointType": "WAYPOINT", + "enableTimeTowerReminder": true + } + }, + "dungeons": { + "fancyPartyFinder": true, + "croesusHelper": true, + "playerSecretsTracker": false, + "starredMobGlow": false, + "starredMobBoundingBoxes": true, + "allowDroppingProtectedItems": false, + "hideSoulweaverSkulls": false, + "dungeonMap": { + "enableMap": true, + "mapScaling": 1.0, + "mapX": 2, + "mapY": 2 + }, + "puzzleSolvers": { + "solveTicTacToe": true, + "solveThreeWeirdos": true, + "creeperSolver": true, + "solveWaterboard": true, + "blazeSolver": true, + "solveBoulder": true, + "solveIceFill": true, + "solveSilverfish": true, + "solveTrivia": true + }, + "theProfessor": { + "fireFreezeStaffTimer": true, + "floor3GuardianHealthDisplay": true + }, + "livid": { + "enableLividColorGlow": true, + "enableLividColorText": true, + "enableLividColorTitle": true, + "lividColorText": "The livid color is [color]" + }, + "terminals": { + "solveColor": true, + "solveOrder": true, + "solveStartsWith": true, + "blockIncorrectClicks": false + }, + "secretWaypoints": { + "enableRoomMatching": true, + "enableSecretWaypoints": true, + "waypointType": "WAYPOINT", + "showSecretText": true, + "enableEntranceWaypoints": true, + "enableSuperboomWaypoints": true, + "enableChestWaypoints": true, + "enableItemWaypoints": true, + "enableBatWaypoints": true, + "enableWitherWaypoints": true, + "enableLeverWaypoints": true, + "enableFairySoulWaypoints": true, + "enableStonkWaypoints": true, + "enableAotvWaypoints": true, + "enablePearlWaypoints": true, + "enableDefaultWaypoints": true + }, + "mimicMessage": { + "sendMimicMessage": true, + "mimicMessage": "Mimic dead!" + }, + "doorHighlight": { + "enableDoorHighlight": true, + "doorHighlightType": "OUTLINED_HIGHLIGHT" + }, + "dungeonScore": { + "enableDungeonScore270Message": false, + "enableDungeonScore270Title": false, + "enableDungeonScore270Sound": false, + "dungeonScore270Message": "270 Score Reached!", + "enableDungeonScore300Message": true, + "enableDungeonScore300Title": true, + "enableDungeonScore300Sound": true, + "dungeonScore300Message": "300 Score Reached!", + "enableDungeonCryptsMessage": true, + "dungeonCryptsMessageThreshold": 250, + "dungeonCryptsMessage": "We only have [crypts] crypts out of 5, we need more!", + "enableScoreHUD": true, + "scoreX": 29, + "scoreY": 134, + "scoreScaling": 1.0 + }, + "dungeonChestProfit": { + "enableProfitCalculator": true, + "includeKismet": false, + "includeEssence": true, + "croesusProfit": true, + "neutralThreshold": 1000, + "neutralColor": "DARK_GRAY", + "profitColor": "DARK_GREEN", + "lossColor": "RED", + "incompleteColor": "BLUE" + } + }, + "foraging": { + "hunting": {} + }, + "crimsonIsle": { + "kuudra": { + "supplyWaypoints": true, + "fuelWaypoints": true, + "suppliesAndFuelWaypointType": "WAYPOINT", + "ballistaBuildWaypoints": true, + "safeSpotWaypoints": true, + "pearlWaypoints": true, + "noArrowPoisonWarning": true, + "arrowPoisonThreshold": 32 + } + }, + "mining": { + "enableDrillFuel": true, + "dwarvenMines": { + "solveFetchur": true, + "solvePuzzler": true + }, + "dwarvenHud": { + "enabledCommissions": true, + "enabledPowder": true, + "style": "SIMPLE", + "commissionsX": 842, + "commissionsY": 0, + "powderX": 872, + "powderY": 59 + }, + "crystalHollows": { + "metalDetectorHelper": true + }, + "crystalsHud": { + "enabled": true, + "showLocations": true, + "locationSize": 8, + "x": 9, + "y": 181, + "mapScaling": 1.0 + }, + "crystalsWaypoints": { + "enabled": true, + "findInChat": true + }, + "commissionWaypoints": { + "mode": "BOTH", + "useColor": true, + "textScale": 1.0, + "showBaseCamp": false, + "showEmissary": true + }, + "glacite": { + "coldOverlay": true + } + }, + "farming": { + "garden": { + "farmingHud": { + "enableHud": true, + "x": 0, + "y": 0 + }, + "dicerTitlePrevent": true, + "visitorHelper": true, + "lockMouseTool": false, + "lockMouseGroundOnly": false + } + }, + "otherLocations": { + "barn": { + "solveHungryHiker": true, + "solveTreasureHunter": true + }, + "rift": { + "mirrorverseWaypoints": true, + "blobbercystGlow": true, + "enigmaSoulWaypoints": false, + "highlightFoundEnigmaSouls": true, + "mcGrubberStacks": 0 + }, + "end": { + "enableEnderNodeHelper": true, + "hudEnabled": true, + "zealotKillsEnabled": true, + "protectorLocationEnabled": true, + "waypoint": true, + "x": 10, + "y": 10 + }, + "spidersDen": { + "relics": { + "enableRelicsHelper": false, + "highlightFoundRelics": true + } + } + }, + "slayers": { + "endermanSlayer": { + "enableYangGlyphsNotification": true, + "highlightBeacons": true, + "highlightNukekubiHeads": true + }, + "vampireSlayer": { + "enableEffigyWaypoints": true, + "compactEffigyWaypoints": false, + "effigyUpdateFrequency": 5, + "enableHolyIceIndicator": true, + "holyIceIndicatorTickDelay": 10, + "holyIceUpdateFrequency": 5, + "enableHealingMelonIndicator": true, + "healingMelonHealthThreshold": 4.0, + "enableSteakStakeIndicator": true, + "steakStakeUpdateFrequency": 5, + "enableManiaIndicator": true, + "maniaUpdateFrequency": 5 + } + }, + "chat": { + "hideAbility": "PASS", + "hideHeal": "PASS", + "hideAOTE": "PASS", + "hideImplosion": "PASS", + "hideMoltenWave": "PASS", + "hideAds": "PASS", + "hideTeleportPad": "PASS", + "hideCombo": "PASS", + "hideAutopet": "PASS", + "hideShowOff": "PASS", + "hideToggleSkyMall": "PASS", + "hideMimicKill": "PASS", + "hideDeath": "PASS", + "hideMana": false, + "hideDicer": "PASS", + "chatRuleConfig": { + "announcementLength": 60, + "announcementScale": 3 + } + }, + "quickNav": { + "enableQuickNav": true, + "button1": { + "render": true, + "itemData": { + "item": "minecraft:diamond_sword", + "count": 1, + "components": "[]" + }, + "uiTitle": "Your Skills", + "clickEvent": "/skills" + }, + "button2": { + "render": true, + "itemData": { + "item": "minecraft:painting", + "count": 1, + "components": "[]" + }, + "uiTitle": "Collections", + "clickEvent": "/collection" + }, + "button3": { + "render": true, + "itemData": { + "item": "minecraft:bone", + "count": 1, + "components": "[]" + }, + "uiTitle": "Pets(:? \\(\\d+\\/\\d+\\))?", + "clickEvent": "/pets" + }, + "button4": { + "render": true, + "itemData": { + "item": "minecraft:leather_chestplate", + "count": 1, + "components": "[minecraft:dyed_color={rgb:8991416}]" + }, + "uiTitle": "Wardrobe \\([12]/2\\)", + "clickEvent": "/wardrobe" + }, + "button5": { + "render": true, + "itemData": { + "item": "minecraft:player_head", + "count": 1, + "components": "[minecraft:profile={id:[I;-2081424676,-57521078,-2073572414,158072763],name:\"\",properties:[{name:\"textures\",value:\"ewogICJ0aW1lc3RhbXAiIDogMTU5MTMxMDU4NTYwOSwKICAicHJvZmlsZUlkIiA6ICI0MWQzYWJjMmQ3NDk0MDBjOTA5MGQ1NDM0ZDAzODMxYiIsCiAgInByb2ZpbGVOYW1lIiA6ICJNZWdha2xvb24iLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvODBhMDc3ZTI0OGQxNDI3NzJlYTgwMDg2NGY4YzU3OGI5ZDM2ODg1YjI5ZGFmODM2YjY0YTcwNjg4MmI2ZWMxMCIKICAgIH0KICB9Cn0=\"}]}]" + }, + "uiTitle": "Sack of Sacks", + "clickEvent": "/sacks" + }, + "button6": { + "render": true, + "itemData": { + "item": "minecraft:player_head", + "count": 1, + "components": "[minecraft:profile={name:\"5da6bec64bd942bc\",id:[I;1571208902,1272529596,-1566400349,-679283814],properties:[{name:\"textures\",value:\"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTYxYTkxOGMwYzQ5YmE4ZDA1M2U1MjJjYjkxYWJjNzQ2ODkzNjdiNGQ4YWEwNmJmYzFiYTkxNTQ3MzA5ODVmZiJ9fX0=\"}]}]" + }, + "uiTitle": "Accessory Bag(?: \\(\\d/\\d\\))?", + "clickEvent": "/accessories" + }, + "button7": { + "render": true, + "itemData": { + "item": "minecraft:ender_chest", + "count": 1, + "components": "[]" + }, + "uiTitle": "(?:Rift )?Storage(?: \\(\\d/\\d\\))?", + "clickEvent": "/storage" + }, + "button8": { + "render": true, + "itemData": { + "item": "minecraft:player_head", + "count": 1, + "components": "[minecraft:profile={name:\"421a8ef40eff47f4\",id:[I;1109036788,251611124,-2126904485,-130621758],properties:[{name:\"textures\",value:\"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzljODg4MWU0MjkxNWE5ZDI5YmI2MWExNmZiMjZkMDU5OTEzMjA0ZDI2NWRmNWI0MzliM2Q3OTJhY2Q1NiJ9fX0=\"}]}]" + }, + "uiTitle": "", + "clickEvent": "/is" + }, + "button9": { + "render": true, + "itemData": { + "item": "minecraft:player_head", + "count": 1, + "components": "[minecraft:profile={name:\"e30e30d02878417c\",id:[I;-485609264,678969724,-1929747597,-718202427],properties:[{name:\"textures\",value:\"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZjQ4ODBkMmMxZTdiODZlODc1MjJlMjA4ODI2NTZmNDViYWZkNDJmOTQ5MzJiMmM1ZTBkNmVjYWE0OTBjYjRjIn19fQ==\"}]}]" + }, + "uiTitle": "", + "clickEvent": "/warp garden" + }, + "button10": { + "render": true, + "itemData": { + "item": "minecraft:player_head", + "count": 1, + "components": "[minecraft:profile={id:[I;-300151517,-631415889,-1193921967,-1821784279],name:\"\",properties:[{name:\"textures\",value:\"e3RleHR1cmVzOntTS0lOOnt1cmw6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZDdjYzY2ODc0MjNkMDU3MGQ1NTZhYzUzZTA2NzZjYjU2M2JiZGQ5NzE3Y2Q4MjY5YmRlYmVkNmY2ZDRlN2JmOCJ9fX0=\"}]}]" + }, + "uiTitle": "none", + "clickEvent": "/hub" + }, + "button11": { + "render": true, + "itemData": { + "item": "minecraft:enchanting_table", + "count": 1, + "components": "[]" + }, + "uiTitle": "Enchant Item", + "clickEvent": "/etable" + }, + "button12": { + "render": true, + "itemData": { + "item": "minecraft:gold_block", + "count": 1, + "components": "[]" + }, + "uiTitle": "", + "clickEvent": "/ah" + }, + "button13": { + "render": true, + "itemData": { + "item": "minecraft:player_head", + "count": 1, + "components": "[minecraft:profile={id:[I;-562285948,532499670,-1705302742,775653035],name:\"\",properties:[{name:\"textures\",value:\"e3RleHR1cmVzOntTS0lOOnt1cmw6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZmZlMmRjZGE0MWVjM2FmZjhhZjUwZjI3MmVjMmUwNmE4ZjUwOWUwZjgwN2YyMzU1YTFmNWEzM2MxYjY2ZTliNCJ9fX0=\"}]}]" + }, + "uiTitle": "Bazaar .*", + "clickEvent": "/bz" + }, + "button14": { + "render": true, + "itemData": { + "item": "minecraft:crafting_table", + "count": 1, + "components": "[]" + }, + "uiTitle": "Craft Item", + "clickEvent": "/craft" + } + }, + "eventNotifications": { + "criterion": "SKYBLOCK", + "reminderSound": "PLING", + "eventsReminderTimes": { + "Season of Jerry": [ + 60, + 300 + ], + "New Year Celebration": [ + 60, + 300 + ], + "Jacob's Farming Contest": [ + 60, + 300 + ], + "Dark Auction": [ + 60, + 300 + ], + "Election Booth Opens": [ + 60, + 300 + ], + "Traveling Zoo": [ + 60, + 300 + ], + "Spooky Festival": [ + 60, + 300 + ], + "Jerry's Workshop Opens": [ + 60, + 300 + ], + "SkyBlock Anniversary": [ + 60, + 300 + ] + } + }, + "misc": { + "richPresence": { + "enableRichPresence": false, + "info": "LOCATION", + "cycleMode": false, + "customMessage": "Playing Skyblock" + } + } +} \ No newline at end of file -- cgit From 156e70818b2f062ebf7fcd34fa0d23017c84a720 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Wed, 24 Jul 2024 00:19:59 +0800 Subject: Revert "Add slot text config data fixer" This reverts commit c6c3f30fcbacb018a6aaa8aab89395e987ca99ab. --- .../skyblocker/config/SkyblockerConfigManager.java | 2 +- .../config/datafixer/ConfigDataFixer.java | 2 - .../config/datafixer/ConfigFix3SlotText.java | 25 - .../config/datafixer/ConfigDataFixerTest.java | 12 +- .../assets/skyblocker/config/skyblocker-v3.1.json | 606 --------------------- .../assets/skyblocker/config/skyblocker-v4.json | 606 --------------------- 6 files changed, 2 insertions(+), 1251 deletions(-) delete mode 100644 src/main/java/de/hysky/skyblocker/config/datafixer/ConfigFix3SlotText.java delete mode 100644 src/test/resources/assets/skyblocker/config/skyblocker-v3.1.json delete mode 100644 src/test/resources/assets/skyblocker/config/skyblocker-v4.json (limited to 'src/main/java/de/hysky/skyblocker') diff --git a/src/main/java/de/hysky/skyblocker/config/SkyblockerConfigManager.java b/src/main/java/de/hysky/skyblocker/config/SkyblockerConfigManager.java index 4af606ec..f519473c 100644 --- a/src/main/java/de/hysky/skyblocker/config/SkyblockerConfigManager.java +++ b/src/main/java/de/hysky/skyblocker/config/SkyblockerConfigManager.java @@ -26,7 +26,7 @@ import java.lang.StackWalker.Option; import java.nio.file.Path; public class SkyblockerConfigManager { - public static final int CONFIG_VERSION = 4; + public static final int CONFIG_VERSION = 3; private static final Path CONFIG_FILE = FabricLoader.getInstance().getConfigDir().resolve("skyblocker.json"); private static final ConfigClassHandler HANDLER = ConfigClassHandler.createBuilder(SkyblockerConfig.class) .serializer(config -> GsonConfigSerializerBuilder.create(config) diff --git a/src/main/java/de/hysky/skyblocker/config/datafixer/ConfigDataFixer.java b/src/main/java/de/hysky/skyblocker/config/datafixer/ConfigDataFixer.java index f1ab23df..b887d415 100644 --- a/src/main/java/de/hysky/skyblocker/config/datafixer/ConfigDataFixer.java +++ b/src/main/java/de/hysky/skyblocker/config/datafixer/ConfigDataFixer.java @@ -68,8 +68,6 @@ public class ConfigDataFixer { builder.addFixer(new ConfigFix1(schema2, true)); Schema schema3 = builder.addSchema(3, Schema::new); builder.addFixer(new ConfigFix2QuickNav(schema3, true)); - Schema schema4 = builder.addSchema(4, Schema::new); - builder.addFixer(new ConfigFix3SlotText(schema4, true)); return builder.build().fixer(); } diff --git a/src/main/java/de/hysky/skyblocker/config/datafixer/ConfigFix3SlotText.java b/src/main/java/de/hysky/skyblocker/config/datafixer/ConfigFix3SlotText.java deleted file mode 100644 index 1518fe92..00000000 --- a/src/main/java/de/hysky/skyblocker/config/datafixer/ConfigFix3SlotText.java +++ /dev/null @@ -1,25 +0,0 @@ -package de.hysky.skyblocker.config.datafixer; - -import com.mojang.datafixers.DSL; -import com.mojang.datafixers.TypeRewriteRule; -import com.mojang.datafixers.schemas.Schema; -import com.mojang.serialization.Dynamic; - -public class ConfigFix3SlotText extends ConfigDataFix { - public ConfigFix3SlotText(Schema outputSchema, boolean changesType) { - super(outputSchema, changesType); - } - - @Override - protected TypeRewriteRule makeRule() { - return fixTypeEverywhereTyped( - "ConfigFix3SlotText", - getInputSchema().getType(ConfigDataFixer.CONFIG_TYPE), - typed -> typed.update(DSL.remainderFinder(), this::fix) - ); - } - - private Dynamic fix(Dynamic dynamic) { - return fixVersion(dynamic).update("general", general -> general.update("itemInfoDisplay", itemInfoDisplay -> itemInfoDisplay.update("slotText", slotText -> slotText.createString(slotText.asBoolean(true) ? "ENABLED" : "DISABLED")))); - } -} diff --git a/src/test/java/de/hysky/skyblocker/config/datafixer/ConfigDataFixerTest.java b/src/test/java/de/hysky/skyblocker/config/datafixer/ConfigDataFixerTest.java index 7e73b9e9..fcdbc314 100644 --- a/src/test/java/de/hysky/skyblocker/config/datafixer/ConfigDataFixerTest.java +++ b/src/test/java/de/hysky/skyblocker/config/datafixer/ConfigDataFixerTest.java @@ -37,16 +37,6 @@ public class ConfigDataFixerTest { @SuppressWarnings("DataFlowIssue") JsonObject expectedNewConfig = GSON.fromJson(new InputStreamReader(ConfigDataFixerTest.class.getResourceAsStream("/assets/skyblocker/config/skyblocker-v3.json")), JsonObject.class); - Assertions.assertEquals(expectedNewConfig, ConfigDataFixer.apply(oldConfig, 3)); - } - - @Test - void testDataFixer3SlotText() { - @SuppressWarnings("DataFlowIssue") - JsonObject oldConfig = GSON.fromJson(new InputStreamReader(ConfigDataFixerTest.class.getResourceAsStream("/assets/skyblocker/config/skyblocker-v3.1.json")), JsonObject.class); - @SuppressWarnings("DataFlowIssue") - JsonObject expectedNewConfig = GSON.fromJson(new InputStreamReader(ConfigDataFixerTest.class.getResourceAsStream("/assets/skyblocker/config/skyblocker-v4.json")), JsonObject.class); - - Assertions.assertEquals(expectedNewConfig, ConfigDataFixer.apply(oldConfig, 4)); + Assertions.assertEquals(expectedNewConfig, ConfigDataFixer.apply(oldConfig)); } } diff --git a/src/test/resources/assets/skyblocker/config/skyblocker-v3.1.json b/src/test/resources/assets/skyblocker/config/skyblocker-v3.1.json deleted file mode 100644 index 5c4e1348..00000000 --- a/src/test/resources/assets/skyblocker/config/skyblocker-v3.1.json +++ /dev/null @@ -1,606 +0,0 @@ -{ - "version": 3, - "general": { - "enableTips": true, - "acceptReparty": true, - "shortcuts": { - "enableShortcuts": true, - "enableCommandShortcuts": true, - "enableCommandArgShortcuts": true - }, - "quiverWarning": { - "enableQuiverWarning": true, - "enableQuiverWarningInDungeons": true, - "enableQuiverWarningAfterDungeon": true - }, - "itemList": { - "enableItemList": true - }, - "itemTooltip": { - "enableNPCPrice": true, - "enableMotesPrice": true, - "enableAvgBIN": true, - "avg": "THREE_DAY", - "enableLowestBIN": true, - "enableBazaarPrice": true, - "enableObtainedDate": true, - "enableMuseumInfo": true, - "enableExoticTooltip": true, - "enableAccessoriesHelper": true, - "dungeonQuality": true - }, - "itemInfoDisplay": { - "slotText": true, - "attributeShardInfo": true, - "itemRarityBackgrounds": false, - "itemRarityBackgroundStyle": "CIRCULAR", - "itemRarityBackgroundsOpacity": 1.0 - }, - "itemProtection": { - "slotLockStyle": "FANCY" - }, - "wikiLookup": { - "enableWikiLookup": true, - "officialWiki": true - }, - "specialEffects": { - "rareDungeonDropEffects": true - }, - "hitbox": { - "oldFarmlandHitbox": false, - "oldLeverHitbox": false - }, - "lockedSlots": [], - "protectedItems": [], - "customItemNames": {}, - "customDyeColors": {}, - "customArmorTrims": {}, - "customAnimatedDyes": {} - }, - "uiAndVisuals": { - "compactorDeletorPreview": true, - "dontStripSkinAlphaValues": true, - "backpackPreviewWithoutShift": false, - "hideEmptyTooltips": true, - "fancyCraftingTable": true, - "hideStatusEffectOverlay": false, - "chestValue": { - "enableChestValue": true, - "color": "DARK_GREEN", - "incompleteColor": "BLUE" - }, - "itemCooldown": { - "enableItemCooldowns": true - }, - "titleContainer": { - "titleContainerScale": 100.0, - "x": 540, - "y": 10, - "direction": "HORIZONTAL", - "alignment": "MIDDLE" - }, - "tabHud": { - "tabHudEnabled": true, - "tabHudScale": 100, - "enableHudBackground": true, - "plainPlayerNames": false, - "nameSorting": "DEFAULT" - }, - "fancyAuctionHouse": { - "enabled": false, - "highlightCheapBIN": true - }, - "bars": { - "enableBars": true, - "barPositions": { - "healthBarPosition": "LAYER1", - "manaBarPosition": "LAYER1", - "defenceBarPosition": "LAYER1", - "experienceBarPosition": "LAYER1" - } - }, - "waypoints": { - "enableWaypoints": true, - "waypointType": "WAYPOINT" - }, - "teleportOverlay": { - "enableTeleportOverlays": true, - "enableWeirdTransmission": true, - "enableInstantTransmission": true, - "enableEtherTransmission": true, - "enableSinrecallTransmission": true, - "enableWitherImpact": true - }, - "searchOverlay": { - "enableBazaar": true, - "enableAuctionHouse": true, - "keepPreviousSearches": false, - "maxSuggestions": 3, - "historyLength": 3, - "enableCommands": false, - "bazaarHistory": [ - "ab", - "Mystical Mushroom Soup", - "Enchanted Cocoa Beans" - ], - "auctionHistory": [ - "Rich Chocolate Chunk", - "Smooth Chocolate Bar", - "Juju Shortbow" - ] - }, - "inputCalculator": { - "enabled": true, - "requiresEquals": false - }, - "flameOverlay": { - "flameHeight": 100, - "flameOpacity": 100 - }, - "compactDamage": { - "enabled": true, - "precision": 1, - "normalDamageColor": -1, - "critDamageGradientStart": -171, - "critDamageGradientEnd": -43691 - } - }, - "helpers": { - "enableNewYearCakesHelper": true, - "mythologicalRitual": { - "enableMythologicalRitualHelper": true - }, - "experiments": { - "enableChronomatronSolver": true, - "enableSuperpairsSolver": true, - "enableUltrasequencerSolver": true - }, - "fishing": { - "enableFishingHelper": true, - "enableFishingTimer": false, - "changeTimerColor": true, - "fishingTimerScale": 1.0, - "hideOtherPlayersRods": false - }, - "fairySouls": { - "enableFairySoulsHelper": false, - "highlightFoundSouls": true, - "highlightOnlyNearbySouls": false - }, - "chocolateFactory": { - "enableChocolateFactoryHelper": true, - "enableEggFinder": true, - "sendEggFoundMessages": true, - "waypointType": "WAYPOINT", - "enableTimeTowerReminder": true - } - }, - "dungeons": { - "fancyPartyFinder": true, - "croesusHelper": true, - "playerSecretsTracker": false, - "starredMobGlow": false, - "starredMobBoundingBoxes": true, - "allowDroppingProtectedItems": false, - "hideSoulweaverSkulls": false, - "dungeonMap": { - "enableMap": true, - "mapScaling": 1.0, - "mapX": 2, - "mapY": 2 - }, - "puzzleSolvers": { - "solveTicTacToe": true, - "solveThreeWeirdos": true, - "creeperSolver": true, - "solveWaterboard": true, - "blazeSolver": true, - "solveBoulder": true, - "solveIceFill": true, - "solveSilverfish": true, - "solveTrivia": true - }, - "theProfessor": { - "fireFreezeStaffTimer": true, - "floor3GuardianHealthDisplay": true - }, - "livid": { - "enableLividColorGlow": true, - "enableLividColorText": true, - "enableLividColorTitle": true, - "lividColorText": "The livid color is [color]" - }, - "terminals": { - "solveColor": true, - "solveOrder": true, - "solveStartsWith": true, - "blockIncorrectClicks": false - }, - "secretWaypoints": { - "enableRoomMatching": true, - "enableSecretWaypoints": true, - "waypointType": "WAYPOINT", - "showSecretText": true, - "enableEntranceWaypoints": true, - "enableSuperboomWaypoints": true, - "enableChestWaypoints": true, - "enableItemWaypoints": true, - "enableBatWaypoints": true, - "enableWitherWaypoints": true, - "enableLeverWaypoints": true, - "enableFairySoulWaypoints": true, - "enableStonkWaypoints": true, - "enableAotvWaypoints": true, - "enablePearlWaypoints": true, - "enableDefaultWaypoints": true - }, - "mimicMessage": { - "sendMimicMessage": true, - "mimicMessage": "Mimic dead!" - }, - "doorHighlight": { - "enableDoorHighlight": true, - "doorHighlightType": "OUTLINED_HIGHLIGHT" - }, - "dungeonScore": { - "enableDungeonScore270Message": false, - "enableDungeonScore270Title": false, - "enableDungeonScore270Sound": false, - "dungeonScore270Message": "270 Score Reached!", - "enableDungeonScore300Message": true, - "enableDungeonScore300Title": true, - "enableDungeonScore300Sound": true, - "dungeonScore300Message": "300 Score Reached!", - "enableDungeonCryptsMessage": true, - "dungeonCryptsMessageThreshold": 250, - "dungeonCryptsMessage": "We only have [crypts] crypts out of 5, we need more!", - "enableScoreHUD": true, - "scoreX": 29, - "scoreY": 134, - "scoreScaling": 1.0 - }, - "dungeonChestProfit": { - "enableProfitCalculator": true, - "includeKismet": false, - "includeEssence": true, - "croesusProfit": true, - "neutralThreshold": 1000, - "neutralColor": "DARK_GRAY", - "profitColor": "DARK_GREEN", - "lossColor": "RED", - "incompleteColor": "BLUE" - } - }, - "foraging": { - "hunting": {} - }, - "crimsonIsle": { - "kuudra": { - "supplyWaypoints": true, - "fuelWaypoints": true, - "suppliesAndFuelWaypointType": "WAYPOINT", - "ballistaBuildWaypoints": true, - "safeSpotWaypoints": true, - "pearlWaypoints": true, - "noArrowPoisonWarning": true, - "arrowPoisonThreshold": 32 - } - }, - "mining": { - "enableDrillFuel": true, - "dwarvenMines": { - "solveFetchur": true, - "solvePuzzler": true - }, - "dwarvenHud": { - "enabledCommissions": true, - "enabledPowder": true, - "style": "SIMPLE", - "commissionsX": 842, - "commissionsY": 0, - "powderX": 872, - "powderY": 59 - }, - "crystalHollows": { - "metalDetectorHelper": true - }, - "crystalsHud": { - "enabled": true, - "showLocations": true, - "locationSize": 8, - "x": 9, - "y": 181, - "mapScaling": 1.0 - }, - "crystalsWaypoints": { - "enabled": true, - "findInChat": true - }, - "commissionWaypoints": { - "mode": "BOTH", - "useColor": true, - "textScale": 1.0, - "showBaseCamp": false, - "showEmissary": true - }, - "glacite": { - "coldOverlay": true - } - }, - "farming": { - "garden": { - "farmingHud": { - "enableHud": true, - "x": 0, - "y": 0 - }, - "dicerTitlePrevent": true, - "visitorHelper": true, - "lockMouseTool": false, - "lockMouseGroundOnly": false - } - }, - "otherLocations": { - "barn": { - "solveHungryHiker": true, - "solveTreasureHunter": true - }, - "rift": { - "mirrorverseWaypoints": true, - "blobbercystGlow": true, - "enigmaSoulWaypoints": false, - "highlightFoundEnigmaSouls": true, - "mcGrubberStacks": 0 - }, - "end": { - "enableEnderNodeHelper": true, - "hudEnabled": true, - "zealotKillsEnabled": true, - "protectorLocationEnabled": true, - "waypoint": true, - "x": 10, - "y": 10 - }, - "spidersDen": { - "relics": { - "enableRelicsHelper": false, - "highlightFoundRelics": true - } - } - }, - "slayers": { - "endermanSlayer": { - "enableYangGlyphsNotification": true, - "highlightBeacons": true, - "highlightNukekubiHeads": true - }, - "vampireSlayer": { - "enableEffigyWaypoints": true, - "compactEffigyWaypoints": false, - "effigyUpdateFrequency": 5, - "enableHolyIceIndicator": true, - "holyIceIndicatorTickDelay": 10, - "holyIceUpdateFrequency": 5, - "enableHealingMelonIndicator": true, - "healingMelonHealthThreshold": 4.0, - "enableSteakStakeIndicator": true, - "steakStakeUpdateFrequency": 5, - "enableManiaIndicator": true, - "maniaUpdateFrequency": 5 - } - }, - "chat": { - "hideAbility": "PASS", - "hideHeal": "PASS", - "hideAOTE": "PASS", - "hideImplosion": "PASS", - "hideMoltenWave": "PASS", - "hideAds": "PASS", - "hideTeleportPad": "PASS", - "hideCombo": "PASS", - "hideAutopet": "PASS", - "hideShowOff": "PASS", - "hideToggleSkyMall": "PASS", - "hideMimicKill": "PASS", - "hideDeath": "PASS", - "hideMana": false, - "hideDicer": "PASS", - "chatRuleConfig": { - "announcementLength": 60, - "announcementScale": 3 - } - }, - "quickNav": { - "enableQuickNav": true, - "button1": { - "render": true, - "itemData": { - "item": "minecraft:diamond_sword", - "count": 1, - "components": "[]" - }, - "uiTitle": "Your Skills", - "clickEvent": "/skills" - }, - "button2": { - "render": true, - "itemData": { - "item": "minecraft:painting", - "count": 1, - "components": "[]" - }, - "uiTitle": "Collections", - "clickEvent": "/collection" - }, - "button3": { - "render": true, - "itemData": { - "item": "minecraft:bone", - "count": 1, - "components": "[]" - }, - "uiTitle": "Pets(:? \\(\\d+\\/\\d+\\))?", - "clickEvent": "/pets" - }, - "button4": { - "render": true, - "itemData": { - "item": "minecraft:leather_chestplate", - "count": 1, - "components": "[minecraft:dyed_color={rgb:8991416}]" - }, - "uiTitle": "Wardrobe \\([12]/2\\)", - "clickEvent": "/wardrobe" - }, - "button5": { - "render": true, - "itemData": { - "item": "minecraft:player_head", - "count": 1, - "components": "[minecraft:profile={id:[I;-2081424676,-57521078,-2073572414,158072763],name:\"\",properties:[{name:\"textures\",value:\"ewogICJ0aW1lc3RhbXAiIDogMTU5MTMxMDU4NTYwOSwKICAicHJvZmlsZUlkIiA6ICI0MWQzYWJjMmQ3NDk0MDBjOTA5MGQ1NDM0ZDAzODMxYiIsCiAgInByb2ZpbGVOYW1lIiA6ICJNZWdha2xvb24iLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvODBhMDc3ZTI0OGQxNDI3NzJlYTgwMDg2NGY4YzU3OGI5ZDM2ODg1YjI5ZGFmODM2YjY0YTcwNjg4MmI2ZWMxMCIKICAgIH0KICB9Cn0=\"}]}]" - }, - "uiTitle": "Sack of Sacks", - "clickEvent": "/sacks" - }, - "button6": { - "render": true, - "itemData": { - "item": "minecraft:player_head", - "count": 1, - "components": "[minecraft:profile={name:\"5da6bec64bd942bc\",id:[I;1571208902,1272529596,-1566400349,-679283814],properties:[{name:\"textures\",value:\"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTYxYTkxOGMwYzQ5YmE4ZDA1M2U1MjJjYjkxYWJjNzQ2ODkzNjdiNGQ4YWEwNmJmYzFiYTkxNTQ3MzA5ODVmZiJ9fX0=\"}]}]" - }, - "uiTitle": "Accessory Bag(?: \\(\\d/\\d\\))?", - "clickEvent": "/accessories" - }, - "button7": { - "render": true, - "itemData": { - "item": "minecraft:ender_chest", - "count": 1, - "components": "[]" - }, - "uiTitle": "(?:Rift )?Storage(?: \\(\\d/\\d\\))?", - "clickEvent": "/storage" - }, - "button8": { - "render": true, - "itemData": { - "item": "minecraft:player_head", - "count": 1, - "components": "[minecraft:profile={name:\"421a8ef40eff47f4\",id:[I;1109036788,251611124,-2126904485,-130621758],properties:[{name:\"textures\",value:\"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzljODg4MWU0MjkxNWE5ZDI5YmI2MWExNmZiMjZkMDU5OTEzMjA0ZDI2NWRmNWI0MzliM2Q3OTJhY2Q1NiJ9fX0=\"}]}]" - }, - "uiTitle": "", - "clickEvent": "/is" - }, - "button9": { - "render": true, - "itemData": { - "item": "minecraft:player_head", - "count": 1, - "components": "[minecraft:profile={name:\"e30e30d02878417c\",id:[I;-485609264,678969724,-1929747597,-718202427],properties:[{name:\"textures\",value:\"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZjQ4ODBkMmMxZTdiODZlODc1MjJlMjA4ODI2NTZmNDViYWZkNDJmOTQ5MzJiMmM1ZTBkNmVjYWE0OTBjYjRjIn19fQ==\"}]}]" - }, - "uiTitle": "", - "clickEvent": "/warp garden" - }, - "button10": { - "render": true, - "itemData": { - "item": "minecraft:player_head", - "count": 1, - "components": "[minecraft:profile={id:[I;-300151517,-631415889,-1193921967,-1821784279],name:\"\",properties:[{name:\"textures\",value:\"e3RleHR1cmVzOntTS0lOOnt1cmw6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZDdjYzY2ODc0MjNkMDU3MGQ1NTZhYzUzZTA2NzZjYjU2M2JiZGQ5NzE3Y2Q4MjY5YmRlYmVkNmY2ZDRlN2JmOCJ9fX0=\"}]}]" - }, - "uiTitle": "none", - "clickEvent": "/hub" - }, - "button11": { - "render": true, - "itemData": { - "item": "minecraft:enchanting_table", - "count": 1, - "components": "[]" - }, - "uiTitle": "Enchant Item", - "clickEvent": "/etable" - }, - "button12": { - "render": true, - "itemData": { - "item": "minecraft:gold_block", - "count": 1, - "components": "[]" - }, - "uiTitle": "", - "clickEvent": "/ah" - }, - "button13": { - "render": true, - "itemData": { - "item": "minecraft:player_head", - "count": 1, - "components": "[minecraft:profile={id:[I;-562285948,532499670,-1705302742,775653035],name:\"\",properties:[{name:\"textures\",value:\"e3RleHR1cmVzOntTS0lOOnt1cmw6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZmZlMmRjZGE0MWVjM2FmZjhhZjUwZjI3MmVjMmUwNmE4ZjUwOWUwZjgwN2YyMzU1YTFmNWEzM2MxYjY2ZTliNCJ9fX0=\"}]}]" - }, - "uiTitle": "Bazaar .*", - "clickEvent": "/bz" - }, - "button14": { - "render": true, - "itemData": { - "item": "minecraft:crafting_table", - "count": 1, - "components": "[]" - }, - "uiTitle": "Craft Item", - "clickEvent": "/craft" - } - }, - "eventNotifications": { - "criterion": "SKYBLOCK", - "reminderSound": "PLING", - "eventsReminderTimes": { - "Season of Jerry": [ - 60, - 300 - ], - "New Year Celebration": [ - 60, - 300 - ], - "Jacob's Farming Contest": [ - 60, - 300 - ], - "Dark Auction": [ - 60, - 300 - ], - "Election Booth Opens": [ - 60, - 300 - ], - "Traveling Zoo": [ - 60, - 300 - ], - "Spooky Festival": [ - 60, - 300 - ], - "Jerry's Workshop Opens": [ - 60, - 300 - ], - "SkyBlock Anniversary": [ - 60, - 300 - ] - } - }, - "misc": { - "richPresence": { - "enableRichPresence": false, - "info": "LOCATION", - "cycleMode": false, - "customMessage": "Playing Skyblock" - } - } -} \ No newline at end of file diff --git a/src/test/resources/assets/skyblocker/config/skyblocker-v4.json b/src/test/resources/assets/skyblocker/config/skyblocker-v4.json deleted file mode 100644 index 907e6ad1..00000000 --- a/src/test/resources/assets/skyblocker/config/skyblocker-v4.json +++ /dev/null @@ -1,606 +0,0 @@ -{ - "version": 4, - "general": { - "enableTips": true, - "acceptReparty": true, - "shortcuts": { - "enableShortcuts": true, - "enableCommandShortcuts": true, - "enableCommandArgShortcuts": true - }, - "quiverWarning": { - "enableQuiverWarning": true, - "enableQuiverWarningInDungeons": true, - "enableQuiverWarningAfterDungeon": true - }, - "itemList": { - "enableItemList": true - }, - "itemTooltip": { - "enableNPCPrice": true, - "enableMotesPrice": true, - "enableAvgBIN": true, - "avg": "THREE_DAY", - "enableLowestBIN": true, - "enableBazaarPrice": true, - "enableObtainedDate": true, - "enableMuseumInfo": true, - "enableExoticTooltip": true, - "enableAccessoriesHelper": true, - "dungeonQuality": true - }, - "itemInfoDisplay": { - "slotText": "ENABLED", - "attributeShardInfo": true, - "itemRarityBackgrounds": false, - "itemRarityBackgroundStyle": "CIRCULAR", - "itemRarityBackgroundsOpacity": 1.0 - }, - "itemProtection": { - "slotLockStyle": "FANCY" - }, - "wikiLookup": { - "enableWikiLookup": true, - "officialWiki": true - }, - "specialEffects": { - "rareDungeonDropEffects": true - }, - "hitbox": { - "oldFarmlandHitbox": false, - "oldLeverHitbox": false - }, - "lockedSlots": [], - "protectedItems": [], - "customItemNames": {}, - "customDyeColors": {}, - "customArmorTrims": {}, - "customAnimatedDyes": {} - }, - "uiAndVisuals": { - "compactorDeletorPreview": true, - "dontStripSkinAlphaValues": true, - "backpackPreviewWithoutShift": false, - "hideEmptyTooltips": true, - "fancyCraftingTable": true, - "hideStatusEffectOverlay": false, - "chestValue": { - "enableChestValue": true, - "color": "DARK_GREEN", - "incompleteColor": "BLUE" - }, - "itemCooldown": { - "enableItemCooldowns": true - }, - "titleContainer": { - "titleContainerScale": 100.0, - "x": 540, - "y": 10, - "direction": "HORIZONTAL", - "alignment": "MIDDLE" - }, - "tabHud": { - "tabHudEnabled": true, - "tabHudScale": 100, - "enableHudBackground": true, - "plainPlayerNames": false, - "nameSorting": "DEFAULT" - }, - "fancyAuctionHouse": { - "enabled": false, - "highlightCheapBIN": true - }, - "bars": { - "enableBars": true, - "barPositions": { - "healthBarPosition": "LAYER1", - "manaBarPosition": "LAYER1", - "defenceBarPosition": "LAYER1", - "experienceBarPosition": "LAYER1" - } - }, - "waypoints": { - "enableWaypoints": true, - "waypointType": "WAYPOINT" - }, - "teleportOverlay": { - "enableTeleportOverlays": true, - "enableWeirdTransmission": true, - "enableInstantTransmission": true, - "enableEtherTransmission": true, - "enableSinrecallTransmission": true, - "enableWitherImpact": true - }, - "searchOverlay": { - "enableBazaar": true, - "enableAuctionHouse": true, - "keepPreviousSearches": false, - "maxSuggestions": 3, - "historyLength": 3, - "enableCommands": false, - "bazaarHistory": [ - "ab", - "Mystical Mushroom Soup", - "Enchanted Cocoa Beans" - ], - "auctionHistory": [ - "Rich Chocolate Chunk", - "Smooth Chocolate Bar", - "Juju Shortbow" - ] - }, - "inputCalculator": { - "enabled": true, - "requiresEquals": false - }, - "flameOverlay": { - "flameHeight": 100, - "flameOpacity": 100 - }, - "compactDamage": { - "enabled": true, - "precision": 1, - "normalDamageColor": -1, - "critDamageGradientStart": -171, - "critDamageGradientEnd": -43691 - } - }, - "helpers": { - "enableNewYearCakesHelper": true, - "mythologicalRitual": { - "enableMythologicalRitualHelper": true - }, - "experiments": { - "enableChronomatronSolver": true, - "enableSuperpairsSolver": true, - "enableUltrasequencerSolver": true - }, - "fishing": { - "enableFishingHelper": true, - "enableFishingTimer": false, - "changeTimerColor": true, - "fishingTimerScale": 1.0, - "hideOtherPlayersRods": false - }, - "fairySouls": { - "enableFairySoulsHelper": false, - "highlightFoundSouls": true, - "highlightOnlyNearbySouls": false - }, - "chocolateFactory": { - "enableChocolateFactoryHelper": true, - "enableEggFinder": true, - "sendEggFoundMessages": true, - "waypointType": "WAYPOINT", - "enableTimeTowerReminder": true - } - }, - "dungeons": { - "fancyPartyFinder": true, - "croesusHelper": true, - "playerSecretsTracker": false, - "starredMobGlow": false, - "starredMobBoundingBoxes": true, - "allowDroppingProtectedItems": false, - "hideSoulweaverSkulls": false, - "dungeonMap": { - "enableMap": true, - "mapScaling": 1.0, - "mapX": 2, - "mapY": 2 - }, - "puzzleSolvers": { - "solveTicTacToe": true, - "solveThreeWeirdos": true, - "creeperSolver": true, - "solveWaterboard": true, - "blazeSolver": true, - "solveBoulder": true, - "solveIceFill": true, - "solveSilverfish": true, - "solveTrivia": true - }, - "theProfessor": { - "fireFreezeStaffTimer": true, - "floor3GuardianHealthDisplay": true - }, - "livid": { - "enableLividColorGlow": true, - "enableLividColorText": true, - "enableLividColorTitle": true, - "lividColorText": "The livid color is [color]" - }, - "terminals": { - "solveColor": true, - "solveOrder": true, - "solveStartsWith": true, - "blockIncorrectClicks": false - }, - "secretWaypoints": { - "enableRoomMatching": true, - "enableSecretWaypoints": true, - "waypointType": "WAYPOINT", - "showSecretText": true, - "enableEntranceWaypoints": true, - "enableSuperboomWaypoints": true, - "enableChestWaypoints": true, - "enableItemWaypoints": true, - "enableBatWaypoints": true, - "enableWitherWaypoints": true, - "enableLeverWaypoints": true, - "enableFairySoulWaypoints": true, - "enableStonkWaypoints": true, - "enableAotvWaypoints": true, - "enablePearlWaypoints": true, - "enableDefaultWaypoints": true - }, - "mimicMessage": { - "sendMimicMessage": true, - "mimicMessage": "Mimic dead!" - }, - "doorHighlight": { - "enableDoorHighlight": true, - "doorHighlightType": "OUTLINED_HIGHLIGHT" - }, - "dungeonScore": { - "enableDungeonScore270Message": false, - "enableDungeonScore270Title": false, - "enableDungeonScore270Sound": false, - "dungeonScore270Message": "270 Score Reached!", - "enableDungeonScore300Message": true, - "enableDungeonScore300Title": true, - "enableDungeonScore300Sound": true, - "dungeonScore300Message": "300 Score Reached!", - "enableDungeonCryptsMessage": true, - "dungeonCryptsMessageThreshold": 250, - "dungeonCryptsMessage": "We only have [crypts] crypts out of 5, we need more!", - "enableScoreHUD": true, - "scoreX": 29, - "scoreY": 134, - "scoreScaling": 1.0 - }, - "dungeonChestProfit": { - "enableProfitCalculator": true, - "includeKismet": false, - "includeEssence": true, - "croesusProfit": true, - "neutralThreshold": 1000, - "neutralColor": "DARK_GRAY", - "profitColor": "DARK_GREEN", - "lossColor": "RED", - "incompleteColor": "BLUE" - } - }, - "foraging": { - "hunting": {} - }, - "crimsonIsle": { - "kuudra": { - "supplyWaypoints": true, - "fuelWaypoints": true, - "suppliesAndFuelWaypointType": "WAYPOINT", - "ballistaBuildWaypoints": true, - "safeSpotWaypoints": true, - "pearlWaypoints": true, - "noArrowPoisonWarning": true, - "arrowPoisonThreshold": 32 - } - }, - "mining": { - "enableDrillFuel": true, - "dwarvenMines": { - "solveFetchur": true, - "solvePuzzler": true - }, - "dwarvenHud": { - "enabledCommissions": true, - "enabledPowder": true, - "style": "SIMPLE", - "commissionsX": 842, - "commissionsY": 0, - "powderX": 872, - "powderY": 59 - }, - "crystalHollows": { - "metalDetectorHelper": true - }, - "crystalsHud": { - "enabled": true, - "showLocations": true, - "locationSize": 8, - "x": 9, - "y": 181, - "mapScaling": 1.0 - }, - "crystalsWaypoints": { - "enabled": true, - "findInChat": true - }, - "commissionWaypoints": { - "mode": "BOTH", - "useColor": true, - "textScale": 1.0, - "showBaseCamp": false, - "showEmissary": true - }, - "glacite": { - "coldOverlay": true - } - }, - "farming": { - "garden": { - "farmingHud": { - "enableHud": true, - "x": 0, - "y": 0 - }, - "dicerTitlePrevent": true, - "visitorHelper": true, - "lockMouseTool": false, - "lockMouseGroundOnly": false - } - }, - "otherLocations": { - "barn": { - "solveHungryHiker": true, - "solveTreasureHunter": true - }, - "rift": { - "mirrorverseWaypoints": true, - "blobbercystGlow": true, - "enigmaSoulWaypoints": false, - "highlightFoundEnigmaSouls": true, - "mcGrubberStacks": 0 - }, - "end": { - "enableEnderNodeHelper": true, - "hudEnabled": true, - "zealotKillsEnabled": true, - "protectorLocationEnabled": true, - "waypoint": true, - "x": 10, - "y": 10 - }, - "spidersDen": { - "relics": { - "enableRelicsHelper": false, - "highlightFoundRelics": true - } - } - }, - "slayers": { - "endermanSlayer": { - "enableYangGlyphsNotification": true, - "highlightBeacons": true, - "highlightNukekubiHeads": true - }, - "vampireSlayer": { - "enableEffigyWaypoints": true, - "compactEffigyWaypoints": false, - "effigyUpdateFrequency": 5, - "enableHolyIceIndicator": true, - "holyIceIndicatorTickDelay": 10, - "holyIceUpdateFrequency": 5, - "enableHealingMelonIndicator": true, - "healingMelonHealthThreshold": 4.0, - "enableSteakStakeIndicator": true, - "steakStakeUpdateFrequency": 5, - "enableManiaIndicator": true, - "maniaUpdateFrequency": 5 - } - }, - "chat": { - "hideAbility": "PASS", - "hideHeal": "PASS", - "hideAOTE": "PASS", - "hideImplosion": "PASS", - "hideMoltenWave": "PASS", - "hideAds": "PASS", - "hideTeleportPad": "PASS", - "hideCombo": "PASS", - "hideAutopet": "PASS", - "hideShowOff": "PASS", - "hideToggleSkyMall": "PASS", - "hideMimicKill": "PASS", - "hideDeath": "PASS", - "hideMana": false, - "hideDicer": "PASS", - "chatRuleConfig": { - "announcementLength": 60, - "announcementScale": 3 - } - }, - "quickNav": { - "enableQuickNav": true, - "button1": { - "render": true, - "itemData": { - "item": "minecraft:diamond_sword", - "count": 1, - "components": "[]" - }, - "uiTitle": "Your Skills", - "clickEvent": "/skills" - }, - "button2": { - "render": true, - "itemData": { - "item": "minecraft:painting", - "count": 1, - "components": "[]" - }, - "uiTitle": "Collections", - "clickEvent": "/collection" - }, - "button3": { - "render": true, - "itemData": { - "item": "minecraft:bone", - "count": 1, - "components": "[]" - }, - "uiTitle": "Pets(:? \\(\\d+\\/\\d+\\))?", - "clickEvent": "/pets" - }, - "button4": { - "render": true, - "itemData": { - "item": "minecraft:leather_chestplate", - "count": 1, - "components": "[minecraft:dyed_color={rgb:8991416}]" - }, - "uiTitle": "Wardrobe \\([12]/2\\)", - "clickEvent": "/wardrobe" - }, - "button5": { - "render": true, - "itemData": { - "item": "minecraft:player_head", - "count": 1, - "components": "[minecraft:profile={id:[I;-2081424676,-57521078,-2073572414,158072763],name:\"\",properties:[{name:\"textures\",value:\"ewogICJ0aW1lc3RhbXAiIDogMTU5MTMxMDU4NTYwOSwKICAicHJvZmlsZUlkIiA6ICI0MWQzYWJjMmQ3NDk0MDBjOTA5MGQ1NDM0ZDAzODMxYiIsCiAgInByb2ZpbGVOYW1lIiA6ICJNZWdha2xvb24iLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvODBhMDc3ZTI0OGQxNDI3NzJlYTgwMDg2NGY4YzU3OGI5ZDM2ODg1YjI5ZGFmODM2YjY0YTcwNjg4MmI2ZWMxMCIKICAgIH0KICB9Cn0=\"}]}]" - }, - "uiTitle": "Sack of Sacks", - "clickEvent": "/sacks" - }, - "button6": { - "render": true, - "itemData": { - "item": "minecraft:player_head", - "count": 1, - "components": "[minecraft:profile={name:\"5da6bec64bd942bc\",id:[I;1571208902,1272529596,-1566400349,-679283814],properties:[{name:\"textures\",value:\"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTYxYTkxOGMwYzQ5YmE4ZDA1M2U1MjJjYjkxYWJjNzQ2ODkzNjdiNGQ4YWEwNmJmYzFiYTkxNTQ3MzA5ODVmZiJ9fX0=\"}]}]" - }, - "uiTitle": "Accessory Bag(?: \\(\\d/\\d\\))?", - "clickEvent": "/accessories" - }, - "button7": { - "render": true, - "itemData": { - "item": "minecraft:ender_chest", - "count": 1, - "components": "[]" - }, - "uiTitle": "(?:Rift )?Storage(?: \\(\\d/\\d\\))?", - "clickEvent": "/storage" - }, - "button8": { - "render": true, - "itemData": { - "item": "minecraft:player_head", - "count": 1, - "components": "[minecraft:profile={name:\"421a8ef40eff47f4\",id:[I;1109036788,251611124,-2126904485,-130621758],properties:[{name:\"textures\",value:\"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzljODg4MWU0MjkxNWE5ZDI5YmI2MWExNmZiMjZkMDU5OTEzMjA0ZDI2NWRmNWI0MzliM2Q3OTJhY2Q1NiJ9fX0=\"}]}]" - }, - "uiTitle": "", - "clickEvent": "/is" - }, - "button9": { - "render": true, - "itemData": { - "item": "minecraft:player_head", - "count": 1, - "components": "[minecraft:profile={name:\"e30e30d02878417c\",id:[I;-485609264,678969724,-1929747597,-718202427],properties:[{name:\"textures\",value:\"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZjQ4ODBkMmMxZTdiODZlODc1MjJlMjA4ODI2NTZmNDViYWZkNDJmOTQ5MzJiMmM1ZTBkNmVjYWE0OTBjYjRjIn19fQ==\"}]}]" - }, - "uiTitle": "", - "clickEvent": "/warp garden" - }, - "button10": { - "render": true, - "itemData": { - "item": "minecraft:player_head", - "count": 1, - "components": "[minecraft:profile={id:[I;-300151517,-631415889,-1193921967,-1821784279],name:\"\",properties:[{name:\"textures\",value:\"e3RleHR1cmVzOntTS0lOOnt1cmw6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZDdjYzY2ODc0MjNkMDU3MGQ1NTZhYzUzZTA2NzZjYjU2M2JiZGQ5NzE3Y2Q4MjY5YmRlYmVkNmY2ZDRlN2JmOCJ9fX0=\"}]}]" - }, - "uiTitle": "none", - "clickEvent": "/hub" - }, - "button11": { - "render": true, - "itemData": { - "item": "minecraft:enchanting_table", - "count": 1, - "components": "[]" - }, - "uiTitle": "Enchant Item", - "clickEvent": "/etable" - }, - "button12": { - "render": true, - "itemData": { - "item": "minecraft:gold_block", - "count": 1, - "components": "[]" - }, - "uiTitle": "", - "clickEvent": "/ah" - }, - "button13": { - "render": true, - "itemData": { - "item": "minecraft:player_head", - "count": 1, - "components": "[minecraft:profile={id:[I;-562285948,532499670,-1705302742,775653035],name:\"\",properties:[{name:\"textures\",value:\"e3RleHR1cmVzOntTS0lOOnt1cmw6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZmZlMmRjZGE0MWVjM2FmZjhhZjUwZjI3MmVjMmUwNmE4ZjUwOWUwZjgwN2YyMzU1YTFmNWEzM2MxYjY2ZTliNCJ9fX0=\"}]}]" - }, - "uiTitle": "Bazaar .*", - "clickEvent": "/bz" - }, - "button14": { - "render": true, - "itemData": { - "item": "minecraft:crafting_table", - "count": 1, - "components": "[]" - }, - "uiTitle": "Craft Item", - "clickEvent": "/craft" - } - }, - "eventNotifications": { - "criterion": "SKYBLOCK", - "reminderSound": "PLING", - "eventsReminderTimes": { - "Season of Jerry": [ - 60, - 300 - ], - "New Year Celebration": [ - 60, - 300 - ], - "Jacob's Farming Contest": [ - 60, - 300 - ], - "Dark Auction": [ - 60, - 300 - ], - "Election Booth Opens": [ - 60, - 300 - ], - "Traveling Zoo": [ - 60, - 300 - ], - "Spooky Festival": [ - 60, - 300 - ], - "Jerry's Workshop Opens": [ - 60, - 300 - ], - "SkyBlock Anniversary": [ - 60, - 300 - ] - } - }, - "misc": { - "richPresence": { - "enableRichPresence": false, - "info": "LOCATION", - "cycleMode": false, - "customMessage": "Playing Skyblock" - } - } -} \ No newline at end of file -- cgit From eb2ac7c20ca00da5c8998aad291584b76186ec5f Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Wed, 24 Jul 2024 00:41:38 +0800 Subject: Rename slot text option to slotTextMode --- .../config/categories/GeneralCategory.java | 14 ++++++------- .../skyblocker/config/configs/GeneralConfig.java | 8 ++++++-- .../skyblock/item/slottext/SlotTextManager.java | 2 +- .../skyblock/item/slottext/SlotTextMode.java | 23 ++++++++++++++++++++++ .../skyblock/item/slottext/SlotTextState.java | 23 ---------------------- .../skyblocker/utils/container/SlotTextAdder.java | 4 ++-- .../resources/assets/skyblocker/lang/en_us.json | 5 +++-- 7 files changed, 42 insertions(+), 37 deletions(-) create mode 100644 src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextMode.java delete mode 100644 src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextState.java (limited to 'src/main/java/de/hysky/skyblocker') 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 abfb7c16..7669359e 100644 --- a/src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java +++ b/src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java @@ -5,7 +5,7 @@ import de.hysky.skyblocker.config.ConfigUtils; import de.hysky.skyblocker.config.SkyblockerConfig; import de.hysky.skyblocker.config.configs.GeneralConfig; import de.hysky.skyblocker.skyblock.item.tooltip.adders.CraftPriceTooltip; -import de.hysky.skyblocker.skyblock.item.slottext.SlotTextState; +import de.hysky.skyblocker.skyblock.item.slottext.SlotTextMode; import de.hysky.skyblocker.skyblock.shortcut.ShortcutsConfigScreen; import dev.isxander.yacl3.api.*; import dev.isxander.yacl3.api.controller.FloatSliderControllerBuilder; @@ -236,18 +236,18 @@ public class GeneralCategory { .group(OptionGroup.createBuilder() .name(Text.translatable("skyblocker.config.general.itemInfoDisplay")) .collapsed(true) - .option(Option.createBuilder() + .option(Option.createBuilder() .name(Text.translatable("skyblocker.config.general.itemInfoDisplay.slotText")) .description(OptionDescription.of(Text.translatable("skyblocker.config.general.itemInfoDisplay.slotText.@Tooltip"))) - .binding(defaults.general.itemInfoDisplay.slotText, - () -> config.general.itemInfoDisplay.slotText, - newValue -> config.general.itemInfoDisplay.slotText = newValue) + .binding(defaults.general.itemInfoDisplay.slotTextMode, + () -> config.general.itemInfoDisplay.slotTextMode, + newValue -> config.general.itemInfoDisplay.slotTextMode = newValue) .controller(ConfigUtils::createEnumCyclingListController) .build()) .option(ButtonOption.createBuilder() - .name(Text.translatable("skyblocker.config.general.itemInfoDisplay.slotText.shortcutToKeybindsSettings")) + .name(Text.translatable("skyblocker.config.shortcutToKeybindsSettings")) .action((screen, opt) -> MinecraftClient.getInstance().setScreen(new KeybindsScreen(screen, MinecraftClient.getInstance().options))) - .text(Text.translatable("skyblocker.config.general.itemInfoDisplay.slotText.shortcutToKeybindsSettings.@Text")) + .text(Text.translatable("skyblocker.config.shortcutToKeybindsSettings.@Text")) .build()) .option(Option.createBuilder() .name(Text.translatable("skyblocker.config.general.itemInfoDisplay.attributeShardInfo")) diff --git a/src/main/java/de/hysky/skyblocker/config/configs/GeneralConfig.java b/src/main/java/de/hysky/skyblocker/config/configs/GeneralConfig.java index 7ea1616e..61386452 100644 --- a/src/main/java/de/hysky/skyblocker/config/configs/GeneralConfig.java +++ b/src/main/java/de/hysky/skyblocker/config/configs/GeneralConfig.java @@ -3,7 +3,7 @@ package de.hysky.skyblocker.config.configs; import de.hysky.skyblocker.SkyblockerMod; import de.hysky.skyblocker.skyblock.item.CustomArmorAnimatedDyes; import de.hysky.skyblocker.skyblock.item.CustomArmorTrims; -import de.hysky.skyblocker.skyblock.item.slottext.SlotTextState; +import de.hysky.skyblocker.skyblock.item.slottext.SlotTextMode; import dev.isxander.yacl3.config.v2.api.SerialEntry; import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; @@ -164,8 +164,12 @@ public class GeneralConfig { } public static class ItemInfoDisplay { + @Deprecated @SerialEntry - public SlotTextState slotText = SlotTextState.ENABLED; + public boolean slotText = true; + + @SerialEntry + public SlotTextMode slotTextMode = SlotTextMode.ENABLED; @SerialEntry public boolean slotTextToggled = true; diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextManager.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextManager.java index 91971985..a28e204c 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextManager.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextManager.java @@ -129,7 +129,7 @@ public class SlotTextManager { } public static boolean isEnabled() { - return switch (SkyblockerConfigManager.get().general.itemInfoDisplay.slotText) { + return switch (SkyblockerConfigManager.get().general.itemInfoDisplay.slotTextMode) { case ENABLED -> true; case DISABLED -> false; case PRESS_TO_TOGGLE -> SkyblockerConfigManager.get().general.itemInfoDisplay.slotTextToggled; diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextMode.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextMode.java new file mode 100644 index 00000000..1f043888 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextMode.java @@ -0,0 +1,23 @@ +package de.hysky.skyblocker.skyblock.item.slottext; + +/** + * Used in {@link SlotTextManager#isEnabled()} to determine whether the slot text should be shown or not. + */ +public enum SlotTextMode { + ENABLED, + HOLD_TO_SHOW, + PRESS_TO_TOGGLE, + HOLD_TO_HIDE, + DISABLED; + + @Override + public String toString() { + return switch (this) { + case ENABLED -> "Enabled"; + case HOLD_TO_SHOW -> "Hold to Show"; + case PRESS_TO_TOGGLE -> "Press to Toggle"; + case HOLD_TO_HIDE -> "Hold to Hide"; + case DISABLED -> "Disabled"; + }; + } +} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextState.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextState.java deleted file mode 100644 index 38280166..00000000 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextState.java +++ /dev/null @@ -1,23 +0,0 @@ -package de.hysky.skyblocker.skyblock.item.slottext; - -/** - * Used in {@link SlotTextManager#isEnabled()} to determine whether the slot text should be shown or not. - */ -public enum SlotTextState { - ENABLED, - HOLD_TO_SHOW, - PRESS_TO_TOGGLE, - HOLD_TO_HIDE, - DISABLED; - - @Override - public String toString() { - return switch (this) { - case ENABLED -> "Enabled"; - case HOLD_TO_SHOW -> "Hold to Show"; - case PRESS_TO_TOGGLE -> "Press to Toggle"; - case HOLD_TO_HIDE -> "Hold to Hide"; - case DISABLED -> "Disabled"; - }; - } -} diff --git a/src/main/java/de/hysky/skyblocker/utils/container/SlotTextAdder.java b/src/main/java/de/hysky/skyblocker/utils/container/SlotTextAdder.java index 4caf8cea..72f92547 100644 --- a/src/main/java/de/hysky/skyblocker/utils/container/SlotTextAdder.java +++ b/src/main/java/de/hysky/skyblocker/utils/container/SlotTextAdder.java @@ -2,7 +2,7 @@ package de.hysky.skyblocker.utils.container; import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.skyblock.item.slottext.SlotText; -import de.hysky.skyblocker.skyblock.item.slottext.SlotTextState; +import de.hysky.skyblocker.skyblock.item.slottext.SlotTextMode; import net.minecraft.item.ItemStack; import net.minecraft.screen.slot.Slot; import org.jetbrains.annotations.NotNull; @@ -25,6 +25,6 @@ public interface SlotTextAdder extends ContainerMatcher { @Override default boolean isEnabled() { - return SkyblockerConfigManager.get().general.itemInfoDisplay.slotText != SlotTextState.DISABLED; + return SkyblockerConfigManager.get().general.itemInfoDisplay.slotTextMode != SlotTextMode.DISABLED; } } diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json index 4ee3ece0..2c19e036 100644 --- a/src/main/resources/assets/skyblocker/lang/en_us.json +++ b/src/main/resources/assets/skyblocker/lang/en_us.json @@ -28,6 +28,9 @@ "skyblocker.config.title": "Skyblocker Settings", + "skyblocker.config.shortcutToKeybindsSettings": "Edit Keybind", + "skyblocker.config.shortcutToKeybindsSettings.@Text": "Click... (Opens up Keybinds Options)", + "skyblocker.config.crimsonIsle": "Crimson Isle", "skyblocker.config.crimsonIsle.kuudra": "Kuudra", @@ -225,8 +228,6 @@ "skyblocker.config.general.itemInfoDisplay.itemRarityBackgroundsOpacity": "Item Rarity Backgrounds Opacity", "skyblocker.config.general.itemInfoDisplay.slotText": "Slot Text", "skyblocker.config.general.itemInfoDisplay.slotText.@Tooltip": "Displays information such as enchantment book level, minion level, pet level, potion level, prehistoric egg blocks walked, rancher's boots speed cap, and skill level", - "skyblocker.config.general.itemInfoDisplay.slotText.shortcutToKeybindsSettings": "Slot Text Keybind", - "skyblocker.config.general.itemInfoDisplay.slotText.shortcutToKeybindsSettings.@Text": "Click... (opens up keybinds settings)", "skyblocker.config.general.itemList": "Item List", "skyblocker.config.general.itemList.enableItemList": "Enable Item List", -- cgit