diff options
| author | LMBishop <13875753+LMBishop@users.noreply.github.com> | 2022-07-05 19:56:39 +0100 |
|---|---|---|
| committer | LMBishop <13875753+LMBishop@users.noreply.github.com> | 2022-07-05 19:56:39 +0100 |
| commit | 196410e28f3d243355552e19c8e8df972d6c5cb7 (patch) | |
| tree | 65d167124ec78426650d0368af4c7529a0bf91ed /bukkit | |
| parent | ccc27065502aafffc5602b93b89e5addce6b3c07 (diff) | |
Add debug report & quest commands
Diffstat (limited to 'bukkit')
| -rw-r--r-- | bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminCommandSwitcher.java | 4 | ||||
| -rw-r--r-- | bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminDebugCommandSwitcher.java | 60 | ||||
| -rw-r--r-- | bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminDebugQuestCommandHandler.java | 101 | ||||
| -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.java | 8 | ||||
| -rw-r--r-- | bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/BukkitTaskTypeManager.java | 30 |
6 files changed, 201 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); + } + } + } + } + } + } + } |
