SteamWar/SpigotCore
Archiviert
13
0

CommandFramework #107

Geschlossen
YoyoNow möchte 27 Commits von CommandFramework nach master mergen
2 geänderte Dateien mit 49 neuen und 1 gelöschten Zeilen
Nur Änderungen aus Commit ffef7f0bcb werden angezeigt - Alle Commits anzeigen

Datei anzeigen

@ -34,6 +34,9 @@ import java.util.stream.Collectors;
public abstract class SWCommand {
private boolean hasHelp = false;
private final List<String> help = new ArrayList<>();
private final Command command;
private final List<SubCommand> commandList = new ArrayList<>();
private final List<SubCommand> commandHelpList = new ArrayList<>();
@ -87,6 +90,14 @@ 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");
return;
}
if (method.getName().equals("internalHelp") && method.getDeclaringClass() == SWCommand.class) {
if (hasHelp) {
return;
}
} else if (!hasHelp) {
commandHelpList.clear();
hasHelp = true;
}
YoyoNow markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Warum nicht direkt die WARNINGS printen bzw. sind das nicht Programmierfehler, also müssten nicht Exceptions fliegen?

Warum nicht direkt die WARNINGS printen bzw. sind das nicht Programmierfehler, also müssten nicht Exceptions fliegen?
Veraltet
Review

Kann ich gerne als Exception fliegen lassen, aber ich will es gesamt halt sagen.

Kann ich gerne als Exception fliegen lassen, aber ich will es gesamt halt sagen.
Veraltet
Review

Programmierfehler sollst du nicht mehr oder weniger silent verstecken, sondern korrekt werfen, was wiederum zum einen Logeinträge hinterlässt, Stacktraces und ggf. den Nutzer über die fehlgeschlagene Operation informiert. Exceptions sind sprichwörtlich dafür gemacht.

Programmierfehler sollst du nicht mehr oder weniger silent verstecken, sondern korrekt werfen, was wiederum zum einen Logeinträge hinterlässt, Stacktraces und ggf. den Nutzer über die fehlgeschlagene Operation informiert. Exceptions sind sprichwörtlich dafür gemacht.
commandHelpList.add(new SubCommand(this, method, anno.value(), new HashMap<>()));
});
}
@ -166,6 +177,36 @@ public abstract class SWCommand {
SWCommandUtils.commandMap.register("steamwar", this.command);
}
@Register
private void internalHelp(CommandSender sender, String... args){
if (help.isEmpty()) {
commandList.forEach(subCommand -> {
StringBuilder st = new StringBuilder();
st.append("§8/§7").append(command.getName()).append(" ");
st.append("§7").append(String.join(" ", subCommand.subCommand)).append(" ");
int i = 1;
while (i < subCommand.parameters.length) {
Parameter parameter = subCommand.parameters[i];
Name name = parameter.getAnnotation(Name.class);
st.append("§8[§7");
if (name != null) {
st.append(name.name());
} else {
st.append(parameter.getName());
}
st.append("§8]");
i++;
}
if (subCommand.varArgType != null) {
st.append("§7...");
}
help.add(st.toString());
});
}
sender.sendMessage("§7Help§8: §e" + command.getName());
help.forEach(sender::sendMessage);
}
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
@Repeatable(Register.Registeres.class)
@ -196,4 +237,10 @@ public abstract class SWCommand {
Veraltet
Review

Sämtliche Color-Codes sind auch Teil des Message-Systems. Farben haben in anderen Sprach- und Kulturkreisen andere Bedeutungen.

Sämtliche Color-Codes sind auch Teil des Message-Systems. Farben haben in anderen Sprach- und Kulturkreisen andere Bedeutungen.
Veraltet
Review

Haben nicht die SteamwarFarben aus einem Grund?

Haben nicht die SteamwarFarben aus einem Grund?
Veraltet
Review

? Deutsch? Wir haben die Farben aus dem Grund, dass wir Stil haben und nicht wie nahezu jeder andere Server einfach einen kunterbunten flashy Colorstyle haben.

? Deutsch? Wir haben die Farben aus dem Grund, dass wir Stil haben und nicht wie nahezu jeder andere Server einfach einen kunterbunten flashy Colorstyle haben.
Veraltet
Review

*wir

\*wir
Veraltet
Review

Können wir nicht dann trotzdem unser Style in jede Message setzten?

Können wir nicht dann trotzdem unser Style in jede Message setzten?
Veraltet
Review

Ja genau, in die Message, und nicht in den Code.

Ja genau, in die Message, und nicht in den Code.
Veraltet
Review

Ok und wie soll ich dies deiner Meinung dann machen?
Also wie soll ich die keys nennen, wo soll ich dies dokumentieren und was soll ich machen, wenn diese nicht existieren?

Ok und wie soll ich dies deiner Meinung dann machen? Also wie soll ich die keys nennen, wo soll ich dies dokumentieren und was soll ich machen, wenn diese nicht existieren?
boolean local() default false;
}
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.PARAMETER})
protected @interface Name {
String name();
}
}

Datei anzeigen

@ -34,6 +34,7 @@ class SubCommand {
private SWCommand swCommand;
private Method method;
Parameter[] parameters;
String[] subCommand;
TypeMapper<?>[] arguments;
private Predicate<CommandSender> commandSenderPredicate;
@ -44,7 +45,7 @@ class SubCommand {
this.swCommand = swCommand;
this.method = method;
Parameter[] parameters = method.getParameters();
parameters = method.getParameters();
commandSenderPredicate = sender -> parameters[0].getType().isAssignableFrom(sender.getClass());
commandSenderFunction = sender -> parameters[0].getType().cast(sender);
this.subCommand = subCommand;