附魔进度

附魔进度

通过按其预期用途直接使用,实现物品附魔的动态升级

魔法

Enchantment Progression (Forge 1.20.1)

Enchantment Progression 彻底改造了 Minecraft 的附魔机制。不再通过基础交易或铁砧合并来瞬间获得最高等级的装备,附魔会随着你在世界中不断使用装备而动态地变得更强。

每一次挥击、每一支箭矢、每一个被破坏的方块、每一次吸收的伤害,以及每一秒的飞行,都会将经验直接注入到你当前使用的装备中。附魔通过游戏过程自然地升级,让你的装备成为随你的旅程不断演化的专属神器。


核心特性

  • 有机升级机制: 附魔在战斗、采矿、探索和生存中被主动使用时升级。

  • 专属动态触发器: 内置对近战、远程武器、护甲类型、三叉戟、钓鱼竿、盾牌和鞘翅飞行的追踪。

  • 铁砧经验回收: 在铁砧上合并相同附魔会转移已存储的经验和基于等级的额外经验,而不是通过瞬间提升等级来绕过升级曲线。

  • 简洁的可视化提示: 按住 Shift 悬停物品时会显示清晰的进度条、当前经验和下一等级的要求。

  • 完全数据驱动: 每个附魔的经验需求、倍率、最大等级和触发条件都可以通过主配置 TOML 文件和 JSON 配置进行调整。

  • KubeJS 集成: 原生事件钩子(EnchantmentProgressionEvents.xpGain)和脚本绑定(EnchProgression.addXp(...))允许进行完整的整合包自动化。


工作原理

获取经验

当物品上的附魔仍可升级时,相关的游戏行为会直接将附魔经验授予该物品。

当存储的经验达到当前等级所需的阈值时,附魔等级会自动提升。玩家会在动作栏中收到升级通知,并伴随声音和粒子效果。

支持的升级触发器

类别 附魔 所需行为
近战 锋利、亡灵杀手、节肢杀手、击退、横扫之刃、火焰附加、抢夺 击杀敌人、击中特定生物类别(亡灵/节肢动物)、疾跑击退命中、横扫攻击以及击中燃烧目标。
弓箭与弩 力量、冲击、火矢、穿透、快速装填 远程弓箭射击、射击飞行目标(恶魂、幻翼、末影龙)、用单发弹射物穿透多个生物,以及近距离弩战斗。
三叉戟 穿刺、忠诚、激流 在水中或雨中击中水生生物或潮湿目标、远程三叉戟投掷命中,以及在水或雨中用激流发射。
工具 效率、时运、精准采集 使用正确的工具挖掘有效方块(经验根据方块硬度缩放)。
钓鱼 饵钓、海之眷顾 钓到鱼以及钓起宝藏/垃圾战利品。
护甲与防御 保护、爆炸/火焰/弹射物保护、荆棘、摔落保护 承受生物伤害、在爆炸中存活、吸收火焰伤害、通过荆棘反弹攻击,以及从高处坠落存活。
特殊功能 水下呼吸、水下速掘、迅捷潜行、灵魂疾行、冰霜行者、深海探索者 潜入水下、在黑暗/敌对环境中潜行、在灵魂沙/灵魂土上疾跑、在结冰的冰面上行走,以及游泳。
盾牌与鞘翅 耐久 用盾牌格挡大量来袭伤害;用鞘翅持续滑翔穿越天空。

铁砧合并与经验转移

在原版 Minecraft 中,合并两个具有相同附魔等级的物品会立即获得下一等级。Enchantment Progression 用经验转移系统取代了这一机制

  • 目标物品(左侧槽位): 保留其当前等级作为起始基础。

  • 牺牲物品(右侧槽位): 转移其存储的一部分进度,并根据其等级提供额外经验。

公式

