diff --git a/src/main/java/kamkeel/npcs/command/QuestCategoryCommand.java b/src/main/java/kamkeel/npcs/command/QuestCategoryCommand.java index 7d57851ba..eb673da35 100644 --- a/src/main/java/kamkeel/npcs/command/QuestCategoryCommand.java +++ b/src/main/java/kamkeel/npcs/command/QuestCategoryCommand.java @@ -1,10 +1,13 @@ package kamkeel.npcs.command; +import kamkeel.npcs.controllers.ProfileController; import kamkeel.npcs.network.packets.data.AchievementPacket; import kamkeel.npcs.network.packets.data.ChatAlertPacket; import net.minecraft.command.CommandException; import net.minecraft.command.ICommandSender; import net.minecraft.entity.player.EntityPlayerMP; +import noppes.npcs.config.ConfigMain; +import noppes.npcs.constants.EnumProfileSync; import noppes.npcs.constants.EnumQuestRepeat; import noppes.npcs.controllers.PlayerDataController; import noppes.npcs.controllers.PlayerQuestController; @@ -89,10 +92,17 @@ public class QuestCategoryCommand extends CommandKamkeelBase { count = 0; for(Quest quest : questCategory.quests.values()){ playerdata.questData.activeQuests.remove(quest.id); - if(quest.repeat == EnumQuestRepeat.RLDAILY || quest.repeat == EnumQuestRepeat.RLWEEKLY) - playerdata.questData.finishedQuests.put(quest.id, System.currentTimeMillis()); - else - playerdata.questData.finishedQuests.put(quest.id, sender.getEntityWorld().getTotalWorldTime()); + long completeTime; + if(quest.repeat == EnumQuestRepeat.RLDAILY || quest.repeat == EnumQuestRepeat.RLWEEKLY || quest.repeat == EnumQuestRepeat.RLCUSTOM){ + completeTime = System.currentTimeMillis(); + playerdata.questData.finishedQuests.put(quest.id, completeTime); + } else { + completeTime = sender.getEntityWorld().getTotalWorldTime(); + playerdata.questData.finishedQuests.put(quest.id, completeTime); + } + + if(ConfigMain.ProfilesEnabled && playerdata.player != null && quest.profileOptions.enableOptions && quest.profileOptions.completeControl == EnumProfileSync.Shared) + ProfileController.Instance.shareQuestCompletion(playerdata.player, quest.id, completeTime);; if(playerdata.player != null){ AchievementPacket.sendAchievement((EntityPlayerMP) playerdata.player, false, "quest.completed", quest.title); diff --git a/src/main/java/kamkeel/npcs/command/QuestCommand.java b/src/main/java/kamkeel/npcs/command/QuestCommand.java index 127fb1726..e1e0894d0 100644 --- a/src/main/java/kamkeel/npcs/command/QuestCommand.java +++ b/src/main/java/kamkeel/npcs/command/QuestCommand.java @@ -1,5 +1,6 @@ package kamkeel.npcs.command; +import kamkeel.npcs.controllers.ProfileController; import kamkeel.npcs.controllers.SyncController; import kamkeel.npcs.network.packets.data.AchievementPacket; import kamkeel.npcs.network.packets.data.ChatAlertPacket; @@ -8,6 +9,8 @@ import net.minecraft.command.ICommandSender; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import noppes.npcs.api.handler.data.IQuestObjective; +import noppes.npcs.config.ConfigMain; +import noppes.npcs.constants.EnumProfileSync; import noppes.npcs.constants.EnumQuestCompletion; import noppes.npcs.constants.EnumQuestRepeat; import noppes.npcs.controllers.PlayerDataController; @@ -103,14 +106,18 @@ public class QuestCommand extends CommandKamkeelBase { return; } for(PlayerData playerdata : data){ - if(playerdata.questData.activeQuests.containsKey(questid)){ - playerdata.questData.activeQuests.remove(questid); + playerdata.questData.activeQuests.remove(questid); + long completeTime; + if(quest.repeat == EnumQuestRepeat.RLDAILY || quest.repeat == EnumQuestRepeat.RLWEEKLY || quest.repeat == EnumQuestRepeat.RLCUSTOM){ + completeTime = System.currentTimeMillis(); + playerdata.questData.finishedQuests.put(quest.id, completeTime); + } else { + completeTime = sender.getEntityWorld().getTotalWorldTime(); + playerdata.questData.finishedQuests.put(quest.id, completeTime); } - if(quest.repeat == EnumQuestRepeat.RLDAILY || quest.repeat == EnumQuestRepeat.RLWEEKLY) - playerdata.questData.finishedQuests.put(quest.id, System.currentTimeMillis()); - else - playerdata.questData.finishedQuests.put(quest.id, sender.getEntityWorld().getTotalWorldTime()); + if(ConfigMain.ProfilesEnabled && playerdata.player != null && quest.profileOptions.enableOptions && quest.profileOptions.completeControl == EnumProfileSync.Shared) + ProfileController.Instance.shareQuestCompletion(playerdata.player, quest.id, completeTime); playerdata.save(); if(playerdata.player != null){ diff --git a/src/main/java/kamkeel/npcs/controllers/ProfileController.java b/src/main/java/kamkeel/npcs/controllers/ProfileController.java index 152b81222..80637fe15 100644 --- a/src/main/java/kamkeel/npcs/controllers/ProfileController.java +++ b/src/main/java/kamkeel/npcs/controllers/ProfileController.java @@ -9,6 +9,7 @@ import net.minecraft.server.MinecraftServer; import noppes.npcs.CustomNpcs; import noppes.npcs.CustomNpcsPermissions; import noppes.npcs.LogWriter; +import noppes.npcs.NoppesUtilServer; import noppes.npcs.api.entity.IPlayer; import noppes.npcs.api.handler.IPlayerData; import noppes.npcs.api.handler.data.IQuest; @@ -111,6 +112,7 @@ public class ProfileController implements IProfileController { profile.player = player; activeProfiles.put(player.getUniqueID(), profile); verifySlotQuests(profile.player); + save(player, profile); } } @@ -223,7 +225,7 @@ public class ProfileController implements IProfileController { mainFile.delete(); } fileNew.renameTo(mainFile); - EntityPlayerMP player = getPlayer(username); + EntityPlayer player = NoppesUtilServer.getPlayerByName(username); Profile newProfile; if (player != null) { newProfile = new Profile(player, compound); @@ -262,7 +264,7 @@ public class ProfileController implements IProfileController { } public Profile getProfile(String username) { - EntityPlayer player = getPlayer(username); + EntityPlayer player = NoppesUtilServer.getPlayerByName(username); if (player != null) { return getProfile(player); } else { @@ -635,10 +637,6 @@ public class ProfileController implements IProfileController { return currentSlots < highestAllowed; } - public EntityPlayerMP getPlayer(String username) { - return MinecraftServer.getServer().getConfigurationManager().func_152612_a(username); - } - @Override public IProfile getProfile(IPlayer player) { if(player == null || player.getMCEntity() == null) @@ -757,7 +755,6 @@ public class ProfileController implements IProfileController { playerQuestData.finishedQuests.putAll(universalFinished); } } - ProfileController.Instance.save(player, profile); } public void shareQuestCompletion(EntityPlayer player, int questId, long completeTime) { @@ -774,9 +771,9 @@ public class ProfileController implements IProfileController { if (existing == null || completeTime > existing) { questData.finishedQuests.put(questId, completeTime); } + playerData.save(); } } - // Optionally, immediately persist the updated profile. save(player, profile); } } diff --git a/src/main/java/noppes/npcs/controllers/PlayerQuestController.java b/src/main/java/noppes/npcs/controllers/PlayerQuestController.java index c994aec34..f7d38a3b3 100644 --- a/src/main/java/noppes/npcs/controllers/PlayerQuestController.java +++ b/src/main/java/noppes/npcs/controllers/PlayerQuestController.java @@ -99,11 +99,7 @@ public class PlayerQuestController { PlayerData playerdata = PlayerData.get(player); PlayerQuestData data = playerdata.questData; data.activeQuests.remove(quest.id); - if(quest.repeat == EnumQuestRepeat.RLDAILY || quest.repeat == EnumQuestRepeat.RLWEEKLY) - data.finishedQuests.put(quest.id, System.currentTimeMillis()); - else - data.finishedQuests.put(quest.id,player.worldObj.getTotalWorldTime()); - + setQuestFinishedUtil(player, quest, data); if(quest.repeat != EnumQuestRepeat.NONE && quest.type == EnumQuestType.Dialog){ QuestDialog questdialog = (QuestDialog) quest.questInterface; for(int dialog : questdialog.dialogs.values()){ diff --git a/src/main/java/noppes/npcs/controllers/data/PlayerQuestData.java b/src/main/java/noppes/npcs/controllers/data/PlayerQuestData.java index 134f80312..cb91cfc7a 100644 --- a/src/main/java/noppes/npcs/controllers/data/PlayerQuestData.java +++ b/src/main/java/noppes/npcs/controllers/data/PlayerQuestData.java @@ -18,6 +18,7 @@ import noppes.npcs.constants.EnumQuestRepeat; import noppes.npcs.constants.EnumQuestType; import noppes.npcs.controllers.PartyController; import noppes.npcs.controllers.PlayerDataController; +import noppes.npcs.controllers.PlayerQuestController; import noppes.npcs.controllers.QuestController; import noppes.npcs.entity.EntityNPCInterface; import noppes.npcs.quests.QuestInterface; @@ -229,12 +230,7 @@ public class PlayerQuestData implements IPlayerQuestData { Quest quest = QuestController.Instance.quests.get(id); if (quest == null) return; - - if(quest.repeat == EnumQuestRepeat.RLDAILY || quest.repeat == EnumQuestRepeat.RLWEEKLY) - finishedQuests.put(quest.id, System.currentTimeMillis()); - else - finishedQuests.put(quest.id, parent.player.worldObj.getTotalWorldTime()); - + PlayerQuestController.setQuestFinished(quest, parent.player); parent.updateClient = true; }