Clean up some Bukkit code

This commit is contained in:
Alexander Söderberg 2020-09-07 12:12:56 +02:00
parent 62abfa5e95
commit a8d3fa7c5e
No known key found for this signature in database
GPG key ID: C0207FF7EA146678
7 changed files with 82 additions and 6 deletions

View file

@ -31,7 +31,7 @@ import org.bukkit.plugin.Plugin;
import javax.annotation.Nonnull;
import java.util.List;
public class BukkitCommand extends org.bukkit.command.Command implements PluginIdentifiableCommand {
final class BukkitCommand extends org.bukkit.command.Command implements PluginIdentifiableCommand {
private final CommandComponent<BukkitCommandSender, ?> command;
private final BukkitCommandManager bukkitCommandManager;

View file

@ -29,10 +29,21 @@ import org.bukkit.plugin.Plugin;
import javax.annotation.Nonnull;
import java.util.function.Function;
/**
* Command manager for the Bukkit platform, using {@link BukkitCommandSender} as the
* command sender type
*/
public class BukkitCommandManager extends CommandManager<BukkitCommandSender> {
private final Plugin owningPlugin;
/**
* Construct a new Bukkit command manager
*
* @param owningPlugin Plugin that is constructing the manager
* @param commandExecutionCoordinator Coordinator provider
* @throws Exception If the construction of the manager fails
*/
public BukkitCommandManager(@Nonnull final Plugin owningPlugin,
@Nonnull final Function<CommandTree<BukkitCommandSender>,
CommandExecutionCoordinator<BukkitCommandSender>> commandExecutionCoordinator)
@ -42,6 +53,11 @@ public class BukkitCommandManager extends CommandManager<BukkitCommandSender> {
this.owningPlugin = owningPlugin;
}
/**
* Get the plugin that owns the manager
*
* @return Owning plugin
*/
@Nonnull
public Plugin getOwningPlugin() {
return this.owningPlugin;

View file

@ -29,6 +29,10 @@ import org.bukkit.entity.Player;
import javax.annotation.Nonnull;
/**
* Command sender that proxies {@link org.bukkit.command.CommandSender}
* {@inheritDoc}
*/
public abstract class BukkitCommandSender implements CommandSender {
private final org.bukkit.command.CommandSender internalSender;
@ -37,16 +41,33 @@ public abstract class BukkitCommandSender implements CommandSender {
this.internalSender = internalSender;
}
/**
* Construct a new {@link BukkitCommandSender} for a {@link Player}
*
* @param player Player instance
* @return Constructed command sender
*/
@Nonnull
public static BukkitCommandSender player(@Nonnull final Player player) {
return new BukkitPlayerSender(player);
}
/**
* Construct a new {@link BukkitCommandSender} for the Bukkit console
*
* @return Constructed command sender
*/
@Nonnull
public static BukkitCommandSender console() {
return new BukkitConsoleSender();
}
/**
* Construct a new {@link BukkitCommandSender} from a Bukkit {@link CommandSender}
*
* @param sender Bukkit command sender
* @return Constructed command sender
*/
@Nonnull
public static BukkitCommandSender of(@Nonnull final org.bukkit.command.CommandSender sender) {
if (sender instanceof Player) {
@ -72,13 +93,29 @@ public abstract class BukkitCommandSender implements CommandSender {
return Objects.hashCode(internalSender);
}
/**
* Get the proxied {@link org.bukkit.command.CommandSender}
*
* @return Proxied command sneder
*/
@Nonnull
public org.bukkit.command.CommandSender getInternalSender() {
return this.internalSender;
}
/**
* Check if this sender represents a player
*
* @return {@code true} if this sender represents a player, {@code false} if not
*/
public abstract boolean isPlayer();
/**
* Get this sender as a player. This can only safely be done if {@link #isPlayer()}}
* returns {@code true}
*
* @return Player object
*/
@Nonnull
public abstract Player asPlayer();
@ -86,4 +123,14 @@ public abstract class BukkitCommandSender implements CommandSender {
public boolean hasPermission(@Nonnull final String permission) {
return this.internalSender.hasPermission(permission);
}
/**
* Send a message to the command sender
*
* @param message Message to send
*/
public void sendMessage(@Nonnull final String message) {
this.internalSender.sendMessage(message);
}
}

View file

@ -28,7 +28,7 @@ import org.bukkit.entity.Player;
import javax.annotation.Nonnull;
public class BukkitConsoleSender extends BukkitCommandSender {
final class BukkitConsoleSender extends BukkitCommandSender {
BukkitConsoleSender() {
super(Bukkit.getConsoleSender());

View file

@ -27,7 +27,7 @@ import org.bukkit.entity.Player;
import javax.annotation.Nonnull;
public class BukkitPlayerSender extends BukkitCommandSender {
final class BukkitPlayerSender extends BukkitCommandSender {
BukkitPlayerSender(@Nonnull final Player player) {
super(player);

View file

@ -35,7 +35,7 @@ import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
public class BukkitPluginRegistrationHandler implements CommandRegistrationHandler {
final class BukkitPluginRegistrationHandler implements CommandRegistrationHandler {
private final Map<CommandComponent<?, ?>, org.bukkit.command.Command> registeredCommands = new HashMap<>();
@ -71,8 +71,10 @@ public class BukkitPluginRegistrationHandler implements CommandRegistrationHandl
} else {
label = commandComponent.getName();
}
this.bukkitCommands.put(label, new BukkitCommand((CommandComponent<BukkitCommandSender, ?>) commandComponent,
this.bukkitCommandManager));
final BukkitCommand bukkitCommand = new BukkitCommand((CommandComponent<BukkitCommandSender, ?>) commandComponent,
this.bukkitCommandManager);
this.bukkitCommands.put(label, bukkitCommand);
this.registeredCommands.put(commandComponent, bukkitCommand);
return true;
}

View file

@ -136,4 +136,15 @@ public abstract class CommandManager<C extends CommandSender> {
return this.commandRegistrationHandler;
}
/**
* Create a new command builder
*
* @param name Command name
* @return Builder instance
*/
@Nonnull
public Command.Builder<C> commandBuilder(@Nonnull final String name) {
return Command.newBuilder(name);
}
}