规避状态值限制
expert
前言
每个方块状态最多只能有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个字母的表示。可组合的数值越多,状态值的上限就越高。
代码示例
参考上述示例,状态值定义如下:
minecraft:block > description
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个组合值来获得更多可能的组合方式。

