aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminCommandSwitcher.java4
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminDebugCommandSwitcher.java60
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminDebugQuestCommandHandler.java101
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminDebugReportCommandHandler.java (renamed from bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminDebugCommandHandler.java)8
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/BukkitTaskType.java8
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/BukkitTaskTypeManager.java30
-rw-r--r--common/src/main/java/com/leonardobishop/quests/common/player/QPlayerPreferences.java17
7 files changed, 218 insertions, 10 deletions
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminCommandSwitcher.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminCommandSwitcher.java
index 797ebcd7..d786636f 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminCommandSwitcher.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminCommandSwitcher.java
@@ -24,7 +24,7 @@ public class AdminCommandSwitcher extends CommandSwitcher {
super.subcommands.put("update", new AdminUpdateCommandHandler(plugin));
super.subcommands.put("wiki", new AdminWikiCommandHandler(plugin));
super.subcommands.put("about", new AdminAboutCommandHandler(plugin));
- super.subcommands.put("debug", new AdminDebugCommandHandler(plugin));
+ super.subcommands.put("debug", new AdminDebugCommandSwitcher(plugin));
}
@Override
@@ -43,7 +43,7 @@ public class AdminCommandSwitcher extends CommandSwitcher {
sender.sendMessage(ChatColor.DARK_GRAY + " * " + ChatColor.RED + "/quests a update " + ChatColor.DARK_GRAY + ": check for updates");
sender.sendMessage(ChatColor.DARK_GRAY + " * " + ChatColor.RED + "/quests a wiki " + ChatColor.DARK_GRAY + ": get a link to the Quests wiki");
sender.sendMessage(ChatColor.DARK_GRAY + " * " + ChatColor.RED + "/quests a about " + ChatColor.DARK_GRAY + ": get information about Quests");
- sender.sendMessage(ChatColor.DARK_GRAY + " * " + ChatColor.RED + "/quests a debug " + ChatColor.DARK_GRAY + ": generate a debug report");
+ sender.sendMessage(ChatColor.DARK_GRAY + " * " + ChatColor.RED + "/quests a debug " + ChatColor.DARK_GRAY + ": view help for debugging");
}
@Override
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
new file mode 100644
index 00000000..5a7d0de5
--- /dev/null
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminDebugCommandSwitcher.java
@@ -0,0 +1,60 @@
+package com.leonardobishop.quests.bukkit.command;
+
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.bukkit.item.QuestItem;
+import com.leonardobishop.quests.bukkit.questcompleter.BukkitQuestCompleter;
+import com.leonardobishop.quests.bukkit.util.LogHistory;
+import com.leonardobishop.quests.common.config.ConfigProblem;
+import com.leonardobishop.quests.common.player.QPlayer;
+import com.leonardobishop.quests.common.player.QPlayerPreferences;
+import com.leonardobishop.quests.common.player.questprogressfile.QuestProgress;
+import com.leonardobishop.quests.common.player.questprogressfile.QuestProgressFile;
+import com.leonardobishop.quests.common.player.questprogressfile.TaskProgress;
+import com.leonardobishop.quests.common.quest.Category;
+import com.leonardobishop.quests.common.quest.Quest;
+import com.leonardobishop.quests.common.quest.Task;
+import com.leonardobishop.quests.common.tasktype.TaskType;
+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.io.File;
+import java.io.IOException;
+import java.lang.reflect.Field;
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.FileAlreadyExistsException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.attribute.FileAttribute;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.function.Function;
+
+public class AdminDebugCommandSwitcher extends CommandSwitcher {
+
+ public AdminDebugCommandSwitcher(BukkitQuestsPlugin plugin) {
+ super(2);
+
+ super.subcommands.put("quest", new AdminDebugQuestCommandHandler(plugin));
+ super.subcommands.put("report", new AdminDebugReportCommandHandler(plugin));
+ }
+
+ @Override
+ public void showHelp(CommandSender sender) {
+ sender.sendMessage(ChatColor.GRAY.toString() + ChatColor.STRIKETHROUGH + "------------=[" + ChatColor.RED + " Quests Admin: debug " + ChatColor
+ .GRAY.toString() + ChatColor.STRIKETHROUGH + "]=------------");
+ sender.sendMessage(ChatColor.GRAY + "The following commands are available: ");
+ 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
+ + ": enable debug logging for a specific quest");
+ }
+
+ @Override
+ public @Nullable String getPermission() {
+ return "quests.admin";
+ }
+}
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminDebugQuestCommandHandler.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminDebugQuestCommandHandler.java
new file mode 100644
index 00000000..dc7b8178
--- /dev/null
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminDebugQuestCommandHandler.java
@@ -0,0 +1,101 @@
+package com.leonardobishop.quests.bukkit.command;
+
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.bukkit.item.QuestItem;
+import com.leonardobishop.quests.bukkit.questcompleter.BukkitQuestCompleter;
+import com.leonardobishop.quests.bukkit.util.LogHistory;
+import com.leonardobishop.quests.common.config.ConfigProblem;
+import com.leonardobishop.quests.common.player.QPlayer;
+import com.leonardobishop.quests.common.player.QPlayerPreferences;
+import com.leonardobishop.quests.common.player.questprogressfile.QuestProgress;
+import com.leonardobishop.quests.common.player.questprogressfile.QuestProgressFile;
+import com.leonardobishop.quests.common.player.questprogressfile.TaskProgress;
+import com.leonardobishop.quests.common.quest.Category;
+import com.leonardobishop.quests.common.quest.Quest;
+import com.leonardobishop.quests.common.quest.Task;
+import com.leonardobishop.quests.common.tasktype.TaskType;
+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.io.File;
+import java.io.IOException;
+import java.lang.reflect.Field;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.function.Function;
+
+public class AdminDebugQuestCommandHandler implements CommandHandler {
+
+ private final BukkitQuestsPlugin plugin;
+
+
+ public AdminDebugQuestCommandHandler(BukkitQuestsPlugin plugin) {
+ this.plugin = plugin;
+ }
+
+ @Override
+ public void handle(CommandSender sender, String[] args) {
+ if (sender instanceof Player player) {
+ QPlayer qPlayer = plugin.getPlayerManager().getPlayer(player.getUniqueId());
+ if (qPlayer == null) {
+ sender.sendMessage(ChatColor.RED + "Your data file is not loaded.");
+ return;
+ }
+
+ String questId = args[3];
+ Quest quest = plugin.getQuestManager().getQuestById(questId);
+ if (quest == null) {
+ sender.sendMessage(ChatColor.RED + "Quest " + questId + " does not exist.");
+ return;
+ }
+
+ QPlayerPreferences preferences = qPlayer.getPlayerPreferences();
+ QPlayerPreferences.DebugType currentDebugType = preferences.getDebug(questId);
+ if (currentDebugType == null) {
+ String debugType = args[4];
+ QPlayerPreferences.DebugType debugTypeEnum;
+
+ try {
+ debugTypeEnum = QPlayerPreferences.DebugType.valueOf(debugType.toUpperCase());
+ } catch (IllegalArgumentException e) {
+ sender.sendMessage(ChatColor.RED + "Invalid debug type.");
+ return;
+ }
+
+ preferences.setDebug(questId, debugTypeEnum);
+ sender.sendMessage(ChatColor.GREEN + "Debugging enabled for quest '" + questId + "'.");
+ sender.sendMessage(ChatColor.GRAY + "You will now see debug logs for quest '" + quest + "' for " +
+ (debugTypeEnum == QPlayerPreferences.DebugType.SELF ? "yourself" : "everybody on the server") +
+ ". This may generate a lot of spam.");
+ sender.sendMessage(ChatColor.DARK_GRAY + "Use '/quests admin debug " + questId + "' to disable.");
+ } else {
+ preferences.setDebug(questId, null);
+ sender.sendMessage(ChatColor.GREEN + "Debugging disabled for quest '" + questId + "'.");
+ }
+
+ } else {
+ sender.sendMessage(ChatColor.RED + "You must be a player to use this command.");
+ }
+ }
+
+ @Override
+ public List<String> tabComplete(CommandSender sender, String[] args) {
+ if (args.length == 4) {
+ return TabHelper.tabCompleteQuests(args[3]);
+ } else if (args.length == 5) {
+ return TabHelper.matchTabComplete(args[2], Arrays.asList("self", "all"));
+ }
+ return Collections.emptyList();
+ }
+
+ @Override
+ public @Nullable String getPermission() {
+ return "quests.admin";
+ }
+}
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminDebugCommandHandler.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminDebugReportCommandHandler.java
index 140a1e95..0533e9dd 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminDebugCommandHandler.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminDebugReportCommandHandler.java
@@ -17,30 +17,26 @@ import com.leonardobishop.quests.common.tasktype.TaskType;
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.io.File;
import java.io.IOException;
import java.lang.reflect.Field;
-import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
-import java.nio.file.FileAlreadyExistsException;
import java.nio.file.Files;
import java.nio.file.Path;
-import java.nio.file.attribute.FileAttribute;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.function.Function;
-public class AdminDebugCommandHandler implements CommandHandler {
+public class AdminDebugReportCommandHandler implements CommandHandler {
private final BukkitQuestsPlugin plugin;
private List<String> errors;
private CommandSender currentReportGenerator;
- public AdminDebugCommandHandler(BukkitQuestsPlugin plugin) {
+ public AdminDebugReportCommandHandler(BukkitQuestsPlugin plugin) {
this.plugin = plugin;
}
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/BukkitTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/BukkitTaskType.java
index 681658de..b187b794 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/BukkitTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/BukkitTaskType.java
@@ -4,8 +4,12 @@ import com.leonardobishop.quests.common.tasktype.TaskType;
import org.bukkit.event.Listener;
import org.jetbrains.annotations.NotNull;
+import java.util.UUID;
+
public abstract class BukkitTaskType extends TaskType implements Listener {
+ protected BukkitTaskTypeManager taskTypeManager;
+
public BukkitTaskType(@NotNull String type, String author, String description) {
super(type, author, description);
}
@@ -14,4 +18,8 @@ public abstract class BukkitTaskType extends TaskType implements Listener {
super(type);
}
+ public final void debug(@NotNull String message, String questId, @NotNull UUID player) {
+ taskTypeManager.sendDebug(message, super.getType(), questId, player);
+ }
+
}
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/BukkitTaskTypeManager.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/BukkitTaskTypeManager.java
index 91e511c8..46ad24ae 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/BukkitTaskTypeManager.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/BukkitTaskTypeManager.java
@@ -1,11 +1,16 @@
package com.leonardobishop.quests.bukkit.tasktype;
import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.common.player.QPlayer;
+import com.leonardobishop.quests.common.player.QPlayerPreferences;
import com.leonardobishop.quests.common.tasktype.TaskType;
import com.leonardobishop.quests.common.tasktype.TaskTypeManager;
+import org.bukkit.Bukkit;
+import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import java.util.List;
+import java.util.UUID;
public class BukkitTaskTypeManager extends TaskTypeManager {
@@ -22,14 +27,35 @@ public class BukkitTaskTypeManager extends TaskTypeManager {
@Override
public boolean registerTaskType(@NotNull TaskType taskType) {
- if (!(taskType instanceof BukkitTaskType)) throw new RuntimeException("BukkitTaskTypeManager implementation can only accept instances of BukkitTaskType!");
+ if (!(taskType instanceof BukkitTaskType bukkitTaskType)) throw new RuntimeException("BukkitTaskTypeManager implementation can only accept instances of BukkitTaskType!");
- BukkitTaskType bukkitTaskType = (BukkitTaskType) taskType;
if (super.registerTaskType(taskType)) {
+ bukkitTaskType.taskTypeManager = this;
plugin.getServer().getPluginManager().registerEvents(bukkitTaskType, plugin);
return true;
}
return false;
}
+ public void sendDebug(@NotNull String message, @NotNull String taskType, @NotNull String questId, @NotNull UUID associatedPlayer) {
+ for (QPlayer qPlayer : plugin.getPlayerManager().getQPlayers()) {
+ QPlayerPreferences.DebugType debugType = qPlayer.getPlayerPreferences().getDebug(questId);
+ Player player = Bukkit.getPlayer(qPlayer.getPlayerUUID());
+ Player otherPlayer = Bukkit.getPlayer(associatedPlayer);
+ String associatedName = otherPlayer == null ? associatedPlayer.toString() : otherPlayer.getName();
+
+ String chatMessage = "[" + taskType + ": " + associatedName + " on '" + questId + "'] " + message;
+ if (player != null && debugType != null) {
+ switch (debugType) {
+ case ALL -> player.sendMessage(chatMessage);
+ case SELF -> {
+ if (player.getUniqueId().equals(associatedPlayer)) {
+ player.sendMessage(chatMessage);
+ }
+ }
+ }
+ }
+ }
+ }
+
}
diff --git a/common/src/main/java/com/leonardobishop/quests/common/player/QPlayerPreferences.java b/common/src/main/java/com/leonardobishop/quests/common/player/QPlayerPreferences.java
index db1e9230..19115f79 100644
--- a/common/src/main/java/com/leonardobishop/quests/common/player/QPlayerPreferences.java
+++ b/common/src/main/java/com/leonardobishop/quests/common/player/QPlayerPreferences.java
@@ -2,8 +2,12 @@ package com.leonardobishop.quests.common.player;
import org.jetbrains.annotations.Nullable;
+import java.util.HashMap;
+import java.util.Map;
+
public class QPlayerPreferences {
+ private final Map<String, DebugType> debug = new HashMap<>();
private String trackedQuestId;
public QPlayerPreferences(String trackedQuestId) {
@@ -17,4 +21,17 @@ public class QPlayerPreferences {
public void setTrackedQuestId(@Nullable String trackedQuestId) {
this.trackedQuestId = trackedQuestId;
}
+
+ public DebugType getDebug(String questId) {
+ return debug.get(questId);
+ }
+
+ public void setDebug(String questId, DebugType debugType) {
+ debug.put(questId, debugType);
+ }
+
+ public enum DebugType {
+ SELF,
+ ALL
+ }
}