/imadirtycheater 指令
恢复被「橡皮鸡」机制替换掉的工具。权限等级 0——任何玩家都能用。
- 注册:
IguanaTweaksTConstruct的FMLServerStartingEvent - 类:
commands/CommandIAmADirtyCheater.java - 指令名:
imadirtycheater - 权限等级:
0 - 用法:交互式——先用指令得到道歉语,再把该语作为参数输入
指令流程
1. 判定是否为作弊者
public boolean isCheater(ICommandSender sender) {
ItemStack stack = getCurrentItem(sender);
return stack != null && stack.getItem() == IguanaToolLeveling.rubberChicken;
}
只有手中正拿着橡皮鸡才算。
2. 不是作弊者
sender.addChatMessage(new ChatComponentText(EnumChatFormatting.ITALIC + "You don't look like a cheater to me"));
指令用法(getCommandUsage)也随之变化:
| 状态 | usage 提示 |
|---|---|
| 是作弊者 | I heard you like chicken |
| 否 | Why are you saying that you're a dirty cheater? |
3. 是作弊者:索取道歉
先输出本地化字符串 message.apology,并提示输入:
If you're really sorry, type:
/imadirtycheater <message.apology 的内容>
4. 参数匹配则恢复工具
if (arg.toLowerCase().trim().equals(sb.toString().toLowerCase().trim())) {
sender.addChatMessage(new ChatComponentTranslation("message.apologyaccepted"));
convertTool(sender, getCurrentItem(sender));
} else { /* 重新提示 */ }
比较是大小写不敏感 + 去首尾空白的,args 用空格拼接。
工具恢复逻辑
private void convertTool(ICommandSender sender, ItemStack stack) {
if (stack.getItem() != IguanaToolLeveling.rubberChicken) return;
if (!stack.hasTagCompound()
|| !stack.getTagCompound().getCompoundTag("InfiTool").hasKey("Original")) return;
String unloc = stack.getTagCompound().getCompoundTag("InfiTool").getString("Original");
Item.itemRegistry.containsKey(unloc); // ← 返回值未被使用
Item item = getItemByText(sender, unloc);
if (item == null) return;
stack.func_150996_a(item);
stack.getTagCompound().getCompoundTag("InfiTool").setInteger("CheatyXP", 0);
}
| 步骤 | 动作 |
|---|---|
| 1 | 确认物品是橡皮鸡 |
| 2 | 确认 InfiTool 复合标签里有 Original 键(工具等级系统 写入的原始工具注册名) |
| 3 | Item.itemRegistry.containsKey(unloc) —— 返回值被丢弃,这是一次无副作用的存在性检查(疑似遗留代码) |
| 4 | getItemByText 解析物品;解析不到则静默 return |
| 5 | func_150996_a(item) 把物品换成原工具(保留 NBT) |
| 6 | CheatyXP 归零,解除橡皮鸡判定状态 |
保留 NBT 意味着等级、经验、挖掘等级、已施加的修饰符全部回到被替换前的状态——这也是 橡皮鸡机制 本身不做数据备份也能恢复的原因。
橡皮鸡从何而来
工具等级系统 的防作弊判定:当 CheatyXP * 2 >= 所需经验 时,工具被替换为 IguanaToolLeveling.rubberChicken,同时:
- 聊天栏显示
message.levelup.chicken(深红) - 播放
iguanatweakstconstruct:chicken音效 - 客户端还会在玩家位置生成 1337 个 1 点经验球(
for (int i = 0; i < 1337; i++)) ToolEXP与CheatyXP归零
CheatyXP 只在 LevelingLogic.addXP 中累加,即通过正常游戏途径获得经验也会被计入。经验需求量大的工具更容易被误判。