Fixes to support last Paper 1.21.4 build
This commit is contained in:
parent
8c0db895da
commit
ebbbc3a1f0
@ -19,7 +19,7 @@ import fr.pandacube.lib.paper.reflect.wrapper.craftbukkit.VanillaCommandWrapper;
|
|||||||
import fr.pandacube.lib.paper.reflect.wrapper.minecraft.commands.Coordinates;
|
import fr.pandacube.lib.paper.reflect.wrapper.minecraft.commands.Coordinates;
|
||||||
import fr.pandacube.lib.paper.reflect.wrapper.minecraft.commands.Vec3Argument;
|
import fr.pandacube.lib.paper.reflect.wrapper.minecraft.commands.Vec3Argument;
|
||||||
import fr.pandacube.lib.paper.reflect.wrapper.paper.commands.BukkitCommandNode;
|
import fr.pandacube.lib.paper.reflect.wrapper.paper.commands.BukkitCommandNode;
|
||||||
import fr.pandacube.lib.paper.reflect.wrapper.paper.commands.PluginCommandNode;
|
import fr.pandacube.lib.paper.reflect.wrapper.paper.commands.PluginCommandMeta;
|
||||||
import fr.pandacube.lib.players.standalone.AbstractOffPlayer;
|
import fr.pandacube.lib.players.standalone.AbstractOffPlayer;
|
||||||
import fr.pandacube.lib.players.standalone.AbstractOnlinePlayer;
|
import fr.pandacube.lib.players.standalone.AbstractOnlinePlayer;
|
||||||
import fr.pandacube.lib.players.standalone.AbstractPlayerManager;
|
import fr.pandacube.lib.players.standalone.AbstractPlayerManager;
|
||||||
@ -46,7 +46,6 @@ import java.util.Set;
|
|||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
import static fr.pandacube.lib.reflect.wrapper.ReflectWrapper.unwrap;
|
|
||||||
import static fr.pandacube.lib.reflect.wrapper.ReflectWrapper.wrap;
|
import static fr.pandacube.lib.reflect.wrapper.ReflectWrapper.wrap;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -199,6 +198,10 @@ public abstract class PaperBrigadierCommand extends BrigadierCommand<CommandSour
|
|||||||
registeredAliases = new HashSet<>(event.registrar().register(commandNode, description, List.of(aliases)));
|
registeredAliases = new HashSet<>(event.registrar().register(commandNode, description, List.of(aliases)));
|
||||||
doPostRegistrationFixes();
|
doPostRegistrationFixes();
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
fr.pandacube.lib.paper.reflect.wrapper.brigadier.CommandNode<CommandSourceStack> registeredNode = wrap(vanillaPaperDispatcher.getRoot().getChild(commandNode.getName()), fr.pandacube.lib.paper.reflect.wrapper.brigadier.CommandNode.class);
|
||||||
|
|
||||||
|
|
||||||
if (registrationPolicy == RegistrationPolicy.ALL) {
|
if (registrationPolicy == RegistrationPolicy.ALL) {
|
||||||
// enforce registration of aliases
|
// enforce registration of aliases
|
||||||
for (String alias : aliases) {
|
for (String alias : aliases) {
|
||||||
@ -221,11 +224,13 @@ public abstract class PaperBrigadierCommand extends BrigadierCommand<CommandSour
|
|||||||
|
|
||||||
for (String aliasToForce : forceRegistrationAgain) {
|
for (String aliasToForce : forceRegistrationAgain) {
|
||||||
CommandNode<CommandSourceStack> actualNode = vanillaPaperDispatcher.getRoot().getChild(aliasToForce);
|
CommandNode<CommandSourceStack> actualNode = vanillaPaperDispatcher.getRoot().getChild(aliasToForce);
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
fr.pandacube.lib.paper.reflect.wrapper.brigadier.CommandNode<CommandSourceStack> wrappedCommandNode = wrap(actualNode, fr.pandacube.lib.paper.reflect.wrapper.brigadier.CommandNode.class);
|
||||||
if (actualNode != null) {
|
if (actualNode != null) {
|
||||||
//Log.info("Forcing registration of alias /" + aliasToForce + " for command /" + commandNode.getName() + ": replacing " + getCommandIdentity(actualNode) + "?");
|
Log.warning("Forcing registration of alias /" + aliasToForce + " for command /" + commandNode.getName() + ": replacing " + getCommandIdentity(actualNode) + "?");
|
||||||
if (PluginCommandNode.REFLECT.get().isInstance(actualNode)) {
|
if (wrappedCommandNode.pluginCommandMeta() != null) {
|
||||||
PluginCommandNode pcn = wrap(actualNode, PluginCommandNode.class);
|
PluginCommandMeta meta = wrappedCommandNode.pluginCommandMeta();
|
||||||
if (pcn.getPlugin().equals(plugin))
|
if (meta.plugin().equals(plugin))
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if (BukkitCommandNode.REFLECT.get().isInstance(actualNode)) {
|
else if (BukkitCommandNode.REFLECT.get().isInstance(actualNode)) {
|
||||||
@ -235,10 +240,13 @@ public abstract class PaperBrigadierCommand extends BrigadierCommand<CommandSour
|
|||||||
}
|
}
|
||||||
vanillaPaperDispatcher.getRoot().getChildren().removeIf(c -> c.getName().equals(aliasToForce));
|
vanillaPaperDispatcher.getRoot().getChildren().removeIf(c -> c.getName().equals(aliasToForce));
|
||||||
}
|
}
|
||||||
/*else {
|
/*else {
|
||||||
Log.info("Forcing registration of alias /" + aliasToForce + " for command /" + commandNode.getName() + ": no command found for alias. Adding alias.");
|
Log.info("Forcing registration of alias /" + aliasToForce + " for command /" + commandNode.getName() + ": no command found for alias. Adding alias.");
|
||||||
}*/
|
}*/
|
||||||
LiteralCommandNode<CommandSourceStack> newPCN = unwrap(new PluginCommandNode(aliasToForce, plugin.getPluginMeta(), commandNode, description));
|
LiteralCommandNode<CommandSourceStack> newPCN = getAliasNode(commandNode, aliasToForce);
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
fr.pandacube.lib.paper.reflect.wrapper.brigadier.CommandNode<CommandSourceStack> wrappedNewPCN = wrap(newPCN, fr.pandacube.lib.paper.reflect.wrapper.brigadier.CommandNode.class);
|
||||||
|
wrappedNewPCN.pluginCommandMeta(registeredNode.pluginCommandMeta());
|
||||||
vanillaPaperDispatcher.getRoot().addChild(newPCN);
|
vanillaPaperDispatcher.getRoot().addChild(newPCN);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -296,9 +304,12 @@ public abstract class PaperBrigadierCommand extends BrigadierCommand<CommandSour
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static String getCommandIdentity(CommandNode<CommandSourceStack> command) {
|
private static String getCommandIdentity(CommandNode<CommandSourceStack> command) {
|
||||||
if (PluginCommandNode.REFLECT.get().isInstance(command)) {
|
@SuppressWarnings("unchecked")
|
||||||
PluginCommandNode wrappedPCN = wrap(command, PluginCommandNode.class);
|
fr.pandacube.lib.paper.reflect.wrapper.brigadier.CommandNode<CommandSourceStack> wrappedCommandNode = wrap(command, fr.pandacube.lib.paper.reflect.wrapper.brigadier.CommandNode.class);
|
||||||
return "Node /" + command.getName() + " from plugin " + wrappedPCN.getPlugin().getName();
|
|
||||||
|
if (wrappedCommandNode.pluginCommandMeta() != null) {
|
||||||
|
PluginCommandMeta meta = wrappedCommandNode.pluginCommandMeta();
|
||||||
|
return "Node /" + command.getName() + " from plugin " + meta.plugin().getName();
|
||||||
}
|
}
|
||||||
else if (BukkitCommandNode.REFLECT.get().isInstance(command)) {
|
else if (BukkitCommandNode.REFLECT.get().isInstance(command)) {
|
||||||
BukkitCommandNode wrappedBCN = wrap(command, BukkitCommandNode.class);
|
BukkitCommandNode wrappedBCN = wrap(command, BukkitCommandNode.class);
|
||||||
@ -324,7 +335,9 @@ public abstract class PaperBrigadierCommand extends BrigadierCommand<CommandSour
|
|||||||
|
|
||||||
|
|
||||||
private static Boolean isPluginCommand(CommandNode<CommandSourceStack> command) {
|
private static Boolean isPluginCommand(CommandNode<CommandSourceStack> command) {
|
||||||
if (PluginCommandNode.REFLECT.get().isInstance(command)) {
|
@SuppressWarnings("unchecked")
|
||||||
|
fr.pandacube.lib.paper.reflect.wrapper.brigadier.CommandNode<CommandSourceStack> wrappedCommandNode = wrap(command, fr.pandacube.lib.paper.reflect.wrapper.brigadier.CommandNode.class);
|
||||||
|
if (wrappedCommandNode.pluginCommandMeta() != null) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else if (BukkitCommandNode.REFLECT.get().isInstance(command)) {
|
else if (BukkitCommandNode.REFLECT.get().isInstance(command)) {
|
||||||
|
@ -75,7 +75,7 @@ import fr.pandacube.lib.paper.reflect.wrapper.netty.Unpooled;
|
|||||||
import fr.pandacube.lib.paper.reflect.wrapper.paper.PaperAdventure;
|
import fr.pandacube.lib.paper.reflect.wrapper.paper.PaperAdventure;
|
||||||
import fr.pandacube.lib.paper.reflect.wrapper.paper.commands.BukkitCommandNode;
|
import fr.pandacube.lib.paper.reflect.wrapper.paper.commands.BukkitCommandNode;
|
||||||
import fr.pandacube.lib.paper.reflect.wrapper.paper.commands.PaperBrigadier;
|
import fr.pandacube.lib.paper.reflect.wrapper.paper.commands.PaperBrigadier;
|
||||||
import fr.pandacube.lib.paper.reflect.wrapper.paper.commands.PluginCommandNode;
|
import fr.pandacube.lib.paper.reflect.wrapper.paper.commands.PluginCommandMeta;
|
||||||
import fr.pandacube.lib.paper.reflect.wrapper.paper.commands.ShadowBrigNode;
|
import fr.pandacube.lib.paper.reflect.wrapper.paper.commands.ShadowBrigNode;
|
||||||
import fr.pandacube.lib.paper.reflect.wrapper.paper.configuration.FallbackValue_Int;
|
import fr.pandacube.lib.paper.reflect.wrapper.paper.configuration.FallbackValue_Int;
|
||||||
import fr.pandacube.lib.paper.reflect.wrapper.paper.configuration.WorldConfiguration;
|
import fr.pandacube.lib.paper.reflect.wrapper.paper.configuration.WorldConfiguration;
|
||||||
@ -210,7 +210,7 @@ public class PandalibPaperReflect {
|
|||||||
// paper.commands
|
// paper.commands
|
||||||
thAcc.catchThrowable(() -> initWrapper(BukkitCommandNode.class, BukkitCommandNode.REFLECT.get()));
|
thAcc.catchThrowable(() -> initWrapper(BukkitCommandNode.class, BukkitCommandNode.REFLECT.get()));
|
||||||
thAcc.catchThrowable(() -> initWrapper(PaperBrigadier.class, PaperBrigadier.REFLECT.get()));
|
thAcc.catchThrowable(() -> initWrapper(PaperBrigadier.class, PaperBrigadier.REFLECT.get()));
|
||||||
thAcc.catchThrowable(() -> initWrapper(PluginCommandNode.class, PluginCommandNode.REFLECT.get()));
|
thAcc.catchThrowable(() -> initWrapper(PluginCommandMeta.class, PluginCommandMeta.REFLECT.get()));
|
||||||
thAcc.catchThrowable(() -> initWrapper(ShadowBrigNode.class, ShadowBrigNode.REFLECT.get()));
|
thAcc.catchThrowable(() -> initWrapper(ShadowBrigNode.class, ShadowBrigNode.REFLECT.get()));
|
||||||
// paper.configuration
|
// paper.configuration
|
||||||
thAcc.catchThrowable(() -> initWrapper(FallbackValue_Int.class, FallbackValue_Int.REFLECT.get()));
|
thAcc.catchThrowable(() -> initWrapper(FallbackValue_Int.class, FallbackValue_Int.REFLECT.get()));
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
package fr.pandacube.lib.paper.reflect.wrapper.brigadier;
|
package fr.pandacube.lib.paper.reflect.wrapper.brigadier;
|
||||||
|
|
||||||
|
import fr.pandacube.lib.paper.reflect.wrapper.paper.commands.PluginCommandMeta;
|
||||||
import fr.pandacube.lib.reflect.Reflect;
|
import fr.pandacube.lib.reflect.Reflect;
|
||||||
|
import fr.pandacube.lib.reflect.ReflectField;
|
||||||
import fr.pandacube.lib.reflect.wrapper.ReflectWrapperTyped;
|
import fr.pandacube.lib.reflect.wrapper.ReflectWrapperTyped;
|
||||||
import fr.pandacube.lib.reflect.ReflectClass;
|
import fr.pandacube.lib.reflect.ReflectClass;
|
||||||
import fr.pandacube.lib.reflect.ReflectMethod;
|
import fr.pandacube.lib.reflect.ReflectMethod;
|
||||||
@ -11,11 +13,20 @@ import static fr.pandacube.lib.util.ThrowableUtil.wrapReflectEx;
|
|||||||
public class CommandNode<S> extends ReflectWrapperTyped<com.mojang.brigadier.tree.CommandNode<S>> {
|
public class CommandNode<S> extends ReflectWrapperTyped<com.mojang.brigadier.tree.CommandNode<S>> {
|
||||||
public static final ReflectClass<?> REFLECT = Reflect.ofClass(com.mojang.brigadier.tree.CommandNode.class);
|
public static final ReflectClass<?> REFLECT = Reflect.ofClass(com.mojang.brigadier.tree.CommandNode.class);
|
||||||
private static final ReflectMethod<?> removeCommand = wrapEx(() -> REFLECT.method("removeCommand", String.class));
|
private static final ReflectMethod<?> removeCommand = wrapEx(() -> REFLECT.method("removeCommand", String.class));
|
||||||
|
private static final ReflectField<?> pluginCommandMeta = wrapEx(() -> REFLECT.field("pluginCommandMeta"));
|
||||||
|
|
||||||
public void removeCommand(String cmd) {
|
public void removeCommand(String cmd) {
|
||||||
wrapReflectEx(() -> removeCommand.invoke(__getRuntimeInstance(), cmd));
|
wrapReflectEx(() -> removeCommand.invoke(__getRuntimeInstance(), cmd));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public PluginCommandMeta pluginCommandMeta() {
|
||||||
|
return wrap(wrapReflectEx(() -> pluginCommandMeta.getValue(__getRuntimeInstance())), PluginCommandMeta.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void pluginCommandMeta(PluginCommandMeta meta) {
|
||||||
|
wrapReflectEx(() -> pluginCommandMeta.setValue(__getRuntimeInstance(), unwrap(meta)));
|
||||||
|
}
|
||||||
|
|
||||||
protected CommandNode(Object obj) {
|
protected CommandNode(Object obj) {
|
||||||
super(obj);
|
super(obj);
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,39 @@
|
|||||||
|
package fr.pandacube.lib.paper.reflect.wrapper.paper.commands;
|
||||||
|
|
||||||
|
import fr.pandacube.lib.reflect.Reflect;
|
||||||
|
import fr.pandacube.lib.reflect.ReflectClass;
|
||||||
|
import fr.pandacube.lib.reflect.ReflectMethod;
|
||||||
|
import fr.pandacube.lib.reflect.wrapper.ReflectWrapper;
|
||||||
|
import org.bukkit.plugin.Plugin;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static fr.pandacube.lib.util.ThrowableUtil.wrapEx;
|
||||||
|
import static fr.pandacube.lib.util.ThrowableUtil.wrapReflectEx;
|
||||||
|
|
||||||
|
public class PluginCommandMeta extends ReflectWrapper {
|
||||||
|
public static final ReflectClass<?> REFLECT = wrapEx(() -> Reflect.ofClass("io.papermc.paper.command.brigadier.PluginCommandMeta"));
|
||||||
|
private static final ReflectMethod<?> plugin = wrapEx(() -> REFLECT.method("plugin"));
|
||||||
|
private static final ReflectMethod<?> description = wrapEx(() -> REFLECT.method("description"));
|
||||||
|
private static final ReflectMethod<?> aliases = wrapEx(() -> REFLECT.method("aliases"));
|
||||||
|
|
||||||
|
|
||||||
|
public Plugin plugin() {
|
||||||
|
return (Plugin) wrapReflectEx(() -> plugin.invoke(__getRuntimeInstance()));
|
||||||
|
}
|
||||||
|
|
||||||
|
public String description() {
|
||||||
|
return (String) wrapReflectEx(() -> description.invoke(__getRuntimeInstance()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public List<String> aliases() {
|
||||||
|
return (List<String>) wrapReflectEx(() -> aliases.invoke(__getRuntimeInstance()));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
protected PluginCommandMeta(Object obj) {
|
||||||
|
super(obj);
|
||||||
|
}
|
||||||
|
}
|
@ -1,43 +0,0 @@
|
|||||||
package fr.pandacube.lib.paper.reflect.wrapper.paper.commands;
|
|
||||||
|
|
||||||
import com.mojang.brigadier.tree.LiteralCommandNode;
|
|
||||||
import fr.pandacube.lib.reflect.Reflect;
|
|
||||||
import fr.pandacube.lib.reflect.ReflectClass;
|
|
||||||
import fr.pandacube.lib.reflect.ReflectConstructor;
|
|
||||||
import fr.pandacube.lib.reflect.ReflectMethod;
|
|
||||||
import fr.pandacube.lib.reflect.wrapper.ReflectWrapperTyped;
|
|
||||||
import io.papermc.paper.command.brigadier.CommandSourceStack;
|
|
||||||
import io.papermc.paper.plugin.configuration.PluginMeta;
|
|
||||||
import org.bukkit.plugin.Plugin;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
|
|
||||||
import static fr.pandacube.lib.util.ThrowableUtil.wrapEx;
|
|
||||||
import static fr.pandacube.lib.util.ThrowableUtil.wrapReflectEx;
|
|
||||||
|
|
||||||
public class PluginCommandNode extends ReflectWrapperTyped<LiteralCommandNode<CommandSourceStack>> {
|
|
||||||
public static final ReflectClass<?> REFLECT = wrapEx(() -> Reflect.ofClass("io.papermc.paper.command.brigadier.PluginCommandNode"));
|
|
||||||
private static final ReflectMethod<?> getPlugin = wrapEx(() -> REFLECT.method("getPlugin"));
|
|
||||||
private static final ReflectMethod<?> getDescription = wrapEx(() -> REFLECT.method("getDescription"));
|
|
||||||
private static final ReflectConstructor<?> CONSTRUCTOR = wrapEx(() -> REFLECT.constructor(String.class, PluginMeta.class, LiteralCommandNode.class, String.class));
|
|
||||||
|
|
||||||
|
|
||||||
public PluginCommandNode(@NotNull String literal, @NotNull PluginMeta plugin, @NotNull LiteralCommandNode<CommandSourceStack> rootLiteral, @Nullable String description) {
|
|
||||||
this(wrapReflectEx(() -> CONSTRUCTOR.instantiate(literal, plugin, rootLiteral, description)));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public Plugin getPlugin() {
|
|
||||||
return (Plugin) wrapReflectEx(() -> getPlugin.invoke(__getRuntimeInstance()));
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getDescription() {
|
|
||||||
return (String) wrapReflectEx(() -> getDescription.invoke(__getRuntimeInstance()));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
protected PluginCommandNode(Object obj) {
|
|
||||||
super(obj);
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user