From d6ed36063d50d103cd0217d08f6758c258fa6641 Mon Sep 17 00:00:00 2001 From: GiantLuigi4 <49770992+GiantLuigi4@users.noreply.github.com> Date: Tue, 6 Jun 2023 17:56:54 -0400 Subject: [PATCH] keybinding --- src/main/java/net/montoyo/wd/WebDisplays.java | 1 + .../net/montoyo/wd/client/ClientProxy.java | 26 ++++++++++++++++++- .../renderers/LaserPointerRenderer.java | 5 ++-- .../montoyo/wd/entity/TileEntityScreen.java | 2 ++ 4 files changed, 30 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/montoyo/wd/WebDisplays.java b/src/main/java/net/montoyo/wd/WebDisplays.java index cdf651f..ac9a9bb 100644 --- a/src/main/java/net/montoyo/wd/WebDisplays.java +++ b/src/main/java/net/montoyo/wd/WebDisplays.java @@ -120,6 +120,7 @@ public class WebDisplays { if (FMLEnvironment.dist.isClient()) { // proxies are annoying, so from now on, I'mma be just registering stuff in here + FMLJavaModLoadingContext.get().getModEventBus().addListener(ClientProxy::onKeybindRegistry); MinecraftForge.EVENT_BUS.addListener(ClientProxy::onDrawSelection); ClientConfig.init(); } diff --git a/src/main/java/net/montoyo/wd/client/ClientProxy.java b/src/main/java/net/montoyo/wd/client/ClientProxy.java index 1c39df7..1ab8b0b 100644 --- a/src/main/java/net/montoyo/wd/client/ClientProxy.java +++ b/src/main/java/net/montoyo/wd/client/ClientProxy.java @@ -11,6 +11,7 @@ import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.advancements.Advancement; import net.minecraft.advancements.AdvancementProgress; +import net.minecraft.client.KeyMapping; import net.minecraft.client.Minecraft; import net.minecraft.client.Options; import net.minecraft.client.gui.Gui; @@ -46,6 +47,7 @@ import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.Vec3; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.client.event.ModelEvent; +import net.minecraftforge.client.event.RegisterKeyMappingsEvent; import net.minecraftforge.client.event.RenderHandEvent; import net.minecraftforge.client.event.RenderHighlightEvent; import net.minecraftforge.common.MinecraftForge; @@ -681,7 +683,20 @@ public class ClientProxy extends SharedProxy implements IDisplayHandler, IJSQuer mc.setScreen(nextScreen); nextScreen = null; } - + + // handle r button + if (KEY_MOUSE.isDown()) { + if (!rDown) { + rDown = true; + mouseOn = !mouseOn; + } + } else rDown = false; + if ( + Minecraft.getInstance().player == null || + !(Minecraft.getInstance().player.getItemInHand(InteractionHand.MAIN_HAND).getItem() instanceof ItemLaserPointer) + ) mouseOn = false; + + //Load/unload minePads depending on which item is in the player's hand if (++minePadTickCounter >= 10) { minePadTickCounter = 0; @@ -880,4 +895,13 @@ public class ClientProxy extends SharedProxy implements IDisplayHandler, IJSQuer } } } + + /** KEYBINDS **/ + public static final KeyMapping KEY_MOUSE = new KeyMapping("webdisplays.key.toggle_mouse", GLFW.GLFW_KEY_R, "key.categories.misc"); + static boolean rDown = false; + public static boolean mouseOn = false; + + public static void onKeybindRegistry(RegisterKeyMappingsEvent event) { + event.register(KEY_MOUSE); + } } diff --git a/src/main/java/net/montoyo/wd/client/renderers/LaserPointerRenderer.java b/src/main/java/net/montoyo/wd/client/renderers/LaserPointerRenderer.java index 5b58d1a..ad87fb0 100644 --- a/src/main/java/net/montoyo/wd/client/renderers/LaserPointerRenderer.java +++ b/src/main/java/net/montoyo/wd/client/renderers/LaserPointerRenderer.java @@ -4,7 +4,6 @@ package net.montoyo.wd.client.renderers; -import com.mojang.blaze3d.platform.InputConstants; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.*; import com.mojang.math.Matrix4f; @@ -18,9 +17,9 @@ import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.Vec3; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; +import net.montoyo.wd.client.ClientProxy; import net.montoyo.wd.init.ItemInit; import net.montoyo.wd.item.ItemLaserPointer; -import org.lwjgl.glfw.GLFW; @OnlyIn(Dist.CLIENT) public final class LaserPointerRenderer implements IItemRenderer { @@ -36,7 +35,7 @@ public final class LaserPointerRenderer implements IItemRenderer { Minecraft mc = Minecraft.getInstance(); return mc.player != null && mc.level != null && ( - InputConstants.isKeyDown(Minecraft.getInstance().getWindow().getWindow(), GLFW.GLFW_KEY_LEFT_ALT) || + ClientProxy.mouseOn || ItemLaserPointer.isOn() ) && mc.player.getItemInHand(InteractionHand.MAIN_HAND).getItem().equals(ItemInit.itemLaserPointer.get()) && diff --git a/src/main/java/net/montoyo/wd/entity/TileEntityScreen.java b/src/main/java/net/montoyo/wd/entity/TileEntityScreen.java index 5f08f9d..387f9d6 100644 --- a/src/main/java/net/montoyo/wd/entity/TileEntityScreen.java +++ b/src/main/java/net/montoyo/wd/entity/TileEntityScreen.java @@ -543,6 +543,8 @@ public class TileEntityScreen extends BlockEntity { } public void handleMouseEvent(BlockSide side, ClickControl.ControlType event, @Nullable Vector2i vec, int button) { + if (button > 1) return; // buttons above 1 crash the game + Screen scr = getScreen(side); if (scr == null) { Log.error("Attempt inject mouse events on non-existing screen of side %s", side.toString());