Clean up some Bukkit code
This commit is contained in:
parent
62abfa5e95
commit
a8d3fa7c5e
7 changed files with 82 additions and 6 deletions
|
|
@ -31,7 +31,7 @@ import org.bukkit.plugin.Plugin;
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
import java.util.List;
|
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 CommandComponent<BukkitCommandSender, ?> command;
|
||||||
private final BukkitCommandManager bukkitCommandManager;
|
private final BukkitCommandManager bukkitCommandManager;
|
||||||
|
|
|
||||||
|
|
@ -29,10 +29,21 @@ import org.bukkit.plugin.Plugin;
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
import java.util.function.Function;
|
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> {
|
public class BukkitCommandManager extends CommandManager<BukkitCommandSender> {
|
||||||
|
|
||||||
private final Plugin owningPlugin;
|
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,
|
public BukkitCommandManager(@Nonnull final Plugin owningPlugin,
|
||||||
@Nonnull final Function<CommandTree<BukkitCommandSender>,
|
@Nonnull final Function<CommandTree<BukkitCommandSender>,
|
||||||
CommandExecutionCoordinator<BukkitCommandSender>> commandExecutionCoordinator)
|
CommandExecutionCoordinator<BukkitCommandSender>> commandExecutionCoordinator)
|
||||||
|
|
@ -42,6 +53,11 @@ public class BukkitCommandManager extends CommandManager<BukkitCommandSender> {
|
||||||
this.owningPlugin = owningPlugin;
|
this.owningPlugin = owningPlugin;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the plugin that owns the manager
|
||||||
|
*
|
||||||
|
* @return Owning plugin
|
||||||
|
*/
|
||||||
@Nonnull
|
@Nonnull
|
||||||
public Plugin getOwningPlugin() {
|
public Plugin getOwningPlugin() {
|
||||||
return this.owningPlugin;
|
return this.owningPlugin;
|
||||||
|
|
|
||||||
|
|
@ -29,6 +29,10 @@ import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Command sender that proxies {@link org.bukkit.command.CommandSender}
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
public abstract class BukkitCommandSender implements CommandSender {
|
public abstract class BukkitCommandSender implements CommandSender {
|
||||||
|
|
||||||
private final org.bukkit.command.CommandSender internalSender;
|
private final org.bukkit.command.CommandSender internalSender;
|
||||||
|
|
@ -37,16 +41,33 @@ public abstract class BukkitCommandSender implements CommandSender {
|
||||||
this.internalSender = internalSender;
|
this.internalSender = internalSender;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Construct a new {@link BukkitCommandSender} for a {@link Player}
|
||||||
|
*
|
||||||
|
* @param player Player instance
|
||||||
|
* @return Constructed command sender
|
||||||
|
*/
|
||||||
@Nonnull
|
@Nonnull
|
||||||
public static BukkitCommandSender player(@Nonnull final Player player) {
|
public static BukkitCommandSender player(@Nonnull final Player player) {
|
||||||
return new BukkitPlayerSender(player);
|
return new BukkitPlayerSender(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Construct a new {@link BukkitCommandSender} for the Bukkit console
|
||||||
|
*
|
||||||
|
* @return Constructed command sender
|
||||||
|
*/
|
||||||
@Nonnull
|
@Nonnull
|
||||||
public static BukkitCommandSender console() {
|
public static BukkitCommandSender console() {
|
||||||
return new BukkitConsoleSender();
|
return new BukkitConsoleSender();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Construct a new {@link BukkitCommandSender} from a Bukkit {@link CommandSender}
|
||||||
|
*
|
||||||
|
* @param sender Bukkit command sender
|
||||||
|
* @return Constructed command sender
|
||||||
|
*/
|
||||||
@Nonnull
|
@Nonnull
|
||||||
public static BukkitCommandSender of(@Nonnull final org.bukkit.command.CommandSender sender) {
|
public static BukkitCommandSender of(@Nonnull final org.bukkit.command.CommandSender sender) {
|
||||||
if (sender instanceof Player) {
|
if (sender instanceof Player) {
|
||||||
|
|
@ -72,13 +93,29 @@ public abstract class BukkitCommandSender implements CommandSender {
|
||||||
return Objects.hashCode(internalSender);
|
return Objects.hashCode(internalSender);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the proxied {@link org.bukkit.command.CommandSender}
|
||||||
|
*
|
||||||
|
* @return Proxied command sneder
|
||||||
|
*/
|
||||||
@Nonnull
|
@Nonnull
|
||||||
public org.bukkit.command.CommandSender getInternalSender() {
|
public org.bukkit.command.CommandSender getInternalSender() {
|
||||||
return this.internalSender;
|
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();
|
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
|
@Nonnull
|
||||||
public abstract Player asPlayer();
|
public abstract Player asPlayer();
|
||||||
|
|
||||||
|
|
@ -86,4 +123,14 @@ public abstract class BukkitCommandSender implements CommandSender {
|
||||||
public boolean hasPermission(@Nonnull final String permission) {
|
public boolean hasPermission(@Nonnull final String permission) {
|
||||||
return this.internalSender.hasPermission(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);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
|
|
||||||
public class BukkitConsoleSender extends BukkitCommandSender {
|
final class BukkitConsoleSender extends BukkitCommandSender {
|
||||||
|
|
||||||
BukkitConsoleSender() {
|
BukkitConsoleSender() {
|
||||||
super(Bukkit.getConsoleSender());
|
super(Bukkit.getConsoleSender());
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
|
|
||||||
public class BukkitPlayerSender extends BukkitCommandSender {
|
final class BukkitPlayerSender extends BukkitCommandSender {
|
||||||
|
|
||||||
BukkitPlayerSender(@Nonnull final Player player) {
|
BukkitPlayerSender(@Nonnull final Player player) {
|
||||||
super(player);
|
super(player);
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@ import java.lang.reflect.Method;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
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<>();
|
private final Map<CommandComponent<?, ?>, org.bukkit.command.Command> registeredCommands = new HashMap<>();
|
||||||
|
|
||||||
|
|
@ -71,8 +71,10 @@ public class BukkitPluginRegistrationHandler implements CommandRegistrationHandl
|
||||||
} else {
|
} else {
|
||||||
label = commandComponent.getName();
|
label = commandComponent.getName();
|
||||||
}
|
}
|
||||||
this.bukkitCommands.put(label, new BukkitCommand((CommandComponent<BukkitCommandSender, ?>) commandComponent,
|
final BukkitCommand bukkitCommand = new BukkitCommand((CommandComponent<BukkitCommandSender, ?>) commandComponent,
|
||||||
this.bukkitCommandManager));
|
this.bukkitCommandManager);
|
||||||
|
this.bukkitCommands.put(label, bukkitCommand);
|
||||||
|
this.registeredCommands.put(commandComponent, bukkitCommand);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -136,4 +136,15 @@ public abstract class CommandManager<C extends CommandSender> {
|
||||||
return this.commandRegistrationHandler;
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue