From df069c82c2a5f3e6199a4f0a83dadbd41927fbfc Mon Sep 17 00:00:00 2001 From: "Luis C.M" <42545778+c0508383@users.noreply.github.com> Date: Thu, 16 Mar 2023 23:37:57 -0500 Subject: [PATCH] Added a quest alert toggle for each quest in the quest log. Fixed instant complete quests not finishing sometimes. --- .../java/noppes/npcs/NoppesUtilPlayer.java | 36 ++++++++------- .../java/noppes/npcs/NoppesUtilServer.java | 2 +- .../java/noppes/npcs/PacketHandlerPlayer.java | 2 +- .../java/noppes/npcs/PacketHandlerServer.java | 45 ++++++++++++------- src/main/java/noppes/npcs/QuestLogData.java | 13 +++++- .../java/noppes/npcs/ServerEventsHandler.java | 44 ++++++++++-------- .../npcs/client/gui/player/GuiQuestLog.java | 19 ++++++-- .../npcs/constants/EnumPacketServer.java | 2 +- .../controllers/PlayerQuestController.java | 18 ++++---- .../controllers/data/PlayerQuestData.java | 12 ++--- .../noppes/npcs/controllers/data/Quest.java | 5 +-- .../npcs/controllers/data/QuestData.java | 3 ++ .../noppes/npcs/roles/JobConversation.java | 3 +- .../assets/customnpcs/lang/en_US.lang | 4 ++ 14 files changed, 133 insertions(+), 75 deletions(-) diff --git a/src/main/java/noppes/npcs/NoppesUtilPlayer.java b/src/main/java/noppes/npcs/NoppesUtilPlayer.java index abb17460d..8bd76ac41 100644 --- a/src/main/java/noppes/npcs/NoppesUtilPlayer.java +++ b/src/main/java/noppes/npcs/NoppesUtilPlayer.java @@ -18,10 +18,7 @@ import net.minecraftforge.oredict.OreDictionary; import noppes.npcs.api.entity.IPlayer; import noppes.npcs.api.handler.data.IQuestObjective; import noppes.npcs.api.item.IItemStack; -import noppes.npcs.constants.EnumOptionType; -import noppes.npcs.constants.EnumPacketClient; -import noppes.npcs.constants.EnumPlayerPacket; -import noppes.npcs.constants.EnumRoleType; +import noppes.npcs.constants.*; import noppes.npcs.containers.ContainerNPCBankInterface; import noppes.npcs.containers.ContainerNPCFollower; import noppes.npcs.containers.ContainerNPCFollowerHire; @@ -329,25 +326,27 @@ public class NoppesUtilPlayer { data.setData(player); Server.sendData(player, EnumPacketClient.GUI_DATA, data.writeNBT()); } - public static void questCompletion(EntityPlayerMP player, int questId) { + public static boolean questCompletion(EntityPlayerMP player, int questId) { if(player == null) - return; + return false; PlayerData playerData = PlayerDataController.instance.getPlayerData(player); PlayerQuestData questData = playerData.questData; QuestData data = questData.activeQuests.get(questId); - if(data == null) - return; + if (data == null) + return false; - if(!data.quest.questInterface.isCompleted(playerData)) - return; + if (!data.quest.questInterface.isCompleted(playerData)) + return false; + + if (data.quest.completion == EnumQuestCompletion.Instant) { + EventHooks.onQuestFinished(player, data.quest); + } QuestEvent.QuestTurnedInEvent event = new QuestEvent.QuestTurnedInEvent((IPlayer) NpcAPI.Instance().getIEntity(player), data.quest); - if (event.isCancelled()) - return; - event.expReward = data.quest.rewardExp; + event.expReward = data.quest.rewardExp; List list = new ArrayList(); Iterator var8 = data.quest.rewardItems.items.values().iterator(); @@ -368,6 +367,9 @@ public class NoppesUtilPlayer { } EventHooks.onQuestTurnedIn(event); + if (event.isCancelled()) + return false; + IItemStack[] var12 = event.itemRewards; int var14 = var12.length; for(int var10 = 0; var10 < var14; ++var10) { @@ -393,11 +395,13 @@ public class NoppesUtilPlayer { PlayerQuestController.setQuestFinished(data.quest, player); if (data.quest.hasNewQuest()) { - Quest nextQuest = data.quest.getNextQuest(); + 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); + NoppesUtilPlayer.sendTrackedQuestData(player,nextQuest.quest); } - playerData.savePlayerDataOnFile(); + + return true; } public static boolean compareItems(ItemStack item, ItemStack item2, boolean ignoreDamage, boolean ignoreNBT){ diff --git a/src/main/java/noppes/npcs/NoppesUtilServer.java b/src/main/java/noppes/npcs/NoppesUtilServer.java index f6d8f0b5e..2f94ff001 100644 --- a/src/main/java/noppes/npcs/NoppesUtilServer.java +++ b/src/main/java/noppes/npcs/NoppesUtilServer.java @@ -179,7 +179,7 @@ public class NoppesUtilServer { Server.sendData((EntityPlayerMP)player, EnumPacketClient.DIALOG, npc.getEntityId(), dialog.writeToNBT(new NBTTagCompound())); dia.factionOptions.addPoints(player); if(dialog.hasQuest()) - PlayerQuestController.addActiveQuest(dialog.getQuest(),player); + PlayerQuestController.addActiveQuest(new QuestData(dialog.getQuest()),player); if(!dialog.command.isEmpty()){ runCommand(player, npc.getCommandSenderName(), dialog.command); } diff --git a/src/main/java/noppes/npcs/PacketHandlerPlayer.java b/src/main/java/noppes/npcs/PacketHandlerPlayer.java index 80efb2d71..75234c231 100644 --- a/src/main/java/noppes/npcs/PacketHandlerPlayer.java +++ b/src/main/java/noppes/npcs/PacketHandlerPlayer.java @@ -267,7 +267,7 @@ public class PacketHandlerPlayer{ if(mail.time == time && mail.sender.equals(username)){ mail.beenRead = true; if(mail.hasQuest()) - PlayerQuestController.addActiveQuest(mail.getQuest(), player); + PlayerQuestController.addActiveQuest(new QuestData(mail.getQuest()), player); } } } diff --git a/src/main/java/noppes/npcs/PacketHandlerServer.java b/src/main/java/noppes/npcs/PacketHandlerServer.java index f1bc59ec2..0e9e2b65e 100644 --- a/src/main/java/noppes/npcs/PacketHandlerServer.java +++ b/src/main/java/noppes/npcs/PacketHandlerServer.java @@ -47,10 +47,7 @@ import noppes.npcs.scripted.gui.ScriptGui; import noppes.npcs.scripted.item.ScriptCustomItem; import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Set; +import java.util.*; public class PacketHandlerServer{ @@ -92,8 +89,8 @@ public class PacketHandlerServer{ } else if (type == EnumPacketServer.CustomGuiClose) { EventHooks.onCustomGuiClose((IPlayer) NpcAPI.Instance().getIEntity(player), (new ScriptGui()).fromNBT(Server.readNBT(buffer))); return; - } else if (type == EnumPacketServer.UpdateTrackedQuest) { - updateTrackedQuest(buffer, player); + } else if (type == EnumPacketServer.QuestLogToServer) { + updateQuestLogData(buffer, player); return; } @@ -142,12 +139,11 @@ public class PacketHandlerServer{ } } - private void updateTrackedQuest(ByteBuf buffer, EntityPlayerMP player) { - String trackedQuestString = Server.readString(buffer); - if (trackedQuestString != null && trackedQuestString.contains(":")) { - String[] splitString = trackedQuestString.split(":"); + private Quest getQuestFromString(String string) { + if (string != null && string.contains(":")) { + String[] splitString = string.split(":"); if(splitString.length < 2){ - return; + return null; } String categoryName = splitString[0]; String questName = splitString[1]; @@ -156,16 +152,35 @@ public class PacketHandlerServer{ if (category.title.equals(categoryName)) { for (Quest quest : category.quests.values()) { if (quest.title.equals(questName)) { - PlayerDataController.instance.getPlayerData(player).questData.trackedQuest = quest; - NoppesUtilPlayer.sendTrackedQuestData(player, quest); - return; + return quest; } } } } } + return null; + } - PlayerDataController.instance.getPlayerData(player).questData.trackedQuest = 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 trackedQuest = this.getQuestFromString(trackedQuestString); + if (trackedQuest != null) { + playerData.questData.trackedQuest = trackedQuest; + NoppesUtilPlayer.sendTrackedQuestData(player, trackedQuest); + } + + playerData.questData.trackedQuest = null; Server.sendData(player, EnumPacketClient.OVERLAY_QUEST_TRACKING); } diff --git a/src/main/java/noppes/npcs/QuestLogData.java b/src/main/java/noppes/npcs/QuestLogData.java index 22ea6ce7a..10673c6aa 100644 --- a/src/main/java/noppes/npcs/QuestLogData.java +++ b/src/main/java/noppes/npcs/QuestLogData.java @@ -17,6 +17,7 @@ public class QuestLogData { public String selectedQuest = ""; public String selectedCategory = ""; public HashMap questText = new HashMap(); + public HashMap questAlerts = new HashMap<>(); public HashMap> questStatus = new HashMap>(); public HashMap finish = new HashMap(); @@ -24,6 +25,7 @@ public class QuestLogData { NBTTagCompound compound = new NBTTagCompound(); compound.setTag("Categories", NBTTags.nbtVectorMap(categories)); compound.setTag("Logs", NBTTags.nbtStringStringMap(questText)); + compound.setTag("Alerts", NBTTags.nbtStringStringMap(questAlerts)); compound.setTag("Status", NBTTags.nbtVectorMap(questStatus)); compound.setTag("QuestFinisher", NBTTags.nbtStringStringMap(finish)); compound.setString("TrackedQuestID", trackedQuestKey); @@ -33,6 +35,7 @@ public class QuestLogData { public void readNBT(NBTTagCompound compound){ categories = NBTTags.getVectorMap(compound.getTagList("Categories", 10)); questText = NBTTags.getStringStringMap(compound.getTagList("Logs", 10)); + questAlerts = NBTTags.getStringStringMap(compound.getTagList("Alerts", 10)); questStatus = NBTTags.getVectorMap(compound.getTagList("Status", 10)); finish = NBTTags.getStringStringMap(compound.getTagList("QuestFinisher", 10)); trackedQuestKey = compound.getString("TrackedQuestID"); @@ -49,7 +52,7 @@ public class QuestLogData { list.add(quest.title); questText.put(category + ":" + quest.title, quest.logText); - + questAlerts.put(category + ":" + quest.title, String.valueOf(playerData.questData.activeQuests.get(quest.id).sendAlerts)); questStatus.put(category + ":" + quest.title, quest.questInterface.getQuestLogStatus(player)); if(quest.completion == EnumQuestCompletion.Npc && quest.questInterface.isCompleted(playerData)) finish.put(category + ":" + quest.title, quest.completerNpc); @@ -70,6 +73,14 @@ public class QuestLogData { return questText.get(selectedCategory + ":" + selectedQuest); } + public Boolean getQuestAlerts() { + return Boolean.valueOf(questAlerts.get(selectedCategory+":"+selectedQuest)); + } + + public void toggleQuestAlerts() { + questAlerts.put(selectedCategory+":"+selectedQuest,String.valueOf(!getQuestAlerts())); + } + public Vector getQuestStatus() { return questStatus.get(selectedCategory + ":" + selectedQuest); } diff --git a/src/main/java/noppes/npcs/ServerEventsHandler.java b/src/main/java/noppes/npcs/ServerEventsHandler.java index 3771af74b..0add96661 100644 --- a/src/main/java/noppes/npcs/ServerEventsHandler.java +++ b/src/main/java/noppes/npcs/ServerEventsHandler.java @@ -292,48 +292,54 @@ public class ServerEventsHandler { private void doQuest(EntityPlayer player, EntityLivingBase entity, boolean all) { PlayerData playerData = PlayerDataController.instance.getPlayerData(player); PlayerQuestData questData = playerData.questData; - boolean change = false; + boolean checkCompletion = false; String entityName = EntityList.getEntityString(entity); ArrayList activeQuestValues = new ArrayList<>(questData.activeQuests.values()); for(QuestData data : activeQuestValues){ - if(data.quest.type != EnumQuestType.Kill && data.quest.type != EnumQuestType.AreaKill) + if (data.quest.type != EnumQuestType.Kill && data.quest.type != EnumQuestType.AreaKill) continue; - if(data.quest.type == EnumQuestType.AreaKill && all){ - List list = player.worldObj.getEntitiesWithinAABB(EntityPlayer.class, entity.boundingBox.expand(10, 10, 10)); - for(EntityPlayer pl : list) - if(pl != player) - doQuest(pl, entity, false); + if (data.quest.type == EnumQuestType.AreaKill && all) { + List list = player.worldObj.getEntitiesWithinAABB(EntityPlayer.class, entity.boundingBox.expand(10, 10, 10)); + for (EntityPlayer pl : list) { + if (pl != player) { + doQuest(pl, entity, false); + } + } } String name = entityName; QuestKill quest = (QuestKill) data.quest.questInterface; Class entityType = EntityNPCInterface.class; - if(quest.targetType == 2) { + if (quest.targetType == 2) { try { entityType = Class.forName(quest.customTargetType); } catch (ClassNotFoundException notFoundException) { continue; } } - if(quest.targetType > 0 && !(entityType.isInstance(entity))) + + if (quest.targetType > 0 && !(entityType.isInstance(entity))) continue; - if(quest.targets.containsKey(entity.getCommandSenderName())) + + if (quest.targets.containsKey(entity.getCommandSenderName())) name = entity.getCommandSenderName(); - else if(!quest.targets.containsKey(name)) + else if (!quest.targets.containsKey(name)) continue; + + checkCompletion = true; + HashMap killed = quest.getKilled(data); - if(killed.containsKey(name) && killed.get(name) >= quest.targets.get(name)) - continue; - int amount = 0; - if(killed.containsKey(name)) - amount = killed.get(name); - killed.put(name, amount + 1); + if (!killed.containsKey(name)) { + killed.put(name, 1); + } else if(killed.get(name) < quest.targets.get(name)) { + int amount = killed.get(name); + killed.put(name, amount + 1); + } quest.setKilled(data, killed); - change = true; } - if(!change) + if(!checkCompletion) return; questData.checkQuestCompletion(playerData,EnumQuestType.Kill); diff --git a/src/main/java/noppes/npcs/client/gui/player/GuiQuestLog.java b/src/main/java/noppes/npcs/client/gui/player/GuiQuestLog.java index cedbe2804..7b59feeca 100644 --- a/src/main/java/noppes/npcs/client/gui/player/GuiQuestLog.java +++ b/src/main/java/noppes/npcs/client/gui/player/GuiQuestLog.java @@ -6,6 +6,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ResourceLocation; import net.minecraft.util.StatCollector; +import noppes.npcs.NBTTags; import noppes.npcs.NoppesUtilPlayer; import noppes.npcs.QuestLogData; import noppes.npcs.client.Client; @@ -83,15 +84,19 @@ public class GuiQuestLog extends GuiNPCInterface implements ITopButtonListener,I addButton(new GuiButtonNextPage(1, guiLeft + 286, guiTop + 176, true)); addButton(new GuiButtonNextPage(2, guiLeft + 144, guiTop + 176, false)); - GuiNpcButton trackingButton = new GuiNpcButton(3, guiLeft + 260, guiTop + 151, 50, 20, new String[]{"Track", "Tracking"}, data.trackedQuestKey.equals(data.selectedCategory + ":" + data.selectedQuest) ? 1 : 0); - if (trackingButton.displayString.equals("Tracking")) { + GuiNpcButton trackingButton = new GuiNpcButton(3, guiLeft + 260, guiTop + 151, 50, 20, new String[]{"quest.track", "quest.tracking"}, data.trackedQuestKey.equals(data.selectedCategory + ":" + data.selectedQuest) ? 1 : 0); + if (trackingButton.displayString.equals("quest.tracking")) { trackingButton.packedFGColour = 0x32CD32; } addButton(trackingButton); + GuiNpcButton alertButton = new GuiNpcButton(4, guiLeft + 205, guiTop + 151, 50, 20, new String[]{"quest.alerts", "quest.noAlerts"}, data.getQuestAlerts() ? 0 : 1); + addButton(alertButton); + getButton(1).visible = questDetails && data.hasSelectedQuest(); getButton(2).visible = !questDetails && data.hasSelectedQuest(); getButton(3).visible = !data.selectedQuest.isEmpty() && getButton(1).visible; + getButton(4).visible = getButton(3).visible; } @Override protected void actionPerformed(GuiButton guibutton){ @@ -108,6 +113,9 @@ public class GuiQuestLog extends GuiNPCInterface implements ITopButtonListener,I data.trackedQuestKey = ""; } } + if(guibutton.id == 4){ + data.toggleQuestAlerts(); + } initGui(); } @Override @@ -248,8 +256,11 @@ public class GuiQuestLog extends GuiNPCInterface implements ITopButtonListener,I @Override public void save() { - if (this.data != null) - Client.sendData(EnumPacketServer.UpdateTrackedQuest, this.data.trackedQuestKey); + if (this.data != null) { + NBTTagCompound compound = new NBTTagCompound(); + compound.setTag("Alerts", NBTTags.nbtStringStringMap(data.questAlerts)); + Client.sendData(EnumPacketServer.QuestLogToServer, compound, this.data.trackedQuestKey); + } } } diff --git a/src/main/java/noppes/npcs/constants/EnumPacketServer.java b/src/main/java/noppes/npcs/constants/EnumPacketServer.java index 2718504f9..0001a6117 100644 --- a/src/main/java/noppes/npcs/constants/EnumPacketServer.java +++ b/src/main/java/noppes/npcs/constants/EnumPacketServer.java @@ -85,7 +85,7 @@ public enum EnumPacketServer { AnimationListGet, AnimationGet, AnimationAdd, AnimationDelete, AnimationSave, - RecipesGet, RecipeGet, QuestOpenGui, PlayerDataGet, UpdateTrackedQuest, + RecipesGet, RecipeGet, QuestOpenGui, PlayerDataGet, QuestLogToServer, RemoteNpcsGet(CustomNpcsPermissions.NPC_GUI), RemoteTpToNpc,QuestGet, QuestCategoryGet, diff --git a/src/main/java/noppes/npcs/controllers/PlayerQuestController.java b/src/main/java/noppes/npcs/controllers/PlayerQuestController.java index 6cd53c755..a24e981bf 100644 --- a/src/main/java/noppes/npcs/controllers/PlayerQuestController.java +++ b/src/main/java/noppes/npcs/controllers/PlayerQuestController.java @@ -35,19 +35,21 @@ public class PlayerQuestController { return data.finishedQuests.containsKey(questid); } - public static void addActiveQuest(Quest quest, EntityPlayer player) { + public static void addActiveQuest(QuestData questData, EntityPlayer player) { PlayerQuestData data = PlayerDataController.instance.getPlayerData(player).questData; - if(canQuestBeAccepted(quest, player)){ - if (EventHooks.onQuestStarted(player, quest)) { + if(canQuestBeAccepted(questData.quest, player)){ + if (EventHooks.onQuestStarted(player, questData.quest)) { return; } - data.activeQuests.put(quest.id,new QuestData(quest)); - Server.sendData((EntityPlayerMP)player, EnumPacketClient.MESSAGE, "quest.newquest", quest.title); - Server.sendData((EntityPlayerMP)player, EnumPacketClient.CHAT, "quest.newquest", ": ", quest.title); + data.activeQuests.put(questData.quest.id,questData); + if (questData.sendAlerts) { + Server.sendData((EntityPlayerMP) player, EnumPacketClient.MESSAGE, "quest.newquest", questData.quest.title); + Server.sendData((EntityPlayerMP) player, EnumPacketClient.CHAT, "quest.newquest", ": ", questData.quest.title); + } } else { - long timeUntilRepeat = quest.getTimeUntilRepeat(player); - if (timeUntilRepeat > 0 && quest.getIsRepeatable() && quest.repeat != EnumQuestRepeat.NONE && quest.repeat != EnumQuestRepeat.REPEATABLE) { + long timeUntilRepeat = questData.quest.getTimeUntilRepeat(player); + if (timeUntilRepeat > 0 && questData.quest.getIsRepeatable() && questData.quest.repeat != EnumQuestRepeat.NONE && questData.quest.repeat != EnumQuestRepeat.REPEATABLE) { String timeString = NoppesUtilServer.millisToTime(timeUntilRepeat); String message = "You have " + timeString + " left until you can repeat this quest."; player.addChatMessage(new ChatComponentTranslation(NoppesStringUtils.formatText(message,player))); diff --git a/src/main/java/noppes/npcs/controllers/data/PlayerQuestData.java b/src/main/java/noppes/npcs/controllers/data/PlayerQuestData.java index 45400d870..709a8a183 100644 --- a/src/main/java/noppes/npcs/controllers/data/PlayerQuestData.java +++ b/src/main/java/noppes/npcs/controllers/data/PlayerQuestData.java @@ -124,18 +124,20 @@ public class PlayerQuestData implements IPlayerQuestData { QuestInterface inter = data.quest.questInterface; if(inter.isCompleted(playerData)){ - if(!data.isCompleted){ - if(!data.quest.complete(player,data) || data.quest.completeText.isEmpty()){ + if((!data.isCompleted && data.quest.completion == EnumQuestCompletion.Npc) || data.quest.instantComplete(player,data)){ + if (data.quest.completeText.isEmpty() && data.sendAlerts) { Server.sendData((EntityPlayerMP)player, EnumPacketClient.MESSAGE, "quest.completed", data.quest.title); Server.sendData((EntityPlayerMP)player, EnumPacketClient.CHAT, "quest.completed",": ",data.quest.title); } data.isCompleted = true; + if (data.quest.completion == EnumQuestCompletion.Npc) { + EventHooks.onQuestFinished(player, data.quest); + } bo = true; - EventHooks.onQuestFinished(player,data.quest); } - } - else + } else { data.isCompleted = false; + } } 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 3c73aa382..ee4eb0eab 100644 --- a/src/main/java/noppes/npcs/controllers/data/Quest.java +++ b/src/main/java/noppes/npcs/controllers/data/Quest.java @@ -130,9 +130,8 @@ public class Quest implements ICompatibilty, IQuest { return QuestController.instance == null?null:QuestController.instance.quests.get(nextQuestid); } - public boolean complete(EntityPlayer player, QuestData data) { - if(completion == EnumQuestCompletion.Instant){ - NoppesUtilPlayer.questCompletion((EntityPlayerMP) player, data.quest.id); + public boolean instantComplete(EntityPlayer player, QuestData data) { + if(completion == EnumQuestCompletion.Instant && NoppesUtilPlayer.questCompletion((EntityPlayerMP) player, data.quest.id)){ Server.sendData((EntityPlayerMP)player, EnumPacketClient.QUEST_COMPLETION, data.quest.writeToNBT(new NBTTagCompound())); return true; } diff --git a/src/main/java/noppes/npcs/controllers/data/QuestData.java b/src/main/java/noppes/npcs/controllers/data/QuestData.java index 7db1bd6b8..d19fd30dc 100644 --- a/src/main/java/noppes/npcs/controllers/data/QuestData.java +++ b/src/main/java/noppes/npcs/controllers/data/QuestData.java @@ -5,16 +5,19 @@ import net.minecraft.nbt.NBTTagCompound; public class QuestData { public Quest quest; public boolean isCompleted; + public boolean sendAlerts = true; public NBTTagCompound extraData = new NBTTagCompound(); public QuestData(Quest quest){ this.quest = quest; } public void writeEntityToNBT(NBTTagCompound nbttagcompound){ nbttagcompound.setBoolean("QuestCompleted", isCompleted); + nbttagcompound.setBoolean("SendAlerts", sendAlerts); nbttagcompound.setTag("ExtraData", extraData); } public void readEntityFromNBT(NBTTagCompound nbttagcompound){ isCompleted = nbttagcompound.getBoolean("QuestCompleted"); + sendAlerts = nbttagcompound.getBoolean("SendAlerts"); extraData = nbttagcompound.getCompoundTag("ExtraData"); } } diff --git a/src/main/java/noppes/npcs/roles/JobConversation.java b/src/main/java/noppes/npcs/roles/JobConversation.java index 91b356c92..96db172bf 100644 --- a/src/main/java/noppes/npcs/roles/JobConversation.java +++ b/src/main/java/noppes/npcs/roles/JobConversation.java @@ -8,6 +8,7 @@ import noppes.npcs.controllers.QuestController; import noppes.npcs.controllers.data.Availability; import noppes.npcs.controllers.data.Line; import noppes.npcs.controllers.data.Quest; +import noppes.npcs.controllers.data.QuestData; import noppes.npcs.entity.EntityNPCInterface; import java.util.ArrayList; @@ -123,7 +124,7 @@ public class JobConversation extends JobInterface{ for (EntityPlayer player : inRange){ if(availability.isAvailable(player)) - PlayerQuestController.addActiveQuest(getQuest(), player); + PlayerQuestController.addActiveQuest(new QuestData(getQuest()), player); } } } diff --git a/src/main/resources/assets/customnpcs/lang/en_US.lang b/src/main/resources/assets/customnpcs/lang/en_US.lang index 63a920406..63c1528a7 100644 --- a/src/main/resources/assets/customnpcs/lang/en_US.lang +++ b/src/main/resources/assets/customnpcs/lang/en_US.lang @@ -500,6 +500,10 @@ quest.randomitem=Random Item quest.exp=Exp quest.takeitems=Take Items quest.objectives=Objectives +quest.track=Track +quest.tracking=Tracking +quest.alerts=Alerts +quest.noAlerts=No Alerts script.apidoc=API Docs script.apisrc=API Source