Dieser Commit ist enthalten in:
Commit
79050e3b09
@ -78,6 +78,7 @@ public abstract class SWCommand {
|
|||||||
}
|
}
|
||||||
String string = args[args.length - 1].toLowerCase();
|
String string = args[args.length - 1].toLowerCase();
|
||||||
return commandList.stream()
|
return commandList.stream()
|
||||||
|
.filter(s -> !s.noTabComplete)
|
||||||
.map(s -> s.tabComplete(sender, args))
|
.map(s -> s.tabComplete(sender, args))
|
||||||
.filter(Objects::nonNull)
|
.filter(Objects::nonNull)
|
||||||
.flatMap(Collection::stream)
|
.flatMap(Collection::stream)
|
||||||
@ -118,7 +119,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;
|
||||||
}
|
}
|
||||||
commandHelpList.add(new SubCommand(this, method, anno.value(), new HashMap<>(), localGuardChecker, true, null));
|
commandHelpList.add(new SubCommand(this, method, anno.value(), new HashMap<>(), localGuardChecker, true, null, anno.noTabComplete()));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
for (Method method : methods) {
|
for (Method method : methods) {
|
||||||
@ -140,7 +141,7 @@ public abstract class SWCommand {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
commandList.add(new SubCommand(this, method, anno.value(), localTypeMapper, localGuardChecker, false, anno.description()));
|
commandList.add(new SubCommand(this, method, anno.value(), localTypeMapper, localGuardChecker, false, anno.description(), anno.noTabComplete()));
|
||||||
});
|
});
|
||||||
|
|
||||||
this.commandList.sort((o1, o2) -> {
|
this.commandList.sort((o1, o2) -> {
|
||||||
@ -287,6 +288,8 @@ public abstract class SWCommand {
|
|||||||
|
|
||||||
String[] description() default {};
|
String[] description() default {};
|
||||||
|
|
||||||
|
boolean noTabComplete() default false;
|
||||||
|
|
||||||
@Retention(RetentionPolicy.RUNTIME)
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
@Target({ElementType.METHOD})
|
@Target({ElementType.METHOD})
|
||||||
@interface Registeres {
|
@interface Registeres {
|
||||||
@ -325,4 +328,10 @@ public abstract class SWCommand {
|
|||||||
|
|
||||||
boolean local() default false;
|
boolean local() default false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
@Target({ElementType.PARAMETER})
|
||||||
|
protected @interface StaticValue {
|
||||||
|
String value();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -163,6 +163,10 @@ public class SWCommandUtils {
|
|||||||
GUARD_FUNCTIONS.putIfAbsent(name, guardChecker);
|
GUARD_FUNCTIONS.putIfAbsent(name, guardChecker);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static TypeMapper<String> createMapper(String value) {
|
||||||
|
return createMapper((s) -> value.equals(s) ? value : null, s -> Collections.singletonList(value));
|
||||||
|
}
|
||||||
|
|
||||||
public static <T> TypeMapper<T> createMapper(Function<String, T> mapper, Function<String, List<String>> tabCompleter) {
|
public static <T> TypeMapper<T> createMapper(Function<String, T> mapper, Function<String, List<String>> tabCompleter) {
|
||||||
return createMapper(mapper, (commandSender, s) -> tabCompleter.apply(s));
|
return createMapper(mapper, (commandSender, s) -> tabCompleter.apply(s));
|
||||||
}
|
}
|
||||||
|
@ -45,12 +45,14 @@ class SubCommand {
|
|||||||
GuardChecker guardChecker;
|
GuardChecker guardChecker;
|
||||||
Class<?> varArgType = null;
|
Class<?> varArgType = null;
|
||||||
private boolean help;
|
private boolean help;
|
||||||
|
boolean noTabComplete = false;
|
||||||
|
|
||||||
SubCommand(SWCommand swCommand, Method method, String[] subCommand, Map<String, TypeMapper<?>> localTypeMapper, Map<String, GuardChecker> localGuardChecker, boolean help, String[] description) {
|
SubCommand(SWCommand swCommand, Method method, String[] subCommand, Map<String, TypeMapper<?>> localTypeMapper, Map<String, GuardChecker> localGuardChecker, boolean help, String[] description, boolean noTabComplete) {
|
||||||
this.swCommand = swCommand;
|
this.swCommand = swCommand;
|
||||||
this.method = method;
|
this.method = method;
|
||||||
this.help = help;
|
this.help = help;
|
||||||
this.description = description;
|
this.description = description;
|
||||||
|
this.noTabComplete = noTabComplete;
|
||||||
|
|
||||||
Parameter[] parameters = method.getParameters();
|
Parameter[] parameters = method.getParameters();
|
||||||
commandSenderPredicate = sender -> parameters[0].getType().isAssignableFrom(sender.getClass());
|
commandSenderPredicate = sender -> parameters[0].getType().isAssignableFrom(sender.getClass());
|
||||||
@ -82,6 +84,13 @@ class SubCommand {
|
|||||||
String name = clazz.getTypeName();
|
String name = clazz.getTypeName();
|
||||||
if (mapper != null) {
|
if (mapper != null) {
|
||||||
name = mapper.value();
|
name = mapper.value();
|
||||||
|
} else {
|
||||||
|
SWCommand.StaticValue staticValue = parameter.getAnnotation(SWCommand.StaticValue.class);
|
||||||
|
if (staticValue != null && parameter.getType() == String.class) {
|
||||||
|
arguments[i - 1] = SWCommandUtils.createMapper(staticValue.value());
|
||||||
|
guards[i - 1] = getGuardChecker(parameter, localGuardChecker);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
arguments[i - 1] = localTypeMapper.containsKey(name)
|
arguments[i - 1] = localTypeMapper.containsKey(name)
|
||||||
? localTypeMapper.get(name)
|
? localTypeMapper.get(name)
|
||||||
|
In neuem Issue referenzieren
Einen Benutzer sperren