From 12070a41687893c564e4d2c1ad9b6ed379f92cae Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Thu, 25 Apr 2024 21:28:22 -0400 Subject: Fix "What starts with" terminal solver --- .../hysky/skyblocker/utils/render/gui/ContainerSolver.java | 9 ++++++--- .../utils/render/gui/ContainerSolverManager.java | 14 ++++++++++---- 2 files changed, 16 insertions(+), 7 deletions(-) (limited to 'src/main/java/de/hysky/skyblocker/utils/render/gui') 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 80a1ba9d..16fa7411 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,11 +1,11 @@ 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 java.util.List; -import java.util.Map; import java.util.regex.Pattern; /** @@ -34,9 +34,12 @@ public abstract class ContainerSolver { SkyblockerMod.getInstance().containerSolverManager.markDirty(); } - protected abstract List getColors(String[] groups, Map slots); + protected void onClickSlot(int slot, ItemStack stack, ItemStack cursorStack, String[] groups) { + } + + protected abstract List getColors(String[] groups, Int2ObjectMap slots); - protected void trimEdges(Map slots, int rows) { + protected void trimEdges(Int2ObjectMap slots, int rows) { for (int i = 0; i < rows; i++) { slots.remove(9 * i); slots.remove(9 * i + 8); 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 e5b2dddb..40e36622 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 @@ -13,6 +13,8 @@ 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; @@ -22,8 +24,6 @@ import net.minecraft.screen.slot.Slot; import org.jetbrains.annotations.NotNull; import java.util.List; -import java.util.Map; -import java.util.TreeMap; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -107,6 +107,12 @@ public class ContainerSolverManager { highlights = null; } + public void onSlotClick(int slot, ItemStack stack, ItemStack cursorStack) { + if (currentSolver != null) { + currentSolver.onClickSlot(slot, stack, cursorStack, groups); + } + } + public void onDraw(DrawContext context, List slots) { if (currentSolver == null) return; @@ -122,8 +128,8 @@ public class ContainerSolverManager { RenderSystem.colorMask(true, true, true, true); } - private Map slotMap(List slots) { - Map slotMap = new TreeMap<>(); + private Int2ObjectMap slotMap(List slots) { + Int2ObjectMap slotMap = new Int2ObjectRBTreeMap<>(); for (int i = 0; i < slots.size(); i++) { slotMap.put(i, slots.get(i).getStack()); } -- cgit From 625b6b92e338f79e7b4f3a90a656d2f3e997f912 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Fri, 26 Apr 2024 16:03:24 -0400 Subject: Rework terminal click marking to fix an edge case --- .../de/hysky/skyblocker/utils/render/gui/ContainerSolver.java | 2 +- .../skyblocker/utils/render/gui/ContainerSolverManager.java | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) (limited to 'src/main/java/de/hysky/skyblocker/utils/render/gui') 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 16fa7411..e2e057b3 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 @@ -34,7 +34,7 @@ public abstract class ContainerSolver { SkyblockerMod.getInstance().containerSolverManager.markDirty(); } - protected void onClickSlot(int slot, ItemStack stack, ItemStack cursorStack, String[] groups) { + protected void onClickSlot(int slot, ItemStack stack, int screenId, String[] groups) { } protected abstract List getColors(String[] groups, Int2ObjectMap slots); 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 40e36622..440809d9 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 @@ -36,6 +36,10 @@ public class ContainerSolverManager { 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[]{ @@ -82,6 +86,7 @@ public class ContainerSolverManager { 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++) { @@ -89,6 +94,7 @@ public class ContainerSolverManager { } currentSolver.start(screen); markDirty(); + return; } } @@ -107,9 +113,9 @@ public class ContainerSolverManager { highlights = null; } - public void onSlotClick(int slot, ItemStack stack, ItemStack cursorStack) { + public void onSlotClick(int slot, ItemStack stack) { if (currentSolver != null) { - currentSolver.onClickSlot(slot, stack, cursorStack, groups); + currentSolver.onClickSlot(slot, stack, screenId, groups); } } -- cgit From d24bac4d728d8ea9264e08934fb863771bcca5e2 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Fri, 26 Apr 2024 20:00:18 -0400 Subject: Pluralize the mixin and accessor packages --- .../de/hysky/skyblocker/utils/render/gui/AbstractCustomHypixelGUI.java | 2 +- .../de/hysky/skyblocker/utils/render/gui/ContainerSolverManager.java | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) (limited to 'src/main/java/de/hysky/skyblocker/utils/render/gui') diff --git a/src/main/java/de/hysky/skyblocker/utils/render/gui/AbstractCustomHypixelGUI.java b/src/main/java/de/hysky/skyblocker/utils/render/gui/AbstractCustomHypixelGUI.java index 4f648b8c..ef2e6bf9 100644 --- a/src/main/java/de/hysky/skyblocker/utils/render/gui/AbstractCustomHypixelGUI.java +++ b/src/main/java/de/hysky/skyblocker/utils/render/gui/AbstractCustomHypixelGUI.java @@ -1,6 +1,6 @@ package de.hysky.skyblocker.utils.render.gui; -import de.hysky.skyblocker.mixin.accessor.HandledScreenAccessor; +import de.hysky.skyblocker.mixins.accessors.HandledScreenAccessor; import de.hysky.skyblocker.skyblock.auction.AuctionHouseScreenHandler; import net.minecraft.client.gui.screen.ingame.HandledScreen; import net.minecraft.entity.player.PlayerInventory; 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 440809d9..b37c57a4 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,7 +1,8 @@ package de.hysky.skyblocker.utils.render.gui; import com.mojang.blaze3d.systems.RenderSystem; -import de.hysky.skyblocker.mixin.accessor.HandledScreenAccessor; + +import de.hysky.skyblocker.mixins.accessors.HandledScreenAccessor; import de.hysky.skyblocker.skyblock.accessories.newyearcakes.NewYearCakeBagHelper; import de.hysky.skyblocker.skyblock.accessories.newyearcakes.NewYearCakesHelper; import de.hysky.skyblocker.skyblock.dungeon.CroesusHelper; -- cgit