diff --git a/src/main/java/noppes/npcs/NoppesUtilPlayer.java b/src/main/java/noppes/npcs/NoppesUtilPlayer.java index c91bdd2d0..0269fbcb8 100644 --- a/src/main/java/noppes/npcs/NoppesUtilPlayer.java +++ b/src/main/java/noppes/npcs/NoppesUtilPlayer.java @@ -561,6 +561,10 @@ public class NoppesUtilPlayer { // questData.trackQuest(nextQuest.quest); } playerData.save(); + + if(meetsComplete){ + Server.sendData((EntityPlayerMP)player, EnumPacketClient.QUEST_COMPLETION, data.quest.writeToNBT(new NBTTagCompound())); + } } return true; diff --git a/src/main/java/noppes/npcs/ServerEventsHandler.java b/src/main/java/noppes/npcs/ServerEventsHandler.java index 904c54838..f84735a3b 100644 --- a/src/main/java/noppes/npcs/ServerEventsHandler.java +++ b/src/main/java/noppes/npcs/ServerEventsHandler.java @@ -388,7 +388,7 @@ public class ServerEventsHandler { return; if(party != null) - party.checkQuestCompletion(EnumQuestType.Kill); + PartyController.Instance().checkQuestCompletion(party, EnumQuestType.Kill); questData.checkQuestCompletion(playerData,EnumQuestType.Kill); } diff --git a/src/main/java/noppes/npcs/controllers/PartyController.java b/src/main/java/noppes/npcs/controllers/PartyController.java index bb779e251..0132d03ff 100644 --- a/src/main/java/noppes/npcs/controllers/PartyController.java +++ b/src/main/java/noppes/npcs/controllers/PartyController.java @@ -9,9 +9,13 @@ import noppes.npcs.NoppesUtilServer; import noppes.npcs.Server; import noppes.npcs.constants.EnumPacketClient; import noppes.npcs.constants.EnumQuestCompletion; +import noppes.npcs.constants.EnumQuestType; import noppes.npcs.controllers.data.Party; import noppes.npcs.controllers.data.PlayerData; import noppes.npcs.controllers.data.Quest; +import noppes.npcs.controllers.data.QuestData; +import noppes.npcs.quests.QuestInterface; +import noppes.npcs.quests.QuestItem; import java.util.HashMap; import java.util.UUID; @@ -127,4 +131,49 @@ public class PartyController { } } } + + public void sendQuestChat(Party party, String chatAlert){ + if(party == null) + return; + + for(String name : party.getPlayerNames()){ + EntityPlayer playerMP = NoppesUtilServer.getPlayerByName(name); + if(playerMP != null){ + Server.sendData((EntityPlayerMP) playerMP, EnumPacketClient.CHAT, "\u00A7a", chatAlert, "!"); + } + } + } + + public boolean checkQuestCompletion(Party party, EnumQuestType type) { + boolean bo = false; + QuestData questData = party.getQuestData(); + if(questData == null) + return bo; + + if(questData.quest.type != type && type != null) + return bo; + + QuestInterface inter = questData.quest.questInterface; + if(inter.isPartyCompleted(party)){ + 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); + } + bo = true; + + party.setQuest(null); + PartyController.Instance().pingPartyUpdate(party); + PartyController.Instance().sendQuestChat(party, "party.completeChat"); + } + } else { + questData.isCompleted = false; + } +// if (this.trackedQuest != null && questData.quest.getId() == this.trackedQuest.getId()) { +// NoppesUtilPlayer.sendTrackedQuestData((EntityPlayerMP) player); +// } + QuestItem.pickedUp = null; + return bo; + + } } diff --git a/src/main/java/noppes/npcs/controllers/data/Party.java b/src/main/java/noppes/npcs/controllers/data/Party.java index 3150bf0c5..cc8f71316 100644 --- a/src/main/java/noppes/npcs/controllers/data/Party.java +++ b/src/main/java/noppes/npcs/controllers/data/Party.java @@ -388,35 +388,4 @@ public class Party { compound.setBoolean("FriendlyFire", this.friendlyFire); return compound; } - - public boolean checkQuestCompletion(EnumQuestType type) { - boolean bo = false; - if(questData == null) - return bo; - - if(questData.quest.type != type && type != null) - return bo; - - QuestInterface inter = questData.quest.questInterface; - if(inter.isPartyCompleted(this)){ - if((!questData.isCompleted && questData.quest.completion == EnumQuestCompletion.Npc) || questData.quest.instantPartyComplete(this)){ - questData.isCompleted = true; - if (questData.quest.completion == EnumQuestCompletion.Npc) { - // EventHooks.onQuestFinished(player, data.quest); - } - bo = true; - - setQuest(null); - PartyController.Instance().pingPartyUpdate(this); - } - } else { - questData.isCompleted = false; - } -// if (this.trackedQuest != null && questData.quest.getId() == this.trackedQuest.getId()) { -// NoppesUtilPlayer.sendTrackedQuestData((EntityPlayerMP) player); -// } - QuestItem.pickedUp = null; - return bo; - - } } diff --git a/src/main/java/noppes/npcs/controllers/data/Quest.java b/src/main/java/noppes/npcs/controllers/data/Quest.java index c61de88bc..5ffb91914 100644 --- a/src/main/java/noppes/npcs/controllers/data/Quest.java +++ b/src/main/java/noppes/npcs/controllers/data/Quest.java @@ -139,11 +139,7 @@ public class Quest implements ICompatibilty, IQuest { } public boolean instantPartyComplete(Party party) { - if(completion == EnumQuestCompletion.Instant && NoppesUtilPlayer.questPartyCompletion(party)){ - // Server.sendData((EntityPlayerMP)player, EnumPacketClient.QUEST_COMPLETION, data.quest.writeToNBT(new NBTTagCompound())); - return true; - } - return false; + return completion == EnumQuestCompletion.Instant && NoppesUtilPlayer.questPartyCompletion(party); } public Quest copy(){ diff --git a/src/main/java/noppes/npcs/quests/QuestKill.java b/src/main/java/noppes/npcs/quests/QuestKill.java index 2b7df1b4d..665d28053 100644 --- a/src/main/java/noppes/npcs/quests/QuestKill.java +++ b/src/main/java/noppes/npcs/quests/QuestKill.java @@ -6,6 +6,7 @@ import noppes.npcs.NBTTags; import noppes.npcs.api.handler.data.IQuestKill; import noppes.npcs.api.handler.data.IQuestObjective; import noppes.npcs.constants.EnumQuestType; +import noppes.npcs.controllers.PartyController; import noppes.npcs.controllers.PlayerDataController; import noppes.npcs.controllers.data.Party; import noppes.npcs.controllers.data.PlayerData; @@ -257,8 +258,8 @@ public class QuestKill extends QuestInterface implements IQuestKill { if (!killed.containsKey(this.entity) || (Integer)killed.get(this.entity) != progress) { killed.put(this.entity, progress); this.parent.setKilled(questdata, killed); - party.checkQuestCompletion(EnumQuestType.values()[2]); - party.checkQuestCompletion(EnumQuestType.values()[4]); + PartyController.Instance().checkQuestCompletion(party, EnumQuestType.values()[2]); + PartyController.Instance().checkQuestCompletion(party, EnumQuestType.values()[4]); } } } diff --git a/src/main/java/noppes/npcs/quests/QuestLocation.java b/src/main/java/noppes/npcs/quests/QuestLocation.java index 3d046d83a..7c814a28c 100644 --- a/src/main/java/noppes/npcs/quests/QuestLocation.java +++ b/src/main/java/noppes/npcs/quests/QuestLocation.java @@ -6,6 +6,7 @@ import net.minecraft.util.StatCollector; import noppes.npcs.api.handler.data.IQuestLocation; import noppes.npcs.api.handler.data.IQuestObjective; import noppes.npcs.constants.EnumQuestType; +import noppes.npcs.controllers.PartyController; import noppes.npcs.controllers.PlayerDataController; import noppes.npcs.controllers.data.Party; import noppes.npcs.controllers.data.PlayerData; @@ -229,7 +230,7 @@ public class QuestLocation extends QuestInterface implements IQuestLocation { boolean completed = questData.extraData.getBoolean (this.nbtName); if ((!completed || progress != 1) && (completed || progress != 0)) { questData.extraData.setBoolean(this.nbtName, progress == 1); - party.checkQuestCompletion(EnumQuestType.values()[3]); + PartyController.Instance().checkQuestCompletion(party, EnumQuestType.values()[3]); } } } else { diff --git a/src/main/resources/assets/customnpcs/lang/en_US.lang b/src/main/resources/assets/customnpcs/lang/en_US.lang index f6b7a2f49..ffcf6c215 100644 --- a/src/main/resources/assets/customnpcs/lang/en_US.lang +++ b/src/main/resources/assets/customnpcs/lang/en_US.lang @@ -143,6 +143,7 @@ party.dropQuest=Drop Quest party.friendlyFire=Friendly Fire party.ignore=Ignore party.invite=Invite +party.completeChat=The party quest has been completed! party.kick=Kick party.kickConfirm=Are you sure you want to kick this player?