@Command(
      aliases = {"reload"},
      desc = "Reload WorldGuard configuration",
      max = 0)
  @CommandPermissions({"worldguard.reload"})
  public void reload(CommandContext args, CommandSender sender) throws CommandException {

    LoggerToChatHandler handler = null;
    Logger minecraftLogger = null;

    if (sender instanceof Player) {
      handler = new LoggerToChatHandler(sender);
      handler.setLevel(Level.ALL);
      minecraftLogger = Logger.getLogger("Minecraft");
      minecraftLogger.addHandler(handler);
    }

    try {
      plugin.getGlobalStateManager().unload();
      plugin.getGlobalRegionManager().unload();
      plugin.getGlobalStateManager().load();
      plugin.getGlobalRegionManager().preload();
      WGBukkit.cleanCache();
      sender.sendMessage("WorldGuard configuration reloaded.");
    } catch (Throwable t) {
      sender.sendMessage("Error while reloading: " + t.getMessage());
    } finally {
      if (minecraftLogger != null) {
        minecraftLogger.removeHandler(handler);
      }
    }
  }
示例#2
0
  public void deleteRegion(Player player, String[] args) {
    if (args.length != 2) {
      player.sendMessage(ChatColor.RED + "Wrong usage. /pr help");
      return;
    }

    String id = "icp_" + player.getName() + "_" + args[1];

    World world = player.getWorld();
    LocalPlayer localPlayer = plugin.wrapPlayer(player);

    RegionManager mgr = plugin.getGlobalRegionManager().get(world);
    ProtectedRegion region = mgr.getRegion(id);

    if (region == null) {
      player.sendMessage(ChatColor.RED + "Could not find a region by that name.");
      return;
    }

    if (region.isOwner(localPlayer)) {
      mgr.removeRegion(id);

      player.sendMessage(ChatColor.YELLOW + "Region " + args[1] + " removed.");

      try {
        mgr.save();
      } catch (IOException e) {
        player.sendMessage(
            ChatColor.RED + "(shouldn't happen) Failed to write regions file: " + e.getMessage());
      }
    }
  }
示例#3
0
 /**
  * Checks if a block is protected by WorldGuard.
  *
  * @param block Bukkit block object to check
  * @return boolean of wheather it's protected
  */
 public static boolean isBlockProtected(Block block) {
   return (hasWG
           && wg.getGlobalRegionManager()
                   .get(block.getWorld())
                   .getApplicableRegions(BukkitUtil.toVector(block.getLocation()))
                   .size()
               > 0)
       || (hasResidence && Residence.getResidenceManager().getByLoc(block.getLocation()) != null);
 }
  /**
   * Checks to see whether a flag is allowed.
   *
   * @param flag
   * @param loc
   * @return
   */
  public boolean allows(StateFlag flag, Location loc) {
    World world = loc.getWorld();
    WorldConfiguration worldConfig = config.get(world);

    if (!worldConfig.useRegions) {
      return true;
    }

    RegionManager mgr = plugin.getGlobalRegionManager().get(world);
    return mgr.getApplicableRegions(toVector(loc)).allows(flag);
  }
示例#5
0
  public void checkRegion(Player sender, String[] args) {
    if (!sender.hasPermission("iceprotect.buy")) {
      sender.sendMessage(ChatColor.RED + "You don't have permission!");
      return;
    }

    if (args.length != 1) {
      sender.sendMessage(ChatColor.RED + "Wrong usage. /pr help");
      return;
    }

    String id = "icp__tempregion";

    Location loc = sender.getLocation();

    BlockVector min = new BlockVector(loc.getX() - 1, loc.getY() - 1, loc.getZ() - 1);
    BlockVector max = new BlockVector(loc.getX() + 1, loc.getY() + 1, loc.getZ() + 1);
    ProtectedRegion region = new ProtectedCuboidRegion(id, min, max);

    RegionManager mgr = plugin.getGlobalRegionManager().get(sender.getWorld());

    ApplicableRegionSet regions = mgr.getApplicableRegions(region);
    ProtectedRegion appReg = null;

    for (ProtectedRegion r : regions) {
      if (econ.isRegionForSale(r.getId())) {
        appReg = r;
        break;
      }
    }

    if (appReg == null) {
      sender.sendMessage(ChatColor.RED + "No nearby regions for sale!");
      return;
    } else {
      double cost = regionsForSale.getDouble("regions." + appReg.getId() + ".price", 0D);
      if (cost == 0) {
        sender.sendMessage(
            ChatColor.RED + "(this shouldn't happen) You can't buy this region. Notify an admin!");
        return;
      }

      sender.sendMessage(
          ChatColor.YELLOW
              + "This region "
              + appReg.getId()
              + " is for sale by "
              + regionsForSale.getString("regions." + appReg.getId() + ".seller"));
      sender.sendMessage(ChatColor.YELLOW + "And costs $" + cost + ".");
    }
  }
