各 Mod 生物插件
基本信息
| 属性 | 值 |
|---|---|
| 插件接口 | iguanaman.thaumcraftmobaspects.AspectPlugin |
| 接口方法 | String[] getRequiredMods()、HashSet<ThaumcraftEntity> getThaumcraftMobs() |
| 插件数量 | 6 |
| 硬编码精华赋值总数 | 233 处(去重后 232 个不同实体名) |
| 加载条件 | shouldLoadPlugin 要求 getRequiredMods() 里全部 modid 都 Loader.isModLoaded |
插件数组在 ThaumcraftMobAspects.java:96-97 硬编码,顺序即下表:
AspectPlugin[] plugins = new AspectPlugin[] { new PluginLycanitesMobs(), new PluginMoCreatures(),
new PluginSpecialMobs(), new PluginTwilightForest(), new PluginBiomesOPlenty(), new PluginEnderZoo() };
六个插件的规模
| 插件 | 要求的 modid | 精华赋值处数 | 不同实体名 |
|---|---|---|---|
PluginSpecialMobs |
SpecialMobs |
107 | 107 |
PluginMoCreatures |
MoCreatures |
58 | 57 |
PluginTwilightForest |
TwilightForest |
44 | 44 |
PluginLycanitesMobs |
LycanitesMobs |
9 | 9 |
PluginEnderZoo |
EnderZoo |
8 | 8 |
PluginBiomesOPlenty |
BiomesOPlenty |
7 | 7 |
| 合计 | 233 | 232 |
全部是字面量调用:六个插件里 for 循环出现 0 次,
所以不存在"运行时按条件追加"的情况,实体清单完全由源码决定。
这个 mod 不碰原版生物、也不碰 Thaumcraft 自己的生物—— 它只负责这 6 个外部 mod 的生物(以及 2 个玩家名,见 精华赋值与注册)。
实体名的命名不统一
三种写法混用,这是 guessModId 需要那么多回退分支的原因:
| 写法 | 例子 | 归属判定 |
|---|---|---|
| 带 mod 前缀 + 点 | "EnderZoo.DireWolf"、"BiomesOPlenty.Rosester"、"SpecialMobs.LavaMonster" |
取点前第一段 |
| 带 mod 前缀 + 空格 | "TwilightForest.Bighorn Sheep"、"TwilightForest.Block&Chain Goblin"、"TwilightForest.Tower Ghast" |
仍取点前第一段(空格在点之后) |
| 无前缀裸名 | "Asmodi"、"Behemoth"、"Trite"、"CryptZombie"(Lycanites 全部 9 个) |
需回退到包名推断 |
& 出现在 Block&Chain Goblin 里。该名字进配置文件时会经过
filterModIdToValidCharacters——但那一步只作用于 modid,不作用于实体名,
所以实体名里的空格和 & 会被原样写进 JSON。
源码缺陷
MoCreatures.Ant 被注册了两次。 PluginMoCreatures.java:18 与 :19
是逐字符相同的两行(参数也相同):
mobs.add(new ThaumcraftEntity("MoCreatures.Ant", creatureAspects(1, Aspect.EARTH)));
mobs.add(new ThaumcraftEntity("MoCreatures.Ant", creatureAspects(1, Aspect.EARTH)));
属于复制粘贴残留。因为返回的是 HashSet 且 equals 只看 entityName,
第二行被静默去重,运行结果不受影响——所以 233 与 232 的差就是这一处。
两个生物从未被赋值,且用的是旧类名。
PluginTwilightForest.java:23 与 :48 是被注释掉的代码:
// mobs.add(new ThaumcraftMob("TwilightForest.Boggard", );
// mobs.add(new ThaumcraftMob("TwilightForest.Knight Phantom", );
两行都以 // 开头,不构成注册。Boggard 与 Knight Phantom 因此没有精华。
注意它们引用的是 ThaumcraftMob——这个类后来已改名为 ThaumcraftEntity,
即使取消注释也编译不过。这两行恰好被夹在正确代码之间,容易被误读成"已支持"。
依赖范围
| 依赖 modid | 是否在本 wiki 收录范围 |
|---|---|
Thaumcraft |
已收录([thaumcraft](../../thaumcraft)) |
SpecialMobs |
relation.md 已登记,尚未成文 |
EnderZoo |
relation.md 已登记,尚未成文 |
TwilightForest |
relation.md 已登记,尚未成文 |
LycanitesMobs |
不在收录范围 |
MoCreatures |
不在收录范围 |
BiomesOPlenty |
不在收录范围 |
未收录的三个 mod 此处不复述其内容。