aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java16
-rw-r--r--src/main/java/de/hysky/skyblocker/config/configs/GeneralConfig.java6
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SimpleSlotTextAdder.java8
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextManager.java35
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextState.java23
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/slottext/TextPosition.java3
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/container/SlotTextAdder.java7
-rw-r--r--src/main/resources/assets/skyblocker/lang/en_us.json3
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",