aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminDebugCommandSwitcher.java3
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminDebugPlayerCommandHandler.java120
-rw-r--r--docs/commands-and-permissions.md2
3 files changed, 125 insertions, 0 deletions
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminDebugCommandSwitcher.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminDebugCommandSwitcher.java
index 52b35872..32ab49f5 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminDebugCommandSwitcher.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminDebugCommandSwitcher.java
@@ -10,6 +10,7 @@ public class AdminDebugCommandSwitcher extends CommandSwitcher {
public AdminDebugCommandSwitcher(BukkitQuestsPlugin plugin) {
super(2);
+ super.subcommands.put("player", new AdminDebugPlayerCommandHandler(plugin));
super.subcommands.put("quest", new AdminDebugQuestCommandHandler(plugin));
super.subcommands.put("report", new AdminDebugReportCommandHandler(plugin));
}
@@ -19,6 +20,8 @@ public class AdminDebugCommandSwitcher extends CommandSwitcher {
sender.sendMessage(ChatColor.GRAY.toString() + ChatColor.STRIKETHROUGH + "------------=[" + ChatColor.RED + " Quests Admin: debug " + ChatColor
.GRAY + ChatColor.STRIKETHROUGH + "]=------------");
sender.sendMessage(ChatColor.GRAY + "The following commands are available: ");
+ sender.sendMessage(ChatColor.DARK_GRAY + " * " + ChatColor.RED + "/quests a debug player <player> " + ChatColor.DARK_GRAY
+ + ": show quests progression data of a player");
sender.sendMessage(ChatColor.DARK_GRAY + " * " + ChatColor.RED + "/quests a debug report " + ChatColor.DARK_GRAY
+ ": generate a debug report");
sender.sendMessage(ChatColor.DARK_GRAY + " * " + ChatColor.RED + "/quests a debug quest <player> <self|all> " + ChatColor.DARK_GRAY
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminDebugPlayerCommandHandler.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminDebugPlayerCommandHandler.java
new file mode 100644
index 00000000..de6ccd07
--- /dev/null
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminDebugPlayerCommandHandler.java
@@ -0,0 +1,120 @@
+package com.leonardobishop.quests.bukkit.command;
+
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.common.player.QPlayer;
+import com.leonardobishop.quests.common.player.questprogressfile.QuestProgress;
+import com.leonardobishop.quests.common.player.questprogressfile.QuestProgressFile;
+import com.leonardobishop.quests.common.player.questprogressfile.filters.QuestProgressFilter;
+import com.leonardobishop.quests.common.quest.Quest;
+import com.leonardobishop.quests.common.quest.Task;
+import org.bukkit.Bukkit;
+import org.bukkit.ChatColor;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.Iterator;
+import java.util.List;
+
+public class AdminDebugPlayerCommandHandler implements CommandHandler {
+
+ private final BukkitQuestsPlugin plugin;
+
+ public AdminDebugPlayerCommandHandler(BukkitQuestsPlugin plugin) {
+ this.plugin = plugin;
+ }
+
+ @Override
+ public void handle(CommandSender sender, String[] args) {
+ // /q a debug player <player>
+ // 0 1 2 3
+ Player target = args.length > 3
+ ? Bukkit.getPlayer(args[3])
+ : (sender instanceof Player ? (Player) sender : null);
+ if (target == null) {
+ sender.sendMessage(ChatColor.RED + "Player not found.");
+ return;
+ }
+
+ QPlayer qPlayer = plugin.getPlayerManager().getPlayer(target.getUniqueId());
+ if (qPlayer == null) {
+ sender.sendMessage(ChatColor.RED + "Player data file is not loaded.");
+ return;
+ }
+
+ sender.sendMessage("=== Quests debug data for " + target.getUniqueId());
+ sender.sendMessage("List of " + target.getName() + " effectively started quests:");
+
+ QuestProgressFile qpf = qPlayer.getQuestProgressFile();
+ Iterator<Quest> questIter = qPlayer.getEffectiveStartedQuests().iterator();
+
+ StringBuilder sb = new StringBuilder("[");
+
+ while (questIter.hasNext()) {
+ Quest quest = questIter.next();
+ // [QUEST_ID: TASK_1{PROGRESS}, TASK_2{PROGRESS}], ...
+
+ sb.append("[");
+ sb.append(quest.getId());
+ sb.append(": ");
+
+ QuestProgress qp = qpf.getQuestProgressOrNull(quest);
+
+ if (qp != null) {
+ Iterator<Task> taskIter = quest.getTasks().iterator();
+
+ while (taskIter.hasNext()) {
+ Task task = taskIter.next();
+
+ sb.append(task.getId());
+ sb.append("{");
+ sb.append(qp.getTaskProgressOrNull(task.getId()));
+ sb.append("}");
+
+ if (taskIter.hasNext()) {
+ sb.append(", ");
+ }
+ }
+ } else {
+ sb.append("null");
+ }
+
+ sb.append("]");
+
+ if (questIter.hasNext()) {
+ sb.append(", ");
+ }
+ }
+
+ sender.sendMessage(sb.toString());
+
+ sender.sendMessage("List of " + target.getName() + " completed quests:");
+
+ sb.setLength(0);
+
+ qpf.getAllQuestsFromProgressConsumer(QuestProgressFilter.COMPLETED, quest -> {
+ sb.append(quest.getId());
+ sb.append(", ");
+ });
+
+ if (!sb.isEmpty()) {
+ sb.delete(sb.length() - ", ".length(), sb.length());
+ }
+
+ sender.sendMessage(sb.toString());
+ }
+
+ @Override
+ public List<String> tabComplete(CommandSender sender, String[] args) {
+ if (args.length == 4) {
+ return null;
+ } else {
+ return List.of();
+ }
+ }
+
+ @Override
+ public @Nullable String getPermission() {
+ return "quests.admin";
+ }
+}
diff --git a/docs/commands-and-permissions.md b/docs/commands-and-permissions.md
index 351bffd7..ec83fb38 100644
--- a/docs/commands-and-permissions.md
+++ b/docs/commands-and-permissions.md
@@ -46,6 +46,8 @@ also be viewed in-game by simply running `/quests`.
a player a quest item.
- **/quests a/admin debug** - view help for the [quest
debugger](tools/quest-debugger).
+ - **/quests a/admin debug player \<player\> - show quests progression
+ data of a player.
- **/quests a/admin debug report** - generate a debug report.
- **/quests a/admin debug quest \<quest/\*\> \<all/self\>** - enable
debug messages for a specific quest, or all of them.