fz-survival-datapack/DEVDOC.md
延皓 da7af9fc83 完善所有剩余功能,后续bug修复后即准备发布正式版并向下移植
- 将命名空间改为“fzsd”
- 完善交互器
- 添加管理员命令(/function admin.fzsd:<...>)
- 添加启动函数,用于自动升级等功能
- 添加重装、深度安装、深度卸载、深度重装函数
2022-07-30 16:34:38 +08:00

7.0 KiB
Raw Blame History

开发文档

指引

  • 函数,指数据包<命名空间>/functions目录下的.mcfunction文件
  • 标签,指数据包<命名空间>/tags目录下的.json文件
    • 覆盖标签并填入函数时,replacetrue
    {
        "replace": true,
        "values": ...
    }
    
    • 向标签中注册函数时,replacefalse
    {
        "replace": false,
        "values": ...
    }
    

基本要求

  • 接口逻辑和模块逻辑分离
  • 函数由两个以上的函数调用,或由不同包下的函数调用,或需要作为接口开放给下游数据包时,应改用标签调用!
  • 函数调用尽量不要使用function命令,应改在标签中按顺序调用!

未来计划

  • 细化版本管理,提供不同版本之间的升级函数,由update_manager控制。务必仔细测试再发布,一旦升级无法降级!
  • playerdata相关功能

系统模块

频繁使用的计算单元

事件模块

日志模块

  • 仓库中提供了日志相关的代码片段,位于.vscode/settings.json
  • 暂时没有找到方法在服务端控制台打印日志,但会被记录在客户端

详细 Fine

  • 等级300
  • 使用方法:execute if score fzsd.logger.level fzsd.variable.integer matches ..300 run tellraw @a [{"nbt": "fzsd.level.fine", "interpret": true, "storage": "fzsd:logger"}, {"text": "你的日志"}

调试 Debug

  • 等级400
  • 使用方法:execute if score fzsd.logger.level fzsd.variable.integer matches ..400 run tellraw @a [{"nbt": "fzsd.level.debug", "interpret": true, "storage": "fzsd:logger"}, {"text": "你的日志"}

信息 Info

  • 等级500
  • 使用方法:execute if score fzsd.logger.level fzsd.variable.integer matches ..500 run tellraw @a [{"nbt": "fzsd.level.info", "interpret": true, "storage": "fzsd:logger"}, {"text": "你的日志"}

提醒 Alert

  • 等级600
  • 使用方法:execute if score fzsd.logger.level fzsd.variable.integer matches ..600 run tellraw @a [{"nbt": "fzsd.level.alert", "interpret": true, "storage": "fzsd:logger"}, {"text": "你的日志"}

意外 Exception

暂不提供

错误 Error

  • 等级800
  • 使用方法:execute if score fzsd.logger.level fzsd.variable.integer matches ..800 run tellraw @a [{"nbt": "fzsd.level.error", "interpret": true, "storage": "fzsd:logger"}, {"text": "你的日志"}

功能模块

交互器模块

按钮操作

  1. 定义一个显示按钮时执行的函数,使用形如tellraw @s {"text": "[按钮]", "clickEvent": {"action": "run_command", "value": "/trigger fzsd.module.config.trigger set <触发器分数>"}}的指令定义按钮。
    • 触发器分数为正数会重新向玩家发送交互按钮,如不想重新发送,请使用负数
    • 大多数情况下这里的触发器分数必须是独一无二的
    • 建议使用>10000的随机数作为自定义按钮的触发器分数
  2. #fzsd:module/config/display标签中注册上述函数
  3. 定义一个点击按钮时执行的函数,使用形如execute if score @s fzsd.module.config.trigger matches <min>..<max> run ...的指令判断玩家的触发器分数,并执行你的操作
  4. 如需在点击后重新显示一遍配置页面,请在上述函数中调用一次#fzsd:module/config/display标签,请不要将此标签直接注册到#fzsd:module/config/on_click标签中
  5. #fzsd:module/config/on_click标签中注册上述函数

其他接口

计分板模块

自定义计分板颜色

自定义计分板名称

  1. 定义一个设置计分板颜色、文本的函数,格式可以参考fzsd:module/scoreboard/display/set_text/general/*函数
  2. 覆盖#fzsd:module/scoreboard/display/set_text/<计分板名称>标签,填入上述函数

扩展自己的计分板

  1. 定义一个安装函数,参考fzsd:module/scoreboard/install函数
  2. #fzsd:module/scoreboard/install标签中注册该函数
  3. 按照“自定义计分板颜色”和“自定义计分板名称”中的操作,定义你的计分板颜色和名称
  4. 定义一个生成计分板运行时id的函数参考fzsd:module/scoreboard/display/register_id函数
  5. #fzsd:module/scoreboard/display/register_id标签中注册该函数
  6. 定义一个用来在轮播时显示你的计分板的函数,参考fzsd:module/scoreboard/display/carousel/set_display/*函数
  7. 定义一个用来判断在轮播时是否轮到你的计分板的函数,在判断后调用上一条中的函数,参考fzsd:module/scoreboard/display/carousel/try_display/*函数
  8. 将该函数注册到#fzsd:module/scoreboard/display/try_display标签中

自定义模块

注册安装、卸载、加载函数

注册交互器按钮