@Command( aliases = {"restore", "r"}, parent = "r2w", helpLookup = "r2w restore", description = "Restore from template", permissions = {"r2w.command.restore"}, toolTip = "/r2w restore [world_name world_dimension] [x1 y1 z1 [x2 y2 z2]]", min = 1, max = 9) public void restore(final MessageReceiver caller, final String[] parameters) throws InterruptedException, ExecutionException { boolean set = false; String world = null; String dimension = null; int x1 = 0; int y1 = 0; int z1 = 0; int x2 = 0; int y2 = 0; int z2 = 0; if (caller instanceof Player) { final Player player = (Player) caller; if (parameters.length == 1) { final Block block = getBlockLookingAt(player); world = block.getWorld().getName(); dimension = block.getWorld().getType().getName(); x1 = x2 = block.getX(); y1 = y2 = block.getY(); z1 = z2 = block.getZ(); set = true; } else if (parameters.length == 4) { world = player.getWorld().getName(); dimension = player.getWorld().getType().getName(); x1 = x2 = Integer.parseInt(parameters[2]); y1 = y2 = Integer.parseInt(parameters[3]); z1 = z2 = Integer.parseInt(parameters[4]); set = true; } else if (parameters.length == 7) { world = player.getWorld().getName(); dimension = player.getWorld().getType().getName(); x1 = Integer.parseInt(parameters[2]); y1 = Integer.parseInt(parameters[3]); z1 = Integer.parseInt(parameters[4]); x2 = Integer.parseInt(parameters[5]); y2 = Integer.parseInt(parameters[6]); z2 = Integer.parseInt(parameters[7]); set = true; } } if (!set) { world = parameters[1]; dimension = parameters[2]; x1 = Integer.parseInt(parameters[3]); y1 = Integer.parseInt(parameters[4]); z1 = Integer.parseInt(parameters[5]); x2 = Integer.parseInt(parameters[6]); y2 = Integer.parseInt(parameters[7]); z2 = Integer.parseInt(parameters[8]); } final Future<Boolean> future = templateManager.restore(world, DimensionType.fromName(dimension), x1, y1, z1, x2, y2, z2); if (future.get()) { sendMessage(caller, "Completed restoring template"); } else { sendMessage(caller, "Failed restoring template"); } }