Search in sources :

Example 21 with ProtectedRegion

use of com.sk89q.worldguard.protection.regions.ProtectedRegion in project AreaShop by NLthijs48.

the class AddCommand method execute.

@Override
public void execute(final CommandSender sender, final String[] args) {
    if (!sender.hasPermission("areashop.createrent") && !sender.hasPermission("areashop.createrent.member") && !sender.hasPermission("areashop.createrent.owner") && !sender.hasPermission("areashop.createbuy") && !sender.hasPermission("areashop.createbuy.member") && !sender.hasPermission("areashop.createbuy.owner")) {
        plugin.message(sender, "add-noPermission");
        return;
    }
    if (args.length < 2 || args[1] == null || (!"rent".equals(args[1].toLowerCase()) && !"buy".equals(args[1].toLowerCase()))) {
        plugin.message(sender, "add-help");
        return;
    }
    Map<String, ProtectedRegion> regions = new HashMap<>();
    World world;
    Player player = null;
    if (sender instanceof Player) {
        player = (Player) sender;
    }
    if (args.length == 2) {
        if (player == null) {
            plugin.message(sender, "cmd-weOnlyByPlayer");
            return;
        }
        Selection selection = plugin.getWorldEdit().getSelection(player);
        if (selection == null) {
            plugin.message(player, "cmd-noSelection");
            return;
        }
        world = selection.getWorld();
        regions = Utils.getWorldEditRegionsInSelection(selection).stream().collect(Collectors.toMap(ProtectedRegion::getId, region -> region));
        if (regions.size() == 0) {
            plugin.message(player, "cmd-noWERegionsFound");
            return;
        }
    } else {
        if (player != null) {
            if (args.length == 4) {
                world = Bukkit.getWorld(args[3]);
                if (world == null) {
                    plugin.message(sender, "add-incorrectWorld", args[3]);
                    return;
                }
            } else {
                world = ((Player) sender).getWorld();
            }
        } else {
            if (args.length < 4) {
                plugin.message(sender, "add-specifyWorld");
                return;
            } else {
                world = Bukkit.getWorld(args[3]);
                if (world == null) {
                    plugin.message(sender, "add-incorrectWorld", args[3]);
                    return;
                }
            }
        }
        ProtectedRegion region = plugin.getWorldGuard().getRegionManager(world).getRegion(args[2]);
        if (region == null) {
            plugin.message(sender, "cmd-noRegion", args[2]);
            return;
        }
        regions.put(args[2], region);
    }
    final boolean isRent = "rent".equals(args[1].toLowerCase());
    final Map<String, ProtectedRegion> finalRegions = regions;
    final Player finalPlayer = player;
    final World finalWorld = world;
    AreaShop.debug("Starting add task with " + regions.size() + " regions");
    TreeSet<GeneralRegion> regionsSuccess = new TreeSet<>();
    TreeSet<GeneralRegion> regionsAlready = new TreeSet<>();
    TreeSet<String> namesBlacklisted = new TreeSet<>();
    TreeSet<String> namesNoPermission = new TreeSet<>();
    Do.forAll(plugin.getConfig().getInt("adding.regionsPerTick"), regions.entrySet(), regionEntry -> {
        String regionName = regionEntry.getKey();
        ProtectedRegion region = regionEntry.getValue();
        // Determine if the player is an owner or member of the region
        boolean isMember = finalPlayer != null && plugin.getWorldGuardHandler().containsMember(region, finalPlayer.getUniqueId());
        boolean isOwner = finalPlayer != null && plugin.getWorldGuardHandler().containsMember(region, finalPlayer.getUniqueId());
        String type;
        if (isRent) {
            type = "rent";
        } else {
            type = "buy";
        }
        FileManager.AddResult result = plugin.getFileManager().checkRegionAdd(sender, region, isRent ? GeneralRegion.RegionType.RENT : GeneralRegion.RegionType.BUY);
        if (result == FileManager.AddResult.ALREADYADDED) {
            regionsAlready.add(plugin.getFileManager().getRegion(regionName));
        } else if (result == FileManager.AddResult.BLACKLISTED) {
            namesBlacklisted.add(regionName);
        } else if (result == FileManager.AddResult.NOPERMISSION) {
            namesNoPermission.add(regionName);
        } else {
            // Check if the player should be landlord
            boolean landlord = (!sender.hasPermission("areashop.create" + type) && ((sender.hasPermission("areashop.create" + type + ".owner") && isOwner) || (sender.hasPermission("areashop.create" + type + ".member") && isMember)));
            List<UUID> existing = new ArrayList<>();
            existing.addAll(plugin.getWorldGuardHandler().getOwners(region).asUniqueIdList());
            existing.addAll(plugin.getWorldGuardHandler().getMembers(region).asUniqueIdList());
            if (isRent) {
                RentRegion rent = new RentRegion(regionName, finalWorld);
                // Set landlord
                if (landlord) {
                    rent.setLandlord(finalPlayer.getUniqueId(), finalPlayer.getName());
                }
                // Run commands
                rent.runEventCommands(GeneralRegion.RegionEvent.CREATED, true);
                plugin.getFileManager().addRent(rent);
                rent.handleSchematicEvent(GeneralRegion.RegionEvent.CREATED);
                rent.update();
                // Run commands
                rent.runEventCommands(GeneralRegion.RegionEvent.CREATED, false);
                // Add existing owners/members if any
                if (!landlord && !existing.isEmpty()) {
                    // TODO also execute rent events to notify other plugins?
                    // Run commands
                    rent.runEventCommands(GeneralRegion.RegionEvent.RENTED, true);
                    // Add values to the rent and send it to FileManager
                    rent.setRentedUntil(Calendar.getInstance().getTimeInMillis() + rent.getDuration());
                    rent.setRenter(existing.remove(0));
                    rent.updateLastActiveTime();
                    // Add others as friends
                    for (UUID friend : existing) {
                        rent.getFriendsFeature().addFriend(friend, null);
                    }
                    // Fire schematic event and updated times extended
                    rent.handleSchematicEvent(GeneralRegion.RegionEvent.RENTED);
                    // Notify about updates
                    rent.update();
                    rent.runEventCommands(GeneralRegion.RegionEvent.RENTED, false);
                }
                regionsSuccess.add(rent);
            } else {
                BuyRegion buy = new BuyRegion(regionName, finalWorld);
                // Set landlord
                if (landlord) {
                    buy.setLandlord(finalPlayer.getUniqueId(), finalPlayer.getName());
                }
                // Run commands
                buy.runEventCommands(GeneralRegion.RegionEvent.CREATED, true);
                plugin.getFileManager().addBuy(buy);
                buy.handleSchematicEvent(GeneralRegion.RegionEvent.CREATED);
                buy.update();
                // Run commands
                buy.runEventCommands(GeneralRegion.RegionEvent.CREATED, false);
                // Add existing owners/members if any
                if (!landlord && !existing.isEmpty()) {
                    // TODO also execute buy events to notify for other plugins?
                    // Run commands
                    buy.runEventCommands(GeneralRegion.RegionEvent.BOUGHT, true);
                    // Set the owner
                    buy.setBuyer(existing.remove(0));
                    buy.updateLastActiveTime();
                    // Add others as friends
                    for (UUID friend : existing) {
                        buy.getFriendsFeature().addFriend(friend, null);
                    }
                    // Notify about updates
                    buy.update();
                    // Update everything
                    buy.handleSchematicEvent(GeneralRegion.RegionEvent.BOUGHT);
                    // Run commands
                    buy.runEventCommands(GeneralRegion.RegionEvent.BOUGHT, false);
                }
                regionsSuccess.add(buy);
            }
        }
    }, () -> {
        if (!regionsSuccess.isEmpty()) {
            plugin.message(sender, "add-success", args[1], Utils.combinedMessage(regionsSuccess, "region"));
        }
        if (!regionsAlready.isEmpty()) {
            plugin.message(sender, "add-failed", Utils.combinedMessage(regionsAlready, "region"));
        }
        if (!namesBlacklisted.isEmpty()) {
            plugin.message(sender, "add-blacklisted", Utils.createCommaSeparatedList(namesBlacklisted));
        }
        if (!namesNoPermission.isEmpty()) {
            plugin.message(sender, "add-noPermissionRegions", Utils.createCommaSeparatedList(namesNoPermission));
            plugin.message(sender, "add-noPermissionOwnerMember");
        }
    });
}
Also used : Player(org.bukkit.entity.Player) HashMap(java.util.HashMap) Selection(com.sk89q.worldedit.bukkit.selections.Selection) ArrayList(java.util.ArrayList) RentRegion(me.wiefferink.areashop.regions.RentRegion) World(org.bukkit.World) FileManager(me.wiefferink.areashop.managers.FileManager) TreeSet(java.util.TreeSet) BuyRegion(me.wiefferink.areashop.regions.BuyRegion) ProtectedRegion(com.sk89q.worldguard.protection.regions.ProtectedRegion) GeneralRegion(me.wiefferink.areashop.regions.GeneralRegion) UUID(java.util.UUID)

