SteamWar/SpigotCore
Archiviert
13
0

CommandFramework #107

Geschlossen
YoyoNow möchte 27 Commits von CommandFramework nach master mergen
Nur Änderungen aus Commit 8706146317 werden angezeigt - Alle Commits anzeigen

Datei anzeigen

@ -26,10 +26,10 @@ import org.bukkit.plugin.Plugin;
import org.bukkit.scheduler.BukkitRunnable;
import java.lang.annotation.*;
import java.lang.reflect.Method;
import java.lang.reflect.Parameter;
import java.lang.reflect.*;
import java.util.*;
import java.util.function.BiConsumer;
import java.util.function.BiFunction;
import java.util.function.IntPredicate;
import java.util.logging.Level;
import java.util.stream.Collectors;
@ -43,6 +43,8 @@ public abstract class SWCommand {
private final List<SubCommand> commandHelpList = new ArrayList<>();
private final Map<String, TypeMapper<?>> localTypeMapper = new HashMap<>();
private BiFunction<String, CommandSender, String> message = (s, commandSender) -> s;
protected SWCommand(String command) {
this(command, new String[0]);
}
@ -71,6 +73,8 @@ public abstract class SWCommand {
unregister();
register();
messageSystem();
List<Method> methods = methods();
for (Method method : methods) {
addMapper(Mapper.class, method, i -> i == 0, false, TypeMapper.class, (anno, typeMapper) -> {
@ -141,6 +145,26 @@ public abstract class SWCommand {
}
}
private void messageSystem() {
try {
Field field = getClass().getDeclaredField("MESSAGE");
if (!field.getType().getTypeName().equals("de.steamwar.message.Message")) {
YoyoNow markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Nope nope nope. Lass dir beim Erstellen des Commands ein Message-Objekt übergeben.

Nope nope nope. Lass dir beim Erstellen des Commands ein Message-Objekt übergeben.
Veraltet
Review

Doch, Doch, Doch, weil ich will kein Sache übergeben bekommen! Ich will es auch optional halten usw usw!

Doch, Doch, Doch, weil ich will kein Sache übergeben bekommen! Ich will es auch optional halten usw usw!
Veraltet
Review

Dann nutze einen Setter.

Dann nutze einen Setter.
Veraltet
Review

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.

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.
Veraltet
Review

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....

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....
Veraltet
Review

Lixfel dieses System kann man so noch einfach aus dem SpigotCore kopieren und woanders verwenden, wenn ich das verdrahte nicht mehr!

Lixfel dieses System kann man so noch einfach aus dem SpigotCore kopieren und woanders verwenden, wenn ich das verdrahte nicht mehr!
Veraltet
Review

Wohin hast du denn vor, dieses System eins zu eins zu kopieren?

Wohin hast du denn vor, dieses System eins zu eins zu kopieren?
Veraltet
Review

Zeanon verwendet es in einem seiner Projekte.

Zeanon verwendet es in einem seiner Projekte.
Veraltet
Review

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.

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.
return;
}
Object o = Modifier.isStatic(field.getModifiers()) ? field.get(null) : field.get(this);
Method method = o.getClass().getMethod("parse");
message = (s, commandSender) -> {
try {
return (String) method.invoke(o, s, commandSender);
} catch (IllegalAccessException | InvocationTargetException e) {
return s;
}
};
} catch (NoSuchFieldException | IllegalAccessException | NoSuchMethodException e) {
// Ignored
}
}
private <T extends Annotation> void add(Class<T> annotation, Method method, IntPredicate parameterTester, boolean firstParameter, Class<?> returnType, BiConsumer<T, Parameter[]> consumer) {
T[] anno = SWCommandUtils.getAnnotation(method, annotation);
if (anno == null || anno.length == 0) return;