aboutsummaryrefslogtreecommitdiffstats
path: root/bukkit
diff options
context:
space:
mode:
Diffstat (limited to 'bukkit')
-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
2 files changed, 123 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";
+ }
+}