fix command default and required params

This commit is contained in:
Sen 2025-05-31 10:47:06 +02:00
parent 6562d18dc1
commit 35277daca8
Signed by: sen
GPG key ID: 3AC50A6F47D1B722
15 changed files with 42 additions and 22 deletions

View file

@ -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)
throw new RunException("Argument '%s' muss angegeben werden", param.name());
}
}
else if(param.parsers().isEmpty()) {
if(param.neededIn(env))
throw new RunException("Argument '%s' muss angegeben werden", param.name());
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));

View file

@ -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;

View file

@ -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;
}
}

View file

@ -25,6 +25,7 @@ public class CommandBlock extends Command {
this.addBlockPos("position", true);
this.addWorld("dim", true);
this.setParamsOptional();
this.addTag("tag", 't');
}

View file

@ -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));
}

View file

@ -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());
}

View file

@ -14,6 +14,7 @@ public class CommandPlayers extends Command {
public CommandPlayers() {
super("players");
this.setParamsOptional();
this.addFlag("coords", 'c');
}

View file

@ -13,6 +13,7 @@ public class CommandRemove extends Command {
this.addEntityList("entities", true);
this.setParamsOptional();
this.addFlag("kill", 'k');
}

View file

@ -12,6 +12,7 @@ public class CommandSave extends Command {
public CommandSave() {
super("save");
this.setParamsOptional();
this.addFlag("message", 'm');
this.addFlag("flush", 'f');
}

View file

@ -11,6 +11,7 @@ public class CommandSeed extends Command {
this.addWorld("dim", true);
this.setParamsOptional();
this.addFlag("dump", 'd');
}

View file

@ -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');

View file

@ -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);
}

View file

@ -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');
}

View file

@ -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');
}

View file

@ -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);
}