/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 中累加,即通过正常游戏途径获得经验也会被计入。经验需求量大的工具更容易被误判。

相关