CommandFramework #107
@ -79,16 +79,17 @@ public abstract class SWCommand {
|
||||
addMapper(ClassMapper.class, method, i -> i == 0, false, TypeMapper.class, (anno, typeMapper) -> {
|
||||
(anno.local() ? localTypeMapper : SWCommandUtils.MAPPER_FUNCTIONS).putIfAbsent(anno.value().getTypeName(), typeMapper);
|
||||
});
|
||||
add(Register.class, method, i -> i > 0, true, null, (anno, parameters) -> {
|
||||
add(Register.class, method, i -> i != 2, true, null, (anno, parameters) -> {
|
||||
if (!anno.help()) return;
|
||||
if (parameters.length != 2) {
|
||||
Bukkit.getLogger().log(Level.WARNING, "The method '" + method.toString() + "' is lacking parameters or has too many");
|
||||
}
|
||||
List<String> errors = new ArrayList<>();
|
||||
if (!parameters[parameters.length - 1].isVarArgs()) {
|
||||
Bukkit.getLogger().log(Level.WARNING, "The method '" + method.toString() + "' is lacking the varArgs parameters as last Argument");
|
||||
errors.add("The method '" + method.toString() + "' is lacking the varArgs parameters as last Argument");
|
||||
}
|
||||
if (parameters[parameters.length - 1].getType().getComponentType() != String.class) {
|
||||
Bukkit.getLogger().log(Level.WARNING, "The method '" + method.toString() + "' is lacking the varArgs parameters of type '" + String.class.getTypeName() + "' as last Argument");
|
||||
errors.add("The method '" + method.toString() + "' is lacking the varArgs parameters of type '" + String.class.getTypeName() + "' as last Argument");
|
||||
}
|
||||
if (!errors.isEmpty()) {
|
||||
errors.forEach(s -> Bukkit.getLogger().log(Level.WARNING, s));
|
||||
return;
|
||||
}
|
||||
commandHelpList.add(new SubCommand(this, method, anno.description(), anno.value(), new HashMap<>()));
|
||||
@ -130,8 +131,8 @@ public abstract class SWCommand {
|
||||
if (compare != 0) {
|
||||
return compare;
|
||||
} else {
|
||||
return Integer.compare(o1.method.getDeclaringClass() == SWCommand.class ? 0 : 1,
|
||||
o2.method.getDeclaringClass() == SWCommand.class ? 0 : 1);
|
||||
return Integer.compare(o1.method.getDeclaringClass() == SWCommand.class ? 1 : 0,
|
||||
o2.method.getDeclaringClass() == SWCommand.class ? 1 : 0);
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -142,16 +143,18 @@ public abstract class SWCommand {
|
||||
if (anno == null || anno.length == 0) return;
|
||||
|
||||
Parameter[] parameters = method.getParameters();
|
||||
List<String> errors = new ArrayList<>();
|
||||
if (!parameterTester.test(parameters.length)) {
|
||||
Bukkit.getLogger().log(Level.WARNING, "The method '" + method.toString() + "' is lacking parameters or has too many");
|
||||
return;
|
||||
errors.add("The method '" + method.toString() + "' is lacking parameters or has too many");
|
||||
}
|
||||
if (firstParameter && !CommandSender.class.isAssignableFrom(parameters[0].getType())) {
|
||||
Bukkit.getLogger().log(Level.WARNING, "The method '" + method.toString() + "' is lacking the first parameter of type '" + CommandSender.class.getTypeName() + "'");
|
||||
return;
|
||||
errors.add("The method '" + method.toString() + "' is lacking the first parameter of type '" + CommandSender.class.getTypeName() + "'");
|
||||
YoyoNow markierte diese Unterhaltung als gelöst
Veraltet
|
||||
}
|
||||
if (returnType != null && method.getReturnType() != returnType) {
|
||||
Bukkit.getLogger().log(Level.WARNING, "The method '" + method.toString() + "' is lacking the desired return type '" + returnType.getTypeName() + "'");
|
||||
errors.add("The method '" + method.toString() + "' is lacking the desired return type '" + returnType.getTypeName() + "'");
|
||||
}
|
||||
if (!errors.isEmpty()) {
|
||||
errors.forEach(s -> Bukkit.getLogger().log(Level.WARNING, s));
|
||||
return;
|
||||
}
|
||||
Arrays.stream(anno).forEach(t -> consumer.accept(t, parameters));
|
||||
|
In neuem Issue referenzieren
Einen Benutzer sperren
Nope nope nope. Lass dir beim Erstellen des Commands ein Message-Objekt übergeben.
Doch, Doch, Doch, weil ich will kein Sache übergeben bekommen! Ich will es auch optional halten usw usw!
Dann nutze einen Setter.
Ist nicht einfach so da, ich will das ich nichts dafür aufrufen oder sonst machen muss! So wie das Register und Mapper und so.
Der Einsatz von Reflections zu diesem Grund ist einfach nur unangemessen. Ein Objekt MESSAGE zur Verfügung zu stellen, ist genauso. Warum nicht einfach message als protected Parameter im SWCommand haben, dann kann das auch einfach problemlos gesetzt werden....
Lixfel dieses System kann man so noch einfach aus dem SpigotCore kopieren und woanders verwenden, wenn ich das verdrahte nicht mehr!
Wohin hast du denn vor, dieses System eins zu eins zu kopieren?
Zeanon verwendet es in einem seiner Projekte.
Njoa, Also das Message-System ist exakt eine Klasse mehr. Ich glaube, es ist komplexer, Support für mit und ohne Message-System vorzuhalten, als einfach das Message-System mit dranzuhängen.