diff --git a/src/api b/src/api index 08979f139..cf6f122f9 160000 --- a/src/api +++ b/src/api @@ -1 +1 @@ -Subproject commit 08979f13927dcb43fba933933b9957ee333a4a69 +Subproject commit cf6f122f9b4070182f3907ebd7f7498c23257da2 diff --git a/src/main/java/noppes/npcs/EventHooks.java b/src/main/java/noppes/npcs/EventHooks.java index 7353af13c..bc6109e09 100644 --- a/src/main/java/noppes/npcs/EventHooks.java +++ b/src/main/java/noppes/npcs/EventHooks.java @@ -23,6 +23,7 @@ import noppes.npcs.api.IWorld; import noppes.npcs.api.entity.IEntity; import noppes.npcs.api.entity.IPlayer; import noppes.npcs.api.entity.IProjectile; +import noppes.npcs.api.event.IPartyEvent; import noppes.npcs.api.gui.ICustomGui; import noppes.npcs.api.gui.IItemSlot; import noppes.npcs.api.item.IItemCustom; @@ -765,4 +766,47 @@ public class EventHooks { handler.callScript(EnumScriptType.TIMER, event); NpcAPI.EVENT_BUS.post(event); } + + 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); + } + + 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 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 onPartyInvite(PartyEvent.PartyInviteEvent event){ + PlayerDataScript handler = ScriptController.Instance.playerScripts; + 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 onPartyLeave(PartyEvent.PartyLeaveEvent event){ + PlayerDataScript handler = ScriptController.Instance.playerScripts; + 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); + } } diff --git a/src/main/java/noppes/npcs/NoppesUtilPlayer.java b/src/main/java/noppes/npcs/NoppesUtilPlayer.java index 3e3388801..59513481f 100644 --- a/src/main/java/noppes/npcs/NoppesUtilPlayer.java +++ b/src/main/java/noppes/npcs/NoppesUtilPlayer.java @@ -29,6 +29,7 @@ import noppes.npcs.roles.RoleFollower; import noppes.npcs.scripted.NpcAPI; import noppes.npcs.scripted.ScriptSound; import noppes.npcs.scripted.event.DialogEvent; +import noppes.npcs.scripted.event.PartyEvent; import noppes.npcs.scripted.event.QuestEvent; import java.io.IOException; @@ -468,6 +469,14 @@ public class NoppesUtilPlayer { if(quest == null) return false; + if (data.quest.completion == EnumQuestCompletion.Instant) + EventHooks.onPartyFinished(party, data.quest); + + PartyEvent.PartyQuestTurnedInEvent partyEv = new PartyEvent.PartyQuestTurnedInEvent(party, data.quest); + EventHooks.onPartyTurnIn(partyEv); + if (partyEv.isCancelled()) + return false; + PartyOptions partyOptions = quest.partyOptions; EnumPartyExchange complete = partyOptions.completeFor; EnumPartyExchange reward = partyOptions.rewardControl; @@ -481,7 +490,6 @@ public class NoppesUtilPlayer { if(playerData == null) continue; - boolean isLeader = party.getLeaderUUID().equals(player.getUniqueID()); boolean hasActiveQuest = playerData.questData.hasActiveQuest(quest.getId()); boolean hasFinishedQuest = playerData.questData.hasFinishedQuest(quest.getId()); @@ -521,7 +529,7 @@ public class NoppesUtilPlayer { EventHooks.onQuestTurnedIn(event); if (event.isCancelled()) - return false; + continue; IItemStack[] var12 = event.itemRewards; int var14 = var12.length; @@ -566,7 +574,6 @@ public class NoppesUtilPlayer { } playerData.save(); - if(meetsComplete){ Server.sendData((EntityPlayerMP)player, EnumPacketClient.QUEST_COMPLETION, data.quest.writeToNBT(new NBTTagCompound())); } diff --git a/src/main/java/noppes/npcs/PacketHandlerServer.java b/src/main/java/noppes/npcs/PacketHandlerServer.java index 13c777f28..8f823d3f3 100644 --- a/src/main/java/noppes/npcs/PacketHandlerServer.java +++ b/src/main/java/noppes/npcs/PacketHandlerServer.java @@ -44,6 +44,8 @@ import noppes.npcs.roles.RoleCompanion; import noppes.npcs.roles.RoleTrader; import noppes.npcs.roles.RoleTransporter; import noppes.npcs.scripted.NpcAPI; +import noppes.npcs.scripted.event.PartyEvent; +import noppes.npcs.scripted.event.QuestEvent; import noppes.npcs.scripted.gui.ScriptGui; import noppes.npcs.scripted.item.ScriptCustomItem; @@ -124,7 +126,6 @@ public class PacketHandlerServer{ if (playerData.partyUUID != null) { PartyController.Instance().disbandParty(playerData.partyUUID); } - NBTTagCompound compound = new NBTTagCompound(); compound.setBoolean("Disband", true); Server.sendData(player, EnumPacketClient.PARTY_DATA, compound); @@ -135,11 +136,15 @@ public class PacketHandlerServer{ if (playerData.partyUUID != null) { Party party = PartyController.Instance().getParty(playerData.partyUUID); if (!party.getIsLocked()) { - boolean successful = party.removePlayer(kickPlayer); - if(successful){ - sendInviteData((EntityPlayerMP) kickPlayer); - PartyController.Instance().pingPartyUpdate(party); - PartyController.Instance().sendKickMessages(party, kickPlayer); + PartyEvent.PartyKickEvent partyEvent = new PartyEvent.PartyKickEvent(party, party.getQuest(), (IPlayer) NpcAPI.Instance().getIEntity(kickPlayer)); + EventHooks.onPartyKick(partyEvent); + if (!partyEvent.isCancelled()){ + boolean successful = party.removePlayer(kickPlayer); + if(successful){ + sendInviteData((EntityPlayerMP) kickPlayer); + PartyController.Instance().pingPartyUpdate(party); + PartyController.Instance().sendKickMessages(party, kickPlayer); + } } } } @@ -152,6 +157,8 @@ public class PacketHandlerServer{ Party party = PartyController.Instance().getParty(playerData.partyUUID); boolean successful = party.removePlayer(leavingPlayer); if(successful){ + PartyEvent.PartyLeaveEvent partyEvent = new PartyEvent.PartyLeaveEvent(party, party.getQuest(), (IPlayer) NpcAPI.Instance().getIEntity(leavingPlayer)); + EventHooks.onPartyLeave(partyEvent); sendInviteData((EntityPlayerMP) leavingPlayer); PartyController.Instance().pingPartyUpdate(party); PartyController.Instance().sendLeavingMessages(party, leavingPlayer); @@ -181,8 +188,12 @@ public class PacketHandlerServer{ if (senderData.partyUUID != null && invitedData.partyUUID == null) {//only send invite if player is not in a party Party party = PartyController.Instance().getParty(senderData.partyUUID); if (!party.getIsLocked()) { - invitedData.inviteToParty(party); - sendInviteData((EntityPlayerMP) invitedPlayer); + PartyEvent.PartyInviteEvent partyEvent = new PartyEvent.PartyInviteEvent(party, party.getQuest(), (IPlayer) NpcAPI.Instance().getIEntity(invitedPlayer)); + EventHooks.onPartyInvite(partyEvent); + if (!partyEvent.isCancelled()){ + invitedData.inviteToParty(party); + sendInviteData((EntityPlayerMP) invitedPlayer); + } } } } @@ -214,13 +225,17 @@ public class PacketHandlerServer{ Quest foundQuest = QuestController.Instance.quests.get(questID); if(foundQuest != null){ if (foundQuest.partyOptions.allowParty) { - if(party.validateQuest(questID)){ - if(playerData.questData.hasActiveQuest(questID)){ - QuestData questdata = new QuestData(foundQuest); - playerData.questData.activeQuests.put(questID, questdata); + if(party.validateQuest(questID, true)){ + PartyEvent.PartyQuestSetEvent partyEvent = new PartyEvent.PartyQuestSetEvent(party, foundQuest); + EventHooks.onPartyQuestSet(partyEvent); + if (!partyEvent.isCancelled()){ + if(playerData.questData.hasActiveQuest(questID)){ + QuestData questdata = new QuestData(foundQuest); + playerData.questData.activeQuests.put(questID, questdata); + } + party.setQuest(foundQuest); + PartyController.Instance().sendQuestChat(party, "party.setChat", " ", foundQuest.title); } - party.setQuest(foundQuest); - PartyController.Instance().sendQuestChat(party, "party.setChat", " ", foundQuest.title); } } } diff --git a/src/main/java/noppes/npcs/ServerEventsHandler.java b/src/main/java/noppes/npcs/ServerEventsHandler.java index 4bb9453cd..bb88a0e7f 100644 --- a/src/main/java/noppes/npcs/ServerEventsHandler.java +++ b/src/main/java/noppes/npcs/ServerEventsHandler.java @@ -443,6 +443,7 @@ public class ServerEventsHandler { quest.setKilled(data, killed); } + PartyController.Instance().pingPartyQuestObjectiveUpdate(party); PartyController.Instance().checkQuestCompletion(party, EnumQuestType.Kill); } diff --git a/src/main/java/noppes/npcs/blocks/tiles/TileWaypoint.java b/src/main/java/noppes/npcs/blocks/tiles/TileWaypoint.java index 6927b7eb7..2869540c5 100644 --- a/src/main/java/noppes/npcs/blocks/tiles/TileWaypoint.java +++ b/src/main/java/noppes/npcs/blocks/tiles/TileWaypoint.java @@ -54,6 +54,7 @@ public class TileWaypoint extends TileEntity { boolean isPartyLeader = player.getUniqueID().equals(party.getLeaderUUID()); if(partyQuestLocation.setFoundParty(party, player, name, isPartyLeader)){ player.addChatMessage(new ChatComponentTranslation(name + " " + StatCollector.translateToLocal("quest.found"))); + PartyController.Instance().pingPartyQuestObjectiveUpdate(party); PartyController.Instance().checkQuestCompletion(party, EnumQuestType.Location); } } diff --git a/src/main/java/noppes/npcs/client/gui/player/inventory/GuiParty.java b/src/main/java/noppes/npcs/client/gui/player/inventory/GuiParty.java index 13822a997..08739d667 100644 --- a/src/main/java/noppes/npcs/client/gui/player/inventory/GuiParty.java +++ b/src/main/java/noppes/npcs/client/gui/player/inventory/GuiParty.java @@ -412,6 +412,18 @@ public class GuiParty extends GuiCNPCInventory implements ITextfieldListener, IT String partyUUID = listCompound.getString("PartyUUID"); this.invites.put(inviteName, partyUUID); } + } else if (compound.hasKey("QuestProgress")) { + this.questLogStatus.clear(); + this.questCompleteWith = ""; + if (compound.hasKey("QuestProgress")) { + NBTTagList tagList = compound.getTagList("QuestProgress", 8); + for (int i = 0; i < tagList.tagCount(); i++) { + this.questLogStatus.add(tagList.getStringTagAt(i)); + } + } + if (compound.hasKey("QuestCompleteWith")) { + this.questCompleteWith = compound.getString("QuestCompleteWith"); + } } initGui(); diff --git a/src/main/java/noppes/npcs/client/gui/script/GuiScriptPlayers.java b/src/main/java/noppes/npcs/client/gui/script/GuiScriptPlayers.java index 2e4a1424c..5dd278a2a 100644 --- a/src/main/java/noppes/npcs/client/gui/script/GuiScriptPlayers.java +++ b/src/main/java/noppes/npcs/client/gui/script/GuiScriptPlayers.java @@ -70,6 +70,14 @@ public class GuiScriptPlayers extends GuiScriptInterface { hookList.add("customGuiSlotClicked"); hookList.add("customGuiScroll"); hookList.add("customGuiTextfield"); + hookList.add("partyEvent"); + hookList.add("partyQuestCompleted"); + hookList.add("partyQuestSet"); + hookList.add("partyQuestTurnedIn"); + hookList.add("partyInvite"); + hookList.add("partyKick"); + hookList.add("partyLeave"); + hookList.add("partyDisband"); this.handler = this.script; Client.sendData(EnumPacketServer.ScriptPlayerGet); diff --git a/src/main/java/noppes/npcs/constants/EnumScriptType.java b/src/main/java/noppes/npcs/constants/EnumScriptType.java index aec0854a3..a8f233f47 100644 --- a/src/main/java/noppes/npcs/constants/EnumScriptType.java +++ b/src/main/java/noppes/npcs/constants/EnumScriptType.java @@ -90,7 +90,16 @@ public enum EnumScriptType { FORGE_ENTITY("forgeEntity"), FORGE_WORLD("forgeWorld"), CNPC_NATURAL_SPAWN("onCNPCNaturalSpawn"), - CUSTOM_ITEM_EVENT("customItemEvent"); + CUSTOM_ITEM_EVENT("customItemEvent"), + + PARTY_EVENT("partyEvent"), + PARTY_QUEST_COMPLETED("partyQuestCompleted"), + PARTY_QUEST_SET("partyQuestSet"), + PARTY_QUEST_TURNED_IN("partyQuestTurnedIn"), + PARTY_INVITE("partyInvite"), + PARTY_KICK("partyKick"), + PARTY_LEAVE("partyLeave"), + PARTY_DISBAND("partyDisband"); public String function; diff --git a/src/main/java/noppes/npcs/controllers/PartyController.java b/src/main/java/noppes/npcs/controllers/PartyController.java index ff4c3ee11..8334248a8 100644 --- a/src/main/java/noppes/npcs/controllers/PartyController.java +++ b/src/main/java/noppes/npcs/controllers/PartyController.java @@ -5,8 +5,10 @@ import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.nbt.NBTTagString; +import noppes.npcs.EventHooks; import noppes.npcs.NoppesUtilServer; import noppes.npcs.Server; +import noppes.npcs.api.entity.IPlayer; import noppes.npcs.constants.EnumPacketClient; import noppes.npcs.constants.EnumQuestCompletion; import noppes.npcs.constants.EnumQuestType; @@ -16,6 +18,8 @@ import noppes.npcs.controllers.data.Quest; import noppes.npcs.controllers.data.QuestData; import noppes.npcs.quests.QuestInterface; import noppes.npcs.quests.QuestItem; +import noppes.npcs.scripted.NpcAPI; +import noppes.npcs.scripted.event.PartyEvent; import java.util.HashMap; import java.util.UUID; @@ -50,6 +54,8 @@ public class PartyController { public void disbandParty(UUID partyUUID) { Party party = this.parties.get(partyUUID); if (party != null) { + PartyEvent.PartyDisbandEvent partyEvent = new PartyEvent.PartyDisbandEvent(party, party.getQuest()); + EventHooks.onPartyDisband(partyEvent); for (UUID uuid: party.getPlayerUUIDs()) { EntityPlayer player = NoppesUtilServer.getPlayer(uuid); PlayerData playerData; @@ -131,6 +137,35 @@ public class PartyController { } } + public void pingPartyQuestObjectiveUpdate(Party party){ + if(party == null) + return; + + NBTTagCompound compound = new NBTTagCompound(); + if (party.getQuest() != null) { + Quest quest = (Quest) party.getQuest(); + Vector vector = quest.questInterface.getPartyQuestLogStatus(party); + NBTTagList list = new NBTTagList(); + for (String s : vector) { + list.appendTag(new NBTTagString(s)); + } + compound.setTag("QuestProgress", list); + if(quest.completion == EnumQuestCompletion.Npc && quest.questInterface.isPartyCompleted(party)) { + compound.setString("QuestCompleteWith", quest.completerNpc); + } + } + + for(String name : party.getPlayerNames()){ + EntityPlayer playerMP = NoppesUtilServer.getPlayerByName(name); + if(playerMP != null){ + PlayerData playerData = PlayerDataController.Instance.getPlayerData(playerMP); + if(playerData != null){ + Server.sendData((EntityPlayerMP) playerMP, EnumPacketClient.PARTY_DATA, compound); + } + } + } + } + public void sendQuestChat(Party party, String... chatAlerts) { if (party == null) return; @@ -164,10 +199,9 @@ public class PartyController { if((!questData.isCompleted && questData.quest.completion == EnumQuestCompletion.Npc) || questData.quest.instantPartyComplete(party)){ questData.isCompleted = true; if (questData.quest.completion == EnumQuestCompletion.Npc) { - // EventHooks.onQuestFinished(player, data.quest); + EventHooks.onPartyFinished(party, questData.quest); } bo = true; - party.setQuest(null); PartyController.Instance().pingPartyUpdate(party); PartyController.Instance().sendQuestChat(party, "party.completeChat"); diff --git a/src/main/java/noppes/npcs/controllers/data/Party.java b/src/main/java/noppes/npcs/controllers/data/Party.java index 53a5a6a6e..715749d4c 100644 --- a/src/main/java/noppes/npcs/controllers/data/Party.java +++ b/src/main/java/noppes/npcs/controllers/data/Party.java @@ -9,29 +9,22 @@ import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.util.ChatComponentText; -import noppes.npcs.EventHooks; -import noppes.npcs.NoppesUtilPlayer; import noppes.npcs.NoppesUtilServer; +import noppes.npcs.api.entity.IPlayer; import noppes.npcs.api.handler.IPlayerQuestData; +import noppes.npcs.api.handler.data.IParty; import noppes.npcs.api.handler.data.IQuest; import noppes.npcs.constants.EnumPartyRequirements; -import noppes.npcs.constants.EnumQuestCompletion; -import noppes.npcs.constants.EnumQuestType; import noppes.npcs.controllers.PartyController; import noppes.npcs.controllers.PlayerDataController; import noppes.npcs.controllers.QuestController; -import noppes.npcs.quests.QuestInterface; -import noppes.npcs.quests.QuestItem; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.URL; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.UUID; +import java.util.*; -public class Party { +public class Party implements IParty { private final UUID partyUUID; private UUID partyLeader; private QuestData questData; @@ -61,10 +54,17 @@ public class Party { return this.partyUUID; } + @Override + public String getPartyUUIDString() { + return this.partyUUID.toString(); + } + + @Override public boolean getIsLocked() { return this.partyLocked; } + @Override public void setQuest(IQuest quest) { if (quest != null) { this.currentQuestID = quest.getId(); @@ -78,6 +78,7 @@ public class Party { this.partyLocked = quest != null; } + @Override public IQuest getQuest() { if (FMLCommonHandler.instance().getEffectiveSide() == Side.SERVER) { return QuestController.Instance.get(this.currentQuestID); @@ -90,15 +91,19 @@ public class Party { return questData; } + @Override public int getCurrentQuestID() { return currentQuestID; } + @Override public String getCurrentQuestName() { return this.currentQuestName; } public boolean addPlayer(EntityPlayer player) { + if (player == null) return false; + if(partyMembers.containsKey(player.getUniqueID())){ return false; } @@ -134,18 +139,39 @@ public class Party { return false; } + @Override + public boolean addPlayer(String playerName) { + return playerName != null && this.addPlayer(NoppesUtilServer.getPlayerByName(playerName)); + } + + @Override public boolean removePlayer(String playerName) { return playerName != null && this.removePlayer(NoppesUtilServer.getPlayerByName(playerName)); } + @Override + public boolean addPlayer(IPlayer player) { + return player != null && this.addPlayer((EntityPlayerMP)player.getMCEntity()); + } + + @Override + public boolean removePlayer(IPlayer player) { + return player != null && this.removePlayer((EntityPlayerMP)player.getMCEntity()); + } + public boolean hasPlayer(EntityPlayer player) { return partyMembers.containsKey(player.getUniqueID()); } - public boolean hasPlayer(UUID uuid) { - return partyMembers.containsKey(uuid); + @Override + public boolean hasPlayer(IPlayer player) { + if(player == null) + return false; + EntityPlayer entityPlayer = (EntityPlayer)player.getMCEntity(); + return partyMembers.containsKey(entityPlayer.getUniqueID()); } + @Override public boolean hasPlayer(String playerName) { UUID uuid = getUUID(playerName); if (uuid == null){ @@ -158,6 +184,7 @@ public class Party { return NoppesUtilServer.getPlayer(this.partyLeader); } + @Override public String getPartyLeaderName() { if (FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT) { return this.partyLeaderName; @@ -195,6 +222,11 @@ public class Party { return this.getPlayerNames(false); } + @Override + public List getPlayerNamesList() { + return new ArrayList<>(this.getPlayerNames(false)); + } + public Collection getPlayerNames(boolean lowercase) { Collection names = this.partyMembers.values(); if (!lowercase) { @@ -212,8 +244,9 @@ public class Party { return this.partyMembers.keySet(); } - // To Be Called during Set Quest or Quest Switch - public boolean validateQuest(int questID) { + // Called when Set Quest is Called + @Override + public boolean validateQuest(int questID, boolean sendLeaderMessages){ IQuest quest = QuestController.Instance.get(questID); if (quest == null) { return false; @@ -226,17 +259,17 @@ public class Party { int partyReq = quest.getPartyOptions().getPartyRequirements(); if (partyReq < 0 || partyReq >= EnumPartyRequirements.values().length) { - sendInfoMessage(leader, "Error in quest party requirements"); + sendInfoMessage(leader, "Error in quest party requirements", sendLeaderMessages); return false; } if (partyMembers.size() < quest.getPartyOptions().getMinPartySize()) { - sendInfoMessage(leader, String.format("Party too small. Min %d members", quest.getPartyOptions().getMinPartySize())); + sendInfoMessage(leader, String.format("Party too small. Min %d members", quest.getPartyOptions().getMinPartySize()), sendLeaderMessages); return false; } if (partyMembers.size() > quest.getPartyOptions().getMaxPartySize()) { - sendInfoMessage(leader, String.format("Party too large. Max %d members", quest.getPartyOptions().getMaxPartySize())); + sendInfoMessage(leader, String.format("Party too large. Max %d members", quest.getPartyOptions().getMaxPartySize()), sendLeaderMessages); return false; } @@ -244,12 +277,12 @@ public class Party { if (partyRequirements == EnumPartyRequirements.Leader) { boolean leaderBool = isValidLeaderQuest(leader, questID); if(!leaderBool){ - sendInfoMessage(leader, "\u00A7cYou are invalid for this quest"); + sendInfoMessage(leader, "\u00A7cYou are invalid for this quest", sendLeaderMessages); } return leaderBool; } - return arePlayersValid(leader, partyRequirements, quest); + return arePlayersValid(leader, partyRequirements, quest, sendLeaderMessages); } private boolean isValidLeaderQuest(EntityPlayer leader, int questID) { @@ -257,7 +290,7 @@ public class Party { return questData != null && questData.hasActiveQuest(questID); } - private boolean arePlayersValid(EntityPlayer leader, EnumPartyRequirements requirements, IQuest quest) { + private boolean arePlayersValid(EntityPlayer leader, EnumPartyRequirements requirements, IQuest quest, boolean sendLeaderMessages) { boolean allowQuest = true; for (UUID playerUUID : partyMembers.keySet()) { EntityPlayer player = PlayerDataController.getPlayerFromUUID(playerUUID); @@ -271,36 +304,41 @@ public class Party { if (requirements == EnumPartyRequirements.All && !hasActive) { allowQuest = false; - sendInfoMessage(leader, String.format("%s does not have quest active", player.getCommandSenderName())); + sendInfoMessage(leader, String.format("%s does not have quest active", player.getCommandSenderName()), sendLeaderMessages); } else if (requirements == EnumPartyRequirements.Valid && !hasActive && !hasFinished) { allowQuest = false; - sendInfoMessage(leader, String.format("%s does not have the quest active or finished", player.getCommandSenderName())); + sendInfoMessage(leader, String.format("%s does not have the quest active or finished", player.getCommandSenderName()), sendLeaderMessages); } } else { allowQuest = false; - sendInfoMessage(leader, String.format("%s has no quest data", player.getCommandSenderName())); + sendInfoMessage(leader, String.format("%s has no quest data", player.getCommandSenderName()), sendLeaderMessages); } } else { allowQuest = false; - sendInfoMessage(leader, String.format("%s has no player data", player.getCommandSenderName())); + sendInfoMessage(leader, String.format("%s has no player data", player.getCommandSenderName()), sendLeaderMessages); } } else { allowQuest = false; String playerName = partyMembers.get(playerUUID); - sendInfoMessage(leader, String.format("%s was not found", playerName)); + sendInfoMessage(leader, String.format("%s was not found", playerName), sendLeaderMessages); } } return allowQuest; } - private void sendInfoMessage(EntityPlayer player, String message) { + private void sendInfoMessage(EntityPlayer player, String message, boolean send) { + if(!send) + return; + player.addChatMessage(new ChatComponentText(String.format("\u00A7c%s", message))); } + @Override public void toggleFriendlyFire() { this.friendlyFire = !this.friendlyFire; } + @Override public boolean friendlyFire() { return this.friendlyFire; } @@ -374,6 +412,20 @@ public class Party { return compound; } + @Override + public void updateQuestObjectiveData(){ + if (FMLCommonHandler.instance().getEffectiveSide() == Side.SERVER) { + PartyController.Instance().pingPartyQuestObjectiveUpdate(this); + } + } + + @Override + public void updatePartyData(){ + if (FMLCommonHandler.instance().getEffectiveSide() == Side.SERVER) { + PartyController.Instance().pingPartyUpdate(this); + } + } + public void readClientNBT(NBTTagCompound compound) { this.currentQuestID = compound.getInteger("PartyQuestID"); this.currentQuestName = compound.getString("PartyQuestName"); diff --git a/src/main/java/noppes/npcs/controllers/data/PlayerData.java b/src/main/java/noppes/npcs/controllers/data/PlayerData.java index c381fc1c5..e4c24b57b 100644 --- a/src/main/java/noppes/npcs/controllers/data/PlayerData.java +++ b/src/main/java/noppes/npcs/controllers/data/PlayerData.java @@ -69,7 +69,6 @@ public class PlayerData implements IExtendedEntityProperties, IPlayerData { } public void onLogout() { - this.partyUUID = null; this.partyInvites.clear(); } diff --git a/src/main/java/noppes/npcs/scripted/event/PartyEvent.java b/src/main/java/noppes/npcs/scripted/event/PartyEvent.java new file mode 100644 index 000000000..a9de4b20d --- /dev/null +++ b/src/main/java/noppes/npcs/scripted/event/PartyEvent.java @@ -0,0 +1,146 @@ +package noppes.npcs.scripted.event; + +import cpw.mods.fml.common.eventhandler.Cancelable; +import noppes.npcs.api.entity.IPlayer; +import noppes.npcs.api.event.IPartyEvent; +import noppes.npcs.api.event.IQuestEvent; +import noppes.npcs.api.handler.data.IParty; +import noppes.npcs.api.handler.data.IQuest; +import noppes.npcs.api.item.IItemStack; +import noppes.npcs.constants.EnumScriptType; + +public class PartyEvent extends CustomNPCsEvent implements IPartyEvent { + public final IQuest quest; + public final IParty party; + + public PartyEvent(IParty party, IQuest quest) { + this.quest = quest; + this.party = party; + } + + public IParty getParty() { + return party; + } + + public IQuest getQuest() { + return quest; + } + + public String getHookName() { + return EnumScriptType.PARTY_EVENT.function; + } + + public static class PartyQuestCompletedEvent extends PartyEvent implements IPartyEvent.PartyQuestCompletedEvent { + public PartyQuestCompletedEvent(IParty party, IQuest quest) { + super(party, quest); + } + + public String getHookName() { + return EnumScriptType.PARTY_QUEST_COMPLETED.function; + } + } + + @Cancelable + public static class PartyQuestSetEvent extends PartyEvent implements IPartyEvent.PartyQuestSetEvent { + public PartyQuestSetEvent(IParty party, IQuest quest) { + super(party, quest); + } + + public String getHookName() { + return EnumScriptType.PARTY_QUEST_SET.function; + } + } + + @Cancelable + public static class PartyQuestTurnedInEvent extends PartyEvent implements IPartyEvent.PartyQuestTurnedInEvent { + public PartyQuestTurnedInEvent(IParty party, IQuest quest) { + super(party, quest); + } + + public String getHookName() { + return EnumScriptType.PARTY_QUEST_TURNED_IN.function; + } + } + + @Cancelable + public static class PartyInviteEvent extends PartyEvent implements IPartyEvent.PartyInviteEvent { + public IPlayer player; + + public PartyInviteEvent(IParty party, IQuest quest, IPlayer player) { + super(party, quest); + this.player = player; + } + + public String getHookName() { + return EnumScriptType.PARTY_INVITE.function; + } + + @Override + public IPlayer getPlayer() { + return player; + } + + @Override + public String getPlayerName() { + return player.getName(); + } + } + + @Cancelable + public static class PartyKickEvent extends PartyEvent implements IPartyEvent.PartyKickEvent { + public IPlayer player; + + public PartyKickEvent(IParty party, IQuest quest, IPlayer player) { + super(party, quest); + this.player = player; + } + + public String getHookName() { + return EnumScriptType.PARTY_KICK.function; + } + + @Override + public IPlayer getPlayer() { + return player; + } + + @Override + public String getPlayerName() { + return player.getName(); + } + } + + public static class PartyLeaveEvent extends PartyEvent implements IPartyEvent.PartyLeaveEvent { + public IPlayer player; + + public PartyLeaveEvent(IParty party, IQuest quest, IPlayer player) { + super(party, quest); + this.player = player; + } + + public String getHookName() { + return EnumScriptType.PARTY_LEAVE.function; + } + + @Override + public IPlayer getPlayer() { + return player; + } + + @Override + public String getPlayerName() { + return player.getName(); + } + } + + public static class PartyDisbandEvent extends PartyEvent implements IPartyEvent.PartyDisbandEvent { + public PartyDisbandEvent(IParty party, IQuest quest) { + super(party, quest); + } + + public String getHookName() { + return EnumScriptType.PARTY_DISBAND.function; + } + } + +}