Function、Advancements、Loot table独立模块发布标准 1.0

FaLimps 1.0 (limp是蹩, 这是smg简写啦)

订立标准原因

统一function、advancements、loot table的大致架构以及命名标准,方便发布相关模块、避免冲突。

架构

+ 模块名称
    + functions
        + init.mcfunction
        + main.mcfunction
        + ...
    + advancements或loot_tables
        + ...
    + mc_advancements或mc_loot_tables
        + ...

functions、advancements及loot_tables里的档案会放在模块名称的命名空间之下
mc_advancements及mc_loot_tables内的档案会放在minecraft命名空间之下

init.mcfunction为模块初始化的命令,包括如添加objective、设置分数等
main.mcfunction为每游戏刻之下一次的命令,如同以前的高频系统

注意: init及main都会被外面的命令调用,不需要亦不应使用advancements执行或修改gameLoopFunction执行
系统不能在高频期间更改需要高频执行的命令,因此如需更改高频执行的命令,请把不同系统写在不同的function,并放置实体储存资讯,在main里使用 function (name) if (实体) 调用模块

init详细要求

为了避免发生命名冲突,init.mcfunction里应当列出名称前缀及scoreboard objective名称

除了objective及team以外的都需要加上前缀,如”pca_test”,前缀需在init.mcfunction以 ‘#prefix: (前缀)’的方式写出,如’#prefix: pca_’
objective和team则不必须加上前缀(但仍然建议加上前缀或其他标识避免碰撞),需在init.mcfunction里进行添加,以方便检查冲突,如’scoreboard objectives add abc dummy’

命名标准

命名空间(namespace)

玩家/组织名-系统名称
玩家名可以使用昵称
全部必须小写, 并且以 _ 分割单词, 名称可用字符为 a-z0-9_
- 字符只能用作分隔作者和系统名称(只能出现一次)

cbl-pig_flypca-test1

文件夹及文件

全部必须小写, 并且以 _ 分割单词, 可用字符为 a-z0-9_

不建议使用拼音

Tag, Name, Team, Scoreboard objective

前二者应加上前缀,如 “pca_test”。这种情况下前缀为 “pca_”
后两者建议加上前缀,但当长度不足的时候也可以不写前缀

整合方法

  1. 先检查所有init.mcfunction查看是否有命名冲突,有则停止并要求用户自行整理
  2. 把文件放到相应路径,并且在system:init及system:main加入调用不同模块的init及main的命令
  3. 生成system/start.mcfunction,内容参见下方部分
  4. 生成system/start.json advancement,内容参见下方部分

system/start.mcfunction:

scoreboard objectives add sys_start dummy
scoreboard players set @s sys_start 0
stats entity @s set QueryResult @s sys_start
gamerule sys_start
function system:init if @s[score_sys_start=0]
gamerule sys_start 1

system/start.json (advancement)

{"criteria":{"a":{"trigger":"minecraft:tick"}},"rewards":{"function":"system:start"}}