bukkit: Implement ItemStackArgument (#257)
Fully featured on 1.13+, falls back to Material parser on legacy versions. Also some general cleanup to the Bukkit impl
This commit is contained in:
parent
e5d6ce7b90
commit
e3cc7d43cb
20 changed files with 899 additions and 180 deletions
|
|
@ -27,15 +27,18 @@ import cloud.commandframework.CommandTree;
|
|||
import cloud.commandframework.arguments.CommandArgument;
|
||||
import cloud.commandframework.brigadier.CloudBrigadierManager;
|
||||
import cloud.commandframework.bukkit.BukkitBrigadierMapper;
|
||||
import cloud.commandframework.bukkit.internal.CraftBukkitReflection;
|
||||
import cloud.commandframework.context.CommandContext;
|
||||
import cloud.commandframework.permission.CommandPermission;
|
||||
import com.destroystokyo.paper.brigadier.BukkitBrigadierCommandSource;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.command.PluginIdentifiableCommand;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.function.BiPredicate;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
|
|
@ -46,18 +49,30 @@ class PaperBrigadierListener<C> implements Listener {
|
|||
|
||||
PaperBrigadierListener(final @NonNull PaperCommandManager<C> paperCommandManager) {
|
||||
this.paperCommandManager = paperCommandManager;
|
||||
this.brigadierManager = new CloudBrigadierManager<>(
|
||||
this.paperCommandManager,
|
||||
() -> new CommandContext<>(
|
||||
this.paperCommandManager.getCommandSenderMapper()
|
||||
.apply(Bukkit.getConsoleSender()),
|
||||
this.paperCommandManager
|
||||
)
|
||||
);
|
||||
this.brigadierManager.brigadierSenderMapper(
|
||||
sender -> this.paperCommandManager.getCommandSenderMapper().apply(sender.getBukkitSender())
|
||||
);
|
||||
this.brigadierManager = new CloudBrigadierManager<>(this.paperCommandManager, () -> new CommandContext<>(
|
||||
this.paperCommandManager.getCommandSenderMapper().apply(Bukkit.getConsoleSender()),
|
||||
this.paperCommandManager
|
||||
));
|
||||
|
||||
this.brigadierManager.brigadierSenderMapper(sender ->
|
||||
this.paperCommandManager.getCommandSenderMapper().apply(sender.getBukkitSender()));
|
||||
|
||||
new BukkitBrigadierMapper<>(this.paperCommandManager, this.brigadierManager);
|
||||
|
||||
if (!CraftBukkitReflection.craftBukkit()) {
|
||||
return;
|
||||
}
|
||||
final Class<?> vanillaCommandWrapperClass = CraftBukkitReflection.needOBCClass("command.VanillaCommandWrapper");
|
||||
final Method getListenerMethod = CraftBukkitReflection.needMethod(
|
||||
vanillaCommandWrapperClass, "getListener", CommandSender.class);
|
||||
this.brigadierManager.backwardsBrigadierSenderMapper(cloud -> {
|
||||
try {
|
||||
return (BukkitBrigadierCommandSource) getListenerMethod
|
||||
.invoke(null, this.paperCommandManager.getBackwardsCommandSenderMapper().apply(cloud));
|
||||
} catch (final ReflectiveOperationException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
protected @NonNull CloudBrigadierManager<C, BukkitBrigadierCommandSource> brigadierManager() {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue