/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不累加)
相关
- /toolxp 指令:按指定数值加经验
- /imadirtycheater 指令:恢复被橡皮鸡替换的工具
- /igdebug 指令:模拟随机奖励分布