Search in sources :

Example 16 with RegionManager

use of com.sk89q.worldguard.protection.managers.RegionManager in project AreaShop by NLthijs48.

the class ImportJob method execute.

/**
 * Execute the job.
 */
private void execute() {
    // Check for RegionForSale data
    File regionForSaleFolder = new File(plugin.getDataFolder().getParentFile().getAbsolutePath(), "RegionForSale");
    if (!regionForSaleFolder.exists()) {
        message("import-noPluginFolder", regionForSaleFolder.getName());
        return;
    }
    File worldsFolder = new File(regionForSaleFolder.getAbsolutePath(), "worlds");
    if (!worldsFolder.exists()) {
        message("import-noWorldsFolder");
        return;
    }
    File[] worldFolders = worldsFolder.listFiles();
    if (worldFolders == null) {
        message("import-noWorldsFolder");
        return;
    }
    // Import data for each world
    message("import-start");
    // Group with settings for all imported regions
    RegionGroup regionForSaleGroup = new RegionGroup(plugin, "RegionForSale");
    plugin.getFileManager().addGroup(regionForSaleGroup);
    // Import /RegionForSale/config.yml settings
    File regionForSaleConfigFile = new File(regionForSaleFolder.getAbsolutePath(), "config.yml");
    YamlConfiguration regionForSaleConfig = loadConfiguration(regionForSaleConfigFile);
    if (regionForSaleConfig == null) {
        messageNoPrefix("import-loadConfigFailed", regionForSaleConfigFile.getAbsolutePath());
        regionForSaleConfig = new YamlConfiguration();
    } else {
        importRegionSettings(regionForSaleConfig, regionForSaleGroup.getSettings(), null);
        regionForSaleGroup.setSetting("priority", 0);
    }
    // Import /RegionForSale/general.yml settings
    File regionForSaleGeneralFile = new File(regionForSaleFolder.getAbsolutePath(), "config.yml");
    YamlConfiguration regionForSaleGeneral = loadConfiguration(regionForSaleConfigFile);
    if (regionForSaleGeneral == null) {
        messageNoPrefix("import-loadConfigFailed", regionForSaleGeneralFile.getAbsolutePath());
    } else {
        // Collection interval of RegionForSale maps to rent duration
        String duration = "1 day";
        if (regionForSaleGeneral.isLong("interval.collect_money")) {
            duration = minutesToString(regionForSaleGeneral.getLong("interval.collect_money"));
        }
        regionForSaleGroup.setSetting("rent.duration", duration);
        // Global economy account has an effect close to landlord in AreaShop
        if (regionForSaleGeneral.isString("global_econ_account")) {
            regionForSaleGroup.setSetting("general.landlordName", regionForSaleGeneral.getString("global_econ_account"));
        }
    }
    regionForSaleGroup.saveRequired();
    // //////// Handle defaults of RegionForSale
    // Set autoExtend, to keep the same behavior as RegionForSale had
    regionForSaleGroup.setSetting("rent.autoExtend", true);
    // Import regions from each world
    for (File worldFolder : worldFolders) {
        // Skip files
        if (!worldFolder.isDirectory()) {
            continue;
        }
        messageNoPrefix("import-doWorld", worldFolder.getName());
        // Get the Bukkit world
        World world = Bukkit.getWorld(worldFolder.getName());
        if (world == null) {
            messageNoPrefix("import-noBukkitWorld");
            continue;
        }
        // Get the WorldGuard RegionManager
        RegionManager regionManager = plugin.getWorldGuard().getRegionManager(world);
        if (regionManager == null) {
            messageNoPrefix("import-noRegionManger");
            continue;
        }
        // Load the /worlds/<world>/regions.yml file
        File regionsFile = new File(worldFolder.getAbsolutePath(), "regions.yml");
        YamlConfiguration regions = loadConfiguration(regionsFile);
        if (regions == null) {
            messageNoPrefix("import-loadRegionsFailed", regionsFile.getAbsolutePath());
            continue;
        }
        // Load /worlds/<world>/config.yml file
        File worldConfigFile = new File(worldFolder.getAbsolutePath(), "config.yml");
        YamlConfiguration worldConfig = loadConfiguration(worldConfigFile);
        if (worldConfig == null) {
            messageNoPrefix("import-loadWorldConfigFailed", worldConfigFile.getAbsolutePath());
            // Simply skip importing the settings, since this is not really fatal
            worldConfig = new YamlConfiguration();
        } else {
            // RegionGroup with all world settings
            RegionGroup worldGroup = new RegionGroup(plugin, "RegionForSale-" + worldFolder.getName());
            importRegionSettings(worldConfig, worldGroup.getSettings(), null);
            worldGroup.setSetting("priority", 1);
            worldGroup.addWorld(worldFolder.getName());
            plugin.getFileManager().addGroup(regionForSaleGroup);
            worldGroup.saveRequired();
        }
        // Create groups to hold settings of /worlds/<world>/parent-regions.yml
        File parentRegionsFile = new File(worldFolder.getAbsolutePath(), "parent-regions.yml");
        YamlConfiguration parentRegions = loadConfiguration(parentRegionsFile);
        if (parentRegions == null) {
            messageNoPrefix("import-loadParentRegionsFailed", parentRegionsFile.getAbsolutePath());
        // Non-fatal, so just continue
        } else {
            for (String parentRegionName : parentRegions.getKeys(false)) {
                // Get WorldGuard region
                ProtectedRegion worldGuardRegion = regionManager.getRegion(parentRegionName);
                if (worldGuardRegion == null) {
                    messageNoPrefix("import-noWorldGuardRegionParent", parentRegionName);
                    continue;
                }
                // Get settings section
                ConfigurationSection parentRegionSection = parentRegions.getConfigurationSection(parentRegionName);
                if (parentRegionSection == null) {
                    messageNoPrefix("import-improperParentRegion", parentRegionName);
                    continue;
                }
                // Skip if it does not have any settings
                if (parentRegionSection.getKeys(false).isEmpty()) {
                    continue;
                }
                // Import parent region settings into a RegionGroup
                RegionGroup parentRegionGroup = new RegionGroup(plugin, "RegionForSale-" + worldFolder.getName() + "-" + parentRegionName);
                importRegionSettings(parentRegionSection, parentRegionGroup.getSettings(), null);
                parentRegionGroup.setSetting("priority", 2 + parentRegionSection.getLong("info.priority", 0));
                parentRegionGroup.saveRequired();
            // TODO add all regions that are contained in this parent region
            // Utils.getWorldEditRegionsInSelection()
            }
        }
        // Read and import regions
        for (String regionKey : regions.getKeys(false)) {
            GeneralRegion existingRegion = plugin.getFileManager().getRegion(regionKey);
            if (existingRegion != null) {
                if (world.getName().equalsIgnoreCase(existingRegion.getWorldName())) {
                    messageNoPrefix("import-alreadyAdded", regionKey);
                } else {
                    messageNoPrefix("import-alreadyAddedOtherWorld", regionKey, existingRegion.getWorldName(), world.getName());
                }
                continue;
            }
            ConfigurationSection regionSection = regions.getConfigurationSection(regionKey);
            if (regionSection == null) {
                messageNoPrefix("import-invalidRegionSection", regionKey);
                continue;
            }
            // Get WorldGuard region
            ProtectedRegion worldGuardRegion = regionManager.getRegion(regionKey);
            if (worldGuardRegion == null) {
                messageNoPrefix("import-noWorldGuardRegion", regionKey);
                continue;
            }
            String owner = regionSection.getString("info.owner", null);
            boolean isBought = regionSection.getBoolean("info.is-bought");
            // TODO: should also take into config settings of parent regions
            boolean rentable = regionSection.getBoolean("economic-settings.rentable", worldConfig.getBoolean("economic-settings.rentable", regionForSaleConfig.getBoolean("economic-settings.rentable")));
            boolean buyable = regionSection.getBoolean("economic-settings.buyable", worldConfig.getBoolean("economic-settings.buyable", regionForSaleConfig.getBoolean("economic-settings.buyable")));
            // Can be bought and rented, import as buy
            if (buyable && rentable) {
                messageNoPrefix("import-buyAndRent", regionKey);
            }
            // Cannot be bought or rented, skip
            if (!buyable && !rentable && owner == null) {
                messageNoPrefix("import-noBuyAndNoRent", regionKey);
                continue;
            }
            // Create region
            GeneralRegion region;
            if (rentable || (owner != null && !isBought)) {
                region = new RentRegion(regionKey, world);
                plugin.getFileManager().addRent((RentRegion) region);
            } else {
                region = new BuyRegion(regionKey, world);
                plugin.getFileManager().addBuy((BuyRegion) region);
            }
            // Import settings
            importRegionSettings(regionSection, region.getConfig(), region);
            region.getConfig().set("general.importedFrom", "RegionForSale");
            // Get existing owners and members
            List<UUID> existing = new ArrayList<>();
            if (owner != null) {
                @SuppressWarnings("deprecation") OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(owner);
                if (offlinePlayer != null) {
                    existing.add(offlinePlayer.getUniqueId());
                }
            }
            for (UUID uuid : plugin.getWorldGuardHandler().getOwners(worldGuardRegion).asUniqueIdList()) {
                if (!existing.contains(uuid)) {
                    existing.add(uuid);
                }
            }
            for (UUID uuid : plugin.getWorldGuardHandler().getMembers(worldGuardRegion).asUniqueIdList()) {
                if (!existing.contains(uuid)) {
                    existing.add(uuid);
                }
            }
            // First owner (or if none, the first member) will be the renter/buyer
            if (!existing.isEmpty()) {
                region.setOwner(existing.remove(0));
            }
            // Add others as friends
            for (UUID friend : existing) {
                region.getFriendsFeature().addFriend(friend, null);
            }
            region.saveRequired();
            messageNoPrefix("import-imported", regionKey);
        }
    }
    // Update all regions
    plugin.getFileManager().updateAllRegions(sender);
    // Write all imported regions and settings to disk
    plugin.getFileManager().saveRequiredFiles();
}
Also used : ArrayList(java.util.ArrayList) RentRegion(me.wiefferink.areashop.regions.RentRegion) YamlConfiguration(org.bukkit.configuration.file.YamlConfiguration) World(org.bukkit.World) RegionGroup(me.wiefferink.areashop.regions.RegionGroup) 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) OfflinePlayer(org.bukkit.OfflinePlayer) UUID(java.util.UUID) File(java.io.File) ConfigurationSection(org.bukkit.configuration.ConfigurationSection)

