aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal')
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal/ColorTerminal.java10
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal/LightsOnTerminal.java37
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal/OrderTerminal.java13
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal/StartsWithTerminal.java13
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal/TerminalSolver.java10
5 files changed, 75 insertions, 8 deletions
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 01673f23..833e85a3 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
@@ -16,7 +16,7 @@ import org.slf4j.LoggerFactory;
import java.util.*;
-public class ColorTerminal extends ContainerSolver {
+public class ColorTerminal extends ContainerSolver implements TerminalSolver {
private static final Logger LOGGER = LoggerFactory.getLogger(ColorTerminal.class.getName());
private static final Map<String, DyeColor> colorFromName;
private DyeColor targetColor;
@@ -53,6 +53,14 @@ public class ColorTerminal extends ContainerSolver {
return highlights;
}
+ @Override
+ protected boolean onClickSlot(int slot, ItemStack stack, int screenId, String[] groups) {
+ if (stack.hasGlint() || !targetColor.equals(itemColor.get(stack.getItem()))) {
+ return shouldBlockIncorrectClicks();
+ }
+
+ return false;
+ }
static {
colorFromName = new HashMap<>();
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
new file mode 100644
index 00000000..67b51c22
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal/LightsOnTerminal.java
@@ -0,0 +1,37 @@
+package de.hysky.skyblocker.skyblock.dungeon.terminal;
+
+import java.util.List;
+
+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;
+
+/**
+ * The terminal where you change all the panes that are red to green.
+ *
+ * This doesn't solve the terminal because you don't need a solver for it, but rather to simply allow for click blocking.
+ */
+public class LightsOnTerminal extends ContainerSolver implements TerminalSolver {
+ private static final List<ColorHighlight> EMPTY = List.of();
+
+ public LightsOnTerminal() {
+ super("^Correct all the panes!$");
+ }
+
+ @Override
+ protected boolean isEnabled() {
+ return shouldBlockIncorrectClicks();
+ }
+
+ @Override
+ protected List<ColorHighlight> getColors(String[] groups, Int2ObjectMap<ItemStack> slots) {
+ return EMPTY;
+ }
+
+ @Override
+ protected boolean onClickSlot(int slot, ItemStack stack, int screenId, String[] groups) {
+ 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 d8d9a63a..e980a136 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
@@ -11,7 +11,7 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
-public class OrderTerminal extends ContainerSolver {
+public class OrderTerminal extends ContainerSolver implements TerminalSolver {
private final int PANES_NUM = 14;
private int[] orderedSlots;
private int currentNum = Integer.MAX_VALUE;
@@ -55,4 +55,15 @@ public class OrderTerminal extends ContainerSolver {
currentNum = 0;
return true;
}
+
+ @Override
+ protected boolean onClickSlot(int slot, ItemStack stack, int screenId, String[] groups) {
+ if (stack == null || stack.isEmpty()) return false;
+
+ if (!stack.isOf(Items.RED_STAINED_GLASS_PANE) || stack.getCount() != currentNum + 1) {
+ return shouldBlockIncorrectClicks();
+ }
+
+ return false;
+ }
} \ No newline at end of file
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 c4cc8e47..51a778a5 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
@@ -13,7 +13,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;
-public class StartsWithTerminal extends ContainerSolver {
+public class StartsWithTerminal extends ContainerSolver implements TerminalSolver {
private final Int2ObjectOpenHashMap<ItemState> trackedItemStates = new Int2ObjectOpenHashMap<>();
private int lastKnownScreenId = Integer.MIN_VALUE;
@@ -50,9 +50,9 @@ public class StartsWithTerminal extends ContainerSolver {
}
@Override
- protected void onClickSlot(int slot, ItemStack stack, int screenId, String[] groups) {
+ protected boolean onClickSlot(int slot, ItemStack stack, int screenId, String[] groups) {
//Some random glass pane was clicked or something
- if (!trackedItemStates.containsKey(slot) || stack == null || stack.isEmpty()) return;
+ if (!trackedItemStates.containsKey(slot) || stack == null || stack.isEmpty()) return false;
ItemState state = trackedItemStates.get(slot);
String prefix = groups[0];
@@ -61,16 +61,17 @@ public class StartsWithTerminal extends ContainerSolver {
//Also, since Hypixel closes & reopens the GUI after every click we check if the last known screen id is the same that way in case the server lags and
//either a player tries to click a second item or if the player puts the clicked item back and tries to click another that we don't mark multiple items
//as clicked when only the first one will count.
-
+
//While Hypixel does use a different syncId each time they open the screen we opt to use our own so as to avoid them potentially changing that
//and in turn breaking this logic
if (stack.getName().getString().startsWith(prefix) && !state.clicked() && lastKnownScreenId != screenId) {
trackedItemStates.put(slot, state.click());
lastKnownScreenId = screenId;
+ } else {
+ return shouldBlockIncorrectClicks();
}
- //In the future we could add an else branch and return a boolean to cancel the click since it would be wrong
- return;
+ 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)
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
new file mode 100644
index 00000000..7a7cd6bb
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal/TerminalSolver.java
@@ -0,0 +1,10 @@
+package de.hysky.skyblocker.skyblock.dungeon.terminal;
+
+import de.hysky.skyblocker.config.SkyblockerConfigManager;
+
+public interface TerminalSolver {
+
+ default boolean shouldBlockIncorrectClicks() {
+ return SkyblockerConfigManager.get().dungeons.terminals.blockIncorrectClicks;
+ }
+}