From 50d1d8361281ec40e2d399e0565ca4b242ca7042 Mon Sep 17 00:00:00 2001 From: YouHaveTrouble Date: Wed, 27 Nov 2024 20:18:22 +0100 Subject: [PATCH] migrate all commands to brig --- .../blockedit/BlockEditCommands.java | 243 ++++++++++++++++++ .../blockedit/commands/CopyCommand.java | 29 --- .../blockedit/commands/DeselCommand.java | 24 -- .../blockedit/commands/PasteCommand.java | 47 ---- .../blockedit/commands/Pos1Command.java | 25 -- .../blockedit/commands/Pos2Command.java | 24 -- .../blockedit/commands/ReplaceCommand.java | 87 ------- .../blockedit/commands/RotateCommand.java | 52 ---- .../blockedit/commands/SetCommand.java | 79 ------ 9 files changed, 243 insertions(+), 367 deletions(-) delete mode 100644 src/main/java/me/youhavetrouble/blockedit/commands/CopyCommand.java delete mode 100644 src/main/java/me/youhavetrouble/blockedit/commands/DeselCommand.java delete mode 100644 src/main/java/me/youhavetrouble/blockedit/commands/PasteCommand.java delete mode 100644 src/main/java/me/youhavetrouble/blockedit/commands/Pos1Command.java delete mode 100644 src/main/java/me/youhavetrouble/blockedit/commands/Pos2Command.java delete mode 100644 src/main/java/me/youhavetrouble/blockedit/commands/ReplaceCommand.java delete mode 100644 src/main/java/me/youhavetrouble/blockedit/commands/RotateCommand.java delete mode 100644 src/main/java/me/youhavetrouble/blockedit/commands/SetCommand.java diff --git a/src/main/java/me/youhavetrouble/blockedit/BlockEditCommands.java b/src/main/java/me/youhavetrouble/blockedit/BlockEditCommands.java index 79f7ba6..e635da8 100644 --- a/src/main/java/me/youhavetrouble/blockedit/BlockEditCommands.java +++ b/src/main/java/me/youhavetrouble/blockedit/BlockEditCommands.java @@ -1,20 +1,30 @@ package me.youhavetrouble.blockedit; import com.mojang.brigadier.Command; +import com.mojang.brigadier.arguments.DoubleArgumentType; 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.command.brigadier.argument.ArgumentTypes; import io.papermc.paper.plugin.lifecycle.event.LifecycleEventManager; import io.papermc.paper.plugin.lifecycle.event.types.LifecycleEvents; import me.youhavetrouble.blockedit.api.BlockEditAPI; +import me.youhavetrouble.blockedit.operations.PasteOperation; +import me.youhavetrouble.blockedit.operations.ReplaceOperation; +import me.youhavetrouble.blockedit.operations.SetOperation; +import me.youhavetrouble.blockedit.util.Selection; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; +import org.bukkit.block.BlockState; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.plugin.Plugin; +import org.bukkit.util.Vector; import org.jetbrains.annotations.NotNull; +import java.util.HashMap; + @SuppressWarnings("UnstableApiUsage") public class BlockEditCommands { @@ -27,6 +37,47 @@ public class BlockEditCommands { wandCommand(), "Gives the player chosen wand" ); + + commands.register( + copyCommand(), + "Copies the selected area to the clipboard" + ); + + commands.register( + pasteCommand(), + "Pastes the clipboard at the player's location" + ); + + commands.register( + deselCommand(), + "Resets the player's selection" + ); + + commands.register( + pos1Command(), + "Sets the first point of the player's selection" + ); + + commands.register( + pos2Command(), + "Sets the second point of the player's selection" + ); + + commands.register( + rotateCommand(), + "Rotates the clipboard by the specified angle" + ); + + commands.register( + setCommand(), + "Sets the selected area to the specified block" + ); + + commands.register( + replaceCommand(), + "Replaces the specified block with another block" + ); + }); } @@ -76,4 +127,196 @@ public class BlockEditCommands { .build(); } + private static LiteralCommandNode copyCommand() { + return Commands.literal("copy") + .requires(css -> { + if (!(css.getSender() instanceof Player player)) return false; + return player.hasPermission("blockedit.command.copy"); + }) + .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; + } + BEPlayer bePlayer = BEPlayer.getByPlayer(player); + try { + bePlayer.setClipboardFromSelection(); + player.sendMessage(Component.text("Copied selection to clipboard")); + } catch (IllegalStateException e) { + player.sendMessage(Component.text("You need to select an area first")); + } + return Command.SINGLE_SUCCESS; + }) + .build(); + } + + private static LiteralCommandNode deselCommand() { + return Commands.literal("desel") + .requires(css -> { + if (!(css.getSender() instanceof Player player)) return false; + return player.hasPermission("blockedit.command.desel"); + }) + .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; + } + BEPlayer.getByPlayer(player).resetSelection(); + player.sendMessage(Component.text("You have reset your selection")); + return Command.SINGLE_SUCCESS; + }) + .build(); + } + + private static LiteralCommandNode pos1Command() { + return Commands.literal("pos1") + .requires(css -> { + if (!(css.getSender() instanceof Player player)) return false; + return player.hasPermission("blockedit.command.pos"); + }) + .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; + } + BEPlayer.getByPlayer(player).setSelectionPoint1(player.getLocation().toBlockLocation()); + player.sendMessage(Component.text("First point set at your location")); + return Command.SINGLE_SUCCESS; + }) + .build(); + } + + private static LiteralCommandNode pos2Command() { + return Commands.literal("pos2") + .requires(css -> { + if (!(css.getSender() instanceof Player player)) return false; + return player.hasPermission("blockedit.command.pos"); + }) + .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; + } + BEPlayer.getByPlayer(player).setSelectionPoint2(player.getLocation().toBlockLocation()); + player.sendMessage(Component.text("Second point set at your location")); + return Command.SINGLE_SUCCESS; + }) + .build(); + } + + private static LiteralCommandNode pasteCommand() { + return Commands.literal("paste") + .requires(css -> { + if (!(css.getSender() instanceof Player player)) return false; + return player.hasPermission("blockedit.command.paste"); + }) + .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; + } + BEPlayer bePlayer = BEPlayer.getByPlayer(player); + Vector playerLocationVector = player.getLocation().toBlockLocation().toVector(); + + HashMap absoluteBlocks = new HashMap<>(bePlayer.getClipboard().getBlocks().size()); + + bePlayer.getClipboard().getBlocks().forEach((vector, blockState) -> { + Vector absolutePosition = vector.clone().add(playerLocationVector); + absoluteBlocks.put(absolutePosition, blockState); + }); + + Selection selection = Selection.fromClipboard(absoluteBlocks.keySet(), player.getWorld()); + BlockEditAPI.runOperation(selection, 1, new PasteOperation(absoluteBlocks)); + player.sendMessage(Component.text("Pasting clipboard...")); + + return Command.SINGLE_SUCCESS; + }) + .build(); + } + + private static LiteralCommandNode rotateCommand() { + return Commands.literal("rotate") + .requires(css -> { + if (!(css.getSender() instanceof Player player)) return false; + return player.hasPermission("blockedit.command.rotate"); + }) + .then( + Commands.argument("angle", DoubleArgumentType.doubleArg(-360, 360)) + .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; + } + double angle = ctx.getArgument("angle", Double.class); + BEPlayer bePlayer = BEPlayer.getByPlayer(player); + bePlayer.getClipboard().rotate(angle); + player.sendMessage(Component.text("Rotated clipboard by " + angle + " degrees")); + return Command.SINGLE_SUCCESS; + }) + ) + .build(); + } + + private static LiteralCommandNode setCommand() { + return Commands.literal("set") + .requires(css -> { + if (!(css.getSender() instanceof Player player)) return false; + return player.hasPermission("blockedit.command.set"); + }) + .then( + // TODO replace with better way to provide block data, possibly multiple arguments + Commands.argument("block", ArgumentTypes.blockState()) + .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; + } + + BEPlayer bePlayer = BEPlayer.getByPlayer(player); + BlockState blockState = ctx.getArgument("block", BlockState.class); + + Selection selection = bePlayer.getSelection(); + + BlockEditAPI.runOperation(selection, 1, new SetOperation(blockState.getBlockData())); + player.sendMessage(Component.text("Setting blocks...")); + + return Command.SINGLE_SUCCESS; + }) + ) + .build(); + } + + private static LiteralCommandNode replaceCommand() { + return Commands.literal("replace") + .requires(css -> { + if (!(css.getSender() instanceof Player player)) return false; + return player.hasPermission("blockedit.command.replace"); + }) + .then( + // TODO replace with better way to provide block data, possibly multiple arguments + Commands.argument("to_replace", ArgumentTypes.blockState()) + .then(Commands.argument("replace_with", ArgumentTypes.blockState()) + .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; + } + + BEPlayer bePlayer = BEPlayer.getByPlayer(player); + BlockState toReplace = ctx.getArgument("to_replace", BlockState.class); + BlockState replaceWith = ctx.getArgument("replace_with", BlockState.class); + + Selection selection = bePlayer.getSelection(); + + BlockEditAPI.runOperation(selection, 1, new ReplaceOperation(toReplace.getBlockData(), replaceWith.getBlockData())); + player.sendMessage(Component.text("Replacing blocks...")); + + return Command.SINGLE_SUCCESS; + }) + ) + + ) + .build(); + } + } diff --git a/src/main/java/me/youhavetrouble/blockedit/commands/CopyCommand.java b/src/main/java/me/youhavetrouble/blockedit/commands/CopyCommand.java deleted file mode 100644 index 40a7dee..0000000 --- a/src/main/java/me/youhavetrouble/blockedit/commands/CopyCommand.java +++ /dev/null @@ -1,29 +0,0 @@ -package me.youhavetrouble.blockedit.commands; - -import me.youhavetrouble.blockedit.BEPlayer; -import net.kyori.adventure.text.Component; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; - -public class CopyCommand extends Command { - - public CopyCommand() { - super("copy"); - setPermission("blockedit.command.copy"); - } - @Override - public boolean execute(@NotNull CommandSender sender, @NotNull String s, @NotNull String[] args) { - if (!(sender instanceof Player player)) return true; - BEPlayer bePlayer = BEPlayer.getByPlayer(player); - try { - bePlayer.setClipboardFromSelection(); - player.sendMessage(Component.text("Copied selection to clipboard")); - } catch (IllegalStateException e) { - player.sendMessage(Component.text("You need to select an area first")); - } - - return true; - } -} diff --git a/src/main/java/me/youhavetrouble/blockedit/commands/DeselCommand.java b/src/main/java/me/youhavetrouble/blockedit/commands/DeselCommand.java deleted file mode 100644 index 625ac1f..0000000 --- a/src/main/java/me/youhavetrouble/blockedit/commands/DeselCommand.java +++ /dev/null @@ -1,24 +0,0 @@ -package me.youhavetrouble.blockedit.commands; - -import me.youhavetrouble.blockedit.BEPlayer; -import net.kyori.adventure.text.Component; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; - -public class DeselCommand extends Command { - public DeselCommand() { - super("desel"); - setPermission("blockedit.command.desel"); - } - - @Override - public boolean execute(@NotNull CommandSender sender, @NotNull String label, @NotNull String[] args) { - if (!(sender instanceof Player player)) return true; - BEPlayer.getByPlayer(player).resetSelection(); - player.sendMessage(Component.text("You have reset your selection")); - return true; - } - -} diff --git a/src/main/java/me/youhavetrouble/blockedit/commands/PasteCommand.java b/src/main/java/me/youhavetrouble/blockedit/commands/PasteCommand.java deleted file mode 100644 index 737601c..0000000 --- a/src/main/java/me/youhavetrouble/blockedit/commands/PasteCommand.java +++ /dev/null @@ -1,47 +0,0 @@ -package me.youhavetrouble.blockedit.commands; - -import me.youhavetrouble.blockedit.BEPlayer; -import me.youhavetrouble.blockedit.api.BlockEditAPI; -import me.youhavetrouble.blockedit.operations.PasteOperation; -import me.youhavetrouble.blockedit.util.Selection; -import net.kyori.adventure.text.Component; -import org.bukkit.block.BlockState; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.bukkit.util.Vector; -import org.jetbrains.annotations.NotNull; - -import java.util.HashMap; - -public class PasteCommand extends Command { - - public PasteCommand() { - super("paste"); - setPermission("blockedit.command.paste"); - } - - @Override - public boolean execute(@NotNull CommandSender sender, @NotNull String s, @NotNull String[] args) { - - if (!(sender instanceof Player player)) { - sender.sendMessage(Component.text("You need to be a player to do this")); - return true; - } - BEPlayer bePlayer = BEPlayer.getByPlayer(player); - Vector playerLocationVector = player.getLocation().toBlockLocation().toVector(); - - HashMap absoluteBlocks = new HashMap<>(bePlayer.getClipboard().getBlocks().size()); - - bePlayer.getClipboard().getBlocks().forEach((vector, blockState) -> { - Vector absolutePosition = vector.clone().add(playerLocationVector); - absoluteBlocks.put(absolutePosition, blockState); - }); - - Selection selection = Selection.fromClipboard(absoluteBlocks.keySet(), player.getWorld()); - BlockEditAPI.runOperation(selection, 1, new PasteOperation(absoluteBlocks)); - player.sendMessage(Component.text("Pasting clipboard...")); - - return false; - } -} diff --git a/src/main/java/me/youhavetrouble/blockedit/commands/Pos1Command.java b/src/main/java/me/youhavetrouble/blockedit/commands/Pos1Command.java deleted file mode 100644 index 6961b4b..0000000 --- a/src/main/java/me/youhavetrouble/blockedit/commands/Pos1Command.java +++ /dev/null @@ -1,25 +0,0 @@ -package me.youhavetrouble.blockedit.commands; - -import me.youhavetrouble.blockedit.BEPlayer; -import net.kyori.adventure.text.Component; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; - -public class Pos1Command extends Command { - public Pos1Command() { - super("pos1"); - setPermission("blockedit.command.pos"); - } - - @Override - public boolean execute(@NotNull CommandSender sender, @NotNull String label, @NotNull String[] args) { - if (!(sender instanceof Player player)) return true; - BEPlayer bePlayer = BEPlayer.getByPlayer(player); - bePlayer.setSelectionPoint1(player.getLocation().toBlockLocation()); - player.sendMessage(Component.text("First point set at your location")); - return true; - } - -} diff --git a/src/main/java/me/youhavetrouble/blockedit/commands/Pos2Command.java b/src/main/java/me/youhavetrouble/blockedit/commands/Pos2Command.java deleted file mode 100644 index 7cc8f50..0000000 --- a/src/main/java/me/youhavetrouble/blockedit/commands/Pos2Command.java +++ /dev/null @@ -1,24 +0,0 @@ -package me.youhavetrouble.blockedit.commands; - -import me.youhavetrouble.blockedit.BEPlayer; -import net.kyori.adventure.text.Component; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; - -public class Pos2Command extends Command { - - public Pos2Command() { - super("pos2"); - setPermission("blockedit.command.pos"); - } - @Override - public boolean execute(@NotNull CommandSender sender, @NotNull String label, @NotNull String[] args) { - if (!(sender instanceof Player player)) return true; - BEPlayer bePlayer = BEPlayer.getByPlayer(player); - bePlayer.setSelectionPoint2(player.getLocation().toBlockLocation()); - player.sendMessage(Component.text("Second point set at your location")); - return true; - } -} diff --git a/src/main/java/me/youhavetrouble/blockedit/commands/ReplaceCommand.java b/src/main/java/me/youhavetrouble/blockedit/commands/ReplaceCommand.java deleted file mode 100644 index cc32663..0000000 --- a/src/main/java/me/youhavetrouble/blockedit/commands/ReplaceCommand.java +++ /dev/null @@ -1,87 +0,0 @@ -package me.youhavetrouble.blockedit.commands; - -import me.youhavetrouble.blockedit.BEPlayer; -import me.youhavetrouble.blockedit.api.BlockEditAPI; -import me.youhavetrouble.blockedit.commands.arguments.BlockDataArgument; -import me.youhavetrouble.blockedit.commands.arguments.InvalidDataException; -import me.youhavetrouble.blockedit.commands.arguments.InvalidMaterialException; -import me.youhavetrouble.blockedit.operations.ReplaceOperation; -import me.youhavetrouble.blockedit.util.Selection; -import net.kyori.adventure.text.Component; -import org.bukkit.Material; -import org.bukkit.block.data.BlockData; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.bukkit.util.StringUtil; -import org.jetbrains.annotations.NotNull; - -import java.util.ArrayList; -import java.util.List; - -public class ReplaceCommand extends Command { - - public ReplaceCommand() { - super("replace"); - setPermission("blockedit.command.replace"); - } - - @Override - public @NotNull List tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) { - if (args.length == 1 || args.length == 2) { - ArrayList suggestions = new ArrayList<>(); - for (Material material : Material.values()) { - if (material.isBlock()) suggestions.add(material.name().toLowerCase()); - } - return StringUtil.copyPartialMatches(args[args.length-1], suggestions, new ArrayList<>()); - } - return new ArrayList<>(); - } - - @Override - public boolean execute(@NotNull CommandSender commandSender, @NotNull String s, @NotNull String[] args) { - if (!(commandSender instanceof Player player)) return true; - if (args.length == 0) { - player.sendMessage(Component.text("You need to provide block type")); - return true; - } - if (args.length < 2) { - player.sendMessage(Component.text("You need to provide block type to replace")); - return true; - } - - BlockData blockData = null; - BlockData blockDataToReplaceWith = null; - - try { - blockData = BlockDataArgument.getBlockData(args[0]); - } catch (InvalidMaterialException e) { - player.sendMessage(Component.text("Provided block type does not exist")); - return true; - } catch (InvalidDataException e) { - player.sendMessage(Component.text("Provided block data is invalid")); - return true; - } - - try { - blockDataToReplaceWith = BlockDataArgument.getBlockData(args[1]); - } catch (InvalidMaterialException e) { - player.sendMessage(Component.text("Provided block type does not exist")); - return true; - } catch (InvalidDataException e) { - player.sendMessage(Component.text("Provided block data is invalid")); - return true; - } - - BEPlayer bePlayer = BEPlayer.getByPlayer(player); - Selection selection = bePlayer.getSelection(); - if (selection == null) { - player.sendMessage(Component.text("You need to select 2 points to do this")); - return true; - } - - BlockEditAPI.runOperation(selection, 1, new ReplaceOperation(blockData, blockDataToReplaceWith)); - player.sendMessage(Component.text("Replacing blocks...")); - return true; - } -} diff --git a/src/main/java/me/youhavetrouble/blockedit/commands/RotateCommand.java b/src/main/java/me/youhavetrouble/blockedit/commands/RotateCommand.java deleted file mode 100644 index 262ee7b..0000000 --- a/src/main/java/me/youhavetrouble/blockedit/commands/RotateCommand.java +++ /dev/null @@ -1,52 +0,0 @@ -package me.youhavetrouble.blockedit.commands; - -import me.youhavetrouble.blockedit.BEPlayer; -import net.kyori.adventure.text.Component; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; - -public class RotateCommand extends Command { - - public RotateCommand() { - super("rotate"); - setPermission("blockedit.command.rotate"); - } - - @Override - public boolean execute(@NotNull CommandSender sender, @NotNull String s, @NotNull String[] args) { - - if (!(sender instanceof Player player)) { - sender.sendMessage(Component.text("You need to be a player to use this command")); - return true; - } - - if (args.length == 0) { - player.sendMessage(Component.text("You need to provide an angle")); - return true; - } - - double angle; - - try { - angle = Double.parseDouble(args[0]); - } catch (NumberFormatException e) { - player.sendMessage(Component.text("Angle must be a number")); - return true; - } - - if (angle > 360 || angle < -360) { - player.sendMessage(Component.text("Angle must be between -360 and 360")); - return true; - } - - BEPlayer bePlayer = BEPlayer.getByPlayer(player); - - bePlayer.getClipboard().rotate(angle); - - player.sendMessage(Component.text("Rotated clipboard by " + angle + " degrees")); - - return false; - } -} diff --git a/src/main/java/me/youhavetrouble/blockedit/commands/SetCommand.java b/src/main/java/me/youhavetrouble/blockedit/commands/SetCommand.java deleted file mode 100644 index d88ad30..0000000 --- a/src/main/java/me/youhavetrouble/blockedit/commands/SetCommand.java +++ /dev/null @@ -1,79 +0,0 @@ -package me.youhavetrouble.blockedit.commands; - -import me.youhavetrouble.blockedit.BEPlayer; -import me.youhavetrouble.blockedit.api.BlockEditAPI; -import me.youhavetrouble.blockedit.commands.arguments.BlockDataArgument; -import me.youhavetrouble.blockedit.commands.arguments.InvalidDataException; -import me.youhavetrouble.blockedit.commands.arguments.InvalidMaterialException; -import me.youhavetrouble.blockedit.operations.SetOperation; -import me.youhavetrouble.blockedit.util.Selection; -import net.kyori.adventure.text.Component; -import org.bukkit.Material; -import org.bukkit.block.data.BlockData; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.bukkit.util.StringUtil; -import org.jetbrains.annotations.NotNull; - -import java.util.ArrayList; -import java.util.List; - -public class SetCommand extends Command { - - public SetCommand() { - super("set"); - setPermission("blockedit.command.set"); - } - - @Override - public @NotNull List tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) { - ArrayList suggestions = new ArrayList<>(); - if (args.length == 1) { - for (Material material : Material.values()) { - if (material.isBlock()) - suggestions.add(material.name().toLowerCase()); - } - return StringUtil.copyPartialMatches(args[0], suggestions, new ArrayList<>()); - } - return suggestions; - } - - - @Override - public boolean execute(@NotNull CommandSender commandSender, @NotNull String s, @NotNull String[] args) { - if (!(commandSender instanceof Player player)) return true; - - BEPlayer bePlayer = BEPlayer.getByPlayer(player); - Selection selection = bePlayer.getSelection(); - if (selection == null) { - player.sendMessage(Component.text("You need to select 2 points to do this")); - return true; - } - - if (args.length != 1) { - return false; - } - - BlockData blockData; - try { - blockData = BlockDataArgument.getBlockData(args[0]); - } catch (InvalidMaterialException e) { - player.sendMessage(Component.text("Provided block type does not exist")); - return true; - } catch (InvalidDataException e) { - player.sendMessage(Component.text("Provided block data is invalid")); - return true; - } - - BlockEditAPI.runOperation(selection, 1, new SetOperation(blockData)); - player.sendMessage(Component.text("Setting blocks...")); - return true; - } - - @Override - public @NotNull String getUsage() { - return "/set "; - } - -}