ForgeMultipart
[!INFO] Git Commit:
7808254| Updated: 2026-10-02
[!IMPORTANT] 一仓三个 modid,不是单 mod 本仓库同时提供三个 Forge mod:
ForgeMultipart(库)、ForgeMicroblock(微块)、McMultipart(原版方块 multipart 化)。三者共用一份config/multipart.cfg, 源码总量 96 个源文件(25 个.java+ 75 个.scala)。
在一个方块空间里放置多个各自独立的功能部件的框架库,以及配套的 「把任意方块切成小方块」微块系统。
[!NOTE]
multipart不是中文的「多方块结构」 这里的 “multipart” 指一个方块格内的多个部件(part),与工业 mod 那种 「多个方块拼成一台机器」的多方块结构(multiblock)无关。仓库里 没有任何几×几×几的机器框架、控制器方块或旋转/拆除规则。 唯一与「3×3×3」有关的概念是微块把方块切成 27 小块的槽位划分 (见PartMap的 27 个枚举常量)。
身份
| 属性 | 实测值 |
|---|---|
| modid | ForgeMultipart / ForgeMicroblock / McMultipart(3 个) |
| modName | Forge Multipart / Forge Microblocks / Minecraft Multipart Plugin |
| 语言 | 主类为 Scala(modLanguage = "scala"),25 个 Java 文件与 Scala 同目录混编(src/main/scala/ 下放 .java) |
| 源文件 | 96(25 Java + 75 Scala,11 893 行) |
| 接受版本 | acceptedMinecraftVersions = "[1.7.10]"(三个 modid 均硬锁) |
| 注册方块 | 1(ForgeMultipart:block,仅为容器,无功能) |
| 注册物品 | 5(microblock、sawStone、sawIron、sawDiamond、stoneRod) |
| 微材质 | 104 个默认(36 次 createAndRegister → 101 变种 + grass/mycelium/missing) |
| 槽位 | 27(PartMap 枚举:1 CENTER + 6 面 + 12 棱 + 8 角) |
| 配置项 | 3(multipart.cfg:debug_asm、durability、useSawIcons) |
| 依赖声明 | 仅 ForgeMicroblock 声明 required-after:CodeChickenCore@[1.4.3,);required-after:ForgeMultipart |
[!NOTE]
mcmod.info有 3 个条目,其中第 1 个的modid/name/version全是${modId}/${modName}/${modVersion}占位符;另 2 个 (McMultipart、ForgeMicroblock)的 modid 是硬编码的,版本仍是占位符。 三个 modid 只能从三个@Mod注解实读。
核心与配置列表
- MultipartMod -
@Mod("ForgeMultipart")Scala 主类,5 个生命周期钩子 - MicroblockMod -
@Mod("ForgeMicroblock")主类,唯一声明dependencies的 modid - MinecraftMultipartMod -
@Mod("McMultipart")Java 主类 - MultipartProxy - 注册唯一方块 + 逐个
registerTrait - MicroblockProxy - 注册 5 物品 + 锯/微块配方,复用同一份 config
API 列表
- BlockMultipart - 唯一方块,450 行,纯容器
- TileMultipart - 中心方块实体,820 行
- TMultiPart - 部件根接口,39 个方法
- ItemMultiPart - 部件放置物品基类
- MultiPartRegistry - 部件工厂注册表
- MultipartHelper - 便利门面
- MultipartGenerator - 运行时字节码生成核心
- MultipartRenderer - 逐部件渲染入口
- PartMap - 27 个槽位枚举
- RenderPartResolver - 渲染反查
- TickScheduler - 世界扩展式随机刻调度
- PacketScheduler - 部件延迟包调度
- TileCache - 区块加载期稀疏格位缓存
- IDWriter - 极简 id 分配器
- ControlKeyModifier - 放置用 Ctrl 修饰键(对象名拼作
ControlKeyModifer) - ISBRHPart - 旧版单部件渲染钩子
- JsonModeledPart - JSON 模型描述接口
- INeighborTileChange - 部件级邻居变更
部件 Trait 列表
- TFacePart - 贴面部件
- TEdgePart - 贴棱部件
- TCuboidPart - 整格部件
- TSlottedPart - 占槽位部件
- IRedstonePart - 6 个 trait 的红石接口族
- TRandomUpdateTick - 部件随机刻
- IRandomDisplayTick - 部件随机显示刻
- TNormalOcclusion - 面剔除
- TPartialOcclusion - 逐格位图遮挡
- TIconHitEffects - 破坏 / 点击动画
方块实体 Trait 列表
- TFluidHandlerTile - 整体作为一个流体罐
- TIInventoryTile - 整体作为一个物品栏
- TRedstoneTile - 方块实体侧红石连接器
- TSlottedTile - 槽位双向映射表
- TTileChangeTile - 邻居变更广播
- TPartialOcclusionTile - 逐格遮挡接入
- TRandomDisplayTickTile - 显示刻派发
微块列表
- Microblock - 微块部件实体,材质存数字 id
- MicroblockClass - 5 种形状工厂
- FaceMicroblock - 面的整块
- EdgeMicroblock - 棱微块,同文件内另定义
PostMicroClass - CornerMicroblock - 角微块
- HollowMicroblock - 镂空中心,417 行
- TMicroOcclusion - 收缩 + 遮挡计算
- MicroMaterialRegistry - 材质全局注册表
- BlockMicroMaterial - 方块 + meta 包装
- GrassMicroMaterial - 草 / 菌丝双贴图材质
- MissingMicroMaterial - 缺失材质兜底
- IMicroMaterialRender - 材质渲染钩子
- ItemMicroPart - 装微块的物品
- ItemSaw - 3 把锯,耐久默认
1 << level + 8 - MicroRecipe - 锯切合成,5 种结果模式
- PlacementGrids - 4 种命中网格(
1/4与3/8格) - MicroblockPlacement - 放置规则引擎
- MicroblockRender - GL 绘制工具集
- MicroblockGenerator - 微材质字节码生成
- DefaultContent - 104 个默认微材质清单
- ConfigContent - 配置 / IMC 追加材质
- ISidedHollowConnect - 镂空深度声明
- AngelicaCompat - Angelica 材质缓存重置
- Package Object - 包隐式成员
McMultipart(原版方块 multipart 化)列表
- Content - 被替换的原版方块清单
- BlockPart - 原版方块的整格包装
- MetaPart - 带 meta 的包装
- SidedMetaPart - 带 meta 且贴面
- IPartMeta - 元数据读取接口
- PartMetaAccess - 伪装成
IBlockAccess - TorchPart - 火把部件
- ButtonPart - 按钮,30 刻弹起用延迟包
- LeverPart - 拉杆,8 朝向
- RedstoneTorchPart - 红石火把,含烧毁持久化
- EventHandler - 拦截玩家操作改走部件
- McMultipart Packet Handlers - 烧毁烟雾双向同步
字节码生成列表
- ASMMixinCompiler - 873 行,全仓最大文件
- ASMMixinFactory - 生成工厂
- MultipartMixinFactory - 锁定目标为
TileMultipart - ScalaSignature -
@ScalaSignature符号表解析 - StackAnalyser - 栈 / 局部变量抽象解释
- ByteCodecs - NBT varint + 零值压缩
- ScratchBitSet - 临时位集合
- ASMImplicits - 值类隐式扩展
事件与存盘列表
- Multipart Packet Handlers - 部件注册表 + 描述包同步
- Microblock Packet Handlers - 微材质表同步
- MultipartEventHandler - 6 个事件,
HIGHEST优先级登记 - MicroblockEventHandler - 2 个客户端事件
- SaveLoad - 伪造方块实体承载 NBT
兼容列表
- MultipartCompatiblity - MCPC 兼容(类名拼作
Compatiblity) - CubicChunksCompat - Cubic Chunks 1710 区块加载补登记
- PosteaCompat - Postea 装载变形器
- ItemMicroPartTransformer - Postea 变形实现
- NEI_MicroblockConfig - NEI 子集页
依赖关系
- 硬依赖 codechickencore(CodeChickenCore):
dependencies.gradle中为implementation("com.github.GTNewHorizons:CodeChickenCore:1.4.19:dev"), 且ForgeMicroblock在@Mod里声明required-after:CodeChickenCore@[1.4.3,)。 该分类已登记于relation.md但尚未成文,此处为前向引用。 - 内部依赖:同仓的
ForgeMicroblock硬依赖ForgeMultipart(required-after:ForgeMultipart)。 - 编译期可选(
dependencies.gradle,均非硬依赖):CubicChunks1710、Angelica 2.1.54、 Postea 1.2.5、NotEnoughItems 2.8.114-GTNH、GTNHLib 0.11.44、unimixins 0.1.23。 - 运行时可选:
runtimeOnlyNonPublishable声明 Hodgepodge 2.7.174。 - MCPC、NEI、Postea、CubicChunks 均不在本 wiki 收录范围(
relation.md无对应行)。
源码缺陷
ForgeMultipart与McMultipart的@Mod均未声明dependencies, 但ForgeMultipart实际硬依赖 CodeChickenCore(dependencies.gradle的implementation(...))。FML 在运行期拿不到这条依赖,缺 CCL 时只在 类加载阶段炸NoClassDefFoundError。- 三个 modid 共用同一个
config/multipart.cfg:MicroblockProxy_serverImpl直接import MultipartProxy._取config(microblock/handler/proxies.scala:11),因此不存在microblock.cfg。ConfigContent声称读取microblock.cfg,与此矛盾。 ConfigContent的注释与实现不符:其文档称读microblock.cfg, 实际config变量指向的是multipart.cfg。- 3 处源码拼写错误已保留,本 wiki 条目标题沿用源码原样,未做修正:
ControlKeyModifer(少i,multipart/ControlKeyModifier.scala:3)、MultipartCompatiblity(少i,multipart/handler/MultipartCompatiblity.scala:7)、 生成类名前缀heirachy(multipart/MultipartGenerator.scala)。 - AT 变换只有 1 条:
src/main/resources/META-INF/multipart_at.cfg仅含public net.minecraft.block.BlockButton func_150043_b(I)V,未做整包合并。