@Override
  public List addTabCompletionOptions(ICommandSender commandSender, String[] args) {
    if (args.length == 1)
      return getListOfStringsFromIterableMatchingLastWord(
          args, StructureRegistry.INSTANCE.allStructureIDs());
    else if (args.length == 2 || args.length == 3 || args.length == 4) {
      return getListOfStringsMatchingLastWord(args, "~");
    }

    return null;
  }
  @Override
  public void processCommand(ICommandSender commandSender, String[] args) {
    int x, y, z;

    if (args.length <= 0) {
      throw ServerTranslations.wrongUsageException("commands.strucImport.usage");
    }

    String structureName = args[0];
    StructureInfo structureInfo = StructureRegistry.INSTANCE.getStructure(structureName);
    World world = commandSender.getEntityWorld();

    if (structureInfo == null) {
      throw ServerTranslations.commandException("commands.strucImport.noStructure", structureName);
    }

    x = commandSender.getPlayerCoordinates().posX;
    y = commandSender.getPlayerCoordinates().posY;
    z = commandSender.getPlayerCoordinates().posZ;

    if (args.length >= 4) {
      x = MathHelper.floor_double(func_110666_a(commandSender, (double) x, args[1]));
      y = MathHelper.floor_double(func_110666_a(commandSender, (double) y, args[2]));
      z = MathHelper.floor_double(func_110666_a(commandSender, (double) z, args[3]));
    }

    AxisAlignedTransform2D transform = AxisAlignedTransform2D.ORIGINAL;
    BlockCoord coord = new BlockCoord(x, y, z);

    if (structureInfo instanceof GenericStructureInfo)
      OperationRegistry.queueOperation(
          new OperationGenerateStructure(
              (GenericStructureInfo) structureInfo, transform, coord, true),
          commandSender);
    else
      StructureGenerator.directly(
          structureInfo,
          StructureSpawnContext.complete(
              world, world.rand, transform, coord, structureInfo, 0, true));
  }
 @Override
 public void clearCustomFiles() {
   StructureRegistry.INSTANCE.clearCustom();
 }