diff --git a/leaves-server/src/main/java/org/leavesmc/leaves/command/LiteralNode.java b/leaves-server/src/main/java/org/leavesmc/leaves/command/LiteralNode.java index 96d80637..57f8fd9d 100644 --- a/leaves-server/src/main/java/org/leavesmc/leaves/command/LiteralNode.java +++ b/leaves-server/src/main/java/org/leavesmc/leaves/command/LiteralNode.java @@ -1,11 +1,8 @@ package org.leavesmc.leaves.command; -import com.mojang.brigadier.CommandDispatcher; import com.mojang.brigadier.builder.ArgumentBuilder; -import com.mojang.brigadier.builder.LiteralArgumentBuilder; import net.minecraft.commands.CommandSourceStack; import net.minecraft.commands.Commands; -import net.minecraft.server.MinecraftServer; public class LiteralNode extends CommandNode { @@ -17,19 +14,4 @@ public class LiteralNode extends CommandNode { protected ArgumentBuilder compileBase() { return Commands.literal(name); } - - @SuppressWarnings("unchecked") - public void register() { - MinecraftServer.getServer() - .getCommands() - .getDispatcher() - .register((LiteralArgumentBuilder) compile()); - } - - public void unregister() { - CommandDispatcher dispatcher = MinecraftServer.getServer() - .getCommands() - .getDispatcher(); - dispatcher.getRoot().removeCommand(name); - } } diff --git a/leaves-server/src/main/java/org/leavesmc/leaves/command/RootNode.java b/leaves-server/src/main/java/org/leavesmc/leaves/command/RootNode.java new file mode 100644 index 00000000..5066ce25 --- /dev/null +++ b/leaves-server/src/main/java/org/leavesmc/leaves/command/RootNode.java @@ -0,0 +1,50 @@ +package org.leavesmc.leaves.command; + +import com.mojang.brigadier.CommandDispatcher; +import com.mojang.brigadier.builder.ArgumentBuilder; +import com.mojang.brigadier.builder.LiteralArgumentBuilder; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.server.MinecraftServer; +import org.bukkit.command.CommandSender; +import org.jetbrains.annotations.NotNull; + +import static org.leavesmc.leaves.command.CommandUtils.registerPermissions; + +public abstract class RootNode extends LiteralNode { + private final String permissionBase; + + public RootNode(String name, String permissionBase) { + super(name); + this.permissionBase = permissionBase; + } + + @Override + protected ArgumentBuilder compile() { + registerPermissions(permissionBase, this.children); + return super.compile(); + } + + protected static boolean hasPermission(@NotNull CommandSender sender, String subcommand, String permissionBase) { + return sender.hasPermission(permissionBase) || sender.hasPermission(permissionBase + "." + subcommand); + } + + @Override + public boolean requires(@NotNull CommandSourceStack source) { + return children.stream().anyMatch(child -> child.requires(source)); + } + + @SuppressWarnings("unchecked") + public void register() { + MinecraftServer.getServer() + .getCommands() + .getDispatcher() + .register((LiteralArgumentBuilder) compile()); + } + + public void unregister() { + CommandDispatcher dispatcher = MinecraftServer.getServer() + .getCommands() + .getDispatcher(); + dispatcher.getRoot().removeCommand(name); + } +} diff --git a/leaves-server/src/main/java/org/leavesmc/leaves/command/bot/BotCommand.java b/leaves-server/src/main/java/org/leavesmc/leaves/command/bot/BotCommand.java index c4f846c6..d187e864 100644 --- a/leaves-server/src/main/java/org/leavesmc/leaves/command/bot/BotCommand.java +++ b/leaves-server/src/main/java/org/leavesmc/leaves/command/bot/BotCommand.java @@ -4,7 +4,7 @@ import com.mojang.brigadier.builder.ArgumentBuilder; import net.minecraft.commands.CommandSourceStack; import org.bukkit.command.CommandSender; import org.jetbrains.annotations.NotNull; -import org.leavesmc.leaves.command.LiteralNode; +import org.leavesmc.leaves.command.RootNode; import org.leavesmc.leaves.command.bot.subcommands.ActionCommand; import org.leavesmc.leaves.command.bot.subcommands.ConfigCommand; import org.leavesmc.leaves.command.bot.subcommands.CreateCommand; @@ -15,12 +15,12 @@ import org.leavesmc.leaves.command.bot.subcommands.SaveCommand; import static org.leavesmc.leaves.command.CommandUtils.registerPermissions; -public class BotCommand extends LiteralNode { +public class BotCommand extends RootNode { public static final BotCommand INSTANCE = new BotCommand(); private static final String PERM_BASE = "bukkit.command.bot"; private BotCommand() { - super("bot"); + super("bot", PERM_BASE); this.children( ListCommand::new, ConfigCommand::new, @@ -38,11 +38,6 @@ public class BotCommand extends LiteralNode { return super.compile(); } - @Override - public boolean requires(@NotNull CommandSourceStack source) { - return children.stream().anyMatch(child -> child.requires(source)); - } - public static boolean hasPermission(@NotNull CommandSender sender) { return sender.hasPermission(PERM_BASE); } diff --git a/leaves-server/src/main/java/org/leavesmc/leaves/command/leaves/LeavesCommand.java b/leaves-server/src/main/java/org/leavesmc/leaves/command/leaves/LeavesCommand.java index 368778ab..e3ee08b6 100644 --- a/leaves-server/src/main/java/org/leavesmc/leaves/command/leaves/LeavesCommand.java +++ b/leaves-server/src/main/java/org/leavesmc/leaves/command/leaves/LeavesCommand.java @@ -1,10 +1,8 @@ package org.leavesmc.leaves.command.leaves; -import com.mojang.brigadier.builder.ArgumentBuilder; -import net.minecraft.commands.CommandSourceStack; import org.bukkit.command.CommandSender; import org.jetbrains.annotations.NotNull; -import org.leavesmc.leaves.command.LiteralNode; +import org.leavesmc.leaves.command.RootNode; import org.leavesmc.leaves.command.leaves.subcommands.BlockUpdateCommand; import org.leavesmc.leaves.command.leaves.subcommands.ConfigCommand; import org.leavesmc.leaves.command.leaves.subcommands.CounterCommand; @@ -12,14 +10,12 @@ import org.leavesmc.leaves.command.leaves.subcommands.ReloadCommand; import org.leavesmc.leaves.command.leaves.subcommands.ReportCommand; import org.leavesmc.leaves.command.leaves.subcommands.UpdateCommand; -import static org.leavesmc.leaves.command.CommandUtils.registerPermissions; - -public class LeavesCommand extends LiteralNode { +public class LeavesCommand extends RootNode { public static final LeavesCommand INSTANCE = new LeavesCommand(); private static final String PERM_BASE = "bukkit.command.leaves"; private LeavesCommand() { - super("leaves"); + super("leaves", PERM_BASE); children( BlockUpdateCommand::new, ConfigCommand::new, @@ -30,17 +26,6 @@ public class LeavesCommand extends LiteralNode { ); } - @Override - protected ArgumentBuilder compile() { - registerPermissions(PERM_BASE, this.children); - return super.compile(); - } - - @Override - public boolean requires(@NotNull CommandSourceStack source) { - return children.stream().anyMatch(child -> child.requires(source)); - } - public static boolean hasPermission(@NotNull CommandSender sender, String subcommand) { return sender.hasPermission(PERM_BASE) || sender.hasPermission(PERM_BASE + "." + subcommand); }