From 4a1075ce0e7c7bb53179820c44f639ce79fe7404 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Fri, 16 Jun 2023 16:34:16 +0800 Subject: Add Chronomatron Solver --- .../skyblocker/skyblock/dungeon/CroesusHelper.java | 4 +- .../skyblock/dungeon/terminal/ColorTerminal.java | 4 +- .../skyblock/dungeon/terminal/OrderTerminal.java | 4 +- .../dungeon/terminal/StartsWithTerminal.java | 4 +- .../skyblock/experiment/ChronomatronSolver.java | 126 +++++++++++++++++++++ .../skyblock/experiment/ExperimentSolver.java | 59 ++++++++++ .../skyblock/experiment/SuperpairsSolver.java | 44 +++++++ .../skyblock/experiment/UltrasequencerSolver.java | 40 +++++++ 8 files changed, 277 insertions(+), 8 deletions(-) create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ChronomatronSolver.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ExperimentSolver.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/SuperpairsSolver.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/UltrasequencerSolver.java (limited to 'src/main/java/me/xmrvizzy/skyblocker/skyblock') diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/CroesusHelper.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/CroesusHelper.java index ec3655f0..5e7ca95f 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/CroesusHelper.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/CroesusHelper.java @@ -14,12 +14,12 @@ public class CroesusHelper extends ContainerSolver { public CroesusHelper() { super("^Croesus$"); } @Override - public boolean isEnabled() { + protected boolean isEnabled() { return SkyblockerConfig.get().locations.dungeons.croesusHelper; } @Override - public List getColors(String[] groups, Map slots) { + protected List getColors(String[] groups, Map slots) { List highlights = new ArrayList<>(); for (Map.Entry entry : slots.entrySet()) { ItemStack stack = entry.getValue(); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/ColorTerminal.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/ColorTerminal.java index 0bfc0d60..30376254 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/ColorTerminal.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/ColorTerminal.java @@ -27,13 +27,13 @@ public class ColorTerminal extends ContainerSolver { } @Override - public boolean isEnabled() { + protected boolean isEnabled() { targetColor = null; return SkyblockerConfig.get().locations.dungeons.terminals.solveColor; } @Override - public List getColors(String[] groups, Map slots) { + protected List getColors(String[] groups, Map slots) { trimEdges(slots, 6); List highlights = new ArrayList<>(); String colorString = groups[0]; diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/OrderTerminal.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/OrderTerminal.java index 1cf0dcfc..3b4e1c50 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/OrderTerminal.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/OrderTerminal.java @@ -21,14 +21,14 @@ public class OrderTerminal extends ContainerSolver { } @Override - public boolean isEnabled() { + protected boolean isEnabled() { orderedSlots = null; currentNum = 0; return SkyblockerConfig.get().locations.dungeons.terminals.solveOrder; } @Override - public List getColors(String[] groups, Map slots) { + protected List getColors(String[] groups, Map slots) { if(orderedSlots == null && !orderSlots(slots)) return Collections.emptyList(); while(currentNum < PANES_NUM && Items.LIME_STAINED_GLASS_PANE.equals(slots.get(orderedSlots[currentNum]).getItem())) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/StartsWithTerminal.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/StartsWithTerminal.java index 26d2a2c4..a836a679 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/StartsWithTerminal.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/StartsWithTerminal.java @@ -15,12 +15,12 @@ public class StartsWithTerminal extends ContainerSolver { } @Override - public boolean isEnabled() { + protected boolean isEnabled() { return SkyblockerConfig.get().locations.dungeons.terminals.solveStartsWith; } @Override - public List getColors(String[] groups, Map slots) { + protected List getColors(String[] groups, Map slots) { trimEdges(slots, 6); String prefix = groups[0]; List highlights = new ArrayList<>(); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ChronomatronSolver.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ChronomatronSolver.java new file mode 100644 index 00000000..ee88b98f --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ChronomatronSolver.java @@ -0,0 +1,126 @@ +package me.xmrvizzy.skyblocker.skyblock.experiment; + +import com.google.common.collect.ImmutableMap; +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import me.xmrvizzy.skyblocker.gui.ColorHighlight; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.screen.ingame.GenericContainerScreen; +import net.minecraft.inventory.Inventory; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +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 TERRACOTTA_TO_GLASS = ImmutableMap.ofEntries( + new AbstractMap.SimpleImmutableEntry<>(Items.RED_TERRACOTTA, Items.RED_STAINED_GLASS), + new AbstractMap.SimpleImmutableEntry<>(Items.ORANGE_TERRACOTTA, Items.ORANGE_STAINED_GLASS), + new AbstractMap.SimpleImmutableEntry<>(Items.YELLOW_TERRACOTTA, Items.YELLOW_STAINED_GLASS), + new AbstractMap.SimpleImmutableEntry<>(Items.LIME_TERRACOTTA, Items.LIME_STAINED_GLASS), + new AbstractMap.SimpleImmutableEntry<>(Items.GREEN_TERRACOTTA, Items.GREEN_STAINED_GLASS), + new AbstractMap.SimpleImmutableEntry<>(Items.CYAN_TERRACOTTA, Items.CYAN_STAINED_GLASS), + new AbstractMap.SimpleImmutableEntry<>(Items.LIGHT_BLUE_TERRACOTTA, Items.LIGHT_BLUE_STAINED_GLASS), + new AbstractMap.SimpleImmutableEntry<>(Items.BLUE_TERRACOTTA, Items.BLUE_STAINED_GLASS), + new AbstractMap.SimpleImmutableEntry<>(Items.PURPLE_TERRACOTTA, Items.PURPLE_STAINED_GLASS), + new AbstractMap.SimpleImmutableEntry<>(Items.PINK_TERRACOTTA, Items.PINK_STAINED_GLASS) + ); + + private final List chronomatronSlots = new ArrayList<>(); + private int chronomatronChainLengthCount; + private int chronomatronCurrentSlot; + private int chronomatronCurrentOrdinal; + + public ChronomatronSolver() { + super("^Chronomatron \\("); + } + + public List getChronomatronSlots() { + return chronomatronSlots; + } + + public int getChronomatronCurrentOrdinal() { + return chronomatronCurrentOrdinal; + } + + public int incrementChronomatronCurrentOrdinal() { + return ++chronomatronCurrentOrdinal; + } + + @Override + protected boolean isEnabled(SkyblockerConfig.Experiments experimentsConfig) { + return experimentsConfig.enableChronomatronSolver; + } + + @Override + protected void tick(Screen screen) { + if (isEnabled() && screen instanceof GenericContainerScreen genericContainerScreen && genericContainerScreen.getTitle().getString().startsWith("Chronomatron (")) { + switch (state) { + case REMEMBER -> { + Inventory inventory = genericContainerScreen.getScreenHandler().getInventory(); + if (chronomatronCurrentSlot == 0) { + for (int index = 10; index < 43; index++) { + if (inventory.getStack(index).hasEnchantments()) { + if (chronomatronSlots.size() <= chronomatronChainLengthCount) { + chronomatronSlots.add(TERRACOTTA_TO_GLASS.get(inventory.getStack(index).getItem())); + state = State.WAIT; + } else { + chronomatronChainLengthCount++; + } + chronomatronCurrentSlot = index; + return; + } + } + } else if (!inventory.getStack(chronomatronCurrentSlot).hasEnchantments()) { + chronomatronCurrentSlot = 0; + } + } + case WAIT -> { + if (genericContainerScreen.getScreenHandler().getInventory().getStack(49).getName().getString().startsWith("Timer: ")) { + state = State.SHOW; + } + } + case END -> { + String name = genericContainerScreen.getScreenHandler().getInventory().getStack(49).getName().getString(); + if (!name.startsWith("Timer: ")) { + if (name.equals("Remember the pattern!")) { + chronomatronChainLengthCount = 0; + chronomatronCurrentOrdinal = 0; + state = State.REMEMBER; + } else { + reset(); + } + } + } + } + } else { + reset(); + } + } + + @Override + protected List getColors(String[] groups, Map slots) { + List highlights = new ArrayList<>(); + for (Map.Entry indexStack : slots.entrySet()) { + int index = indexStack.getKey(); + ItemStack stack = indexStack.getValue(); + Item item = chronomatronSlots.get(chronomatronCurrentOrdinal); + if (stack.isOf(item) || TERRACOTTA_TO_GLASS.get(stack.getItem()) == item) { + highlights.add(ColorHighlight.green(index)); + } + } + return highlights; + } + + @Override + protected void reset() { + super.reset(); + chronomatronSlots.clear(); + chronomatronChainLengthCount = 0; + chronomatronCurrentSlot = 0; + chronomatronCurrentOrdinal = 0; + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ExperimentSolver.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ExperimentSolver.java new file mode 100644 index 00000000..91eabcfe --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ExperimentSolver.java @@ -0,0 +1,59 @@ +package me.xmrvizzy.skyblocker.skyblock.experiment; + +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import me.xmrvizzy.skyblocker.gui.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 java.util.HashMap; +import java.util.Map; + +public abstract class ExperimentSolver extends ContainerSolver { + public enum State { + REMEMBER, WAIT, SHOW, END + } + + protected State state = State.REMEMBER; + protected final Map slots = new HashMap<>(); + + protected ExperimentSolver(String containerName) { + super(containerName); + } + + public State getState() { + return state; + } + + public void setState(State state) { + this.state = state; + } + + public Map getSlots() { + return slots; + } + + @Override + protected final boolean isEnabled() { + return isEnabled(SkyblockerConfig.get().general.experiments); + } + + protected abstract boolean isEnabled(SkyblockerConfig.Experiments experimentsConfig); + + @Override + protected void start(GenericContainerScreen screen) { + super.start(screen); + state = State.REMEMBER; + ScreenEvents.afterTick(screen).register(this::tick); + } + + @Override + protected void reset() { + super.reset(); + state = State.REMEMBER; + slots.clear(); + } + + protected abstract void tick(Screen screen); +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/SuperpairsSolver.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/SuperpairsSolver.java new file mode 100644 index 00000000..5a5993bc --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/SuperpairsSolver.java @@ -0,0 +1,44 @@ +package me.xmrvizzy.skyblocker.skyblock.experiment; + +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import me.xmrvizzy.skyblocker.gui.ColorHighlight; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.item.ItemStack; + +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +public class SuperpairsSolver extends ExperimentSolver { + private int superpairsPrevClickedSlot; + private ItemStack superpairsCurrentSlot; + private final Set superpairsDuplicatedSlots = new HashSet<>(); + + public SuperpairsSolver() { + super("^Superpairs \\("); + } + + public void setSuperpairsPrevClickedSlot(int superpairsPrevClickedSlot) { + this.superpairsPrevClickedSlot = superpairsPrevClickedSlot; + } + + public void setSuperpairsCurrentSlot(ItemStack superpairsCurrentSlot) { + this.superpairsCurrentSlot = superpairsCurrentSlot; + } + + @Override + protected boolean isEnabled(SkyblockerConfig.Experiments experimentsConfig) { + return experimentsConfig.enableSuperpairsSolver; + } + + @Override + protected void tick(Screen screen) { + + } + + @Override + protected List getColors(String[] groups, Map slots) { + return null; + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/UltrasequencerSolver.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/UltrasequencerSolver.java new file mode 100644 index 00000000..8ea44bce --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/UltrasequencerSolver.java @@ -0,0 +1,40 @@ +package me.xmrvizzy.skyblocker.skyblock.experiment; + +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import me.xmrvizzy.skyblocker.gui.ColorHighlight; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.item.ItemStack; + +import java.util.List; +import java.util.Map; + +public class UltrasequencerSolver extends ExperimentSolver { + private int ultrasequencerNextSlot; + + public UltrasequencerSolver() { + super("^Ultrasequencer \\("); + } + + public int getUltrasequencerNextSlot() { + return ultrasequencerNextSlot; + } + + public void setUltrasequencerNextSlot(int ultrasequencerNextSlot) { + this.ultrasequencerNextSlot = ultrasequencerNextSlot; + } + + @Override + protected boolean isEnabled(SkyblockerConfig.Experiments experimentsConfig) { + return experimentsConfig.enableUltrasequencerSolver; + } + + @Override + protected void tick(Screen screen) { + + } + + @Override + protected List getColors(String[] groups, Map slots) { + return null; + } +} -- cgit From 8cf9c0835c5ed1567acf10f6e22766212f33dbc6 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Fri, 16 Jun 2023 16:46:46 +0800 Subject: Add Superpairs and Ultrasequencer Solver --- .../skyblock/experiment/SuperpairsSolver.java | 43 +++++++++++++++--- .../skyblock/experiment/UltrasequencerSolver.java | 51 +++++++++++++++++++++- 2 files changed, 85 insertions(+), 9 deletions(-) (limited to 'src/main/java/me/xmrvizzy/skyblocker/skyblock') diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/SuperpairsSolver.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/SuperpairsSolver.java index 5a5993bc..117bcdf3 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/SuperpairsSolver.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/SuperpairsSolver.java @@ -3,12 +3,11 @@ package me.xmrvizzy.skyblocker.skyblock.experiment; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.gui.ColorHighlight; import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.screen.ingame.GenericContainerScreen; import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; public class SuperpairsSolver extends ExperimentSolver { private int superpairsPrevClickedSlot; @@ -34,11 +33,41 @@ public class SuperpairsSolver extends ExperimentSolver { @Override protected void tick(Screen screen) { - + if (isEnabled() && screen instanceof GenericContainerScreen genericContainerScreen && genericContainerScreen.getTitle().getString().startsWith("Superpairs (")) { + if (state == State.SHOW) { + if (genericContainerScreen.getScreenHandler().getInventory().getStack(4).isOf(Items.CAULDRON)) { + reset(); + } else if (slots.get(superpairsPrevClickedSlot) == null) { + ItemStack itemStack = genericContainerScreen.getScreenHandler().getInventory().getStack(superpairsPrevClickedSlot); + if (!(itemStack.isOf(Items.CYAN_STAINED_GLASS) || itemStack.isOf(Items.BLACK_STAINED_GLASS_PANE) || itemStack.isOf(Items.AIR))) { + slots.entrySet().stream().filter((entry -> ItemStack.areEqual(entry.getValue(), itemStack))).findAny().ifPresent(entry -> superpairsDuplicatedSlots.add(entry.getKey())); + slots.put(superpairsPrevClickedSlot, itemStack); + superpairsCurrentSlot = itemStack; + } + } + } + } else { + reset(); + } } @Override - protected List getColors(String[] groups, Map slots) { - return null; + protected List getColors(String[] groups, Map displaySlots) { + List highlights = new ArrayList<>(); + for (Map.Entry indexStack : displaySlots.entrySet()){ + int index = indexStack.getKey(); + ItemStack displayStack = indexStack.getValue(); + ItemStack stack = slots.get(index); + if (stack != null && !ItemStack.areEqual(stack, displayStack)) { + if (ItemStack.areEqual(superpairsCurrentSlot, stack) && displayStack.getName().getString().equals("Click a second button!")) { + highlights.add(ColorHighlight.green(index)); + } else if (superpairsDuplicatedSlots.contains(index)) { + highlights.add(ColorHighlight.yellow(index)); + } else { + highlights.add(ColorHighlight.red(index)); + } + } + } + return highlights; } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/UltrasequencerSolver.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/UltrasequencerSolver.java index 8ea44bce..edda257c 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/UltrasequencerSolver.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/UltrasequencerSolver.java @@ -3,8 +3,11 @@ package me.xmrvizzy.skyblocker.skyblock.experiment; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.gui.ColorHighlight; import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.screen.ingame.GenericContainerScreen; +import net.minecraft.inventory.Inventory; import net.minecraft.item.ItemStack; +import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -30,11 +33,55 @@ public class UltrasequencerSolver extends ExperimentSolver { @Override protected void tick(Screen screen) { - + if (isEnabled() && screen instanceof GenericContainerScreen genericContainerScreen && genericContainerScreen.getTitle().getString().startsWith("Ultrasequencer (")) { + switch (state) { + case REMEMBER -> { + Inventory inventory = genericContainerScreen.getScreenHandler().getInventory(); + if (inventory.getStack(49).getName().getString().equals("Remember the pattern!")) { + for (int index = 9; index < 45; index++) { + ItemStack itemStack = inventory.getStack(index); + String name = itemStack.getName().getString(); + if (name.matches("\\d+")) { + if (name.equals("1")) { + ultrasequencerNextSlot = index; + } + slots.put(index, itemStack); + } + } + state = State.WAIT; + } + } + case WAIT -> { + if (genericContainerScreen.getScreenHandler().getInventory().getStack(49).getName().getString().startsWith("Timer: ")) { + state = State.SHOW; + } + } + case END -> { + String name = genericContainerScreen.getScreenHandler().getInventory().getStack(49).getName().getString(); + if (!name.startsWith("Timer: ")) { + if (name.equals("Remember the pattern!")) { + slots.clear(); + state = State.REMEMBER; + } else { + reset(); + } + } + } + } + } else { + reset(); + } } @Override protected List getColors(String[] groups, Map slots) { - return null; + List highlights = new ArrayList<>(); + for (Map.Entry indexStack : slots.entrySet()) { + int index = indexStack.getKey(); + if (index == ultrasequencerNextSlot) { + highlights.add(ColorHighlight.green(index)); + } + } + return highlights; } } -- cgit From e9c2a6916ff744c935c4330c259b641159ec9b80 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Fri, 16 Jun 2023 16:56:15 +0800 Subject: Fix Superpairs Solver initial state and refactor Experiment Solver fields to private --- .../skyblock/experiment/ChronomatronSolver.java | 8 ++++---- .../skyblocker/skyblock/experiment/ExperimentSolver.java | 4 ++-- .../skyblocker/skyblock/experiment/SuperpairsSolver.java | 16 +++++++++++----- .../skyblock/experiment/UltrasequencerSolver.java | 12 ++++++------ 4 files changed, 23 insertions(+), 17 deletions(-) (limited to 'src/main/java/me/xmrvizzy/skyblocker/skyblock') diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ChronomatronSolver.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ChronomatronSolver.java index ee88b98f..1a6f0b55 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ChronomatronSolver.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ChronomatronSolver.java @@ -58,7 +58,7 @@ public class ChronomatronSolver extends ExperimentSolver { @Override protected void tick(Screen screen) { if (isEnabled() && screen instanceof GenericContainerScreen genericContainerScreen && genericContainerScreen.getTitle().getString().startsWith("Chronomatron (")) { - switch (state) { + switch (getState()) { case REMEMBER -> { Inventory inventory = genericContainerScreen.getScreenHandler().getInventory(); if (chronomatronCurrentSlot == 0) { @@ -66,7 +66,7 @@ public class ChronomatronSolver extends ExperimentSolver { if (inventory.getStack(index).hasEnchantments()) { if (chronomatronSlots.size() <= chronomatronChainLengthCount) { chronomatronSlots.add(TERRACOTTA_TO_GLASS.get(inventory.getStack(index).getItem())); - state = State.WAIT; + setState(State.WAIT); } else { chronomatronChainLengthCount++; } @@ -80,7 +80,7 @@ public class ChronomatronSolver extends ExperimentSolver { } case WAIT -> { if (genericContainerScreen.getScreenHandler().getInventory().getStack(49).getName().getString().startsWith("Timer: ")) { - state = State.SHOW; + setState(State.SHOW); } } case END -> { @@ -89,7 +89,7 @@ public class ChronomatronSolver extends ExperimentSolver { if (name.equals("Remember the pattern!")) { chronomatronChainLengthCount = 0; chronomatronCurrentOrdinal = 0; - state = State.REMEMBER; + setState(State.REMEMBER); } else { reset(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ExperimentSolver.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ExperimentSolver.java index 91eabcfe..5dad908e 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ExperimentSolver.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ExperimentSolver.java @@ -15,8 +15,8 @@ public abstract class ExperimentSolver extends ContainerSolver { REMEMBER, WAIT, SHOW, END } - protected State state = State.REMEMBER; - protected final Map slots = new HashMap<>(); + private State state = State.REMEMBER; + private final Map slots = new HashMap<>(); protected ExperimentSolver(String containerName) { super(containerName); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/SuperpairsSolver.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/SuperpairsSolver.java index 117bcdf3..f40b0fa0 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/SuperpairsSolver.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/SuperpairsSolver.java @@ -31,17 +31,23 @@ public class SuperpairsSolver extends ExperimentSolver { return experimentsConfig.enableSuperpairsSolver; } + @Override + protected void start(GenericContainerScreen screen) { + super.start(screen); + setState(State.SHOW); + } + @Override protected void tick(Screen screen) { if (isEnabled() && screen instanceof GenericContainerScreen genericContainerScreen && genericContainerScreen.getTitle().getString().startsWith("Superpairs (")) { - if (state == State.SHOW) { + if (getState() == State.SHOW) { if (genericContainerScreen.getScreenHandler().getInventory().getStack(4).isOf(Items.CAULDRON)) { reset(); - } else if (slots.get(superpairsPrevClickedSlot) == null) { + } else if (getSlots().get(superpairsPrevClickedSlot) == null) { ItemStack itemStack = genericContainerScreen.getScreenHandler().getInventory().getStack(superpairsPrevClickedSlot); if (!(itemStack.isOf(Items.CYAN_STAINED_GLASS) || itemStack.isOf(Items.BLACK_STAINED_GLASS_PANE) || itemStack.isOf(Items.AIR))) { - slots.entrySet().stream().filter((entry -> ItemStack.areEqual(entry.getValue(), itemStack))).findAny().ifPresent(entry -> superpairsDuplicatedSlots.add(entry.getKey())); - slots.put(superpairsPrevClickedSlot, itemStack); + getSlots().entrySet().stream().filter((entry -> ItemStack.areEqual(entry.getValue(), itemStack))).findAny().ifPresent(entry -> superpairsDuplicatedSlots.add(entry.getKey())); + getSlots().put(superpairsPrevClickedSlot, itemStack); superpairsCurrentSlot = itemStack; } } @@ -57,7 +63,7 @@ public class SuperpairsSolver extends ExperimentSolver { for (Map.Entry indexStack : displaySlots.entrySet()){ int index = indexStack.getKey(); ItemStack displayStack = indexStack.getValue(); - ItemStack stack = slots.get(index); + ItemStack stack = getSlots().get(index); if (stack != null && !ItemStack.areEqual(stack, displayStack)) { if (ItemStack.areEqual(superpairsCurrentSlot, stack) && displayStack.getName().getString().equals("Click a second button!")) { highlights.add(ColorHighlight.green(index)); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/UltrasequencerSolver.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/UltrasequencerSolver.java index edda257c..90968fe2 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/UltrasequencerSolver.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/UltrasequencerSolver.java @@ -34,7 +34,7 @@ public class UltrasequencerSolver extends ExperimentSolver { @Override protected void tick(Screen screen) { if (isEnabled() && screen instanceof GenericContainerScreen genericContainerScreen && genericContainerScreen.getTitle().getString().startsWith("Ultrasequencer (")) { - switch (state) { + switch (getState()) { case REMEMBER -> { Inventory inventory = genericContainerScreen.getScreenHandler().getInventory(); if (inventory.getStack(49).getName().getString().equals("Remember the pattern!")) { @@ -45,23 +45,23 @@ public class UltrasequencerSolver extends ExperimentSolver { if (name.equals("1")) { ultrasequencerNextSlot = index; } - slots.put(index, itemStack); + getSlots().put(index, itemStack); } } - state = State.WAIT; + setState(State.WAIT); } } case WAIT -> { if (genericContainerScreen.getScreenHandler().getInventory().getStack(49).getName().getString().startsWith("Timer: ")) { - state = State.SHOW; + setState(State.SHOW); } } case END -> { String name = genericContainerScreen.getScreenHandler().getInventory().getStack(49).getName().getString(); if (!name.startsWith("Timer: ")) { if (name.equals("Remember the pattern!")) { - slots.clear(); - state = State.REMEMBER; + getSlots().clear(); + setState(State.REMEMBER); } else { reset(); } -- cgit From 28699078b09780e9447b72b2859bba46b0e8dca9 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Sat, 17 Jun 2023 12:52:19 +0800 Subject: Fix solver detection and highlights --- .../skyblock/experiment/ChronomatronSolver.java | 16 +++++++------ .../skyblock/experiment/SuperpairsSolver.java | 26 ++++++++++++---------- .../skyblock/experiment/UltrasequencerSolver.java | 11 ++------- 3 files changed, 25 insertions(+), 28 deletions(-) (limited to 'src/main/java/me/xmrvizzy/skyblocker/skyblock') diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ChronomatronSolver.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ChronomatronSolver.java index 1a6f0b55..40793169 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ChronomatronSolver.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ChronomatronSolver.java @@ -35,7 +35,7 @@ public class ChronomatronSolver extends ExperimentSolver { private int chronomatronCurrentOrdinal; public ChronomatronSolver() { - super("^Chronomatron \\("); + super("^Chronomatron \\(\\w+\\)$"); } public List getChronomatronSlots() { @@ -104,12 +104,14 @@ public class ChronomatronSolver extends ExperimentSolver { @Override protected List getColors(String[] groups, Map slots) { List highlights = new ArrayList<>(); - for (Map.Entry indexStack : slots.entrySet()) { - int index = indexStack.getKey(); - ItemStack stack = indexStack.getValue(); - Item item = chronomatronSlots.get(chronomatronCurrentOrdinal); - if (stack.isOf(item) || TERRACOTTA_TO_GLASS.get(stack.getItem()) == item) { - highlights.add(ColorHighlight.green(index)); + if (getState() == State.SHOW && chronomatronSlots.size() > chronomatronCurrentOrdinal) { + for (Map.Entry indexStack : slots.entrySet()) { + int index = indexStack.getKey(); + ItemStack stack = indexStack.getValue(); + Item item = chronomatronSlots.get(chronomatronCurrentOrdinal); + if (stack.isOf(item) || TERRACOTTA_TO_GLASS.get(stack.getItem()) == item) { + highlights.add(ColorHighlight.green(index)); + } } } return highlights; diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/SuperpairsSolver.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/SuperpairsSolver.java index f40b0fa0..9f6e8b2a 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/SuperpairsSolver.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/SuperpairsSolver.java @@ -15,7 +15,7 @@ public class SuperpairsSolver extends ExperimentSolver { private final Set superpairsDuplicatedSlots = new HashSet<>(); public SuperpairsSolver() { - super("^Superpairs \\("); + super("^Superpairs \\(\\w+\\)$"); } public void setSuperpairsPrevClickedSlot(int superpairsPrevClickedSlot) { @@ -60,17 +60,19 @@ public class SuperpairsSolver extends ExperimentSolver { @Override protected List getColors(String[] groups, Map displaySlots) { List highlights = new ArrayList<>(); - for (Map.Entry indexStack : displaySlots.entrySet()){ - int index = indexStack.getKey(); - ItemStack displayStack = indexStack.getValue(); - ItemStack stack = getSlots().get(index); - if (stack != null && !ItemStack.areEqual(stack, displayStack)) { - if (ItemStack.areEqual(superpairsCurrentSlot, stack) && displayStack.getName().getString().equals("Click a second button!")) { - highlights.add(ColorHighlight.green(index)); - } else if (superpairsDuplicatedSlots.contains(index)) { - highlights.add(ColorHighlight.yellow(index)); - } else { - highlights.add(ColorHighlight.red(index)); + if (getState() == State.SHOW) { + for (Map.Entry indexStack : displaySlots.entrySet()) { + int index = indexStack.getKey(); + ItemStack displayStack = indexStack.getValue(); + ItemStack stack = getSlots().get(index); + if (stack != null && !ItemStack.areEqual(stack, displayStack)) { + if (ItemStack.areEqual(superpairsCurrentSlot, stack) && displayStack.getName().getString().equals("Click a second button!")) { + highlights.add(ColorHighlight.green(index)); + } else if (superpairsDuplicatedSlots.contains(index)) { + highlights.add(ColorHighlight.yellow(index)); + } else { + highlights.add(ColorHighlight.red(index)); + } } } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/UltrasequencerSolver.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/UltrasequencerSolver.java index 90968fe2..45d6c0c6 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/UltrasequencerSolver.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/UltrasequencerSolver.java @@ -15,7 +15,7 @@ public class UltrasequencerSolver extends ExperimentSolver { private int ultrasequencerNextSlot; public UltrasequencerSolver() { - super("^Ultrasequencer \\("); + super("^Ultrasequencer \\(\\w+\\)$"); } public int getUltrasequencerNextSlot() { @@ -75,13 +75,6 @@ public class UltrasequencerSolver extends ExperimentSolver { @Override protected List getColors(String[] groups, Map slots) { - List highlights = new ArrayList<>(); - for (Map.Entry indexStack : slots.entrySet()) { - int index = indexStack.getKey(); - if (index == ultrasequencerNextSlot) { - highlights.add(ColorHighlight.green(index)); - } - } - return highlights; + return getState() == State.SHOW && ultrasequencerNextSlot != 0 ? List.of(ColorHighlight.green(ultrasequencerNextSlot)) : new ArrayList<>(); } } -- cgit From 2825aa0dd980f1909941cea87e37d47b9c80efab Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Sat, 17 Jun 2023 16:35:36 +0800 Subject: Refactor ColorHighlight --- .../xmrvizzy/skyblocker/skyblock/dungeon/CroesusHelper.java | 9 ++++++--- .../skyblocker/skyblock/dungeon/terminal/ColorTerminal.java | 13 ++++++------- .../skyblock/dungeon/terminal/StartsWithTerminal.java | 7 ++++--- 3 files changed, 16 insertions(+), 13 deletions(-) (limited to 'src/main/java/me/xmrvizzy/skyblocker/skyblock') diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/CroesusHelper.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/CroesusHelper.java index 5e7ca95f..2d868782 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/CroesusHelper.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/CroesusHelper.java @@ -11,7 +11,9 @@ import java.util.Map; public class CroesusHelper extends ContainerSolver { - public CroesusHelper() { super("^Croesus$"); } + public CroesusHelper() { + super("^Croesus$"); + } @Override protected boolean isEnabled() { @@ -23,8 +25,9 @@ public class CroesusHelper extends ContainerSolver { List highlights = new ArrayList<>(); for (Map.Entry entry : slots.entrySet()) { ItemStack stack = entry.getValue(); - if (stack != null && stack.getNbt() != null && stack.getNbt().toString().contains("opened")) - highlights.add(new ColorHighlight(entry.getKey(), GRAY_HIGHLIGHT)); + if (stack != null && stack.getNbt() != null && stack.getNbt().toString().contains("opened")) { + highlights.add(ColorHighlight.gray(entry.getKey())); + } } return highlights; } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/ColorTerminal.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/ColorTerminal.java index 30376254..add30907 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/ColorTerminal.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/ColorTerminal.java @@ -6,7 +6,6 @@ import me.xmrvizzy.skyblocker.gui.ContainerSolver; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; -// import net.minecraft.registry.Registry; import net.minecraft.registry.Registries; import net.minecraft.util.DyeColor; import net.minecraft.util.Identifier; @@ -37,17 +36,18 @@ public class ColorTerminal extends ContainerSolver { trimEdges(slots, 6); List highlights = new ArrayList<>(); String colorString = groups[0]; - if(targetColor == null) { + if (targetColor == null) { targetColor = colorFromName.get(colorString); - if(targetColor == null) { + if (targetColor == null) { LOGGER.error("[Skyblocker] Couldn't find dye color corresponding to \"" + colorString + "\""); return Collections.emptyList(); } } - for(Map.Entry slot : slots.entrySet()) { + for (Map.Entry slot : slots.entrySet()) { ItemStack itemStack = slot.getValue(); - if(!itemStack.hasEnchantments() && targetColor.equals(itemColor.get(itemStack.getItem()))) - highlights.add(new ColorHighlight(slot.getKey(), GREEN_HIGHLIGHT)); + if (!itemStack.hasEnchantments() && targetColor.equals(itemColor.get(itemStack.getItem()))) { + highlights.add(ColorHighlight.green(slot.getKey())); + } } return highlights; } @@ -63,7 +63,6 @@ public class ColorTerminal extends ContainerSolver { itemColor = new HashMap<>(); for (DyeColor color : DyeColor.values()) for (String item : new String[]{"dye", "wool", "stained_glass", "terracotta"}) - // itemColor.put(Registry.ITEM.get(new Identifier(color.getName() + '_' + item)), color); itemColor.put(Registries.ITEM.get(new Identifier(color.getName() + '_' + item)), color); itemColor.put(Items.BONE_MEAL, DyeColor.WHITE); itemColor.put(Items.LAPIS_LAZULI, DyeColor.BLUE); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/StartsWithTerminal.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/StartsWithTerminal.java index a836a679..18326254 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/StartsWithTerminal.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/StartsWithTerminal.java @@ -24,10 +24,11 @@ public class StartsWithTerminal extends ContainerSolver { trimEdges(slots, 6); String prefix = groups[0]; List highlights = new ArrayList<>(); - for(Map.Entry slot : slots.entrySet()) { + for (Map.Entry slot : slots.entrySet()) { ItemStack stack = slot.getValue(); - if(!stack.hasEnchantments() && stack.getName().getString().startsWith(prefix)) - highlights.add(new ColorHighlight(slot.getKey(), GREEN_HIGHLIGHT)); + if (!stack.hasEnchantments() && stack.getName().getString().startsWith(prefix)) { + highlights.add(ColorHighlight.green(slot.getKey())); + } } return highlights; } -- cgit