注墨作物
基本信息
| 属性 | 值 |
|---|---|
| 方块数 | 2(注墨耕地、注墨谷物) |
| 物品数 | 2(注墨谷物 infusedGrain、注墨种子 infusedSeeds) |
| 掉落表管理器 | thaumic.tinkerer.common.core.helper.AspectCropLootManager.populateLootMap(),调用点 TTCommonProxy.java:193 |
| 作物实体注册 | EnumMobAspect,29 个枚举常量 |
| 注册位置 | 方块 TTRegistry.java:45-46;物品 TTRegistry.java:84、TTRegistry.java:87 |
| 注册门槛 | 4 项全部无条件注册 |
数值
| 方块 | 注册名 | Java 类 | 基类 | TileEntity | 注册行 |
|---|---|---|---|---|---|
| 注墨耕地 | infusedFarmland |
BlockInfusedFarmland |
BlockFarmland |
TileInfusedFarmland(经 createTileEntity) |
TTRegistry.java:45 |
| 注墨谷物 | infusedGrainBlock |
BlockInfusedGrain |
BlockCrops |
TileInfusedGrain(经 createTileEntity) |
TTRegistry.java:46 |
BlockInfusedFarmland.createTileEntity() 在 BlockInfusedFarmland.java:51;BlockInfusedGrain.createTileEntity() 在 BlockInfusedGrain.java:240。两者同时实现了 ITTinkererBlock.getTileEntity(),因此既经 GameRegistry.registerTileEntity() 注册,也保留原版 createTileEntity() 路径。
BlockInfusedGrain 覆写中含注释 // Prevent normal growth from occuring(BlockInfusedGrain.java:189),阻止原版 BlockCrops 的自然生长。
EnumMobAspect:29 个生物要素组合
EnumMobAspect(common/core/helper/EnumMobAspect.java:48)把 29 种生物实体映射到各 3 个 Thaumcraft Aspect,驱动生物要素物品与作物掉落。按源码内的分区注释组织:
| 分区 | 注释 | 行范围 |
|---|---|---|
| 被动型 | // Passive |
EnumMobAspect.java:50 起 |
| 敌对型 | // Hostiles |
EnumMobAspect.java:65 起 |
枚举共有 3 个构造重载(EnumMobAspect.java:131、:135、:148),分别对应「带 scale」「带 scale + offset」「仅实体与要素」三种形式。
顺序约束(源码明确记录)
源码用 /// 三斜杠注释记录了 4 处必须先于子类的顺序要求,这是本仓库中少见地显式说明枚举顺序有语义的地方:
| 约束 | 注释 | 常量源码行 |
|---|---|---|
MushroomCow 必须先于 Cow |
/// Must be before Cow because EntityMooshroom extends EntityCow |
EnumMobAspect.java:54(注释在 :53) |
LavaSlime 必须先于 Slime |
/// Must be before Slime because EntityMagmaCube extends EntitySlime |
EnumMobAspect.java:69(注释在 :68) |
BrainyZombie 必须先于 Zombie |
/// Must be before Zombie because EntityBrainyZombie extends EntityZombie |
EnumMobAspect.java:79 |
CaveSpider 必须先于 Spider |
/// Must be before Spider because EntityCaveSpider extends EntitySpider |
EnumMobAspect.java:109(注释在 :108) |
注释里出现的是实体类名(EntityMagmaCube、EntityCaveSpider、EntityMooshroom、EntityBrainyZombie),而枚举常量名与之并不相同 —— 例如常量名是 LavaSlime 而非 MagmaCube,常量名是 MushroomCow 而实体类是 EntityMooshroom。
异常处理
EnumMobAspect.createEntity(World) 用 catch (Throwable e) { throw new RuntimeException(e); } 包裹反射构造(EnumMobAspect.java:203-208,catch 在 :205-207)—— 该处未吞异常,而是包装后重抛,与本模组其他静默 catch 写法不同。
数值:骨粉开关
| 数值 | 配置键 | 默认值 | 读取点 |
|---|---|---|---|
| 允许骨粉催熟 | cropsAllowBonemeal.enabled |
false |
BonemealEventHandler.java:27 |
BonemealEventHandler.onBonemeal() 订阅 BonemealEvent:仅当目标方块是 BlockInfusedGrain 且 !ConfigHandler.cropsAllowBonemeal 时才 event.setCanceled(true)(BonemealEventHandler.java:25-31)。该处理器在 TTCommonProxy.init() 中注册到 MinecraftForge.EVENT_BUS(TTCommonProxy.java:155)。默认值 false,配置注释写明「Useful for debug purposes」。
处理器位于 thaumic.tinkerer.common.core.helper 包(不是 core.handler)。
研究
4 项均无独立研究条目 —— BlockInfusedFarmland、BlockInfusedGrain、ItemInfusedGrain、ItemInfusedSeeds 的 getResearchItem() 无 TTResearchItem 构造点。LibResearch 中与之最接近的 KEY_INFUSED_INKWELL(值 INFUSED_INKWELL)在本仓库内同样无构造点。