Example 22 with ProtectedRegion

use of com.sk89q.worldguard.protection.regions.ProtectedRegion in project AreaShop by NLthijs48.

the class SignsFeature method onSignChange.

@EventHandler(priority = EventPriority.MONITOR)
public void onSignChange(SignChangeEvent event) {
    if (event.isCancelled()) {
        return;
    }
    Player player = event.getPlayer();
    if (!plugin.isReady()) {
        plugin.message(player, "general-notReady");
        return;
    }
    // Check if the sign is meant for this plugin
    if (event.getLine(0).contains(plugin.getConfig().getString("signTags.rent"))) {
        if (!player.hasPermission("areashop.createrent") && !player.hasPermission("areashop.createrent.member") && !player.hasPermission("areashop.createrent.owner")) {
            plugin.message(player, "setup-noPermissionRent");
            return;
        }
        // Get the other lines
        String secondLine = event.getLine(1);
        String thirdLine = event.getLine(2);
        String fourthLine = event.getLine(3);
        // Get the regionManager for accessing regions
        RegionManager regionManager = plugin.getWorldGuard().getRegionManager(event.getPlayer().getWorld());
        // If the secondLine does not contain a name try to find the region by location
        if (secondLine == null || secondLine.length() == 0) {
            Set<ProtectedRegion> regions = plugin.getWorldGuardHandler().getApplicableRegionsSet(event.getBlock().getLocation());
            if (regions != null) {
                boolean first = true;
                ProtectedRegion candidate = null;
                for (ProtectedRegion pr : regions) {
                    if (first) {
                        candidate = pr;
                        first = false;
                    } else {
                        if (pr.getPriority() > candidate.getPriority()) {
                            candidate = pr;
                        } else if (pr.getPriority() < candidate.getPriority()) {
                        // Already got the correct one
                        } else if (pr.getParent() != null && pr.getParent().equals(candidate)) {
                            candidate = pr;
                        } else if (candidate.getParent() != null && candidate.getParent().equals(pr)) {
                        // Already got the correct one
                        } else {
                            plugin.message(player, "setup-couldNotDetect", candidate.getId(), pr.getId());
                            return;
                        }
                    }
                }
                if (candidate != null) {
                    secondLine = candidate.getId();
                }
            }
        }
        boolean priceSet = fourthLine != null && fourthLine.length() != 0;
        boolean durationSet = thirdLine != null && thirdLine.length() != 0;
        // check if all the lines are correct
        if (secondLine == null || secondLine.length() == 0) {
            plugin.message(player, "setup-noRegion");
            return;
        }
        ProtectedRegion region = regionManager.getRegion(secondLine);
        if (region == null) {
            plugin.message(player, "cmd-noRegion", secondLine);
            return;
        }
        FileManager.AddResult addResult = plugin.getFileManager().checkRegionAdd(player, regionManager.getRegion(secondLine), GeneralRegion.RegionType.RENT);
        if (addResult == FileManager.AddResult.BLACKLISTED) {
            plugin.message(player, "setup-blacklisted", secondLine);
        } else if (addResult == FileManager.AddResult.ALREADYADDED) {
            plugin.message(player, "setup-alreadyRentSign");
        } else if (addResult == FileManager.AddResult.NOPERMISSION) {
            plugin.message(player, "setup-noPermission", secondLine);
        } else if (thirdLine != null && thirdLine.length() != 0 && !Utils.checkTimeFormat(thirdLine)) {
            plugin.message(player, "setup-wrongDuration");
        } else {
            double price = 0.0;
            if (priceSet) {
                // Check the fourth line
                try {
                    price = Double.parseDouble(fourthLine);
                } catch (NumberFormatException e) {
                    plugin.message(player, "setup-wrongPrice");
                    return;
                }
            }
            // Add rent to the FileManager
            final RentRegion rent = new RentRegion(secondLine, event.getPlayer().getWorld());
            boolean isMember = plugin.getWorldGuardHandler().containsMember(rent.getRegion(), player.getUniqueId());
            boolean isOwner = plugin.getWorldGuardHandler().containsOwner(rent.getRegion(), player.getUniqueId());
            boolean landlord = (!player.hasPermission("areashop.createrent") && ((player.hasPermission("areashop.createrent.owner") && isOwner) || (player.hasPermission("areashop.createrent.member") && isMember)));
            if (landlord) {
                rent.setLandlord(player.getUniqueId(), player.getName());
            }
            if (priceSet) {
                rent.setPrice(price);
            }
            if (durationSet) {
                rent.setDuration(thirdLine);
            }
            org.bukkit.material.Sign sign = (org.bukkit.material.Sign) event.getBlock().getState().getData();
            rent.getSignsFeature().addSign(event.getBlock().getLocation(), event.getBlock().getType(), sign.getFacing(), null);
            // Run commands
            rent.runEventCommands(GeneralRegion.RegionEvent.CREATED, true);
            plugin.getFileManager().addRent(rent);
            rent.handleSchematicEvent(GeneralRegion.RegionEvent.CREATED);
            plugin.message(player, "setup-rentSuccess", rent);
            // Update the region after the event has written its lines
            Do.sync(rent::update);
            // Run commands
            rent.runEventCommands(GeneralRegion.RegionEvent.CREATED, false);
        }
    } else if (event.getLine(0).contains(plugin.getConfig().getString("signTags.buy"))) {
        // Check for permission
        if (!player.hasPermission("areashop.createbuy") && !player.hasPermission("areashop.createbuy.member") && !player.hasPermission("areashop.createbuy.owner")) {
            plugin.message(player, "setup-noPermissionBuy");
            return;
        }
        // Get the other lines
        String secondLine = event.getLine(1);
        String thirdLine = event.getLine(2);
        // Get the regionManager for accessing regions
        RegionManager regionManager = plugin.getWorldGuard().getRegionManager(event.getPlayer().getWorld());
        // If the secondLine does not contain a name try to find the region by location
        if (secondLine == null || secondLine.length() == 0) {
            Set<ProtectedRegion> regions = plugin.getWorldGuardHandler().getApplicableRegionsSet(event.getBlock().getLocation());
            if (regions != null) {
                boolean first = true;
                ProtectedRegion candidate = null;
                for (ProtectedRegion pr : regions) {
                    if (first) {
                        candidate = pr;
                        first = false;
                    } else {
                        if (pr.getPriority() > candidate.getPriority()) {
                            candidate = pr;
                        } else if (pr.getPriority() < candidate.getPriority()) {
                        // Already got the correct one
                        } else if (pr.getParent() != null && pr.getParent().equals(candidate)) {
                            candidate = pr;
                        } else if (candidate.getParent() != null && candidate.getParent().equals(pr)) {
                        // Already got the correct one
                        } else {
                            plugin.message(player, "setup-couldNotDetect", candidate.getId(), pr.getId());
                            return;
                        }
                    }
                }
                if (candidate != null) {
                    secondLine = candidate.getId();
                }
            }
        }
        boolean priceSet = thirdLine != null && thirdLine.length() != 0;
        // Check if all the lines are correct
        if (secondLine == null || secondLine.length() == 0) {
            plugin.message(player, "setup-noRegion");
            return;
        }
        ProtectedRegion region = regionManager.getRegion(secondLine);
        if (region == null) {
            plugin.message(player, "cmd-noRegion", secondLine);
            return;
        }
        FileManager.AddResult addResult = plugin.getFileManager().checkRegionAdd(player, region, GeneralRegion.RegionType.BUY);
        if (addResult == FileManager.AddResult.BLACKLISTED) {
            plugin.message(player, "setup-blacklisted", secondLine);
        } else if (addResult == FileManager.AddResult.ALREADYADDED) {
            plugin.message(player, "setup-alreadyRentSign");
        } else if (addResult == FileManager.AddResult.NOPERMISSION) {
            plugin.message(player, "setup-noPermission", secondLine);
        } else {
            double price = 0.0;
            if (priceSet) {
                // Check the fourth line
                try {
                    price = Double.parseDouble(thirdLine);
                } catch (NumberFormatException e) {
                    plugin.message(player, "setup-wrongPrice");
                    return;
                }
            }
            // Add buy to the FileManager
            final BuyRegion buy = new BuyRegion(secondLine, event.getPlayer().getWorld());
            boolean isMember = plugin.getWorldGuardHandler().containsMember(buy.getRegion(), player.getUniqueId());
            boolean isOwner = plugin.getWorldGuardHandler().containsOwner(buy.getRegion(), player.getUniqueId());
            boolean landlord = (!player.hasPermission("areashop.createbuy") && ((player.hasPermission("areashop.createbuy.owner") && isOwner) || (player.hasPermission("areashop.createbuy.member") && isMember)));
            if (landlord) {
                buy.setLandlord(player.getUniqueId(), player.getName());
            }
            if (priceSet) {
                buy.setPrice(price);
            }
            org.bukkit.material.Sign sign = (org.bukkit.material.Sign) event.getBlock().getState().getData();
            buy.getSignsFeature().addSign(event.getBlock().getLocation(), event.getBlock().getType(), sign.getFacing(), null);
            // Run commands
            buy.runEventCommands(GeneralRegion.RegionEvent.CREATED, true);
            plugin.getFileManager().addBuy(buy);
            buy.handleSchematicEvent(GeneralRegion.RegionEvent.CREATED);
            plugin.message(player, "setup-buySuccess", buy);
            // Update the region after the event has written its lines
            Do.sync(buy::update);
            // Run commands
            buy.runEventCommands(GeneralRegion.RegionEvent.CREATED, false);
        }
    } else if (event.getLine(0).contains(plugin.getConfig().getString("signTags.add"))) {
        // Check for permission
        if (!player.hasPermission("areashop.addsign")) {
            plugin.message(player, "addsign-noPermission");
            return;
        }
        // Get the other lines
        String secondLine = event.getLine(1);
        String thirdLine = event.getLine(2);
        GeneralRegion region;
        if (secondLine != null && secondLine.length() != 0) {
            // Get region by secondLine of the sign
            region = plugin.getFileManager().getRegion(secondLine);
            if (region == null) {
                plugin.message(player, "addSign-notRegistered", secondLine);
                return;
            }
        } else {
            // Get region by sign position
            List<GeneralRegion> regions = Utils.getRegionsInSelection(new CuboidSelection(event.getBlock().getWorld(), event.getBlock().getLocation(), event.getBlock().getLocation()));
            if (regions.isEmpty()) {
                plugin.message(player, "addsign-noRegions");
                return;
            } else if (regions.size() > 1) {
                plugin.message(player, "addsign-couldNotDetectSign", regions.get(0).getName(), regions.get(1).getName());
                return;
            }
            region = regions.get(0);
        }
        org.bukkit.material.Sign sign = (org.bukkit.material.Sign) event.getBlock().getState().getData();
        if (thirdLine == null || thirdLine.length() == 0) {
            region.getSignsFeature().addSign(event.getBlock().getLocation(), event.getBlock().getType(), sign.getFacing(), null);
            plugin.message(player, "addsign-success", region);
        } else {
            region.getSignsFeature().addSign(event.getBlock().getLocation(), event.getBlock().getType(), sign.getFacing(), thirdLine);
            plugin.message(player, "addsign-successProfile", thirdLine, region);
        }
        // Update the region later because this event will do it first
        Do.sync(region::update);
    }
}
Also used : Player(org.bukkit.entity.Player) Set(java.util.Set) RentRegion(me.wiefferink.areashop.regions.RentRegion) FileManager(me.wiefferink.areashop.managers.FileManager) CuboidSelection(com.sk89q.worldedit.bukkit.selections.CuboidSelection) BuyRegion(me.wiefferink.areashop.regions.BuyRegion) ProtectedRegion(com.sk89q.worldguard.protection.regions.ProtectedRegion) GeneralRegion(me.wiefferink.areashop.regions.GeneralRegion) RegionManager(com.sk89q.worldguard.protection.managers.RegionManager) EventHandler(org.bukkit.event.EventHandler)

