精华赋值与注册
基本信息
| 属性 | 值 |
|---|---|
| 实体数据类 | iguanaman.thaumcraftmobaspects.ThaumcraftEntity |
| 注册入口 | ThaumcraftApi.registerEntityTag(String, AspectList)(ThaumcraftMobAspects.java:131) |
| 触发时机 | FMLPostInitializationEvent#post |
| 注册条件 | aspectList.size() > 0——空精华列表不注册 |
| 精华值类型 | HashMap<String, Integer>,键是 Aspect#getTag()(字符串) |
ThaumcraftEntity 的相等性只看名字
public boolean equals(Object obj) {
if (obj == null || !(obj instanceof ThaumcraftEntity)) return false;
return entityName.equals(((ThaumcraftEntity) obj).entityName);
}
public int hashCode() { return entityName.hashCode(); }
aspects 内容不参与相等判定。所有容器都是 HashSet / HashMultimap,
所以"同名实体后写入的精华表不会替换先写入的"——先到先得。
类里还有三个从未被序列化使用的字段:_HEADER、_FOOTER、_COMMENT
(都是 41 个 * 或说明文字),本意应是写进配置文件当注释,
但 saveToFile 用的是 Gson toJson(mobs, ...),这些字段会被当作普通成员输出。
两个精华表构造助手的语义不同
| 方法 | 固定精华 | 数量语义 |
|---|---|---|
creatureAspects(int size, Aspect...) |
必带 BEAST = size |
sizeMod = max(round(size / aspects.length), 1),传入的每个精华各 sizeMod |
bossAspects(int amount, Aspect...) |
必带 6 个基础精华:EARTH、AIR、FIRE、ENTROPY、WATER、ORDER,各 amount |
传入的每个精华各 amount |
creatureAspects 的除法有下限保护:max(..., 1) 保证不会算出 0。
例如 creatureAspects(4, Aspect.FIRE) → BEAST 4 + FIRE 4;
creatureAspects(2, Aspect.ENTROPY) → BEAST 2 + ENTROPY 2(round(2/1)=2)。
bossAspects 传的精华数不影响基础六精华,只影响额外精华各自的数值。
例如 bossAspects(10, Aspect.UNDEAD, Aspect.MAGIC, Aspect.MIND) →
六个基础精华各 10,UNDEAD/MAGIC/MIND 各 10。
这四个辅助方法在 4 个插件里各被转发了一次(PluginMoCreatures、
PluginLycanitesMobs、PluginTwilightForest 的 static 转发),
最终都落到 ThaumcraftMobAspects 的实现。
注册前的名称与精华双重校验
for (Entry<String, Integer> entry : mob.aspects.entrySet()) {
Aspect aspect = Aspect.aspects.get(entry.getKey());
if (aspect != null) aspectList.add(aspect, entry.getValue());
}
if (aspectList.size() > 0) ThaumcraftApi.registerEntityTag(mob.entityName, aspectList);
配置里写了不存在的精华 tag 时会被静默跳过(aspect != null 判空),
但如果因此导致列表全空,该实体就完全不注册——不报错、不提示。
玩家实体的两个硬编码条目
post 里无条件写入两个玩家名,与是否装了其他 mod 无关:
| 实体名 | 精华 |
|---|---|
the_iguana_man |
bossAspects(5, MAN, MIND, SOUL, LIFE, MAGIC, ELDRITCH, ENERGY, HUNGER) |
XanderGryphon |
同上(完全相同的一组) |
即 EARTH/AIR/FIRE/ENTROPY/WATER/ORDER 各 5,
加上 MAN/MIND/SOUL/LIFE/MAGIC/ELDRITCH/ENERGY/HUNGER 各 5。
两者都不是通过 EntityPlayer 的类或名字匹配的,而是靠配置里以
字符串形式存在(见 实体精华配置文件)。
相关条目
- 各 Mod 生物插件 - 233 处硬编码精华赋值的分布
- 实体精华配置文件 - 精华表的读取、覆盖与写回
- 依赖的 Thaumcraft 已收录,见 thaumcraft。