diff --git a/src/main/java/kamkeel/npcs/command/CommandCommand.java b/src/main/java/kamkeel/npcs/command/CommandCommand.java index edc20b84d..f2a1db644 100644 --- a/src/main/java/kamkeel/npcs/command/CommandCommand.java +++ b/src/main/java/kamkeel/npcs/command/CommandCommand.java @@ -2,6 +2,8 @@ package kamkeel.npcs.command; import net.minecraft.command.CommandException; import net.minecraft.command.ICommandSender; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.util.ChunkCoordinates; import net.minecraft.util.math.BlockPos; import noppes.npcs.EventHooks; @@ -42,11 +44,13 @@ public class CommandCommand extends CommandKamkeelBase { ChunkCoordinates senderCoords = sender.getPlayerCoordinates(); IPos senderPos = NpcAPI.Instance().getIPos(new BlockPos(senderCoords.posX, senderCoords.posY, senderCoords.posZ)); - CustomNPCsEvent.ScriptedCommandEvent event = new CustomNPCsEvent.ScriptedCommandEvent(senderWorld, senderPos, sender.getCommandSenderName(), commandId, commandArgs); - EventHooks.onScriptedCommand(event); + if(sender instanceof EntityPlayer) { + CustomNPCsEvent.ScriptedCommandEvent event = new CustomNPCsEvent.ScriptedCommandEvent(senderWorld, senderPos, sender.getCommandSenderName(), commandId, commandArgs); + EventHooks.onScriptedCommand((EntityPlayer) sender, event); - if (!event.replyMessage.isEmpty()) { - sendMessage(sender, event.replyMessage); + if (!event.replyMessage.isEmpty()) { + sendMessage(sender, event.replyMessage); + } } } } diff --git a/src/main/java/kamkeel/npcs/controllers/ProfileController.java b/src/main/java/kamkeel/npcs/controllers/ProfileController.java index cf8a34928..7a3a7d8e4 100644 --- a/src/main/java/kamkeel/npcs/controllers/ProfileController.java +++ b/src/main/java/kamkeel/npcs/controllers/ProfileController.java @@ -364,8 +364,8 @@ public class ProfileController implements IProfileHandler { return ProfileOperation.error(MSG_SLOT_NOT_EXIST); } - PlayerDataScript handler = ScriptController.Instance.playerScripts; if (profile.player != null) { + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(profile.player); IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(profile.player); if (EventHooks.onProfileRemove(handler, scriptPlayer, profile, slotId, false)) return ProfileOperation.error(MSG_CANCELLED); @@ -374,6 +374,7 @@ public class ProfileController implements IProfileHandler { profile.getSlots().remove(slotId); if (profile.player != null) { + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(profile.player); IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(profile.player); EventHooks.onProfileRemove(handler, scriptPlayer, profile, slotId, true); } @@ -402,8 +403,8 @@ public class ProfileController implements IProfileHandler { } } - PlayerDataScript handler = ScriptController.Instance.playerScripts; if (profile.player != null) { + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(profile.player); IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(profile.player); if (EventHooks.onProfileCreate(handler, scriptPlayer, profile, newSlotId, false)) return ProfileOperation.error(MSG_CANCELLED); @@ -413,6 +414,7 @@ public class ProfileController implements IProfileHandler { newSlot.setLastLoaded(System.currentTimeMillis()); profile.getSlots().put(newSlotId, newSlot); if (profile.player != null) { + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(profile.player); verifySlotQuests(profile.player); save(profile.player, profile); @@ -474,7 +476,7 @@ public class ProfileController implements IProfileHandler { int prevSlot = profile.getCurrentSlotId(); - PlayerDataScript handler = ScriptController.Instance.playerScripts; + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(profile.player); IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(profile.player); if (EventHooks.onProfileChange(handler, scriptPlayer, profile, newSlotId, prevSlot, false)) return ProfileOperation.error(MSG_CANCELLED); diff --git a/src/main/java/kamkeel/npcs/network/packets/request/party/PartyInvitePacket.java b/src/main/java/kamkeel/npcs/network/packets/request/party/PartyInvitePacket.java index b4292d5ad..297e8757d 100644 --- a/src/main/java/kamkeel/npcs/network/packets/request/party/PartyInvitePacket.java +++ b/src/main/java/kamkeel/npcs/network/packets/request/party/PartyInvitePacket.java @@ -65,7 +65,7 @@ public final class PartyInvitePacket extends AbstractPacket { Party party = PartyController.Instance().getParty(senderData.partyUUID); if (!party.getIsLocked()) { PartyEvent.PartyInviteEvent partyEvent = new PartyEvent.PartyInviteEvent(party, party.getQuest(), (IPlayer) NpcAPI.Instance().getIEntity(invitedPlayer)); - EventHooks.onPartyInvite(partyEvent); + EventHooks.onPartyInvite(party, partyEvent); if (!partyEvent.isCancelled()) { invitedData.inviteToParty(party); sendInviteData((EntityPlayerMP) invitedPlayer); diff --git a/src/main/java/kamkeel/npcs/network/packets/request/party/PartyKickPacket.java b/src/main/java/kamkeel/npcs/network/packets/request/party/PartyKickPacket.java index a5a51cc0a..c81e87a4d 100644 --- a/src/main/java/kamkeel/npcs/network/packets/request/party/PartyKickPacket.java +++ b/src/main/java/kamkeel/npcs/network/packets/request/party/PartyKickPacket.java @@ -75,7 +75,7 @@ public final class PartyKickPacket extends AbstractPacket { Party party = PartyController.Instance().getParty(playerData.partyUUID); if (!party.getIsLocked()) { PartyEvent.PartyKickEvent partyEvent = new PartyEvent.PartyKickEvent(party, party.getQuest(), (IPlayer) NpcAPI.Instance().getIEntity(kickPlayer)); - EventHooks.onPartyKick(partyEvent); + EventHooks.onPartyKick(party, partyEvent); if (!partyEvent.isCancelled()) { boolean successful = party.removePlayer(kickPlayer); if (!successful) diff --git a/src/main/java/kamkeel/npcs/network/packets/request/party/PartyLeavePacket.java b/src/main/java/kamkeel/npcs/network/packets/request/party/PartyLeavePacket.java index 7b1fc7a69..d4e0ccf52 100644 --- a/src/main/java/kamkeel/npcs/network/packets/request/party/PartyLeavePacket.java +++ b/src/main/java/kamkeel/npcs/network/packets/request/party/PartyLeavePacket.java @@ -62,7 +62,7 @@ public final class PartyLeavePacket extends AbstractPacket { boolean successful = party.removePlayer(leavingPlayer); if (successful) { PartyEvent.PartyLeaveEvent partyEvent = new PartyEvent.PartyLeaveEvent(party, party.getQuest(), (IPlayer) NpcAPI.Instance().getIEntity(leavingPlayer)); - EventHooks.onPartyLeave(partyEvent); + EventHooks.onPartyLeave(party, partyEvent); sendInviteData((EntityPlayerMP) leavingPlayer); PartyController.Instance().pingPartyUpdate(party); PartyController.Instance().sendLeavingMessages(party, leavingPlayer); diff --git a/src/main/java/kamkeel/npcs/network/packets/request/party/PartySetQuestPacket.java b/src/main/java/kamkeel/npcs/network/packets/request/party/PartySetQuestPacket.java index b4c598b1e..b17bc9e96 100644 --- a/src/main/java/kamkeel/npcs/network/packets/request/party/PartySetQuestPacket.java +++ b/src/main/java/kamkeel/npcs/network/packets/request/party/PartySetQuestPacket.java @@ -63,7 +63,7 @@ public final class PartySetQuestPacket extends AbstractPacket { if (foundQuest.partyOptions.allowParty) { if (party.validateQuest(questID, true)) { PartyEvent.PartyQuestSetEvent partyEvent = new PartyEvent.PartyQuestSetEvent(party, foundQuest); - EventHooks.onPartyQuestSet(partyEvent); + EventHooks.onPartyQuestSet(party, partyEvent); if (!partyEvent.isCancelled()) { if (playerData.questData.hasActiveQuest(questID)) { QuestData questdata = new QuestData(foundQuest); diff --git a/src/main/java/noppes/npcs/EventHooks.java b/src/main/java/noppes/npcs/EventHooks.java index e2bc45e40..18931ac86 100644 --- a/src/main/java/noppes/npcs/EventHooks.java +++ b/src/main/java/noppes/npcs/EventHooks.java @@ -409,21 +409,21 @@ public class EventHooks { } public static boolean onEffectAdded(IPlayer player, IPlayerEffect effect) { - PlayerDataScript handler = ScriptController.Instance.playerScripts; + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(player); PlayerEvent.EffectEvent.Added event = new PlayerEvent.EffectEvent.Added(player, effect); handler.callScript(EffectScript.ScriptType.OnEffectAdd.function, event); return NpcAPI.EVENT_BUS.post(event); } public static boolean onEffectTick(IPlayer player, IPlayerEffect effect) { - PlayerDataScript handler = ScriptController.Instance.playerScripts; + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(player); PlayerEvent.EffectEvent.Ticked event = new PlayerEvent.EffectEvent.Ticked(player, effect); handler.callScript(EffectScript.ScriptType.OnEffectTick.function, event); return NpcAPI.EVENT_BUS.post(event); } public static boolean onEffectRemove(IPlayer player, IPlayerEffect effect, EffectEvent.ExpirationType type) { - PlayerDataScript handler = ScriptController.Instance.playerScripts; + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(player); PlayerEvent.EffectEvent.Removed event = new PlayerEvent.EffectEvent.Removed(player, effect, type); handler.callScript(EffectScript.ScriptType.OnEffectRemove.function, event); return NpcAPI.EVENT_BUS.post(event); @@ -620,21 +620,21 @@ public class EventHooks { } 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; + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(player); 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); } public static void onPlayerKeyPressed(EntityPlayerMP player, int button, boolean isCtrlPressed, boolean isShiftPressed, boolean isAltPressed, boolean isMetaPressed, boolean buttonDown, int[] heldKeys) { - PlayerDataScript handler = ScriptController.Instance.playerScripts; + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(player); KeyPressedEvent event = new KeyPressedEvent((IPlayer) NpcAPI.Instance().getIEntity(player), button, isCtrlPressed, isAltPressed, isShiftPressed, isMetaPressed, buttonDown, heldKeys); handler.callScript(EnumScriptType.KEY_PRESSED, event); NpcAPI.EVENT_BUS.post(event); } public static void onPlayerTimer(PlayerData data, int id) { - PlayerDataScript handler = ScriptController.Instance.playerScripts; + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(data.player); PlayerEvent.TimerEvent event = new PlayerEvent.TimerEvent((IPlayer) NpcAPI.Instance().getIEntity(data.player), id); handler.callScript(EnumScriptType.TIMER, event); NpcAPI.EVENT_BUS.post(event); @@ -691,8 +691,8 @@ public class EventHooks { return false; } - public static boolean onScriptedCommand(CustomNPCsEvent.ScriptedCommandEvent event) { - ScriptController.Instance.playerScripts.callScript(EnumScriptType.SCRIPT_COMMAND, event); + public static boolean onScriptedCommand(EntityPlayer player, CustomNPCsEvent.ScriptedCommandEvent event) { + ScriptController.Instance.getPlayerScripts(player).callScript(EnumScriptType.SCRIPT_COMMAND, event); return NpcAPI.EVENT_BUS.post(event); } @@ -727,45 +727,45 @@ public class EventHooks { } public static void onQuestFinished(EntityPlayer player, Quest quest) { - PlayerDataScript handler = ScriptController.Instance.playerScripts; + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(player); QuestEvent.QuestCompletedEvent event = new QuestEvent.QuestCompletedEvent((IPlayer) NpcAPI.Instance().getIEntity((EntityPlayerMP) player), quest); handler.callScript(EnumScriptType.QUEST_COMPLETED, event); NpcAPI.EVENT_BUS.post(event); } public static boolean onQuestStarted(EntityPlayer player, Quest quest) { - PlayerDataScript handler = ScriptController.Instance.playerScripts; + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(player); QuestEvent.QuestStartEvent event = new QuestEvent.QuestStartEvent((IPlayer) NpcAPI.Instance().getIEntity((EntityPlayerMP) player), quest); handler.callScript(EnumScriptType.QUEST_START, event); return NpcAPI.EVENT_BUS.post(event); } - public static void onQuestTurnedIn(QuestEvent.QuestTurnedInEvent event) { - PlayerDataScript handler = ScriptController.Instance.playerScripts; + public static void onQuestTurnedIn(EntityPlayer player, QuestEvent.QuestTurnedInEvent event) { + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(player); handler.callScript(EnumScriptType.QUEST_TURNIN, event); NpcAPI.EVENT_BUS.post(event); } - public static boolean onFactionPoints(FactionEvent.FactionPoints event) { - PlayerDataScript handler = ScriptController.Instance.playerScripts; + public static boolean onFactionPoints(EntityPlayer player, FactionEvent.FactionPoints event) { + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(player); handler.callScript(EnumScriptType.FACTION_POINTS, event); return NpcAPI.EVENT_BUS.post(event); } - public static boolean onDialogOpen(DialogEvent.DialogOpen event) { - PlayerDataScript handler = ScriptController.Instance.playerScripts; + public static boolean onDialogOpen(EntityPlayer player, DialogEvent.DialogOpen event) { + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(player); handler.callScript(EnumScriptType.DIALOG_OPEN, event); return NpcAPI.EVENT_BUS.post(event); } - public static boolean onDialogOption(DialogEvent.DialogOption event) { - PlayerDataScript handler = ScriptController.Instance.playerScripts; + public static boolean onDialogOption(EntityPlayer player, DialogEvent.DialogOption event) { + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(player); handler.callScript(EnumScriptType.DIALOG_OPTION, event); return NpcAPI.EVENT_BUS.post(event); } - public static void onDialogClosed(DialogEvent.DialogClosed event) { - PlayerDataScript handler = ScriptController.Instance.playerScripts; + public static void onDialogClosed(EntityPlayer player, DialogEvent.DialogClosed event) { + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(player); handler.callScript(EnumScriptType.DIALOG_CLOSE, event); NpcAPI.EVENT_BUS.post(event); } @@ -875,46 +875,67 @@ public class EventHooks { } public static void onPartyFinished(Party party, Quest quest) { - PlayerDataScript handler = ScriptController.Instance.playerScripts; - PartyEvent.PartyQuestCompletedEvent event = new PartyEvent.PartyQuestCompletedEvent(party, quest); - handler.callScript(EnumScriptType.PARTY_QUEST_COMPLETED, event); - NpcAPI.EVENT_BUS.post(event); + EntityPlayer player = party.getPartyLeader(); + if(player != null){ + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(player); + PartyEvent.PartyQuestCompletedEvent event = new PartyEvent.PartyQuestCompletedEvent(party, quest); + handler.callScript(EnumScriptType.PARTY_QUEST_COMPLETED, event); + NpcAPI.EVENT_BUS.post(event); + } } - public static void onPartyQuestSet(PartyEvent.PartyQuestSetEvent event) { - PlayerDataScript handler = ScriptController.Instance.playerScripts; - handler.callScript(EnumScriptType.PARTY_QUEST_SET, event); - NpcAPI.EVENT_BUS.post(event); + public static void onPartyQuestSet(Party party, PartyEvent.PartyQuestSetEvent event) { + EntityPlayer player = party.getPartyLeader(); + if(player != null){ + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(player); + handler.callScript(EnumScriptType.PARTY_QUEST_SET, event); + NpcAPI.EVENT_BUS.post(event); + } } - public static void onPartyTurnIn(PartyEvent.PartyQuestTurnedInEvent event) { - PlayerDataScript handler = ScriptController.Instance.playerScripts; - handler.callScript(EnumScriptType.PARTY_QUEST_TURNED_IN, event); - NpcAPI.EVENT_BUS.post(event); + public static void onPartyTurnIn(Party party, PartyEvent.PartyQuestTurnedInEvent event) { + EntityPlayer player = party.getPartyLeader(); + if(player != null){ + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(player); + handler.callScript(EnumScriptType.PARTY_QUEST_TURNED_IN, event); + NpcAPI.EVENT_BUS.post(event); + } } - public static void onPartyInvite(PartyEvent.PartyInviteEvent event) { - PlayerDataScript handler = ScriptController.Instance.playerScripts; - handler.callScript(EnumScriptType.PARTY_INVITE, event); - NpcAPI.EVENT_BUS.post(event); + public static void onPartyInvite(Party party, PartyEvent.PartyInviteEvent event) { + EntityPlayer player = party.getPartyLeader(); + if(player != null){ + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(player); + handler.callScript(EnumScriptType.PARTY_INVITE, event); + NpcAPI.EVENT_BUS.post(event); + } } - public static void onPartyKick(PartyEvent.PartyKickEvent event) { - PlayerDataScript handler = ScriptController.Instance.playerScripts; - handler.callScript(EnumScriptType.PARTY_KICK, event); - NpcAPI.EVENT_BUS.post(event); + public static void onPartyKick(Party party, PartyEvent.PartyKickEvent event) { + EntityPlayer player = party.getPartyLeader(); + if(player != null){ + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(player); + handler.callScript(EnumScriptType.PARTY_KICK, event); + NpcAPI.EVENT_BUS.post(event); + } } - public static void onPartyLeave(PartyEvent.PartyLeaveEvent event) { - PlayerDataScript handler = ScriptController.Instance.playerScripts; - handler.callScript(EnumScriptType.PARTY_LEAVE, event); - NpcAPI.EVENT_BUS.post(event); + public static void onPartyLeave(Party party, PartyEvent.PartyLeaveEvent event) { + EntityPlayer player = party.getPartyLeader(); + if(player != null){ + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(player); + handler.callScript(EnumScriptType.PARTY_LEAVE, event); + NpcAPI.EVENT_BUS.post(event); + } } - public static void onPartyDisband(PartyEvent.PartyDisbandEvent event) { - PlayerDataScript handler = ScriptController.Instance.playerScripts; - handler.callScript(EnumScriptType.PARTY_DISBAND, event); - NpcAPI.EVENT_BUS.post(event); + public static void onPartyDisband(Party party, PartyEvent.PartyDisbandEvent event) { + EntityPlayer player = party.getPartyLeader(); + if(player != null){ + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(player); + handler.callScript(EnumScriptType.PARTY_DISBAND, event); + NpcAPI.EVENT_BUS.post(event); + } } private static boolean postAnimationEvent(IAnimationEvent event) { @@ -924,7 +945,7 @@ public class EventHooks { EntityNPCInterface npc = (EntityNPCInterface) ((ICustomNpc) animatable).getMCEntity(); handler = npc.script; } else { - handler = ScriptController.Instance.playerScripts; + handler = ScriptController.Instance.getPlayerScripts((IPlayer) animatable); } if (handler.isClient()) diff --git a/src/main/java/noppes/npcs/NoppesUtilPlayer.java b/src/main/java/noppes/npcs/NoppesUtilPlayer.java index 50aea56b8..bbfda9523 100644 --- a/src/main/java/noppes/npcs/NoppesUtilPlayer.java +++ b/src/main/java/noppes/npcs/NoppesUtilPlayer.java @@ -265,18 +265,18 @@ public class NoppesUtilPlayer { if (dialog == null) return; DialogOption option = dialog.options.get(optionId); - if (EventHooks.onDialogOption(new DialogEvent.DialogOption((IPlayer) NpcAPI.Instance().getIEntity(player), dialog))) + if (EventHooks.onDialogOption(player, new DialogEvent.DialogOption((IPlayer) NpcAPI.Instance().getIEntity(player), dialog))) return; if (!npc.isRemote()) { EventHooks.onNPCDialogClosed(npc, player, dialogId, optionId + 1, dialog); if (!dialog.hasDialogs(player) && !dialog.hasOtherOptions()) { - EventHooks.onDialogClosed(new DialogEvent.DialogClosed((IPlayer) NpcAPI.Instance().getIEntity(player), dialog)); + EventHooks.onDialogClosed(player, new DialogEvent.DialogClosed((IPlayer) NpcAPI.Instance().getIEntity(player), dialog)); 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((IPlayer) NpcAPI.Instance().getIEntity(player), dialog)); + EventHooks.onDialogClosed(player, new DialogEvent.DialogClosed((IPlayer) NpcAPI.Instance().getIEntity(player), dialog)); return; } } @@ -460,7 +460,7 @@ public class NoppesUtilPlayer { event.itemRewards = new IItemStack[]{(IItemStack) list.get(player.getRNG().nextInt(list.size()))}; } - EventHooks.onQuestTurnedIn(event); + EventHooks.onQuestTurnedIn(player, event); if (event.isCancelled()) return false; @@ -521,7 +521,7 @@ public class NoppesUtilPlayer { EventHooks.onPartyFinished(party, data.quest); PartyEvent.PartyQuestTurnedInEvent partyEv = new PartyEvent.PartyQuestTurnedInEvent(party, data.quest); - EventHooks.onPartyTurnIn(partyEv); + EventHooks.onPartyTurnIn(party, partyEv); if (partyEv.isCancelled()) return false; @@ -576,7 +576,7 @@ public class NoppesUtilPlayer { event.itemRewards = new IItemStack[]{(IItemStack) list.get(player.getRNG().nextInt(list.size()))}; } - EventHooks.onQuestTurnedIn(event); + EventHooks.onQuestTurnedIn(player, event); if (event.isCancelled()) continue; diff --git a/src/main/java/noppes/npcs/NoppesUtilServer.java b/src/main/java/noppes/npcs/NoppesUtilServer.java index 108b66821..98c01d373 100644 --- a/src/main/java/noppes/npcs/NoppesUtilServer.java +++ b/src/main/java/noppes/npcs/NoppesUtilServer.java @@ -200,7 +200,7 @@ public class NoppesUtilServer { if (EventHooks.onNPCDialog(npc, player, dialog.id, optionId, dialog)) { return; } - if (EventHooks.onDialogOpen(new DialogEvent.DialogOpen((IPlayer) NpcAPI.Instance().getIEntity(player), dialog))) { + if (EventHooks.onDialogOpen(player, new DialogEvent.DialogOpen((IPlayer) NpcAPI.Instance().getIEntity(player), dialog))) { return; } } diff --git a/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java b/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java index c62bdfe0e..eea176ec9 100644 --- a/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java +++ b/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java @@ -52,7 +52,7 @@ public class ScriptPlayerEventHandler { EntityPlayer player = event.player; if (player.ticksExisted % 10 == 0) { - PlayerDataScript handler = ScriptController.Instance.playerScripts; + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(player); IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(player); EventHooks.onPlayerTick(handler, scriptPlayer); @@ -121,7 +121,7 @@ public class ScriptPlayerEventHandler { return; if (!event.entityPlayer.worldObj.isRemote && event.entityPlayer.worldObj instanceof WorldServer && event.entityPlayer instanceof EntityPlayerMP) { - PlayerDataScript handler = ScriptController.Instance.playerScripts; + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(event.entityPlayer); IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.entityPlayer); noppes.npcs.scripted.event.player.PlayerEvent.InteractEvent ev = new noppes.npcs.scripted.event.player.PlayerEvent.InteractEvent(scriptPlayer, 1, NpcAPI.Instance().getIEntity(event.target)); event.setCanceled(EventHooks.onPlayerInteract(handler, ev)); @@ -134,7 +134,7 @@ public class ScriptPlayerEventHandler { return; if (!event.entityPlayer.worldObj.isRemote && event.entityPlayer.worldObj instanceof WorldServer && event.entityPlayer instanceof EntityPlayerMP) { - PlayerDataScript handler = ScriptController.Instance.playerScripts; + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(event.entityPlayer); IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.entityPlayer); noppes.npcs.scripted.event.player.PlayerEvent.RangedChargeEvent ev = new noppes.npcs.scripted.event.player.PlayerEvent.RangedChargeEvent(scriptPlayer); EventHooks.onPlayerBowCharge(handler, ev); @@ -147,7 +147,7 @@ public class ScriptPlayerEventHandler { return; if (!event.entityPlayer.worldObj.isRemote && event.entityPlayer.worldObj instanceof WorldServer && event.entityPlayer instanceof EntityPlayerMP) { - PlayerDataScript handler = ScriptController.Instance.playerScripts; + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(event.entityPlayer); IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.entityPlayer); noppes.npcs.scripted.event.player.PlayerEvent.RangedLaunchedEvent ev = new noppes.npcs.scripted.event.player.PlayerEvent.RangedLaunchedEvent(scriptPlayer, event.bow, event.charge); EventHooks.onPlayerRanged(handler, ev); @@ -165,7 +165,7 @@ public class ScriptPlayerEventHandler { } if (!event.getPlayer().worldObj.isRemote && event.world instanceof WorldServer && event.getPlayer() instanceof EntityPlayerMP) { - PlayerDataScript handler = ScriptController.Instance.playerScripts; + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(event.getPlayer()); IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.getPlayer()); noppes.npcs.scripted.event.player.PlayerEvent.BreakEvent ev = new noppes.npcs.scripted.event.player.PlayerEvent.BreakEvent(scriptPlayer, NpcAPI.Instance().getIBlock(NpcAPI.Instance().getIWorld(event.world), NpcAPI.Instance().getIPos(event.x, event.y, event.z)), event.getExpToDrop()); event.setCanceled(EventHooks.onPlayerBreak(handler, ev)); @@ -179,7 +179,7 @@ public class ScriptPlayerEventHandler { return; if (event.entityPlayer.worldObj instanceof WorldServer && event.entityPlayer instanceof EntityPlayerMP) { - PlayerDataScript handler = ScriptController.Instance.playerScripts; + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(event.entityPlayer); IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.entityPlayer); event.setCanceled(EventHooks.onStartUsingItem(handler, scriptPlayer, event.duration, event.item)); } @@ -191,7 +191,7 @@ public class ScriptPlayerEventHandler { return; if (event.entityPlayer.worldObj instanceof WorldServer && event.entityPlayer instanceof EntityPlayerMP) { - PlayerDataScript handler = ScriptController.Instance.playerScripts; + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(event.entityPlayer); IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.entityPlayer); event.setCanceled(EventHooks.onUsingItem(handler, scriptPlayer, event.duration, event.item)); } @@ -203,7 +203,7 @@ public class ScriptPlayerEventHandler { return; if (event.entityPlayer.worldObj instanceof WorldServer && event.entityPlayer instanceof EntityPlayerMP) { - PlayerDataScript handler = ScriptController.Instance.playerScripts; + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(event.entityPlayer); IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.entityPlayer); event.setCanceled(EventHooks.onStopUsingItem(handler, scriptPlayer, event.duration, event.item)); } @@ -215,7 +215,7 @@ public class ScriptPlayerEventHandler { return; if (event.entityPlayer.worldObj instanceof WorldServer && event.entityPlayer instanceof EntityPlayerMP) { - PlayerDataScript handler = ScriptController.Instance.playerScripts; + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(event.entityPlayer); IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.entityPlayer); EventHooks.onFinishUsingItem(handler, scriptPlayer, event.duration, event.item); } @@ -227,7 +227,7 @@ public class ScriptPlayerEventHandler { return; if (event.entityPlayer.worldObj instanceof WorldServer && event.entityPlayer instanceof EntityPlayerMP) { - PlayerDataScript handler = ScriptController.Instance.playerScripts; + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(event.entityPlayer); IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.entityPlayer); event.setCanceled(EventHooks.onPlayerDropItems(handler, scriptPlayer, event.drops)); } @@ -239,7 +239,7 @@ public class ScriptPlayerEventHandler { return; if (event.entityPlayer.worldObj instanceof WorldServer && event.entityPlayer instanceof EntityPlayerMP) { - PlayerDataScript handler = ScriptController.Instance.playerScripts; + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(event.entityPlayer); IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.entityPlayer); EventHooks.onPlayerPickupXP(handler, scriptPlayer, event.orb); } @@ -251,7 +251,7 @@ public class ScriptPlayerEventHandler { return; if (event.player.worldObj instanceof WorldServer && event.player instanceof EntityPlayerMP) { - PlayerDataScript handler = ScriptController.Instance.playerScripts; + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(event.player); IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.player); EventHooks.onPlayerChangeDim(handler, scriptPlayer, event.fromDim, event.toDim); } @@ -278,7 +278,7 @@ public class ScriptPlayerEventHandler { } if (event.player.worldObj instanceof WorldServer && event.player instanceof EntityPlayerMP) { - PlayerDataScript handler = ScriptController.Instance.playerScripts; + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(event.player); IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.player); EventHooks.onPlayerPickUp(handler, scriptPlayer, event.pickedUp); } @@ -290,7 +290,7 @@ public class ScriptPlayerEventHandler { return; if (event.entityPlayer.worldObj instanceof WorldServer && !(event.entityPlayer.openContainer instanceof ContainerPlayer) && event.entityPlayer instanceof EntityPlayerMP) { - PlayerDataScript handler = ScriptController.Instance.playerScripts; + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(event.entityPlayer); IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.entityPlayer); EventHooks.onPlayerContainerOpen(handler, scriptPlayer, event.entityPlayer.openContainer); } @@ -302,7 +302,7 @@ public class ScriptPlayerEventHandler { return; if (event.entityPlayer.worldObj instanceof WorldServer && event.entityPlayer instanceof EntityPlayerMP) { - PlayerDataScript handler = ScriptController.Instance.playerScripts; + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(event.entityPlayer); IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.entityPlayer); EventHooks.onPlayerUseHoe(handler, scriptPlayer, event.current, event.x, event.y, event.z); } @@ -314,7 +314,7 @@ public class ScriptPlayerEventHandler { return; if (event.entityPlayer.worldObj instanceof WorldServer && event.entityPlayer instanceof EntityPlayerMP) { - PlayerDataScript handler = ScriptController.Instance.playerScripts; + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(event.entityPlayer); IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.entityPlayer); EventHooks.onPlayerSleep(handler, scriptPlayer, event.x, event.y, event.z); } @@ -326,7 +326,7 @@ public class ScriptPlayerEventHandler { return; if (event.entityPlayer.worldObj instanceof WorldServer && event.entityPlayer instanceof EntityPlayerMP) { - PlayerDataScript handler = ScriptController.Instance.playerScripts; + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(event.entityPlayer); IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.entityPlayer); EventHooks.onPlayerWakeUp(handler, scriptPlayer, event.setSpawn); } @@ -338,7 +338,7 @@ public class ScriptPlayerEventHandler { return; if (event.entityPlayer.worldObj instanceof WorldServer && event.entityPlayer instanceof EntityPlayerMP) { - PlayerDataScript handler = ScriptController.Instance.playerScripts; + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(event.entityPlayer); IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.entityPlayer); EventHooks.onPlayerFillBucket(handler, scriptPlayer, event.current, event.result); } @@ -350,7 +350,7 @@ public class ScriptPlayerEventHandler { return; if (event.entityPlayer.worldObj instanceof WorldServer && event.entityPlayer instanceof EntityPlayerMP) { - PlayerDataScript handler = ScriptController.Instance.playerScripts; + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(event.entityPlayer); IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.entityPlayer); EventHooks.onPlayerBonemeal(handler, scriptPlayer, event.x, event.y, event.z, event.world); } @@ -362,7 +362,7 @@ public class ScriptPlayerEventHandler { return; if (event.entityPlayer.worldObj instanceof WorldServer && event.entityPlayer instanceof EntityPlayerMP) { - PlayerDataScript handler = ScriptController.Instance.playerScripts; + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(event.entityPlayer); IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.entityPlayer); EventHooks.onPlayerAchievement(handler, scriptPlayer, CustomNpcs.proxy.getAchievementDesc(event.achievement)); } @@ -374,7 +374,7 @@ public class ScriptPlayerEventHandler { return; if (event.player.worldObj instanceof WorldServer && event.player instanceof EntityPlayerMP) { - PlayerDataScript handler = ScriptController.Instance.playerScripts; + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(event.player); IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.player); event.setCanceled(EventHooks.onPlayerToss(handler, scriptPlayer, event.entityItem)); } @@ -387,7 +387,7 @@ public class ScriptPlayerEventHandler { if (event.entityLiving.worldObj instanceof WorldServer) { if (event.entityLiving instanceof EntityPlayerMP) { - PlayerDataScript handler = ScriptController.Instance.playerScripts; + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts((EntityPlayer) event.entityLiving); IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.entityLiving); event.setCanceled(EventHooks.onPlayerFall(handler, scriptPlayer, event.distance)); } @@ -401,7 +401,7 @@ public class ScriptPlayerEventHandler { if (event.entityLiving.worldObj instanceof WorldServer) { if (event.entityLiving instanceof EntityPlayerMP) { - PlayerDataScript handler = ScriptController.Instance.playerScripts; + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts((EntityPlayer) event.entityLiving); IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.entityLiving); EventHooks.onPlayerJump(handler, scriptPlayer); } @@ -415,7 +415,7 @@ public class ScriptPlayerEventHandler { if (event.entity.worldObj instanceof WorldServer) { if (event.entity instanceof EntityPlayerMP) { - PlayerDataScript handler = ScriptController.Instance.playerScripts; + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts((EntityPlayer) event.entity); IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.entity); EventHooks.onPlayerLightning(handler, scriptPlayer); } @@ -429,7 +429,7 @@ public class ScriptPlayerEventHandler { if (event.entity.worldObj instanceof WorldServer) { if (event.entity instanceof EntityPlayerMP) { - PlayerDataScript handler = ScriptController.Instance.playerScripts; + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts((EntityPlayer) event.entity); IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.entity); EventHooks.onPlayerSound(handler, scriptPlayer, event.name, event.pitch, event.volume); } @@ -443,8 +443,8 @@ public class ScriptPlayerEventHandler { if (event.entityLiving.worldObj instanceof WorldServer) { Entity source = NoppesUtilServer.GetDamageSource(event.source); - PlayerDataScript handler = ScriptController.Instance.playerScripts; if (event.entityLiving instanceof EntityPlayerMP) { + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts((EntityPlayer) event.entityLiving); try { CustomEffectController.getInstance().killEffects((EntityPlayer) event.entityLiving); @@ -455,6 +455,7 @@ public class ScriptPlayerEventHandler { } if (event.source.getEntity() instanceof EntityPlayerMP) { + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts((EntityPlayer) event.source.getEntity()); IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.source.getEntity()); EventHooks.onPlayerKills(handler, scriptPlayer, event.entityLiving); } @@ -470,13 +471,14 @@ public class ScriptPlayerEventHandler { if (event.entityLiving.worldObj instanceof WorldServer) { boolean cancel = event.isCanceled(); Entity source = NoppesUtilServer.GetDamageSource(event.source); - PlayerDataScript handler = ScriptController.Instance.playerScripts; if (event.entityLiving instanceof EntityPlayerMP) { + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts((EntityPlayer) event.entityLiving); noppes.npcs.scripted.event.player.PlayerEvent.AttackedEvent pevent = new noppes.npcs.scripted.event.player.PlayerEvent.AttackedEvent((IPlayer) NpcAPI.Instance().getIEntity((EntityPlayer) event.entityLiving), source, event.ammount, event.source); cancel = EventHooks.onPlayerAttacked(handler, pevent); } if (event.source.getEntity() instanceof EntityPlayerMP) { + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts((EntityPlayer) event.source.getEntity()); float attackAmount = event.ammount; if (ConfigMain.AttributesEnabled) attackAmount = AttributeAttackUtil.calculateOutgoing((EntityPlayer) event.source.getEntity(), attackAmount); @@ -496,8 +498,6 @@ public class ScriptPlayerEventHandler { if (event.entityLiving.worldObj instanceof WorldServer) { boolean cancel = event.isCanceled(); Entity source = NoppesUtilServer.GetDamageSource(event.source); - PlayerDataScript handler = ScriptController.Instance.playerScripts; - // Player to Player Interaction if (ConfigMain.AttributesEnabled) { if (event.entityLiving instanceof EntityPlayerMP && source instanceof EntityPlayerMP) { @@ -508,12 +508,14 @@ public class ScriptPlayerEventHandler { } if (event.entityLiving instanceof EntityPlayerMP) { + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts((EntityPlayer) event.entityLiving); noppes.npcs.scripted.event.player.PlayerEvent.DamagedEvent pevent = new noppes.npcs.scripted.event.player.PlayerEvent.DamagedEvent((IPlayer) NpcAPI.Instance().getIEntity((EntityPlayer) event.entityLiving), source, event.ammount, event.source); cancel = EventHooks.onPlayerDamaged(handler, pevent); event.ammount = pevent.damage; } if (source instanceof EntityPlayerMP) { + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts((EntityPlayer) source); noppes.npcs.scripted.event.player.PlayerEvent.DamagedEntityEvent pevent1 = new noppes.npcs.scripted.event.player.PlayerEvent.DamagedEntityEvent((IPlayer) NpcAPI.Instance().getIEntity(source), event.entityLiving, event.ammount, event.source); cancel = cancel || EventHooks.onPlayerDamagedEntity(handler, pevent1); event.ammount = pevent1.damage; @@ -529,7 +531,7 @@ public class ScriptPlayerEventHandler { return; if (event.player.worldObj instanceof WorldServer && event.player instanceof EntityPlayerMP) { - PlayerDataScript handler = ScriptController.Instance.playerScripts; + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(event.player); IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.player); EventHooks.onPlayerRespawn(handler, scriptPlayer); } @@ -541,7 +543,7 @@ public class ScriptPlayerEventHandler { return; if (event.player.worldObj instanceof WorldServer && event.player instanceof EntityPlayerMP) { - PlayerDataScript handler = ScriptController.Instance.playerScripts; + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(event.player); IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.player); EventHooks.onPlayerLogin(handler, scriptPlayer); @@ -566,7 +568,7 @@ public class ScriptPlayerEventHandler { return; if (event.player.worldObj instanceof WorldServer&& event.player instanceof EntityPlayerMP) { - PlayerDataScript handler = ScriptController.Instance.playerScripts; + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(event.player); IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.player); EventHooks.onPlayerLogout(handler, scriptPlayer); } @@ -580,7 +582,7 @@ public class ScriptPlayerEventHandler { return; if (event.player.worldObj instanceof WorldServer && !event.player.equals(EntityNPCInterface.chateventPlayer)) { - PlayerDataScript handler = ScriptController.Instance.playerScripts; + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(event.player); IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.player); String message = event.message; noppes.npcs.scripted.event.player.PlayerEvent.ChatEvent ev = new noppes.npcs.scripted.event.player.PlayerEvent.ChatEvent(scriptPlayer, event.message); diff --git a/src/main/java/noppes/npcs/config/ConfigScript.java b/src/main/java/noppes/npcs/config/ConfigScript.java index 41804cdde..41968cb93 100644 --- a/src/main/java/noppes/npcs/config/ConfigScript.java +++ b/src/main/java/noppes/npcs/config/ConfigScript.java @@ -58,6 +58,8 @@ public class ConfigScript { public static Property BannedClassesProperty; public final static HashSet BannedClasses = new HashSet<>(); + public static boolean IndividualPlayerScripts = false; + public static void init(File configFile) { config = new Configuration(configFile); @@ -109,6 +111,9 @@ public class ConfigScript { "Classes must be fully written out with library names preceding them.\n" + "This is a feature ONLY AVAILABLE ON NASHORN."); + + IndividualPlayerScripts = config.get(CUSTOMIZATION, "Individual Player Scripts", false, "Acts similar to CNPC 1.12 where Player Scripts like Init are run PER Player").getBoolean(false); + // Convert to Legacy if (CustomNpcs.legacyExist) { ScriptingEnabled = LegacyConfig.ScriptingEnabled; diff --git a/src/main/java/noppes/npcs/controllers/CustomGuiController.java b/src/main/java/noppes/npcs/controllers/CustomGuiController.java index de1a0dc1d..66decf7de 100644 --- a/src/main/java/noppes/npcs/controllers/CustomGuiController.java +++ b/src/main/java/noppes/npcs/controllers/CustomGuiController.java @@ -14,6 +14,7 @@ import noppes.npcs.api.item.IItemStack; import noppes.npcs.constants.EnumGuiType; import noppes.npcs.constants.EnumScriptType; import noppes.npcs.containers.ContainerCustomGui; +import noppes.npcs.controllers.data.PlayerDataScript; import noppes.npcs.scripted.NpcAPI; import noppes.npcs.scripted.event.player.CustomGuiEvent; import noppes.npcs.scripted.gui.ScriptGui; @@ -76,53 +77,65 @@ public class CustomGuiController { public static void onButton(CustomGuiEvent.ButtonEvent event) { EntityPlayer player = (EntityPlayer) event.player.getMCEntity(); - if (checkGui(event) && getOpenGui(player).getScriptHandler() != null) { - getOpenGui(player).getScriptHandler().callScript(EnumScriptType.CUSTOM_GUI_BUTTON, event); + if(player != null){ + ScriptGui gui = getOpenGui(player); + if (checkGui(event) && gui != null) { + gui.getScriptHandler(player).callScript(EnumScriptType.CUSTOM_GUI_BUTTON, event); + } } - NpcAPI.EVENT_BUS.post(event); } public static void onSlotChange(CustomGuiEvent.SlotEvent event) { EntityPlayer player = (EntityPlayer) event.player.getMCEntity(); - if (checkGui(event) && getOpenGui(player).getScriptHandler() != null) { - getOpenGui(player).getScriptHandler().callScript(EnumScriptType.CUSTOM_GUI_SLOT, event); + if(player != null){ + ScriptGui gui = getOpenGui(player); + if (checkGui(event) && gui != null) { + gui.getScriptHandler(player).callScript(EnumScriptType.CUSTOM_GUI_SLOT, event); + } } - NpcAPI.EVENT_BUS.post(event); } public static boolean onSlotClick(CustomGuiEvent.SlotClickEvent event) { EntityPlayer player = (EntityPlayer) event.player.getMCEntity(); - if (checkGui(event) && getOpenGui(player).getScriptHandler() != null) { - (getOpenGui(player).getScriptHandler()).callScript(EnumScriptType.CUSTOM_GUI_SLOT_CLICKED, event); + if(player != null){ + ScriptGui gui = getOpenGui(player); + if (checkGui(event) && gui != null) { + gui.getScriptHandler(player).callScript(EnumScriptType.CUSTOM_GUI_SLOT_CLICKED, event); + } } return NpcAPI.EVENT_BUS.post(event); } public static void onCustomGuiUnfocused(CustomGuiEvent.UnfocusedEvent event) { EntityPlayer player = (EntityPlayer) event.player.getMCEntity(); - if (checkGui(event) && getOpenGui(player).getScriptHandler() != null) { - getOpenGui(player).getScriptHandler().callScript(EnumScriptType.CUSTOM_GUI_TEXTFIELD, event); + if(player != null){ + ScriptGui gui = getOpenGui(player); + if (checkGui(event) && gui != null) { + gui.getScriptHandler(player).callScript(EnumScriptType.CUSTOM_GUI_TEXTFIELD, event); + } } - NpcAPI.EVENT_BUS.post(event); } public static void onScrollClick(CustomGuiEvent.ScrollEvent event) { EntityPlayer player = (EntityPlayer) event.player.getMCEntity(); - if (checkGui(event) && getOpenGui(player).getScriptHandler() != null) { - getOpenGui(player).getScriptHandler().callScript(EnumScriptType.CUSTOM_GUI_SCROLL, event); + if(player != null){ + ScriptGui gui = getOpenGui(player); + if (checkGui(event) && gui != null) { + gui.getScriptHandler(player).callScript(EnumScriptType.CUSTOM_GUI_SCROLL, event); + } } - NpcAPI.EVENT_BUS.post(event); } public static void onClose(CustomGuiEvent.CloseEvent event) { - if (ScriptController.Instance.playerScripts != null) { - ScriptController.Instance.playerScripts.callScript(EnumScriptType.CUSTOM_GUI_CLOSED, event); + EntityPlayer player = (EntityPlayer) event.player.getMCEntity(); + if(player != null){ + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(player); + handler.callScript(EnumScriptType.CUSTOM_GUI_CLOSED, event); } - NpcAPI.EVENT_BUS.post(event); } diff --git a/src/main/java/noppes/npcs/controllers/PartyController.java b/src/main/java/noppes/npcs/controllers/PartyController.java index 36fbb78fb..3b7394657 100644 --- a/src/main/java/noppes/npcs/controllers/PartyController.java +++ b/src/main/java/noppes/npcs/controllers/PartyController.java @@ -95,7 +95,7 @@ public class PartyController implements IPartyHandler { Party party = this.parties.get(partyUUID); if (party != null) { PartyEvent.PartyDisbandEvent partyEvent = new PartyEvent.PartyDisbandEvent(party, party.getQuest()); - EventHooks.onPartyDisband(partyEvent); + EventHooks.onPartyDisband(party, partyEvent); for (UUID uuid : party.getPlayerUUIDs()) { EntityPlayer player = NoppesUtilServer.getPlayer(uuid); PlayerData playerData; diff --git a/src/main/java/noppes/npcs/controllers/PlayerDataController.java b/src/main/java/noppes/npcs/controllers/PlayerDataController.java index 37b36f0de..e5649a379 100644 --- a/src/main/java/noppes/npcs/controllers/PlayerDataController.java +++ b/src/main/java/noppes/npcs/controllers/PlayerDataController.java @@ -12,10 +12,7 @@ import net.minecraft.util.ChatComponentText; import noppes.npcs.CustomNpcs; import noppes.npcs.LogWriter; import noppes.npcs.config.ConfigMain; -import noppes.npcs.controllers.data.Bank; -import noppes.npcs.controllers.data.PlayerBankData; -import noppes.npcs.controllers.data.PlayerData; -import noppes.npcs.controllers.data.PlayerMail; +import noppes.npcs.controllers.data.*; import noppes.npcs.util.CacheHashMap; import noppes.npcs.util.NBTJsonUtil; @@ -295,6 +292,7 @@ public class PlayerDataController { if (data == null) { player.registerExtendedProperties("CustomNpcsData", data = new PlayerData()); data.player = player; + data.scriptData = new PlayerDataScript(player); data.load(); } diff --git a/src/main/java/noppes/npcs/controllers/ScriptController.java b/src/main/java/noppes/npcs/controllers/ScriptController.java index a1603a78e..dae8cf00e 100644 --- a/src/main/java/noppes/npcs/controllers/ScriptController.java +++ b/src/main/java/noppes/npcs/controllers/ScriptController.java @@ -11,9 +11,11 @@ import net.minecraft.server.MinecraftServer; import net.minecraftforge.event.world.WorldEvent; import noppes.npcs.CustomNpcs; import noppes.npcs.LogWriter; +import noppes.npcs.api.entity.IPlayer; import noppes.npcs.config.ConfigScript; import noppes.npcs.controllers.data.ForgeDataScript; import noppes.npcs.controllers.data.GlobalNPCDataScript; +import noppes.npcs.controllers.data.PlayerData; import noppes.npcs.controllers.data.PlayerDataScript; import noppes.npcs.entity.EntityNPCInterface; import noppes.npcs.scripted.ScriptWorld; @@ -148,6 +150,20 @@ public class ScriptController { } } + public PlayerDataScript getPlayerScripts(EntityPlayer player){ + if(ConfigScript.IndividualPlayerScripts) + return PlayerData.get(player).scriptData; + + return this.playerScripts; + } + + public PlayerDataScript getPlayerScripts(IPlayer player){ + if(ConfigScript.IndividualPlayerScripts) + return PlayerData.get((EntityPlayer) player.getMCEntity()).scriptData; + + return this.playerScripts; + } + public boolean loadGlobalNPCScripts() { this.globalNpcScripts.clear(); File file = this.npcScriptsFile(); diff --git a/src/main/java/noppes/npcs/controllers/data/PlayerData.java b/src/main/java/noppes/npcs/controllers/data/PlayerData.java index f8eda5914..54ffc97a1 100644 --- a/src/main/java/noppes/npcs/controllers/data/PlayerData.java +++ b/src/main/java/noppes/npcs/controllers/data/PlayerData.java @@ -51,6 +51,8 @@ public class PlayerData implements IExtendedEntityProperties, IPlayerData { public DataSkinOverlays skinOverlays = new DataSkinOverlays(this); public MagicData magicData = new MagicData(); + public PlayerDataScript scriptData; + public EntityNPCInterface editingNpc; public NBTTagCompound cloned; diff --git a/src/main/java/noppes/npcs/controllers/data/PlayerDataScript.java b/src/main/java/noppes/npcs/controllers/data/PlayerDataScript.java index 8c4fe6860..17aaf809b 100644 --- a/src/main/java/noppes/npcs/controllers/data/PlayerDataScript.java +++ b/src/main/java/noppes/npcs/controllers/data/PlayerDataScript.java @@ -26,8 +26,13 @@ public class PlayerDataScript implements INpcScriptHandler { private EntityPlayer player; private IPlayer playerAPI; private long lastPlayerUpdate = 0L; - public long lastInited = -1L; - public boolean enabled = false; + + public long lastInited = -1; + public boolean hadInteract = true; + private boolean enabled = false; + + private static Map console = new TreeMap(); + private static List errored = new ArrayList(); public PlayerDataScript(EntityPlayer player) { if (player != null) { @@ -36,7 +41,9 @@ public class PlayerDataScript implements INpcScriptHandler { } public void clear() { - this.scripts = new ArrayList(); + console = new TreeMap(); + errored = new ArrayList(); + scripts = new ArrayList(); } public void readFromNBT(NBTTagCompound compound) { @@ -54,6 +61,7 @@ public class PlayerDataScript implements INpcScriptHandler { } } this.enabled = compound.getBoolean("ScriptEnabled"); + console = NBTTags.GetLongStringMap(compound.getTagList("ScriptConsole", 10)); } public NBTTagCompound writeToNBT(NBTTagCompound compound) { @@ -63,6 +71,7 @@ public class PlayerDataScript implements INpcScriptHandler { } compound.setString("ScriptLanguage", this.scriptLanguage); compound.setBoolean("ScriptEnabled", this.enabled); + compound.setTag("ScriptConsole", NBTTags.NBTLongStringMap(console)); return compound; } @@ -76,7 +85,42 @@ public class PlayerDataScript implements INpcScriptHandler { @Override public void callScript(String hookName, Event event) { - if (this.isEnabled()) { + if(!isEnabled()) + return; + + if(ConfigScript.IndividualPlayerScripts){ + if(ScriptController.Instance.lastLoaded > lastInited || ScriptController.Instance.lastPlayerUpdate > lastPlayerUpdate){ + lastInited = ScriptController.Instance.lastLoaded; + errored.clear(); + if(player != null) { + scripts.clear(); + for(ScriptContainer script : ScriptController.Instance.playerScripts.scripts){ + ScriptContainer s = new ScriptContainer(this); + s.readFromNBT(script.writeToNBT(new NBTTagCompound())); + scripts.add(s); + } + } + lastPlayerUpdate = ScriptController.Instance.lastPlayerUpdate; + if (!Objects.equals(hookName, EnumScriptType.INIT.function) && event instanceof PlayerEvent) { + PlayerEvent playerEvent = (PlayerEvent) event; + EventHooks.onPlayerInit(this, playerEvent.player); + } + } + for(int i = 0; i < scripts.size(); i++){ + ScriptContainer script = scripts.get(i); + if(errored.contains(i)) + continue; + script.run(hookName, event); + if(script.errored){ + errored.add(i); + } + for(Entry entry : script.console.entrySet()){ + if(!console.containsKey(entry.getKey())) + console.put(entry.getKey(), " tab " + (i + 1) + ":\n" + entry.getValue()); + } + script.console.clear(); + } + } else { if (ScriptController.Instance.lastLoaded > this.lastInited || ScriptController.Instance.lastPlayerUpdate > this.lastPlayerUpdate) { this.lastInited = ScriptController.Instance.lastLoaded; this.lastPlayerUpdate = ScriptController.Instance.lastPlayerUpdate; @@ -146,6 +190,9 @@ public class PlayerDataScript implements INpcScriptHandler { } public Map getConsoleText() { + if(ConfigScript.IndividualPlayerScripts) + return console; + TreeMap map = new TreeMap<>(); int tab = 0; for (ScriptContainer script : this.getScripts()) { @@ -159,8 +206,12 @@ public class PlayerDataScript implements INpcScriptHandler { } public void clearConsole() { - for (ScriptContainer script : this.getScripts()) { - script.console.clear(); + if(ConfigScript.IndividualPlayerScripts) + console.clear(); + else { + for (ScriptContainer script : this.getScripts()) { + script.console.clear(); + } } } diff --git a/src/main/java/noppes/npcs/controllers/data/PlayerFactionData.java b/src/main/java/noppes/npcs/controllers/data/PlayerFactionData.java index 8f2cd45bf..968cc2949 100644 --- a/src/main/java/noppes/npcs/controllers/data/PlayerFactionData.java +++ b/src/main/java/noppes/npcs/controllers/data/PlayerFactionData.java @@ -62,7 +62,7 @@ public class PlayerFactionData implements IPlayerFactionData { } public void increasePoints(int factionId, int points, EntityPlayer player) { - if (EventHooks.onFactionPoints(new FactionEvent.FactionPoints((IPlayer) NpcAPI.Instance().getIEntity((EntityPlayerMP) player), FactionController.getInstance().get(factionId), points < 0, points))) + if (EventHooks.onFactionPoints(player, new FactionEvent.FactionPoints((IPlayer) NpcAPI.Instance().getIEntity((EntityPlayerMP) player), FactionController.getInstance().get(factionId), points < 0, points))) return; if (!factionData.containsKey(factionId)) { diff --git a/src/main/java/noppes/npcs/scripted/gui/ScriptGui.java b/src/main/java/noppes/npcs/scripted/gui/ScriptGui.java index 7f7e99bbb..8499a46da 100644 --- a/src/main/java/noppes/npcs/scripted/gui/ScriptGui.java +++ b/src/main/java/noppes/npcs/scripted/gui/ScriptGui.java @@ -1,5 +1,6 @@ package noppes.npcs.scripted.gui; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; @@ -63,8 +64,8 @@ public class ScriptGui implements ICustomGui { return this.slots; } - public PlayerDataScript getScriptHandler() { - return ScriptController.Instance.playerScripts;//this.scriptHandler; + public PlayerDataScript getScriptHandler(EntityPlayer player) { + return ScriptController.Instance.getPlayerScripts(player); } public void setSize(int width, int height) {