Example 23 with ProtectedRegion

use of com.sk89q.worldguard.protection.regions.ProtectedRegion in project AreaShop by NLthijs48.

the class TeleportFeature method getStartLocation.

/**
 * Get the start location of a safe teleport search.
 * @param player The player to get it for
 * @param toSign true to try teleporting to the first sign, false for teleporting to the region
 * @return The start location
 */
private Location getStartLocation(Player player, Value<Boolean> toSign) {
    Location startLocation = null;
    ProtectedRegion worldguardRegion = getRegion().getRegion();
    // Try to get sign location
    List<RegionSign> signs = getRegion().getSignsFeature().getSigns();
    boolean signAvailable = !signs.isEmpty();
    if (toSign.get()) {
        if (signAvailable) {
            // Use the location 1 below the sign to prevent weird spawing above the sign
            // .subtract(0.0, 1.0, 0.0);
            startLocation = signs.get(0).getLocation();
            startLocation.setPitch(player.getLocation().getPitch());
            startLocation.setYaw(player.getLocation().getYaw());
            // Move player x blocks away from the sign
            double distance = getRegion().getDoubleSetting("general.teleportSignDistance");
            if (distance > 0) {
                BlockFace facing = getRegion().getSignsFeature().getSigns().get(0).getFacing();
                Vector facingVector = new Vector(facing.getModX(), facing.getModY(), facing.getModZ()).normalize().multiply(distance);
                startLocation.setX(startLocation.getBlockX() + 0.5);
                startLocation.setZ(startLocation.getBlockZ() + 0.5);
                startLocation.add(facingVector);
            }
        } else {
            // No sign available
            getRegion().message(player, "teleport-changedToNoSign");
            toSign.set(false);
        }
    }
    // Use teleportation location that is set for the region
    if (startLocation == null && hasTeleportLocation()) {
        startLocation = getTeleportLocation();
    }
    // Calculate a default location
    if (startLocation == null) {
        // Set to block in the middle, y configured in the config
        com.sk89q.worldedit.Vector middle = com.sk89q.worldedit.Vector.getMidpoint(worldguardRegion.getMaximumPoint(), worldguardRegion.getMinimumPoint());
        String configSetting = getRegion().getStringSetting("general.teleportLocationY");
        if ("bottom".equalsIgnoreCase(configSetting)) {
            middle = middle.setY(worldguardRegion.getMinimumPoint().getBlockY());
        } else if ("top".equalsIgnoreCase(configSetting)) {
            middle = middle.setY(worldguardRegion.getMaximumPoint().getBlockY());
        } else if ("middle".equalsIgnoreCase(configSetting)) {
            middle = middle.setY(middle.getBlockY());
        } else {
            try {
                int vertical = Integer.parseInt(configSetting);
                middle = middle.setY(vertical);
            } catch (NumberFormatException e) {
                AreaShop.warn("Could not parse general.teleportLocationY: '" + configSetting + "'");
            }
        }
        startLocation = new Location(getRegion().getWorld(), middle.getX(), middle.getY(), middle.getZ(), player.getLocation().getYaw(), player.getLocation().getPitch());
    }
    // Set location in the center of the block
    startLocation.setX(startLocation.getBlockX() + 0.5);
    startLocation.setZ(startLocation.getBlockZ() + 0.5);
    return startLocation;
}
Also used : BlockFace(org.bukkit.block.BlockFace) ProtectedRegion(com.sk89q.worldguard.protection.regions.ProtectedRegion) RegionSign(me.wiefferink.areashop.features.signs.RegionSign) Vector(org.bukkit.util.Vector) Location(org.bukkit.Location)

