You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

1.20 Minecraft Forge床模型与边界盒对齐异常问题

问题分析与解决方案

核心问题定位

这种朝向依赖的偏移问题,大概率是方块状态(BlockState)中FACING属性的旋转逻辑和模型/VoxelShape的旋转基准不匹配导致的。Forge里,方块模型的旋转通常以自身局部坐标系为基准,但朝向北/西时,部分旋转计算可能把全局坐标和局部坐标搞混,直接导致模型偏移一格。

具体修复步骤

1. 修正VoxelShape的旋转逻辑

别给不同朝向硬编码坐标,先定义一个局部空间的基础形状,再根据FACING统一旋转,避免全局偏移错误:

// 定义局部空间的基础碰撞盒(0-16范围,对应方块自身空间)
private static final VoxelShape BASE_BED_SHAPE = Block.box(0, 0, 0, 16, 10, 15);

@Override
public VoxelShape getShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) {
    Direction facing = state.getValue(FACING);
    // 根据朝向旋转基础形状,用Forge提供的Rotation工具类
    return VoxelShapes.rotate(BASE_BED_SHAPE, Rotation.getRotation(facing));
}

如果之前是给北/西朝向硬加了坐标偏移(比如z轴从1开始),直接删掉这种写法,统一用旋转逻辑。

2. 检查模型的旋转配置

如果用的是JSON模型,确保variants里的旋转只绑定FACING的角度,别加多余的translation:

{
  "variants": {
    "facing": {
      "north": {"rotation": {"y": 180}},
      "south": {"rotation": {"y": 0}},
      "west": {"rotation": {"y": 270}},
      "east": {"rotation": {"y": 90}}
    }
  }
}

要是模型里写了"translation": [1,0,0]这类偏移,直接删掉——错误的平移会在旋转时叠加,导致北/西朝向时偏移一格。

3. 验证放置时的FACING赋值

检查方块放置时的朝向设置,别搞反方向:

@Override
public BlockState getStateForPlacement(BlockPlaceContext context) {
    // 这里的getOpposite()是否符合你的需求?如果搞反了,朝向逻辑会完全混乱
    return this.defaultBlockState().setValue(FACING, context.getHorizontalDirection().getOpposite());
}

比如玩家面朝北放置,方块本该朝向北,要是代码里误设成南,旋转逻辑就会出错。

快速排查技巧

  • 打印不同朝向时VoxelShape的坐标范围,对比南/东和北/西的数值,看是不是旋转后坐标超出了0-16的局部范围
  • 临时替换成默认方块模型,测试碰撞盒是否对齐,排除模型本身的问题
  • 注释掉所有手动坐标偏移的代码,只用基础形状加旋转,看问题是否消失

内容的提问来源于stack exchange,提问作者PupsiCola

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 05:37:42