mirror of
https://github.com/IntellectualSites/PlotSquared.git
synced 2025-06-25 02:04:44 +02:00
feature: use cloud v2 for commands
This commit is contained in:
@ -53,6 +53,9 @@ dependencies {
|
||||
|
||||
// Adventure
|
||||
implementation(libs.adventureBukkit)
|
||||
|
||||
// Cloud
|
||||
implementation(libs.cloudPaper)
|
||||
}
|
||||
|
||||
tasks.processResources {
|
||||
@ -77,6 +80,7 @@ tasks.named<ShadowJar>("shadowJar") {
|
||||
relocate("com.google.inject", "com.plotsquared.google")
|
||||
relocate("org.aopalliance", "com.plotsquared.core.aopalliance")
|
||||
relocate("cloud.commandframework.services", "com.plotsquared.core.services")
|
||||
relocate("cloud.commandframework", "com.plotsquared.commands")
|
||||
relocate("io.leangen.geantyref", "com.plotsquared.core.geantyref")
|
||||
relocate("com.intellectualsites.arkitektonika", "com.plotsquared.core.arkitektonika")
|
||||
relocate("com.intellectualsites.http", "com.plotsquared.core.http")
|
||||
|
@ -28,6 +28,7 @@ import com.google.inject.TypeLiteral;
|
||||
import com.plotsquared.bukkit.generator.BukkitPlotGenerator;
|
||||
import com.plotsquared.bukkit.inject.BackupModule;
|
||||
import com.plotsquared.bukkit.inject.BukkitModule;
|
||||
import com.plotsquared.bukkit.inject.CloudModule;
|
||||
import com.plotsquared.bukkit.inject.PermissionModule;
|
||||
import com.plotsquared.bukkit.inject.WorldManagerModule;
|
||||
import com.plotsquared.bukkit.listener.BlockEventListener;
|
||||
@ -64,6 +65,7 @@ import com.plotsquared.bukkit.uuid.SquirrelIdUUIDService;
|
||||
import com.plotsquared.core.PlotPlatform;
|
||||
import com.plotsquared.core.PlotSquared;
|
||||
import com.plotsquared.core.backup.BackupManager;
|
||||
import com.plotsquared.core.commands.PlotSquaredCommandManager;
|
||||
import com.plotsquared.core.components.ComponentPresetManager;
|
||||
import com.plotsquared.core.configuration.ConfigurationNode;
|
||||
import com.plotsquared.core.configuration.ConfigurationSection;
|
||||
@ -83,6 +85,7 @@ import com.plotsquared.core.inject.annotations.DefaultGenerator;
|
||||
import com.plotsquared.core.inject.annotations.ImpromptuPipeline;
|
||||
import com.plotsquared.core.inject.annotations.WorldConfig;
|
||||
import com.plotsquared.core.inject.annotations.WorldFile;
|
||||
import com.plotsquared.core.inject.modules.CommandModule;
|
||||
import com.plotsquared.core.inject.modules.PlotSquaredModule;
|
||||
import com.plotsquared.core.listener.PlotListener;
|
||||
import com.plotsquared.core.listener.WESubscriber;
|
||||
@ -293,6 +296,8 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
||||
new PermissionModule(),
|
||||
new WorldManagerModule(),
|
||||
new PlotSquaredModule(),
|
||||
new CommandModule(),
|
||||
new CloudModule(this),
|
||||
new BukkitModule(this),
|
||||
new BackupModule()
|
||||
);
|
||||
@ -388,6 +393,8 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
||||
// Commands
|
||||
if (Settings.Enabled_Components.COMMANDS) {
|
||||
this.registerCommands();
|
||||
// Register the commands.
|
||||
this.injector().getInstance(PlotSquaredCommandManager.class).registerDefaultCommands();
|
||||
}
|
||||
|
||||
// Permissions
|
||||
|
@ -0,0 +1,86 @@
|
||||
package com.plotsquared.bukkit.inject;
|
||||
|
||||
import cloud.commandframework.CloudCapability;
|
||||
import cloud.commandframework.CommandManager;
|
||||
import cloud.commandframework.bukkit.CloudBukkitCapabilities;
|
||||
import cloud.commandframework.execution.AsynchronousCommandExecutionCoordinator;
|
||||
import cloud.commandframework.minecraft.extras.AudienceProvider;
|
||||
import cloud.commandframework.minecraft.extras.MinecraftExceptionHandler;
|
||||
import cloud.commandframework.paper.PaperCommandManager;
|
||||
import com.google.inject.AbstractModule;
|
||||
import com.google.inject.Key;
|
||||
import com.google.inject.TypeLiteral;
|
||||
import com.plotsquared.bukkit.BukkitPlatform;
|
||||
import com.plotsquared.bukkit.util.BukkitUtil;
|
||||
import com.plotsquared.core.commands.CommonCommandRequirement;
|
||||
import com.plotsquared.core.commands.PlotSquaredCaptionProvider;
|
||||
import com.plotsquared.core.commands.processing.CommandRequirementPostprocessor;
|
||||
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
||||
import com.plotsquared.core.player.ConsolePlayer;
|
||||
import com.plotsquared.core.player.PlotPlayer;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
public class CloudModule extends AbstractModule {
|
||||
|
||||
private static final Logger LOGGER = LogManager.getLogger("PlotSquared/" + CloudModule.class.getSimpleName());
|
||||
|
||||
private static @NonNull CommandSender convert(final @NonNull PlotPlayer<?> player) {
|
||||
if (player instanceof ConsolePlayer) {
|
||||
return Bukkit.getConsoleSender();
|
||||
}
|
||||
return (Player) player.getPlatformPlayer();
|
||||
}
|
||||
|
||||
private static @NonNull PlotPlayer<?> convert (final @NonNull CommandSender sender) {
|
||||
if (sender instanceof Player player) {
|
||||
return BukkitUtil.adapt(player);
|
||||
}
|
||||
return ConsolePlayer.getConsole();
|
||||
}
|
||||
|
||||
private final BukkitPlatform bukkitPlatform;
|
||||
|
||||
public CloudModule(final @NonNull BukkitPlatform bukkitPlatform) {
|
||||
this.bukkitPlatform = bukkitPlatform;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void configure() {
|
||||
try {
|
||||
final PaperCommandManager<PlotPlayer<?>> commandManager = new PaperCommandManager<PlotPlayer<?>>(
|
||||
this.bukkitPlatform,
|
||||
AsynchronousCommandExecutionCoordinator.<PlotPlayer<?>>builder().withAsynchronousParsing().build(),
|
||||
CloudModule::convert,
|
||||
CloudModule::convert
|
||||
);
|
||||
commandManager.captionRegistry().registerProvider(new PlotSquaredCaptionProvider());
|
||||
if (commandManager.hasCapability(CloudBukkitCapabilities.ASYNCHRONOUS_COMPLETION)) {
|
||||
commandManager.registerAsynchronousCompletions();
|
||||
}
|
||||
if (commandManager.hasCapability(CloudBukkitCapabilities.NATIVE_BRIGADIER)) {
|
||||
commandManager.registerBrigadier();
|
||||
}
|
||||
|
||||
final CommandRequirementPostprocessor requirementPostprocessor = new CommandRequirementPostprocessor();
|
||||
requirementPostprocessor.registerRequirements(CommonCommandRequirement.values());
|
||||
commandManager.registerCommandPostProcessor(requirementPostprocessor);
|
||||
|
||||
// TODO(City): Override parsing errors using MM parsing.
|
||||
MinecraftExceptionHandler.<PlotPlayer<?>>create(PlotPlayer::getAudience)
|
||||
.defaultHandlers()
|
||||
.decorator((ctx, component) -> TranslatableCaption.of("core.prefix").
|
||||
toComponent(ctx.context().sender())
|
||||
.append(component))
|
||||
.registerTo(commandManager);
|
||||
|
||||
bind(Key.get(new TypeLiteral<CommandManager<PlotPlayer<?>>>() {})).toInstance(commandManager);
|
||||
} catch (final Exception e) {
|
||||
LOGGER.error("Failed to configure command manager", e);
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user