完整版BedrockWiki镜像!
This commit is contained in:
74
docs/wiki/blocks/avoiding-state-limit.md
Normal file
74
docs/wiki/blocks/avoiding-state-limit.md
Normal file
@@ -0,0 +1,74 @@
|
||||
---
|
||||
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个以上的状态值),您可以获得更多可能的组合结果。
|
||||
:::
|
||||
Reference in New Issue
Block a user