package net.minecraft.command.server; import java.util.Iterator; import java.util.List; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.command.CommandBase; import net.minecraft.command.CommandException; import net.minecraft.command.CommandResultStats; import net.minecraft.command.ICommandSender; import net.minecraft.command.NumberInvalidException; import net.minecraft.command.WrongUsageException; import net.minecraft.nbt.JsonToNBT; import net.minecraft.nbt.NBTBase; import net.minecraft.nbt.NBTException; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.BlockPos; import net.minecraft.world.World; public class CommandTestForBlock extends CommandBase { private static final String __OBFID = "CL_00001181"; public String getCommandName() { return "testforblock"; } /** * Return the required permission level for this command. */ public int getRequiredPermissionLevel() { return 2; } public String getCommandUsage(ICommandSender sender) { return "commands.testforblock.usage"; } public void processCommand(ICommandSender sender, String[] args) throws CommandException { if (args.length < 4) { throw new WrongUsageException("commands.testforblock.usage", new Object[0]); } else { sender.func_174794_a(CommandResultStats.Type.AFFECTED_BLOCKS, 0); BlockPos var3 = func_175757_a(sender, args, 0, false); Block var4 = Block.getBlockFromName(args[3]); if (var4 == null) { throw new NumberInvalidException("commands.setblock.notFound", new Object[] {args[3]}); } else { int var5 = -1; if (args.length >= 5) { var5 = parseInt(args[4], -1, 15); } World var6 = sender.getEntityWorld(); if (!var6.isBlockLoaded(var3)) { throw new CommandException("commands.testforblock.outOfWorld", new Object[0]); } else { NBTTagCompound var7 = new NBTTagCompound(); boolean var8 = false; if (args.length >= 6 && var4.hasTileEntity()) { String var9 = getChatComponentFromNthArg(sender, args, 5).getUnformattedText(); try { var7 = JsonToNBT.func_180713_a(var9); var8 = true; } catch (NBTException var13) { throw new CommandException("commands.setblock.tagError", new Object[] {var13.getMessage()}); } } IBlockState var14 = var6.getBlockState(var3); Block var10 = var14.getBlock(); if (var10 != var4) { throw new CommandException("commands.testforblock.failed.tile", new Object[] {Integer.valueOf(var3.getX()), Integer.valueOf(var3.getY()), Integer.valueOf(var3.getZ()), var10.getLocalizedName(), var4.getLocalizedName()}); } else { if (var5 > -1) { int var11 = var14.getBlock().getMetaFromState(var14); if (var11 != var5) { throw new CommandException("commands.testforblock.failed.data", new Object[] {Integer.valueOf(var3.getX()), Integer.valueOf(var3.getY()), Integer.valueOf(var3.getZ()), Integer.valueOf(var11), Integer.valueOf(var5)}); } } if (var8) { TileEntity var15 = var6.getTileEntity(var3); if (var15 == null) { throw new CommandException("commands.testforblock.failed.tileEntity", new Object[] {Integer.valueOf(var3.getX()), Integer.valueOf(var3.getY()), Integer.valueOf(var3.getZ())}); } NBTTagCompound var12 = new NBTTagCompound(); var15.writeToNBT(var12); if (!func_175775_a(var7, var12, true)) { throw new CommandException("commands.testforblock.failed.nbt", new Object[] {Integer.valueOf(var3.getX()), Integer.valueOf(var3.getY()), Integer.valueOf(var3.getZ())}); } } sender.func_174794_a(CommandResultStats.Type.AFFECTED_BLOCKS, 1); notifyOperators(sender, this, "commands.testforblock.success", new Object[] {Integer.valueOf(var3.getX()), Integer.valueOf(var3.getY()), Integer.valueOf(var3.getZ())}); } } } } } public static boolean func_175775_a(NBTBase p_175775_0_, NBTBase p_175775_1_, boolean p_175775_2_) { if (p_175775_0_ == p_175775_1_) { return true; } else if (p_175775_0_ == null) { return true; } else if (p_175775_1_ == null) { return false; } else if (!p_175775_0_.getClass().equals(p_175775_1_.getClass())) { return false; } else if (p_175775_0_ instanceof NBTTagCompound) { NBTTagCompound var9 = (NBTTagCompound)p_175775_0_; NBTTagCompound var10 = (NBTTagCompound)p_175775_1_; Iterator var11 = var9.getKeySet().iterator(); String var12; NBTBase var13; do { if (!var11.hasNext()) { return true; } var12 = (String)var11.next(); var13 = var9.getTag(var12); } while (func_175775_a(var13, var10.getTag(var12), p_175775_2_)); return false; } else if (p_175775_0_ instanceof NBTTagList && p_175775_2_) { NBTTagList var3 = (NBTTagList)p_175775_0_; NBTTagList var4 = (NBTTagList)p_175775_1_; if (var3.tagCount() == 0) { return var4.tagCount() == 0; } else { int var5 = 0; while (var5 < var3.tagCount()) { NBTBase var6 = var3.get(var5); boolean var7 = false; int var8 = 0; while (true) { if (var8 < var4.tagCount()) { if (!func_175775_a(var6, var4.get(var8), p_175775_2_)) { ++var8; continue; } var7 = true; } if (!var7) { return false; } ++var5; break; } } return true; } } else { return p_175775_0_.equals(p_175775_1_); } } public List addTabCompletionOptions(ICommandSender sender, String[] args, BlockPos pos) { return args.length > 0 && args.length <= 3 ? func_175771_a(args, 0, pos) : (args.length == 4 ? func_175762_a(args, Block.blockRegistry.getKeys()) : null); } }