附加包教程:15.方块(四)
前言
上期,我们学习了所有我已知的方块事件方法。但我们还没有学习方块文档的高级写法——定义方块状态和方块状态决定的组件(方块排列)。这期,我们就来学习它们。
基本结构
它们分别使用description下states和与description同级的permutations决定。请看代码示例。
{
"format_version": "1.21.0",
"minecraft:block": {
"description": {
"identifier": "test_pack:test_block",
"states": {
"test_pack:state_a": [ //这里的test_pack:state_a就是状态名称。状态有3种,这是第一种,布尔值,就是单纯的真或假。
true, //真
false //假
],
"test_pack:state_b": [ //这是第二种,指定文本。
"option_a", //选项1
"option_b", //选项2
"option_c" //选项3
],
"test_pack:state_c": [ //这是第三种,指定数字。这时数字要介于0-15之间。
0,
1,
2,
3
]
}
},
"components": {不要在意这些细节},
"events": {不要在意这些细节},
"permutations": [ //在意这里就对了!这里用于存放在哪个状态下方块该拥有哪个组件。
{ //一个项目
"condition": "q.block_state('test_pack:state_a') == true", //条件,使用了Molang表达式,这个的意思是查询方块状态test_pack:state_a是否为真,如果是,就应用下面的这些组件来代替原本的组件。
"components": {...} //这里写在这个情形下的组件,用来代替原本的组件。如果原本有一个组件,这里有一个相同的组件,则后者覆盖前者。如果这里有一个原本没有的组件,会直接加上这个组件。如果原本有一个这里没有的组件,原本的组件继续生效。简而言之,这里只能替换和增加组件,不能删除原本的组件。
},
{ //又一个项目
"condition": "q.block_state('test_pack:state_b') == 'option_a'", //意思是,查询方块状态test_pack:state_b是否是“option_a”,如果是,就应用下面的这些组件来代替原本的组件。
"components": {...}
},
{ //又是一个项目
"condition": "q.block_state('test_pack:state_c') == 0", //意思是,查询方块状态test_pack:state_c是否为0,如果是,就应用下面的这些组件来代替原本的组件。
"components": {...}
}
]
}
}
::: info 提示
以下内容为高级使用方法,建议先掌握基础的 states 与 permutations。
:::
高级内容:Molang 表达式
states 和 permutations 的用法我们已经讲完,这一段我们来说说 Molang 表达式。
所谓 Molang,就是一种简单的基于表达式的语言,旨在运行时快速、数据驱动地计算值,并与游戏中的值和系统直接相连。
它的重点是:
使像动画这样的低级系统支持内部和外部创作者的灵活的数据驱动行为,同时保持高性能。
官网链接
—— 抄官网 ing...
::: info 提示
以下内容为高级使用方法,建议先掌握基础的 states 与 permutations。
:::
高级内容:Molang 表达式
states 和 permutations 的用法我们已经讲完,这一段我们来说说 Molang 表达式。
所谓 Molang,就是一种简单的基于表达式的语言,旨在运行时快速、数据驱动地计算值,并与游戏中的值和系统直接相连。
它的重点是:
使像动画这样的低级系统支持内部和外部创作者的灵活的数据驱动行为,同时保持高性能。
—— 抄官网 ing...
嗯,既然官网都说了 Molang “是一种简单的基于表达式的语言”,其实它真的不怎么难
我们使用 Molang 时,大部分情况都是:
query.xxx(a, b)
:常用的 查询函数,应用最广。variable.xxx
:在地物和实体动画文档里比较常见。math.xxx(a, b)
:数学计算,动画中会大量用到。context.xxx
:主要出现在物品与动画文档中。
其实重点只需要掌握:
a == b // a 等于 b
a != b // a 不等于 b
a + b // 相加
a - b // 相减
a * b // 相乘
a / b // 相除
其余的就是:
- 疯狂翻官方文档!
- 查询函数的列表非常长,包括:
- 时间、天数
- 玩家生命值、物品耐久
- 月相、视角、位置等等
可惜全是英文,想好好用就得配合好一点的翻译器了……有点麻烦。
::: warning 注意
虽然 Molang 简单易用,但其 表达式结构 和 作用域上下文 在不同的文档类型中差异较大,务必对照官方示例进行测试。
:::
总结
这一期,我们学习了方块状态和它衍生出来的控制方块组件的功能。关于方块的学习即将结束,
至于方块的实战运用,与物品大同小异,都是拼命地复制粘贴那些状态、组件和事件,我就不多说了。
从一开始以来,我们学习了配方、函数、功能域、迷雾、物品、方块、模型和战利品表,这么多内容。
是时候了,我们下期就来学习子包。