Enchantment: XP Boost

基本信息

属性 值
本地名 enchantment.xpboost
类 EnchantXPBoost extends Enchantment implements IAdvancedEnchant
附魔 ID 45(ConfigHandler.enchantIDXPBoost)
稀有度 2
最大等级 3
最大附魔力 super.getMaxEnchantability(level) + 30
适用类型 breakable,但排除护甲
默认开关 ConfigHandler.allowXPBoost = true

来源:com/enderio/core/common/enchant/EnchantXPBoost.java:16-17,32-38,42-45、com/enderio/core/common/config/ConfigHandler.java:81,86。

数值:对数倍增,不是线性

private int getXPBoost(int xp, int level) {
    return Math.round(xp * ((float) Math.log10(level + 1) * 2));
}

(com/enderio/core/common/handlers/XPBoostHandler.java:108-110)

倍率 = log10(level + 1) × 2,四舍五入后乘以原经验值:

等级 倍率计算 实际倍率
1 log10(2) × 2 = 0.602 × 0.6(反而减少!)
2 log10(3) × 2 = 0.954 × 0.95(仍不足 1×)
3 log10(4) × 2 = 1.204 × 1.2

⚠️ 这是本 mod 最反直觉的数值:名为「经验加成」,但等级 1 和 2 实际都是降低经验。只有满级 3 才略微超出 1 倍。源码确实如此,不是笔误也不是我读错。

功能与触发路径

XPBoostHandler 有 3 条获取经验的路径,均经 getXPBoostLevel(ItemStack) 查手持物附魔(:112-126):

路径 说明 行号
箭矢命中 读取箭的 NBT ttCore:xpboost,沿射手回溯加成 :50-52
击杀生物 查玩家手持物 :74-86
直接调用 getXPBoost(EntityLivingBase, EntityPlayer, int) :96-102

加成后经 scheduleXP 延迟在实体位置生成 EntityXPOrb(:132-141),boost <= 0 时直接返回(:133-135)——即低等级算出 0 时不生成任何经验球。

获取方式

同 Auto Smelt,本 mod 不注册配方,通过 IMC 交给 EnderIO 的 Enchanter(EnchantXPBoost.java:56-61):

<enchantment name="enchantment.xpboost" costPerLevel="4">
  <itemStack oreDictionary="ingotGold" number="16"/>
</enchantment>

每级成本 4 点、消耗 16 个金锭(比 Auto Smelt 的 30 点便宜得多)。

关闭时

allowXPBoost = false 时同样执行 Enchantment.enchantmentsList[this.effectId] = null(:62)。

相关条目