mod 元信息与打包数据
基本信息
| 属性 | 值 |
|---|---|
| modid | structurelib |
| 显示名 | StructureLib |
@Mod 类 |
com.gtnewhorizon.structurelib.StructureLib |
| core mod 类 | com.gtnewhorizon.structurelib.core.StructureLibCore |
| MC 版本 | 1.7.10(@IFMLLoadingPlugin.MCVersion("1.7.10")) |
| 作者 | glee8e |
| 致谢 | Technus(TecTech 中的原始实现) |
mcmod.info 描述 |
Multiblocks with ease |
@Mod 注解的实际内容:
@Mod(
modid = "structurelib",
name = "StructureLib",
version = Tags.VERSION,
acceptableRemoteVersions = "*",
guiFactory = "com.gtnewhorizon.structurelib.GuiFactory")
acceptableRemoteVersions = "*" 表示允许任意版本的服务端连接(典型库 mod 做法)。guiFactory 指向本 mod 自带的配置界面工厂类。
modid 从 @Mod 注解读取得到:StructureLib.java 顶部以 import static ...StructureLibAPI.MOD_ID 引入常量,而 StructureLibAPI 中定义为 public static final String MOD_ID = "structurelib";。它并不等于仓库目录名之外的任何猜测。
本 mod 不包含的内容(源码核验)
StructureLib 继承自 Block 之外无注册行为。穷举核验结果:
| 项目 | 结论 | 依据 |
|---|---|---|
| 方块 | 1 个(Hint Block) | preInit 中仅一次 registerBlock |
| 物品 | 2 个独立注册 + 1 个方块物品 | registerItem 两次,ItemBlock.getItemFromBlock 取方块物品 |
| 实体 | 无(Weightless Particle FX 不走实体注册) |
全源码无 EntityRegistry / registerModEntity / registerGlobalEntityID |
| TileEntity | 无,因此无槽位与 NBT 字段 | 全源码无 GameRegistry.registerTileEntity,无任何 extends TileEntity |
| 键位绑定 | 无 | 全源码无 new KeyBinding,也无 registerKeyBinding |
| 生物群系 / 世界生成 | 无 | 无 registerWorldGenerator / BiomeGen 等 |
| 维度 | 无 | 无 WorldProvider 注册 |
| 成就 | 无 | 无 registerAchievement |
| 附魔 | 无 | 无 Enchantment 子类 |
| 药水效果 | 无 | 无 PotionEffect / MobEffect |
| 流体 | 无 | 无 IFluidHandler 注册 |
| 配方 / 熔炼 | 无 | 无 IRecipe / GameRegistry.addRecipe / addSmelting |
| 矿物词典 | 无 | 无 OreDictionary.registerOre |
| 自带多方块结构 | 无 | 仅提供框架,结构由使用方 mod 定义 |
| 结构 / 特征定义数据文件 | 无 | 资源目录中无任何结构定义文件 |
关于交互输入:本 mod 没有使用原版键位设置界面,而是通过 mixin 拦截鼠标中键来实现通道拾取(详见 通道系统)。
仓库内数据文件
src/main/resources 下共 28 个文件,全部列出如下:
打包与加载配置
| 文件 | 说明 |
|---|---|
mcmod.info |
mod 元信息模板,使用 ${modId} 等占位符,由构建脚本填充 |
mixins.structurelib.early.json |
早期 mixin 配置,指向包 com.gtnewhorizon.structurelib.mixins.early |
mixins.structurelib.json |
默认 mixin 配置,指向包 com.gtnewhorizon.structurelib.mixins |
mixins.structurelib.late.json |
后期 mixin 配置,指向包 com.gtnewhorizon.structurelib.mixins.late |
structurelib_at.cfg |
Access Transformer,补丁 GuiSlot.overlayBackground |
三个 mixin 配置共用同一个 refmap mixins.structurelib.refmap.json(构建时生成,不在源码树中),minVersion 均为 0.8.5-GTNH,兼容性级别 JAVA_8。
mixins.structurelib.late.json 声明的 mixins.late 包在源码中不存在,该配置目前为空。mixins 包下也只有一个 TargetedMod 枚举(用于记录目标 mod 容器信息,目前仅含 VANILLA 一项),没有实际的 mixin 类。只有 early 配置挂载了真实 mixin。
语言文件
| 文件 | 说明 |
|---|---|
assets/structurelib/lang/en_US.lang |
英文,205 行 |
assets/structurelib/lang/zh_CN.lang |
简体中文 |
assets/structurelib/lang/ru_RU.lang |
俄文 |
语言文件覆盖内容:方块与物品显示名、悬浮提示、structurelib.facing.0..95 共 96 条对齐状态名、配置界面文字、通道 GUI 文字、SortedRegistry 条目名。
纹理
| 分类 | 文件 |
|---|---|
| 方块图标集 | textures/blocks/iconsets/ 下 15 个 PNG:HINT_0 … HINT_11、HINT_DEFAULT、HINT_AIR、HINT_NOAIR、HINT_ERROR |
| 物品 | textures/items/itemConstructableTrigger.png、textures/items/itemFrontRotationTool.png |
| GUI | textures/gui/channels.png、textures/gui/fourwayarrow2.png |
15 个图标集纹理与 16 个 metadata 的对应关系见 Hint Block:HINT_0–HINT_11 对应 meta 0–11,另外三个分别对应 HINT_DEFAULT(12)、HINT_AIR(13)、HINT_NOAIR(14)、HINT_ERROR(15),合计 15 个文件对应 16 个状态(HINT_AIR 兼作编号提示的顶/底面)。
Mixin 列表
early 配置通过 StructureLibCore.getMixins 挂载,其中两个始终加载,一个仅客户端加载:
| Mixin | 加载侧 | 作用 |
|---|---|---|
mixins/early/blockChangeNotifier/MixinForgeHooks |
双端 | 挂钩 ForgeHooks.onBlockPlace 等方块放置事件,转发到 BlockChangeNotifier |
mixins/early/blockChangeNotifier/MixinWorld |
双端 | 挂钩 World.setBlock 等,直接捕获方块变更 |
mixins/early/MixinGuiContainer_PickChannel |
仅客户端 | 挂钩 GuiContainer.mouseClicked,用中键拾取通道 |
BlockChangeNotifier 维护一个 BlockChangeListener 列表,在方块变化时回调。onBlockChange 开头有一个短路:若新旧方块和 metadata 完全相同则直接返回,不派发事件。
Access Transformer 的实际状态
structurelib_at.cfg 内容为一条:
public net.minecraft.client.gui.GuiSlot func_148136_c(IIII)V # overlayBackground
但需要如实指出两点:
gradle.properties中accessTransformersFile =留空StructureLibCore.getAccessTransformerClass()返回null
AT 文件虽然作为资源被打进 jar 根目录(可在构建产物中确认),但没有通过 core mod 声明挂载,因此这条 AT 是否生效取决于打包流程,本 mod 自身代码并未显式启用它。这属于仓库的一个状态细节,编写基于该 AT 的 mixin 时需留意。