package net.minecraft.command; import com.google.common.collect.Lists; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.init.Blocks; import net.minecraft.inventory.IInventory; import net.minecraft.nbt.JsonToNBT; import net.minecraft.nbt.NBTException; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.BlockPos; import net.minecraft.world.World; public class CommandFill extends CommandBase { private static final String __OBFID = "CL_00002342"; public String getCommandName() { return "fill"; } /** * Return the required permission level for this command. */ public int getRequiredPermissionLevel() { return 2; } public String getCommandUsage(ICommandSender sender) { return "commands.fill.usage"; } public void processCommand(ICommandSender sender, String[] args) throws CommandException { if (args.length < 7) { throw new WrongUsageException("commands.fill.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); Block var5 = CommandBase.getBlockByText(sender, args[6]); int var6 = 0; if (args.length >= 8) { var6 = parseInt(args[7], 0, 15); } BlockPos var7 = new BlockPos(Math.min(var3.getX(), var4.getX()), Math.min(var3.getY(), var4.getY()), Math.min(var3.getZ(), var4.getZ())); BlockPos var8 = new BlockPos(Math.max(var3.getX(), var4.getX()), Math.max(var3.getY(), var4.getY()), Math.max(var3.getZ(), var4.getZ())); int var9 = (var8.getX() - var7.getX() + 1) * (var8.getY() - var7.getY() + 1) * (var8.getZ() - var7.getZ() + 1); if (var9 > 32768) { throw new CommandException("commands.fill.tooManyBlocks", new Object[] {Integer.valueOf(var9), Integer.valueOf(32768)}); } else if (var7.getY() >= 0 && var8.getY() < 256) { World var10 = sender.getEntityWorld(); for (int var11 = var7.getZ(); var11 < var8.getZ() + 16; var11 += 16) { for (int var12 = var7.getX(); var12 < var8.getX() + 16; var12 += 16) { if (!var10.isBlockLoaded(new BlockPos(var12, var8.getY() - var7.getY(), var11))) { throw new CommandException("commands.fill.outOfWorld", new Object[0]); } } } NBTTagCompound var22 = new NBTTagCompound(); boolean var23 = false; if (args.length >= 10 && var5.hasTileEntity()) { String var13 = getChatComponentFromNthArg(sender, args, 9).getUnformattedText(); try { var22 = JsonToNBT.func_180713_a(var13); var23 = true; } catch (NBTException var21) { throw new CommandException("commands.fill.tagError", new Object[] {var21.getMessage()}); } } ArrayList var24 = Lists.newArrayList(); var9 = 0; for (int var14 = var7.getZ(); var14 <= var8.getZ(); ++var14) { for (int var15 = var7.getY(); var15 <= var8.getY(); ++var15) { for (int var16 = var7.getX(); var16 <= var8.getX(); ++var16) { BlockPos var17 = new BlockPos(var16, var15, var14); IBlockState var19; if (args.length >= 9) { if (!args[8].equals("outline") && !args[8].equals("hollow")) { if (args[8].equals("destroy")) { var10.destroyBlock(var17, true); } else if (args[8].equals("keep")) { if (!var10.isAirBlock(var17)) { continue; } } else if (args[8].equals("replace") && !var5.hasTileEntity()) { if (args.length > 9) { Block var18 = CommandBase.getBlockByText(sender, args[9]); if (var10.getBlockState(var17).getBlock() != var18) { continue; } } if (args.length > 10) { int var28 = CommandBase.parseInt(args[10]); var19 = var10.getBlockState(var17); if (var19.getBlock().getMetaFromState(var19) != var28) { continue; } } } } else if (var16 != var7.getX() && var16 != var8.getX() && var15 != var7.getY() && var15 != var8.getY() && var14 != var7.getZ() && var14 != var8.getZ()) { if (args[8].equals("hollow")) { var10.setBlockState(var17, Blocks.air.getDefaultState(), 2); var24.add(var17); } continue; } } TileEntity var29 = var10.getTileEntity(var17); if (var29 != null) { if (var29 instanceof IInventory) { ((IInventory)var29).clearInventory(); } var10.setBlockState(var17, Blocks.barrier.getDefaultState(), var5 == Blocks.barrier ? 2 : 4); } var19 = var5.getStateFromMeta(var6); if (var10.setBlockState(var17, var19, 2)) { var24.add(var17); ++var9; if (var23) { TileEntity var20 = var10.getTileEntity(var17); if (var20 != null) { var22.setInteger("x", var17.getX()); var22.setInteger("y", var17.getY()); var22.setInteger("z", var17.getZ()); var20.readFromNBT(var22); } } } } } } Iterator var25 = var24.iterator(); while (var25.hasNext()) { BlockPos var26 = (BlockPos)var25.next(); Block var27 = var10.getBlockState(var26).getBlock(); var10.func_175722_b(var26, var27); } if (var9 <= 0) { throw new CommandException("commands.fill.failed", new Object[0]); } else { sender.func_174794_a(CommandResultStats.Type.AFFECTED_BLOCKS, var9); notifyOperators(sender, this, "commands.fill.success", new Object[] {Integer.valueOf(var9)}); } } else { throw new CommandException("commands.fill.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 == 7 ? func_175762_a(args, Block.blockRegistry.getKeys()) : (args.length == 9 ? getListOfStringsMatchingLastWord(args, new String[] {"replace", "destroy", "keep", "hollow", "outline"}): null))); } }