diff --git a/Velocity/build.gradle.kts b/Velocity/build.gradle.kts index b9a62d0..90c80b9 100644 --- a/Velocity/build.gradle.kts +++ b/Velocity/build.gradle.kts @@ -23,10 +23,10 @@ dependencies { implementation("net.kyori:adventure-text-minimessage:${VersionConstants.adventureMinimessageVersion}") { exclude("net.kyori", "adventure-api") } - compileOnly("com.velocitypowered:velocity-api:3.0.0") + compileOnly("com.velocitypowered:velocity-api:3.1.0-SNAPSHOT") compileOnly("com.velocitypowered:velocity-brigadier:1.0.0-SNAPSHOT") compileOnly("com.electronwill.night-config:toml:3.6.3") - annotationProcessor("com.velocitypowered:velocity-api:3.0.0") + annotationProcessor("com.velocitypowered:velocity-api:3.1.0-SNAPSHOT") } tasks { diff --git a/Velocity/src/main/java/net/frankheijden/serverutils/velocity/commands/VelocityCommandServerUtils.java b/Velocity/src/main/java/net/frankheijden/serverutils/velocity/commands/VelocityCommandServerUtils.java index 5f5f620..ee421e2 100644 --- a/Velocity/src/main/java/net/frankheijden/serverutils/velocity/commands/VelocityCommandServerUtils.java +++ b/Velocity/src/main/java/net/frankheijden/serverutils/velocity/commands/VelocityCommandServerUtils.java @@ -1,6 +1,8 @@ package net.frankheijden.serverutils.velocity.commands; import com.mojang.brigadier.CommandDispatcher; +import com.velocitypowered.api.command.CommandManager; +import com.velocitypowered.api.command.CommandMeta; import com.velocitypowered.api.command.CommandSource; import com.velocitypowered.api.plugin.PluginContainer; import com.velocitypowered.api.plugin.PluginDescription; @@ -54,12 +56,36 @@ public class VelocityCommandServerUtils extends CommandServerUtils dispatcher = RVelocityCommandManager.getDispatcher( - plugin.getProxy().getCommandManager() - ); + CommandManager proxyCommandManager = plugin.getProxy().getCommandManager(); + CommandDispatcher dispatcher = RVelocityCommandManager.getDispatcher(proxyCommandManager); - return builder - .key("Name").value(dispatcher.getRoot().getChild(commandName).getName()) - .key("Plugin").value(plugin.getPluginCommandManager().findPluginId(commandName).orElse("")); + builder.key("Name").value(dispatcher.getRoot().getChild(commandName).getName()); + + CommandMeta meta = null; + try { + meta = proxyCommandManager.getCommandMeta(commandName); + } catch (Throwable ignored) { + // + } + + String pluginName = null; + if (meta != null) { + if (meta.getPlugin() != null) { + pluginName = plugin.getProxy().getPluginManager().fromInstance(meta.getPlugin()) + .map(c -> c.getDescription().getId()) + .orElse(null); + } + + CommandMeta finalMeta = meta; + builder.key("Aliases").value(listBuilderFunction.apply(b -> b.addAll(finalMeta.getAliases()))); + } + + if (pluginName == null) { + pluginName = plugin.getPluginCommandManager().findPluginId(commandName).orElse(""); + } + + builder.key("Plugin").value(pluginName); + + return builder; } } diff --git a/Velocity/src/main/java/net/frankheijden/serverutils/velocity/entities/VelocityAudience.java b/Velocity/src/main/java/net/frankheijden/serverutils/velocity/entities/VelocityAudience.java index 3ab9e4a..2f608da 100644 --- a/Velocity/src/main/java/net/frankheijden/serverutils/velocity/entities/VelocityAudience.java +++ b/Velocity/src/main/java/net/frankheijden/serverutils/velocity/entities/VelocityAudience.java @@ -2,38 +2,12 @@ package net.frankheijden.serverutils.velocity.entities; import com.velocitypowered.api.command.CommandSource; import com.velocitypowered.api.proxy.Player; -import java.lang.invoke.MethodHandle; -import java.lang.invoke.MethodHandles; import net.frankheijden.serverutils.common.entities.ServerUtilsAudience; import net.kyori.adventure.audience.Audience; import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; public class VelocityAudience extends ServerUtilsAudience { - private static final GsonComponentSerializer serializer = GsonComponentSerializer.gson(); - private static Object deserializer; - private static MethodHandle deserializeMethodHandle; - private static MethodHandle sendMessageMethodHandle; - - static { - try { - MethodHandles.Lookup lookup = MethodHandles.lookup(); - - @SuppressWarnings("LineLength") - Class deserializerClass = Class.forName("net.frankheijden.serverutils.dependencies.impl.adventure.text.serializer.gson.GsonComponentSerializer"); - deserializer = deserializerClass.getDeclaredMethod("gson").invoke(null); - deserializeMethodHandle = lookup.unreflect(deserializerClass.getMethod("deserialize", Object.class)); - - Class componentClass = Class.forName( - new String(new char[]{'n', 'e', 't'}) + ".kyori.adventure.text.Component" // relocate is smart - ); - sendMessageMethodHandle = lookup.unreflect(CommandSource.class.getMethod("sendMessage", componentClass)); - } catch (Throwable th) { - th.printStackTrace(); - } - } - protected VelocityAudience(Audience audience, CommandSource source) { super(audience, source); } @@ -50,12 +24,6 @@ public class VelocityAudience extends ServerUtilsAudience { @Override public void sendMessage(Component component) { - // Shading in adventure is fun when making a single distributable jar... - String serializedString = serializer.serialize(component); - try { - sendMessageMethodHandle.invoke(source, deserializeMethodHandle.invoke(deserializer, serializedString)); - } catch (Throwable th) { - th.printStackTrace(); - } + source.sendMessage(component); } } diff --git a/Velocity/src/main/java/net/frankheijden/serverutils/velocity/reflection/RJavaPluginLoader.java b/Velocity/src/main/java/net/frankheijden/serverutils/velocity/reflection/RJavaPluginLoader.java index 5f2a375..036baa8 100644 --- a/Velocity/src/main/java/net/frankheijden/serverutils/velocity/reflection/RJavaPluginLoader.java +++ b/Velocity/src/main/java/net/frankheijden/serverutils/velocity/reflection/RJavaPluginLoader.java @@ -26,19 +26,32 @@ public class RJavaPluginLoader { ); } + /** + * Loads a candidate description from the given source. + */ public static PluginDescription loadPluginDescription(Object javaPluginLoader, Path source) { - return reflection.invoke(javaPluginLoader, "loadPluginDescription", ClassObject.of(Path.class, source)); + String fieldName = "loadCandidate"; + try { + reflection.getClazz().getDeclaredMethod(fieldName, Path.class); + } catch (NoSuchMethodException ex) { + fieldName = "loadPluginDescription"; + } + + return reflection.invoke(javaPluginLoader, fieldName, ClassObject.of(Path.class, source)); } /** * Loads the plugin from their candidate PluginDescription. */ public static PluginDescription loadPlugin(Object javaPluginLoader, PluginDescription candidate) { - return reflection.invoke( - javaPluginLoader, - "loadPlugin", - ClassObject.of(PluginDescription.class, candidate) - ); + String fieldName = "createPluginFromCandidate"; + try { + reflection.getClazz().getDeclaredMethod(fieldName, PluginDescription.class); + } catch (NoSuchMethodException ex) { + fieldName = "loadPlugin"; + } + + return reflection.invoke(javaPluginLoader, fieldName, ClassObject.of(PluginDescription.class, candidate)); } public static Module createModule(Object javaPluginLoader, PluginContainer container) { diff --git a/Velocity/src/main/java/net/frankheijden/serverutils/velocity/reflection/RVelocityPluginManager.java b/Velocity/src/main/java/net/frankheijden/serverutils/velocity/reflection/RVelocityPluginManager.java index 585ee63..94596f1 100644 --- a/Velocity/src/main/java/net/frankheijden/serverutils/velocity/reflection/RVelocityPluginManager.java +++ b/Velocity/src/main/java/net/frankheijden/serverutils/velocity/reflection/RVelocityPluginManager.java @@ -13,8 +13,18 @@ public class RVelocityPluginManager { private RVelocityPluginManager() {} + /** + * Retrieves the plugin map. Key is the id of the plugin. + */ public static Map getPlugins(PluginManager manager) { - return reflection.get(manager, "plugins"); + String fieldName = "plugins"; + try { + reflection.getClazz().getField(fieldName); + } catch (NoSuchFieldException ex) { + fieldName = "pluginsById"; + } + + return reflection.get(manager, fieldName); } public static Map getPluginInstances(PluginManager manager) { diff --git a/build.gradle.kts b/build.gradle.kts index b6b26d7..c2c7fa5 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -3,7 +3,7 @@ import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar plugins { `java-library` `maven-publish` - id("com.github.johnrengelman.shadow") version "7.0.0" + id("com.github.johnrengelman.shadow") version "7.1.0" } group = "net.frankheijden.serverutils" @@ -50,7 +50,7 @@ subprojects { tasks { build { - dependsOn("checkstyleMain", "checkstyleTest", "test") + dependsOn("shadowJar", "checkstyleMain", "checkstyleTest", "test") } compileJava { @@ -86,8 +86,10 @@ subprojects { relocate("cloud.commandframework", "${dependencyDir}.cloud") relocate("me.lucko.commodore", "${dependencyDir}.commodore") relocate("io.leangen.geantyref", "${dependencyDir}.typetoken") - relocate("net.kyori.adventure", "${dependencyDir}.adventure") - relocate("net.kyori.examination", "${dependencyDir}.examination") + if (project.name != "Velocity") { + relocate("net.kyori.adventure", "${dependencyDir}.adventure") + relocate("net.kyori.examination", "${dependencyDir}.examination") + } relocate("net.kyori.adventure.text.minimessage", "${dependencyDir}.adventure.text.minimessage") relocate("dev.frankheijden.minecraftreflection", "${dependencyDir}.minecraftreflection") } @@ -151,7 +153,6 @@ tasks.withType { fun outputTasks(): List { return listOf( - "shadowJar", ":Bukkit:shadowJar", ":Bungee:shadowJar", ":Velocity:shadowJar",