From b1c7beb812ec6af83cbc200037634731cb9cf9c6 Mon Sep 17 00:00:00 2001 From: ExternalTime <84183548+ExternalTime@users.noreply.github.com> Date: Thu, 7 Oct 2021 19:45:52 +0200 Subject: Made SkyblockerMod formatting more consistent --- .../java/me/xmrvizzy/skyblocker/SkyblockerMod.java | 52 +++++++++++----------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java index 8baba403..2bef2f28 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java +++ b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java @@ -10,35 +10,35 @@ import net.fabricmc.api.ClientModInitializer; import net.minecraft.client.MinecraftClient; public class SkyblockerMod implements ClientModInitializer { - public static final String NAMESPACE = "skyblocker"; - private static int TICKS = 0; + public static final String NAMESPACE = "skyblocker"; + private static int TICKS = 0; - @Override - public void onInitializeClient() { - HotbarSlotLock.init(); - SkyblockerConfig.init(); - PriceInfoTooltip.init(); - } + @Override + public void onInitializeClient() { + HotbarSlotLock.init(); + SkyblockerConfig.init(); + PriceInfoTooltip.init(); + } - public static void onTick() { - MinecraftClient client = MinecraftClient.getInstance(); - if (client == null) return; + public static void onTick() { + MinecraftClient client = MinecraftClient.getInstance(); + if (client == null) return; - TICKS++; - if (TICKS % 4 == 0) - try { - if(Utils.isDungeons){ - DungeonBlaze.DungeonBlaze(); - } - }catch(Exception e) { - //System.out.println("Blazesolver: " + e); - } - if (TICKS % 20 == 0) { - if (client.world != null && !client.isInSingleplayer()) - Utils.sbChecker(); + TICKS++; + if (TICKS % 4 == 0) + try { + if (Utils.isDungeons) { + DungeonBlaze.DungeonBlaze(); + } + } catch (Exception e) { + //System.out.println("Blazesolver: " + e); + } + if (TICKS % 20 == 0) { + if (client.world != null && !client.isInSingleplayer()) + Utils.sbChecker(); - TICKS = 0; - } - } + TICKS = 0; + } + } } \ No newline at end of file -- cgit From 50de2604202bdb8ac3a69d0e5625d60ede57512b Mon Sep 17 00:00:00 2001 From: ExternalTime <84183548+ExternalTime@users.noreply.github.com> Date: Thu, 7 Oct 2021 19:54:33 +0200 Subject: Changed SkyblockerMod into a singleton --- .../xmrvizzy/skyblocker/SkyblockerInitializer.java | 15 +++++++++++ .../java/me/xmrvizzy/skyblocker/SkyblockerMod.java | 30 ++++++++++------------ .../skyblocker/mixin/MinecraftClientMixin.java | 2 +- src/main/resources/fabric.mod.json | 2 +- 4 files changed, 30 insertions(+), 19 deletions(-) create mode 100644 src/main/java/me/xmrvizzy/skyblocker/SkyblockerInitializer.java diff --git a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerInitializer.java b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerInitializer.java new file mode 100644 index 00000000..b3a50697 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerInitializer.java @@ -0,0 +1,15 @@ +package me.xmrvizzy.skyblocker; + +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import me.xmrvizzy.skyblocker.skyblock.HotbarSlotLock; +import me.xmrvizzy.skyblocker.skyblock.item.PriceInfoTooltip; +import net.fabricmc.api.ClientModInitializer; + +public class SkyblockerInitializer implements ClientModInitializer { + @Override + public void onInitializeClient() { + HotbarSlotLock.init(); + SkyblockerConfig.init(); + PriceInfoTooltip.init(); + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java index 2bef2f28..89873085 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java +++ b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java @@ -1,32 +1,28 @@ package me.xmrvizzy.skyblocker; -import me.xmrvizzy.skyblocker.config.SkyblockerConfig; -import me.xmrvizzy.skyblocker.skyblock.HotbarSlotLock; import me.xmrvizzy.skyblocker.skyblock.dungeon.DungeonBlaze; -import me.xmrvizzy.skyblocker.skyblock.item.PriceInfoTooltip; -import me.xmrvizzy.skyblocker.utils.RenderUtils; import me.xmrvizzy.skyblocker.utils.Utils; -import net.fabricmc.api.ClientModInitializer; import net.minecraft.client.MinecraftClient; -public class SkyblockerMod implements ClientModInitializer { +public class SkyblockerMod { public static final String NAMESPACE = "skyblocker"; - private static int TICKS = 0; + private static final SkyblockerMod instance = new SkyblockerMod(); - @Override - public void onInitializeClient() { - HotbarSlotLock.init(); - SkyblockerConfig.init(); - PriceInfoTooltip.init(); + private SkyblockerMod() { } + public static SkyblockerMod getInstance() { + return instance; + } + + private int ticks = 0; - public static void onTick() { + public void onTick() { MinecraftClient client = MinecraftClient.getInstance(); if (client == null) return; - TICKS++; - if (TICKS % 4 == 0) + ticks++; + if (ticks % 4 == 0) try { if (Utils.isDungeons) { DungeonBlaze.DungeonBlaze(); @@ -34,11 +30,11 @@ public class SkyblockerMod implements ClientModInitializer { } catch (Exception e) { //System.out.println("Blazesolver: " + e); } - if (TICKS % 20 == 0) { + if (ticks % 20 == 0) { if (client.world != null && !client.isInSingleplayer()) Utils.sbChecker(); - TICKS = 0; + ticks = 0; } } } \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/MinecraftClientMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/MinecraftClientMixin.java index 5ef5b0b4..e5f1b829 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/MinecraftClientMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/MinecraftClientMixin.java @@ -19,7 +19,7 @@ public class MinecraftClientMixin { @Inject(method = "tick", at = @At("HEAD")) public void tick(CallbackInfo ci) { - SkyblockerMod.onTick(); + SkyblockerMod.getInstance().onTick(); } @Inject(method = "handleInputEvents", at = @At("HEAD")) diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 9effd387..fbb1dd91 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -16,7 +16,7 @@ "environment": "client", "entrypoints": { "client": [ - "me.xmrvizzy.skyblocker.SkyblockerMod" + "me.xmrvizzy.skyblocker.SkyblockerInitializer" ], "modmenu": [ "me.xmrvizzy.skyblocker.config.modmenu.ModMenuEntry" -- cgit From 9572664f807e2f545a2d4b6d9f2b4dfa0a9791c3 Mon Sep 17 00:00:00 2001 From: ExternalTime <84183548+ExternalTime@users.noreply.github.com> Date: Thu, 7 Oct 2021 19:57:25 +0200 Subject: Added an interface for solvers for minigames inside chests --- .../java/me/xmrvizzy/skyblocker/SkyblockerMod.java | 2 + .../skyblocker/container/ColorHighlight.java | 4 ++ .../skyblocker/container/ContainerSolver.java | 35 ++++++++++ .../container/ContainerSolverManager.java | 78 ++++++++++++++++++++++ .../mixin/GenericContainerScreenHandlerMixin.java | 30 +++++++++ .../mixin/GenericContainerScreenMixin.java | 31 +++++++++ .../skyblocker/mixin/MinecraftClientMixin.java | 12 ++++ src/main/resources/skyblocker.mixins.json | 5 +- 8 files changed, 195 insertions(+), 2 deletions(-) create mode 100644 src/main/java/me/xmrvizzy/skyblocker/container/ColorHighlight.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/container/ContainerSolver.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/container/ContainerSolverManager.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/mixin/GenericContainerScreenHandlerMixin.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/mixin/GenericContainerScreenMixin.java diff --git a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java index 89873085..6c6a6d2a 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java +++ b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java @@ -1,5 +1,6 @@ package me.xmrvizzy.skyblocker; +import me.xmrvizzy.skyblocker.container.ContainerSolverManager; import me.xmrvizzy.skyblocker.skyblock.dungeon.DungeonBlaze; import me.xmrvizzy.skyblocker.utils.Utils; import net.minecraft.client.MinecraftClient; @@ -7,6 +8,7 @@ import net.minecraft.client.MinecraftClient; public class SkyblockerMod { public static final String NAMESPACE = "skyblocker"; private static final SkyblockerMod instance = new SkyblockerMod(); + public final ContainerSolverManager containerSolverManager = new ContainerSolverManager(); private SkyblockerMod() { } diff --git a/src/main/java/me/xmrvizzy/skyblocker/container/ColorHighlight.java b/src/main/java/me/xmrvizzy/skyblocker/container/ColorHighlight.java new file mode 100644 index 00000000..c4380eab --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/container/ColorHighlight.java @@ -0,0 +1,4 @@ +package me.xmrvizzy.skyblocker.container; + +public record ColorHighlight(int slot, int color) { +} \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/container/ContainerSolver.java b/src/main/java/me/xmrvizzy/skyblocker/container/ContainerSolver.java new file mode 100644 index 00000000..5c3e1e5e --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/container/ContainerSolver.java @@ -0,0 +1,35 @@ +package me.xmrvizzy.skyblocker.container; + +import net.minecraft.item.ItemStack; + +import java.util.List; +import java.util.Map; +import java.util.regex.Pattern; + +public abstract class ContainerSolver { + private final Pattern CONTAINER_NAME; + protected final static int GREEN_HIGHLIGHT = 128 << 24 | 64 << 16 | 196 << 8 | 64; + + public ContainerSolver(String containerName) { + CONTAINER_NAME = Pattern.compile(containerName); + } + + public abstract boolean isEnabled(); + + public Pattern getName() { + return CONTAINER_NAME; + } + + public abstract List getColors(String[] groups, Map slots); + + public void trimEdges(Map slots, int rows) { + for (int i = 0; i < rows; i++) { + slots.remove(9 * i); + slots.remove(9 * i + 8); + } + for (int i = 1; i < 8; i++) { + slots.remove(i); + slots.remove((rows - 1) * 9 + i); + } + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/container/ContainerSolverManager.java b/src/main/java/me/xmrvizzy/skyblocker/container/ContainerSolverManager.java new file mode 100644 index 00000000..836d38a6 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/container/ContainerSolverManager.java @@ -0,0 +1,78 @@ +package me.xmrvizzy.skyblocker.container; + +import com.mojang.blaze3d.systems.RenderSystem; +import net.minecraft.client.gui.DrawableHelper; +import net.minecraft.client.gui.screen.ingame.GenericContainerScreen; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.item.ItemStack; +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; + +public class ContainerSolverManager extends DrawableHelper { + private static final Pattern PLACEHOLDER_PATTERN = Pattern.compile(""); + private final ContainerSolver[] solvers; + private ContainerSolver currentSolver = null; + private String[] groups; + private List highlights; + + public ContainerSolverManager() { + solvers = new ContainerSolver[]{ + }; + } + + public void onSetScreen(@NotNull GenericContainerScreen screen) { + String screenName = screen.getTitle().getString(); + Matcher matcher = PLACEHOLDER_PATTERN.matcher(screenName); + for (ContainerSolver solver : solvers) { + if (solver.isEnabled()) { + matcher.usePattern(solver.getName()); + matcher.reset(); + if (matcher.matches()) { + currentSolver = solver; + groups = new String[matcher.groupCount()]; + for (int i = 0; i < groups.length; i++) + groups[i] = matcher.group(i + 1); + return; + } + } + } + currentSolver = null; + } + + public void clearScreen() { + currentSolver = null; + } + + public void markDirty() { + highlights = null; + } + + public void onDraw(MatrixStack matrices, List slots) { + if (currentSolver == null) + return; + if (highlights == null) + highlights = currentSolver.getColors(groups, slotMap(slots)); + RenderSystem.disableDepthTest(); + RenderSystem.colorMask(true, true, true, false); + for (ColorHighlight highlight : highlights) { + Slot slot = slots.get(highlight.slot()); + int color = highlight.color(); + fillGradient(matrices, slot.x, slot.y, slot.x + 16, slot.y + 16, color, color); + } + RenderSystem.colorMask(true, true, true, true); + RenderSystem.enableDepthTest(); + } + + private Map slotMap(List slots) { + Map slotMap = new TreeMap<>(); + for (int i = 0; i < slots.size(); i++) + slotMap.put(i, slots.get(i).getStack()); + return slotMap; + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/GenericContainerScreenHandlerMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/GenericContainerScreenHandlerMixin.java new file mode 100644 index 00000000..be8d454d --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/GenericContainerScreenHandlerMixin.java @@ -0,0 +1,30 @@ +package me.xmrvizzy.skyblocker.mixin; + +import me.xmrvizzy.skyblocker.SkyblockerMod; +import net.minecraft.item.ItemStack; +import net.minecraft.screen.GenericContainerScreenHandler; +import net.minecraft.screen.ScreenHandler; +import net.minecraft.screen.ScreenHandlerType; +import org.jetbrains.annotations.Nullable; +import org.spongepowered.asm.mixin.Mixin; + +import java.util.List; + +@Mixin(GenericContainerScreenHandler.class) +public abstract class GenericContainerScreenHandlerMixin extends ScreenHandler { + protected GenericContainerScreenHandlerMixin(@Nullable ScreenHandlerType type, int syncId) { + super(type, syncId); + } + + @Override + public void setStackInSlot(int slot, int revision, ItemStack stack) { + SkyblockerMod.getInstance().containerSolverManager.markDirty(); + super.setStackInSlot(slot, revision, stack); + } + + @Override + public void updateSlotStacks(int revision, List stacks, ItemStack cursorStack) { + SkyblockerMod.getInstance().containerSolverManager.markDirty(); + super.updateSlotStacks(revision, stacks, cursorStack); + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/GenericContainerScreenMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/GenericContainerScreenMixin.java new file mode 100644 index 00000000..3e6bf16a --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/GenericContainerScreenMixin.java @@ -0,0 +1,31 @@ +package me.xmrvizzy.skyblocker.mixin; + +import me.xmrvizzy.skyblocker.SkyblockerMod; +import me.xmrvizzy.skyblocker.utils.Utils; +import net.minecraft.client.gui.screen.ingame.GenericContainerScreen; +import net.minecraft.client.gui.screen.ingame.HandledScreen; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.screen.GenericContainerScreenHandler; +import net.minecraft.text.Text; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +@Mixin(GenericContainerScreen.class) +public abstract class GenericContainerScreenMixin extends HandledScreen { + @Shadow + @Final + private int rows; + + public GenericContainerScreenMixin(GenericContainerScreenHandler handler, PlayerInventory inventory, Text title) { + super(handler, inventory, title); + } + + @Override + protected void drawForeground(MatrixStack matrices, int mouseX, int mouseY) { + super.drawForeground(matrices, mouseX, mouseY); + if (Utils.isSkyblock) + SkyblockerMod.getInstance().containerSolverManager.onDraw(matrices, this.handler.slots.subList(0, rows * 9)); + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/MinecraftClientMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/MinecraftClientMixin.java index e5f1b829..21730e69 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/MinecraftClientMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/MinecraftClientMixin.java @@ -1,9 +1,12 @@ package me.xmrvizzy.skyblocker.mixin; import me.xmrvizzy.skyblocker.SkyblockerMod; +import me.xmrvizzy.skyblocker.container.ContainerSolverManager; import me.xmrvizzy.skyblocker.skyblock.HotbarSlotLock; import me.xmrvizzy.skyblocker.utils.Utils; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.screen.ingame.GenericContainerScreen; import net.minecraft.client.network.ClientPlayerEntity; import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; @@ -26,4 +29,13 @@ public class MinecraftClientMixin { public void handleInputEvents(CallbackInfo ci) { if (Utils.isSkyblock) HotbarSlotLock.handleInputEvents(player); } + + @Inject(method = "setScreen", at = @At("HEAD")) + public void onSetScreen(Screen screen, CallbackInfo ci) { + ContainerSolverManager manager = SkyblockerMod.getInstance().containerSolverManager; + if(Utils.isSkyblock && screen instanceof GenericContainerScreen) + manager.onSetScreen((GenericContainerScreen) screen); + else + manager.clearScreen(); + } } \ No newline at end of file diff --git a/src/main/resources/skyblocker.mixins.json b/src/main/resources/skyblocker.mixins.json index 74a7a3cb..acf0ef45 100644 --- a/src/main/resources/skyblocker.mixins.json +++ b/src/main/resources/skyblocker.mixins.json @@ -9,8 +9,9 @@ "InGameHudMixin", "ItemRendererMixin", "MinecraftClientMixin", - "AccessorWorldRenderer" - + "AccessorWorldRenderer", + "GenericContainerScreenMixin", + "GenericContainerScreenHandlerMixin" ], "injectors": { "defaultRequire": 1 -- cgit From 02ccd95142a835061d97e1c6b0d7d2e382e95828 Mon Sep 17 00:00:00 2001 From: ExternalTime <84183548+ExternalTime@users.noreply.github.com> Date: Sun, 10 Oct 2021 21:24:39 +0200 Subject: Added solver for Click In Order terminal --- .../skyblocker/config/SkyblockerConfig.java | 6 +++ .../container/ContainerSolverManager.java | 2 + .../skyblock/dungeon/terminal/OrderTerminal.java | 58 ++++++++++++++++++++++ .../resources/assets/skyblocker/lang/en_us.json | 2 + 4 files changed, 68 insertions(+) create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/OrderTerminal.java diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java index 5a085818..e379b131 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java @@ -54,6 +54,12 @@ public class SkyblockerConfig implements ConfigData { public boolean solveThreeWeirdos = true; public boolean blazesolver = true; public boolean solveTrivia = true; + @ConfigEntry.Gui.CollapsibleObject(startExpanded = true) + public Terminals terminals = new Terminals(); + } + + public static class Terminals { + public boolean solveOrder = true; } public static class DwarvenMines { diff --git a/src/main/java/me/xmrvizzy/skyblocker/container/ContainerSolverManager.java b/src/main/java/me/xmrvizzy/skyblocker/container/ContainerSolverManager.java index 836d38a6..52db8547 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/container/ContainerSolverManager.java +++ b/src/main/java/me/xmrvizzy/skyblocker/container/ContainerSolverManager.java @@ -1,6 +1,7 @@ package me.xmrvizzy.skyblocker.container; import com.mojang.blaze3d.systems.RenderSystem; +import me.xmrvizzy.skyblocker.skyblock.dungeon.terminal.OrderTerminal; import net.minecraft.client.gui.DrawableHelper; import net.minecraft.client.gui.screen.ingame.GenericContainerScreen; import net.minecraft.client.util.math.MatrixStack; @@ -23,6 +24,7 @@ public class ContainerSolverManager extends DrawableHelper { public ContainerSolverManager() { solvers = new ContainerSolver[]{ + new OrderTerminal(), }; } 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 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())) + currentNum++; + List 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 slots) { + trimEdges(slots, 4); + orderedSlots = new int[PANES_NUM]; + for(Map.Entry 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/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json index 65e5d5f0..d7c6b9b9 100644 --- a/src/main/resources/assets/skyblocker/lang/en_us.json +++ b/src/main/resources/assets/skyblocker/lang/en_us.json @@ -15,6 +15,8 @@ "text.autoconfig.skyblocker.option.locations.dungeons.solveThreeWeirdos": "Solve Three Weirdos Puzzle", "text.autoconfig.skyblocker.option.locations.dungeons.blazesolver": "Solve Blaze Puzzle", "text.autoconfig.skyblocker.option.locations.dungeons.solveTrivia": "Solve Trivia Puzzle", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals": "Terminal Solvers", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveOrder": "Solve Click In Order", "text.autoconfig.skyblocker.option.locations.dwarvenMines": "Dwarven Mines", "text.autoconfig.skyblocker.option.locations.dwarvenMines.enableDrillFuel": "Enable Drill Fuel", "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "Solve Fetchur", -- cgit From d00f8821ffa1caf3a92851b52e669fe9dcbafc75 Mon Sep 17 00:00:00 2001 From: ExternalTime <84183548+ExternalTime@users.noreply.github.com> Date: Sun, 10 Oct 2021 21:39:09 +0200 Subject: Added solver for Select Colored Items terminal --- .../skyblocker/config/SkyblockerConfig.java | 1 + .../container/ContainerSolverManager.java | 2 + .../skyblock/dungeon/terminal/ColorTerminal.java | 61 ++++++++++++++++++++++ .../resources/assets/skyblocker/lang/en_us.json | 1 + 4 files changed, 65 insertions(+) create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/ColorTerminal.java diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java index e379b131..1427c4e4 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java @@ -59,6 +59,7 @@ public class SkyblockerConfig implements ConfigData { } public static class Terminals { + public boolean solveColor = true; public boolean solveOrder = true; } diff --git a/src/main/java/me/xmrvizzy/skyblocker/container/ContainerSolverManager.java b/src/main/java/me/xmrvizzy/skyblocker/container/ContainerSolverManager.java index 52db8547..98f37b31 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/container/ContainerSolverManager.java +++ b/src/main/java/me/xmrvizzy/skyblocker/container/ContainerSolverManager.java @@ -1,6 +1,7 @@ package me.xmrvizzy.skyblocker.container; import com.mojang.blaze3d.systems.RenderSystem; +import me.xmrvizzy.skyblocker.skyblock.dungeon.terminal.ColorTerminal; import me.xmrvizzy.skyblocker.skyblock.dungeon.terminal.OrderTerminal; import net.minecraft.client.gui.DrawableHelper; import net.minecraft.client.gui.screen.ingame.GenericContainerScreen; @@ -24,6 +25,7 @@ public class ContainerSolverManager extends DrawableHelper { public ContainerSolverManager() { solvers = new ContainerSolver[]{ + new ColorTerminal(), new OrderTerminal(), }; } 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 colorFromName; + private DyeColor targetColor; + private static final Map 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 getColors(String[] groups, Map slots) { + trimEdges(slots, 6); + List highlights = new ArrayList<>(); + if(targetColor == null) + targetColor = colorFromName.get(groups[0]); + 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)); + } + 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/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json index d7c6b9b9..f9d15864 100644 --- a/src/main/resources/assets/skyblocker/lang/en_us.json +++ b/src/main/resources/assets/skyblocker/lang/en_us.json @@ -16,6 +16,7 @@ "text.autoconfig.skyblocker.option.locations.dungeons.blazesolver": "Solve Blaze Puzzle", "text.autoconfig.skyblocker.option.locations.dungeons.solveTrivia": "Solve Trivia Puzzle", "text.autoconfig.skyblocker.option.locations.dungeons.terminals": "Terminal Solvers", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveColor": "Solve Select Colored", "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveOrder": "Solve Click In Order", "text.autoconfig.skyblocker.option.locations.dwarvenMines": "Dwarven Mines", "text.autoconfig.skyblocker.option.locations.dwarvenMines.enableDrillFuel": "Enable Drill Fuel", -- cgit From d262e35832bec5ae33c19240204dd8490e4eef1e Mon Sep 17 00:00:00 2001 From: ExternalTime <84183548+ExternalTime@users.noreply.github.com> Date: Sun, 10 Oct 2021 21:41:58 +0200 Subject: Added solver for Starts With terminal --- .../skyblocker/config/SkyblockerConfig.java | 1 + .../container/ContainerSolverManager.java | 2 ++ .../dungeon/terminal/StartsWithTerminal.java | 34 ++++++++++++++++++++++ .../resources/assets/skyblocker/lang/en_us.json | 1 + 4 files changed, 38 insertions(+) create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/StartsWithTerminal.java diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java index 1427c4e4..dd5190e5 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java @@ -61,6 +61,7 @@ public class SkyblockerConfig implements ConfigData { public static class Terminals { public boolean solveColor = true; public boolean solveOrder = true; + public boolean solveStartsWith = true; } public static class DwarvenMines { diff --git a/src/main/java/me/xmrvizzy/skyblocker/container/ContainerSolverManager.java b/src/main/java/me/xmrvizzy/skyblocker/container/ContainerSolverManager.java index 98f37b31..7dd34669 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/container/ContainerSolverManager.java +++ b/src/main/java/me/xmrvizzy/skyblocker/container/ContainerSolverManager.java @@ -3,6 +3,7 @@ package me.xmrvizzy.skyblocker.container; import com.mojang.blaze3d.systems.RenderSystem; import me.xmrvizzy.skyblocker.skyblock.dungeon.terminal.ColorTerminal; import me.xmrvizzy.skyblocker.skyblock.dungeon.terminal.OrderTerminal; +import me.xmrvizzy.skyblocker.skyblock.dungeon.terminal.StartsWithTerminal; import net.minecraft.client.gui.DrawableHelper; import net.minecraft.client.gui.screen.ingame.GenericContainerScreen; import net.minecraft.client.util.math.MatrixStack; @@ -27,6 +28,7 @@ public class ContainerSolverManager extends DrawableHelper { solvers = new ContainerSolver[]{ new ColorTerminal(), new OrderTerminal(), + new StartsWithTerminal(), }; } 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 getColors(String[] groups, Map slots) { + trimEdges(slots, 6); + String prefix = groups[0]; + List highlights = new ArrayList<>(); + 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)); + } + return highlights; + } +} \ No newline at end of file diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json index f9d15864..2568fecb 100644 --- a/src/main/resources/assets/skyblocker/lang/en_us.json +++ b/src/main/resources/assets/skyblocker/lang/en_us.json @@ -18,6 +18,7 @@ "text.autoconfig.skyblocker.option.locations.dungeons.terminals": "Terminal Solvers", "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveColor": "Solve Select Colored", "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveOrder": "Solve Click In Order", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveStartsWith": "Solve Starts With", "text.autoconfig.skyblocker.option.locations.dwarvenMines": "Dwarven Mines", "text.autoconfig.skyblocker.option.locations.dwarvenMines.enableDrillFuel": "Enable Drill Fuel", "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "Solve Fetchur", -- cgit