Files
netease-modsdk-wiki/docs/wiki/blocks/avoiding-state-limit.md
2025-03-20 11:52:46 +08:00

74 lines
2.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: 规避状态值上限
category: 巧思案例
tags:
- 专家
mentions:
- Kaioga5
- QuazChick
---
# 规避状态值上限
<!--@include: @/wiki/bedrock-wiki-mirror.md-->
## 前言
方块每个状态最多只能拥有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个字母的映射。可用组合值越多状态上限的扩展空间就越大。
## 实际应用
参照上述示例,您的状态定义应如下所示:
::: code-group
```json [minecraft:block > description]
"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个以上的状态值您可以获得更多可能的组合结果。
:::