Files
netease-bedrock-wiki/mcguide/20-玩法开发/15-自定义游戏内容/9-自定义指令.md

103 lines
4.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
front: https://nie.res.netease.com/r/pic/20220408/3e2bb79b-32b3-4b95-a408-83556c00f775.jpg
hard: 入门
time: 20分钟
selection: true
---
# 自定义指令
## 概述
开发者可以通过在行为包中配置json来添加自定义指令。添加的自定义指令支持在聊天栏预览和Tab补全支持与指令相关的所有事件及接口。
## 注册
以demo [CustomCommandDemo](../13-模组SDK编程/60-Demo示例.md#CustomCommandDemo)为例。
1. 在behavior中新建`netease_commands`目录。
![avatar](./picture/custom_command1.png)
2. 在目录下新建一个json编写指令的定义。json文件命名推荐为`团队名_模组命名空间_指令名称`,例如`craftStudio_customCommandDemo_explode`,文件名应使用英文数字和下划线,不可含有中文和特殊字符。
![avatar](./picture/custom_command2.png)
3. 打开json文件编写指令定义以demo中的customtest2指令为例文件位于`netease_commands/craftStudio_customCommandDemo_customtest2.json`
```json
{
"format_version": "0.0.1",
"name": "customtest2",
"description": "测试所有配置默认值的参数",
"permission_level": "game_directors",
"args": [
{"name": "浮点数", "type": "float", "default": 12.3},
{"name": "整数", "type": "int", "default": 12},
{"name": "字符串", "type": "str", "default": "hello"},
{"name": "目标", "type": "target", "default": "@s"},
{"name": "位置", "type": "pos", "default": [2.5, 3.0, 4.4]},
{
"name": "实体",
"type": "entity",
"default": {"entityType": "minecraft:sheep"}
},{
"name": "物品",
"type": "item",
"default": {"itemName": "minecraft:apple"}
}
]
}
```
- 以下是代码和说明。
|键|类型|解释|
|:-|:-|:-|
|format_version|str|格式版本请填写0.0.1|
|name|str|指令名称例如gamemode|
|description|str|指令描述支持在语言文件例如zh_CN.lang中定义|
|permission_level|str|权限等级可选game_directors、admin、host、owner、any具体含义如下<br>game_directors任何操作员都可以运行此命令包括命令方块<br>admin任何操作员都可以运行此命令但命令方块不能<br>host任何服务器主机都可以运行此命令<br>owner只有专用服务器可以运行此命令<br>any任何人都可以运行此命令|
- args是一个包含object的列表定义指令的参数。每个object都代表一个参数object的顺序决定指令参数的输入顺序每个object的参数说明如下
|键|类型|解释|
|:-|:-|:-|
|name|str|参数名称,会在输入提示中显示|
|type|str|参数类型目前仅支持上面json里的7种类型参数|
|default|any|参数默认值可填写任意json数据格式|
- 例如配置为`{"name": "浮点数", "type": "float"}`时,输入时会显示
![avatar](./picture/custom_command3.png)
- default不必和type的类型符合**含有default的参数必须排在参数列表的尾部**,且在游戏中可以不传。<br>例如配置为`{"name": "浮点数", "type": "float", "default": null}`时,输入时会显示
![avatar](./picture/custom_command4.png)
## 使用
- 开发者需要监听<a href="../../../mcdocs/1-ModAPI-beta/事件/世界.html#customcommandtriggerserverevent" rel="noopenner">CustomCommandTriggerServerEvent</a>,为自定义指令编写功能。
- 使用<a href="../../../mcdocs/1-ModAPI-beta/接口/世界/指令.html#setcommand" rel="noopenner">SetCommand</a>接口可以触发自定义指令。
- 使用<a href="../../../mcdocs/1-ModAPI-beta/事件/世界.html#globalcommandserverevent" rel="noopenner">GlobalCommandServerEvent</a>可以监听所有指令,包括自定义指令。
## demo说明
- customCommandDemo实现了三个指令`customtest`和`customtest2`指令用来给开发者测试各种参数的用法,`explode`指令实现了让指定坐标或实体位置发生爆炸的功能。
![avatar](./picture/custom_command5.png)
- 通过编写两个json文件注册两次explode可实现可变参数类型功能但需要注意这种情况下你只能根据参数的value去判断name和type将失效。例如如果你注册了`/explode <pos> <float>`和`/explode <float> <pos>`,那么玩家调用/explode 1 1 1 1将无法解析。通常情况下不建议重复注册指令除非你明确知道自己要做什么。
- 该指令支持多种调用方式,示例如下
```
让发送指令的对象爆炸
/explode
让发送对象的上方8格爆炸
/explode ~~8~
让所有鸡爆炸
/explode @e[type=chicken]
让发送对象的上方8格爆炸爆炸范围为3不破坏方块不产生火焰
/explode ~~8~ 3 0
让发送对象爆炸爆炸范围为3破坏方块产生火焰
/explode @s 3 1 1
```