命令参数 1.20.4
学习如何创建带有复杂参数的命令。
WARNING
本页面适用于 1.20.4 版本。 针对旧版本的文档可能不完整。
大多数的命令都有参数。 有些时候他们是可选的,这意味着如果你不提供这些参数命令照样可以工作 一个节点可能有多种参数类型,此时有可能使用户困惑,请注意避免这个问题。
java
No lines matched.1
在这个情况里,在命令/argtater之后,您应该输入一个整型数字。 举个例子,如果您输入了/argtater 3,您应该会收到一条消息:Called /argtater with value = 3。 如果您输入了 /argtataer 并且没有任何参数,那么这个命令将不会被正确解析。
接下来我们将添加第二个可选的参数:
java
No lines matched.1
现在您可以输入一个或者两个整型数字了。 如果您提供了一个整型数字,那么会打印单个值的反馈文本。 如果您提供了两个整型数字,那么会打印有两个值的反馈文本。
您可能会发现没有必要指定两次相似的执行。 因此,我们可以创建一个方法同时用于两种执行。
java
No lines matched.1
自定义参数类型
如果原版并没有提供您想要的命令参数类型,您可以创建您自己的类型。 为此,您需要创建一个继承ArgumentType < T > 接口的类,其中 T 是参数的类型。
您需要实现 parse 这个方法,这个方法会把输入的字符串解析为期望的类型。
举个例子,您可以创建一个可以把格式形如 {x, y, z} 的字符串解析为一个 BlockPos 参数类型。
java
No lines matched.1
注册自定义参数类型
WARNING
您需要同时在服务端和客户端注册您的自定义参数类型,否则您的命令将不会工作!
您可以在您的模组的初始化方法 onInitialize 中使用 ArgumentTypeRegistry 类来注册:
java
No lines matched.1
使用自定义参数类型
我们可以在命令中使用我们的自定义参数类型──通过在 command builder 中传递实例到 .argument 方法。
java
No lines matched.1
运行命令,我们可以测试我们的参数类型是否可以正常工作:



