fz-survival-datapack/DEVDOC.md
2022-06-27 19:42:11 +08:00

82 lines
4.4 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.

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