fix command default and required params
This commit is contained in:
parent
6562d18dc1
commit
35277daca8
15 changed files with 42 additions and 22 deletions
|
@ -107,15 +107,10 @@ public class ArgumentSplitter {
|
|||
}
|
||||
for(Parameter param : parameters.values()) {
|
||||
if(!args.containsKey(param.name())) {
|
||||
if(param.required()) {
|
||||
for(ArgumentParser parser : param.parsers()) {
|
||||
if(parser.getDefault(env) == null)
|
||||
if(param.neededIn(env))
|
||||
throw new RunException("Argument '%s' muss angegeben werden", param.name());
|
||||
}
|
||||
}
|
||||
else if(param.parsers().isEmpty()) {
|
||||
else if(param.parsers().isEmpty())
|
||||
continue;
|
||||
}
|
||||
Map<String, Object> params = Maps.newHashMapWithExpectedSize(param.parsers().size());
|
||||
for(ArgumentParser parser : param.parsers()) {
|
||||
params.put(parser.getName(), parser.getDefault(env));
|
||||
|
|
|
@ -31,6 +31,11 @@ public abstract class Command implements Executable {
|
|||
return this;
|
||||
}
|
||||
|
||||
protected Command setParamsRequired() {
|
||||
this.parReq = true;
|
||||
return this;
|
||||
}
|
||||
|
||||
protected Command addParameter(String name, ArgCombiner<?> combiner, ArgumentParser ... parsers) {
|
||||
Parameter param = new Parameter(name, (char)0, this.parPos++, this.parReq, Lists.newArrayList(parsers), combiner);
|
||||
this.parameters.put(name, param);
|
||||
|
@ -39,7 +44,7 @@ public abstract class Command implements Executable {
|
|||
}
|
||||
|
||||
protected Command addParameter(String name, char shortName, ArgCombiner<?> combiner, ArgumentParser ... parsers) {
|
||||
Parameter param = new Parameter(name, shortName, -1, false, Lists.newArrayList(parsers), combiner);
|
||||
Parameter param = new Parameter(name, shortName, -1, this.parReq, Lists.newArrayList(parsers), combiner);
|
||||
this.parameters.put(name, param);
|
||||
this.argList.add(param);
|
||||
return this;
|
||||
|
|
|
@ -10,4 +10,14 @@ public record Parameter(String name, char shortName, int position, boolean requi
|
|||
public boolean shorthand() {
|
||||
return this.shortName != 0;
|
||||
}
|
||||
|
||||
public boolean neededIn(CommandEnvironment env) {
|
||||
if(!this.required)
|
||||
return false;
|
||||
for(ArgumentParser parser : this.parsers) {
|
||||
if(parser.getDefault(env) == null)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,6 +25,7 @@ public class CommandBlock extends Command {
|
|||
this.addBlockPos("position", true);
|
||||
this.addWorld("dim", true);
|
||||
|
||||
this.setParamsOptional();
|
||||
this.addTag("tag", 't');
|
||||
}
|
||||
|
||||
|
|
|
@ -31,24 +31,26 @@ public class CommandHelp extends Command {
|
|||
List<String> list = Lists.newArrayList();
|
||||
for(Entry<String, Parameter> entry : command.parameters().entrySet()) {
|
||||
Parameter param = entry.getValue();
|
||||
boolean required = param.neededIn(env);
|
||||
if(entry.getKey().length() == 1 && !param.positional() && param.shorthand()) {
|
||||
list.add("-" + param.shortName() + (param.parsers().isEmpty() ? " (" + param.name() + ")" : (param.parsers().size() == 1 &&
|
||||
list.add((required ? "<" : "[") + "-" + param.shortName() + (param.parsers().isEmpty() ? " (" + param.name() + ")" : (param.parsers().size() == 1 &&
|
||||
param.parsers().get(0).getName().equals(param.name()) ? " <" + param.name() + ">" :
|
||||
" (" + param.name() + ")" + Util.buildLines(" ", new Function<ArgumentParser, String>() {
|
||||
public String apply(ArgumentParser parser) {
|
||||
return "<" + parser.getName() + ">";
|
||||
}
|
||||
}, param.parsers()))));
|
||||
}, param.parsers()))) + (required ? ">" : "]"));
|
||||
}
|
||||
}
|
||||
for(Parameter param : command.positionals()) {
|
||||
list.add((param.required() ? "<" : "[") + (param.parsers().size() == 1 &&
|
||||
boolean required = param.neededIn(env);
|
||||
list.add((required ? "<" : "[") + (param.parsers().size() == 1 &&
|
||||
param.parsers().get(0).getName().equals(param.name()) ? param.name() :
|
||||
"(" + param.name() + ") " + Util.buildLines(" ", new Function<ArgumentParser, String>() {
|
||||
public String apply(ArgumentParser parser) {
|
||||
return "<" + parser.getName() + ">";
|
||||
}
|
||||
}, param.parsers())) + (param.required() ? ">" : "]"));
|
||||
}, param.parsers())) + (required ? ">" : "]"));
|
||||
}
|
||||
exec.logConsole("%s %s", command.name(), Util.buildLines(" ", list));
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@ public class CommandMessage extends Command {
|
|||
|
||||
this.addString("message", false);
|
||||
|
||||
this.setParamsOptional();
|
||||
this.addEnum("type", 't', SPacketMessage.Type.CHAT, SPacketMessage.Type.class, SPacketMessage.Type.values());
|
||||
}
|
||||
|
||||
|
|
|
@ -14,6 +14,7 @@ public class CommandPlayers extends Command {
|
|||
public CommandPlayers() {
|
||||
super("players");
|
||||
|
||||
this.setParamsOptional();
|
||||
this.addFlag("coords", 'c');
|
||||
}
|
||||
|
||||
|
|
|
@ -13,6 +13,7 @@ public class CommandRemove extends Command {
|
|||
|
||||
this.addEntityList("entities", true);
|
||||
|
||||
this.setParamsOptional();
|
||||
this.addFlag("kill", 'k');
|
||||
}
|
||||
|
||||
|
|
|
@ -12,6 +12,7 @@ public class CommandSave extends Command {
|
|||
public CommandSave() {
|
||||
super("save");
|
||||
|
||||
this.setParamsOptional();
|
||||
this.addFlag("message", 'm');
|
||||
this.addFlag("flush", 'f');
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@ public class CommandSeed extends Command {
|
|||
|
||||
this.addWorld("dim", true);
|
||||
|
||||
this.setParamsOptional();
|
||||
this.addFlag("dump", 'd');
|
||||
}
|
||||
|
||||
|
|
|
@ -28,9 +28,9 @@ public class CommandSpawn extends Command {
|
|||
}
|
||||
names.add("Lightning");
|
||||
this.addEnum("type", String.class, names);
|
||||
this.setParamsOptional();
|
||||
this.addVector("position", true, true);
|
||||
this.addWorld("dim", true);
|
||||
this.setParamsOptional();
|
||||
this.addTag("tag");
|
||||
|
||||
this.addFlag("noinit", 'n');
|
||||
|
|
|
@ -14,11 +14,12 @@ public class CommandTele extends Command {
|
|||
super("tele");
|
||||
|
||||
this.addVector("position", false, true);
|
||||
this.setParamsOptional();
|
||||
this.addDimension("dim", true);
|
||||
this.setParamsOptional();
|
||||
this.addDouble("yaw", -180.0, 180.0);
|
||||
this.addDouble("pitch", -89.0, 89.0);
|
||||
|
||||
this.setParamsRequired();
|
||||
this.addEntityList("entities", 'e', true);
|
||||
}
|
||||
|
||||
|
|
|
@ -15,6 +15,7 @@ public class CommandTime extends Command {
|
|||
|
||||
this.addString("time", false, "day", "night", "noon", "midnight", "sunrise", "sunset");
|
||||
|
||||
this.setParamsOptional();
|
||||
this.addFlag("absolute", 'a');
|
||||
}
|
||||
|
||||
|
|
|
@ -12,9 +12,9 @@ public class CommandWeather extends Command {
|
|||
super("weather");
|
||||
|
||||
this.addEnum("weather", Weather.class, Weather.values());
|
||||
this.setParamsOptional();
|
||||
this.addWorld("dim", true);
|
||||
|
||||
this.setParamsOptional();
|
||||
this.addFlag("transition", 't');
|
||||
}
|
||||
|
||||
|
|
|
@ -13,7 +13,7 @@ public class CommandWorld extends Command {
|
|||
public CommandWorld() {
|
||||
super("world");
|
||||
|
||||
this.addWorld("dim", true);
|
||||
this.addWorld("dim", false);
|
||||
|
||||
this.addEntityList("entities", 'e', true);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue