水杨苷:方块鳞片

水杨苷:方块鳞片

轻松便捷地调整和旋转方块大小(包含BER和碰撞箱)

装饰

轻松便捷地通过单一界面调整方块的大小和旋转(包括其方块实体渲染器和碰撞箱)。

这是一个适用于 Minecraft Forge 1.20.1 的库模组。让你的 Block 实现 IScalableBlock 和/或 IRotatableBlock,它将自动获得缩放/旋转的模型渲染、方块实体渲染器(BER)渲染和 VoxelShape 碰撞检测,无需逐个注册方块混入。

功能

  • 单一接口,全面缩放:实现 IScalableBlock,返回一个 SBSProp 配置,完成。
  • 单一接口,全面旋转:实现 IRotatableBlock,返回一个 SBSRProp 配置,方块可围绕任意轴以任意角度旋转。
  • 方块模型渲染:在模型烘焙时,通过 BakedModel 代理变换 BakedQuad 顶点,确保与 Embeddium 和 Oculus 等渲染替换模组兼容。
  • 方块实体渲染:通过向 BlockEntityRenderDispatcher 注入混入(Mixin),方块实体(如箱子、告示牌等)与其父方块一起缩放和旋转。
  • 碰撞箱缩放和平移:启用 scaleShape 时,VoxelShape 会自动变换;智能平移以匹配旋转后的模型中心。
  • 复合变换:方块可同时实现两个接口——先应用旋转,再应用缩放。
  • 可配置枢轴点:可围绕方块内的任意锚点进行缩放和旋转。
  • 零配置:无需混入配置、JSON 或数据生成。纯 API。

使用

public class MyBlock extends Block implements IScalableBlock, IRotatableBlock {

    @Override
    public SBSProp getScaleConfig(BlockState state) {
        // 缩放至 50%,围绕方块中心,包含碰撞箱
        return new SBSProp(0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, true);
    }

    @Override
    public SBSRProp getRotationConfig(BlockState state) {
        // 绕 Y 轴旋转 45°,以方块为中心
        return new SBSRProp(45f, Direction.Axis.Y, 0.5f, 0.5f, 0.5f);
    }

    @Override
    public VoxelShape getShape(BlockState state,
                               BlockGetter level,
                               BlockPos pos,
                               CollisionContext ctx) {
        VoxelShape rotatedShape = getTranslatedShape(state, level, pos, ctx, 
                                                     super.getShape(state, level, pos, ctx));
        return getScaledShape(state, level, pos, ctx, rotatedShape);
    }
}

SBSProp 参数

字段 描述
scaleX / Y / Z 每个轴的缩放倍数(1.0 = 原始大小)
pivotX / Y / Z 方块坐标中的锚点(0~1,0.5 = 中心)
scaleShape 是否同时缩放碰撞 VoxelShape

SBSRProp 参数

字段 描述
degree 旋转角度(度)
axis 旋转轴(Direction.Axis.X / Y / Z)
pivotX / Y / Z 方块坐标中的锚点(0~1,0.5 = 中心)

兼容性

本模组设计为与 Embeddium 和 Oculus 兼容。任何不兼容问题都欢迎反馈。

反馈

如果你有问题或需要提交 PR,请先发送简要描述至 3485874663@qq.com,你将通过用户名和密码被重定向到一个 Gitea 网站。你可以在那里继续处理问题或 PR。