From 6782a5b9bac4dd99cd4387518ed43e4df6bc2457 Mon Sep 17 00:00:00 2001 From: "Luis C.M" <42545778+c0508383@users.noreply.github.com> Date: Sat, 5 Nov 2022 04:19:03 -0500 Subject: [PATCH] Made NPC dialog event cancellable --- src/main/java/noppes/npcs/EventHooks.java | 6 +++--- src/main/java/noppes/npcs/NoppesUtilServer.java | 7 +++---- src/main/java/noppes/npcs/scripted/event/NpcEvent.java | 1 + 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/noppes/npcs/EventHooks.java b/src/main/java/noppes/npcs/EventHooks.java index 34187cfa5..3966a47df 100644 --- a/src/main/java/noppes/npcs/EventHooks.java +++ b/src/main/java/noppes/npcs/EventHooks.java @@ -139,15 +139,15 @@ public class EventHooks { NpcAPI.EVENT_BUS.post(event); } - public static void onNPCDialog(EntityNPCInterface npc, EntityPlayer player, int dialogId, int optionId, Dialog dialog) { + public static boolean onNPCDialog(EntityNPCInterface npc, EntityPlayer player, int dialogId, int optionId, Dialog dialog) { if(npc == null || npc.wrappedNPC == null) - return; + return false; NpcEvent.DialogEvent event = new NpcEvent.DialogEvent(npc.wrappedNPC, player, dialogId, optionId, dialog); ScriptController.Instance.npcScripts.callScript(EnumScriptType.DIALOG, event); npc.script.callScript(EnumScriptType.DIALOG, event, "player", event.getPlayer(), "dialog", event.getDialogId(), "option", event.getOptionId(), "dialogObj", event.getDialog()); - NpcAPI.EVENT_BUS.post(event); + return NpcAPI.EVENT_BUS.post(event); } public static void onNPCDialogClosed(EntityNPCInterface npc, EntityPlayer player, int dialogId, int optionId, Dialog dialog) { diff --git a/src/main/java/noppes/npcs/NoppesUtilServer.java b/src/main/java/noppes/npcs/NoppesUtilServer.java index 4d4e1f2c3..f99c90988 100644 --- a/src/main/java/noppes/npcs/NoppesUtilServer.java +++ b/src/main/java/noppes/npcs/NoppesUtilServer.java @@ -183,6 +183,9 @@ public class NoppesUtilServer { Dialog dialog = dia.copy(player); if (!npc.isRemote()) { + if (EventHooks.onNPCDialog(npc, player, dialog.id, optionId, dialog)) { + return; + } EventHooks.onDialogOpen(new DialogEvent.DialogOpen((IPlayer) NpcAPI.Instance().getIEntity(player), dialog)); } @@ -204,10 +207,6 @@ public class NoppesUtilServer { if(!data.dialogsRead.contains(dialog.id)) data.dialogsRead.add(dialog.id); setEditingNpc(player, npc); - - if (!npc.isRemote()) { - EventHooks.onNPCDialog(npc, player, dialog.id, optionId, dialog); - } } public static void runCommand(EntityPlayer player, String name, String command){ runCommand(player, name, command, player); diff --git a/src/main/java/noppes/npcs/scripted/event/NpcEvent.java b/src/main/java/noppes/npcs/scripted/event/NpcEvent.java index c0320096e..db700380c 100644 --- a/src/main/java/noppes/npcs/scripted/event/NpcEvent.java +++ b/src/main/java/noppes/npcs/scripted/event/NpcEvent.java @@ -248,6 +248,7 @@ public class NpcEvent extends CustomNPCsEvent { } } + @Cancelable public static class DialogEvent extends NpcEvent { public final IPlayer player; public final int id;