From 27b88c1fce8fb77026f529d5789bf3e1380ce8b8 Mon Sep 17 00:00:00 2001 From: luisc Date: Sat, 13 Nov 2021 13:32:33 -0600 Subject: [PATCH] Player key events now detect key presses as well, not just releases. --- src/main/java/noppes/npcs/EventHooks.java | 8 +++---- .../java/noppes/npcs/PacketHandlerPlayer.java | 4 ++-- .../noppes/npcs/client/ClientTickHandler.java | 23 ++++++++----------- .../npcs/scripted/event/PlayerEvent.java | 8 +++++-- 4 files changed, 22 insertions(+), 21 deletions(-) diff --git a/src/main/java/noppes/npcs/EventHooks.java b/src/main/java/noppes/npcs/EventHooks.java index ea2b619bc..7833cb110 100644 --- a/src/main/java/noppes/npcs/EventHooks.java +++ b/src/main/java/noppes/npcs/EventHooks.java @@ -248,16 +248,16 @@ public class EventHooks { WrapperNpcAPI.EVENT_BUS.post(event); } - public static void onPlayerMouseClicked(EntityPlayerMP player, int button, int mouseWheel) { + public static void onPlayerMouseClicked(EntityPlayerMP player, int button, int mouseWheel, boolean buttonDown) { PlayerDataScript handler = PlayerData.get(player).scriptData; - PlayerEvent.MouseClickedEvent event = new PlayerEvent.MouseClickedEvent(handler.getPlayer(), button, mouseWheel); + PlayerEvent.MouseClickedEvent event = new PlayerEvent.MouseClickedEvent(handler.getPlayer(), button, mouseWheel, buttonDown); handler.callScript(EnumScriptType.MOUSE_CLICKED, event,"event", event); WrapperNpcAPI.EVENT_BUS.post(event); } - public static void onPlayerKeyPressed(EntityPlayerMP player, int button, boolean isCtrlPressed, boolean isShiftPressed, boolean isAltPressed, boolean isMetaPressed) { + public static void onPlayerKeyPressed(EntityPlayerMP player, int button, boolean isCtrlPressed, boolean isShiftPressed, boolean isAltPressed, boolean isMetaPressed, boolean buttonDown) { PlayerDataScript handler = PlayerData.get(player).scriptData; - KeyPressedEvent event = new KeyPressedEvent(handler.getPlayer(), button, isCtrlPressed, isAltPressed, isShiftPressed, isMetaPressed); + KeyPressedEvent event = new KeyPressedEvent(handler.getPlayer(), button, isCtrlPressed, isAltPressed, isShiftPressed, isMetaPressed, buttonDown); handler.callScript(EnumScriptType.KEY_PRESSED, event,"event", event); WrapperNpcAPI.EVENT_BUS.post(event); } diff --git a/src/main/java/noppes/npcs/PacketHandlerPlayer.java b/src/main/java/noppes/npcs/PacketHandlerPlayer.java index 36709bdb6..55f3faabb 100644 --- a/src/main/java/noppes/npcs/PacketHandlerPlayer.java +++ b/src/main/java/noppes/npcs/PacketHandlerPlayer.java @@ -66,14 +66,14 @@ public class PacketHandlerPlayer{ return; } - EventHooks.onPlayerKeyPressed(player, buffer.readInt(), buffer.readBoolean(), buffer.readBoolean(), buffer.readBoolean(), buffer.readBoolean()); + EventHooks.onPlayerKeyPressed(player, buffer.readInt(), buffer.readBoolean(), buffer.readBoolean(), buffer.readBoolean(), buffer.readBoolean(), buffer.readBoolean()); } else if(type == EnumPlayerPacket.MouseClicked) { if(ScriptController.Instance.languages.isEmpty()) { return; } - EventHooks.onPlayerMouseClicked(player, buffer.readInt(), buffer.readInt()); + EventHooks.onPlayerMouseClicked(player, buffer.readInt(), buffer.readInt(), buffer.readBoolean()); } else if(type == EnumPlayerPacket.FollowerHire){ EntityNPCInterface npc = NoppesUtilServer.getEditingNpc(player); diff --git a/src/main/java/noppes/npcs/client/ClientTickHandler.java b/src/main/java/noppes/npcs/client/ClientTickHandler.java index fe050dde1..255a92908 100644 --- a/src/main/java/noppes/npcs/client/ClientTickHandler.java +++ b/src/main/java/noppes/npcs/client/ClientTickHandler.java @@ -51,7 +51,7 @@ public class ClientTickHandler{ if(Mouse.getEventButton() == -1 && Mouse.getDWheel() == 0) return; - NoppesUtilPlayer.sendData(EnumPlayerPacket.MouseClicked, new Object[]{Mouse.getEventButton(),Mouse.getEventDWheel()}); + NoppesUtilPlayer.sendData(EnumPlayerPacket.MouseClicked, new Object[]{Mouse.getEventButton(),Mouse.getEventDWheel(),Mouse.isButtonDown(Mouse.getEventButton())}); } @SubscribeEvent @@ -66,23 +66,20 @@ public class ClientTickHandler{ int key = Keyboard.getEventKey(); long time = Keyboard.getEventNanoseconds(); + if(Keyboard.getEventKeyState()) { if(!this.isIgnoredKey(key)) { this.buttonTime = time; - this.buttonPressed = key; - } - } else { - Minecraft mc = Minecraft.getMinecraft(); - if(key == this.buttonPressed && time - this.buttonTime < 500000000L) { - boolean isCtrlPressed = Keyboard.isKeyDown(157) || Keyboard.isKeyDown(29); - boolean isShiftPressed = Keyboard.isKeyDown(54) || Keyboard.isKeyDown(42); - boolean isAltPressed = Keyboard.isKeyDown(184) || Keyboard.isKeyDown(56); - boolean isMetaPressed = Keyboard.isKeyDown(220) || Keyboard.isKeyDown(219); - NoppesUtilPlayer.sendData(EnumPlayerPacket.KeyPressed, new Object[]{Integer.valueOf(key), Boolean.valueOf(isCtrlPressed), Boolean.valueOf(isShiftPressed), Boolean.valueOf(isAltPressed), Boolean.valueOf(isMetaPressed)}); } + } - this.buttonPressed = -1; - this.buttonTime = 0L; + if((Keyboard.getEventKeyState() && time-this.buttonTime == 0) || !Keyboard.getEventKeyState()) { + boolean isCtrlPressed = Keyboard.isKeyDown(157) || Keyboard.isKeyDown(29); + boolean isShiftPressed = Keyboard.isKeyDown(54) || Keyboard.isKeyDown(42); + boolean isAltPressed = Keyboard.isKeyDown(184) || Keyboard.isKeyDown(56); + boolean isMetaPressed = Keyboard.isKeyDown(220) || Keyboard.isKeyDown(219); + boolean keyDown = Keyboard.isKeyDown(key); + NoppesUtilPlayer.sendData(EnumPlayerPacket.KeyPressed, new Object[]{Integer.valueOf(key), Boolean.valueOf(isCtrlPressed), Boolean.valueOf(isShiftPressed), Boolean.valueOf(isAltPressed), Boolean.valueOf(isMetaPressed), Boolean.valueOf(keyDown)}); } } diff --git a/src/main/java/noppes/npcs/scripted/event/PlayerEvent.java b/src/main/java/noppes/npcs/scripted/event/PlayerEvent.java index 9010656bc..cc07fdb11 100644 --- a/src/main/java/noppes/npcs/scripted/event/PlayerEvent.java +++ b/src/main/java/noppes/npcs/scripted/event/PlayerEvent.java @@ -41,25 +41,29 @@ public class PlayerEvent extends CustomNPCsEvent { public final boolean isAltPressed; public final boolean isShiftPressed; public final boolean isMetaPressed; + public final boolean keyDown; - public KeyPressedEvent(IPlayer player, int key, boolean isCtrlPressed, boolean isAltPressed, boolean isShiftPressed, boolean isMetaPressed) { + public KeyPressedEvent(IPlayer player, int key, boolean isCtrlPressed, boolean isAltPressed, boolean isShiftPressed, boolean isMetaPressed, boolean keyDown) { super(player); this.key = key; this.isCtrlPressed = isCtrlPressed; this.isAltPressed = isAltPressed; this.isShiftPressed = isShiftPressed; this.isMetaPressed = isMetaPressed; + this.keyDown = keyDown; } } public static class MouseClickedEvent extends PlayerEvent { public final int button; public final int mouseWheel; + public final boolean buttonDown; - public MouseClickedEvent(IPlayer player, int button, int mouseWheel){ + public MouseClickedEvent(IPlayer player, int button, int mouseWheel, boolean buttonDown){ super(player); this.button = button; this.mouseWheel = mouseWheel; + this.buttonDown = buttonDown; } }