001package com.mrivanplays.commandworker.bukkit.internal; 002 003import com.mojang.brigadier.exceptions.CommandSyntaxException; 004import com.mrivanplays.commandworker.core.LiteralNode; 005import com.mrivanplays.commandworker.core.RegisteredCommand; 006import com.mrivanplays.commandworker.core.argument.Argument; 007import com.mrivanplays.commandworker.core.argument.parser.ArgumentHolder; 008import java.util.Arrays; 009import java.util.List; 010import org.bukkit.ChatColor; 011import org.bukkit.command.CommandSender; 012 013public class BukkitBridgeCommand extends org.bukkit.command.Command { 014 015 private final RegisteredCommand<CommandSender> command; 016 017 public BukkitBridgeCommand(RegisteredCommand<CommandSender> command, String[] aliases) { 018 super( 019 aliases[0], 020 "", 021 command.getCommandStructure().buildUsage(aliases[0]), 022 Arrays.asList(Arrays.copyOfRange(aliases, 1, aliases.length))); 023 this.command = command; 024 } 025 026 @Override 027 public boolean testPermissionSilent(CommandSender sender) { 028 return command.hasPermission(sender); 029 } 030 031 @Override 032 public boolean execute(CommandSender sender, String commandLabel, String[] args) { 033 LiteralNode structure = command.getCommandStructure(); 034 ArgumentHolder holder = new ArgumentHolder(String.join(" ", args), structure); 035 if (args.length == 0 && structure.shouldExecuteCommand()) { 036 return executeCommand(sender, commandLabel, holder); 037 } else if (args.length == 0) { 038 sender.sendMessage( 039 ChatColor.RED 040 + CommandSyntaxException.BUILT_IN_EXCEPTIONS 041 .dispatcherUnknownCommand() 042 .create() 043 .getMessage()); 044 return true; 045 } 046 Argument argument = holder.getLastArgument(); 047 if (argument.shouldExecuteCommand()) { 048 return executeCommand(sender, commandLabel, holder); 049 } else { 050 sender.sendMessage( 051 ChatColor.RED 052 + CommandSyntaxException.BUILT_IN_EXCEPTIONS 053 .dispatcherUnknownCommand() 054 .create() 055 .getMessage()); 056 return true; 057 } 058 } 059 060 private boolean executeCommand(CommandSender sender, String label, ArgumentHolder args) { 061 try { 062 return command.getCommand().execute(sender, label, args); 063 } catch (CommandSyntaxException e) { 064 sender.sendMessage(ChatColor.RED + e.getMessage()); 065 return true; 066 } 067 } 068 069 @Override 070 public List<String> tabComplete(CommandSender sender, String alias, String[] args) 071 throws IllegalArgumentException { 072 return command.getCommandStructure().completeToStringList(args); 073 } 074}