diff --git a/src/main/java/noppes/npcs/EventHooks.java b/src/main/java/noppes/npcs/EventHooks.java index b013578cb..f88f9395c 100644 --- a/src/main/java/noppes/npcs/EventHooks.java +++ b/src/main/java/noppes/npcs/EventHooks.java @@ -442,9 +442,9 @@ public class EventHooks { NpcAPI.EVENT_BUS.post(event); } - public static void onPlayerMouseClicked(EntityPlayerMP player, int button, int mouseWheel, boolean buttonDown) { + public static void onPlayerMouseClicked(EntityPlayerMP player, int button, int mouseWheel, boolean buttonDown, boolean isCtrlPressed, boolean isShiftPressed, boolean isAltPressed, boolean isMetaPressed, int[] heldKeys) { PlayerDataScript handler = ScriptController.Instance.playerScripts; - PlayerEvent.MouseClickedEvent event = new PlayerEvent.MouseClickedEvent((IPlayer)NpcAPI.Instance().getIEntity(player), button, mouseWheel, buttonDown); + PlayerEvent.MouseClickedEvent event = new PlayerEvent.MouseClickedEvent((IPlayer)NpcAPI.Instance().getIEntity(player), button, mouseWheel, buttonDown, isCtrlPressed, isAltPressed, isShiftPressed, isMetaPressed, heldKeys); handler.callScript(EnumScriptType.MOUSE_CLICKED, event); NpcAPI.EVENT_BUS.post(event); } diff --git a/src/main/java/noppes/npcs/PacketHandlerPlayer.java b/src/main/java/noppes/npcs/PacketHandlerPlayer.java index 7e0c8ae45..2b3a34242 100644 --- a/src/main/java/noppes/npcs/PacketHandlerPlayer.java +++ b/src/main/java/noppes/npcs/PacketHandlerPlayer.java @@ -94,7 +94,33 @@ public class PacketHandlerPlayer{ return; } - EventHooks.onPlayerMouseClicked(player, buffer.readInt(), buffer.readInt(), buffer.readBoolean()); + int button = buffer.readInt(); + int mouseWheel = buffer.readInt(); + boolean buttonDown = buffer.readBoolean(); + + boolean isCtrlPressed = buffer.readBoolean(); + boolean isShiftPressed = buffer.readBoolean(); + boolean isAltPressed = buffer.readBoolean(); + boolean isMetaPressed = buffer.readBoolean(); + + String ints = Server.readString(buffer); + String[] split = ints.split(","); + int[] keysDown; + + if(ints.length() > 0) { + keysDown = new int[split.length]; + try { + for (int i = 0; i < split.length; i++) { + keysDown[i] = Integer.parseInt(split[i]); + } + } + catch (NumberFormatException ignored){ + } + } else { + keysDown = new int[0]; + } + + EventHooks.onPlayerMouseClicked(player, button, mouseWheel, buttonDown, isCtrlPressed, isShiftPressed, isAltPressed, isMetaPressed, keysDown); } 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 16c08ad20..6fad3431c 100644 --- a/src/main/java/noppes/npcs/client/ClientTickHandler.java +++ b/src/main/java/noppes/npcs/client/ClientTickHandler.java @@ -50,7 +50,12 @@ public class ClientTickHandler{ if(Mouse.getEventButton() == -1 && Mouse.getDWheel() == 0) return; - NoppesUtilPlayer.sendData(EnumPlayerPacket.MouseClicked, new Object[]{Mouse.getEventButton(),Mouse.getEventDWheel(),Mouse.isButtonDown(Mouse.getEventButton())}); + 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.MouseClicked, new Object[]{Mouse.getEventButton(),Mouse.getEventDWheel(),Mouse.isButtonDown(Mouse.getEventButton()), Boolean.valueOf(isCtrlPressed), Boolean.valueOf(isShiftPressed), Boolean.valueOf(isAltPressed), Boolean.valueOf(isMetaPressed)}); } @SubscribeEvent diff --git a/src/main/java/noppes/npcs/scripted/event/PlayerEvent.java b/src/main/java/noppes/npcs/scripted/event/PlayerEvent.java index f9e5eab78..880ae2248 100644 --- a/src/main/java/noppes/npcs/scripted/event/PlayerEvent.java +++ b/src/main/java/noppes/npcs/scripted/event/PlayerEvent.java @@ -58,15 +58,26 @@ public class PlayerEvent extends CustomNPCsEvent { } public static class MouseClickedEvent extends PlayerEvent { + public final boolean isCtrlPressed; + public final boolean isAltPressed; + public final boolean isShiftPressed; + public final boolean isMetaPressed; + public final int[] keysDown; + public final int button; public final int mouseWheel; public final boolean buttonDown; - public MouseClickedEvent(IPlayer player, int button, int mouseWheel, boolean buttonDown){ + public MouseClickedEvent(IPlayer player, int button, int mouseWheel, boolean buttonDown, boolean isCtrlPressed, boolean isAltPressed, boolean isShiftPressed, boolean isMetaPressed, int[] heldKeys){ super(player); this.button = button; this.mouseWheel = mouseWheel; this.buttonDown = buttonDown; + this.isCtrlPressed = isCtrlPressed; + this.isAltPressed = isAltPressed; + this.isShiftPressed = isShiftPressed; + this.isMetaPressed = isMetaPressed; + this.keysDown = heldKeys; } }