diff options
| author | Rime <81419447+Emirlol@users.noreply.github.com> | 2024-09-09 00:47:11 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-09-08 23:47:11 +0200 |
| commit | bd6ed47c7ee1740fecc56e4a778516a7f1eb4254 (patch) | |
| tree | 73a3353038aff0e0eb0fed76f070f6c1d33a9c84 /src/main/java | |
| parent | d241b8c91fc39d2719f32b820ca205a1fc4a84c0 (diff) | |
| download | Skyblocker-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')
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; - } } |
