方块排列组合
:::提示 格式与最低引擎版本 1.21.70 在学习方块排列组合之前,您应当熟练掌握方块状态的相关知识。
使用方块状态时,请确保资源包清单中的min_engine_version为1.20.20或更高版本。 :::
什么是排列组合?
方块排列组合表示每个方块可能具有的所有状态值配置组合。
例如,如果您添加了一个包含两个布尔状态的自定义方块...
minecraft:block
json
"description": {
"identifier": "wiki:permutations_example",
"states": {
"wiki:first_state": [false, true],
"wiki:second_state": [false, true]
}
}...那么游戏中将会生成以下4种方块排列组合:
| 方块标识符 | wiki:first_state | wiki:second_state |
|---|---|---|
| wiki:permutations_example | false | false |
| wiki:permutations_example | true | false |
| wiki:permutations_example | false | true |
| wiki:permutations_example | true | true |
要计算方块拥有的排列组合数量,只需将所有状态的有效值数量相乘。 例如上述案例的计算公式为2×2,表示该方块具有4种排列组合。
常见误解
- 所有方块都具有排列组合,即使没有状态的方块也有1种仅由方块标识符构成的排列组合
- 方块排列组合数量取决于其拥有的状态数量,而非
permutations数组中的条目数
条件化应用组件
通过permutations数组,可以根据方块当前的排列组合状态来条件化地应用组件(包括标签)。
permutations数组中的组件可以覆盖方块的基础组件以及其他组件列表。数组中最靠后的组件列表具有最高优先级。
该功能自实验性玩法Holiday Creator Features开放,适用于1.19.70及以上格式版本。
BP/blocks/custom_block.json
json
{
"format_version": "1.21.70",
"minecraft:block": {
"description": {
"identifier": "wiki:custom_block",
"states": {
"wiki:integer_state_example": [2, 4, 6, 8],
"wiki:boolean_state_example": [false, true],
"wiki:string_state_example": ["red", "green", "blue"]
}
},
"components": {},
"permutations": [
{
"condition": "q.block_state('wiki:integer_state_example') == 2",
"components": {
"minecraft:friction": 0.1
}
},
{
"condition": "q.block_state('wiki:boolean_state_example')",
"components": {
"minecraft:friction": 0.8 // 将覆盖前一个排列组合
}
},
{
"condition": "q.block_state('wiki:string_state_example') == 'red' && !q.block_state('wiki:boolean_state_example')",
"components": {
"minecraft:geometry": "geometry.pig"
}
}
]
}
}排列组合条件
当条件表达式结果为真值(非false或0)时,对应的组件列表将被应用。
排列组合条件需以Molang表达式字符串编写,且具有严格限制:
- 条件只能基于方块的排列组合状态,因此只能使用
q.block_state查询函数 - 这意味着条件表达式不能产生副作用
- 禁止使用以下数学函数:
math.die_roll、math.die_roll_integer、math.random、math.random_integer - 不能对变量(包括临时变量)进行赋值操作
- 禁止使用以下数学函数:
c
q.block_state('wiki:integer_state_example') < 6 && !q.block_state('wiki:boolean_state_example')排列组合限制
与其他方块特性类似,Mojang设置了以下限制来防止异常行为。
单个方块上限
每个方块最多不能超过65,536种排列组合(相当于4个状态且每个状态有16个值)。 超出限制将导致内容日志报错,并使部分状态无法应用于您的方块。
世界总量上限
单个世界注册的方块排列组合总数(无需实际放置)建议不超过65,536种。 超出限制时会出现以下内容日志警告:
包含超过65536种方块排列组合的世界可能会影响性能。当前世界已注册XXXXX种排列组合。
贡献者
编辑 方块排列组合本页面上的文本和图像内容根据 知识共享署名 4.0 国际许可协议
本页中的代码示例根据 MIT 许可证

