Function、Advancements、Structures、Loot table独立模块发布标准 1.4
订立标准原因
统一function、advancements、structure、loot table的大致架构以及命名标准,方便发布相关模块、避免冲突。
架构
文件架構
+ 模块名称
+ functions
+ init.mcfunction
+ main.mcfunction
+ ...
+ advancements或loot_tables或structures
+ ...
+ mc_advancements或mc_loot_tables
+ ...
+ resources.zip (这并不是标准的一部分)
- functions:
- 存放 模块 内的function文件。 整合时会把内容放在
存档/data/functions/(模块名称)
内 - advancements:
- 存放 模块 内的advancement文件 整合时会把内容放在
存档/data/advancements/(模块名称)
内 - loot_tables:
- 存放 模块 内的loot_table文件 整合时会把内容放在
存档/data/loot_tables/(模块名称)
内 - structures:
- 存放 模块 内的structure文件 整合时会把内容放在
存档/structures/(模块名称)
内 - mc_advancements:
- 存放需要 覆盖原版 的advancement文件 整合时会把内容放在
存档/data/advancements/minecraft
内 - mc_loot_tables:
- 存放需要 覆盖原版 的loot_table文件 整合时会把内容放在
存档/data/loot_tables/minecraft
内
- init.mcfunction:
- 模块初始化 的命令,包括如添加objective、设置分数等 也包括一些标记,来告诉用户 使用了什么名称 和有什么 依赖项 ,这会在下方仔细描述 会被外面的命令调用, 不需要亦不应 使用advancements执行或修改gameLoopFunction执行
- main.mcfunction:
- 每游戏刻之下一次的命令,如同以前的 高频系统 会被外面的命令调用, 不需要亦不应 使用advancements执行或修改gameLoopFunction执行 由于一个实体的stats只能绑定到一个obj,因此如果需要 绑定stats ,请在 main进行绑定 而不是在init进行绑定,避免别人重新绑定时刷掉了又不知道。
init详细要求
命名
为了避免发生命名冲突,init.mcfunction里应当列出名称前缀及scoreboard objective/team名称
除了objective及team以外名称(如实体名称, tag)的都需要 加上前缀 ,如
pca_test
,前缀需在init.mcfunction以 #prefix:
(前缀)的方式写出,如 #prefix: pca_
objective和team则不必须加上前缀 (但仍然建议加上前缀或其他标识避免碰撞),需在 init.mcfunction里进行添加 ,以方便检查冲突,如 scoreboard objectives add abc dummy
对于 共用的objective(dummy) ,请写上 #common obj: (名称)
依赖
如果模组 需要使用别的模组提供的功能、名称 ,则需要标记该目标模组为 依赖项。 语法:
#depends: (依赖项模组名称)
。当依赖项名称更改时同时也会更改这模组里的指定名称。
容许多重依赖,也容许循环依赖。(如a->b->c->d->a, ->代表左依赖右)
模组 禁止与依赖项发生命名冲突命名标准
模组名称(命名空间, namespace)
玩家/组织名-系统名称
玩家名可以使用昵称
全部必须小写, 并且以
_
分割单词, 名称可用字符为 a-z0-9_
-
字符只能用作分隔作者和系统名称(只能出现一次)文件夹及文件
全部必须小写, 并且以
_
分割单词, 可用字符为 a-z0-9_
不建议使用拼音
Tag, Name, Team, Scoreboard objective
Tag及实体名称应加上前缀 ,如
pca_test
。这种情况下前缀为 pca_
Team及Objective名称建议加上前缀 ,但当长度不足的时候也可以不写前缀(因为长度限制为16个字符)
前缀 建议长度为3-5个字符 (不少于三个字符)针对队伍名称及objective名称,建议使用 最少两个英文字的组合 或 加上前缀 ,尽量 与一般字词分开 ,方便用户寻找并替换
整合方法
这是使用的时候如何整合那堆模组(放心,会有软件的,写ing)
- 先检查所有init.mcfunction查看是否有命名冲突,有则停止并要求用户自行整理
- 把文件放到相应路径,并且在system:init及system:main加入调用不同模块的init及main的命令
- 生成system/start.mcfunction,内容参见下方部分
- 生成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"
}
}
例子
感谢SYL写的例子: http://pan.baidu.com/s/1ge6Y9ft
最后
感谢SYL、玄素、秋一、花叔、野子以及新手群内的诸位对此标准提供意见
希望各位做模组的时候能跟从本标准,方便同时使用多个模组以及排除冲突。
如果大家有任何意见/疑问,欢迎回复一起讨论