fz-survival-datapack/DEVDOC.md

105 lines
4.9 KiB
Markdown
Raw Normal View History

2022-06-27 18:51:34 +08:00
# 开发文档
2022-06-27 23:54:44 +08:00
## 指引
- `函数`,指数据包`<命名空间>/functions`目录下的`.mcfunction`文件
- `标签`,指数据包`<命名空间>/tags`目录下的`.json`文件
- `覆盖标签并填入函数`时,`replace`为`true`
```
{
"replace": true,
"values": [
"..."
]
}
```
- `向标签中注册函数`时,`replace`为`false`
2022-06-27 23:55:33 +08:00
```
{
"replace": false,
"values": [
"..."
]
}
```
2022-06-27 23:54:44 +08:00
2022-06-27 18:51:34 +08:00
## 基本要求
- 主要逻辑和模块逻辑分离
- 函数由两个以上的函数调用,或由不同包下的函数调用,或需要作为接口开放给下游数据包时,应改用标签调用!
## 未来计划
- 细化版本管理,提供不同版本之间的升级函数,由`update_manager`控制。*务必仔细测试再发布,一旦升级无法降级!*
2022-06-23 15:43:39 +08:00
2022-06-27 18:18:41 +08:00
## 系统模块
### 频繁使用的计算单元
- 位于`tags/functions/calculation`目录下的标签通常被用来进行简单重复的计算任务
2022-06-27 18:51:34 +08:00
### 事件模块
2022-06-27 18:18:41 +08:00
- 通常由**进度**触发,触发后调用同名的事件标签
2022-06-27 19:39:05 +08:00
- 在`tags/functions/event/<事件名称>`标签中注册触发时需要调用的函数即可
2022-06-27 18:18:41 +08:00
2022-06-27 18:51:34 +08:00
### 日志模块
2022-06-27 18:18:41 +08:00
- 仓库中提供了日志相关的代码片段,位于`.vscode/settings.json`
- 暂时没有找到方法在控制台记录日志
#### 详细 Fine
- 等级300
2022-06-27 21:39:04 +08:00
- 使用方法:`execute if score fz.logger.level fz.variable.integer matches 300.. run tellraw @a [{"nbt": "fz.level.fine", "interpret": true, "storage": "fz:logger"}, {"text": "你的日志"}`
2022-06-27 18:18:41 +08:00
#### 调试 Debug
- 等级400
2022-06-27 21:39:04 +08:00
- 使用方法:`execute if score fz.logger.level fz.variable.integer matches 400.. run tellraw @a [{"nbt": "fz.level.debug", "interpret": true, "storage": "fz:logger"}, {"text": "你的日志"}`
2022-06-27 18:18:41 +08:00
#### 信息 Info
- 等级500
2022-06-27 21:39:04 +08:00
- 使用方法:`execute if score fz.logger.level fz.variable.integer matches 500.. run tellraw @a [{"nbt": "fz.level.info", "interpret": true, "storage": "fz:logger"}, {"text": "你的日志"}`
2022-06-27 18:18:41 +08:00
#### 提醒 Alert
- 等级600
2022-06-27 21:39:04 +08:00
- 使用方法:`execute if score fz.logger.level fz.variable.integer matches 600.. run tellraw @a [{"nbt": "fz.level.alert", "interpret": true, "storage": "fz:logger"}, {"text": "你的日志"}`
2022-06-27 18:18:41 +08:00
#### 意外 Exception
###### 暂不提供
#### 错误 Error
- 等级800
2022-06-27 21:39:04 +08:00
- 使用方法:`execute if score fz.logger.level fz.variable.integer matches 800.. run tellraw @a [{"nbt": "fz.level.error", "interpret": true, "storage": "fz:logger"}, {"text": "你的日志"}`
2022-06-27 18:18:41 +08:00
## 功能模块
2022-06-27 18:51:34 +08:00
### 配置模块
2022-06-27 19:42:11 +08:00
- 标签`tags/functions/module/config/timeout`:超时时的操作
- 标签`tags/functions/module/config/reset_trigger`:重置玩家`@s`的触发器计分板
2022-06-27 18:18:41 +08:00
#### 按钮操作
1. 定义一个显示按钮时执行的函数,使用形如`tellraw @s {"text": "[按钮]", "clickEvent": {"action": "run_command", "value": "/trigger fz.module.config.trigger set <触发器分数>"}}`的指令定义按钮。**大多数情况下这里的触发器分数必须是独一无二的**
2. 在`tags/functions/module/config/display`标签中注册
3. 定义一个点击按钮时执行的函数,使用形如`execute if score @s fz.module.config.trigger matches <min>..<max> run ...`的指令判断玩家的触发器分数,并执行你的操作
4. 在`tags/functions/module/config/on_click`标签中注册上述函数
2022-06-27 18:51:34 +08:00
### 计分板模块
2022-06-27 18:18:41 +08:00
#### 自定义计分板颜色
2022-06-27 18:51:34 +08:00
- 数据包提供了所有计分板的全部16色命名函数
2022-06-27 19:39:05 +08:00
- 使用方法:**覆盖**`tags/functions/module/scoreboard/display/set_text/<计分板名称>`标签,填入`functions/module/scoreboard/display/set_text/<计分板名称>/<颜色名称>`函数
2022-06-27 18:51:34 +08:00
2022-06-27 18:18:41 +08:00
#### 自定义计分板名称
2022-06-27 23:54:44 +08:00
1. 定义一个设置计分板颜色、文本的函数,格式可以参考`functions/module/scoreboard/display/set_text/general/*`函数
2022-06-27 19:39:05 +08:00
2. **覆盖**`tags/functions/module/scoreboard/display/set_text/<计分板名称>`标签,填入上述函数
2022-06-27 18:51:34 +08:00
2022-06-27 18:18:41 +08:00
#### 扩展自己的计分板
2022-06-27 19:39:05 +08:00
1. 定义一个创建计分板的函数,参考`functions/module/scoreboard/display/create`函数
2. 在`tags/functions/module/scoreboard/display/create`标签中注册该函数
3. 按照“自定义计分板颜色”和“自定义计分板名称”中的操作,定义你的计分板颜色和名称
2022-06-27 23:54:44 +08:00
4. 定义一个生成计分板运行时id的函数参考`functions/module/scoreboard/display/register_id`函数
2022-06-27 19:39:05 +08:00
5. 在`tags/functions/module/scoreboard/display/register_id`标签中注册该函数
2022-06-27 23:54:44 +08:00
6. 定义一个用来在轮播时显示你的计分板的函数,参考`functions/module/scoreboard/display/carousel/set_display/*`函数
7. 定义一个用来判断在轮播时是否轮到你的计分板的函数,在判断后调用上一条中的函数,参考`functions/module/scoreboard/display/carousel/try_display/*`函数
2022-06-27 19:39:05 +08:00
8. 将该函数注册到`tags/functions/module/scoreboard/display/try_display`标签中