方块状态指令
基本信息
| 属性 | 值 |
|---|---|
| 指令 | /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
blockstatecommand 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 格式化,因此 数字格式化配置 会影响本指令的数值显示。