CommandFramework #107
@ -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
|
||||
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 {
|
||||
|
||||
Lixfel
hat
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.
YoyoNow
hat
Haben nicht die SteamwarFarben aus einem Grund? Haben nicht die SteamwarFarben aus einem Grund?
Lixfel
hat
? 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.
YoyoNow
hat
*wir \*wir
YoyoNow
hat
Können wir nicht dann trotzdem unser Style in jede Message setzten? Können wir nicht dann trotzdem unser Style in jede Message setzten?
Lixfel
hat
Ja genau, in die Message, und nicht in den Code. Ja genau, in die Message, und nicht in den Code.
YoyoNow
hat
Ok und wie soll ich dies deiner Meinung dann machen? 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();
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
|
In neuem Issue referenzieren
Einen Benutzer sperren
Warum nicht direkt die WARNINGS printen bzw. sind das nicht Programmierfehler, also müssten nicht Exceptions fliegen?
Kann ich gerne als Exception fliegen lassen, aber ich will es gesamt halt sagen.
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.