diff options
Diffstat (limited to 'src/me/fatpigsarefat')
8 files changed, 187 insertions, 28 deletions
diff --git a/src/me/fatpigsarefat/quests/Quests.java b/src/me/fatpigsarefat/quests/Quests.java index 1f2b8951..bfbc1081 100644 --- a/src/me/fatpigsarefat/quests/Quests.java +++ b/src/me/fatpigsarefat/quests/Quests.java @@ -147,6 +147,9 @@ public class Quests extends JavaPlugin { @Override public void run() { for (QPlayer qPlayer : qPlayerManager.getQPlayers()) { + if (qPlayer.isOnlyDataLoaded()) { + continue; + } qPlayer.getQuestProgressFile().saveToDisk(); } } @@ -155,6 +158,9 @@ public class Quests extends JavaPlugin { @Override public void run() { for (QPlayer qPlayer : qPlayerManager.getQPlayers()) { + if (qPlayer.isOnlyDataLoaded()) { + continue; + } QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile(); for (Map.Entry<String, Quest> entry : Quests.getQuestManager().getQuests().entrySet()) { String id = entry.getKey(); @@ -188,6 +194,9 @@ public class Quests extends JavaPlugin { @Override public void onDisable() { for (QPlayer qPlayer : qPlayerManager.getQPlayers()) { + if (qPlayer.isOnlyDataLoaded()) { + continue; + } qPlayer.getQuestProgressFile().saveToDisk(); } } diff --git a/src/me/fatpigsarefat/quests/commands/CommandQuests.java b/src/me/fatpigsarefat/quests/commands/CommandQuests.java index a1975ef5..46258d64 100644 --- a/src/me/fatpigsarefat/quests/commands/CommandQuests.java +++ b/src/me/fatpigsarefat/quests/commands/CommandQuests.java @@ -4,17 +4,21 @@ import me.fatpigsarefat.quests.Quests; import me.fatpigsarefat.quests.obj.Messages; import me.fatpigsarefat.quests.obj.Options; import me.fatpigsarefat.quests.player.QPlayer; +import me.fatpigsarefat.quests.player.questprogressfile.QuestProgressFile; import me.fatpigsarefat.quests.quests.Category; import me.fatpigsarefat.quests.quests.Quest; import me.fatpigsarefat.quests.quests.tasktypes.TaskType; import org.bukkit.Bukkit; import org.bukkit.ChatColor; +import org.bukkit.OfflinePlayer; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; +import java.util.UUID; + public class CommandQuests implements CommandExecutor { public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { @@ -108,41 +112,137 @@ public class CommandQuests implements CommandExecutor { sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_PLAYERNOTFOUND.getMessage().replace("{player}", args[3])); return true; } - //TODO finish moddata command showAdminHelp(sender, "opengui"); return true; } else if (args[1].equalsIgnoreCase("moddata")) { + Player player; + OfflinePlayer ofp; + UUID uuid; + String name; + if ((player = Bukkit.getPlayer(args[3])) != null) { + uuid = player.getUniqueId(); + name = player.getName(); + } else if ((ofp = Bukkit.getOfflinePlayer(args[3])) != null) { + uuid = ofp.getUniqueId(); + name = ofp.getName(); + } else { + sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_PLAYERNOTFOUND.getMessage().replace("{player}", args[3])); + return true; + } + if (args[2].equalsIgnoreCase("fullreset")) { + if (Quests.getPlayerManager().getPlayer(uuid) == null) { + sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_LOADDATA.getMessage().replace("{player}", name)); + Quests.getPlayerManager().loadPlayer(uuid, true); + } + if (Quests.getPlayerManager().getPlayer(uuid) == null) { + sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_NODATA.getMessage().replace("{player}", name)); + return true; + } + QuestProgressFile questProgressFile = Quests.getPlayerManager().getPlayer(uuid).getQuestProgressFile(); + questProgressFile.clear(); + questProgressFile.saveToDisk(); + sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_FULLRESET.getMessage().replace("{player}", name)); + return true; + } + if (Quests.getPlayerManager().getPlayer(uuid).isOnlyDataLoaded()) { + Quests.getPlayerManager().removePlayer(uuid); + } showAdminHelp(sender, "moddata"); return true; } } else if (args.length == 5) { - if (args[2].equalsIgnoreCase("c") || args[2].equalsIgnoreCase("category")) { - if (!Options.CATEGORIES_ENABLED.getBooleanValue()) { - sender.sendMessage(Messages.COMMAND_CATEGORY_OPEN_DISABLED.getMessage()); + if (args[1].equalsIgnoreCase("opengui")) { + if (args[2].equalsIgnoreCase("c") || args[2].equalsIgnoreCase("category")) { + if (!Options.CATEGORIES_ENABLED.getBooleanValue()) { + sender.sendMessage(Messages.COMMAND_CATEGORY_OPEN_DISABLED.getMessage()); + return true; + } + Category category = Quests.getQuestManager().getCategoryById(args[4]); + if (category == null) { + sender.sendMessage(Messages.COMMAND_CATEGORY_OPEN_DOESNTEXIST.getMessage().replace("{category}", args[4])); + return true; + } + Player player = Bukkit.getPlayer(args[3]); + if (player != null) { + QPlayer qPlayer = Quests.getPlayerManager().getPlayer(player.getUniqueId()); + if (qPlayer != null) { + qPlayer.openCategory(category); + sender.sendMessage(Messages.COMMAND_QUEST_OPENCATEGORY_ADMIN_SUCCESS.getMessage().replace("{player}", player.getName()) + .replace("{category}", category.getId())); + return true; + } + } + sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_PLAYERNOTFOUND.getMessage().replace("{player}", args[3])); return true; } - Category category = Quests.getQuestManager().getCategoryById(args[4]); - if (category == null) { - sender.sendMessage(Messages.COMMAND_CATEGORY_OPEN_DOESNTEXIST.getMessage().replace("{category}", args[4])); + } else if (args[1].equalsIgnoreCase("moddata")) { + Player player; + OfflinePlayer ofp; + UUID uuid; + String name; + if ((player = Bukkit.getPlayer(args[3])) != null) { + uuid = player.getUniqueId(); + name = player.getName(); + } else if ((ofp = Bukkit.getOfflinePlayer(args[3])) != null) { + uuid = ofp.getUniqueId(); + name = ofp.getName(); + } else { + sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_PLAYERNOTFOUND.getMessage().replace("{player}", args[3])); return true; } - Player player = Bukkit.getPlayer(args[3]); - if (player != null) { - QPlayer qPlayer = Quests.getPlayerManager().getPlayer(player.getUniqueId()); - if (qPlayer != null) { - qPlayer.openCategory(category); - sender.sendMessage(Messages.COMMAND_QUEST_OPENCATEGORY_ADMIN_SUCCESS.getMessage().replace("{player}", player.getName()) - .replace("{category}", category.getId())); + if (Quests.getPlayerManager().getPlayer(uuid) == null) { + sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_LOADDATA.getMessage().replace("{player}", name)); + Quests.getPlayerManager().loadPlayer(uuid, true); + } + if (Quests.getPlayerManager().getPlayer(uuid) == null) { + sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_NODATA.getMessage().replace("{player}", name)); + return true; + } + QuestProgressFile questProgressFile = Quests.getPlayerManager().getPlayer(uuid).getQuestProgressFile(); + Quest quest = Quests.getQuestManager().getQuestById(args[4]); + if (quest == null) { + sender.sendMessage(Messages.COMMAND_QUEST_START_DOESNTEXIST.getMessage().replace("{quest}", args[4])); + return true; + } + if (args[2].equalsIgnoreCase("reset")) { + questProgressFile.generateBlankQuestProgress(quest.getId()); + questProgressFile.saveToDisk(); + sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_RESET_SUCCESS.getMessage().replace("{player}", name).replace("{quest}", quest.getId())); + return true; + } else if (args[2].equalsIgnoreCase("start")) { + int response = questProgressFile.startQuest(quest); + if (response == 1) { + sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_START_FAILLIMIT.getMessage().replace("{player}", name).replace("{quest}", quest.getId())); + return true; + } else if (response == 2) { + sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_START_FAILCOMPLETE.getMessage().replace("{player}", name).replace("{quest}", quest.getId())); + return true; + } else if (response == 3) { + sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_START_FAILCOOLDOWN.getMessage().replace("{player}", name).replace("{quest}", quest.getId())); + return true; + } else if (response == 4) { + sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_START_FAILLOCKED.getMessage().replace("{player}", name).replace("{quest}", quest.getId())); return true; } + questProgressFile.saveToDisk(); + sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_START_SUCCESS.getMessage().replace("{player}", name).replace("{quest}", quest.getId())); + return true; + } else if (args[2].equalsIgnoreCase("complete")) { + questProgressFile.completeQuest(quest); + questProgressFile.saveToDisk(); + sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_COMPLETE_SUCCESS.getMessage().replace("{player}", name).replace("{quest}", quest.getId())); + return true; } - sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_PLAYERNOTFOUND.getMessage().replace("{player}", args[3])); + if (Quests.getPlayerManager().getPlayer(uuid).isOnlyDataLoaded()) { + Quests.getPlayerManager().removePlayer(uuid); + } + showAdminHelp(sender, "moddata"); return true; } - } - showAdminHelp(sender, null); - return true; + showAdminHelp(sender, null); + return true; + } } if (sender instanceof Player && (args[0].equalsIgnoreCase("q") || args[0].equalsIgnoreCase("quests"))) { Player player = (Player) sender; diff --git a/src/me/fatpigsarefat/quests/events/EventInventory.java b/src/me/fatpigsarefat/quests/events/EventInventory.java index f39d2251..08d6ae63 100644 --- a/src/me/fatpigsarefat/quests/events/EventInventory.java +++ b/src/me/fatpigsarefat/quests/events/EventInventory.java @@ -51,7 +51,7 @@ public class EventInventory implements Listener { .getCurrentPage()) - 1) * qMenuQuest.getPageSize()))) { String questid = qMenuQuest.getSlotsToMenu().get(event.getSlot()); Quest quest = Quests.getQuestManager().getQuestById(questid); - if (qMenuQuest.getOwner().getQuestProgressFile().startQuest(quest)) { + if (qMenuQuest.getOwner().getQuestProgressFile().startQuest(quest) == 0) { event.getWhoClicked().closeInventory(); } } diff --git a/src/me/fatpigsarefat/quests/obj/Messages.java b/src/me/fatpigsarefat/quests/obj/Messages.java index 9d3882bd..1b81bf0e 100644 --- a/src/me/fatpigsarefat/quests/obj/Messages.java +++ b/src/me/fatpigsarefat/quests/obj/Messages.java @@ -25,7 +25,17 @@ public enum Messages { TITLE_QUEST_START_SUBTITLE("titles.quest-start.subtitle"), TITLE_QUEST_COMPLETE_TITLE("titles.quest-complete.title"), TITLE_QUEST_COMPLETE_SUBTITLE("titles.quest-complete.subtitle"), - BETA_REMINDER("messages.beta-reminder"); + BETA_REMINDER("messages.beta-reminder"), + COMMAND_QUEST_ADMIN_LOADDATA("messages.command-quest-admin-loaddata"), + COMMAND_QUEST_ADMIN_NODATA("messages.command-quest-admin-nodata"), + COMMAND_QUEST_ADMIN_FULLRESET("messages.command-quest-admin-fullreset"), + COMMAND_QUEST_ADMIN_START_FAILLOCKED("messages.command-quest-admin-start-faillocked"), + COMMAND_QUEST_ADMIN_START_FAILCOOLDOWN("messages.command-quest-admin-start-failcooldown"), + COMMAND_QUEST_ADMIN_START_FAILCOMPLETE("messages.command-quest-admin-start-failcomplete"), + COMMAND_QUEST_ADMIN_START_FAILLIMIT("messages.command-quest-admin-start-faillimit"), + COMMAND_QUEST_ADMIN_START_SUCCESS("messages.command-quest-admin-start-success"), + COMMAND_QUEST_ADMIN_COMPLETE_SUCCESS("messages.command-quest-admin-complete-success"), + COMMAND_QUEST_ADMIN_RESET_SUCCESS("messages.command-quest-admin-reset-success"); private String path; diff --git a/src/me/fatpigsarefat/quests/player/QPlayer.java b/src/me/fatpigsarefat/quests/player/QPlayer.java index 27e9283d..e797d7bb 100644 --- a/src/me/fatpigsarefat/quests/player/QPlayer.java +++ b/src/me/fatpigsarefat/quests/player/QPlayer.java @@ -21,10 +21,16 @@ public class QPlayer { private UUID uuid; private QuestProgressFile questProgressFile; + private boolean onlyDataLoaded; public QPlayer(UUID uuid, QuestProgressFile questProgressFile) { + this(uuid, questProgressFile, false); + } + + public QPlayer(UUID uuid, QuestProgressFile questProgressFile, boolean onlyDataLoaded) { this.uuid = uuid; this.questProgressFile = questProgressFile; + this.onlyDataLoaded = onlyDataLoaded; } public UUID getUuid() { @@ -32,6 +38,10 @@ public class QPlayer { } public void openCategory(Category category) { + if (onlyDataLoaded) { + return; + } + Player player = Bukkit.getPlayer(uuid); if (player == null) { return; @@ -53,6 +63,10 @@ public class QPlayer { } public void openQuests() { + if (onlyDataLoaded) { + return; + } + Player player = Bukkit.getPlayer(uuid); if (player == null) { return; @@ -91,6 +105,14 @@ public class QPlayer { } } + public boolean isOnlyDataLoaded() { + return onlyDataLoaded; + } + + public void setOnlyDataLoaded(boolean onlyDataLoaded) { + this.onlyDataLoaded = onlyDataLoaded; + } + public QuestProgressFile getQuestProgressFile() { return questProgressFile; } diff --git a/src/me/fatpigsarefat/quests/player/QPlayerManager.java b/src/me/fatpigsarefat/quests/player/QPlayerManager.java index 6ee9055e..e463d338 100644 --- a/src/me/fatpigsarefat/quests/player/QPlayerManager.java +++ b/src/me/fatpigsarefat/quests/player/QPlayerManager.java @@ -30,7 +30,11 @@ public class QPlayerManager { } public void loadPlayer(UUID uuid) { - if (getPlayer(uuid) == null) { + loadPlayer(uuid, false); + } + + public void loadPlayer(UUID uuid, boolean onlyData) { + if (getPlayer(uuid) == null || getPlayer(uuid).isOnlyDataLoaded()) { QuestProgressFile questProgressFile = new QuestProgressFile(uuid); File directory = new File(Quests.getInstance().getDataFolder() + File.separator + "playerdata"); @@ -61,7 +65,7 @@ public class QPlayerManager { } } - QPlayer qPlayer = new QPlayer(uuid, questProgressFile); + QPlayer qPlayer = new QPlayer(uuid, questProgressFile, onlyData); addPlayer(qPlayer); } diff --git a/src/me/fatpigsarefat/quests/player/questprogressfile/QuestProgress.java b/src/me/fatpigsarefat/quests/player/questprogressfile/QuestProgress.java index c6ec335d..8824f920 100644 --- a/src/me/fatpigsarefat/quests/player/questprogressfile/QuestProgress.java +++ b/src/me/fatpigsarefat/quests/player/questprogressfile/QuestProgress.java @@ -86,4 +86,8 @@ public class QuestProgress { public boolean isWorthSaving() { return modified; } + + public void setWorthSaving(boolean modified) { + this.modified = modified; + } } diff --git a/src/me/fatpigsarefat/quests/player/questprogressfile/QuestProgressFile.java b/src/me/fatpigsarefat/quests/player/questprogressfile/QuestProgressFile.java index d809201c..4b1b13c1 100644 --- a/src/me/fatpigsarefat/quests/player/questprogressfile/QuestProgressFile.java +++ b/src/me/fatpigsarefat/quests/player/questprogressfile/QuestProgressFile.java @@ -50,13 +50,19 @@ public class QuestProgressFile { return true; } - public boolean startQuest(Quest quest) { + /** + * Start a quest for the player. + * + * @param quest the quest to check + * @return 0 if successful, 1 if limit reached, 2 if quest is already completed, 3 if quest has cooldown, 4 if still locked + */ + public int startQuest(Quest quest) { if (getStartedQuests().size() >= Options.QUESTS_START_LIMIT.getIntValue()) { if (Bukkit.getPlayer(player) != null) { Player player = Bukkit.getPlayer(getPlayer()); player.sendMessage(Messages.QUEST_START_LIMIT.getMessage().replace("{limit}", String.valueOf(Options.QUESTS_START_LIMIT.getIntValue()))); } - return false; + return 1; } QuestProgress questProgress = getQuestProgress(quest); if (!quest.isRepeatable() && questProgress.isCompletedBefore()) { @@ -64,7 +70,7 @@ public class QuestProgressFile { Player player = Bukkit.getPlayer(getPlayer()); player.sendMessage(Messages.QUEST_START_DISABLED.getMessage()); } - return false; + return 2; } long cooldown = getCooldownFor(quest); if (cooldown > 0) { @@ -72,14 +78,14 @@ public class QuestProgressFile { Player player = Bukkit.getPlayer(getPlayer()); player.sendMessage(Messages.QUEST_START_COOLDOWN.getMessage().replace("{time}", String.valueOf(Quests.convertToFormat(TimeUnit.MINUTES.convert(cooldown, TimeUnit.MILLISECONDS))))); } - return false; + return 3; } if (!hasMetRequirements(quest)) { if (Bukkit.getPlayer(player) != null) { Player player = Bukkit.getPlayer(getPlayer()); player.sendMessage(Messages.QUEST_START_LOCKED.getMessage()); } - return false; + return 4; } questProgress.setStarted(true); for (TaskProgress taskProgress : questProgress.getTaskProgress()) { @@ -96,7 +102,7 @@ public class QuestProgressFile { .getDisplayNameStripped())); } } - return true; + return 0; } public void addQuestProgress(QuestProgress questProgress) { @@ -220,5 +226,9 @@ public class QuestProgressFile { } } + public void clear() { + questProgress.clear(); + } + } |
