/leveluptool 指令

给玩家手中的 Tinkers’ 工具直接补满一次升级所需的经验。

  • 注册:IguanaTweaksTConstruct 的 FMLServerStartingEvent(脉冲 ToolLeveling 加载时)
  • 类:leveling/commands/IguanaCommandLevelUpTool.java
  • 权限等级:2(OP)
  • 用法:/leveluptool [玩家名]

参数

astring.length >= 1 时取 astring[0] 为目标玩家,否则取命令发送者自己。

流程

1. 前置校验

ItemStack equipped = entityplayermp.getCurrentEquippedItem();
if (equipped != null && equipped.getItem() instanceof ToolCore) {
    NBTTagCompound tags = equipped.getTagCompound().getCompoundTag("InfiTool");
    if (tags.hasKey("ToolLevel")) { ... }
    else throw new WrongUsageException("Player must have a levelable Tinker's Construct tool in hand");
} else throw new WrongUsageException("Player must have a Tinker's Construct tool in hand");

即:必须是 ToolCore 且已带 ToolLevel 标签(经过 工具等级初始化)。

2. 满级判定

if (level >= 1 && level <= 5 || hLevel >= getMaterial("Copper").harvestLevel()
        || hLevel < getMaterial("Manyullyn").harvestLevel())

不满足则 throw new WrongUsageException("Players tool is already max level")。

⚠️ 源码中这四个条件的比较符号看起来是反的(<= 与 >= 混用、hLevel < ...Manyullyn 才继续),属于明显的逻辑瑕疵。在实际使用中该分支几乎总是通过,因此这个「满级判定」实际上近乎失效。文档如实记录,不做修正推测。

3. 计算补多少

long requiredToolXP = getRequiredXp(equipped, tags) - toolXP;
long requiredHeadXP = (tags.hasKey("HeadEXP")
        && hLevel >= Copper.harvestLevel()
        && hLevel <  Manyullyn.harvestLevel())
            ? getRequiredXp(equipped, tags) - headXP
            : -1;

然后二选一:

if (requiredHeadXP < requiredToolXP && requiredHeadXP > 0)
    updateXP(tool, player, toolXP + requiredHeadXP, headXP + requiredHeadXP);
else
    updateXP(tool, player, toolXP + requiredToolXP, headXP + requiredToolXP);

即先补挖掘等级(若挖掘提升还差得少),否则补工具等级。

已知的未完成部分

两处 notifyAdmins 调用被注释掉,源码留有 TODO:

// TODO: Find replacement for notifyAdmins

因此指令不给任何成功反馈——执行后只有升级本身的音效(iguanatweakstconstruct:chime)与聊天消息(若触发了 随机奖励 或橡皮鸡判定)。

触发的副作用

因为走的是正常的 LevelingLogic.updateXP 路径,指令会完整触发:

  • 升级 → 播放 iguanatweakstconstruct:chime 音效
  • 若当前等级在 BonusesAtLevels(默认 {2,3,4,5,6})中 → 触发一次 随机奖励
  • CheatyXP 仍会正常累加(走 updateXP 而非 addXP),但本指令只补一次所需经验,通常不足以触发橡皮鸡(橡皮鸡阈值是 CheatyXP * 2 >= 所需经验,而 CheatyXP 只在 addXP 里累加,updateXP 不累加)

相关