Add SWCommand.unregister
Dieser Commit ist enthalten in:
Ursprung
35758f1000
Commit
50b039e6dc
@ -33,9 +33,9 @@ import java.util.logging.Level;
|
|||||||
|
|
||||||
public abstract class SWCommand {
|
public abstract class SWCommand {
|
||||||
|
|
||||||
private boolean enabled = true;
|
private final Command command;
|
||||||
private final Set<SubCommand> commandSet = new HashSet<>();
|
private final LinkedList<SubCommand> commandSet = new LinkedList<>();
|
||||||
private final Set<SubCommand> commandHelpSet = new HashSet<>();
|
private final LinkedList<SubCommand> commandHelpSet = new LinkedList<>();
|
||||||
private final Map<String, TypeMapper<?>> localTypeMapper = new HashMap<>();
|
private final Map<String, TypeMapper<?>> localTypeMapper = new HashMap<>();
|
||||||
|
|
||||||
protected SWCommand(String command) {
|
protected SWCommand(String command) {
|
||||||
@ -43,10 +43,9 @@ public abstract class SWCommand {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected SWCommand(String command, String... aliases) {
|
protected SWCommand(String command, String... aliases) {
|
||||||
SWCommandUtils.commandMap.register("steamwar", new Command(command, "", "/" + command, Arrays.asList(aliases)) {
|
this.command = new Command(command, "", "/" + command, Arrays.asList(aliases)) {
|
||||||
@Override
|
@Override
|
||||||
public boolean execute(CommandSender sender, String alias, String[] args) {
|
public boolean execute(CommandSender sender, String alias, String[] args) {
|
||||||
if (!enabled) return false;
|
|
||||||
for (SubCommand subCommand : commandSet) {
|
for (SubCommand subCommand : commandSet) {
|
||||||
if (subCommand.invoke(sender, args)) {
|
if (subCommand.invoke(sender, args)) {
|
||||||
return false;
|
return false;
|
||||||
@ -62,7 +61,6 @@ public abstract class SWCommand {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<String> tabComplete(CommandSender sender, String alias, String[] args) throws IllegalArgumentException {
|
public List<String> tabComplete(CommandSender sender, String alias, String[] args) throws IllegalArgumentException {
|
||||||
if (!enabled) return Collections.emptyList();
|
|
||||||
List<String> strings = new ArrayList<>();
|
List<String> strings = new ArrayList<>();
|
||||||
for (SubCommand subCommand : commandSet) {
|
for (SubCommand subCommand : commandSet) {
|
||||||
List<String> tabCompletes = subCommand.tabComplete(sender, args);
|
List<String> tabCompletes = subCommand.tabComplete(sender, args);
|
||||||
@ -78,7 +76,8 @@ public abstract class SWCommand {
|
|||||||
}
|
}
|
||||||
return strings;
|
return strings;
|
||||||
}
|
}
|
||||||
});
|
};
|
||||||
|
SWCommandUtils.commandMap.register("steamwar", this.command);
|
||||||
|
|
||||||
for (Method method : getClass().getDeclaredMethods()) {
|
for (Method method : getClass().getDeclaredMethods()) {
|
||||||
addMapper(Mapper.class, method, i -> i == 0, false, TypeMapper.class, (anno, typeMapper) -> {
|
addMapper(Mapper.class, method, i -> i == 0, false, TypeMapper.class, (anno, typeMapper) -> {
|
||||||
@ -103,7 +102,7 @@ public abstract class SWCommand {
|
|||||||
Bukkit.getLogger().log(Level.WARNING, "The method '" + method.toString() + "' is lacking the varArgs parameters of type '" + String.class.getTypeName() + "' as last Argument");
|
Bukkit.getLogger().log(Level.WARNING, "The method '" + method.toString() + "' is lacking the varArgs parameters of type '" + String.class.getTypeName() + "' as last Argument");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
commandHelpSet.add(new SubCommand(this, method, anno.value()));
|
commandHelpSet.addLast(new SubCommand(this, method, anno.value()));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
for (Method method : getClass().getDeclaredMethods()) {
|
for (Method method : getClass().getDeclaredMethods()) {
|
||||||
@ -130,7 +129,7 @@ public abstract class SWCommand {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
commandSet.add(new SubCommand(this, method, anno.value()));
|
commandSet.addLast(new SubCommand(this, method, anno.value()));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -169,12 +168,12 @@ public abstract class SWCommand {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean isEnabled() {
|
protected void unregister() {
|
||||||
return enabled;
|
SWCommandUtils.knownCommandMap.remove(command.getName());
|
||||||
}
|
for (String alias : command.getAliases()) {
|
||||||
|
SWCommandUtils.knownCommandMap.remove(alias);
|
||||||
protected void setEnabled(boolean enabled) {
|
}
|
||||||
this.enabled = enabled;
|
command.unregister(SWCommandUtils.commandMap);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Retention(RetentionPolicy.RUNTIME)
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
@ -21,6 +21,7 @@ package de.steamwar.command;
|
|||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.GameMode;
|
import org.bukkit.GameMode;
|
||||||
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandMap;
|
import org.bukkit.command.CommandMap;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
@ -77,6 +78,7 @@ public class SWCommandUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static final CommandMap commandMap;
|
static final CommandMap commandMap;
|
||||||
|
static final Map<String, Command> knownCommandMap;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
try {
|
try {
|
||||||
@ -87,6 +89,14 @@ public class SWCommandUtils {
|
|||||||
Bukkit.shutdown();
|
Bukkit.shutdown();
|
||||||
throw new SecurityException("Oh shit. Commands cannot be registered.", exception);
|
throw new SecurityException("Oh shit. Commands cannot be registered.", exception);
|
||||||
}
|
}
|
||||||
|
try {
|
||||||
|
final Field knownCommandsField = commandMap.getClass().getDeclaredField("knownCommands");
|
||||||
|
knownCommandsField.setAccessible(true);
|
||||||
|
knownCommandMap = (Map<String, Command>) knownCommandsField.get(commandMap);
|
||||||
|
} catch (NoSuchFieldException | IllegalAccessException exception) {
|
||||||
|
Bukkit.shutdown();
|
||||||
|
throw new SecurityException("Oh shit. Commands cannot be registered.", exception);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static Object[] generateArgumentArray(TypeMapper<?>[] parameters, String[] args, boolean varArgs, String[] subCommand) {
|
static Object[] generateArgumentArray(TypeMapper<?>[] parameters, String[] args, boolean varArgs, String[] subCommand) {
|
||||||
|
In neuem Issue referenzieren
Einen Benutzer sperren