private boolean setPlaceables(CommandSender sender, String[] args) {
    if (!(sender instanceof Player)) {
      return true;
    }
    Player player = (Player) sender;

    if (args.length != 1 || !args[0].matches("^[0-9]+(,[0-9]+)*$")) {
      return false;
    }

    String[] s = args[0].split(",");
    int[] types = new int[s.length];
    for (int i = 0; i < s.length; i++) {
      types[i] = Integer.parseInt(s[i]);
    }

    WorldInstance instance = plugin.getWorldInstance(player);
    if (instance == null) {
      player.sendMessage("You are not in an instance.");
      return true;
    }

    instance.getBase().setPlaceable(types);
    setConfigValue(instance, "placeable", types);

    return true;
  }
  private boolean setMonsters(CommandSender sender, String[] args) {
    if (!(sender instanceof Player)) {
      return true;
    }
    Player player = (Player) sender;

    if (args.length != 1) {
      return false;
    }

    boolean val = false;
    if (args[0].equalsIgnoreCase("on")) {
      val = true;
    } else if (args[0].equalsIgnoreCase("off")) {
      val = false;
    } else {
      return false;
    }

    WorldInstance instance = plugin.getWorldInstance(player);
    if (instance == null) {
      player.sendMessage("You are not in an instance.");
      return true;
    }

    instance.getBase().setMonstersEnabled(val);
    setConfigValue(instance, "monsters", val);

    return true;
  }
  private boolean start(CommandSender sender, String[] args) {
    if (!(sender instanceof Player)) {
      return true;
    }
    Player player = (Player) sender;

    WorldInstance instance = plugin.getWorldInstance(player);
    if (instance == null) {
      player.sendMessage("You are not in an instance.");
      return true;
    }

    Location loc = player.getLocation();
    String location =
        loc.getX()
            + ","
            + loc.getY()
            + ","
            + loc.getZ()
            + ","
            + loc.getYaw()
            + ","
            + loc.getPitch();
    instance.getBase().setStartLocationString(location);
    setConfigValue(instance, "start", location);
    return true;
  }
 private boolean listWorlds(CommandSender sender, String[] args) {
   int i = 1;
   for (World world : plugin.getServer().getWorlds()) {
     WorldInstance instance = plugin.getWorldInstance(world);
     String s = "World " + i + ": " + world.getName();
     if (instance != null) {
       s += " instance of " + instance.getBase().getName();
     }
     sender.sendMessage(s);
     i++;
   }
   return true;
 }
 private boolean loadWorld(CommandSender sender, String[] args) {
   if (args != null && args.length == 1) {
     WorldBase base = plugin.worldBases.get(args[0]);
     if (base != null) {
       WorldInstance instance = plugin.launchInstance(base, true);
       if (instance != null && sender instanceof Player) {
         Player player = (Player) sender;
         plugin.playerLocations.put(player.getName().toLowerCase(), instance.getWorldName());
         instance.teleport(player);
       }
     }
   }
   return true;
 }
 private boolean saveWorld(CommandSender sender, String[] args) {
   final Player player = (Player) sender;
   final WorldInstance instance = plugin.getWorldInstance(player);
   if (instance == null) {
     player.sendMessage("You must be in an instance to do this.");
   } else {
     instance.getInstanceWorld().save();
     Bukkit.getScheduler()
         .scheduleSyncDelayedTask(
             plugin,
             new Runnable() {
               public void run() {
                 instance.overwriteBase();
                 player.sendMessage("World base saved.");
               }
             },
             40);
   }
   return true;
 }
  private boolean newWorld(CommandSender sender, String[] args) {
    if (args.length < 3) {
      return false;
    }

    String worldName = args[0];
    if (!worldName.matches("^[A-Za-z0-9_]+$")) {
      return false;
    }

    String seed = args[1];
    if (!seed.matches("[0-9]+")) {
      return false;
    }

    String worldDesc = args[2];
    for (int i = 3; i < args.length; i++) {
      worldDesc += " " + args[i];
    }

    sender.sendMessage("Creating new world base...");

    Configuration config = plugin.getConfig();
    ConfigurationSection section = config.createSection("worlds." + worldName);
    section.set("folder", worldName);
    section.set("description", worldDesc);
    section.set("seed", Long.parseLong(seed));
    plugin.saveConfig();

    WorldBase base = new WorldBase(worldName, section);
    plugin.worldBases.put(worldName, base);

    WorldInstance instance = new WorldInstance(base, true, true);
    plugin.loadedWorlds.put(instance.getWorldName(), instance);
    if (sender instanceof Player) {
      instance.teleport((Player) sender);
    }

    sender.sendMessage("New world base created!");
    return true;
  }
  private boolean leave(CommandSender sender, String[] args) {
    if (!(sender instanceof Player)) {
      return true;
    }
    Player player = (Player) sender;

    boolean warn = true;

    final WorldInstance instance = plugin.getWorldInstance(player);
    if (instance != null) {
      instance.eject(player);
      warn = false;
      Bukkit.getScheduler()
          .scheduleSyncDelayedTask(
              plugin,
              new Runnable() {
                public void run() {
                  if (instance.worldLoaded()
                      && instance.getInstanceWorld().getPlayers().size() == 0) {
                    plugin.killInstance(instance, false);
                  }
                }
              },
              600);
    }

    Party party = plugin.parties.get(player.getName().toLowerCase());
    if (party == null) {
      if (warn) {
        player.sendMessage("You are not in a party.");
      }
    } else {
      party.remove(player);
      plugin.parties.remove(player.getName().toLowerCase());
    }

    return true;
  }
  private boolean setMax(CommandSender sender, String[] args) {
    if (!(sender instanceof Player)) {
      return true;
    }
    Player player = (Player) sender;

    if (args.length != 1 || !args[0].matches("^[0-9]+$")) {
      return false;
    }

    int min = Integer.parseInt(args[0]);

    WorldInstance instance = plugin.getWorldInstance(player);
    if (instance == null) {
      player.sendMessage("You are not in an instance.");
      return true;
    }

    instance.getBase().setMaxPlayers(min);
    setConfigValue(instance, "max-players", min);

    return true;
  }
 private void setConfigValue(WorldInstance instance, String key, Object value) {
   ConfigurationSection section =
       plugin.getConfig().getConfigurationSection("worlds." + instance.getBase().getName());
   section.set(key, value);
   plugin.saveConfig();
 }