package net.minecraft.command; import java.util.List; import net.minecraft.block.state.IBlockState; import net.minecraft.init.Blocks; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.BlockPos; import net.minecraft.world.World; import net.minecraft.world.gen.structure.StructureBoundingBox; public class CommandCompare extends CommandBase { private static final String __OBFID = "CL_00002346"; public String getCommandName() { return "testforblocks"; } /** * Return the required permission level for this command. */ public int getRequiredPermissionLevel() { return 2; } public String getCommandUsage(ICommandSender sender) { return "commands.compare.usage"; } public void processCommand(ICommandSender sender, String[] args) throws CommandException { if (args.length < 9) { throw new WrongUsageException("commands.compare.usage", new Object[0]); } else { sender.func_174794_a(CommandResultStats.Type.AFFECTED_BLOCKS, 0); BlockPos var3 = func_175757_a(sender, args, 0, false); BlockPos var4 = func_175757_a(sender, args, 3, false); BlockPos var5 = func_175757_a(sender, args, 6, false); StructureBoundingBox var6 = new StructureBoundingBox(var3, var4); StructureBoundingBox var7 = new StructureBoundingBox(var5, var5.add(var6.func_175896_b())); int var8 = var6.getXSize() * var6.getYSize() * var6.getZSize(); if (var8 > 524288) { throw new CommandException("commands.compare.tooManyBlocks", new Object[] {Integer.valueOf(var8), Integer.valueOf(524288)}); } else if (var6.minY >= 0 && var6.maxY < 256 && var7.minY >= 0 && var7.maxY < 256) { World var9 = sender.getEntityWorld(); if (var9.isAreaLoaded(var6) && var9.isAreaLoaded(var7)) { boolean var10 = false; if (args.length > 9 && args[9].equals("masked")) { var10 = true; } var8 = 0; BlockPos var11 = new BlockPos(var7.minX - var6.minX, var7.minY - var6.minY, var7.minZ - var6.minZ); for (int var12 = var6.minZ; var12 <= var6.maxZ; ++var12) { for (int var13 = var6.minY; var13 <= var6.maxY; ++var13) { for (int var14 = var6.minX; var14 <= var6.maxX; ++var14) { BlockPos var15 = new BlockPos(var14, var13, var12); BlockPos var16 = var15.add(var11); boolean var17 = false; IBlockState var18 = var9.getBlockState(var15); if (!var10 || var18.getBlock() != Blocks.air) { if (var18 == var9.getBlockState(var16)) { TileEntity var19 = var9.getTileEntity(var15); TileEntity var20 = var9.getTileEntity(var16); if (var19 != null && var20 != null) { NBTTagCompound var21 = new NBTTagCompound(); var19.writeToNBT(var21); var21.removeTag("x"); var21.removeTag("y"); var21.removeTag("z"); NBTTagCompound var22 = new NBTTagCompound(); var20.writeToNBT(var22); var22.removeTag("x"); var22.removeTag("y"); var22.removeTag("z"); if (!var21.equals(var22)) { var17 = true; } } else if (var19 != null) { var17 = true; } } else { var17 = true; } ++var8; if (var17) { throw new CommandException("commands.compare.failed", new Object[0]); } } } } } sender.func_174794_a(CommandResultStats.Type.AFFECTED_BLOCKS, var8); notifyOperators(sender, this, "commands.compare.success", new Object[] {Integer.valueOf(var8)}); } else { throw new CommandException("commands.compare.outOfWorld", new Object[0]); } } else { throw new CommandException("commands.compare.outOfWorld", new Object[0]); } } } public List addTabCompletionOptions(ICommandSender sender, String[] args, BlockPos pos) { return args.length > 0 && args.length <= 3 ? func_175771_a(args, 0, pos) : (args.length > 3 && args.length <= 6 ? func_175771_a(args, 3, pos) : (args.length > 6 && args.length <= 9 ? func_175771_a(args, 6, pos) : (args.length == 10 ? getListOfStringsMatchingLastWord(args, new String[] {"masked", "all"}): null))); } }