各 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 此处不复述其内容。

相关条目