diff --git a/src/main/java/noppes/npcs/NoppesUtilPlayer.java b/src/main/java/noppes/npcs/NoppesUtilPlayer.java index 59f6dc7ed..8bc1d09d8 100644 --- a/src/main/java/noppes/npcs/NoppesUtilPlayer.java +++ b/src/main/java/noppes/npcs/NoppesUtilPlayer.java @@ -341,11 +341,8 @@ public class NoppesUtilPlayer { return null; } - public static void sendTrackedQuestData(EntityPlayerMP player, Quest trackedQuest) { - Quest quest = (Quest) PlayerDataController.instance.getPlayerData(player).questData.getTrackedQuest(); - if (quest == null || trackedQuest == null || quest.id != trackedQuest.id) { - return; - } + public static void sendTrackedQuestData(EntityPlayerMP player) { + Quest trackedQuest = (Quest) PlayerDataController.instance.getPlayerData(player).questData.getTrackedQuest(); NBTTagCompound compound = new NBTTagCompound(); compound.setTag("Quest",trackedQuest.writeToNBT(new NBTTagCompound())); @@ -356,6 +353,7 @@ public class NoppesUtilPlayer { nbtTagList.appendTag(new NBTTagString(objective.getText())); } compound.setTag("ObjectiveList",nbtTagList); + Server.sendData(player, EnumPacketClient.OVERLAY_QUEST_TRACKING, compound); } diff --git a/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java b/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java index dbcdc4e44..bb466542a 100644 --- a/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java +++ b/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java @@ -26,10 +26,12 @@ import net.minecraftforge.event.entity.player.*; import net.minecraftforge.event.world.BlockEvent; import noppes.npcs.api.entity.IPlayer; import noppes.npcs.constants.EnumPacketClient; +import noppes.npcs.constants.EnumQuestType; import noppes.npcs.controllers.PlayerDataController; import noppes.npcs.controllers.ScriptController; import noppes.npcs.controllers.data.PlayerData; import noppes.npcs.controllers.data.PlayerDataScript; +import noppes.npcs.controllers.data.PlayerQuestData; import noppes.npcs.controllers.data.Quest; import noppes.npcs.entity.EntityNPCInterface; import noppes.npcs.scripted.NpcAPI; @@ -74,6 +76,13 @@ public class ScriptPlayerEventHandler { if (player.ticksExisted%20 == 0 && !PlayerDataController.instance.getPlayerData(player).skinOverlays.overlayList.isEmpty()) { PlayerDataController.instance.getPlayerData(player).skinOverlays.updateClient(); } + + if (player.ticksExisted%40 == 0) { + PlayerQuestData questData = playerData.questData; + if (questData.getTrackedQuest() != null && ((Quest) questData.getTrackedQuest()).type == EnumQuestType.Item) { + NoppesUtilPlayer.sendTrackedQuestData((EntityPlayerMP) event.player); + } + } } } } @@ -465,7 +474,7 @@ public class ScriptPlayerEventHandler { Quest quest = (Quest) PlayerDataController.instance.getPlayerData(event.player).questData.getTrackedQuest(); if (quest != null) { - NoppesUtilPlayer.sendTrackedQuestData((EntityPlayerMP) event.player, quest); + NoppesUtilPlayer.sendTrackedQuestData((EntityPlayerMP) event.player); } PlayerDataController.instance.getPlayerData(event.player).skinOverlays.updateClient(); diff --git a/src/main/java/noppes/npcs/controllers/data/PlayerQuestData.java b/src/main/java/noppes/npcs/controllers/data/PlayerQuestData.java index 1ee181c3b..2961e6666 100644 --- a/src/main/java/noppes/npcs/controllers/data/PlayerQuestData.java +++ b/src/main/java/noppes/npcs/controllers/data/PlayerQuestData.java @@ -121,8 +121,6 @@ public class PlayerQuestData implements IPlayerQuestData { if(data.quest.type != type && type != null) continue; - NoppesUtilPlayer.sendTrackedQuestData((EntityPlayerMP) player,data.quest); - QuestInterface inter = data.quest.questInterface; if(inter.isCompleted(playerData)){ if((!data.isCompleted && data.quest.completion == EnumQuestCompletion.Npc) || data.quest.instantComplete(player,data)){ @@ -139,6 +137,10 @@ public class PlayerQuestData implements IPlayerQuestData { } else { data.isCompleted = false; } + + if (this.trackedQuest != null && data.quest.getId() == this.trackedQuest.getId()) { + NoppesUtilPlayer.sendTrackedQuestData((EntityPlayerMP) player); + } } QuestItem.pickedUp = null; return bo; @@ -148,13 +150,15 @@ public class PlayerQuestData implements IPlayerQuestData { public void trackQuest(IQuest quest) { if (this.trackedQuest == null || quest.getId() != this.trackedQuest.getId()) { this.trackedQuest = quest; - NoppesUtilPlayer.sendTrackedQuestData((EntityPlayerMP) this.parent.player, (Quest) this.trackedQuest); + NoppesUtilPlayer.sendTrackedQuestData((EntityPlayerMP) this.parent.player); } } public void untrackQuest() { - this.trackedQuest = null; - Server.sendData((EntityPlayerMP) this.parent.player, EnumPacketClient.OVERLAY_QUEST_TRACKING); + if (this.trackedQuest != null) { + this.trackedQuest = null; + Server.sendData((EntityPlayerMP) this.parent.player, EnumPacketClient.OVERLAY_QUEST_TRACKING); + } } public IQuest getTrackedQuest() { diff --git a/src/main/java/noppes/npcs/quests/QuestItem.java b/src/main/java/noppes/npcs/quests/QuestItem.java index be42bf9da..6ae657856 100644 --- a/src/main/java/noppes/npcs/quests/QuestItem.java +++ b/src/main/java/noppes/npcs/quests/QuestItem.java @@ -178,8 +178,13 @@ public class QuestItem extends QuestInterface implements IQuestItem { public int getProgress() { int count = 0; + ItemStack item = QuestItem.pickedUp; + if (!NoppesUtilServer.IsItemStackNull(item) && NoppesUtilPlayer.compareItems(this.questItem, item, this.parent.ignoreDamage, this.parent.ignoreNBT)) { + count += item.stackSize; + } + for(int i = 0; i < this.player.inventory.getSizeInventory(); ++i) { - ItemStack item = this.player.inventory.getStackInSlot(i); + item = this.player.inventory.getStackInSlot(i); if (!NoppesUtilServer.IsItemStackNull(item) && NoppesUtilPlayer.compareItems(this.questItem, item, this.parent.ignoreDamage, this.parent.ignoreNBT)) { count += item.stackSize; }