方块状态指令

基本信息

属性 值
指令 /blockstate
类 com.gtnewhorizon.gtnhlib.blockstate.command.BlockStateCommand(extends CommandBase)
源码 src/main/java/com/gtnewhorizon/gtnhlib/blockstate/command/BlockStateCommand.java
别名 无(getCommandAliases() 返回空 ArrayList)
注册时机 CommonProxy.serverStarting(),无条件注册
服务端 允许(可 set 属性)

功能

检查并修改 GTNHLib 方块状态系统(blockstate)中某个方块的属性值。README 的描述(README.md Block State 节):

Includes a blockstate command to inspect state at a position.

用法字符串(BlockStateCommand.java:37):

/blockstate <get|set> [property name] [property value]
子动作 用途
get 读取瞄准位置方块的属性值
set 修改属性值(需 OP)

目标位置由玩家视线命中确定,代码用 MovingObjectPosition 与 MovingObjectType(BlockStateCommand.java:18)。

方块状态系统

指令只是 blockstate 包(25 个类)的一层壳,核心是可编程的方块属性注册表:

组件 类
属性注册表 blockstate/registry/BlockPropertyRegistry.java
属性工厂 blockstate/registry/BlockPropertyFactory.java
预置属性类型 BooleanBlockProperty、IntegerBlockProperty、FloatBlockProperty、AxisBlockProperty、DirectionBlockProperty、OrientationBlockProperty
原版方块属性初始化 blockstate/init/VanillaBlockProperties.java
初始化入口 blockstate/init/BlockPropertyInit.java(CommonProxy.java:86 调用)

BlockPropertyRegistry 提供 9 个 registerProperty / registerBlockItemProperty 重载,接受 Block、Item、Block+meta、Item+meta 或 ImmutableBlockMeta / ImmutableItemMeta,并可指定默认值。README 概述:

Register custom block properties: boolean, int, enum, direction, axis, and orientation. Pack and read property values from block metadata, so blocks behave like modern block states on 1.7.

即 1.7.10 上用 metadata 模拟现代 blockstate。

数值

数值名 值
blockstate 包类数 25
预置属性类型 6(boolean / integer / float / axis / direction / orientation)
registerProperty 重载 6
registerBlockItemProperty 重载 2
指令子动作 2(get、set)
注册条件 无条件(enableTeamCommands 之类的开关不作用于本指令)

BlockPropertyInit.init() 在 CommonProxy.preInit() 中调用(CommonProxy.java:86),早于指令可用。

交互

set 分支的错误处理是双通道的(BlockStateCommand.java:150-153)——既记录日志也回消息给玩家,不静默失败:

} catch (Throwable t) {
    GTNHLib.LOG.error("Error setting property {}", name, t);
    sendErrorToPlayer(player, "Error setting property: " + t.getMessage());
}

BlockPropertyTrait 的静态导入(BlockStateCommand.java:3)说明属性可携带 trait 标记,指令据此渲染/校验。

输出经 NumberFormatUtil 格式化,因此 数字格式化配置 会影响本指令的数值显示。

相关条目