命令参数
大多数命令都使用了参数。 有时参数是可选的,也就是说如果你不提供此参数,命令仍能运行。 一个节点可以有多个参数类型,但是注意有可能出现二义性,这是需要避免的。
java
No lines matched.1
java
No lines matched.1
在这个例子中,在命令文本 /command_with_arg 之后,你需要输入一个整数。 例如,如果运行 /command_with_arg 3,会收到反馈消息:
已调用 /command_with_arg,其中 value = 3
如果你在不带参数的情况下输入 /command_with_arg ,该命令将无法被正确解析。
接下来我们将添加第二个可选的参数:
java
No lines matched.1
java
No lines matched.1
现在你可以输入一个或者两个整数了。 如果提供了一个整数,那么会打印单个值的反馈文本。 如果提供了两个整数,那么会打印有两个值的反馈文本。
你可能发现,把类似的执行逻辑指定两次其实没什么必要。 因此,我们可以创建一个在两个执行中都使用的方法。
java
No lines matched.1
java
No lines matched.1
自定义参数类型
如果原版没有你想要的参数类型,可以自己创建一个。 为此,创建一个类并继承 ArgumentType<T> 接口,其中 T 是参数的类型。
您需要实现 parse 这个方法,这个方法会把输入的字符串解析为期望的类型。
举个例子,您可以创建一个参数类型,将 {x, y, z} 格式的字符串解析为 BlockPos
java
No lines matched.1
注册自定义参数类型
WARNING
您需要在服务端和客户端都注册自定义参数类型,否则命令不会生效!
你可以使用 ArgumentTypeRegistry 类在模组的初始化器的 onInitialize 方法中注册自定义参数类型:
java
No lines matched.1
使用自定义参数类型
我们可以在命令中使用我们的自定义参数类型──通过在 command builder 中传递实例到 .argument 方法。
java
No lines matched.1
java
No lines matched.1
运行命令,我们可以测试参数类型是否生效:



