diff --git a/src/main/java/noppes/npcs/NoppesUtilPlayer.java b/src/main/java/noppes/npcs/NoppesUtilPlayer.java index 8bd76ac41..59f6dc7ed 100644 --- a/src/main/java/noppes/npcs/NoppesUtilPlayer.java +++ b/src/main/java/noppes/npcs/NoppesUtilPlayer.java @@ -32,10 +32,7 @@ import noppes.npcs.scripted.event.DialogEvent; import noppes.npcs.scripted.event.QuestEvent; import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; +import java.util.*; public class NoppesUtilPlayer { @@ -300,8 +297,52 @@ public class NoppesUtilPlayer { else Server.sendData(player, EnumPacketClient.GUI_CLOSE); } + + public static void updateQuestLogData(ByteBuf buffer, EntityPlayerMP player) throws IOException { + PlayerData playerData = PlayerDataController.instance.getPlayerData(player); + + NBTTagCompound compound = Server.readNBT(buffer); + HashMap questAlerts = NBTTags.getStringStringMap(compound.getTagList("Alerts", 10)); + for (Map.Entry entry : questAlerts.entrySet()) { + Quest quest = getQuestFromStringKey(entry.getKey()); + if (quest != null) { + playerData.questData.activeQuests.get(quest.id).sendAlerts = Boolean.parseBoolean(entry.getValue()); + } + } + + String trackedQuestString = Server.readString(buffer); + Quest trackedQuest = getQuestFromStringKey(trackedQuestString); + if (trackedQuest != null) { + playerData.questData.trackQuest(trackedQuest); + } else { + playerData.questData.untrackQuest(); + } + } + + private static Quest getQuestFromStringKey(String string) { + if (string != null && string.contains(":")) { + String[] splitString = string.split(":"); + if(splitString.length < 2){ + return null; + } + String categoryName = splitString[0]; + String questName = splitString[1]; + + for (QuestCategory category : QuestController.instance.categories.values()) { + if (category.title.equals(categoryName)) { + for (Quest quest : category.quests.values()) { + if (quest.title.equals(questName)) { + return quest; + } + } + } + } + } + return null; + } + public static void sendTrackedQuestData(EntityPlayerMP player, Quest trackedQuest) { - Quest quest = (Quest) PlayerDataController.instance.getPlayerData(player).questData.trackedQuest; + Quest quest = (Quest) PlayerDataController.instance.getPlayerData(player).questData.getTrackedQuest(); if (quest == null || trackedQuest == null || quest.id != trackedQuest.id) { return; } @@ -398,7 +439,7 @@ public class NoppesUtilPlayer { QuestData nextQuest = new QuestData(data.quest.getNextQuest()); nextQuest.sendAlerts = data.quest.id != data.quest.getNextQuest().id || data.sendAlerts; PlayerQuestController.addActiveQuest(nextQuest, player); - NoppesUtilPlayer.sendTrackedQuestData(player,nextQuest.quest); + questData.trackQuest(nextQuest.quest); } return true; diff --git a/src/main/java/noppes/npcs/PacketHandlerServer.java b/src/main/java/noppes/npcs/PacketHandlerServer.java index f3b66a7bd..43236cc6d 100644 --- a/src/main/java/noppes/npcs/PacketHandlerServer.java +++ b/src/main/java/noppes/npcs/PacketHandlerServer.java @@ -88,7 +88,7 @@ public class PacketHandlerServer{ EventHooks.onCustomGuiClose((IPlayer) NpcAPI.Instance().getIEntity(player), (new ScriptGui()).fromNBT(Server.readNBT(buffer))); return; } else if (type == EnumPacketServer.QuestLogToServer) { - updateQuestLogData(buffer, player); + NoppesUtilPlayer.updateQuestLogData(buffer, player); return; } else if(type == EnumPacketServer.DimensionsGet){ HashMap map = new HashMap(); @@ -157,55 +157,6 @@ public class PacketHandlerServer{ } } - private Quest getQuestFromString(String string) { - if (string != null && string.contains(":")) { - String[] splitString = string.split(":"); - if(splitString.length < 2){ - return null; - } - String categoryName = splitString[0]; - String questName = splitString[1]; - - for (QuestCategory category : QuestController.instance.categories.values()) { - if (category.title.equals(categoryName)) { - for (Quest quest : category.quests.values()) { - if (quest.title.equals(questName)) { - return quest; - } - } - } - } - } - return null; - } - - private void updateQuestLogData(ByteBuf buffer, EntityPlayerMP player) throws IOException { - PlayerData playerData = PlayerDataController.instance.getPlayerData(player); - - NBTTagCompound compound = Server.readNBT(buffer); - HashMap questAlerts = NBTTags.getStringStringMap(compound.getTagList("Alerts", 10)); - for (Map.Entry entry : questAlerts.entrySet()) { - Quest quest = this.getQuestFromString(entry.getKey()); - if (quest != null) { - playerData.questData.activeQuests.get(quest.id).sendAlerts = Boolean.parseBoolean(entry.getValue()); - } - } - - String trackedQuestString = Server.readString(buffer); - Quest prevTracked = (Quest) playerData.questData.trackedQuest; - Quest trackedQuest = this.getQuestFromString(trackedQuestString); - if (trackedQuest != null) { - playerData.questData.trackedQuest = trackedQuest; - NoppesUtilPlayer.sendTrackedQuestData(player, trackedQuest); - if (prevTracked != playerData.questData.trackedQuest) { - NoppesUtilPlayer.sendTrackedQuestData(player, (Quest) playerData.questData.trackedQuest); - } - } else { - playerData.questData.trackedQuest = null; - Server.sendData((EntityPlayerMP) player, EnumPacketClient.OVERLAY_QUEST_TRACKING); - } - } - private void isGuiOpenPacket(ByteBuf buffer, EntityPlayerMP player) throws IOException { NoppesUtilServer.isGUIOpen(buffer, player); } diff --git a/src/main/java/noppes/npcs/QuestLogData.java b/src/main/java/noppes/npcs/QuestLogData.java index 10673c6aa..c90d2d4c0 100644 --- a/src/main/java/noppes/npcs/QuestLogData.java +++ b/src/main/java/noppes/npcs/QuestLogData.java @@ -57,8 +57,8 @@ public class QuestLogData { if(quest.completion == EnumQuestCompletion.Npc && quest.questInterface.isCompleted(playerData)) finish.put(category + ":" + quest.title, quest.completerNpc); - if (playerData.questData.trackedQuest != null) { - if (quest.id == playerData.questData.trackedQuest.getId()) { + if (playerData.questData.getTrackedQuest() != null) { + if (quest.id == playerData.questData.getTrackedQuest().getId()) { trackedQuestKey = category + ":" + quest.title; } } diff --git a/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java b/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java index 53ea44087..dbcdc4e44 100644 --- a/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java +++ b/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java @@ -67,9 +67,8 @@ public class ScriptPlayerEventHandler { playerData.timers.update(); } - if (playerData.questData.trackedQuest != null && !playerData.questData.activeQuests.containsKey(playerData.questData.trackedQuest.getId())) { - PlayerDataController.instance.getPlayerData(player).questData.trackedQuest = null; - Server.sendData((EntityPlayerMP) player, EnumPacketClient.OVERLAY_QUEST_TRACKING); + if (playerData.questData.getTrackedQuest() != null && !playerData.questData.activeQuests.containsKey(playerData.questData.getTrackedQuest().getId())) { + PlayerDataController.instance.getPlayerData(player).questData.untrackQuest(); } if (player.ticksExisted%20 == 0 && !PlayerDataController.instance.getPlayerData(player).skinOverlays.overlayList.isEmpty()) { @@ -464,7 +463,7 @@ public class ScriptPlayerEventHandler { IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.player); EventHooks.onPlayerLogin(handler, scriptPlayer); - Quest quest = (Quest) PlayerDataController.instance.getPlayerData(event.player).questData.trackedQuest; + Quest quest = (Quest) PlayerDataController.instance.getPlayerData(event.player).questData.getTrackedQuest(); if (quest != null) { NoppesUtilPlayer.sendTrackedQuestData((EntityPlayerMP) event.player, quest); } diff --git a/src/main/java/noppes/npcs/controllers/data/PlayerQuestData.java b/src/main/java/noppes/npcs/controllers/data/PlayerQuestData.java index 7dfc53fa2..7fc9ae1f6 100644 --- a/src/main/java/noppes/npcs/controllers/data/PlayerQuestData.java +++ b/src/main/java/noppes/npcs/controllers/data/PlayerQuestData.java @@ -25,7 +25,7 @@ import java.util.List; public class PlayerQuestData implements IPlayerQuestData { private final PlayerData parent; - public IQuest trackedQuest = null; + private IQuest trackedQuest = null; public HashMap activeQuests = new HashMap(); public HashMap finishedQuests = new HashMap(); @@ -145,8 +145,20 @@ public class PlayerQuestData implements IPlayerQuestData { } + public void trackQuest(IQuest quest) { + if (quest.getId() != this.trackedQuest.getId()) { + this.trackedQuest = quest; + NoppesUtilPlayer.sendTrackedQuestData((EntityPlayerMP) this.parent.player, (Quest) this.trackedQuest); + } + } + + public void untrackQuest() { + this.trackedQuest = null; + Server.sendData((EntityPlayerMP) this.parent.player, EnumPacketClient.OVERLAY_QUEST_TRACKING); + } + public IQuest getTrackedQuest() { - return trackedQuest; + return this.trackedQuest; } public void startQuest(int id) { diff --git a/src/main/java/noppes/npcs/quests/QuestInterface.java b/src/main/java/noppes/npcs/quests/QuestInterface.java index bcd6025b6..84c25ec83 100644 --- a/src/main/java/noppes/npcs/quests/QuestInterface.java +++ b/src/main/java/noppes/npcs/quests/QuestInterface.java @@ -19,9 +19,8 @@ public abstract class QuestInterface implements IQuestInterface { public abstract void readEntityFromNBT(NBTTagCompound compound); public abstract boolean isCompleted(PlayerData player); public void handleComplete(EntityPlayer player) { - if (QuestController.instance.get(questId).equals(PlayerDataController.instance.getPlayerData(player).questData.trackedQuest)) { - PlayerDataController.instance.getPlayerData(player).questData.trackedQuest = null; - Server.sendData((EntityPlayerMP) player, EnumPacketClient.OVERLAY_QUEST_TRACKING); + if (this.questId == PlayerDataController.instance.getPlayerData(player).questData.getTrackedQuest().getId()) { + PlayerDataController.instance.getPlayerData(player).questData.untrackQuest(); } } public abstract Vector getQuestLogStatus(EntityPlayer player);