跳到正文
烈焰甘蔗Wiki

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

但需要如实指出两点:

  1. gradle.properties 中 accessTransformersFile = 留空
  2. StructureLibCore.getAccessTransformerClass() 返回 null

AT 文件虽然作为资源被打进 jar 根目录(可在构建产物中确认),但没有通过 core mod 声明挂载,因此这条 AT 是否生效取决于打包流程,本 mod 自身代码并未显式启用它。这属于仓库的一个状态细节,编写基于该 AT 的 mixin 时需留意。

相关条目:提示渲染系统、多方块构造机制、通道系统。

浏览全部模组