diff --git a/pom.xml b/pom.xml
index 2242c8d..fbdfbe5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -77,7 +77,7 @@
io.papermc.paper
paper-api
- 1.20.6-R0.1-SNAPSHOT
+ 1.21.3-R0.1-SNAPSHOT
provided
diff --git a/src/main/java/me/youhavetrouble/blockedit/BlockEdit.java b/src/main/java/me/youhavetrouble/blockedit/BlockEdit.java
index f574fc1..8a6d64d 100644
--- a/src/main/java/me/youhavetrouble/blockedit/BlockEdit.java
+++ b/src/main/java/me/youhavetrouble/blockedit/BlockEdit.java
@@ -1,14 +1,11 @@
package me.youhavetrouble.blockedit;
-import me.youhavetrouble.blockedit.commands.*;
import me.youhavetrouble.blockedit.wands.SelectionWand;
-import org.bukkit.command.Command;
import org.bukkit.plugin.java.JavaPlugin;
public final class BlockEdit extends JavaPlugin {
private static BlockEdit plugin;
-
private static SchematicHandler schematicHandler;
private static WandsHandler wandsHandler;
@@ -18,16 +15,6 @@ public final class BlockEdit extends JavaPlugin {
getServer().getPluginManager().registerEvents(new JoinLeaveListener(), this);
- registerCommand(new WandCommand());
- registerCommand(new SetCommand());
- registerCommand(new ReplaceCommand());
- registerCommand(new DeselCommand());
- registerCommand(new Pos1Command());
- registerCommand(new Pos2Command());
- registerCommand(new CopyCommand());
- registerCommand(new PasteCommand());
- registerCommand(new RotateCommand());
-
schematicHandler = new SchematicHandler(this);
wandsHandler = new WandsHandler(this);
@@ -35,10 +22,9 @@ public final class BlockEdit extends JavaPlugin {
wandsHandler.registerWand(selectionWand);
getServer().getPluginManager().registerEvents(selectionWand, this);
-
+ BlockEditCommands.registerCommands(this);
}
-
public static BlockEdit getPlugin() {
return plugin;
}
@@ -51,8 +37,4 @@ public final class BlockEdit extends JavaPlugin {
return wandsHandler;
}
- private void registerCommand(Command command) {
- getServer().getCommandMap().register("blockedit", command);
- }
-
}
diff --git a/src/main/java/me/youhavetrouble/blockedit/BlockEditCommands.java b/src/main/java/me/youhavetrouble/blockedit/BlockEditCommands.java
new file mode 100644
index 0000000..79f7ba6
--- /dev/null
+++ b/src/main/java/me/youhavetrouble/blockedit/BlockEditCommands.java
@@ -0,0 +1,79 @@
+package me.youhavetrouble.blockedit;
+
+import com.mojang.brigadier.Command;
+import com.mojang.brigadier.arguments.StringArgumentType;
+import com.mojang.brigadier.tree.LiteralCommandNode;
+import io.papermc.paper.command.brigadier.CommandSourceStack;
+import io.papermc.paper.command.brigadier.Commands;
+import io.papermc.paper.plugin.lifecycle.event.LifecycleEventManager;
+import io.papermc.paper.plugin.lifecycle.event.types.LifecycleEvents;
+import me.youhavetrouble.blockedit.api.BlockEditAPI;
+import net.kyori.adventure.text.Component;
+import net.kyori.adventure.text.format.NamedTextColor;
+import org.bukkit.entity.Player;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.plugin.Plugin;
+import org.jetbrains.annotations.NotNull;
+
+@SuppressWarnings("UnstableApiUsage")
+public class BlockEditCommands {
+
+ protected static void registerCommands(@NotNull BlockEdit plugin) {
+ LifecycleEventManager<@NotNull Plugin> manager = plugin.getLifecycleManager();
+ manager.registerEventHandler(LifecycleEvents.COMMANDS, event -> {
+ final Commands commands = event.registrar();
+
+ commands.register(
+ wandCommand(),
+ "Gives the player chosen wand"
+ );
+ });
+
+ }
+
+ private static LiteralCommandNode wandCommand() {
+ return Commands.literal("wand")
+ .requires(css -> {
+ if (!(css.getSender() instanceof Player player)) return false;
+ return player.hasPermission("blockedit.command.wand");
+ })
+ .then(
+ Commands.argument("wand_id", StringArgumentType.word())
+ .suggests((ctx, builder) -> {
+ String[] inputArgs = ctx.getInput().split(" ");
+ String lastArg = inputArgs[inputArgs.length - 1];
+ for (String id : BlockEditAPI.getWandsHandler().getWandIds()) {
+ if (inputArgs.length != 1) continue;
+ if (id.startsWith(lastArg)) continue;
+ builder.suggest(id);
+ }
+ return builder.buildFuture();
+ })
+ .executes(ctx -> {
+ if (!(ctx.getSource().getSender() instanceof Player player)) {
+ ctx.getSource().getSender().sendMessage(Component.text("Only players can use this command", NamedTextColor.RED));
+ return Command.SINGLE_SUCCESS;
+ }
+ String wandId = ctx.getArgument("wand_id", String.class);
+ ItemStack wand = BlockEditAPI.getWandsHandler().getWand(wandId);
+ if (wand == null) {
+ ctx.getSource().getSender().sendMessage(Component.text("Could not find wand with id %s".formatted(wandId), NamedTextColor.RED));
+ return Command.SINGLE_SUCCESS;
+ }
+ player.getInventory().addItem(wand);
+ return Command.SINGLE_SUCCESS;
+ })
+ )
+ .executes(ctx -> {
+ if (!(ctx.getSource().getSender() instanceof Player player)) {
+ ctx.getSource().getSender().sendMessage(Component.text("Only players can use this command", NamedTextColor.RED));
+ return Command.SINGLE_SUCCESS;
+ }
+ ItemStack wand = BlockEditAPI.getWandsHandler().getWand("select");
+ player.getInventory().addItem(wand);
+ return Command.SINGLE_SUCCESS;
+ })
+ .build();
+ }
+
+}
diff --git a/src/main/java/me/youhavetrouble/blockedit/commands/WandCommand.java b/src/main/java/me/youhavetrouble/blockedit/commands/WandCommand.java
deleted file mode 100644
index 0cf453a..0000000
--- a/src/main/java/me/youhavetrouble/blockedit/commands/WandCommand.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package me.youhavetrouble.blockedit.commands;
-
-import me.youhavetrouble.blockedit.api.BlockEditAPI;
-import net.kyori.adventure.text.Component;
-import org.bukkit.command.Command;
-import org.bukkit.command.CommandSender;
-import org.bukkit.entity.Player;
-import org.bukkit.inventory.ItemStack;
-import org.bukkit.util.StringUtil;
-import org.jetbrains.annotations.NotNull;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class WandCommand extends Command {
-
- public WandCommand() {
- super("wand");
- setPermission("blockedit.command.wand");
- }
-
- @Override
- public boolean execute(@NotNull CommandSender commandSender, @NotNull String s, @NotNull String[] args) {
- if (!(commandSender instanceof Player player)) return true;
- ItemStack wand;
- if (args.length == 0) {
- wand = BlockEditAPI.getWandsHandler().getWand("select");
- if (wand == null) return true;
- } else {
- wand = BlockEditAPI.getWandsHandler().getWand(args[0]);
- if (wand == null) {
- player.sendMessage(Component.text("Could not find wand with id "+args[0]));
- return true;
- }
- }
- player.getInventory().addItem(wand);
- return true;
- }
-
- @Override
- public @NotNull List tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) {
- if (args.length == 1)
- return StringUtil.copyPartialMatches(args[0], BlockEditAPI.getWandsHandler().getWandIds(), new ArrayList<>());
- return new ArrayList<>();
- }
-
-}