aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de/hysky/skyblocker/skyblock
diff options
context:
space:
mode:
authorAaron <51387595+AzureAaron@users.noreply.github.com>2024-04-25 21:28:22 -0400
committerAaron <51387595+AzureAaron@users.noreply.github.com>2024-04-26 16:23:22 -0400
commit12070a41687893c564e4d2c1ad9b6ed379f92cae (patch)
tree4181bd89b9bbb9c0d1a95e94d568bc09bc77587b /src/main/java/de/hysky/skyblocker/skyblock
parent667df3308e593b66905e83b652020f2e172f7ae3 (diff)
downloadSkyblocker-12070a41687893c564e4d2c1ad9b6ed379f92cae.tar.gz
Skyblocker-12070a41687893c564e4d2c1ad9b6ed379f92cae.tar.bz2
Skyblocker-12070a41687893c564e4d2c1ad9b6ed379f92cae.zip
Fix "What starts with" terminal solver
Diffstat (limited to 'src/main/java/de/hysky/skyblocker/skyblock')
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/accessories/newyearcakes/NewYearCakeBagHelper.java4
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/accessories/newyearcakes/NewYearCakesHelper.java7
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/dungeon/CroesusHelper.java10
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/dungeon/CroesusProfit.java11
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal/ColorTerminal.java7
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal/OrderTerminal.java10
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal/StartsWithTerminal.java130
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/experiment/ChronomatronSolver.java8
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/experiment/SuperpairsSolver.java7
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/experiment/UltrasequencerSolver.java4
10 files changed, 143 insertions, 55 deletions
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 e0d67fbe..9b2080a3 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
@@ -3,12 +3,12 @@ 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 it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import net.minecraft.client.MinecraftClient;
import net.minecraft.item.ItemStack;
import net.minecraft.screen.slot.Slot;
import java.util.List;
-import java.util.Map;
public class NewYearCakeBagHelper extends ContainerSolver {
public NewYearCakeBagHelper() {
@@ -21,7 +21,7 @@ public class NewYearCakeBagHelper extends ContainerSolver {
}
@Override
- protected List<ColorHighlight> getColors(String[] groups, Map<Integer, ItemStack> slots) {
+ protected List<ColorHighlight> getColors(String[] groups, Int2ObjectMap<ItemStack> 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 b722849b..2fdcf3b4 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
@@ -4,6 +4,7 @@ import de.hysky.skyblocker.config.SkyblockerConfigManager;
import de.hysky.skyblocker.utils.Utils;
import de.hysky.skyblocker.utils.render.gui.ColorHighlight;
import de.hysky.skyblocker.utils.render.gui.ContainerSolver;
+import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
import it.unimi.dsi.fastutil.ints.IntSet;
import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents;
@@ -64,14 +65,14 @@ public class NewYearCakesHelper extends ContainerSolver {
}
@Override
- protected List<ColorHighlight> getColors(String[] groups, Map<Integer, ItemStack> slots) {
+ protected List<ColorHighlight> getColors(String[] groups, Int2ObjectMap<ItemStack> slots) {
String profile = Utils.getProfile();
if (cakes.isEmpty() || !cakes.containsKey(profile) || cakes.containsKey(profile) && cakes.get(profile).isEmpty()) return List.of();
List<ColorHighlight> highlights = new ArrayList<>();
- for (Map.Entry<Integer, ItemStack> entry : slots.entrySet()) {
+ for (Int2ObjectMap.Entry<ItemStack> entry : slots.int2ObjectEntrySet()) {
int year = getCakeYear(entry.getValue());
if (year >= 0 && cakes.containsKey(profile)) {
- highlights.add(cakes.get(profile).contains(year) ? ColorHighlight.red(entry.getKey()) : ColorHighlight.green(entry.getKey()));
+ highlights.add(cakes.get(profile).contains(year) ? ColorHighlight.red(entry.getIntKey()) : ColorHighlight.green(entry.getIntKey()));
}
}
return highlights;
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 5bd44707..0bc34c57 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/CroesusHelper.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/CroesusHelper.java
@@ -4,12 +4,12 @@ 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 it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import net.minecraft.component.DataComponentTypes;
import net.minecraft.item.ItemStack;
import java.util.ArrayList;
import java.util.List;
-import java.util.Map;
public class CroesusHelper extends ContainerSolver {
@@ -23,15 +23,15 @@ public class CroesusHelper extends ContainerSolver {
}
@Override
- protected List<ColorHighlight> getColors(String[] groups, Map<Integer, ItemStack> slots) {
+ protected List<ColorHighlight> getColors(String[] groups, Int2ObjectMap<ItemStack> slots) {
List<ColorHighlight> highlights = new ArrayList<>();
- for (Map.Entry<Integer, ItemStack> entry : slots.entrySet()) {
+ for (Int2ObjectMap.Entry<ItemStack> entry : slots.int2ObjectEntrySet()) {
ItemStack stack = entry.getValue();
if (stack != null && stack.contains(DataComponentTypes.LORE)) {
if (ItemUtils.getLoreLineIf(stack, s -> s.contains("Opened Chest:")) != null) {
- highlights.add(ColorHighlight.gray(entry.getKey()));
+ highlights.add(ColorHighlight.gray(entry.getIntKey()));
} else if (ItemUtils.getLoreLineIf(stack, s -> s.contains("No more Chests to open!")) != null) {
- highlights.add(ColorHighlight.red(entry.getKey()));
+ highlights.add(ColorHighlight.red(entry.getIntKey()));
}
}
}
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 e82e6eec..263bc383 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/CroesusProfit.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/CroesusProfit.java
@@ -6,6 +6,7 @@ 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 it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import net.minecraft.component.DataComponentTypes;
import net.minecraft.item.ItemStack;
import net.minecraft.text.Text;
@@ -32,13 +33,13 @@ public class CroesusProfit extends ContainerSolver {
}
@Override
- protected List<ColorHighlight> getColors(String[] groups, Map<Integer, ItemStack> slots) {
+ protected List<ColorHighlight> getColors(String[] groups, Int2ObjectMap<ItemStack> slots) {
List<ColorHighlight> highlights = new ArrayList<>();
ItemStack bestChest = null, secondBestChest = null;
long bestValue = 0, secondBestValue = 0; // If negative value of chest - it is out of the question
long dungeonKeyPriceData = getItemPrice("DUNGEON_CHEST_KEY") * 2; // lesser ones don't worth the hassle
- for (Map.Entry<Integer, ItemStack> entry : slots.entrySet()) {
+ for (Int2ObjectMap.Entry<ItemStack> entry : slots.int2ObjectEntrySet()) {
ItemStack stack = entry.getValue();
if (stack != null && stack.contains(DataComponentTypes.LORE) && ItemUtils.getLoreLineIf(stack, s -> s.contains("Chest")) != null) {
long value = valueChest(stack);
@@ -54,13 +55,13 @@ public class CroesusProfit extends ContainerSolver {
}
}
- for (Map.Entry<Integer, ItemStack> entry : slots.entrySet()) {
+ for (Int2ObjectMap.Entry<ItemStack> entry : slots.int2ObjectEntrySet()) {
ItemStack stack = entry.getValue();
if (stack != null && stack.contains(DataComponentTypes.LORE)) {
if (stack.equals(bestChest)) {
- highlights.add(ColorHighlight.green(entry.getKey()));
+ highlights.add(ColorHighlight.green(entry.getIntKey()));
} else if (stack.equals(secondBestChest) && secondBestValue > dungeonKeyPriceData) {
- highlights.add(ColorHighlight.yellow(entry.getKey()));
+ highlights.add(ColorHighlight.yellow(entry.getIntKey()));
}
}
}
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 f02bfca6..933fefa9 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
@@ -3,6 +3,7 @@ package de.hysky.skyblocker.skyblock.dungeon.terminal;
import de.hysky.skyblocker.config.SkyblockerConfigManager;
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.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
@@ -32,7 +33,7 @@ public class ColorTerminal extends ContainerSolver {
}
@Override
- protected List<ColorHighlight> getColors(String[] groups, Map<Integer, ItemStack> slots) {
+ protected List<ColorHighlight> getColors(String[] groups, Int2ObjectMap<ItemStack> slots) {
trimEdges(slots, 6);
List<ColorHighlight> highlights = new ArrayList<>();
String colorString = groups[0];
@@ -43,10 +44,10 @@ public class ColorTerminal extends ContainerSolver {
return Collections.emptyList();
}
}
- for (Map.Entry<Integer, ItemStack> slot : slots.entrySet()) {
+ for (Int2ObjectMap.Entry<ItemStack> slot : slots.int2ObjectEntrySet()) {
ItemStack itemStack = slot.getValue();
if (!itemStack.hasGlint() && targetColor.equals(itemColor.get(itemStack.getItem()))) {
- highlights.add(ColorHighlight.green(slot.getKey()));
+ highlights.add(ColorHighlight.green(slot.getIntKey()));
}
}
return highlights;
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 b2636373..4789e0f4 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
@@ -3,13 +3,13 @@ package de.hysky.skyblocker.skyblock.dungeon.terminal;
import de.hysky.skyblocker.config.SkyblockerConfigManager;
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.ArrayList;
import java.util.Collections;
import java.util.List;
-import java.util.Map;
public class OrderTerminal extends ContainerSolver {
private final int PANES_NUM = 14;
@@ -28,7 +28,7 @@ public class OrderTerminal extends ContainerSolver {
}
@Override
- protected List<ColorHighlight> getColors(String[] groups, Map<Integer, ItemStack> slots) {
+ protected List<ColorHighlight> getColors(String[] groups, Int2ObjectMap<ItemStack> slots) {
if(orderedSlots == null && !orderSlots(slots))
return Collections.emptyList();
while(currentNum < PANES_NUM && Items.LIME_STAINED_GLASS_PANE.equals(slots.get(orderedSlots[currentNum]).getItem()))
@@ -41,16 +41,16 @@ public class OrderTerminal extends ContainerSolver {
return highlights;
}
- public boolean orderSlots(Map<Integer, ItemStack> slots) {
+ public boolean orderSlots(Int2ObjectMap<ItemStack> slots) {
trimEdges(slots, 4);
orderedSlots = new int[PANES_NUM];
- for(Map.Entry<Integer, ItemStack> slot : slots.entrySet()) {
+ for(Int2ObjectMap.Entry<ItemStack> slot : slots.int2ObjectEntrySet()) {
if(Items.AIR.equals(slot.getValue().getItem())) {
orderedSlots = null;
return false;
}
else
- orderedSlots[slot.getValue().getCount() - 1] = slot.getKey();
+ orderedSlots[slot.getValue().getCount() - 1] = slot.getIntKey();
}
currentNum = 0;
return true;
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 f5b8edb1..56f06fb5 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
@@ -3,33 +3,117 @@ package de.hysky.skyblocker.skyblock.dungeon.terminal;
import de.hysky.skyblocker.config.SkyblockerConfigManager;
import de.hysky.skyblocker.utils.render.gui.ColorHighlight;
import de.hysky.skyblocker.utils.render.gui.ContainerSolver;
+import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
+import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
+import it.unimi.dsi.fastutil.objects.ObjectSet;
+import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import java.util.ArrayList;
import java.util.List;
-import java.util.Map;
+import java.util.function.Predicate;
public class StartsWithTerminal extends ContainerSolver {
- public StartsWithTerminal() {
- super("^What starts with: '([A-Z])'\\?$");
- }
-
- @Override
- protected boolean isEnabled() {
- return SkyblockerConfigManager.get().locations.dungeons.terminals.solveStartsWith;
- }
-
- @Override
- protected List<ColorHighlight> getColors(String[] groups, Map<Integer, ItemStack> slots) {
- trimEdges(slots, 6);
- String prefix = groups[0];
- List<ColorHighlight> highlights = new ArrayList<>();
- for (Map.Entry<Integer, ItemStack> slot : slots.entrySet()) {
- ItemStack stack = slot.getValue();
- if (!stack.hasGlint() && stack.getName().getString().startsWith(prefix)) {
- highlights.add(ColorHighlight.green(slot.getKey()));
- }
- }
- return highlights;
- }
+ private final Int2ObjectOpenHashMap<ItemState> trackedItemStates = new Int2ObjectOpenHashMap<>();
+
+ public StartsWithTerminal() {
+ super("^What starts with: '([A-Z])'\\?$");
+ }
+
+ @Override
+ protected boolean isEnabled() {
+ return SkyblockerConfigManager.get().locations.dungeons.terminals.solveStartsWith;
+ }
+
+ @Override
+ protected List<ColorHighlight> getColors(String[] groups, Int2ObjectMap<ItemStack> slots) {
+ trimEdges(slots, 6);
+ setupState(slots);
+
+ String prefix = groups[0];
+ List<ColorHighlight> highlights = new ArrayList<>();
+
+ for (Int2ObjectMap.Entry<ItemStack> slot : slots.int2ObjectEntrySet()) {
+ ItemStack stack = slot.getValue();
+ ItemState state = trackedItemStates.getOrDefault(slot.getIntKey(), ItemState.DEFAULT);
+
+ //If the item hasn't been marked as clicked and it matches the starts with condition
+ //We keep track of the clicks ourselves instead of using the enchantment glint because some items like nether stars have the glint override component by default
+ //so even if Hypixel tries to change that to the same thing it was before (true) it won't work and the solver would permanently consider the item to be clicked
+ //even if it hasn't been yet
+ if (!state.clicked() && stack.getName().getString().startsWith(prefix)) {
+ highlights.add(ColorHighlight.green(slot.getIntKey()));
+ }
+ }
+ return highlights;
+ }
+
+ @Override
+ protected void onClickSlot(int slot, ItemStack stack, ItemStack cursorStack, String[] groups) {
+ //Some random glass pane was clicked or something
+ if (!trackedItemStates.containsKey(slot) || stack == null || stack.isEmpty()) return;
+
+ ItemState state = trackedItemStates.get(slot);
+ String prefix = groups[0];
+
+ //If the item stack's name starts with the correct letter
+ //Also, since Hypixel closes & reopens the GUI after every click we check if the cursor stack is empty to avoid marking item's as clicked if the server lags and
+ //you can click multiple things before the GUI closes - in this event only the first click item click is counted
+ if (stack.getName().getString().startsWith(prefix) && (cursorStack == null || cursorStack.isEmpty()) && !state.clicked()) {
+ trackedItemStates.put(slot, state.click());
+ }
+ //In the future we could add an else branch and return a boolean to cancel the click since it would be wrong
+
+ return;
+ }
+
+ //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)
+ private void setupState(Int2ObjectMap<ItemStack> usefulSlots) {
+ Predicate<Int2ObjectMap.Entry<ItemStack>> notNullOrEmpty = e -> e.getValue() != null && !e.getValue().isEmpty();
+
+ if (allEntriesMatch(usefulSlots.int2ObjectEntrySet(), notNullOrEmpty)) {
+ //If the state hasn't been setup then we will do that
+ if (trackedItemStates.isEmpty()) {
+ for (Int2ObjectMap.Entry<ItemStack> entry : usefulSlots.int2ObjectEntrySet()) {
+ trackedItemStates.put(entry.getIntKey(), ItemState.of(entry.getValue().getItem()));
+ }
+ } else { //If the state is setup then we verify that it hasn't changed since last time, and if it has then we will clear it and call this method again to set it up
+ //Checks whether the trackedItemStates contains the slot id and if it does it checks whether the tracked state's item is a 1:1 match
+ Predicate<Int2ObjectMap.Entry<ItemStack>> doesItemMatch = e -> trackedItemStates.containsKey(e.getIntKey()) && trackedItemStates.get(e.getIntKey()).itemMatches(e.getValue().getItem());
+
+ if (!allEntriesMatch(usefulSlots.int2ObjectEntrySet(), doesItemMatch)) {
+ clearState();
+ setupState(usefulSlots);
+ }
+ }
+ }
+ }
+
+ private void clearState() {
+ trackedItemStates.clear();
+ }
+
+ private static boolean allEntriesMatch(ObjectSet<Int2ObjectMap.Entry<ItemStack>> entries, Predicate<Int2ObjectMap.Entry<ItemStack>> predicate) {
+ for (Int2ObjectMap.Entry<ItemStack> entry : entries) {
+ if (!predicate.test(entry)) return false;
+ }
+
+ return true;
+ }
+
+ private record ItemState(Item item, boolean clicked) {
+ private static final ItemState DEFAULT = new ItemState(null, false);
+
+ boolean itemMatches(Item item) {
+ return this.item.equals(item);
+ }
+
+ ItemState click() {
+ return new ItemState(item, true);
+ }
+
+ static ItemState of(Item item) {
+ return new ItemState(item, false);
+ }
+ }
} \ No newline at end of file
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 08e61d04..98738112 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/experiment/ChronomatronSolver.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/experiment/ChronomatronSolver.java
@@ -4,6 +4,7 @@ import com.google.common.collect.ImmutableMap;
import de.hysky.skyblocker.config.SkyblockerConfig;
import de.hysky.skyblocker.utils.render.gui.ColorHighlight;
+import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.screen.ingame.GenericContainerScreen;
import net.minecraft.inventory.Inventory;
@@ -14,7 +15,6 @@ import net.minecraft.item.Items;
import java.util.AbstractMap;
import java.util.ArrayList;
import java.util.List;
-import java.util.Map;
public class ChronomatronSolver extends ExperimentSolver {
public static final ImmutableMap<Item, Item> TERRACOTTA_TO_GLASS = ImmutableMap.ofEntries(
@@ -103,11 +103,11 @@ public class ChronomatronSolver extends ExperimentSolver {
}
@Override
- protected List<ColorHighlight> getColors(String[] groups, Map<Integer, ItemStack> slots) {
+ protected List<ColorHighlight> getColors(String[] groups, Int2ObjectMap<ItemStack> slots) {
List<ColorHighlight> highlights = new ArrayList<>();
if (getState() == State.SHOW && chronomatronSlots.size() > chronomatronCurrentOrdinal) {
- for (Map.Entry<Integer, ItemStack> indexStack : slots.entrySet()) {
- int index = indexStack.getKey();
+ for (Int2ObjectMap.Entry<ItemStack> indexStack : slots.int2ObjectEntrySet()) {
+ int index = indexStack.getIntKey();
ItemStack stack = indexStack.getValue();
Item item = chronomatronSlots.get(chronomatronCurrentOrdinal);
if (stack.isOf(item) || TERRACOTTA_TO_GLASS.get(stack.getItem()) == item) {
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 c34abca1..e7502c89 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/experiment/SuperpairsSolver.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/experiment/SuperpairsSolver.java
@@ -2,6 +2,7 @@ package de.hysky.skyblocker.skyblock.experiment;
import de.hysky.skyblocker.config.SkyblockerConfig;
import de.hysky.skyblocker.utils.render.gui.ColorHighlight;
+import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.screen.ingame.GenericContainerScreen;
import net.minecraft.item.ItemStack;
@@ -62,11 +63,11 @@ public class SuperpairsSolver extends ExperimentSolver {
}
@Override
- protected List<ColorHighlight> getColors(String[] groups, Map<Integer, ItemStack> displaySlots) {
+ protected List<ColorHighlight> getColors(String[] groups, Int2ObjectMap<ItemStack> displaySlots) {
List<ColorHighlight> highlights = new ArrayList<>();
if (getState() == State.SHOW) {
- for (Map.Entry<Integer, ItemStack> indexStack : displaySlots.entrySet()) {
- int index = indexStack.getKey();
+ for (Int2ObjectMap.Entry<ItemStack> indexStack : displaySlots.int2ObjectEntrySet()) {
+ int index = indexStack.getIntKey();
ItemStack displayStack = indexStack.getValue();
ItemStack stack = getSlots().get(index);
if (stack != null && !ItemStack.areEqual(stack, displayStack)) {
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 4e87b237..3f1fc72d 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.SkyblockerConfig;
import de.hysky.skyblocker.utils.render.gui.ColorHighlight;
+import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.screen.ingame.GenericContainerScreen;
import net.minecraft.inventory.Inventory;
@@ -9,7 +10,6 @@ import net.minecraft.item.ItemStack;
import java.util.ArrayList;
import java.util.List;
-import java.util.Map;
public class UltrasequencerSolver extends ExperimentSolver {
public static final UltrasequencerSolver INSTANCE = new UltrasequencerSolver();
@@ -76,7 +76,7 @@ public class UltrasequencerSolver extends ExperimentSolver {
}
@Override
- protected List<ColorHighlight> getColors(String[] groups, Map<Integer, ItemStack> slots) {
+ protected List<ColorHighlight> getColors(String[] groups, Int2ObjectMap<ItemStack> slots) {
return getState() == State.SHOW && ultrasequencerNextSlot != 0 ? List.of(ColorHighlight.green(ultrasequencerNextSlot)) : new ArrayList<>();
}
}