diff --git a/Common/src/main/java/at/petrak/hexcasting/api/mod/HexConfig.java b/Common/src/main/java/at/petrak/hexcasting/api/mod/HexConfig.java index aa4859f5ed..c1b1a91579 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/mod/HexConfig.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/mod/HexConfig.java @@ -41,6 +41,8 @@ public interface CommonConfigAccess { public interface ClientConfigAccess { boolean ctrlTogglesOffStrokeOrder(); + boolean disableInworldScrolling(); + boolean invertSpellbookScrollDirection(); boolean invertAbacusScrollDirection(); @@ -52,6 +54,7 @@ public interface ClientConfigAccess { boolean alwaysShowListCommas(); boolean DEFAULT_CTRL_TOGGLES_OFF_STROKE_ORDER = false; + boolean DEFAULT_DISABLE_INWORLD_SCROLLING = false; boolean DEFAULT_INVERT_SPELLBOOK_SCROLL = false; boolean DEFAULT_INVERT_ABACUS_SCROLL = false; double DEFAULT_GRID_SNAP_THRESHOLD = 0.5; diff --git a/Common/src/main/java/at/petrak/hexcasting/client/Keybinds.java b/Common/src/main/java/at/petrak/hexcasting/client/Keybinds.java new file mode 100644 index 0000000000..a0b85e3e1a --- /dev/null +++ b/Common/src/main/java/at/petrak/hexcasting/client/Keybinds.java @@ -0,0 +1,34 @@ +package at.petrak.hexcasting.client; + +import com.mojang.blaze3d.platform.InputConstants; +import net.minecraft.client.KeyMapping; + +import java.util.List; + +public class Keybinds { + public static final String CATEGORY = "category.hexcasting.binds"; + + public static KeyMapping spellbookPrev = new KeyMapping( + "key.hexcasting.spellbook_prev", + InputConstants.UNKNOWN.getValue(), + CATEGORY + ); + + public static KeyMapping spellbookNext = new KeyMapping( + "key.hexcasting.spellbook_next", + InputConstants.UNKNOWN.getValue(), + CATEGORY + ); + + public static List ALL_BINDS = List.of(spellbookPrev, spellbookNext); + + public static void clientTickEnd() { + while (spellbookPrev.consumeClick()) { + ShiftScrollListener.onScroll(-1, false); + } + + while (spellbookNext.consumeClick()) { + ShiftScrollListener.onScroll(1, false); + } + } +} diff --git a/Common/src/main/java/at/petrak/hexcasting/client/ShiftScrollListener.java b/Common/src/main/java/at/petrak/hexcasting/client/ShiftScrollListener.java index c6073517cc..45fc1d7d78 100644 --- a/Common/src/main/java/at/petrak/hexcasting/client/ShiftScrollListener.java +++ b/Common/src/main/java/at/petrak/hexcasting/client/ShiftScrollListener.java @@ -17,6 +17,8 @@ public static boolean onScrollInGameplay(double delta) { return false; } + if (HexConfig.client().disableInworldScrolling()) return false; + return onScroll(delta, true); } diff --git a/Common/src/main/java/at/petrak/hexcasting/client/gui/GuiSpellcasting.kt b/Common/src/main/java/at/petrak/hexcasting/client/gui/GuiSpellcasting.kt index df0c5acb60..09c036ab3b 100644 --- a/Common/src/main/java/at/petrak/hexcasting/client/gui/GuiSpellcasting.kt +++ b/Common/src/main/java/at/petrak/hexcasting/client/gui/GuiSpellcasting.kt @@ -12,6 +12,7 @@ import at.petrak.hexcasting.api.mod.HexConfig import at.petrak.hexcasting.api.mod.HexTags import at.petrak.hexcasting.api.utils.asTranslatedComponent import at.petrak.hexcasting.client.ClientTickCounter +import at.petrak.hexcasting.client.Keybinds import at.petrak.hexcasting.client.ShiftScrollListener import at.petrak.hexcasting.client.ktxt.accumulatedScroll import at.petrak.hexcasting.client.render.* @@ -313,6 +314,20 @@ class GuiSpellcasting constructor( return true } + override fun keyPressed(key: Int, scancode: Int, modifiers: Int): Boolean { + if (super.keyPressed(key, scancode, modifiers)) return true + + if (Keybinds.spellbookPrev.matches(key, scancode)) { + ShiftScrollListener.onScroll(-1.0, false) + return true + } else if (Keybinds.spellbookNext.matches(key, scancode)) { + ShiftScrollListener.onScroll(1.0, false) + return true + } + + return false + } + override fun onClose() { if (drawState == PatternDrawState.BetweenPatterns) closeForReal() diff --git a/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 b/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 index 5a0087c10f..b729f60d26 100644 --- a/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 +++ b/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 @@ -265,6 +265,15 @@ "gui.hexcasting": { spellcasting: "Hex Grid", }, + + "category.hexcasting": { + "binds": "Hex Casting", + }, + + "key.hexcasting": { + "spellbook_prev": "Previous Spellbook Page", + "spellbook_next": "Next Spellbook Page", + }, "tag.hexcasting": { staves: "Hex Staves", @@ -335,13 +344,17 @@ "": "Ctrl Toggles Off Stroke Order", "@Tooltip": "Whether the ctrl key will instead turn *off* the color gradient on patterns", }, + disableInworldScrolling: { + "": "Disable In-World Scrolling", + "@Tooltip": "Disable scrolling input for spellbooks and abaci in the normal world, keeping keybinds and staff screen scrolling normal" + }, invertSpellbookScrollDirection: { "": "Invert Spellbook Scroll Direction", "@Tooltip": "Whether scrolling up (as opposed to down) will increase the page index of the spellbook, and vice versa", }, invertAbacusScrollDirection: { "": "Invert Abacus Scroll Direction", - "@Tooltip": "Whether scrolling up (as opposed to down) will increase the page index of the abacus, and vice versa", + "@Tooltip": "Whether scrolling up (as opposed to down) will increase the value of the abacus, and vice versa", }, gridSnapThreshold: { "": "Grid Snap Threshold", diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexClientInitializer.kt b/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexClientInitializer.kt index 2ad2ec1d4a..ff7ce329b5 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexClientInitializer.kt +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexClientInitializer.kt @@ -1,6 +1,7 @@ package at.petrak.hexcasting.fabric import at.petrak.hexcasting.client.ClientTickCounter +import at.petrak.hexcasting.client.Keybinds import at.petrak.hexcasting.client.RegisterClientStuff import at.petrak.hexcasting.client.ShiftScrollListener import at.petrak.hexcasting.client.gui.PatternTooltipComponent @@ -13,6 +14,7 @@ import at.petrak.hexcasting.fabric.network.FabricPacketHandler import at.petrak.hexcasting.interop.HexInterop import net.fabricmc.api.ClientModInitializer import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents +import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper import net.fabricmc.fabric.api.client.model.ModelLoadingRegistry import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents import net.fabricmc.fabric.api.client.particle.v1.ParticleFactoryRegistry @@ -37,6 +39,7 @@ object FabricHexClientInitializer : ClientModInitializer { WorldRenderEvents.START.register { ClientTickCounter.renderTickStart(it.tickDelta()) } ClientTickEvents.END_CLIENT_TICK.register { ClientTickCounter.clientTickEnd() + Keybinds.clientTickEnd() ShiftScrollListener.clientTickEnd() } TooltipComponentCallback.EVENT.register(PatternTooltipComponent::tryConvert) @@ -46,6 +49,8 @@ object FabricHexClientInitializer : ClientModInitializer { MouseScrollCallback.EVENT.register(ShiftScrollListener::onScrollInGameplay) + Keybinds.ALL_BINDS.forEach(KeyBindingHelper::registerKeyBinding) + RegisterClientStuff.init() HexModelLayers.init { loc, defn -> EntityModelLayerRegistry.registerModelLayer(loc, defn::get) } diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexConfig.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexConfig.java index 6ab5d09ff4..3503f5dc12 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexConfig.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexConfig.java @@ -15,7 +15,6 @@ import me.shedaniel.autoconfig.serializer.PartitioningSerializer; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; -import net.minecraft.util.RandomSource; import net.minecraft.util.Mth; import net.minecraft.world.level.Level; @@ -129,9 +128,11 @@ public static final class Client implements HexConfig.ClientConfigAccess, Config @ConfigEntry.Gui.Tooltip private boolean ctrlTogglesOffStrokeOrder = DEFAULT_CTRL_TOGGLES_OFF_STROKE_ORDER; @ConfigEntry.Gui.Tooltip + private boolean disableInworldScrolling = DEFAULT_DISABLE_INWORLD_SCROLLING; + @ConfigEntry.Gui.Tooltip private boolean invertSpellbookScrollDirection = DEFAULT_INVERT_SPELLBOOK_SCROLL; @ConfigEntry.Gui.Tooltip - private boolean invertAbacusScrollDirection = DEFAULT_INVERT_SPELLBOOK_SCROLL; + private boolean invertAbacusScrollDirection = DEFAULT_INVERT_ABACUS_SCROLL; @ConfigEntry.Gui.Tooltip private double gridSnapThreshold = DEFAULT_GRID_SNAP_THRESHOLD; @ConfigEntry.Gui.Tooltip @@ -149,6 +150,11 @@ public boolean ctrlTogglesOffStrokeOrder() { return ctrlTogglesOffStrokeOrder; } + @Override + public boolean disableInworldScrolling() { + return disableInworldScrolling; + } + @Override public boolean invertSpellbookScrollDirection() { return invertSpellbookScrollDirection; diff --git a/Forge/src/main/java/at/petrak/hexcasting/forge/ForgeHexClientInitializer.java b/Forge/src/main/java/at/petrak/hexcasting/forge/ForgeHexClientInitializer.java index 30e0e2a53e..10d3e82081 100644 --- a/Forge/src/main/java/at/petrak/hexcasting/forge/ForgeHexClientInitializer.java +++ b/Forge/src/main/java/at/petrak/hexcasting/forge/ForgeHexClientInitializer.java @@ -1,6 +1,7 @@ package at.petrak.hexcasting.forge; import at.petrak.hexcasting.client.ClientTickCounter; +import at.petrak.hexcasting.client.Keybinds; import at.petrak.hexcasting.client.RegisterClientStuff; import at.petrak.hexcasting.client.ShiftScrollListener; import at.petrak.hexcasting.client.gui.PatternTooltipComponent; @@ -28,6 +29,7 @@ import net.minecraftforge.event.TickEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import java.io.IOException; import java.util.function.Function; @@ -73,6 +75,7 @@ public static void clientInit(FMLClientSetupEvent evt) { evBus.addListener((TickEvent.ClientTickEvent e) -> { if (e.phase == TickEvent.Phase.END) { ClientTickCounter.clientTickEnd(); + Keybinds.clientTickEnd(); ShiftScrollListener.clientTickEnd(); } }); @@ -136,4 +139,9 @@ public static void addPlayerLayers(EntityRenderersEvent.AddLayers evt) { skin.addLayer(new AltioraLayer<>(skin, evt.getEntityModels())); }); } + + @SubscribeEvent + public static void registerBinds(RegisterKeyMappingsEvent event) { + Keybinds.ALL_BINDS.forEach(event::register); + } } diff --git a/Forge/src/main/java/at/petrak/hexcasting/forge/ForgeHexConfig.java b/Forge/src/main/java/at/petrak/hexcasting/forge/ForgeHexConfig.java index dd3eb257e3..99cb73243a 100644 --- a/Forge/src/main/java/at/petrak/hexcasting/forge/ForgeHexConfig.java +++ b/Forge/src/main/java/at/petrak/hexcasting/forge/ForgeHexConfig.java @@ -5,7 +5,6 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.Level; import net.minecraftforge.common.ForgeConfigSpec; -import net.minecraft.util.RandomSource; import java.util.List; @@ -80,6 +79,7 @@ public int artifactCooldown() { public static class Client implements HexConfig.ClientConfigAccess { private static ForgeConfigSpec.BooleanValue ctrlTogglesOffStrokeOrder; + private static ForgeConfigSpec.BooleanValue disableInworldScrolling; private static ForgeConfigSpec.BooleanValue invertSpellbookScrollDirection; private static ForgeConfigSpec.BooleanValue invertAbacusScrollDirection; private static ForgeConfigSpec.DoubleValue gridSnapThreshold; @@ -90,6 +90,9 @@ public Client(ForgeConfigSpec.Builder builder) { ctrlTogglesOffStrokeOrder = builder.comment( "Whether the ctrl key will instead turn *off* the color gradient on patterns") .define("ctrlTogglesOffStrokeOrder", DEFAULT_CTRL_TOGGLES_OFF_STROKE_ORDER); + disableInworldScrolling = builder.comment( + "Disable scrolling input for spellbooks and abaci in the normal world, keeping keybinds and staff screen scrolling normal") + .define("disableInworldScrolling", DEFAULT_DISABLE_INWORLD_SCROLLING); invertSpellbookScrollDirection = builder.comment( "Whether scrolling up (as opposed to down) will increase the page index of the spellbook, and " + "vice versa") @@ -109,6 +112,11 @@ public Client(ForgeConfigSpec.Builder builder) { .define("alwaysShowListCommas", DEFAULT_ALWAYS_SHOW_LIST_COMMAS); } + @Override + public boolean disableInworldScrolling() { + return disableInworldScrolling.get(); + } + @Override public boolean invertSpellbookScrollDirection() { return invertSpellbookScrollDirection.get();