diff options
8 files changed, 87 insertions, 14 deletions
diff --git a/src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java index ab674b18..abfb7c16 100644 --- a/src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java +++ b/src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java @@ -5,10 +5,12 @@ import de.hysky.skyblocker.config.ConfigUtils; import de.hysky.skyblocker.config.SkyblockerConfig; import de.hysky.skyblocker.config.configs.GeneralConfig; import de.hysky.skyblocker.skyblock.item.tooltip.adders.CraftPriceTooltip; +import de.hysky.skyblocker.skyblock.item.slottext.SlotTextState; import de.hysky.skyblocker.skyblock.shortcut.ShortcutsConfigScreen; import dev.isxander.yacl3.api.*; import dev.isxander.yacl3.api.controller.FloatSliderControllerBuilder; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.screen.option.KeybindsScreen; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -234,13 +236,18 @@ public class GeneralCategory { .group(OptionGroup.createBuilder() .name(Text.translatable("skyblocker.config.general.itemInfoDisplay")) .collapsed(true) - .option(Option.<Boolean>createBuilder() + .option(Option.<SlotTextState>createBuilder() .name(Text.translatable("skyblocker.config.general.itemInfoDisplay.slotText")) .description(OptionDescription.of(Text.translatable("skyblocker.config.general.itemInfoDisplay.slotText.@Tooltip"))) .binding(defaults.general.itemInfoDisplay.slotText, () -> config.general.itemInfoDisplay.slotText, newValue -> config.general.itemInfoDisplay.slotText = newValue) - .controller(ConfigUtils::createBooleanController) + .controller(ConfigUtils::createEnumCyclingListController) + .build()) + .option(ButtonOption.createBuilder() + .name(Text.translatable("skyblocker.config.general.itemInfoDisplay.slotText.shortcutToKeybindsSettings")) + .action((screen, opt) -> MinecraftClient.getInstance().setScreen(new KeybindsScreen(screen, MinecraftClient.getInstance().options))) + .text(Text.translatable("skyblocker.config.general.itemInfoDisplay.slotText.shortcutToKeybindsSettings.@Text")) .build()) .option(Option.<Boolean>createBuilder() .name(Text.translatable("skyblocker.config.general.itemInfoDisplay.attributeShardInfo")) @@ -301,6 +308,11 @@ public class GeneralCategory { newValue -> config.general.wikiLookup.enableWikiLookup = newValue) .controller(ConfigUtils::createBooleanController) .build()) + .option(ButtonOption.createBuilder() + .name(Text.translatable("skyblocker.config.shortcutToKeybindsSettings")) + .action((screen, opt) -> MinecraftClient.getInstance().setScreen(new KeybindsScreen(screen, MinecraftClient.getInstance().options))) + .text(Text.translatable("skyblocker.config.shortcutToKeybindsSettings.@Text")) + .build()) .option(Option.<Boolean>createBuilder() .name(Text.translatable("skyblocker.config.general.wikiLookup.officialWiki")) .description(OptionDescription.of(Text.translatable("skyblocker.config.general.wikiLookup.officialWiki.@Tooltip"))) diff --git a/src/main/java/de/hysky/skyblocker/config/configs/GeneralConfig.java b/src/main/java/de/hysky/skyblocker/config/configs/GeneralConfig.java index 691e6f79..7ea1616e 100644 --- a/src/main/java/de/hysky/skyblocker/config/configs/GeneralConfig.java +++ b/src/main/java/de/hysky/skyblocker/config/configs/GeneralConfig.java @@ -3,6 +3,7 @@ package de.hysky.skyblocker.config.configs; import de.hysky.skyblocker.SkyblockerMod; import de.hysky.skyblocker.skyblock.item.CustomArmorAnimatedDyes; import de.hysky.skyblocker.skyblock.item.CustomArmorTrims; +import de.hysky.skyblocker.skyblock.item.slottext.SlotTextState; import dev.isxander.yacl3.config.v2.api.SerialEntry; import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; @@ -164,7 +165,10 @@ public class GeneralConfig { public static class ItemInfoDisplay { @SerialEntry - public boolean slotText = true; + public SlotTextState slotText = SlotTextState.ENABLED; + + @SerialEntry + public boolean slotTextToggled = true; @SerialEntry public boolean attributeShardInfo = true; diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SimpleSlotTextAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SimpleSlotTextAdder.java index 1eb3e5c2..205e48d8 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SimpleSlotTextAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SimpleSlotTextAdder.java @@ -1,8 +1,7 @@ package de.hysky.skyblocker.skyblock.item.slottext; -import de.hysky.skyblocker.config.SkyblockerConfigManager; -import de.hysky.skyblocker.utils.container.SlotTextAdder; import de.hysky.skyblocker.utils.container.RegexContainerMatcher; +import de.hysky.skyblocker.utils.container.SlotTextAdder; import org.intellij.lang.annotations.Language; import org.jetbrains.annotations.NotNull; @@ -37,9 +36,4 @@ public abstract class SimpleSlotTextAdder extends RegexContainerMatcher implemen protected SimpleSlotTextAdder() { super(); } - - @Override - public boolean isEnabled() { - return SkyblockerConfigManager.get().general.itemInfoDisplay.slotText; - } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextManager.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextManager.java index fa7036c2..7ab7570c 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextManager.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextManager.java @@ -1,17 +1,22 @@ package de.hysky.skyblocker.skyblock.item.slottext; +import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.skyblock.bazaar.BazaarHelper; import de.hysky.skyblocker.skyblock.item.slottext.adders.*; import de.hysky.skyblocker.utils.Utils; import de.hysky.skyblocker.utils.container.SlotTextAdder; +import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper; import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents; +import net.fabricmc.fabric.api.client.screen.v1.ScreenKeyboardEvents; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.ingame.HandledScreen; +import net.minecraft.client.option.KeyBinding; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.item.ItemStack; import net.minecraft.screen.slot.Slot; import org.jetbrains.annotations.NotNull; +import org.lwjgl.glfw.GLFW; import java.util.ArrayList; import java.util.List; @@ -39,6 +44,8 @@ public class SlotTextManager { new StatsTuningAdder() }; private static final ArrayList<SlotTextAdder> currentScreenAdders = new ArrayList<>(); + private static final KeyBinding keyBinding = KeyBindingHelper.registerKeyBinding(new KeyBinding("key.skyblocker.slottext", GLFW.GLFW_KEY_LEFT_ALT, "key.categories.skyblocker")); + private static boolean keyHeld = false; private SlotTextManager() { } @@ -49,13 +56,23 @@ public class SlotTextManager { onScreenChange(handledScreen); ScreenEvents.remove(screen).register(ignored -> currentScreenAdders.clear()); } + ScreenKeyboardEvents.afterKeyPress(screen).register((screen1, key, scancode, modifiers) -> { + if (keyBinding.matchesKey(key, scancode)) { + SkyblockerConfigManager.get().general.itemInfoDisplay.slotTextToggled = !SkyblockerConfigManager.get().general.itemInfoDisplay.slotTextToggled; + keyHeld = true; + } + }); + ScreenKeyboardEvents.afterKeyRelease(screen).register((screen1, key, scancode, modifiers) -> { + if (keyBinding.matchesKey(key, scancode)) { + keyHeld = false; + } + }); }); } private static void onScreenChange(HandledScreen<?> screen) { for (SlotTextAdder adder : adders) { - if (!adder.isEnabled()) continue; - if (adder.test(screen)) { + if (adder.isEnabled() && adder.test(screen)) { currentScreenAdders.add(adder); } } @@ -70,7 +87,7 @@ public class SlotTextManager { */ @NotNull public static List<SlotText> getText(@NotNull ItemStack itemStack, int slotId) { - if (currentScreenAdders.isEmpty()) return List.of(); + if (currentScreenAdders.isEmpty() || !isEnabled()) return List.of(); for (SlotTextAdder adder : currentScreenAdders) { List<SlotText> text = adder.getText(itemStack, slotId); if (!text.isEmpty()) return text; @@ -83,7 +100,7 @@ public class SlotTextManager { } public static void renderSlotText(DrawContext context, TextRenderer textRenderer, ItemStack itemStack, int slotId, int x, int y) { - List<SlotText> textList = SlotTextManager.getText(itemStack, slotId); + List<SlotText> textList = getText(itemStack, slotId); if (textList.isEmpty()) return; MatrixStack matrices = context.getMatrices(); @@ -109,4 +126,14 @@ public class SlotTextManager { matrices.pop(); } } + + public static boolean isEnabled() { + return switch (SkyblockerConfigManager.get().general.itemInfoDisplay.slotText) { + case ENABLED -> true; + case DISABLED -> false; + case PRESS_TO_TOGGLE -> SkyblockerConfigManager.get().general.itemInfoDisplay.slotTextToggled; + case HOLD_TO_HIDE -> !keyHeld; + case HOLD_TO_SHOW -> keyHeld; + }; + } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextState.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextState.java new file mode 100644 index 00000000..38280166 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextState.java @@ -0,0 +1,23 @@ +package de.hysky.skyblocker.skyblock.item.slottext; + +/** + * Used in {@link SlotTextManager#isEnabled()} to determine whether the slot text should be shown or not. + */ +public enum SlotTextState { + ENABLED, + HOLD_TO_SHOW, + PRESS_TO_TOGGLE, + HOLD_TO_HIDE, + DISABLED; + + @Override + public String toString() { + return switch (this) { + case ENABLED -> "Enabled"; + case HOLD_TO_SHOW -> "Hold to Show"; + case PRESS_TO_TOGGLE -> "Press to Toggle"; + case HOLD_TO_HIDE -> "Hold to Hide"; + case DISABLED -> "Disabled"; + }; + } +} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/TextPosition.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/TextPosition.java index 052b228d..59f5e7e8 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/TextPosition.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/TextPosition.java @@ -1,5 +1,8 @@ package de.hysky.skyblocker.skyblock.item.slottext; +/** + * Used in {@link SlotText#position} to determine where the slot text should be rendered. + */ public enum TextPosition { TOP_LEFT, TOP_RIGHT, diff --git a/src/main/java/de/hysky/skyblocker/utils/container/SlotTextAdder.java b/src/main/java/de/hysky/skyblocker/utils/container/SlotTextAdder.java index c0e4bc1c..2ee41820 100644 --- a/src/main/java/de/hysky/skyblocker/utils/container/SlotTextAdder.java +++ b/src/main/java/de/hysky/skyblocker/utils/container/SlotTextAdder.java @@ -1,6 +1,8 @@ package de.hysky.skyblocker.utils.container; +import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.skyblock.item.slottext.SlotText; +import de.hysky.skyblocker.skyblock.item.slottext.SlotTextState; import net.minecraft.item.ItemStack; import org.jetbrains.annotations.NotNull; @@ -18,4 +20,9 @@ public interface SlotTextAdder extends ContainerMatcher { */ @NotNull List<SlotText> getText(@NotNull ItemStack itemStack, int slotId); + + @Override + default boolean isEnabled() { + return SkyblockerConfigManager.get().general.itemInfoDisplay.slotText != SlotTextState.DISABLED; + } } diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json index 875b45dd..4ee3ece0 100644 --- a/src/main/resources/assets/skyblocker/lang/en_us.json +++ b/src/main/resources/assets/skyblocker/lang/en_us.json @@ -10,6 +10,7 @@ "key.skyblocker.toggleA": "Toggle tab HUD to screen A", "key.wikiLookup": "Wiki Lookup", "key.itemProtection": "Protect Item", + "key.skyblocker.slottext": "Slot Text", "text.skyblocker.open": "Open", "text.skyblocker.quit_config": "Changes Not Saved", @@ -224,6 +225,8 @@ "skyblocker.config.general.itemInfoDisplay.itemRarityBackgroundsOpacity": "Item Rarity Backgrounds Opacity", "skyblocker.config.general.itemInfoDisplay.slotText": "Slot Text", "skyblocker.config.general.itemInfoDisplay.slotText.@Tooltip": "Displays information such as enchantment book level, minion level, pet level, potion level, prehistoric egg blocks walked, rancher's boots speed cap, and skill level", + "skyblocker.config.general.itemInfoDisplay.slotText.shortcutToKeybindsSettings": "Slot Text Keybind", + "skyblocker.config.general.itemInfoDisplay.slotText.shortcutToKeybindsSettings.@Text": "Click... (opens up keybinds settings)", "skyblocker.config.general.itemList": "Item List", "skyblocker.config.general.itemList.enableItemList": "Enable Item List", |