跳到正文
烈焰甘蔗Wiki

Extended Facing 对齐系统

基本信息

属性 值
核心枚举 com.gtnewhorizon.structurelib.alignment.enumerable.ExtendedFacing
辅助枚举 Rotation、Flip
接口 com.gtnewhorizon.structurelib.alignment.IAlignment
限制接口 IAlignmentLimits / AlignmentLimits

这是 StructureLib 表示"一个多方块结构件朝哪个方向、怎么转、怎么翻"的模型,比原版方块的 16 个 metadata 表达力强得多。

状态数量

对齐状态是 方向 × 旋转 × 翻转 的组合:

维度 取值 数量
方向(ForgeDirection) 下、上、北、南、西、东 6
旋转(Rotation) 无、顺时针 90°、180°、逆时针 90° 4
翻转(Flip) 无、水平、垂直、两者 4

合计 96 种状态,即 ExtendedFacing.STATES_COUNT 为 96,语言文件中也有 structurelib.facing.0 到 structurelib.facing.95 共 96 条名称。默认值是 NORTH_NORMAL_NONE(北 / 无旋转 / 无翻转)。

组合索引由 IAlignment.getAlignmentIndex 计算为 (方向序号 × 4 + 旋转序号) × 4 + 翻转序号。

IAlignment 接口

方块实体通过实现 IAlignment 暴露自身的对齐状态。工具交互相关的方法:

方法 作用
toolSetRotation(rotation) 传 null 时循环尝试下一个旋转;传具体值时直接尝试该值
toolSetFlip(flip) 传 null 时循环尝试下一个翻转;传具体值时直接尝试该值
isNewExtendedFacingValid / isNewRotationValid / isNewFlipValid 由方块自己实现的合法性判定
canSetToDirectionAny(direction) 该方向下是否存在任一合法状态

参数为 null 时的遍历是双重循环:先按翻转序号外层递增,再按旋转序号内层递增(内层起点是当前值 +1),逐个尝试直到某个状态通过合法性检查;全部失败返回 false。

这两个方法的默认实现都在 IAlignment 里,因此方块实体只需实现合法性判定方法即可获得完整的工具行为。对应的触发物品是 Front Rotation Tool。

IAlignmentLimits

用于限制允许的状态组合,是一个函数式接口 (direction, rotation, flip) -> boolean。预置常量:

常量 允许的范围
UNLIMITED 全部 96 种
UPRIGHT 方向无 Y 分量,即仅水平四向
NOT_UPSIDE_DOWN direction.offsetY != 0,即仅上下两向
FACING_UP 仅 ForgeDirection.UP

另有 allowOnly(ExtendedFacing...) 与 denyOnly(ExtendedFacing...) 两个静态工厂方法,以及一个 Builder(含 allowAll() / denyAll() 起点)用于组合更复杂的规则。

方向转换

ExtendedFacing.FOR_FACING 是一个 ForgeDirection → List<ExtendedFacing> 的映射,把 96 种状态按其方向分组,便于对某一朝向下的所有候选状态做遍历检查。

ExtendedFacing 还维护 NAME_LOOKUP(按名称反查),语言键 structurelib.facing.<0..95> 提供人类可读名,例如 down normal none、east counter clockwise。

相关条目:AlignmentUtility、Front Rotation Tool。

浏览全部模组