示例#6
0
  public void allowUser(Player player, String[] args) {
    if (args.length != 3) {
      player.sendMessage(ChatColor.RED + "Wrong usage. /pr help");
      return;
    }

    String id = "icp_" + player.getName() + "_" + args[2];

    World world = player.getWorld();
    LocalPlayer localPlayer = plugin.wrapPlayer(player);

    RegionManager mgr = plugin.getGlobalRegionManager().get(world);
    ProtectedRegion region = mgr.getRegion(id);

    if (region == null) {
      player.sendMessage(ChatColor.RED + "Could not find a region by that name.");
      return;
    }

    if (region.isOwner(localPlayer)) {
      region.getMembers().addPlayer(args[1]);
      player.sendMessage(
          ChatColor.GREEN
              + "Allowed "
              + ChatColor.RED
              + args[1]
              + ChatColor.GREEN
              + " to region "
              + ChatColor.RED
              + args[2]
              + ChatColor.GREEN
              + ".");

      Player targetPlayer = Bukkit.getServer().getPlayerExact(args[1]);
      if (targetPlayer != null) {
        targetPlayer.sendMessage(
            ChatColor.GREEN
                + player.getName()
                + " has added you as a member in the "
                + ChatColor.RED
                + args[2]
                + ChatColor.GREEN
                + " region.");
      }

    } else {
      player.sendMessage(ChatColor.RED + "(shouldn't happen) You don't own the region " + args[2]);
    }
  }
  public boolean canEditSign(Player player) {
    if (!hasPermission(player, "signutils.settext")) {
      return false;
    }

    if (wgHandeler != null) {
      if (!wgHandeler
          .getGlobalRegionManager()
          .canBuild(player, plugin.signSelMgr.getSelection(player))) {
        player.sendMessage(ChatColor.RED + "You cant edit this sign");
        return false;
      } else {
        return true;
      }
    } else {
      return true;
    }
  }
示例#8
0
  public void listRegions(Player player, String[] args) {
    World world = player.getWorld();

    RegionManager mgr = plugin.getGlobalRegionManager().get(world);
    StringBuilder regions = new StringBuilder();
    Set<String> keySet = mgr.getRegions().keySet();

    for (String regionName : keySet) {
      if (regionName.startsWith("icp_" + player.getName().toLowerCase() + "_")) {
        regions.append(
            regionName.replaceFirst("icp_" + player.getName().toLowerCase() + "_", "") + ", ");
      }
    }

    if (regions.length() == 0) {
      player.sendMessage(ChatColor.RED + "You don't have regions in this world.");
    } else {
      player.sendMessage(ChatColor.AQUA + "Your regions:");
      regions.deleteCharAt(regions.length() - 2);
      player.sendMessage(ChatColor.AQUA + regions.toString());
    }
  }
示例#9
0
  public void buyRegion(Player sender, String[] args) {
    if (!sender.hasPermission("iceprotect.buy")) {
      sender.sendMessage(ChatColor.RED + "You don't have permission!");
      return;
    }

    if (args.length != 1) {
      sender.sendMessage(ChatColor.RED + "Wrong usage. /pr help");
      return;
    }

    String id = "icp__tempregion";

    Location loc = sender.getLocation();

    BlockVector min = new BlockVector(loc.getX() - 1, loc.getY() - 1, loc.getZ() - 1);
    BlockVector max = new BlockVector(loc.getX() + 1, loc.getY() + 1, loc.getZ() + 1);
    ProtectedRegion region = new ProtectedCuboidRegion(id, min, max);

    RegionManager mgr = plugin.getGlobalRegionManager().get(sender.getWorld());

    ApplicableRegionSet regions = mgr.getApplicableRegions(region);
    ProtectedRegion appReg = null;

    for (ProtectedRegion r : regions) {
      if (econ.isRegionForSale(r.getId())) {
        appReg = r;
        break;
      }
    }

    if (appReg == null) {
      sender.sendMessage(ChatColor.RED + "No nearby regions for sale!");
      return;
    }

    econ.buyRegion(appReg, sender, mgr);
  }
