Fix bug with manager not being set on RC

This commit is contained in:
Aikar
2017-04-21 01:12:00 -04:00
parent 08dc4a444d
commit 6fb261dc4c
3 changed files with 12 additions and 6 deletions
@@ -32,13 +32,10 @@ import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import com.google.common.collect.SetMultimap;
import jdk.nashorn.internal.runtime.Timing;
import org.apache.commons.lang.StringUtils;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.InvalidConfigurationException;
import org.bukkit.plugin.Plugin;
import org.bukkit.util.StringUtil;
import java.lang.reflect.Method;
@@ -72,8 +69,13 @@ public abstract class BaseCommand extends Command {
public BaseCommand(String cmd) {
super(cmd);
}
public void onRegister(CommandManager manager) {
this.manager = manager;
final Class<? extends BaseCommand> self = this.getClass();
CommandAlias rootCmdAlias = self.getAnnotation(CommandAlias.class);
String cmd = this.getName();
if (cmd == null) {
if (rootCmdAlias == null) {
cmd = "__" + self.getSimpleName();
@@ -132,7 +134,7 @@ public abstract class BaseCommand extends Command {
Collections.addAll(cmdList, CommandPatterns.PIPE.split(rootCmdAlias.value().toLowerCase()));
cmdList.remove(cmd);
for (String cmdAlias : cmdList) {
register(cmdAlias, new ForwardingCommand(this));
register(cmdAlias, new ForwardingCommand(this));
}
}
@@ -64,9 +64,9 @@ public class BukkitCommandManager implements CommandManager {
@Override
public boolean registerCommand(BaseCommand command) {
command.manager = this;
final String plugin = this.plugin.getName().toLowerCase();
final CommandMap commandMap = Bukkit.getServer().getCommandMap();
command.onRegister(this);
boolean allSuccess = true;
for (Map.Entry<String, Command> entry : command.registeredCommands.entrySet()) {
if (!commandMap.register(entry.getKey().toLowerCase(), plugin, entry.getValue())) {
@@ -75,14 +75,18 @@ public class RegisteredCommand {
this.parameters = method.getParameters();
this.resolvers = new ContextResolver[this.parameters.length];
final Syntax syntaxStr = method.getAnnotation(Syntax.class);
final CommandManager manager = scope.manager;
final CommandContexts commandContexts = manager.getCommandContexts();
int nonSenderAwareResolvers = 0;
int optionalResolvers = 0;
StringBuilder syntaxB = new StringBuilder(64);
for (int i = 0; i < parameters.length; i++) {
final Parameter parameter = parameters[i];
final Class<?> type = parameter.getType();
final ContextResolver<?> resolver = scope.manager.getCommandContexts().getResolver(type);
final ContextResolver<?> resolver = commandContexts.getResolver(type);
if (resolver != null) {
resolvers[i] = resolver;