Enchantment: Auto Smelt

基本信息

属性 值
本地名 enchantment.autosmelt
类 EnchantAutoSmelt extends Enchantment implements IAdvancedEnchant
附魔 ID 46(ConfigHandler.enchantIDAutoSmelt)
稀有度 2(super(id, 2, EnumEnchantmentType.breakable))
最大等级 1
最大附魔力 super.getMaxEnchantability(level) + 30
适用类型 breakable(可破坏方块),但排除护甲
默认开关 ConfigHandler.allowAutoSmelt = true

来源:com/enderio/core/common/enchant/EnchantAutoSmelt.java:16-17,32-38,42-45,57-66、com/enderio/core/common/config/ConfigHandler.java:92,97,101。

功能

矿石自动熔炼。挖掘时,掉落物按原版熔炉配方自动替换为熔炼产物,并按原版逻辑生成经验球。

实现挂载在 AutoSmeltHandler(com/enderio/core/common/handlers/AutoSmeltHandler.java)的挖掘事件上(BlockEvent.BreakEvent):

  • 若手持工具有本附魔(等级 ≥ 0),遍历 event.drops(:25-30)
  • 用 FurnaceRecipes.smelting().getSmeltingResult(stack) 查熔炼产物,查不到则跳过(:36)
  • 精准采集(Silk Touch)时不生效(:35 的 !event.isSilkTouching)
  • 替换掉落物为熔炼产物(:44)

附运(Fortune)交互

若工具有附运等级 fortune > 0 且 ConfigHandler.allowAutoSmeltWithFortune 为 true,产物数量乘以 1 + rand(fortune + 1):

furnaceStack.stackSize *= (event.world.rand.nextInt(fortune + 1) + 1);

(AutoSmeltHandler.java:39-40)。canApplyTogether 中,附运共存由同一开关控制(EnchantAutoSmelt.java:68-71),与精准采集互斥。

经验球

按熔炼后的数量与原版经验系数计算,逻辑照搬原版熔炉(含 < 1.0F 系数时的小数概率进位处理,AutoSmeltHandler.java:47-67),逐个 EntityXPOrb.getXPSplit 拆分掉落(:62-67)。

获取方式

本 mod 不注册合成配方。它通过 FML 跨模组通信(IMC)向 EnderIO 发送附魔配方请求(EnchantAutoSmelt.java:57-62):

<enchantment name="enchantment.autosmelt" costPerLevel="30">
  <itemStack oreDictionary="blockCoal" number="32"/>
</enchantment>

即在 EnderIO 的 Enchanter 机器中,用 32 个煤炭以每级 30 点的成本附魔。没装 EnderIO 就无法获得本附魔。

关闭时

allowAutoSmelt = false 时,register() 直接把槽位置空:

Enchantment.enchantmentsList[this.effectId] = null;

(EnchantAutoSmelt.java:63)——附魔从注册表移除,isAllowedOnBooks() 也返回 false(:47-49)。

相关条目