橡皮鸡(Rubber Chicken)
基本信息
| 属性 | 值 |
|---|---|
| 类名 | IguanaToolLeveling.rubberChicken(裸 Item,无子类) |
| 注册名 | rubberChicken |
| 未本地化名 | item.iguana.tcon.rubberChicken |
| 显示名(en_US) | Rubber Chicken |
| 显示名(ru_RU) | Резиновая курица |
| 贴图 | assets/iguanatweakstconstruct/textures/items/rubber_chicken.png |
| 创造栏 | 无 |
| 最大堆叠 | 64(未覆写,走 Item 默认) |
它是工具等级系统封顶后的替换物——工具升到 maxToolLevel
(默认 6)就不再升级,而是变成一只橡皮鸡,原工具信息被存进 NBT 保留。
何时出现
leveling/LevelingLogic.java:158-162,工具达到 maxToolLevel 时:
tags.setString("Original", Item.itemRegistry.getNameForObject(tool.getItem()));
// rubber chicken yaaaaay
tool.func_150996_a(IguanaToolLeveling.rubberChicken);
tags.setLong(TAG_EXP, 0L);
tags.setInteger("CheatyXP", 0);
即:
- 把原物品的注册名写进
InfiToolNBT 的Original字段(字符串) - 把工具的物品替换为橡皮鸡
- 经验清零:
TAG_EXP(long)与CheatyXP(int)都置 0
注意替换的是物品而不是整份 NBT,所以工具的材料、部件、附魔等仍留在 InfiTool 里,
这也是后续能原样还原的原因。
提示文本
leveling/handlers/LevelingToolTipHandler.java:36-43:当
stack.getItem() == rubberChicken 且 InfiTool 存在 Original 键时,在 tooltip 的
第 1、2 行(下标 1 与 2,不是追加到末尾)插入两行 DARK_RED / ITALIC 文本:
| 键 | en_US 原文 | 插入位置 |
|---|---|---|
tooltip.chicken1 |
You dirty cheater. |
下标 1 |
tooltip.chicken2 |
If you're sorry type '/imadirtycheater' |
下标 2 |
判据里 hasKey("Original") 与替换时的 setString("Original", ...) 一致;
若 NBT 被外部改坏导致缺这个键,就不会显示任何提示。
在 NEI 中被隐藏
IguanaToolLeveling.preInit()(第 58-61 行):客户端且检测到 NEI 加载时
调用 codechicken.nei.api.API.hideItem(new ItemStack(rubberChicken))。
源码注释原文是 // sneaky rubber chicken——因为这个物品只能通过把满级工具替换过来获得,
无法合成也无需合成,所以刻意不让玩家在 NEI 里搜到。故用 NEI 搜不到这只鸡是正常行为,
不是注册失败。
取回原工具
用 /imadirtycheater 指令。处理逻辑
(CommandIAmADirtyCheater.java:76-85):
- 要求
InfiTool存在Original键,否则直接返回 - 取出
Original字符串,通过注册表查回Item stack.func_150996_a(item)换回原物品,并把CheatyXP置 0
⚠️ 该指令第 79 行
Item.itemRegistry.containsKey(unloc);丢弃了返回值, 是残留的空检查,未起到任何保护作用。真正生效的是下一行getItemByText(sender, unloc)(查不到会向发送者报错并返回 null)。 同理LevelingLogic用Item.itemRegistry.getNameForObject(...)记录原名时, 若tool.getItem()恰好不在注册表里会得到null,setString将写入字面量"null", 此后/imadirtycheater就再也换不回来了——两个方向都是静默失败。
关联
- 工具等级系统 —— 触发替换的上层机制
- /imadirtycheater —— 取回原工具的指令