From f7fd0f995efa7ba6a35d766e8b048827783d8187 Mon Sep 17 00:00:00 2001 From: TexTrue <3140846162@qq.com> Date: Thu, 15 Jun 2023 18:31:30 +0800 Subject: [PATCH] fix --- gradle.properties | 4 +- src/main/java/fi/dy/masa/malilib/MaLiLib.java | 17 ++++ .../forge/event/ForgeInputEventHandler.java | 78 +++++++++++++++++++ .../forge/event/ForgeTickEventHandler.java | 20 +++++ .../malilib/mixin/MixinMinecraftClient.java | 4 + 5 files changed, 121 insertions(+), 2 deletions(-) create mode 100644 src/main/java/fi/dy/masa/malilib/compat/forge/event/ForgeInputEventHandler.java create mode 100644 src/main/java/fi/dy/masa/malilib/compat/forge/event/ForgeTickEventHandler.java diff --git a/gradle.properties b/gradle.properties index fdaf708..3901275 100644 --- a/gradle.properties +++ b/gradle.properties @@ -12,8 +12,8 @@ loom.platform=forge yarn_mappings=1.17.1+build.65 # Mod Properties - mod_version=0.1.5 - maven_group=fi.dy.masa + mod_version=0.1.6 + maven_group=org.thinkingstudio.mafglib archives_base_name=MaFgLib mod_id=malilib mod_author=ThinkingStudio diff --git a/src/main/java/fi/dy/masa/malilib/MaLiLib.java b/src/main/java/fi/dy/masa/malilib/MaLiLib.java index 09a51cb..4418476 100644 --- a/src/main/java/fi/dy/masa/malilib/MaLiLib.java +++ b/src/main/java/fi/dy/masa/malilib/MaLiLib.java @@ -1,8 +1,12 @@ package fi.dy.masa.malilib; +import fi.dy.masa.malilib.compat.forge.event.ForgeInputEventHandler; +import fi.dy.masa.malilib.compat.forge.event.ForgeTickEventHandler; +import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; +import net.minecraftforge.fml.event.lifecycle.InterModProcessEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import fi.dy.masa.malilib.compat.forge.ForgePlatformCompat; @@ -19,15 +23,28 @@ public MaLiLib() { IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus(); modEventBus.addListener(this::onInitializeClient); + modEventBus.addListener(this::onInterModProcess); } public void onInitializeClient(FMLClientSetupEvent event) { + // Make sure the mod being absent on the other network side does not cause + // the client to display the server as incompatible ForgePlatformCompat.getInstance().getModClientExtensionPoint(); InitializationHandler.getInstance().registerInitializationHandler(new MaLiLibInitHandler()); + + // Config Screen ForgePlatformCompat.getInstance().getMod(MaLiLibReference.MOD_ID).registerModConfigScreen((screen) -> { MaLiLibConfigGui gui = new MaLiLibConfigGui(); gui.setParent(screen); return gui; }); + + // Mixin doesn't work, maybe? + MinecraftForge.EVENT_BUS.register(new ForgeInputEventHandler()); + MinecraftForge.EVENT_BUS.register(new ForgeTickEventHandler()); + } + + public void onInterModProcess(InterModProcessEvent event) { + ((InitializationHandler) InitializationHandler.getInstance()).onGameInitDone(); } } diff --git a/src/main/java/fi/dy/masa/malilib/compat/forge/event/ForgeInputEventHandler.java b/src/main/java/fi/dy/masa/malilib/compat/forge/event/ForgeInputEventHandler.java new file mode 100644 index 0000000..3b7a9bf --- /dev/null +++ b/src/main/java/fi/dy/masa/malilib/compat/forge/event/ForgeInputEventHandler.java @@ -0,0 +1,78 @@ +package fi.dy.masa.malilib.compat.forge.event; + +import fi.dy.masa.malilib.event.InputEventHandler; + +import net.minecraft.client.MinecraftClient; + +import net.minecraftforge.client.event.GuiScreenEvent; +import net.minecraftforge.client.event.InputEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; + +public class ForgeInputEventHandler { + private final MinecraftClient client = MinecraftClient.getInstance(); + @SubscribeEvent + public void onKeyboardInput(InputEvent.KeyInputEvent event) { + if (client.currentScreen == null) { + // This event isn't cancellable, and is fired after vanilla key handling >_> + // So this one needs to be handled with a Mixin + ((InputEventHandler) InputEventHandler.getInputManager()).onKeyInput(event.getKey(), event.getScanCode(), event.getModifiers(), event.getAction() != 0); + } + } + + @SubscribeEvent + public void onMouseInputEvent(InputEvent.RawMouseEvent event) { + int mouseX = 0; + int mouseY = 0; + + if (client.currentScreen == null && ((InputEventHandler) InputEventHandler.getInputManager()).onMouseClick(mouseX, mouseY, event.getButton(), event.getAction() != 0)) { + event.setCanceled(true); + } + } + + @SubscribeEvent + public void onMouseScrollEvent(InputEvent.MouseScrollEvent event) { + if (((InputEventHandler) InputEventHandler.getInputManager()).onMouseScroll((int) event.getMouseX(), (int) event.getMouseY(), 0, event.getScrollDelta())) { + event.setCanceled(true); + } + } + + @SubscribeEvent + public void onGuiKeyboardKeyPressPre(GuiScreenEvent.KeyboardKeyPressedEvent.Pre event) { + if (((InputEventHandler) InputEventHandler.getInputManager()).onKeyInput(event.getKeyCode(), event.getScanCode(), event.getModifiers(), true)) { + event.setCanceled(true); + } + } + + @SubscribeEvent + public void onGuiKeyboardKeyReleasePre(GuiScreenEvent.KeyboardKeyReleasedEvent.Pre event) { + if (((InputEventHandler) InputEventHandler.getInputManager()).onKeyInput(event.getKeyCode(), event.getScanCode(), event.getModifiers(), false)) { + event.setCanceled(true); + } + } + + @SubscribeEvent + public void onGuiMouseClickPre(GuiScreenEvent.MouseClickedEvent.Pre event) { + if (((InputEventHandler) InputEventHandler.getInputManager()).onMouseClick((int) event.getMouseX(), (int) event.getMouseY(), event.getButton(), true)) { + event.setCanceled(true); + } + } + + @SubscribeEvent + public void onGuiMouseReleasePre(GuiScreenEvent.MouseReleasedEvent.Pre event) { + if (((InputEventHandler) InputEventHandler.getInputManager()).onMouseClick((int) event.getMouseX(), (int) event.getMouseY(), event.getButton(), false)) { + event.setCanceled(true); + } + } + + @SubscribeEvent + public void onGuiMouseScrolledPre(GuiScreenEvent.MouseScrollEvent.Pre event) { + if (((InputEventHandler) InputEventHandler.getInputManager()).onMouseScroll((int) event.getMouseX(), (int) event.getMouseY(), event.getScrollDelta(), 0)) { + event.setCanceled(true); + } + } + + @SubscribeEvent + public void onGuiMouseMovedPre(GuiScreenEvent.MouseDragEvent.Pre event) { + ((InputEventHandler) InputEventHandler.getInputManager()).onMouseMove((int) event.getMouseX(), (int) event.getMouseY()); + } +} \ No newline at end of file diff --git a/src/main/java/fi/dy/masa/malilib/compat/forge/event/ForgeTickEventHandler.java b/src/main/java/fi/dy/masa/malilib/compat/forge/event/ForgeTickEventHandler.java new file mode 100644 index 0000000..ad8790f --- /dev/null +++ b/src/main/java/fi/dy/masa/malilib/compat/forge/event/ForgeTickEventHandler.java @@ -0,0 +1,20 @@ +package fi.dy.masa.malilib.compat.forge.event; + +import fi.dy.masa.malilib.event.TickHandler; +import fi.dy.masa.malilib.hotkeys.KeybindMulti; + +import net.minecraft.client.MinecraftClient; +import net.minecraftforge.event.TickEvent; +import net.minecraftforge.event.TickEvent.Phase; +import net.minecraftforge.eventbus.api.SubscribeEvent; + +public class ForgeTickEventHandler { + private final MinecraftClient client = MinecraftClient.getInstance(); + @SubscribeEvent + public void onClientTickEnd(TickEvent.ClientTickEvent event) { + if (event.phase == Phase.END) { + KeybindMulti.reCheckPressedKeys(); + TickHandler.getInstance().onClientTick(client); + } + } +} \ No newline at end of file diff --git a/src/main/java/fi/dy/masa/malilib/mixin/MixinMinecraftClient.java b/src/main/java/fi/dy/masa/malilib/mixin/MixinMinecraftClient.java index c01dda0..d805704 100644 --- a/src/main/java/fi/dy/masa/malilib/mixin/MixinMinecraftClient.java +++ b/src/main/java/fi/dy/masa/malilib/mixin/MixinMinecraftClient.java @@ -24,12 +24,14 @@ public abstract class MixinMinecraftClient private ClientWorld worldBefore; + /* @Inject(method = "(Lnet/minecraft/client/RunArgs;)V", at = @At("RETURN")) private void onInitComplete(RunArgs args, CallbackInfo ci) { // Register all mod handlers ((InitializationHandler) InitializationHandler.getInstance()).onGameInitDone(); } + */ @Inject(method = "scheduleStop()V", at = @At("RETURN")) private void onStop(CallbackInfo ci) @@ -37,12 +39,14 @@ private void onStop(CallbackInfo ci) ((ConfigManager) ConfigManager.getInstance()).saveAllConfigs(); } + /* @Inject(method = "tick()V", at = @At("RETURN")) private void onPostKeyboardInput(CallbackInfo ci) { KeybindMulti.reCheckPressedKeys(); TickHandler.getInstance().onClientTick((MinecraftClient)(Object) this); } + */ @Inject(method = "joinWorld(Lnet/minecraft/client/world/ClientWorld;)V", at = @At("HEAD")) private void onLoadWorldPre(@Nullable ClientWorld worldClientIn, CallbackInfo ci)