跳转至

方块状态

方块状态(Block State)是方块用于描述自身可变形态的一组有限取值属性。方块状态使同一种方块能够在不拆分为多个标识符的前提下表示朝向、半砖位置、含水状态、连接状态等差异。

概述

每个方块状态都有一个名称和一个固定的值域。一个方块在世界中的实际形态由其标识符和所有方块状态的当前取值共同决定。例如,楼梯方块需要记录朝向、上下半部、内外角等状态;门需要记录朝向、开关状态、铰链侧和上下半部等状态。

方块状态只适合表达有限、离散、直接影响方块行为或外观的属性。对于告示牌文本、箱子物品列表、酿造进度等大量或结构化数据,应使用方块实体存储,而不是使用方块状态。

在数据驱动方块定义中,自定义方块状态的名称应使用赋命名空间标识符格式。状态值通常写为布尔值、字符串或数字的可选值列表,也可以写为整数连续范围。状态一旦被声明,其值域便固定下来,世界中的方块只能在该值域内切换。

方块置换

同一个方块的所有状态取值组合构成该方块的不同方块置换。游戏内部通常以方块置换作为方块完整状态的实际表示,因此方块状态的数量和值域会直接影响一个方块可能产生的置换数量。

过多的方块状态会扩大置换集合,使定义文件更难维护,也可能增加运行时处理成本。自定义方块在设计状态时应优先保留真正需要由引擎识别和同步的属性。

原版方块状态

原版方块使用大量由游戏定义的方块状态。常见状态包括:

  • minecraft:cardinal_direction:水平四向朝向。
  • minecraft:facing_direction:六面朝向。
  • minecraft:block_face:方块附着的面。
  • minecraft:vertical_half:上半或下半。
  • minecraft:corner:楼梯等转角形态。
  • minecraft:connection_north等连接状态:四个水平方向的连接结果。
  • minecraft:multi_block_part:多方块结构中的部件位置。
  • waterlogged或同类含水状态:方块是否与水共存。

这些状态的名称、值域和行为由游戏引擎定义。部分原版状态可以通过方块特质由自定义方块复用。

自定义方块状态

自定义方块可以在行为包的方块定义文件中声明自定义方块状态,并在置换条件中读取这些状态。自定义状态通常用于在一个方块标识符下表达若干种外观或行为变体,例如机器的朝向、开关状态或样式编号。

自定义方块状态并不自动改变方块的行为。状态本身只是数据;具体的组件、几何体、材质、碰撞箱或事件响应需要通过方块置换等机制与状态取值关联。由方块特质启用的原版状态也会与自定义状态一同参与置换计算。

与命令和脚本的关系

命令系统在设置或检测方块时可以使用方块状态限定目标方块。脚本API也提供了读取和构造方块置换的接口,使脚本能够根据方块状态判断世界中的方块形态。

方块状态通常会随区块数据保存,并在客户端和服务端之间同步。由于它属于世界状态的一部分,已经放置在世界中的方块状态变更会直接影响该位置方块的实际表现。