示例#10
0
  public void sellRegion(Player sender, String[] args) {
    if (!sender.hasPermission("iceprotect.sell")) {
      sender.sendMessage(ChatColor.RED + "You don't have permission!");
      return;
    }

    if (args.length != 2) {
      sender.sendMessage(ChatColor.RED + "Something went wrong!");
      sender.sendMessage(ChatColor.RED + "Usage: /psell <region_name> <price>");
      return;
    }

    if (!ProtectedRegion.isValidId(args[0])) {
      sender.sendMessage(ChatColor.RED + "Invalid region name specified!");
      return;
    }

    RegionManager mgr = plugin.getGlobalRegionManager().get(sender.getLocation().getWorld());

    if (!mgr.hasRegion(args[0])) {
      sender.sendMessage(ChatColor.RED + "Nonexistent region name specified!");
      return;
    }

    regionsForSale.setProperty("regions." + args[0] + ".price", Double.parseDouble(args[1]));
    regionsForSale.setProperty("regions." + args[0] + ".seller", sender.getName());
    regionsForSale.save();

    sender.sendMessage(
        ChatColor.GREEN
            + "You successfully added "
            + ChatColor.YELLOW
            + args[0]
            + ChatColor.GREEN
            + " to the sell list.");
  }
示例#11
0
  public void denyUser(Player player, String[] args) {
    if (args.length != 3) {
      player.sendMessage(ChatColor.RED + "Wrong usage. /pr help");
      return;
    }

    String id = "icp_" + player.getName() + "_" + args[2];

    World world = player.getWorld();
    LocalPlayer localPlayer = plugin.wrapPlayer(player);

    RegionManager mgr = plugin.getGlobalRegionManager().get(world);
    ProtectedRegion region = mgr.getRegion(id);

    if (region == null) {
      player.sendMessage(ChatColor.RED + "Could not find a region by that name.");
      return;
    }

    if (region.isOwner(localPlayer)) {
      region.getMembers().removePlayer(args[1]);
      player.sendMessage(
          ChatColor.GREEN
              + "Removed player "
              + ChatColor.RED
              + args[1]
              + ChatColor.GREEN
              + " from region "
              + ChatColor.RED
              + args[2]
              + ChatColor.GREEN
              + ".");
    } else {
      player.sendMessage(ChatColor.RED + "(shouldn't happen) You don't own the region " + args[2]);
    }
  }
示例#12
0
  public void setFlags(Player sender, String[] args) {
    Player player = null;
    try {
      player = plugin.checkPlayer(sender);
    } catch (CommandException e1) {
      e1.printStackTrace();
      return;
    }

    World world = player.getWorld();
    LocalPlayer localPlayer = plugin.wrapPlayer(player);

    String value = null;

    if (args.length == 4) {
      value = args[3];
    } else if (args.length == 3) {
      //
    } else {
      player.sendMessage(ChatColor.RED + "Wrong usage! /pr help");
      return;
    }

    String id = "icp_" + player.getName() + "_" + args[1];
    String flagName = args[2];

    if (!(flagName.equals("use")
        || flagName.equals("chest-access")
        || flagName.equals("snow-fall")
        || flagName.equals("snow-melt")
        || flagName.equals("ice-form")
        || flagName.equals("ice-melt"))) {
      player.sendMessage(ChatColor.RED + "Unsupported flag! /pr help flags");
      return;
    }

    RegionManager mgr = plugin.getGlobalRegionManager().get(world);
    ProtectedRegion region = mgr.getRegion(id);

    if (region == null) {
      player.sendMessage(ChatColor.RED + "Could not find a region by that name.");
      return;
    }

    Flag<?> foundFlag = null;

    for (Flag<?> flag : DefaultFlag.getFlags()) {
      if (flag.getName().replace("-", "").equalsIgnoreCase(flagName.replace("-", ""))) {
        foundFlag = flag;
        break;
      }
    }

    if (foundFlag == null) {
      StringBuilder list = new StringBuilder();

      for (Flag<?> flag : DefaultFlag.getFlags()) {
        if (list.length() > 0) {
          list.append(", ");
        }

        if (!region.isOwner(localPlayer)) {
          continue;
        }

        list.append(flag.getName());
      }

      player.sendMessage(ChatColor.RED + "Unknown flag specified: " + flagName);
      player.sendMessage(ChatColor.RED + "Available flags: " + list);
      return;
    }

    if (region.isOwner(localPlayer)) {

      if (value != null) {
        try {
          setFlag(region, foundFlag, sender, value);
        } catch (InvalidFlagFormat e) {
          player.sendMessage(ChatColor.RED + e.getMessage());
          return;
        }

        sender.sendMessage(
            ChatColor.YELLOW
                + "Region flag "
                + ChatColor.GREEN
                + foundFlag.getName()
                + ChatColor.YELLOW
                + " set.");
      } else {
        region.setFlag(foundFlag, null);

        sender.sendMessage(
            ChatColor.YELLOW
                + "Region flag "
                + ChatColor.GREEN
                + foundFlag.getName()
                + ChatColor.YELLOW
                + " cleared.");
      }

    } else {
      sender.sendMessage(ChatColor.RED + "(shouldn't happen) You don't own this region!");
      return;
    }

    try {
      mgr.save();
    } catch (IOException e) {
      player.sendMessage(ChatColor.RED + "Failed to write regions file: " + e.getMessage());
    }
  }