Example 24 with ProtectedRegion

use of com.sk89q.worldguard.protection.regions.ProtectedRegion in project AreaShop by NLthijs48.

the class SetteleportCommand method execute.

@Override
public void execute(CommandSender sender, String[] args) {
    if (!sender.hasPermission("areashop.setteleport") && !sender.hasPermission("areashop.setteleportall")) {
        plugin.message(sender, "setteleport-noPermission");
        return;
    }
    if (!(sender instanceof Player)) {
        plugin.message(sender, "onlyByPlayer");
        return;
    }
    Player player = (Player) sender;
    GeneralRegion region;
    if (args.length < 2) {
        // get the region by location
        List<GeneralRegion> regions = Utils.getImportantRegions(((Player) sender).getLocation());
        if (regions.isEmpty()) {
            plugin.message(sender, "cmd-noRegionsAtLocation");
            return;
        } else if (regions.size() > 1) {
            plugin.message(sender, "cmd-moreRegionsAtLocation");
            return;
        } else {
            region = regions.get(0);
        }
    } else {
        region = plugin.getFileManager().getRegion(args[1]);
    }
    boolean owner;
    if (region == null) {
        plugin.message(player, "setteleport-noRentOrBuy", args[1]);
        return;
    }
    if (region instanceof RentRegion) {
        owner = player.getUniqueId().equals(((RentRegion) region).getRenter());
    } else {
        owner = player.getUniqueId().equals(((BuyRegion) region).getBuyer());
    }
    if (!player.hasPermission("areashop.setteleport")) {
        plugin.message(player, "setteleport-noPermission", region);
        return;
    } else if (!owner && !player.hasPermission("areashop.setteleportall")) {
        plugin.message(player, "setteleport-noPermissionOther", region);
        return;
    }
    ProtectedRegion wgRegion = region.getRegion();
    if (args.length > 2 && args[2] != null && (args[2].equalsIgnoreCase("reset") || args[2].equalsIgnoreCase("yes") || args[2].equalsIgnoreCase("true"))) {
        region.getTeleportFeature().setTeleport(null);
        region.update();
        plugin.message(player, "setteleport-reset", region);
        return;
    }
    if (!player.hasPermission("areashop.setteleportoutsideregion") && (wgRegion == null || !wgRegion.contains(player.getLocation().getBlockX(), player.getLocation().getBlockY(), player.getLocation().getBlockZ()))) {
        plugin.message(player, "setteleport-notInside", region);
        return;
    }
    region.getTeleportFeature().setTeleport(player.getLocation());
    region.update();
    plugin.message(player, "setteleport-success", region);
}
Also used : Player(org.bukkit.entity.Player) BuyRegion(me.wiefferink.areashop.regions.BuyRegion) GeneralRegion(me.wiefferink.areashop.regions.GeneralRegion) ProtectedRegion(com.sk89q.worldguard.protection.regions.ProtectedRegion) RentRegion(me.wiefferink.areashop.regions.RentRegion)

