diff --git a/src/main/java/foxz/command/CmdFaction.java b/src/main/java/foxz/command/CmdFaction.java index bd577e39b..fbad7b91f 100644 --- a/src/main/java/foxz/command/CmdFaction.java +++ b/src/main/java/foxz/command/CmdFaction.java @@ -2,7 +2,10 @@ package foxz.command; import java.util.List; +import net.minecraft.entity.player.EntityPlayerMP; +import noppes.npcs.EventHooks; import noppes.npcs.controllers.Faction; +import noppes.npcs.controllers.FactionController; import noppes.npcs.controllers.PlayerData; import noppes.npcs.controllers.PlayerFactionData; import foxz.commandhelper.ChMcLogger; @@ -10,6 +13,8 @@ import foxz.commandhelper.annotations.Command; import foxz.commandhelper.annotations.SubCommand; import foxz.commandhelper.permissions.OpOnly; import foxz.commandhelper.permissions.ParamCheck; +import noppes.npcs.scripted.entity.ScriptPlayer; +import noppes.npcs.scripted.event.FactionEvent; @Command( name = "faction", @@ -43,7 +48,7 @@ public class CmdFaction extends ChMcLogger { for(PlayerData playerdata : data){ PlayerFactionData playerfactiondata = playerdata.factionData; - playerfactiondata.increasePoints(factionid, points); + playerfactiondata.increasePoints(factionid, points, playerdata.player); } return true; } @@ -64,7 +69,7 @@ public class CmdFaction extends ChMcLogger { int factionid = this.selectedFaction.id; for(PlayerData playerdata : data){ PlayerFactionData playerfactiondata = playerdata.factionData; - playerfactiondata.increasePoints(factionid, -points); + playerfactiondata.increasePoints(factionid, -points, playerdata.player); } return true; } diff --git a/src/main/java/noppes/npcs/EventHooks.java b/src/main/java/noppes/npcs/EventHooks.java index ec95ced3b..5b39a96f9 100644 --- a/src/main/java/noppes/npcs/EventHooks.java +++ b/src/main/java/noppes/npcs/EventHooks.java @@ -363,4 +363,22 @@ public class EventHooks { handler.callScript(EnumScriptType.FACTION_POINTS, event); WrapperNpcAPI.EVENT_BUS.post(event); } + + public static void onDialogOpen(DialogEvent.DialogOpen event){ + PlayerDataScript handler = ScriptController.Instance.playerScripts; + handler.callScript(EnumScriptType.DIALOG_OPEN, event); + WrapperNpcAPI.EVENT_BUS.post(event); + } + + public static void onDialogOption(DialogEvent.DialogOption event){ + PlayerDataScript handler = ScriptController.Instance.playerScripts; + handler.callScript(EnumScriptType.DIALOG_OPTION, event); + WrapperNpcAPI.EVENT_BUS.post(event); + } + + public static void onDialogClosed(DialogEvent.DialogClosed event){ + PlayerDataScript handler = ScriptController.Instance.playerScripts; + handler.callScript(EnumScriptType.DIALOG_CLOSE, event); + WrapperNpcAPI.EVENT_BUS.post(event); + } } \ No newline at end of file diff --git a/src/main/java/noppes/npcs/NoppesUtilPlayer.java b/src/main/java/noppes/npcs/NoppesUtilPlayer.java index be1a8aa76..1747ecc9c 100644 --- a/src/main/java/noppes/npcs/NoppesUtilPlayer.java +++ b/src/main/java/noppes/npcs/NoppesUtilPlayer.java @@ -46,6 +46,7 @@ import noppes.npcs.roles.RoleFollower; import cpw.mods.fml.common.network.internal.FMLProxyPacket; import noppes.npcs.scripted.NpcAPI; import noppes.npcs.scripted.entity.ScriptPlayer; +import noppes.npcs.scripted.event.DialogEvent; import noppes.npcs.scripted.event.QuestEvent; import noppes.npcs.scripted.interfaces.IItemStack; @@ -264,13 +265,19 @@ public class NoppesUtilPlayer { Dialog dialog = DialogController.instance.dialogs.get(dialogId); if(dialog == null) return; - npc.script.callScript(EnumScriptType.DIALOG_OPTION, "player", player, "dialog", dialogId, "option", optionId + 1); + + EventHooks.onDialogOption(new DialogEvent.DialogOption(new ScriptPlayer((EntityPlayerMP) player), dialog)); + npc.script.callScript(EnumScriptType.DIALOG_CLOSE, "player", player, "dialog", dialogId, "option", optionId + 1); - if(!dialog.hasDialogs(player) && !dialog.hasOtherOptions()) + if(!dialog.hasDialogs(player) && !dialog.hasOtherOptions()) { + EventHooks.onDialogClosed(new DialogEvent.DialogClosed(new ScriptPlayer((EntityPlayerMP) player), dialog)); return; + } DialogOption option = dialog.options.get(optionId); - if(option == null || option.optionType == EnumOptionType.DialogOption && (!option.isAvailable(player) || !option.hasDialog()) || option.optionType == EnumOptionType.Disabled || option.optionType == EnumOptionType.QuitOption) - return; + if(option == null || option.optionType == EnumOptionType.DialogOption && (!option.isAvailable(player) || !option.hasDialog()) || option.optionType == EnumOptionType.Disabled || option.optionType == EnumOptionType.QuitOption) { + EventHooks.onDialogClosed(new DialogEvent.DialogClosed(new ScriptPlayer((EntityPlayerMP) player), dialog)); + return; + } if(option.optionType == EnumOptionType.RoleOption){ if(npc.roleInterface != null) npc.roleInterface.interact(player); diff --git a/src/main/java/noppes/npcs/NoppesUtilServer.java b/src/main/java/noppes/npcs/NoppesUtilServer.java index d5fc4f700..4d0c7e8d9 100644 --- a/src/main/java/noppes/npcs/NoppesUtilServer.java +++ b/src/main/java/noppes/npcs/NoppesUtilServer.java @@ -72,6 +72,8 @@ import noppes.npcs.controllers.TransportLocation; import noppes.npcs.entity.EntityDialogNpc; import noppes.npcs.entity.EntityNPCInterface; import noppes.npcs.roles.RoleTransporter; +import noppes.npcs.scripted.entity.ScriptPlayer; +import noppes.npcs.scripted.event.DialogEvent; import noppes.npcs.scripted.event.ScriptEventDialog; public class NoppesUtilServer { @@ -180,6 +182,9 @@ public class NoppesUtilServer { public static void openDialog(EntityPlayer player, EntityNPCInterface npc, Dialog dia){ Dialog dialog = dia.copy(player); + + EventHooks.onDialogOpen(new DialogEvent.DialogOpen(new ScriptPlayer((EntityPlayerMP) player), dialog)); + if(npc instanceof EntityDialogNpc){ dialog.hideNPC = true; Server.sendData((EntityPlayerMP)player, EnumPacketClient.DIALOG_DUMMY, npc.getCommandSenderName(), dialog.writeToNBT(new NBTTagCompound())); diff --git a/src/main/java/noppes/npcs/client/gui/script/GuiScriptInterface.java b/src/main/java/noppes/npcs/client/gui/script/GuiScriptInterface.java index 88994b9cc..dc0e06c8e 100644 --- a/src/main/java/noppes/npcs/client/gui/script/GuiScriptInterface.java +++ b/src/main/java/noppes/npcs/client/gui/script/GuiScriptInterface.java @@ -139,6 +139,9 @@ public class GuiScriptInterface extends GuiNPCInterface implements GuiYesNoCallb hookList.add("questCompleted"); hookList.add("questTurnIn"); hookList.add("factionPoints"); + hookList.add("dialogOpen"); + hookList.add("dialogOption"); + hookList.add("dialogClose"); hookList.add("customGuiClosed"); hookList.add("customGuiButton"); hookList.add("customGuiSlot"); diff --git a/src/main/java/noppes/npcs/constants/EnumScriptType.java b/src/main/java/noppes/npcs/constants/EnumScriptType.java index 655769d39..7ac39469d 100644 --- a/src/main/java/noppes/npcs/constants/EnumScriptType.java +++ b/src/main/java/noppes/npcs/constants/EnumScriptType.java @@ -11,7 +11,7 @@ public enum EnumScriptType { TARGET("target"), COLLIDE("collide"), KILLS("kills"), - DIALOG_OPTION("dialogOption"), + DIALOG_CLOSE("dialogClose"), TIMER("timer"), ATTACK_MELEE("meleeAttack"), @@ -36,7 +36,6 @@ public enum EnumScriptType { LOGOUT("logout"), CHAT("chat"), DAMAGED_ENTITY("damagedEntity"), - DIALOG_CLOSE("dialogClose"), SPAWN("spawn"), TOSSED("tossed"), PICKEDUP("pickedUp"), @@ -44,11 +43,13 @@ public enum EnumScriptType { PROJECTILE_TICK("projectileTick"), PROJECTILE_IMPACT("projectileImpact"), LEVEL_UP("levelUp"), + KEY_PRESSED("keyPressed"), QUEST_START("questStart"), QUEST_COMPLETED("questCompleted"), QUEST_TURNIN("questTurnIn"), FACTION_POINTS("factionPoints"), - KEY_PRESSED("keyPressed"), + DIALOG_OPEN("dialogOpen"), + DIALOG_OPTION("dialogOption"), CUSTOM_CHEST_CLOSED("customChestClosed"), CUSTOM_CHEST_CLICKED("customChestClicked"), SCRIPT_COMMAND("scriptCommand"), diff --git a/src/main/java/noppes/npcs/controllers/FactionOptions.java b/src/main/java/noppes/npcs/controllers/FactionOptions.java index 1a136af19..9e07aef0e 100644 --- a/src/main/java/noppes/npcs/controllers/FactionOptions.java +++ b/src/main/java/noppes/npcs/controllers/FactionOptions.java @@ -60,14 +60,12 @@ public class FactionOptions { if(faction == null) return; - EventHooks.onFactionPoints(new FactionEvent.FactionPoints(new ScriptPlayer((EntityPlayerMP) player), faction, decrease, points)); - if(!faction.hideFaction){ String message = decrease?"faction.decreasepoints":"faction.increasepoints"; player.addChatMessage(new ChatComponentTranslation(message, faction.name, points)); } - data.increasePoints(factionId, decrease?-points:points); + data.increasePoints(factionId, decrease?-points:points,player); } } diff --git a/src/main/java/noppes/npcs/controllers/PlayerFactionData.java b/src/main/java/noppes/npcs/controllers/PlayerFactionData.java index 7a8b5e157..3455f4bf6 100644 --- a/src/main/java/noppes/npcs/controllers/PlayerFactionData.java +++ b/src/main/java/noppes/npcs/controllers/PlayerFactionData.java @@ -2,8 +2,13 @@ package noppes.npcs.controllers; import java.util.HashMap; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; +import noppes.npcs.EventHooks; +import noppes.npcs.scripted.entity.ScriptPlayer; +import noppes.npcs.scripted.event.FactionEvent; public class PlayerFactionData { public HashMap factionData = new HashMap(); @@ -45,7 +50,8 @@ public class PlayerFactionData { return factionData.get(id); } - public void increasePoints(int factionId, int points) { + public void increasePoints(int factionId, int points, EntityPlayer player) { + EventHooks.onFactionPoints(new FactionEvent.FactionPoints(new ScriptPlayer((EntityPlayerMP) player), FactionController.getInstance().get(factionId), points < 0, points)); if(!factionData.containsKey(factionId)){ Faction faction = FactionController.getInstance().get(factionId); factionData.put(factionId, faction == null? -1 : faction.defaultPoints); diff --git a/src/main/java/noppes/npcs/scripted/entity/ScriptPlayer.java b/src/main/java/noppes/npcs/scripted/entity/ScriptPlayer.java index 74530f13a..042302d19 100644 --- a/src/main/java/noppes/npcs/scripted/entity/ScriptPlayer.java +++ b/src/main/java/noppes/npcs/scripted/entity/ScriptPlayer.java @@ -11,19 +11,18 @@ import net.minecraft.stats.StatList; import net.minecraft.util.ChatComponentTranslation; import net.minecraft.util.ChunkCoordinates; import net.minecraft.world.WorldSettings; -import noppes.npcs.CustomNpcsPermissions; -import noppes.npcs.NoppesStringUtils; -import noppes.npcs.NoppesUtilPlayer; -import noppes.npcs.Server; +import noppes.npcs.*; import noppes.npcs.constants.EnumPacketClient; import noppes.npcs.constants.EnumQuestType; import noppes.npcs.containers.ContainerCustomGui; import noppes.npcs.controllers.*; +import noppes.npcs.entity.EntityDialogNpc; import noppes.npcs.scripted.CustomNPCsException; import noppes.npcs.scripted.NpcAPI; import noppes.npcs.scripted.ScriptItemStack; import noppes.npcs.scripted.ScriptPixelmonPlayerData; import noppes.npcs.scripted.constants.EntityType; +import noppes.npcs.scripted.event.FactionEvent; import noppes.npcs.scripted.gui.ScriptGui; import noppes.npcs.scripted.handler.data.IQuest; import noppes.npcs.scripted.interfaces.IContainer; @@ -86,6 +85,14 @@ public class ScriptPlayer extends ScriptLivingBase PlayerQuestData data = PlayerDataController.instance.getPlayerData(player).questData; return data.activeQuests.containsKey(id); } + + public void showDialog(int id){ + Dialog dialog = (Dialog) DialogController.instance.get(id); + if(dialog == null) + return; + + NoppesUtilServer.openDialog(player, new EntityDialogNpc(this.player.worldObj), dialog); + } public boolean hasReadDialog(int id){ PlayerDialogData data = PlayerDataController.instance.getPlayerData(player).dialogData; @@ -161,7 +168,7 @@ public class ScriptPlayer extends ScriptLivingBase */ public void addFactionPoints(int faction, int points){ PlayerData data = PlayerDataController.instance.getPlayerData(player); - data.factionData.increasePoints(faction, points); + data.factionData.increasePoints(faction, points, player); } /** diff --git a/src/main/java/noppes/npcs/scripted/event/DialogEvent.java b/src/main/java/noppes/npcs/scripted/event/DialogEvent.java new file mode 100644 index 000000000..8e9f9b34f --- /dev/null +++ b/src/main/java/noppes/npcs/scripted/event/DialogEvent.java @@ -0,0 +1,32 @@ +package noppes.npcs.scripted.event; + +import noppes.npcs.scripted.handler.data.IDialog; +import noppes.npcs.scripted.interfaces.IPlayer; + +public class DialogEvent extends CustomNPCsEvent { + public final IDialog dialog; + public final IPlayer player; + + public DialogEvent(IPlayer player, IDialog dialog){ + this.dialog = dialog; + this.player = player; + } + + public static class DialogOpen extends DialogEvent { + public DialogOpen(IPlayer player, IDialog dialog) { + super(player, dialog); + } + } + + public static class DialogOption extends DialogEvent { + public DialogOption(IPlayer player, IDialog dialog) { + super(player, dialog); + } + } + + public static class DialogClosed extends DialogEvent { + public DialogClosed(IPlayer player, IDialog dialog){ + super(player, dialog); + } + } +} diff --git a/src/main/java/noppes/npcs/scripted/interfaces/IPlayer.java b/src/main/java/noppes/npcs/scripted/interfaces/IPlayer.java index c83d258a8..cafe9629e 100644 --- a/src/main/java/noppes/npcs/scripted/interfaces/IPlayer.java +++ b/src/main/java/noppes/npcs/scripted/interfaces/IPlayer.java @@ -23,6 +23,8 @@ public interface IPlayer extends IEntityLivingBase public boolean hasActiveQuest(int id); + public void showDialog(int id); + public boolean hasReadDialog(int id); /**