示例#13
0
  public void setRegion(Player sender, String[] args) {
    if (args.length != 2) {
      sender.sendMessage(ChatColor.RED + "Wrong usage. /pr help");
      return;
    }

    LocalPlayer wgPlayer = plugin.wrapPlayer(sender);

    String id = "icp_" + sender.getName() + "_" + args[1];

    if (!ProtectedRegion.isValidId(id)) {
      sender.sendMessage(ChatColor.RED + "Invalid region name specified!");
      return;
    }

    Selection sel = worldEdit.getSelection(sender);

    if (sel == null) {
      sender.sendMessage(ChatColor.RED + "Select a region with a wooden axe first.");
      return;
    }

    RegionManager mgr = plugin.getGlobalRegionManager().get(sel.getWorld());

    if (mgr.hasRegion(id)) {
      sender.sendMessage(
          ChatColor.RED + "That region name is already taken. Please choose a new name.");
      return;
    }

    int regionCount = mgr.getRegionCountOfPlayer(wgPlayer);

    if (regionCount > Economy.maxDonatorAllowedRegions
        && !sender.isOp()
        && sender.hasPermission("iceprotect.freeprotect")) {
      sender.sendMessage(
          ChatColor.RED
              + "You have reached the maximum allowed regions per user ("
              + Economy.maxDonatorAllowedRegions
              + ").");
      sender.sendMessage(ChatColor.RED + "Please contact an admin.");
      return;
    }

    ProtectedRegion region = null;

    if (sel instanceof Polygonal2DSelection) {
      Polygonal2DSelection polySel = (Polygonal2DSelection) sel;
      int minY = polySel.getNativeMinimumPoint().getBlockY();
      int maxY = polySel.getNativeMaximumPoint().getBlockY();
      region = new ProtectedPolygonalRegion(id, polySel.getNativePoints(), minY, maxY);
    } else if (sel instanceof CuboidSelection) {
      BlockVector min = sel.getNativeMinimumPoint().toBlockVector();
      BlockVector max = sel.getNativeMaximumPoint().toBlockVector();
      region = new ProtectedCuboidRegion(id, min, max);
    } else {
      sender.sendMessage(
          ChatColor.RED
              + "(shouldn't happen) Something went wrong. The type of region selected is unsupported!");
      return;
    }

    String[] names = new String[1];
    names[0] = sender.getName();
    region.setOwners(RegionUtil.parseDomainString(names, 0));

    ApplicableRegionSet regions = mgr.getApplicableRegions(region);

    if (!regions.isOwnerOfAll(wgPlayer)) {
      sender.sendMessage(ChatColor.RED + "That region overlaps with another one not owned by you!");
      return;
    }

    double cost = (int) Math.ceil(econ.getCost(region.volume()));

    if (cost > Economy.maxDonatorAllowedCost && sender.hasPermission("iceprotect.freeprotect")) {
      sender.sendMessage(
          ChatColor.RED + "You have exceeded the maximum allowed price for this region!");
      sender.sendMessage(
          ChatColor.RED
              + "Cost: "
              + ChatColor.GRAY
              + "$"
              + cost
              + ChatColor.RED
              + ", "
              + ChatColor.GRAY
              + "$"
              + Economy.maxDonatorAllowedCost
              + " allowed.");
      return;
    }

    if (!sender.hasPermission("iceprotect.freeprotect") && !econ.chargePlayer(sender, cost)) {
      sender.sendMessage(ChatColor.RED + "You don't have enough money! $" + cost + " needed.");
      return;
    }

    mgr.addRegion(region);

    try {
      mgr.save();
      sender.sendMessage(
          ChatColor.YELLOW
              + "Region saved as "
              + args[1]
              + ". "
              + (sender.hasPermission("iceprotect.freeprotect") ? "" : "Cost: $" + cost + "."));
    } catch (IOException e) {
      sender.sendMessage(
          ChatColor.RED + "(shouldn't happen) Failed to write regions file: " + e.getMessage());
      e.printStackTrace();
      return;
    }
  }