Example 25 with ProtectedRegion

use of com.sk89q.worldguard.protection.regions.ProtectedRegion in project LandLord by SpatiumPrinceps.

the class Manage method onManage.

public void onManage(Player player, String[] args) {
    OwnedLand land = plugin.getWgHandler().getRegion(player.getLocation().getChunk());
    if (land == null) {
        player.sendMessage(lm.getString("Commands.Manage.notOwnFreeLand"));
        return;
    }
    if (!land.isOwner(player.getUniqueId()) && !player.hasPermission("landlord.admin.manage")) {
        player.sendMessage(lm.getString("Commands.Manage.notOwn").replace("%owner%", land.printOwners()));
        return;
    }
    // land manage
    if (args.length == 0) {
        ManageGUI gui = new ManageGUI(player, land);
        gui.display();
    } else if (args.length == 1) {
        // land manage <landid>
        World world;
        try {
            world = Bukkit.getWorld(args[0].split("_")[0]);
        } catch (IndexOutOfBoundsException e) {
            player.sendMessage(lm.getString("Commands.manage.invalidArguments"));
            return;
        }
        if (Bukkit.getWorlds().contains(world)) {
            RegionManager rm = plugin.getWgHandler().getWG().getRegionManager(world);
            if (rm != null) {
                ProtectedRegion target = rm.getRegion(args[0]);
                if (target != null) {
                    ManageGUI gui = new ManageGUI(player, plugin.getLand(target));
                    gui.display();
                }
            }
        }
    } else {
        // land manage <allCommands>
        switch(args[0]) {
            case "setgreetall":
                StringBuilder sb1 = new StringBuilder();
                for (int i = 1; i < args.length; i++) {
                    sb1.append(args[i]).append(" ");
                }
                String newmsg1 = sb1.toString();
                for (ProtectedRegion protectedRegion : plugin.getWgHandler().getRegions(player.getUniqueId())) {
                    protectedRegion.setFlag(DefaultFlag.GREET_MESSAGE, newmsg1);
                }
                player.sendMessage(lm.getString("Commands.Manage.SetGreet.successful").replace("%msg%", newmsg1));
                break;
            case "setfarewellall":
                StringBuilder sb = new StringBuilder();
                for (int i = 1; i < args.length; i++) {
                    sb.append(args[i]).append(" ");
                }
                String newmsg = sb.toString();
                for (ProtectedRegion protectedRegion : plugin.getWgHandler().getRegions(player.getUniqueId())) {
                    protectedRegion.setFlag(DefaultFlag.FAREWELL_MESSAGE, newmsg);
                }
                player.sendMessage(lm.getString("Commands.Manage.SetFarewell.successful").replace("%msg%", newmsg));
                break;
            case "setgreet":
                setGreet(player, args, plugin.getLand(player.getLocation()).getWGLand(), 1);
                break;
            case "setfarewell":
                setFarewell(player, args, plugin.getLand(player.getLocation()).getWGLand(), 1);
                break;
            default:
                try {
                    World world = Bukkit.getWorld(args[0].split("_")[0]);
                    if (Bukkit.getWorlds().contains(world)) {
                        RegionManager rm = plugin.getWgHandler().getWG().getRegionManager(world);
                        if (rm != null) {
                            ProtectedRegion target = rm.getRegion(args[0]);
                            switch(args[1]) {
                                case "setgreet":
                                    setGreet(player, args, target, 2);
                                    break;
                                case "setfarewell":
                                    setFarewell(player, args, target, 2);
                                    break;
                            }
                        }
                    }
                } catch (IndexOutOfBoundsException e) {
                    player.sendMessage(lm.getString("Commands.manage.invalidArguments"));
                }
                break;
        }
    }
}
Also used : ManageGUI(biz.princeps.landlord.guis.ManageGUI) OwnedLand(biz.princeps.landlord.util.OwnedLand) ProtectedRegion(com.sk89q.worldguard.protection.regions.ProtectedRegion) RegionManager(com.sk89q.worldguard.protection.managers.RegionManager) World(org.bukkit.World)

Aggregations

ProtectedRegion (com.sk89q.worldguard.protection.regions.ProtectedRegion)29 ArrayList (java.util.ArrayList)7 World (org.bukkit.World)7 RegionManager (com.sk89q.worldguard.protection.managers.RegionManager)6 OwnedLand (biz.princeps.landlord.util.OwnedLand)5 BuyRegion (me.wiefferink.areashop.regions.BuyRegion)5 GeneralRegion (me.wiefferink.areashop.regions.GeneralRegion)5 RentRegion (me.wiefferink.areashop.regions.RentRegion)5 Vector (com.sk89q.worldedit.Vector)4 HashSet (java.util.HashSet)4 Location (org.bukkit.Location)4 Player (org.bukkit.entity.Player)4 LandlordCommand (biz.princeps.landlord.commands.LandlordCommand)3 BlockVector (com.sk89q.worldedit.BlockVector)3 Flag (com.sk89q.worldguard.protection.flags.Flag)3 StateFlag (com.sk89q.worldguard.protection.flags.StateFlag)3 List (java.util.List)3 Landlord (biz.princeps.landlord.Landlord)2 ManageGUIAll (biz.princeps.landlord.guis.ManageGUIAll)2 EditSession (com.sk89q.worldedit.EditSession)2