Example 17 with RegionManager

use of com.sk89q.worldguard.protection.managers.RegionManager in project AreaShop by NLthijs48.

the class Utils method getWorldEditRegionsInSelection.

/**
 * Get all WorldGuard regions intersecting with a WorldEdit selection.
 * @param selection The selection to check
 * @return A list with all the WorldGuard regions intersecting with the selection
 */
public static List<ProtectedRegion> getWorldEditRegionsInSelection(Selection selection) {
    // Get all regions inside or intersecting with the WorldEdit selection of the player
    World world = selection.getWorld();
    RegionManager regionManager = AreaShop.getInstance().getWorldGuard().getRegionManager(world);
    ArrayList<ProtectedRegion> result = new ArrayList<>();
    Location selectionMin = selection.getMinimumPoint();
    Location selectionMax = selection.getMaximumPoint();
    for (ProtectedRegion region : regionManager.getRegions().values()) {
        BlockVector regionMin = region.getMinimumPoint();
        BlockVector regionMax = region.getMaximumPoint();
        if ((// x part, resolves to true if the selection and region overlap anywhere on the x-axis
        (regionMin.getBlockX() <= selectionMax.getBlockX() && regionMin.getBlockX() >= selectionMin.getBlockX()) || (regionMax.getBlockX() <= selectionMax.getBlockX() && regionMax.getBlockX() >= selectionMin.getBlockX()) || (selectionMin.getBlockX() >= regionMin.getBlockX() && selectionMin.getBlockX() <= regionMax.getBlockX()) || (selectionMax.getBlockX() >= regionMin.getBlockX() && selectionMax.getBlockX() <= regionMax.getBlockX())) && (// Y part, resolves to true if the selection and region overlap anywhere on the y-axis
        (regionMin.getBlockY() <= selectionMax.getBlockY() && regionMin.getBlockY() >= selectionMin.getBlockY()) || (regionMax.getBlockY() <= selectionMax.getBlockY() && regionMax.getBlockY() >= selectionMin.getBlockY()) || (selectionMin.getBlockY() >= regionMin.getBlockY() && selectionMin.getBlockY() <= regionMax.getBlockY()) || (selectionMax.getBlockY() >= regionMin.getBlockY() && selectionMax.getBlockY() <= regionMax.getBlockY())) && (// Z part, resolves to true if the selection and region overlap anywhere on the z-axis
        (regionMin.getBlockZ() <= selectionMax.getBlockZ() && regionMin.getBlockZ() >= selectionMin.getBlockZ()) || (regionMax.getBlockZ() <= selectionMax.getBlockZ() && regionMax.getBlockZ() >= selectionMin.getBlockZ()) || (selectionMin.getBlockZ() >= regionMin.getBlockZ() && selectionMin.getBlockZ() <= regionMax.getBlockZ()) || (selectionMax.getBlockZ() >= regionMin.getBlockZ() && selectionMax.getBlockZ() <= regionMax.getBlockZ()))) {
            result.add(region);
        }
    }
    return result;
}
Also used : ProtectedRegion(com.sk89q.worldguard.protection.regions.ProtectedRegion) ArrayList(java.util.ArrayList) RegionManager(com.sk89q.worldguard.protection.managers.RegionManager) BlockVector(com.sk89q.worldedit.BlockVector) World(org.bukkit.World) Location(org.bukkit.Location)

