跳到正文
烈焰甘蔗Wiki

村民职业与交易

基本信息

属性 值
注册 API cpw.mods.fml.common.registry.VillagerRegistry
注册方块 ID ID_VILLAGER_BEEKEEPER = 80、ID_VILLAGER_LUMBERJACK = 81(forestry/core/config/Constants.java:46-47)
职业数 2
皮肤贴图 beekeeper.png、lumberjack.png(Constants.java:42-43)
开关 Config.enableVillagers,默认 true(forestry/core/config/Config.java:71)
配置项 world.generate / villagers(Config.java:236)

功能

Forestry 注册了两个自定义村民职业,统共受一个配置开关控制。开关为 false 时,两处 if (Config.enableVillagers) 整块跳过,职业 ID、皮肤、交易表与村庄组件一个都不注册(PluginApiculture.java:318-325、PluginArboriculture.java:187-192)。

职业 villagerId 皮肤常量 贴图路径 交易处理器 来源插件
养蜂人 Beekeeper 80 TEXTURE_SKIN_BEEKPEEPER entities/beekeeper.png VillageHandlerApiculture Apiculture
伐木工 Lumberjack 81 TEXTURE_SKIN_LUMBERJACK entities/lumberjack.png VillageHandlerArboriculture Arboriculture

皮肤通过 Proxies.render.registerVillagerSkin(id, path) 注册(ProxyRenderClient.java:118-119),服务端对应方法是空实现(ProxyRender.java:63)。

[!NOTE] 常量名 TEXTURE_SKIN_BEEKPEEPER 在源码里多写了一个 e(Constants.java:42)。这里按源码原样记录。

养蜂人(Beekeeper)

注册时除了职业 ID 与皮肤,还向 VillagerRegistry 登记了村庄生成处理器(PluginApiculture.java:320-324):

VillageHandlerApiculture villageHandler = new VillageHandlerApiculture();
VillagerRegistry.instance().registerVillageCreationHandler(villageHandler);
VillagerRegistry.instance().registerVillagerId(Constants.ID_VILLAGER_BEEKEEPER);
Proxies.render.registerVillagerSkin(Constants.ID_VILLAGER_BEEKEEPER, Constants.TEXTURE_SKIN_BEEKPEEPER);
VillagerRegistry.instance().registerVillageTradeHandler(Constants.ID_VILLAGER_BEEKEEPER, villageHandler);

VillageHandlerApiculture 同时实现 IVillageCreationHandler 与 IVillageTradeHandler,所以一个对象干两件事。

交易表(VillageHandlerApiculture.manipulateTradesForVillager,每次交易刷新时重建,共 12 条):

玩家付出 村民给出 备注
beePrincessGE × 1(WILDCARD_VALUE) 绿宝石 × 1 任意基因的女王蜂换 1 绿宝石
小麦 × 2 随机蜂蜡脾 × 1 beeComb.getRandomComb(1, random, false)
原木 × 24(WILDCARD_VALUE) 蜂箱 BlockApicultureType.APIARY 任意树种原木
绿宝石 × 1 已验证框架 × 6 frameProven
绿宝石 × 12 beePrincessGE × 1(通配)+ 修道士蜂雄蜂 BeeDefinition.MONASTIC
末影之眼 × 16 beePrincessGE × 1(通配)+ 末影蜂雄蜂 BeeDefinition.ENDED
蜂胶 × 1 任意雄蜂 × 4(通配)+ 森林雄蜂 BeeDefinition.FOREST
蜂胶 × 1 任意雄蜂 × 4(通配)+ 草甸雄蜂 BeeDefinition.MEADOWS
蜂胶 × 1 任意雄蜂 × 4(通配)+ 谦逊雄蜂 BeeDefinition.MODEST
蜂胶 × 1 任意雄蜂 × 4(通配)+ 热带雄蜂 BeeDefinition.TROPICAL
蜂胶 × 1 任意雄蜂 × 4(通配)+ 寒冬雄蜂 BeeDefinition.WINTRY
蜂胶 × 1 任意雄蜂 × 4(通配)+ 沼泽雄蜂 BeeDefinition.MARSHY

其中后 7 条是同一配方的蜂种变体:用 1 个蜂胶把「任意雄蜂」定向繁殖成指定蜂种。

村庄组件:ComponentVillageBeeHouse 通过 MapGenStructureIO.func_143031_a(ComponentVillageBeeHouse.class, "Forestry:BeeHouse") 注册(VillageHandlerApiculture.java:36-43),调用点在 PluginApiculture.java:209-212(同样受 Config.enableVillagers 包裹)。部件权重为 15(getVillagePieceWeight)。注册失败只 Log.severe("Failed to register village beehouse."),不抛出。

村庄里的蜂群:PluginApiculture.java:307-316 按村庄大小把蜂种基因组放进 BeeManager.villageBees[0](小型村)与 [1](大型村):

村庄大小 蜂种
villageBees[0](小型村) FOREST、MEADOWS、MODEST、MARSHY、WINTRY、TROPICAL(共 6 种)
villageBees[1](大型村) FOREST(getRainResist() 抗雨基因)、COMMON、VALIANT(共 3 种)

伐木工(Lumberjack)

只注册职业 ID、皮肤与交易表,没有村庄生成处理器(PluginArboriculture.java:187-192)。

交易表(VillageHandlerArboriculture.manipulateTradesForVillager,共 3 条):

玩家付出 村民给出 备注
绿宝石 × 8 随机树苗 × 1 TreeManager.treeRoot.getRandomTemplate(random) 取随机模板
绿宝石 × 2 已验证嫁接器 grafterProven × 1 PluginArboriculture.items.grafterProven
绿宝石 × 1 随机木板 × 32 EnumWoodType.getRandom(random),产物数被硬改为 32

[!NOTE] 第三条把 planks.stackSize 直接赋值为 32(VillageHandlerArboriculture.java:44-47),是三组配方里产量最高的一条。

相关条目

  • EntityBee - ⚠ 并非世界实体,蜜蜂以 Forestry:beeQueenGE 等物品形式存在
  • Bee Comb - 交易中「随机蜂蜡脾」的来源
  • Propolis - 蜂种定向繁殖配方用的蜂胶
  • Hive Frame - 交易中出售的已验证框架

[!NOTE] 本分类目前没有配置项条目。开关 world.generate / villagers 的读取逻辑见 forestry/core/config/Config.java:236,默认值见同文件 :71。

浏览全部模组