Optimize SWCommand
Optimize SubCommand
Dieser Commit ist enthalten in:
Ursprung
5bd160b0c9
Commit
ccb63e1613
@ -76,7 +76,6 @@ public abstract class SWCommand {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
Set<Method> commandMethods = new HashSet<>();
|
|
||||||
for (Method method : getClass().getDeclaredMethods()) {
|
for (Method method : getClass().getDeclaredMethods()) {
|
||||||
add(Mapper.class, method, i -> i != 0, false, TypeMapper.class, (anno, parameters) -> {
|
add(Mapper.class, method, i -> i != 0, false, TypeMapper.class, (anno, parameters) -> {
|
||||||
try {
|
try {
|
||||||
@ -87,6 +86,11 @@ public abstract class SWCommand {
|
|||||||
throw new SecurityException(e.getMessage(), e);
|
throw new SecurityException(e.getMessage(), e);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
add(RegisterHelp.class, method, i -> i != 1, true, null, (anno, parameters) -> {
|
||||||
|
commandHelpSet.add(new SubCommand(this, method, anno.value()));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
for (Method method : getClass().getDeclaredMethods()) {
|
||||||
add(Register.class, method, i -> i == 0, true, null, (anno, parameters) -> {
|
add(Register.class, method, i -> i == 0, true, null, (anno, parameters) -> {
|
||||||
for (int i = 1; i < parameters.length; i++) {
|
for (int i = 1; i < parameters.length; i++) {
|
||||||
Parameter parameter = parameters[i];
|
Parameter parameter = parameters[i];
|
||||||
@ -104,13 +108,9 @@ public abstract class SWCommand {
|
|||||||
}
|
}
|
||||||
if (!SWCommandUtils.MAPPER_FUNCTIONS.containsKey(name)) return;
|
if (!SWCommandUtils.MAPPER_FUNCTIONS.containsKey(name)) return;
|
||||||
}
|
}
|
||||||
commandMethods.add(method);
|
commandSet.add(new SubCommand(this, method, anno.value()));
|
||||||
});
|
|
||||||
add(RegisterHelp.class, method, i -> i != 1, true, null, (anno, parameters) -> {
|
|
||||||
commandHelpSet.add(new SubCommand(this, method));
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
commandMethods.forEach(method -> commandSet.add(new SubCommand(this, method)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private <T extends Annotation> void add(Class<T> annotation, Method method, IntPredicate parameterTester, boolean firstParameter, Class<?> returnType, BiConsumer<T, Parameter[]> consumer) {
|
private <T extends Annotation> void add(Class<T> annotation, Method method, IntPredicate parameterTester, boolean firstParameter, Class<?> returnType, BiConsumer<T, Parameter[]> consumer) {
|
||||||
|
@ -39,21 +39,13 @@ class SubCommand {
|
|||||||
private boolean varArgs = false;
|
private boolean varArgs = false;
|
||||||
private Function<CommandSender, ?> commandSenderFunction;
|
private Function<CommandSender, ?> commandSenderFunction;
|
||||||
|
|
||||||
public SubCommand(SWCommand swCommand, Method method) {
|
public SubCommand(SWCommand swCommand, Method method, String[] subCommand) {
|
||||||
this.swCommand = swCommand;
|
this.swCommand = swCommand;
|
||||||
this.method = method;
|
this.method = method;
|
||||||
|
|
||||||
Parameter[] parameters = method.getParameters();
|
Parameter[] parameters = method.getParameters();
|
||||||
commandSenderFunction = sender -> parameters[0].getType().cast(sender);
|
commandSenderFunction = sender -> parameters[0].getType().cast(sender);
|
||||||
SWCommand.Register register = SWCommandUtils.getAnnotation(method, SWCommand.Register.class);
|
this.subCommand = subCommand;
|
||||||
SWCommand.RegisterHelp registerHelp = SWCommandUtils.getAnnotation(method, SWCommand.RegisterHelp.class);
|
|
||||||
if (register != null) {
|
|
||||||
subCommand = register.value();
|
|
||||||
} else if (registerHelp != null) {
|
|
||||||
subCommand = registerHelp.value();
|
|
||||||
} else {
|
|
||||||
throw new SecurityException();
|
|
||||||
}
|
|
||||||
|
|
||||||
arguments = new TypeMapper[parameters.length - 1];
|
arguments = new TypeMapper[parameters.length - 1];
|
||||||
for (int i = 1; i < parameters.length; i++) {
|
for (int i = 1; i < parameters.length; i++) {
|
||||||
@ -71,17 +63,7 @@ class SubCommand {
|
|||||||
for (Enum<?> enumConstant : enumClass.getEnumConstants()) {
|
for (Enum<?> enumConstant : enumClass.getEnumConstants()) {
|
||||||
tabCompletes.add(enumConstant.name().toLowerCase());
|
tabCompletes.add(enumConstant.name().toLowerCase());
|
||||||
}
|
}
|
||||||
arguments[i] = new TypeMapper<Object>() {
|
arguments[i] = SWCommandUtils.createMapper(s -> SWCommandUtils.ENUM_MAPPER.apply(enumClass, s), s -> tabCompletes);
|
||||||
@Override
|
|
||||||
public Object map(String s) {
|
|
||||||
return SWCommandUtils.ENUM_MAPPER.apply(enumClass, s);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<String> tabCompletes(String s) {
|
|
||||||
return tabCompletes;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -112,6 +94,9 @@ class SubCommand {
|
|||||||
}
|
}
|
||||||
|
|
||||||
List<String> tabComplete(CommandSender commandSender, String[] args) {
|
List<String> tabComplete(CommandSender commandSender, String[] args) {
|
||||||
|
if (!varArgs && args.length < arguments.length - 1) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
List<String> argsList = Arrays.asList(args);
|
List<String> argsList = Arrays.asList(args);
|
||||||
for (String value : subCommand) {
|
for (String value : subCommand) {
|
||||||
String s = argsList.remove(0);
|
String s = argsList.remove(0);
|
||||||
|
In neuem Issue referenzieren
Einen Benutzer sperren