From d5009fa4bf3efa60e27cb7749928c7f9c69ea78c Mon Sep 17 00:00:00 2001 From: deirn Date: Sun, 19 May 2024 00:24:33 +0700 Subject: [PATCH] Revert "use home-grown key binding system" This reverts commit b3e3ad53ab5bb011bdd3f4ce2b258b3d1d7ee1db. --- .../waila/fabric/FabricClientService.java | 16 ++++ .../waila/fabric/FabricWailaClient.java | 2 + .../mcp.mobius.waila.service.IClientService | 1 + .../waila/forge/ForgeClientService.java | 17 ++++ .../mobius/waila/forge/ForgeWailaClient.java | 5 ++ .../mcp.mobius.waila.service.IClientService | 1 + .../mobius/waila/neo/NeoClientService.java | 17 ++++ .../mcp/mobius/waila/neo/NeoWailaClient.java | 6 ++ .../mcp.mobius.waila.service.IClientService | 1 + .../waila/quilt/QuiltClientService.java | 16 ++++ .../mobius/waila/quilt/QuiltWailaClient.java | 2 + .../mcp.mobius.waila.service.IClientService | 1 + src/main/java/mcp/mobius/waila/Waila.java | 2 - .../java/mcp/mobius/waila/WailaClient.java | 63 +++++++++----- .../mcp/mobius/waila/config/KeyBinding.java | 83 ------------------- .../mcp/mobius/waila/config/WailaConfig.java | 55 ------------ .../mobius/waila/gui/hud/TooltipHandler.java | 4 +- .../waila/gui/screen/WailaConfigScreen.java | 51 +++++------- .../mobius/waila/service/IClientService.java | 12 +++ 19 files changed, 159 insertions(+), 196 deletions(-) create mode 100644 platform/fabric/src/main/java/mcp/mobius/waila/fabric/FabricClientService.java create mode 100644 platform/fabric/src/main/resources/META-INF/services/mcp.mobius.waila.service.IClientService create mode 100644 platform/forge/src/main/java/mcp/mobius/waila/forge/ForgeClientService.java create mode 100644 platform/forge/src/main/resources/META-INF/services/mcp.mobius.waila.service.IClientService create mode 100644 platform/neo/src/main/java/mcp/mobius/waila/neo/NeoClientService.java create mode 100644 platform/neo/src/main/resources/META-INF/services/mcp.mobius.waila.service.IClientService create mode 100644 platform/quilt/src/main/java/mcp/mobius/waila/quilt/QuiltClientService.java create mode 100644 platform/quilt/src/main/resources/META-INF/services/mcp.mobius.waila.service.IClientService delete mode 100644 src/main/java/mcp/mobius/waila/config/KeyBinding.java create mode 100644 src/main/java/mcp/mobius/waila/service/IClientService.java diff --git a/platform/fabric/src/main/java/mcp/mobius/waila/fabric/FabricClientService.java b/platform/fabric/src/main/java/mcp/mobius/waila/fabric/FabricClientService.java new file mode 100644 index 000000000..3e964916a --- /dev/null +++ b/platform/fabric/src/main/java/mcp/mobius/waila/fabric/FabricClientService.java @@ -0,0 +1,16 @@ +package mcp.mobius.waila.fabric; + +import com.mojang.blaze3d.platform.InputConstants; +import mcp.mobius.waila.api.WailaConstants; +import mcp.mobius.waila.service.IClientService; +import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper; +import net.minecraft.client.KeyMapping; + +public class FabricClientService implements IClientService { + + @Override + public KeyMapping createKeyBind(String id, int key) { + return KeyBindingHelper.registerKeyBinding(new KeyMapping(id, InputConstants.Type.KEYSYM, key, WailaConstants.MOD_NAME)); + } + +} diff --git a/platform/fabric/src/main/java/mcp/mobius/waila/fabric/FabricWailaClient.java b/platform/fabric/src/main/java/mcp/mobius/waila/fabric/FabricWailaClient.java index 43ece819e..5d780e68d 100644 --- a/platform/fabric/src/main/java/mcp/mobius/waila/fabric/FabricWailaClient.java +++ b/platform/fabric/src/main/java/mcp/mobius/waila/fabric/FabricWailaClient.java @@ -17,6 +17,8 @@ public class FabricWailaClient extends WailaClient implements ClientModInitializ @Override public void onInitializeClient() { + registerKeyBinds(); + Packets.initClient(); HudRenderCallback.EVENT.register(TooltipRenderer::render); diff --git a/platform/fabric/src/main/resources/META-INF/services/mcp.mobius.waila.service.IClientService b/platform/fabric/src/main/resources/META-INF/services/mcp.mobius.waila.service.IClientService new file mode 100644 index 000000000..762de7f87 --- /dev/null +++ b/platform/fabric/src/main/resources/META-INF/services/mcp.mobius.waila.service.IClientService @@ -0,0 +1 @@ +mcp.mobius.waila.fabric.FabricClientService diff --git a/platform/forge/src/main/java/mcp/mobius/waila/forge/ForgeClientService.java b/platform/forge/src/main/java/mcp/mobius/waila/forge/ForgeClientService.java new file mode 100644 index 000000000..dac9544d3 --- /dev/null +++ b/platform/forge/src/main/java/mcp/mobius/waila/forge/ForgeClientService.java @@ -0,0 +1,17 @@ +package mcp.mobius.waila.forge; + +import com.mojang.blaze3d.platform.InputConstants; +import mcp.mobius.waila.api.WailaConstants; +import mcp.mobius.waila.service.IClientService; +import net.minecraft.client.KeyMapping; +import net.minecraftforge.client.settings.KeyConflictContext; +import net.minecraftforge.client.settings.KeyModifier; + +public class ForgeClientService implements IClientService { + + @Override + public KeyMapping createKeyBind(String id, int key) { + return new KeyMapping(id, KeyConflictContext.IN_GAME, KeyModifier.NONE, InputConstants.Type.KEYSYM, key, WailaConstants.MOD_NAME); + } + +} diff --git a/platform/forge/src/main/java/mcp/mobius/waila/forge/ForgeWailaClient.java b/platform/forge/src/main/java/mcp/mobius/waila/forge/ForgeWailaClient.java index de366e92b..1807542a4 100644 --- a/platform/forge/src/main/java/mcp/mobius/waila/forge/ForgeWailaClient.java +++ b/platform/forge/src/main/java/mcp/mobius/waila/forge/ForgeWailaClient.java @@ -31,6 +31,11 @@ static void clientSetup(FMLClientSetupEvent event) { registerConfigScreen(); } + @SubscribeEvent + static void registerKeyMappings(RegisterKeyMappingsEvent event) { + registerKeyBinds().forEach(event::register); + } + @SubscribeEvent static void addReloadListener(RegisterClientReloadListenersEvent event) { event.registerReloadListener(new BuiltinThemeLoader()); diff --git a/platform/forge/src/main/resources/META-INF/services/mcp.mobius.waila.service.IClientService b/platform/forge/src/main/resources/META-INF/services/mcp.mobius.waila.service.IClientService new file mode 100644 index 000000000..0e4cf498c --- /dev/null +++ b/platform/forge/src/main/resources/META-INF/services/mcp.mobius.waila.service.IClientService @@ -0,0 +1 @@ +mcp.mobius.waila.forge.ForgeClientService diff --git a/platform/neo/src/main/java/mcp/mobius/waila/neo/NeoClientService.java b/platform/neo/src/main/java/mcp/mobius/waila/neo/NeoClientService.java new file mode 100644 index 000000000..3e343b263 --- /dev/null +++ b/platform/neo/src/main/java/mcp/mobius/waila/neo/NeoClientService.java @@ -0,0 +1,17 @@ +package mcp.mobius.waila.neo; + +import com.mojang.blaze3d.platform.InputConstants; +import mcp.mobius.waila.api.WailaConstants; +import mcp.mobius.waila.service.IClientService; +import net.minecraft.client.KeyMapping; +import net.neoforged.neoforge.client.settings.KeyConflictContext; +import net.neoforged.neoforge.client.settings.KeyModifier; + +public class NeoClientService implements IClientService { + + @Override + public KeyMapping createKeyBind(String id, int key) { + return new KeyMapping(id, KeyConflictContext.IN_GAME, KeyModifier.NONE, InputConstants.Type.KEYSYM, key, WailaConstants.MOD_NAME); + } + +} diff --git a/platform/neo/src/main/java/mcp/mobius/waila/neo/NeoWailaClient.java b/platform/neo/src/main/java/mcp/mobius/waila/neo/NeoWailaClient.java index 80064c1e0..f2a48b118 100644 --- a/platform/neo/src/main/java/mcp/mobius/waila/neo/NeoWailaClient.java +++ b/platform/neo/src/main/java/mcp/mobius/waila/neo/NeoWailaClient.java @@ -17,6 +17,7 @@ import net.neoforged.neoforge.client.event.ClientTickEvent; import net.neoforged.neoforge.client.event.RegisterClientCommandsEvent; import net.neoforged.neoforge.client.event.RegisterClientReloadListenersEvent; +import net.neoforged.neoforge.client.event.RegisterKeyMappingsEvent; import net.neoforged.neoforge.client.event.RenderGuiEvent; import net.neoforged.neoforge.client.gui.IConfigScreenFactory; import net.neoforged.neoforge.event.entity.player.ItemTooltipEvent; @@ -30,6 +31,11 @@ static void clientSetup(FMLClientSetupEvent event) { registerConfigScreen(); } + @SubscribeEvent + static void registerKeyMappings(RegisterKeyMappingsEvent event) { + registerKeyBinds().forEach(event::register); + } + @SubscribeEvent static void addReloadListener(RegisterClientReloadListenersEvent event) { event.registerReloadListener(new BuiltinThemeLoader()); diff --git a/platform/neo/src/main/resources/META-INF/services/mcp.mobius.waila.service.IClientService b/platform/neo/src/main/resources/META-INF/services/mcp.mobius.waila.service.IClientService new file mode 100644 index 000000000..26fc5ccd7 --- /dev/null +++ b/platform/neo/src/main/resources/META-INF/services/mcp.mobius.waila.service.IClientService @@ -0,0 +1 @@ +mcp.mobius.waila.neo.NeoClientService diff --git a/platform/quilt/src/main/java/mcp/mobius/waila/quilt/QuiltClientService.java b/platform/quilt/src/main/java/mcp/mobius/waila/quilt/QuiltClientService.java new file mode 100644 index 000000000..28b9e3619 --- /dev/null +++ b/platform/quilt/src/main/java/mcp/mobius/waila/quilt/QuiltClientService.java @@ -0,0 +1,16 @@ +package mcp.mobius.waila.quilt; + +import com.mojang.blaze3d.platform.InputConstants; +import mcp.mobius.waila.api.WailaConstants; +import mcp.mobius.waila.service.IClientService; +import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper; +import net.minecraft.client.KeyMapping; + +public class QuiltClientService implements IClientService { + + @Override + public KeyMapping createKeyBind(String id, int key) { + return KeyBindingHelper.registerKeyBinding(new KeyMapping(id, InputConstants.Type.KEYSYM, key, WailaConstants.MOD_NAME)); + } + +} diff --git a/platform/quilt/src/main/java/mcp/mobius/waila/quilt/QuiltWailaClient.java b/platform/quilt/src/main/java/mcp/mobius/waila/quilt/QuiltWailaClient.java index a51ec6e4b..f8473789f 100644 --- a/platform/quilt/src/main/java/mcp/mobius/waila/quilt/QuiltWailaClient.java +++ b/platform/quilt/src/main/java/mcp/mobius/waila/quilt/QuiltWailaClient.java @@ -18,6 +18,8 @@ public class QuiltWailaClient extends WailaClient implements ClientModInitialize @Override public void onInitializeClient(ModContainer mod) { + registerKeyBinds(); + Packets.initClient(); HudRenderCallback.EVENT.register(TooltipRenderer::render); diff --git a/platform/quilt/src/main/resources/META-INF/services/mcp.mobius.waila.service.IClientService b/platform/quilt/src/main/resources/META-INF/services/mcp.mobius.waila.service.IClientService new file mode 100644 index 000000000..1dcbe792d --- /dev/null +++ b/platform/quilt/src/main/resources/META-INF/services/mcp.mobius.waila.service.IClientService @@ -0,0 +1 @@ +mcp.mobius.waila.quilt.QuiltClientService diff --git a/src/main/java/mcp/mobius/waila/Waila.java b/src/main/java/mcp/mobius/waila/Waila.java index db997a4cc..f06ba456b 100644 --- a/src/main/java/mcp/mobius/waila/Waila.java +++ b/src/main/java/mcp/mobius/waila/Waila.java @@ -8,7 +8,6 @@ import mcp.mobius.waila.api.WailaConstants; import mcp.mobius.waila.api.__internal__.IHarvestService; import mcp.mobius.waila.config.BlacklistConfig; -import mcp.mobius.waila.config.KeyBinding; import mcp.mobius.waila.config.WailaConfig; import mcp.mobius.waila.gui.hud.theme.ThemeDefinition; import mcp.mobius.waila.registry.RegistryFilter; @@ -41,7 +40,6 @@ public abstract class Waila { .registerTypeAdapter(WailaConfig.Overlay.Color.class, new WailaConfig.Overlay.Color.Adapter()) .registerTypeAdapter(ThemeDefinition.class, new ThemeDefinition.Adapter()) .registerTypeAdapter(ResourceLocation.class, new ResourceLocation.Serializer()) - .registerTypeAdapter(KeyBinding.class, new KeyBinding.Adapter()) .create()) .build(); diff --git a/src/main/java/mcp/mobius/waila/WailaClient.java b/src/main/java/mcp/mobius/waila/WailaClient.java index d23e31562..52efc3e87 100644 --- a/src/main/java/mcp/mobius/waila/WailaClient.java +++ b/src/main/java/mcp/mobius/waila/WailaClient.java @@ -2,17 +2,20 @@ import java.util.List; +import com.mojang.blaze3d.platform.InputConstants; import mcp.mobius.waila.access.ClientAccessor; import mcp.mobius.waila.api.IWailaConfig; import mcp.mobius.waila.api.WailaConstants; -import mcp.mobius.waila.config.KeyBinding; +import mcp.mobius.waila.buildconst.Tl; import mcp.mobius.waila.config.PluginConfig; import mcp.mobius.waila.gui.hud.TooltipHandler; import mcp.mobius.waila.gui.screen.HomeScreen; import mcp.mobius.waila.integration.IRecipeAction; import mcp.mobius.waila.registry.Registrar; import mcp.mobius.waila.registry.RegistryFilter; +import mcp.mobius.waila.service.IClientService; import mcp.mobius.waila.util.Log; +import net.minecraft.client.KeyMapping; import net.minecraft.client.Minecraft; import net.minecraft.network.chat.Component; import net.minecraft.world.item.ItemStack; @@ -22,6 +25,12 @@ public abstract class WailaClient { private static final Log LOG = Log.create(); + public static KeyMapping keyOpenConfig; + public static KeyMapping keyShowOverlay; + public static KeyMapping keyToggleLiquid; + public static KeyMapping keyShowRecipeInput; + public static KeyMapping keyShowRecipeOutput; + public static boolean showComponentBounds = false; public static boolean showFps = false; @@ -39,39 +48,43 @@ public static void setRecipeAction(IRecipeAction action) { recipeAction = action; } - protected static void onClientTick() { - KeyBinding.tick(); + protected static List registerKeyBinds() { + return List.of( + keyOpenConfig = createKeyBind(Tl.Key.CONFIG), + keyShowOverlay = createKeyBind(Tl.Key.SHOW_OVERLAY), + keyToggleLiquid = createKeyBind(Tl.Key.TOGGLE_LIQUID), + keyShowRecipeInput = createKeyBind(Tl.Key.SHOW_RECIPE_INPUT), + keyShowRecipeOutput = createKeyBind(Tl.Key.SHOW_RECIPE_OUTPUT) + ); + } + protected static void onClientTick() { var client = Minecraft.getInstance(); var config = Waila.CONFIG.get(); - var general = config.getGeneral(); - var bindings = config.getKeyBindings(); TooltipHandler.tick(); - if (client.screen == null) { - if (bindings.getOpenConfig().isPressed()) { - client.setScreen(new HomeScreen(null)); - } + while (keyOpenConfig.consumeClick()) { + client.setScreen(new HomeScreen(null)); + } - if (bindings.getShowOverlay().isPressed()) { - if (general.getDisplayMode() == IWailaConfig.General.DisplayMode.TOGGLE) { - general.setDisplayTooltip(!general.isDisplayTooltip()); - } + while (keyShowOverlay.consumeClick()) { + if (config.getGeneral().getDisplayMode() == IWailaConfig.General.DisplayMode.TOGGLE) { + config.getGeneral().setDisplayTooltip(!config.getGeneral().isDisplayTooltip()); } + } - if (bindings.getToggleLiquid().isPressed()) { - PluginConfig.set(WailaConstants.CONFIG_SHOW_FLUID, !PluginConfig.CLIENT.getBoolean(WailaConstants.CONFIG_SHOW_FLUID)); - } + while (keyToggleLiquid.consumeClick()) { + PluginConfig.set(WailaConstants.CONFIG_SHOW_FLUID, !PluginConfig.CLIENT.getBoolean(WailaConstants.CONFIG_SHOW_FLUID)); + } - if (recipeAction != null) { - if (bindings.getShowRecipeInput().isPressed()) { - recipeAction.showInput(ClientAccessor.INSTANCE.getStack()); - } + if (recipeAction != null) { + while (keyShowRecipeInput.consumeClick()) { + recipeAction.showInput(ClientAccessor.INSTANCE.getStack()); + } - if (bindings.getShowRecipeOutput().isPressed()) { - recipeAction.showOutput(ClientAccessor.INSTANCE.getStack()); - } + while (keyShowRecipeOutput.consumeClick()) { + recipeAction.showOutput(ClientAccessor.INSTANCE.getStack()); } } } @@ -101,4 +114,8 @@ protected static void onServerLogout() { config.setServerValue(null)); } + private static KeyMapping createKeyBind(String id) { + return IClientService.INSTANCE.createKeyBind(id, InputConstants.UNKNOWN.getValue()); + } + } diff --git a/src/main/java/mcp/mobius/waila/config/KeyBinding.java b/src/main/java/mcp/mobius/waila/config/KeyBinding.java deleted file mode 100644 index aeed0416d..000000000 --- a/src/main/java/mcp/mobius/waila/config/KeyBinding.java +++ /dev/null @@ -1,83 +0,0 @@ -package mcp.mobius.waila.config; - -import java.lang.reflect.Type; -import java.util.Map; - -import com.google.common.collect.MapMaker; -import com.google.gson.JsonDeserializationContext; -import com.google.gson.JsonDeserializer; -import com.google.gson.JsonElement; -import com.google.gson.JsonParseException; -import com.google.gson.JsonPrimitive; -import com.google.gson.JsonSerializationContext; -import com.google.gson.JsonSerializer; -import com.mojang.blaze3d.platform.InputConstants; -import net.minecraft.client.Minecraft; -import org.jetbrains.annotations.Nullable; - -public final class KeyBinding { - - private static final Map INSTANCES = new MapMaker().weakValues().makeMap(); - - public static final KeyBinding UNKNOWN = of(InputConstants.UNKNOWN); - - private final InputConstants.Key key; - - private @Nullable Boolean pressed; - private @Nullable Boolean wasPressed; - private boolean held; - - private KeyBinding(InputConstants.Key key) { - this.key = key; - } - - public static KeyBinding of(InputConstants.Key key) { - return INSTANCES.computeIfAbsent(key, KeyBinding::new); - } - - public boolean isDown() { - if (pressed == null) { - pressed = key.getValue() != InputConstants.UNKNOWN.getValue() - && InputConstants.isKeyDown(Minecraft.getInstance().getWindow().getWindow(), key.getValue()); - - if (!pressed) { - held = false; - } else { - held = wasPressed == Boolean.TRUE; - } - } - - return pressed; - } - - public boolean isPressed() { - isDown(); - return pressed == Boolean.TRUE && !held; - } - - public static void tick() { - for (var instance : INSTANCES.values()) { - instance.wasPressed = instance.pressed; - instance.pressed = null; - } - } - - public InputConstants.Key key() { - return key; - } - - public static class Adapter implements JsonSerializer, JsonDeserializer { - - @Override - public KeyBinding deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { - return of(InputConstants.getKey(json.getAsString())); - } - - @Override - public JsonElement serialize(KeyBinding src, Type typeOfSrc, JsonSerializationContext context) { - return new JsonPrimitive(src.key.getName()); - } - - } - -} diff --git a/src/main/java/mcp/mobius/waila/config/WailaConfig.java b/src/main/java/mcp/mobius/waila/config/WailaConfig.java index bf87452ed..803061a97 100644 --- a/src/main/java/mcp/mobius/waila/config/WailaConfig.java +++ b/src/main/java/mcp/mobius/waila/config/WailaConfig.java @@ -23,7 +23,6 @@ public class WailaConfig implements IWailaConfig { private final General general = new General(); private final Overlay overlay = new Overlay(); private final Formatter formatter = new Formatter(); - private final KeyBindings keyBindings = new KeyBindings(); private int configVersion = 0; public int getConfigVersion() { @@ -49,10 +48,6 @@ public Formatter getFormatter() { return formatter; } - public KeyBindings getKeyBindings() { - return keyBindings; - } - public static class General implements IWailaConfig.General { private boolean displayTooltip = true; @@ -398,54 +393,4 @@ public Component registryName(Object registryName) { } - public static class KeyBindings { - - private KeyBinding openConfig = KeyBinding.UNKNOWN; - private KeyBinding showOverlay = KeyBinding.UNKNOWN; - private KeyBinding toggleLiquid = KeyBinding.UNKNOWN; - private KeyBinding showRecipeInput = KeyBinding.UNKNOWN; - private KeyBinding showRecipeOutput = KeyBinding.UNKNOWN; - - public KeyBinding getOpenConfig() { - return openConfig; - } - - public void setOpenConfig(KeyBinding openConfig) { - this.openConfig = openConfig; - } - - public KeyBinding getShowOverlay() { - return showOverlay; - } - - public void setShowOverlay(KeyBinding showOverlay) { - this.showOverlay = showOverlay; - } - - public KeyBinding getToggleLiquid() { - return toggleLiquid; - } - - public void setToggleLiquid(KeyBinding toggleLiquid) { - this.toggleLiquid = toggleLiquid; - } - - public KeyBinding getShowRecipeInput() { - return showRecipeInput; - } - - public void setShowRecipeInput(KeyBinding showRecipeInput) { - this.showRecipeInput = showRecipeInput; - } - - public KeyBinding getShowRecipeOutput() { - return showRecipeOutput; - } - - public void setShowRecipeOutput(KeyBinding showRecipeOutput) { - this.showRecipeOutput = showRecipeOutput; - } - - } - } diff --git a/src/main/java/mcp/mobius/waila/gui/hud/TooltipHandler.java b/src/main/java/mcp/mobius/waila/gui/hud/TooltipHandler.java index f55d0ddb3..5f6c14317 100644 --- a/src/main/java/mcp/mobius/waila/gui/hud/TooltipHandler.java +++ b/src/main/java/mcp/mobius/waila/gui/hud/TooltipHandler.java @@ -1,6 +1,7 @@ package mcp.mobius.waila.gui.hud; import mcp.mobius.waila.Waila; +import mcp.mobius.waila.WailaClient; import mcp.mobius.waila.access.ClientAccessor; import mcp.mobius.waila.api.IBlacklistConfig; import mcp.mobius.waila.api.IBlockComponentProvider; @@ -50,12 +51,11 @@ public static void tick() { var client = Minecraft.getInstance(); var config = Waila.CONFIG.get().getGeneral(); - var bindings = Waila.CONFIG.get().getKeyBindings(); if (client.options.hideGui) return; if (client.screen != null && !(client.screen instanceof ChatScreen)) return; if (client.level == null || !config.isDisplayTooltip()) return; - if (config.getDisplayMode() == IWailaConfig.General.DisplayMode.HOLD_KEY && client.screen == null && !bindings.getShowOverlay().isDown()) return; + if (config.getDisplayMode() == IWailaConfig.General.DisplayMode.HOLD_KEY && !WailaClient.keyShowOverlay.isDown()) return; if (config.isHideFromPlayerList() && ((PlayerTabOverlayAccess) client.gui.getTabList()).wthit_isVisible()) return; if (config.isHideFromDebug() && client.getDebugOverlay().showDebugScreen()) return; if (client.gameMode == null) return; diff --git a/src/main/java/mcp/mobius/waila/gui/screen/WailaConfigScreen.java b/src/main/java/mcp/mobius/waila/gui/screen/WailaConfigScreen.java index b28e4bbac..ddf01549b 100644 --- a/src/main/java/mcp/mobius/waila/gui/screen/WailaConfigScreen.java +++ b/src/main/java/mcp/mobius/waila/gui/screen/WailaConfigScreen.java @@ -1,11 +1,11 @@ package mcp.mobius.waila.gui.screen; import java.awt.Rectangle; -import java.util.function.Consumer; import com.google.common.collect.ImmutableList; import com.mojang.blaze3d.platform.InputConstants; import mcp.mobius.waila.Waila; +import mcp.mobius.waila.WailaClient; import mcp.mobius.waila.api.IModInfo; import mcp.mobius.waila.api.ITheme; import mcp.mobius.waila.api.IWailaConfig; @@ -13,7 +13,6 @@ import mcp.mobius.waila.api.WailaConstants; import mcp.mobius.waila.api.component.ItemComponent; import mcp.mobius.waila.buildconst.Tl; -import mcp.mobius.waila.config.KeyBinding; import mcp.mobius.waila.config.WailaConfig; import mcp.mobius.waila.gui.hud.Line; import mcp.mobius.waila.gui.hud.TooltipRenderer; @@ -26,8 +25,10 @@ import mcp.mobius.waila.gui.widget.value.CycleValue; import mcp.mobius.waila.gui.widget.value.EnumValue; import mcp.mobius.waila.gui.widget.value.InputValue; +import mcp.mobius.waila.mixin.KeyMappingAccess; import net.minecraft.ChatFormatting; import net.minecraft.Util; +import net.minecraft.client.KeyMapping; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.components.events.GuiEventListener; @@ -258,26 +259,11 @@ public ConfigListWidget getOptions() { InputValue.ANY)); options.with(new CategoryEntry(Tl.Config.KEYBINDS)) - .with(new KeyBindValue(Tl.Key.CONFIG, - get().getKeyBindings().getOpenConfig(), - defaultConfig.getKeyBindings().getOpenConfig(), - val -> get().getKeyBindings().setOpenConfig(val))) - .with(new KeyBindValue(Tl.Key.SHOW_OVERLAY, - get().getKeyBindings().getShowOverlay(), - defaultConfig.getKeyBindings().getShowOverlay(), - val -> get().getKeyBindings().setShowOverlay(val))) - .with(new KeyBindValue(Tl.Key.TOGGLE_LIQUID, - get().getKeyBindings().getToggleLiquid(), - defaultConfig.getKeyBindings().getToggleLiquid(), - val -> get().getKeyBindings().setToggleLiquid(val))) - .with(new KeyBindValue(Tl.Key.SHOW_RECIPE_INPUT, - get().getKeyBindings().getShowRecipeInput(), - defaultConfig.getKeyBindings().getShowRecipeInput(), - val -> get().getKeyBindings().setShowRecipeInput(val))) - .with(new KeyBindValue(Tl.Key.SHOW_RECIPE_OUTPUT, - get().getKeyBindings().getShowRecipeOutput(), - defaultConfig.getKeyBindings().getShowRecipeOutput(), - val -> get().getKeyBindings().setShowRecipeOutput(val))); + .with(new KeyBindValue(WailaClient.keyOpenConfig)) + .with(new KeyBindValue(WailaClient.keyShowOverlay)) + .with(new KeyBindValue(WailaClient.keyToggleLiquid)) + .with(new KeyBindValue(WailaClient.keyShowRecipeInput)) + .with(new KeyBindValue(WailaClient.keyShowRecipeOutput)); return options; } @@ -285,7 +271,7 @@ public ConfigListWidget getOptions() { @Override public boolean mouseClicked(double mouseX, double mouseY, int button) { if (selectedKeyBind != null) { - selectedKeyBind.setValue(KeyBinding.of(InputConstants.Type.MOUSE.getOrCreate(button))); + selectedKeyBind.setValue(InputConstants.Type.MOUSE.getOrCreate(button)); selectedKeyBind = null; return true; } @@ -297,9 +283,9 @@ public boolean mouseClicked(double mouseX, double mouseY, int button) { public boolean keyPressed(int keyCode, int scanCode, int modifiers) { if (selectedKeyBind != null) { if (keyCode == InputConstants.KEY_ESCAPE) { - selectedKeyBind.setValue(KeyBinding.UNKNOWN); + selectedKeyBind.setValue(InputConstants.UNKNOWN); } else { - selectedKeyBind.setValue(KeyBinding.of(InputConstants.getKey(keyCode, scanCode))); + selectedKeyBind.setValue(InputConstants.getKey(keyCode, scanCode)); } selectedKeyBind = null; @@ -309,16 +295,19 @@ public boolean keyPressed(int keyCode, int scanCode, int modifiers) { return super.keyPressed(keyCode, scanCode, modifiers); } - public class KeyBindValue extends ConfigValue { + public class KeyBindValue extends ConfigValue { private final Button button; - public KeyBindValue(String translationKey, KeyBinding value, KeyBinding defaultValue, Consumer save) { - super(translationKey, value, defaultValue, save); + public KeyBindValue(KeyMapping key) { + super(key.getName(), ((KeyMappingAccess) key).wthit_key(), key.getDefaultKey(), value -> { + minecraft.options.setKey(key, value); + KeyMapping.resetMapping(); + }); + this.button = createButton(0, 0, 100, 20, Component.empty(), w -> selectedKeyBind = this); } - @Override public GuiEventListener getListener() { return button; @@ -327,9 +316,9 @@ public GuiEventListener getListener() { @Override protected void drawValue(GuiGraphics ctx, int width, int height, int x, int y, int mouseX, int mouseY, boolean selected, float partialTicks) { if (selectedKeyBind == this) { - button.setMessage(Component.literal("> " + getValue().key().getDisplayName().getString() + " <").withStyle(ChatFormatting.YELLOW)); + button.setMessage(Component.literal("> " + getValue().getDisplayName().getString() + " <").withStyle(ChatFormatting.YELLOW)); } else { - button.setMessage(getValue().key().getDisplayName()); + button.setMessage(getValue().getDisplayName()); } button.setX(x + width - button.getWidth()); diff --git a/src/main/java/mcp/mobius/waila/service/IClientService.java b/src/main/java/mcp/mobius/waila/service/IClientService.java new file mode 100644 index 000000000..0a405e6c4 --- /dev/null +++ b/src/main/java/mcp/mobius/waila/service/IClientService.java @@ -0,0 +1,12 @@ +package mcp.mobius.waila.service; + +import mcp.mobius.waila.api.__internal__.Internals; +import net.minecraft.client.KeyMapping; + +public interface IClientService { + + IClientService INSTANCE = Internals.loadService(IClientService.class); + + KeyMapping createKeyBind(String id, int key); + +}