授予经验 = (牺牲物品存储的经验 × combine_xp_percent)+(牺牲物品等级 × combine_xp_per_level

如果合并后的经验超过下一等级的需求,目标物品会在铁砧上立即升级。多余的经验会结转到新等级。


配置与数据包

该模组中的每一个数值都可以在不接触任何 Java 代码的情况下进行配置。

全局配置(config/enchantment_progression/_default.js

控制当特定附魔文件没有覆盖某项设置时的回退默认行为:

{
  "base_xp": 100.0,             // 从等级 1 -> 2 所需的基础经验
  "level_multiplier": 2.0,      // 每级的指数缩放因子
  "max_level_override": 0,      // 覆盖最大附魔等级(0 = 使用原版最大值)
  "enabled": true,              // 该附魔的升级是否启用
  "combine_xp_per_level": 50.0, // 铁砧上每个牺牲物品等级提供的固定额外经验
  "combine_xp_percent": 0.25,   // 铁砧上转移的牺牲物品存储经验百分比(0.25 = 25%)
  "trigger_xp": 1.0,            // 触发条件中省略时的回退经验值
  "trigger_xp_multiplier": 1.0  // 触发条件中省略时的回退倍率
}

公式

物品从当前等级升到下一等级所需的经验量:阈值 = base_xp × current_level^level_multiplier

特定行为(击中、采矿、飞行等)授予的经验量:增加的经验 = trigger.xp × (baseAmount × trigger.xp_multiplier

自定义附魔 JSON(data/enchantment_progression/enchantment_progression/<name>.js

你可以在数据包中或直接在 config/enchantment_progression/ 内覆盖或创建自定义文件。

示例:sharpness.js

{
  "enchantment": "minecraft:sharpness",
  "base_xp": 120.0,
  "level_multiplier": 2.5,
  "max_level_override": 5,
  "enabled": true,
  "combine_xp_per_level": 60.0,
  "combine_xp_percent": 0.30,
  "triggers": [
    {
      "type": "deal_damage",
      "xp": 1.0,
      "xp_multiplier": 1.0
    },
    {
      "type": "kill_entity",
      "xp": 5.0,
      "xp_multiplier": 1.5
    }
  ]
}

支持的触发器筛选键:

  • "type":行为的标识符(deal_damagekill_entitybreak_blockshield_blockelytra_flighttake_damage 等)。

  • "block_tag" / "specific_block":匹配特定的方块标签或注册表 ID。

  • "item_tag":筛选钓到的鱼/战利品。

  • "entity_type_tag":筛选实体(minecraft:undeadminecraft:arthropods 等)。

  • "damage_type_tag":筛选伤害来源(minecraft:is_explosionminecraft:is_fire 等)。

  • "min_distance":远程命中或投掷所需的最小距离。

  • "target_flying":要求目标处于飞行状态。

  • "target_on_fire":要求目标正在燃烧。

  • "in_water_or_rain":要求实体处于潮湿状态。


KubeJS 支持(kubejs/server_scripts/<name>.js

如果安装了 KubeJS,Enchantment Progression 会注册自定义事件和脚本绑定。

监听与修改经验获取

示例:xp_modifier.js

EnchantmentProgressionEvents.xpGain(event => {
    let player = event.player;
    let item = event.itemStack;
    let ench = event.enchantmentId; // 例如 "minecraft:sharpness"
    
    // 如果玩家在下界,则双倍锋利经验
    if (ench === 'minecraft:sharpness' && player.level.dimension === 'minecraft:the_nether') {
        event.xp = event.xp * 2.0;
    }
    
    // 在自定义条件下完全取消经验获取:
    // event.cancel();
});

手动添加经验(Curios / 自定义物品栏集成)

你可以从外部脚本为任何物品授予经验。

示例:manual_xp_addition.js

// 直接为物品的耐久附魔进度添加 50 经验
EnchProgression.addXp(player, itemStack, 'minecraft:unbreaking', 50.0);

测试命令

快速生成初始附魔装备(lvl:1)以测试升级机制:

武器

/give @p netherite_sword{Enchantments:[{id:"minecraft:sharpness",lvl:1s},{id:"minecraft:looting",lvl:1s},{id:"minecraft:unbreaking",lvl:1s}]} 1

弓与弩

/give @p bow{Enchantments:[{id:"minecraft:power",lvl:1s},{id:"minecraft:unbreaking",lvl:1s}]} 1
/give @p crossbow{Enchantments:[{id:"minecraft:piercing",lvl:1s},{id:"minecraft:quick_charge",lvl:1s}]} 1

三叉戟

/give @p trident{Enchantments:[{id:"minecraft:loyalty",lvl:1s},{id:"minecraft:impaling",lvl:1s}]} 1

护甲与盾牌

/give @p netherite_chestplate{Enchantments:[{id:"minecraft:protection",lvl:1s},{id:"minecraft:thorns",lvl:1s}]} 1
/give @p shield{Enchantments:[{id:"minecraft:unbreaking",lvl:1s}]} 1
/give @p elytra{Enchantments:[{id:"minecraft:unbreaking",lvl:1s}]} 1

兼容性

  • Minecraft 版本: 1.20.1

  • 模组加载器: Minecraft Forge (47.1.0+)

  • 客户端 / 服务端: 客户端和服务端均需要(同步提示信息和升级逻辑)。

  • 模组附魔: 带有已定义类别的模组附魔会自动回退到平衡的默认曲线,并可以通过各自的 JSON 定义完全自定义。

已知问题

  • 穿刺忠诚 在三叉戟投掷使用时不会获得进度。