Example 18 with RegionManager

use of com.sk89q.worldguard.protection.managers.RegionManager 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 19 with RegionManager

use of com.sk89q.worldguard.protection.managers.RegionManager in project AreaShop by NLthijs48.

the class StackCommand method execute.

@Override
public void execute(CommandSender sender, String[] args) {
    // Check permission
    if (!sender.hasPermission("areashop.stack")) {
        plugin.message(sender, "stack-noPermission");
        return;
    }
    // Only from ingame
    if (!(sender instanceof Player)) {
        plugin.message(sender, "cmd-onlyByPlayer");
        return;
    }
    final Player player = (Player) sender;
    // Specify enough arguments
    if (args.length < 5) {
        plugin.message(sender, "stack-help");
        return;
    }
    // Check amount
    int tempAmount = -1;
    try {
        tempAmount = Integer.parseInt(args[1]);
    } catch (NumberFormatException e) {
    // Incorrect number
    }
    if (tempAmount <= 0) {
        plugin.message(player, "stack-wrongAmount", args[1]);
        return;
    }
    // Check gap
    int gap;
    try {
        gap = Integer.parseInt(args[2]);
    } catch (NumberFormatException e) {
        plugin.message(player, "stack-wrongGap", args[2]);
        return;
    }
    // Check region type
    if (!"rent".equalsIgnoreCase(args[4]) && !"buy".equalsIgnoreCase(args[4])) {
        plugin.message(sender, "stack-help");
        return;
    }
    // Get WorldEdit selection
    final Selection selection = plugin.getWorldEdit().getSelection(player);
    if (selection == null) {
        plugin.message(player, "stack-noSelection");
        return;
    }
    // Get or create group
    RegionGroup group = null;
    if (args.length > 5) {
        group = plugin.getFileManager().getGroup(args[5]);
        if (group == null) {
            group = new RegionGroup(plugin, args[5]);
            plugin.getFileManager().addGroup(group);
        }
    }
    // Get facing of the player (must be clearly one of the four directions to make sure it is no mistake)
    BlockFace facing = Utils.yawToFacing(player.getLocation().getYaw());
    if (player.getLocation().getPitch() > 45) {
        facing = BlockFace.DOWN;
    } else if (player.getLocation().getPitch() < -45) {
        facing = BlockFace.UP;
    }
    if (!(facing == BlockFace.NORTH || facing == BlockFace.EAST || facing == BlockFace.SOUTH || facing == BlockFace.WEST || facing == BlockFace.UP || facing == BlockFace.DOWN)) {
        plugin.message(player, "stack-unclearDirection", facing.toString().toLowerCase().replace('_', '-'));
        return;
    }
    Vector shift = new BlockVector(0, 0, 0);
    if (facing == BlockFace.SOUTH) {
        shift = shift.setZ(-selection.getLength() - gap);
    } else if (facing == BlockFace.WEST) {
        shift = shift.setX(selection.getWidth() + gap);
    } else if (facing == BlockFace.NORTH) {
        shift = shift.setZ(selection.getLength() + gap);
    } else if (facing == BlockFace.EAST) {
        shift = shift.setX(-selection.getWidth() - gap);
    } else if (facing == BlockFace.DOWN) {
        shift = shift.setY(-selection.getHeight() - gap);
    } else if (facing == BlockFace.UP) {
        shift = shift.setY(selection.getHeight() + gap);
    }
    AreaShop.debug("  calculated shift vector: " + shift + ", with facing=" + facing);
    // Create regions and add them to AreaShop
    final String nameTemplate = args[3];
    final int regionsPerTick = plugin.getConfig().getInt("adding.regionsPerTick");
    final boolean rentRegions = "rent".equalsIgnoreCase(args[4]);
    final int amount = tempAmount;
    final RegionGroup finalGroup = group;
    final Vector finalShift = shift;
    String type;
    if (rentRegions) {
        type = "rent";
    } else {
        type = "buy";
    }
    Message groupsMessage = Message.empty();
    if (group != null) {
        groupsMessage = Message.fromKey("stack-addToGroup").replacements(group.getName());
    }
    plugin.message(player, "stack-accepted", amount, type, gap, nameTemplate, groupsMessage);
    plugin.message(player, "stack-addStart", amount, regionsPerTick * 20);
    new BukkitRunnable() {

        private int current = -1;

        private RegionManager manager = AreaShop.getInstance().getWorldGuard().getRegionManager(selection.getWorld());

        private int counter = 1;

        private int tooLow = 0;

        private int tooHigh = 0;

        @Override
        public void run() {
            for (int i = 0; i < regionsPerTick; i++) {
                current++;
                if (current < amount) {
                    // Create the region name
                    String counterName = counter + "";
                    int minimumLength = plugin.getConfig().getInt("stackRegionNumberLength");
                    while (counterName.length() < minimumLength) {
                        counterName = "0" + counterName;
                    }
                    String regionName;
                    if (nameTemplate.contains("#")) {
                        regionName = nameTemplate.replace("#", counterName);
                    } else {
                        regionName = nameTemplate + counterName;
                    }
                    while (manager.getRegion(regionName) != null || AreaShop.getInstance().getFileManager().getRegion(regionName) != null) {
                        counter++;
                        counterName = counter + "";
                        minimumLength = plugin.getConfig().getInt("stackRegionNumberLength");
                        while (counterName.length() < minimumLength) {
                            counterName = "0" + counterName;
                        }
                        if (nameTemplate.contains("#")) {
                            regionName = nameTemplate.replace("#", counterName);
                        } else {
                            regionName = nameTemplate + counterName;
                        }
                    }
                    // Add the region to WorldGuard (at startposition shifted by the number of this region times the blocks it should shift)
                    BlockVector minimum = new BlockVector(selection.getNativeMinimumPoint().add(finalShift.multiply(current)));
                    BlockVector maximum = new BlockVector(selection.getNativeMaximumPoint().add(finalShift.multiply(current)));
                    // Check for out of bounds
                    if (minimum.getBlockY() < 0) {
                        tooLow++;
                        continue;
                    } else if (maximum.getBlockY() > 256) {
                        tooHigh++;
                        continue;
                    }
                    ProtectedCuboidRegion region = new ProtectedCuboidRegion(regionName, minimum, maximum);
                    manager.addRegion(region);
                    // Add the region to AreaShop
                    if (rentRegions) {
                        RentRegion rent = new RentRegion(regionName, selection.getWorld());
                        if (finalGroup != null) {
                            finalGroup.addMember(rent);
                        }
                        rent.runEventCommands(GeneralRegion.RegionEvent.CREATED, true);
                        plugin.getFileManager().addRent(rent);
                        rent.handleSchematicEvent(GeneralRegion.RegionEvent.CREATED);
                        rent.runEventCommands(GeneralRegion.RegionEvent.CREATED, false);
                        rent.update();
                    } else {
                        BuyRegion buy = new BuyRegion(regionName, selection.getWorld());
                        if (finalGroup != null) {
                            finalGroup.addMember(buy);
                        }
                        buy.runEventCommands(GeneralRegion.RegionEvent.CREATED, true);
                        plugin.getFileManager().addBuy(buy);
                        buy.handleSchematicEvent(GeneralRegion.RegionEvent.CREATED);
                        buy.runEventCommands(GeneralRegion.RegionEvent.CREATED, false);
                        buy.update();
                    }
                }
            }
            if (current >= amount) {
                if (player.isOnline()) {
                    int added = amount - tooLow - tooHigh;
                    Message wrong = Message.empty();
                    if (tooHigh > 0) {
                        wrong.append(Message.fromKey("stack-tooHigh").replacements(tooHigh));
                    }
                    if (tooLow > 0) {
                        wrong.append(Message.fromKey("stack-tooLow").replacements(tooLow));
                    }
                    plugin.message(player, "stack-addComplete", added, wrong);
                }
                this.cancel();
            }
        }
    }.runTaskTimer(plugin, 1, 1);
}
Also used : Player(org.bukkit.entity.Player) Message(me.wiefferink.interactivemessenger.processing.Message) Selection(com.sk89q.worldedit.bukkit.selections.Selection) BlockFace(org.bukkit.block.BlockFace) BukkitRunnable(org.bukkit.scheduler.BukkitRunnable) RentRegion(me.wiefferink.areashop.regions.RentRegion) RegionGroup(me.wiefferink.areashop.regions.RegionGroup) BuyRegion(me.wiefferink.areashop.regions.BuyRegion) RegionManager(com.sk89q.worldguard.protection.managers.RegionManager) ProtectedCuboidRegion(com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion) BlockVector(com.sk89q.worldedit.BlockVector) Vector(com.sk89q.worldedit.Vector) BlockVector(com.sk89q.worldedit.BlockVector)

