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)。
相关条目
- Enchantment: XP Boost - 同一 handler 家族的经验附魔
- Config Handler - 管理上述全部开关与 ID