Skip to content

规避状态值上限

本页面镜像自
BedrockWiki

根据原始项目协议授权。本文经过AI翻译处理,如有内容遗漏,可以提交PR进行补充。

前言

方块每个状态最多只能拥有16个有效状态值。本指南将解释如何避免触及这个上限。

TIP

本教程不会直接展示如何突破16个状态值的限制,但通过以下方法可以模拟实现类似效果!

实现原理

该方法通过组合两个或多个状态值进行复用,并在排列组合或条件判断中读取这些组合值。例如,一个需要表示26个英文字母的方块,可以通过数值组合的方式减少状态值数量。

逻辑推演

以下示例代码演示了如何通过组合实现字母映射:

1 & 1 = A   1 & 5 = E   1 & 9 =  I   1 & 13 = M
1 & 2 = B   1 & 6 = F   1 & 10 = J
1 & 3 = C   1 & 7 = G   1 & 11 = K
1 & 4 = D   1 & 8 = H   1 & 12 = L

继续扩展:

2 & 1 = N   2 & 5 = R   2 & 9 =  V   2 & 13 = Z
2 & 2 = O   2 & 6 = S   2 & 10 = W
2 & 3 = P   2 & 7 = T   2 & 11 = X
2 & 4 = Q   2 & 8 = U   2 & 12 = Y

通过这种组合方式,仅需15个状态值即可实现26个字母的映射。可用组合值越多,状态上限的扩展空间就越大。

实际应用

参照上述示例,您的状态定义应如下所示:

json
"states": {
  "wiki:value": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13],
  "wiki:division": [1, 2]
}

对应的条件判断语句应如下编写:

json
"condition": "q.block_state('wiki:division') == 1 && q.block_state('wiki:value') == 1"
json
"condition": "q.block_state('wiki:division') == 1 && q.block_state('wiki:value') == 2"

知识总结

您已掌握如何通过状态值组合突破64个状态值的限制,使用更少的资源实现更复杂的逻辑。

TIP

通过增加组合维度(使用2个以上的状态值),您可以获得更多可能的组合结果。