运行时依赖
基本信息
| 属性 | 值 |
|---|---|
| Minecraft | 1.7.10(gradle.properties:24) |
| Forge | 10.13.4.1614(gradle.properties:27) |
| 必需前置 | gtnhlib@[0.2.4,)(MalisisCore.java:59) |
| 必需前置 | malisiscore(MalisisDoors.java:39) |
| Access Transformer | src/main/resources/META-INF/malisisdoors_at.cfg(20 条) |
| jar 内 mod 数 | 2(malisiscore + malisisdoors) |
功能
本仓库构建出的是一个 jar、两个 mod。源码树同时包含 net/malisis/core(框架库)与 net/malisis/doors(本 mod 主体),二者各自带 @Mod 注解:
| modid | 类 | 显示名 | 依赖声明 |
|---|---|---|---|
malisiscore |
net.malisis.core.MalisisCore |
Malisis Core | required-after:gtnhlib@[0.2.4,)(MalisisCore.java:55-59) |
malisisdoors |
net.malisis.doors.MalisisDoors |
Malisis’ Doors | required-after:malisiscore(MalisisDoors.java:35-39) |
两者的 modid 均以常量定义:MalisisCore.modid = "malisiscore"(MalisisCore.java:63)、MalisisDoors.modid = "malisisdoors"(MalisisDoors.java:45),与 gradle.properties:10 的 modId = malisisdoors 一致。
资源目录下同时存在
assets/malisiscore/与assets/malisisdoors/两套资源,lang各 7 种语言,与双 mod 结构对应。
MalisisCore 的职责
malisiscore 是 MalisisDoors 的自研框架,本 mod 的以下能力全部由它提供:
| 能力 | 使用的类 |
|---|---|
| 配置框架 | net.malisis.core.configuration.Settings / ConfigurationGui |
| GUI 框架 | net.malisis.core.client.gui.MalisisGui / UIWindow |
| 容器框架 | net.malisis.core.inventory.MalisisInventory / MalisisSlot |
| 方块基类 | net.malisis.core.block.MalisisBlock |
| 多方块框架 | net.malisis.core.tileentity.MultiBlockTileEntity / MultiBlock |
| 原版门替换 | net.malisis.core.util.replacement.ReplacementTool |
| 配置指令 | /malisis config <modid>、/malisis version <modid> |
MalisisDoors 在构造时通过 MalisisCore.registerMod(this) 注册自身到框架的 registeredMods 表(MalisisDoors.java:55-59),使 /malisis config malisisdoors 能定位到本 mod 的设置。
本 wiki 分类只覆盖
malisisdoors自身的内容。malisiscore作为随 jar 分发的框架库,其内部实现不在本条目范围内。
Access Transformer
src/main/resources/META-INF/malisisdoors_at.cfg 放开 20 条 原版/Forge 成员访问权限,核心目的是让运行时反射替换原版方块成为可能:
| 目标 | 作用 |
|---|---|
RegistryDelegate$Delegate.setName(String) / changeReference(Object) |
改写注册表中的注册名——原版门替换的核心(AT 文件第 17-18 条) |
ItemBlock.field_150939_a |
改写原版 ItemBlock 指向的方块(同上,AT 第 8 行) |
StatCrafting.field_150960_a、ShapedRecipes.field_77575_e、ShapelessRecipes.field_77580_a |
开放合成配方内部列表,供 5 个 ReplacementHandler 遍历替换(AT 第 7、11-12 行) |
RenderGlobal.field_72738_E / field_94141_F |
客户端方块渲染内部数据 |
TextureAtlasSprite.field_110977_n / field_110978_o / field_110979_l / field_110980_m / field_147966_k |
自定义贴图(伪装栅栏门等)的 UV 与各向异性过滤 |
FontRenderer.field_78287_e / field_111274_c |
自绘数字字体(模组内含 assets/malisisdoors/fonts/) |
Tessellator.field_78415_z |
绘制状态查询 |
PlayerManager.func_72690_a / PlayerManager$PlayerInstance / field_73263_b |
区块加载时向客户端补发 TileEntity 同步 |
这也解释了 Registers.java 中出现大量 field_150466_ao、field_151135_aq 这类 SRG 字段名——它们是传给 ReplacementTool 的 srgFieldName 参数。
开发期依赖
dependencies.gradle:5 声明了 NEI:
runtimeOnlyNonPublishable("com.github.GTNewHorizons:NotEnoughItems:2.8.123-GTNH:dev")
该依赖为 runtimeOnlyNonPublishable,仅存在于开发运行环境中,不发布到正式 jar。源码中没有任何对 NotEnoughItems 的引用(grep -rn 'NotEnoughItems' src/main/java 无匹配)——它只是让开发实例里能查到配方。
同文件还声明了 Lombok 1.18.24(compileOnly + annotationProcessor,dependencies.gradle:2-3),以及 GTNHLib 0.11.37(dependencies.gradle:4)。
数值
| 数值名 | 值 | 出处 |
|---|---|---|
| jar 内 mod 数 | 2 | grep -rn '@Mod' src/main/java 命中 MalisisCore.java:55、MalisisDoors.java:35 |
| AT 条目数 | 20 | src/main/resources/META-INF/malisisdoors_at.cfg(grep -c .) |
| 必需前置数 | 2(gtnhlib、malisiscore) | MalisisCore.java:59、MalisisDoors.java:39 |
| 支持语言数 | 7(cs/de/en/es/fr/ru/zh) | assets/malisisdoors/lang/ 目录 |