aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorRime <81419447+Emirlol@users.noreply.github.com>2024-09-09 00:47:11 +0300
committerGitHub <noreply@github.com>2024-09-08 23:47:11 +0200
commitbd6ed47c7ee1740fecc56e4a778516a7f1eb4254 (patch)
tree73a3353038aff0e0eb0fed76f070f6c1d33a9c84 /src/main/java
parentd241b8c91fc39d2719f32b820ca205a1fc4a84c0 (diff)
downloadSkyblocker-bd6ed47c7ee1740fecc56e4a778516a7f1eb4254.tar.gz
Skyblocker-bd6ed47c7ee1740fecc56e4a778516a7f1eb4254.tar.bz2
Skyblocker-bd6ed47c7ee1740fecc56e4a778516a7f1eb4254.zip
Add wardrobe helper based on hotbar keybinds (#943)
* Wardrobe helper initial commit * Remove unnecessary getter from RegexContainerMatcher * Clarify config description * Allow mouse keys to work with wardrobe
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/de/hysky/skyblocker/config/categories/HelperCategory.java9
-rw-r--r--src/main/java/de/hysky/skyblocker/config/configs/HelperConfig.java3
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/WardrobeKeybinds.java65
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/container/RegexContainerMatcher.java6
4 files changed, 78 insertions, 5 deletions
diff --git a/src/main/java/de/hysky/skyblocker/config/categories/HelperCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/HelperCategory.java
index ec34dea6..eee4b525 100644
--- a/src/main/java/de/hysky/skyblocker/config/categories/HelperCategory.java
+++ b/src/main/java/de/hysky/skyblocker/config/categories/HelperCategory.java
@@ -26,6 +26,15 @@ public class HelperCategory {
.controller(ConfigUtils::createBooleanController)
.build())
+ .option(Option.<Boolean>createBuilder()
+ .name(Text.translatable("skyblocker.config.helpers.enableWardrobeHelper"))
+ .description(OptionDescription.of(Text.translatable("skyblocker.config.helpers.enableWardrobeHelper.@Tooltip")))
+ .binding(defaults.helpers.enableWardrobeHelper,
+ () -> config.helpers.enableWardrobeHelper,
+ newValue -> config.helpers.enableWardrobeHelper = newValue)
+ .controller(ConfigUtils::createBooleanController)
+ .build())
+
//Mythological Ritual
.group(OptionGroup.createBuilder()
.name(Text.translatable("skyblocker.config.helpers.mythologicalRitual"))
diff --git a/src/main/java/de/hysky/skyblocker/config/configs/HelperConfig.java b/src/main/java/de/hysky/skyblocker/config/configs/HelperConfig.java
index ad5a14ae..b4b15009 100644
--- a/src/main/java/de/hysky/skyblocker/config/configs/HelperConfig.java
+++ b/src/main/java/de/hysky/skyblocker/config/configs/HelperConfig.java
@@ -9,6 +9,9 @@ public class HelperConfig {
public boolean enableNewYearCakesHelper = true;
@SerialEntry
+ public boolean enableWardrobeHelper = true;
+
+ @SerialEntry
public MythologicalRitual mythologicalRitual = new MythologicalRitual();
@SerialEntry
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/WardrobeKeybinds.java b/src/main/java/de/hysky/skyblocker/skyblock/WardrobeKeybinds.java
new file mode 100644
index 00000000..795acf1c
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/skyblock/WardrobeKeybinds.java
@@ -0,0 +1,65 @@
+package de.hysky.skyblocker.skyblock;
+
+import de.hysky.skyblocker.annotations.Init;
+import de.hysky.skyblocker.config.SkyblockerConfigManager;
+import de.hysky.skyblocker.utils.container.RegexContainerMatcher;
+import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents;
+import net.fabricmc.fabric.api.client.screen.v1.ScreenKeyboardEvents;
+import net.fabricmc.fabric.api.client.screen.v1.ScreenMouseEvents;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.gui.screen.ingame.HandledScreen;
+import net.minecraft.client.option.KeyBinding;
+import net.minecraft.item.ItemStack;
+import net.minecraft.item.Items;
+import net.minecraft.screen.slot.SlotActionType;
+import org.lwjgl.glfw.GLFW;
+
+import java.util.function.Predicate;
+
+@SuppressWarnings("unused")
+public class WardrobeKeybinds extends RegexContainerMatcher {
+ private static final WardrobeKeybinds INSTANCE = new WardrobeKeybinds();
+
+ public WardrobeKeybinds() {
+ super("Wardrobe \\([12]/2\\)");
+ }
+
+ @Init
+ public static void init() {
+ ScreenEvents.AFTER_INIT.register((client, screen, scaledWidth, scaledHeight) -> {
+ if (!(screen instanceof HandledScreen<?> handledScreen) || !INSTANCE.test(handledScreen) || !INSTANCE.isEnabled() || client.interactionManager == null) return;
+ ScreenKeyboardEvents.allowKeyPress(handledScreen).register((ignored, keyCode, scanCode, modifiers) ->
+ allowInput(client, handledScreen, keybinding -> keybinding.matchesKey(keyCode, scanCode))
+ );
+ ScreenMouseEvents.allowMouseClick(handledScreen).register((ignored, mouseX, mouseY, button) ->
+ allowInput(client, handledScreen, keybinding -> keybinding.matchesMouse(button))
+ );
+ });
+ }
+
+ private static boolean allowInput(MinecraftClient client, HandledScreen<?> handledScreen, Predicate<KeyBinding> predicate) {
+ boolean found = false;
+ int i;
+ for (i = 0; i < client.options.hotbarKeys.length; i++) {
+ if (predicate.test(client.options.hotbarKeys[i])) {
+ found = true;
+ break;
+ }
+ }
+ if (!found) return true;
+ // The items start from the 5th row in the inventory. The i number we have is the column in the first row, so we have to offset it by 4 rows to get the 5th row, which is where the items start.
+ i += 9 * 4;
+ ItemStack itemStack = handledScreen.getScreenHandler().getSlot(i).getStack();
+ // Check if the item in the slot is a swap/unequip item before going further.
+ // This prevents usage when the inventory hasn't loaded fully or when the slot pressed is locked (which would be meaningless to click)
+ if (!itemStack.isOf(Items.PINK_DYE) && !itemStack.isOf(Items.LIME_DYE)) return true;
+ assert client.interactionManager != null;
+ client.interactionManager.clickSlot(handledScreen.getScreenHandler().syncId, i, GLFW.GLFW_MOUSE_BUTTON_1, SlotActionType.PICKUP, client.player);
+ return false;
+ }
+
+ @Override
+ public boolean isEnabled() {
+ return SkyblockerConfigManager.get().helpers.enableWardrobeHelper;
+ }
+}
diff --git a/src/main/java/de/hysky/skyblocker/utils/container/RegexContainerMatcher.java b/src/main/java/de/hysky/skyblocker/utils/container/RegexContainerMatcher.java
index 4f9d49ae..0cd3c867 100644
--- a/src/main/java/de/hysky/skyblocker/utils/container/RegexContainerMatcher.java
+++ b/src/main/java/de/hysky/skyblocker/utils/container/RegexContainerMatcher.java
@@ -23,7 +23,7 @@ public abstract class RegexContainerMatcher implements ContainerMatcher {
public final Pattern titlePattern;
@Nullable
- public String[] groups = null;
+ protected String[] groups = null;
@Override
public boolean test(@NotNull Screen screen) {
@@ -61,8 +61,4 @@ public abstract class RegexContainerMatcher implements ContainerMatcher {
public @Nullable Pattern getTitlePattern() {
return titlePattern;
}
-
- public final @Nullable String[] getGroups() {
- return groups;
- }
}