Chisel 雕刻组
基本信息
| 属性 | 值 |
|---|---|
| 实现类 | modernmarkings.init.ModRecipes#addChiselRecipes |
| 调用时机 | FMLPreInitializationEvent(ModernMarkings#preInit 内) |
| Chisel API | com.cricketcraft.chisel.api.carving.CarvingUtils.chisel |
| 雕刻组数 | 2 |
| 依赖 | required-after:chisel(@Mod 声明的硬依赖) |
这是本 mod 与 Chisel 的唯一集成点。由于 mod 硬依赖 Chisel,玩家在 Chisel 的雕刻台上可以直接把 170 个标线方块互相循环切换。
两个雕刻组
for (int i = 0; i < ModBlocks.FLOOR_BLOCKS.size(); i++) {
Block block = ModBlocks.FLOOR_BLOCKS.get(i);
CarvingUtils.chisel.addVariation("Floor blocks", block, 0, i);
}
for (int i = 0; i < ModBlocks.WALL_BLOCKS.size(); i++) {
Block block = ModBlocks.WALL_BLOCKS.get(i);
CarvingUtils.chisel.addVariation("Wall blocks", block, 0, i);
}
| 组名 | 成员数 | 来源列表 | 注册的 meta |
|---|---|---|---|
Floor blocks |
87 | ModBlocks.FLOOR_BLOCKS |
全部 0 |
Wall blocks |
83 | ModBlocks.WALL_BLOCKS |
全部 0 |
组名是带空格的字面量("Floor blocks" / "Wall blocks"),在 Chisel 雕刻台界面上就以此显示。
成员列表是怎么来的
FLOOR_BLOCKS / WALL_BLOCKS 不是手工填的,而是在方块构造函数里把自己塞进去的:
MarkingFloor构造 →FLOOR_BLOCKS.add(this)MarkingWall构造 →WALL_BLOCKS.add(this)
父类 BlockBase 构造里还会做 ModBlocks.BLOCKS.add(this) 与 ModItems.ITEMS.add(new ItemBlock(this)),供 registerBlocks() / registerItems() 遍历注册。
[!WARNING] 副作用 因为三个列表都是静态字段的初始化副作用,Java 保证同一类内按声明顺序初始化静态字段,而
ModBlocks里的 170 个方块全部是public static final Block字面量——列表内容严格等于ModBlocks.java里的声明顺序。// spotless:off区块存在正是为了阻止格式化工具重排这些字段,因为顺序即 Chisel 雕刻台的循环顺序。
order 参数
addVariation(组名, 方块, meta, order) 的第四个参数 order 直接用循环下标 i(从 0 开始)。这意味着雕刻台的切换顺序就是 ModBlocks.java 里的书写顺序,不是按字母、颜色或用途排序——例如 Floor blocks 组会从 floor_marking_black_singleline 开始,随后 floor_marking_white_arrow、floor_marking_white_lane…,字母 A–Z 排在最后。
每个方块只注册一个 meta
所有变体的 meta 都是 0。这与方块本身的 4 向朝向元数据互不冲突——雕刻切换的是方块种类(纹理),朝向仍由放置时的 rotationYaw 决定(见 地面标线 的朝向换算)。