/**
   * Gets the region selection for the player.
   *
   * @param player
   * @return the selection or null if there was none
   */
  public Selection getSelection(Player player) {
    if (player == null) {
      throw new IllegalArgumentException("Null player not allowed");
    }
    if (!player.isOnline()) {
      throw new IllegalArgumentException("Offline player not allowed");
    }

    LocalSession session = controller.getSession(wrapPlayer(player));
    RegionSelector selector =
        session.getRegionSelector(BukkitUtil.getLocalWorld(player.getWorld()));

    try {
      Region region = selector.getRegion();
      World world = ((BukkitWorld) session.getSelectionWorld()).getWorld();

      if (region instanceof CuboidRegion) {
        return new CuboidSelection(world, selector, (CuboidRegion) region);
      } else if (region instanceof Polygonal2DRegion) {
        return new Polygonal2DSelection(world, selector, (Polygonal2DRegion) region);
      } else {
        return null;
      }
    } catch (IncompleteRegionException e) {
      return null;
    }
  }
 @Override
 public void handleKick(UUID uuid, C c) {
   Player player = Bukkit.getPlayer(uuid);
   if (player != null && player.isOnline()) {
     MainUtil.sendMessage(BukkitUtil.getPlayer(player), c);
     player.teleport(player.getWorld().getSpawnLocation());
   }
 }
 /**
  * Returns the plot a player is currently in.
  *
  * @param player
  * @return boolean
  */
 public static Plot getCurrentPlot(final Player player) {
   if (!PS.get().isPlotWorld(player.getWorld().getName())) {
     return null;
   }
   final PlotId id = MainUtil.getPlotId(BukkitUtil.getLocation(player));
   final String world = player.getWorld().getName();
   if (id == null) {
     return null;
   }
   if (PS.get().getPlots(world).containsKey(id)) {
     return PS.get().getPlots(world).get(id);
   }
   return new Plot(id, null, new ArrayList<UUID>(), new ArrayList<UUID>(), world);
 }
  /**
   * Sets the region selection for a player.
   *
   * @param player
   * @param selection
   */
  public void setSelection(Player player, Selection selection) {
    if (player == null) {
      throw new IllegalArgumentException("Null player not allowed");
    }
    if (!player.isOnline()) {
      throw new IllegalArgumentException("Offline player not allowed");
    }
    if (selection == null) {
      throw new IllegalArgumentException("Null selection not allowed");
    }

    LocalSession session = controller.getSession(wrapPlayer(player));
    RegionSelector sel = selection.getRegionSelector();
    session.setRegionSelector(BukkitUtil.getLocalWorld(player.getWorld()), sel);
    session.dispatchCUISelection(wrapPlayer(player));
  }
 @Override
 public void unregister(PlotPlayer player) {
   BukkitUtil.removePlayer(player.getName());
 }