From 35277daca8f18f6780b6c64d136aad95800ca842 Mon Sep 17 00:00:00 2001 From: Sen Date: Sat, 31 May 2025 10:47:06 +0200 Subject: [PATCH] fix command default and required params --- .../main/java/server/command/ArgumentSplitter.java | 11 +++-------- server/src/main/java/server/command/Command.java | 7 ++++++- server/src/main/java/server/command/Parameter.java | 12 +++++++++++- .../java/server/command/commands/CommandBlock.java | 1 + .../java/server/command/commands/CommandHelp.java | 10 ++++++---- .../java/server/command/commands/CommandMessage.java | 1 + .../java/server/command/commands/CommandPlayers.java | 1 + .../java/server/command/commands/CommandRemove.java | 3 ++- .../java/server/command/commands/CommandSave.java | 1 + .../java/server/command/commands/CommandSeed.java | 3 ++- .../java/server/command/commands/CommandSpawn.java | 2 +- .../java/server/command/commands/CommandTele.java | 3 ++- .../java/server/command/commands/CommandTime.java | 3 ++- .../java/server/command/commands/CommandWeather.java | 4 ++-- .../java/server/command/commands/CommandWorld.java | 2 +- 15 files changed, 42 insertions(+), 22 deletions(-) diff --git a/server/src/main/java/server/command/ArgumentSplitter.java b/server/src/main/java/server/command/ArgumentSplitter.java index 1028b29..8587fad 100644 --- a/server/src/main/java/server/command/ArgumentSplitter.java +++ b/server/src/main/java/server/command/ArgumentSplitter.java @@ -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 params = Maps.newHashMapWithExpectedSize(param.parsers().size()); for(ArgumentParser parser : param.parsers()) { params.put(parser.getName(), parser.getDefault(env)); diff --git a/server/src/main/java/server/command/Command.java b/server/src/main/java/server/command/Command.java index 96fc1f8..eb7355f 100644 --- a/server/src/main/java/server/command/Command.java +++ b/server/src/main/java/server/command/Command.java @@ -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; diff --git a/server/src/main/java/server/command/Parameter.java b/server/src/main/java/server/command/Parameter.java index 5302dc5..9c525ce 100644 --- a/server/src/main/java/server/command/Parameter.java +++ b/server/src/main/java/server/command/Parameter.java @@ -9,5 +9,15 @@ 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; + } } diff --git a/server/src/main/java/server/command/commands/CommandBlock.java b/server/src/main/java/server/command/commands/CommandBlock.java index 81c44c2..128ca08 100644 --- a/server/src/main/java/server/command/commands/CommandBlock.java +++ b/server/src/main/java/server/command/commands/CommandBlock.java @@ -25,6 +25,7 @@ public class CommandBlock extends Command { this.addBlockPos("position", true); this.addWorld("dim", true); + this.setParamsOptional(); this.addTag("tag", 't'); } diff --git a/server/src/main/java/server/command/commands/CommandHelp.java b/server/src/main/java/server/command/commands/CommandHelp.java index 21b9db6..c92d042 100644 --- a/server/src/main/java/server/command/commands/CommandHelp.java +++ b/server/src/main/java/server/command/commands/CommandHelp.java @@ -31,24 +31,26 @@ public class CommandHelp extends Command { List list = Lists.newArrayList(); for(Entry 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() { 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() { public String apply(ArgumentParser parser) { return "<" + parser.getName() + ">"; } - }, param.parsers())) + (param.required() ? ">" : "]")); + }, param.parsers())) + (required ? ">" : "]")); } exec.logConsole("%s %s", command.name(), Util.buildLines(" ", list)); } diff --git a/server/src/main/java/server/command/commands/CommandMessage.java b/server/src/main/java/server/command/commands/CommandMessage.java index 177ba6c..8209267 100644 --- a/server/src/main/java/server/command/commands/CommandMessage.java +++ b/server/src/main/java/server/command/commands/CommandMessage.java @@ -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()); } diff --git a/server/src/main/java/server/command/commands/CommandPlayers.java b/server/src/main/java/server/command/commands/CommandPlayers.java index b665700..1bddfe3 100644 --- a/server/src/main/java/server/command/commands/CommandPlayers.java +++ b/server/src/main/java/server/command/commands/CommandPlayers.java @@ -14,6 +14,7 @@ public class CommandPlayers extends Command { public CommandPlayers() { super("players"); + this.setParamsOptional(); this.addFlag("coords", 'c'); } diff --git a/server/src/main/java/server/command/commands/CommandRemove.java b/server/src/main/java/server/command/commands/CommandRemove.java index 2ecf0b6..47a7342 100644 --- a/server/src/main/java/server/command/commands/CommandRemove.java +++ b/server/src/main/java/server/command/commands/CommandRemove.java @@ -12,7 +12,8 @@ public class CommandRemove extends Command { super("remove"); this.addEntityList("entities", true); - + + this.setParamsOptional(); this.addFlag("kill", 'k'); } diff --git a/server/src/main/java/server/command/commands/CommandSave.java b/server/src/main/java/server/command/commands/CommandSave.java index 4f80993..fc2491e 100644 --- a/server/src/main/java/server/command/commands/CommandSave.java +++ b/server/src/main/java/server/command/commands/CommandSave.java @@ -12,6 +12,7 @@ public class CommandSave extends Command { public CommandSave() { super("save"); + this.setParamsOptional(); this.addFlag("message", 'm'); this.addFlag("flush", 'f'); } diff --git a/server/src/main/java/server/command/commands/CommandSeed.java b/server/src/main/java/server/command/commands/CommandSeed.java index 536594a..f3e4ddb 100644 --- a/server/src/main/java/server/command/commands/CommandSeed.java +++ b/server/src/main/java/server/command/commands/CommandSeed.java @@ -10,7 +10,8 @@ public class CommandSeed extends Command { super("seed"); this.addWorld("dim", true); - + + this.setParamsOptional(); this.addFlag("dump", 'd'); } diff --git a/server/src/main/java/server/command/commands/CommandSpawn.java b/server/src/main/java/server/command/commands/CommandSpawn.java index 7871011..74c72d7 100644 --- a/server/src/main/java/server/command/commands/CommandSpawn.java +++ b/server/src/main/java/server/command/commands/CommandSpawn.java @@ -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'); diff --git a/server/src/main/java/server/command/commands/CommandTele.java b/server/src/main/java/server/command/commands/CommandTele.java index e2f735a..ea097f7 100644 --- a/server/src/main/java/server/command/commands/CommandTele.java +++ b/server/src/main/java/server/command/commands/CommandTele.java @@ -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); } diff --git a/server/src/main/java/server/command/commands/CommandTime.java b/server/src/main/java/server/command/commands/CommandTime.java index 16fb4f9..0953cf6 100644 --- a/server/src/main/java/server/command/commands/CommandTime.java +++ b/server/src/main/java/server/command/commands/CommandTime.java @@ -14,7 +14,8 @@ public class CommandTime extends Command { super("time"); this.addString("time", false, "day", "night", "noon", "midnight", "sunrise", "sunset"); - + + this.setParamsOptional(); this.addFlag("absolute", 'a'); } diff --git a/server/src/main/java/server/command/commands/CommandWeather.java b/server/src/main/java/server/command/commands/CommandWeather.java index 2a45a62..2c3d0fc 100644 --- a/server/src/main/java/server/command/commands/CommandWeather.java +++ b/server/src/main/java/server/command/commands/CommandWeather.java @@ -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'); } diff --git a/server/src/main/java/server/command/commands/CommandWorld.java b/server/src/main/java/server/command/commands/CommandWorld.java index 5ce211c..6ca877c 100644 --- a/server/src/main/java/server/command/commands/CommandWorld.java +++ b/server/src/main/java/server/command/commands/CommandWorld.java @@ -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); }