From b7587970c0690c6bb86a94816096f1b06cfc49a1 Mon Sep 17 00:00:00 2001 From: YouHaveTrouble Date: Wed, 5 Jun 2024 20:12:24 +0200 Subject: [PATCH] command to display which plugins have hooks registered --- .../youhavetrouble/yardwatch/YardWatch.java | 8 ++ .../yardwatch/commands/YardWatchCommand.java | 75 +++++++++++++++++++ src/main/resources/plugin.yml | 7 ++ 3 files changed, 90 insertions(+) create mode 100644 src/main/java/me/youhavetrouble/yardwatch/commands/YardWatchCommand.java diff --git a/src/main/java/me/youhavetrouble/yardwatch/YardWatch.java b/src/main/java/me/youhavetrouble/yardwatch/YardWatch.java index ffa0ba0..6d8a56e 100644 --- a/src/main/java/me/youhavetrouble/yardwatch/YardWatch.java +++ b/src/main/java/me/youhavetrouble/yardwatch/YardWatch.java @@ -1,11 +1,13 @@ package me.youhavetrouble.yardwatch; +import me.youhavetrouble.yardwatch.commands.YardWatchCommand; import me.youhavetrouble.yardwatch.hooks.FactionsUUIDProtection; import me.youhavetrouble.yardwatch.hooks.GriefPreventionProtection; import me.youhavetrouble.yardwatch.hooks.LWCXProtection; import me.youhavetrouble.yardwatch.hooks.SuperiorSkyBlockProtection; import me.youhavetrouble.yardwatch.hooks.TownyProtection; import me.youhavetrouble.yardwatch.hooks.WorldGuardProtection; +import org.bukkit.command.PluginCommand; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.RegisteredServiceProvider; import org.bukkit.plugin.ServicePriority; @@ -17,6 +19,12 @@ public final class YardWatch extends JavaPlugin { @Override public void onEnable() { + + PluginCommand command = getCommand("yardwatch"); + if (command != null) { + command.setExecutor(new YardWatchCommand(this)); + } + if (shouldRegisterService("WorldGuard")) { getServer().getServicesManager().register( Protection.class, new WorldGuardProtection(this), this, ServicePriority.Normal diff --git a/src/main/java/me/youhavetrouble/yardwatch/commands/YardWatchCommand.java b/src/main/java/me/youhavetrouble/yardwatch/commands/YardWatchCommand.java new file mode 100644 index 0000000..dd74713 --- /dev/null +++ b/src/main/java/me/youhavetrouble/yardwatch/commands/YardWatchCommand.java @@ -0,0 +1,75 @@ +package me.youhavetrouble.yardwatch.commands; + +import me.youhavetrouble.yardwatch.Protection; +import me.youhavetrouble.yardwatch.YardWatch; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabExecutor; +import org.bukkit.plugin.RegisteredServiceProvider; +import org.bukkit.util.StringUtil; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.*; + +public class YardWatchCommand implements TabExecutor { + + private final YardWatch plugin; + + private final String version; + + public YardWatchCommand(YardWatch plugin) { + this.plugin = plugin; + this.version = plugin.getDescription().getVersion(); + } + + @Override + public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { + + if (args.length == 0) { + sendDefault(sender); + return true; + } + + if (args[0].equalsIgnoreCase("hooks")) { + sendHooks(sender); + return true; + } + + return false; + } + + @Override + public @Nullable List onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, @NotNull String[] args) { + List completions = new ArrayList<>(); + + if (args.length == 1) { + completions.add("hooks"); + return StringUtil.copyPartialMatches(args[0], completions, new ArrayList<>()); + } + + return completions; + } + + private void sendDefault(CommandSender sender) { + sender.sendMessage("YardWatch " + version); + } + + private void sendHooks(CommandSender sender) { + Map hooks = new HashMap<>(); + Collection> protections = plugin.getServer().getServicesManager().getRegistrations(Protection.class); + for (RegisteredServiceProvider protection : protections) { + hooks.merge(protection.getPlugin().getName(), 1, Integer::sum); + } + if (hooks.isEmpty()) { + sender.sendMessage("No hooks registered."); + return; + } + sender.sendMessage("Hooks:"); + for (Map.Entry entry : hooks.entrySet()) { + String hook = entry.getValue() == 1 ? "hook" : "hooks"; + sender.sendMessage(String.format("%s -> %s %s registered", entry.getKey(), entry.getValue(), hook)); + } + + } +} diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 443b4d0..ef1ea3d 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -14,3 +14,10 @@ softdepend: - "Factions" - "SuperiorSkyblock2" - "LWC" +commands: + yardwatch: + description: "YardWatch command" + usage: "/yardwatch " + permission: "yardwatch.command" + aliases: + - "yw" \ No newline at end of file