diff options
author | LifeIsAParadox <LifeIsAParadox@users.noreply.github.com> | 2021-10-10 22:50:24 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-10 22:50:24 +0200 |
commit | 37d1379d65821e632e5e3e2bef4e3946adf4c5df (patch) | |
tree | 32aaa7eea851c94771c01ecc0ec5a456228680b3 /src/main/java/me/xmrvizzy/skyblocker/skyblock | |
parent | 5fb19e61283bc5a471ab31e96acdd0e5f1b39d1c (diff) | |
parent | d262e35832bec5ae33c19240204dd8490e4eef1e (diff) | |
download | Skyblocker-37d1379d65821e632e5e3e2bef4e3946adf4c5df.tar.gz Skyblocker-37d1379d65821e632e5e3e2bef4e3946adf4c5df.tar.bz2 Skyblocker-37d1379d65821e632e5e3e2bef4e3946adf4c5df.zip |
Merge pull request #19 from ExternalTime/terminal-solvers
Added terminal solvers
Diffstat (limited to 'src/main/java/me/xmrvizzy/skyblocker/skyblock')
3 files changed, 153 insertions, 0 deletions
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 new file mode 100644 index 00000000..6b51754d --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/ColorTerminal.java @@ -0,0 +1,61 @@ +package me.xmrvizzy.skyblocker.skyblock.dungeon.terminal; + +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import me.xmrvizzy.skyblocker.container.ColorHighlight; +import me.xmrvizzy.skyblocker.container.ContainerSolver; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.util.DyeColor; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; + +import java.util.*; + + +public class ColorTerminal extends ContainerSolver { + private static final Map<String, DyeColor> colorFromName; + private DyeColor targetColor; + private static final Map<Item, DyeColor> itemColor; + + public ColorTerminal() { + super("^Select all the ([A-Z ]+) items!$"); + } + + @Override + public boolean isEnabled() { + targetColor = null; + return SkyblockerConfig.get().locations.dungeons.terminals.solveColor; + } + + @Override + public List<ColorHighlight> getColors(String[] groups, Map<Integer, ItemStack> slots) { + trimEdges(slots, 6); + List<ColorHighlight> highlights = new ArrayList<>(); + if(targetColor == null) + targetColor = colorFromName.get(groups[0]); + for(Map.Entry<Integer, ItemStack> slot : slots.entrySet()) { + ItemStack itemStack = slot.getValue(); + if(!itemStack.hasEnchantments() && targetColor.equals(itemColor.get(itemStack.getItem()))) + highlights.add(new ColorHighlight(slot.getKey(), GREEN_HIGHLIGHT)); + } + return highlights; + } + + + static { + colorFromName = new HashMap<>(); + for (DyeColor color : DyeColor.values()) + colorFromName.put(color.getName().toUpperCase(Locale.ROOT), color); + colorFromName.put("SILVER", DyeColor.LIGHT_GRAY); + + 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(Items.BONE_MEAL, DyeColor.WHITE); + itemColor.put(Items.LAPIS_LAZULI, DyeColor.BLUE); + itemColor.put(Items.COCOA_BEANS, DyeColor.BROWN); + itemColor.put(Items.INK_SAC, DyeColor.BLACK); + } +}
\ No newline at end of file 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 new file mode 100644 index 00000000..c61395f4 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/OrderTerminal.java @@ -0,0 +1,58 @@ +package me.xmrvizzy.skyblocker.skyblock.dungeon.terminal; + +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import me.xmrvizzy.skyblocker.container.ColorHighlight; +import me.xmrvizzy.skyblocker.container.ContainerSolver; +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; + private int[] orderedSlots; + private int currentNum = Integer.MAX_VALUE; + + public OrderTerminal() { + super("^Click in order!$"); + } + + @Override + public boolean isEnabled() { + orderedSlots = null; + currentNum = 0; + return SkyblockerConfig.get().locations.dungeons.terminals.solveOrder; + } + + @Override + public List<ColorHighlight> getColors(String[] groups, Map<Integer, 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())) + currentNum++; + List<ColorHighlight> highlights = new ArrayList<>(3); + int last = Integer.min(3, PANES_NUM - currentNum); + for(int i = 0; i < last; i++) { + highlights.add(new ColorHighlight(orderedSlots[currentNum + i], (224 - 64 * i) << 24 | 64 << 16 | 96 << 8 | 255)); + } + return highlights; + } + + public boolean orderSlots(Map<Integer, ItemStack> slots) { + trimEdges(slots, 4); + orderedSlots = new int[PANES_NUM]; + for(Map.Entry<Integer, ItemStack> slot : slots.entrySet()) { + if(Items.AIR.equals(slot.getValue().getItem())) { + orderedSlots = null; + return false; + } + else + orderedSlots[slot.getValue().getCount() - 1] = slot.getKey(); + } + currentNum = 0; + return true; + } +}
\ No newline at end of file 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 new file mode 100644 index 00000000..7c56746f --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/StartsWithTerminal.java @@ -0,0 +1,34 @@ +package me.xmrvizzy.skyblocker.skyblock.dungeon.terminal; + +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import me.xmrvizzy.skyblocker.container.ColorHighlight; +import me.xmrvizzy.skyblocker.container.ContainerSolver; +import net.minecraft.item.ItemStack; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class StartsWithTerminal extends ContainerSolver { + public StartsWithTerminal() { + super("^What starts with: '([A-Z])'\\?$"); + } + + @Override + public boolean isEnabled() { + return SkyblockerConfig.get().locations.dungeons.terminals.solveStartsWith; + } + + @Override + public 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.hasEnchantments() && stack.getName().getString().startsWith(prefix)) + highlights.add(new ColorHighlight(slot.getKey(), GREEN_HIGHLIGHT)); + } + return highlights; + } +}
\ No newline at end of file |