From 95ea4917878991d632ce5a43c52edbea2599561c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9D=91=A9=F0=9D=92=8A=F0=9D=92=92=F0=9D=92=96?= =?UTF-8?q?=F0=9D=92=82=F0=9D=92=95=F0=9D=92=86=F0=9D=92=93=F0=9D=92=8F?= =?UTF-8?q?=F0=9D=92=8A=F0=9D=92=90=F0=9D=92=8F=F0=9D=92=94?= Date: Sat, 10 May 2025 08:47:32 -0500 Subject: [PATCH] Support plugins that 'provide' Vault (#4075) --- .../listeners/BukkitPlatformListener.java | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/bukkit/src/main/java/me/lucko/luckperms/bukkit/listeners/BukkitPlatformListener.java b/bukkit/src/main/java/me/lucko/luckperms/bukkit/listeners/BukkitPlatformListener.java index 9e599a304..20b64405b 100644 --- a/bukkit/src/main/java/me/lucko/luckperms/bukkit/listeners/BukkitPlatformListener.java +++ b/bukkit/src/main/java/me/lucko/luckperms/bukkit/listeners/BukkitPlatformListener.java @@ -36,12 +36,26 @@ import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.event.server.PluginEnableEvent; import org.bukkit.event.server.RemoteServerCommandEvent; import org.bukkit.event.server.ServerCommandEvent; +import org.bukkit.plugin.Plugin; +import org.bukkit.plugin.PluginDescriptionFile; import java.util.regex.Pattern; public class BukkitPlatformListener implements Listener { private static final Pattern OP_COMMAND_PATTERN = Pattern.compile("^/?(\\w+:)?(deop|op)( .*)?$", Pattern.CASE_INSENSITIVE); + private static final boolean PLUGIN_DESCRIPTION_FILE_PROVIDES_SUPPORTED; + + static { + boolean supported = false; + try { + PluginDescriptionFile.class.getMethod("getProvides"); + supported = true; + } catch (NoSuchMethodException ignored) { + } + PLUGIN_DESCRIPTION_FILE_PROVIDES_SUPPORTED = supported; + } + private final LPBukkitPlugin plugin; public BukkitPlatformListener(LPBukkitPlugin plugin) { @@ -80,7 +94,11 @@ public class BukkitPlatformListener implements Listener { @EventHandler public void onPluginEnable(PluginEnableEvent e) { - if (e.getPlugin().getName().equalsIgnoreCase("Vault")) { + Plugin p = e.getPlugin(); + boolean shouldHook = p.getName().equalsIgnoreCase("Vault") || + (PLUGIN_DESCRIPTION_FILE_PROVIDES_SUPPORTED && p.getDescription().getProvides().contains("Vault")); + + if (shouldHook) { this.plugin.tryVaultHook(true); } }