注墨作物

基本信息

属性 值
方块数 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)在本仓库内同样无构造点。

相关条目