Example 20 with RegionManager

use of com.sk89q.worldguard.protection.managers.RegionManager in project MagicPlugin by elBukkit.

the class WorldGuardAPI method isExitAllowed.

public boolean isExitAllowed(Player player, Location location) {
    if (worldGuard == null || location == null)
        return true;
    RegionManager regionManager = worldGuard.getRegionManager(location.getWorld());
    if (regionManager == null)
        return true;
    ApplicableRegionSet checkSet = regionManager.getApplicableRegions(location);
    if (checkSet == null)
        return true;
    return checkSet.queryState(getAssociable(player), DefaultFlag.EXIT) != StateFlag.State.DENY;
}
Also used : RegionManager(com.sk89q.worldguard.protection.managers.RegionManager) ApplicableRegionSet(com.sk89q.worldguard.protection.ApplicableRegionSet)

Aggregations

RegionManager (com.sk89q.worldguard.protection.managers.RegionManager)26 ApplicableRegionSet (com.sk89q.worldguard.protection.ApplicableRegionSet)12 ProtectedRegion (com.sk89q.worldguard.protection.regions.ProtectedRegion)11 WarningMessage (com.magmaguy.elitemobs.utils.WarningMessage)6 FlagConflictException (com.sk89q.worldguard.protection.flags.registry.FlagConflictException)6 RegionContainer (com.sk89q.worldguard.protection.regions.RegionContainer)6 StateFlag (com.sk89q.worldguard.protection.flags.StateFlag)5 GlobalProtectedRegion (com.sk89q.worldguard.protection.regions.GlobalProtectedRegion)5 Nullable (javax.annotation.Nullable)5 Location (org.bukkit.Location)5 ProtectedCuboidRegion (com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion)4 BlockVector (com.sk89q.worldedit.BlockVector)3 DefaultDomain (com.sk89q.worldguard.domains.DefaultDomain)3 BuyRegion (me.wiefferink.areashop.regions.BuyRegion)3 RentRegion (me.wiefferink.areashop.regions.RentRegion)3 World (org.bukkit.World)3 Player (org.bukkit.entity.Player)3 OwnedLand (biz.princeps.landlord.util.OwnedLand)2 ArrayList (java.util.ArrayList)2 GeneralRegion (me.wiefferink.areashop.regions.GeneralRegion)2