fz-survival-datapack/DEVDOC.md
2022-06-27 15:56:21 +00:00

4.9 KiB
Raw Blame History

开发文档

指引

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

基本要求

  • 主要逻辑和模块逻辑分离
  • 函数由两个以上的函数调用,或由不同包下的函数调用,或需要作为接口开放给下游数据包时,应改用标签调用!

未来计划

  • 细化版本管理,提供不同版本之间的升级函数,由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/*函数
  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标签中