Search in sources :

Example 1 with Flag

use of com.sk89q.worldguard.protection.flags.Flag in project AreaShop by NLthijs48.

the class WorldGuardRegionFlagsFeature method updateRegionFlags.

/**
 * Set the region flags/options to the values of a ConfigurationSection.
 * @param region The region to update the flags for
 * @param flags  The flags to apply
 * @return true if the flags have been set correctly, otherwise false
 */
private boolean updateRegionFlags(GeneralRegion region, ConfigurationSection flags) {
    boolean result = true;
    Set<String> flagNames = flags.getKeys(false);
    WorldGuardPlugin worldGuard = plugin.getWorldGuard();
    // Get the region
    ProtectedRegion worldguardRegion = region.getRegion();
    if (worldguardRegion == null) {
        AreaShop.debug("Region '" + region.getName() + "' does not exist, setting flags failed");
        return false;
    }
    // Loop through all flags that are set in the config
    for (String flagName : flagNames) {
        String value = Message.fromString(flags.getString(flagName)).replacements(region).getPlain();
        // In the config normal Bukkit color codes are used, those only need to be translated on 5.X WorldGuard versions
        if (plugin.getWorldGuard().getDescription().getVersion().startsWith("5.")) {
            value = translateBukkitToWorldGuardColors(value);
        }
        if (flagName.equalsIgnoreCase("members")) {
            plugin.getWorldGuardHandler().setMembers(worldguardRegion, parseAccessSet(value));
        // AreaShop.debug("  Flag " + flagName + " set: " + members.toUserFriendlyString());
        } else if (flagName.equalsIgnoreCase("owners")) {
            plugin.getWorldGuardHandler().setOwners(worldguardRegion, parseAccessSet(value));
        // AreaShop.debug("  Flag " + flagName + " set: " + owners.toUserFriendlyString());
        } else if (flagName.equalsIgnoreCase("priority")) {
            try {
                int priority = Integer.parseInt(value);
                if (worldguardRegion.getPriority() != priority) {
                    worldguardRegion.setPriority(priority);
                }
            // AreaShop.debug("  Flag " + flagName + " set: " + value);
            } catch (NumberFormatException e) {
                AreaShop.warn("The value of flag " + flagName + " is not a number");
                result = false;
            }
        } else if (flagName.equalsIgnoreCase("parent")) {
            if (region.getWorld() == null || worldGuard.getRegionManager(region.getWorld()) == null) {
                continue;
            }
            ProtectedRegion parentRegion = worldGuard.getRegionManager(region.getWorld()).getRegion(value);
            if (parentRegion != null) {
                if (!parentRegion.equals(worldguardRegion.getParent())) {
                    try {
                        worldguardRegion.setParent(parentRegion);
                    // AreaShop.debug("  Flag " + flagName + " set: " + value);
                    } catch (ProtectedRegion.CircularInheritanceException e) {
                        AreaShop.warn("The parent set in the config is not correct (circular inheritance)");
                    }
                }
            } else {
                AreaShop.warn("The parent set in the config is not correct (region does not exist)");
            }
        } else {
            // Parse all other normal flags (groups are also handled)
            String flagSetting = null;
            com.sk89q.worldguard.protection.flags.RegionGroup groupValue = null;
            Flag<?> foundFlag = plugin.getWorldGuardHandler().fuzzyMatchFlag(flagName);
            if (foundFlag == null) {
                AreaShop.warn("Found wrong flag in flagProfiles section: " + flagName + ", check if that is the correct WorldGuard flag");
                continue;
            }
            RegionGroupFlag groupFlag = foundFlag.getRegionGroupFlag();
            if (value == null || value.isEmpty()) {
                if (worldguardRegion.getFlag(foundFlag) != null) {
                    worldguardRegion.setFlag(foundFlag, null);
                }
                if (groupFlag != null && worldguardRegion.getFlag(groupFlag) != null) {
                    worldguardRegion.setFlag(groupFlag, null);
                }
            // AreaShop.debug("  Flag " + flagName + " reset (+ possible group of flag)");
            } else {
                if (groupFlag == null) {
                    flagSetting = value;
                } else {
                    for (String part : value.split(" ")) {
                        if (part.startsWith("g:")) {
                            if (part.length() > 2) {
                                try {
                                    groupValue = plugin.getWorldGuardHandler().parseFlagGroupInput(groupFlag, part.substring(2));
                                } catch (InvalidFlagFormat e) {
                                    AreaShop.warn("Found wrong group value for flag " + flagName);
                                }
                            }
                        } else {
                            if (flagSetting == null) {
                                flagSetting = part;
                            } else {
                                flagSetting += " " + part;
                            }
                        }
                    }
                }
                if (flagSetting != null) {
                    try {
                        setFlag(worldguardRegion, foundFlag, flagSetting);
                    // AreaShop.debug("  Flag " + flagName + " set: " + flagSetting);
                    } catch (InvalidFlagFormat e) {
                        AreaShop.warn("Found wrong value for flag " + flagName);
                    }
                }
                if (groupValue != null) {
                    if (groupValue == groupFlag.getDefault()) {
                        worldguardRegion.setFlag(groupFlag, null);
                    // AreaShop.debug("    Group of flag " + flagName + " set to default: " + groupValue);
                    } else {
                        worldguardRegion.setFlag(groupFlag, groupValue);
                    // AreaShop.debug("    Group of flag " + flagName + " set: " + groupValue);
                    }
                }
            }
        }
    }
    // Indicate that the regions needs to be saved
    // TODO do we still need this? maybe only for old WorldGuard?
    plugin.getFileManager().saveIsRequiredForRegionWorld(region.getWorldName());
    return result;
}
Also used : RegionGroupFlag(com.sk89q.worldguard.protection.flags.RegionGroupFlag) Flag(com.sk89q.worldguard.protection.flags.Flag) RegionGroupFlag(com.sk89q.worldguard.protection.flags.RegionGroupFlag) WorldGuardPlugin(com.sk89q.worldguard.bukkit.WorldGuardPlugin) InvalidFlagFormat(com.sk89q.worldguard.protection.flags.InvalidFlagFormat) ProtectedRegion(com.sk89q.worldguard.protection.regions.ProtectedRegion)

Example 2 with Flag

use of com.sk89q.worldguard.protection.flags.Flag in project LandLord by SpatiumPrinceps.

the class WorldGuardHandler method setDefaultFlags.

public ProtectedCuboidRegion setDefaultFlags(ProtectedCuboidRegion region, Chunk chunk) {
    OwnedLand land = new OwnedLand(region, chunk);
    region.setFlag(DefaultFlag.FAREWELL_MESSAGE, Landlord.getInstance().getLangManager().getRawString("Alerts.defaultFarewell").replace("%owner%", land.printOwners()));
    region.setFlag(DefaultFlag.GREET_MESSAGE, Landlord.getInstance().getLangManager().getRawString("Alerts.defaultGreeting").replace("%owner%", land.printOwners()));
    List<String> flaggy = Landlord.getInstance().getConfig().getStringList("Flags");
    Set<String> flags = new HashSet<>();
    flaggy.forEach(s -> flags.add(s.split(" ")[0]));
    // Iterate over all existing flags
    for (Flag<?> flag : DefaultFlag.getFlags()) {
        if (flag instanceof StateFlag) {
            boolean failed = false;
            if (flags.contains(flag.getName())) {
                // Filters the config list for the right line and split that line in the mid at :
                String[] rules = flaggy.stream().filter(s -> s.startsWith(flag.getName())).findFirst().get().split(":");
                if (rules.length == 2) {
                    String[] defSplit = rules[0].split(" ");
                    if (defSplit.length == 3) {
                        StateFlag.State state = StateFlag.State.valueOf(defSplit[1].toUpperCase());
                        if (defSplit[2].equals("nonmembers"))
                            region.setFlag(flag.getRegionGroupFlag(), RegionGroup.NON_MEMBERS);
                        region.setFlag((StateFlag) flag, state);
                    } else {
                        failed = true;
                    }
                } else {
                    failed = true;
                }
            }
            if (failed) {
                Bukkit.getLogger().warning("ERROR: Your flag definition is invalid!");
                break;
            }
        }
    }
    return region;
}
Also used : RegionGroup(com.sk89q.worldguard.protection.flags.RegionGroup) java.util(java.util) ProtectedRegion(com.sk89q.worldguard.protection.regions.ProtectedRegion) BukkitUtil.toVector(com.sk89q.worldguard.bukkit.BukkitUtil.toVector) Landlord(biz.princeps.landlord.Landlord) OwnedLand(biz.princeps.landlord.util.OwnedLand) WorldGuardPlugin(com.sk89q.worldguard.bukkit.WorldGuardPlugin) Flag(com.sk89q.worldguard.protection.flags.Flag) Player(org.bukkit.entity.Player) DefaultDomain(com.sk89q.worldguard.domains.DefaultDomain) org.bukkit(org.bukkit) DefaultFlag(com.sk89q.worldguard.protection.flags.DefaultFlag) BlockVector(com.sk89q.worldedit.BlockVector) StateFlag(com.sk89q.worldguard.protection.flags.StateFlag) RegionManager(com.sk89q.worldguard.protection.managers.RegionManager) ProtectedCuboidRegion(com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion) OwnedLand(biz.princeps.landlord.util.OwnedLand) StateFlag(com.sk89q.worldguard.protection.flags.StateFlag)

Example 3 with Flag

use of com.sk89q.worldguard.protection.flags.Flag in project LandLord by SpatiumPrinceps.

the class Update method onResetLands.

/**
 * Resets all lands to the default flag state
 */
public void onResetLands(CommandSender sender) {
    sender.sendMessage("Starting to reset lands...");
    for (World w : Bukkit.getWorlds()) {
        for (ProtectedRegion pr : plugin.getWgHandler().getWG().getRegionManager(w).getRegions().values()) {
            if (pr.getId().split("_").length == 3 && Bukkit.getWorld(pr.getId().split("_")[0]) == w) {
                List<String> flaggy = Landlord.getInstance().getConfig().getStringList("Flags");
                Set<String> flags = new HashSet<>();
                flaggy.forEach(s -> flags.add(s.split(" ")[0]));
                // Iterate over all existing flags
                for (Flag<?> flag : DefaultFlag.getFlags()) {
                    if (flag instanceof StateFlag) {
                        boolean failed = false;
                        if (flags.contains(flag.getName())) {
                            // Filters the config list for the right line and split that line in the mid at :
                            String[] rules = flaggy.stream().filter(s -> s.startsWith(flag.getName())).findFirst().get().split(":");
                            if (rules.length == 2) {
                                String[] defSplit = rules[0].split(" ");
                                if (defSplit.length == 3) {
                                    StateFlag.State state = StateFlag.State.valueOf(defSplit[1].toUpperCase());
                                    if (defSplit[2].equals("nonmembers"))
                                        pr.setFlag(flag.getRegionGroupFlag(), RegionGroup.NON_MEMBERS);
                                    pr.setFlag((StateFlag) flag, state);
                                } else {
                                    failed = true;
                                }
                            } else {
                                failed = true;
                            }
                        } else {
                            pr.getFlags().remove(flag);
                        }
                        if (failed) {
                            Bukkit.getLogger().warning("ERROR: Your flag definition is invalid!");
                            break;
                        }
                    }
                }
                String name = Bukkit.getOfflinePlayer(pr.getOwners().getUniqueIds().iterator().next()).getName();
                String greeting = lm.getRawString("Alerts.defaultGreeting").replace("%owner%", name);
                String farewell = lm.getRawString("Alerts.defaultFarewell").replace("%owner%", name);
                String actualGreeting = pr.getFlag(DefaultFlag.GREET_MESSAGE);
                String actualFarewell = pr.getFlag(DefaultFlag.FAREWELL_MESSAGE);
                if (!greeting.equals(actualGreeting)) {
                    pr.setFlag(DefaultFlag.GREET_MESSAGE, greeting);
                }
                if (!farewell.equals(actualFarewell)) {
                    pr.setFlag(DefaultFlag.FAREWELL_MESSAGE, farewell);
                }
            }
        }
    }
    sender.sendMessage("Finished resetting lands!");
}
Also used : LandlordCommand(biz.princeps.landlord.commands.LandlordCommand) RegionGroup(com.sk89q.worldguard.protection.flags.RegionGroup) CommandSender(org.bukkit.command.CommandSender) ProtectedRegion(com.sk89q.worldguard.protection.regions.ProtectedRegion) Landlord(biz.princeps.landlord.Landlord) Set(java.util.Set) Flag(com.sk89q.worldguard.protection.flags.Flag) HashSet(java.util.HashSet) DefaultFlag(com.sk89q.worldguard.protection.flags.DefaultFlag) List(java.util.List) World(org.bukkit.World) StateFlag(com.sk89q.worldguard.protection.flags.StateFlag) Bukkit(org.bukkit.Bukkit) ProtectedRegion(com.sk89q.worldguard.protection.regions.ProtectedRegion) StateFlag(com.sk89q.worldguard.protection.flags.StateFlag) World(org.bukkit.World) HashSet(java.util.HashSet)

Example 4 with Flag

use of com.sk89q.worldguard.protection.flags.Flag in project LandLord by SpatiumPrinceps.

the class Update method onUpdateLands.

/**
 * Supposed to add missing flags to existing lands, remove non existing flags
 */
public void onUpdateLands(CommandSender issuer) {
    issuer.sendMessage("Starting to update lands...");
    for (World w : Bukkit.getWorlds()) {
        for (ProtectedRegion pr : plugin.getWgHandler().getWG().getRegionManager(w).getRegions().values()) {
            if (pr.getId().split("_").length == 3 && w.getName().equals(pr.getId().split("_")[0])) {
                List<String> flaggy = Landlord.getInstance().getConfig().getStringList("Flags");
                Set<String> flags = new HashSet<>();
                flaggy.forEach(s -> flags.add(s.split(" ")[0]));
                // Iterate over all existing flags
                for (Flag<?> flag : DefaultFlag.getFlags()) {
                    if (flag instanceof StateFlag) {
                        boolean failed = false;
                        if (flags.contains(flag.getName())) {
                            // Filters the config list for the right line and split that line in the mid at :
                            String[] rules = flaggy.stream().filter(s -> s.startsWith(flag.getName())).findFirst().get().split(":");
                            if (rules.length == 2) {
                                if (!pr.getFlags().containsKey(flag)) {
                                    String[] defSplit = rules[0].split(" ");
                                    if (defSplit.length == 3) {
                                        StateFlag.State state = StateFlag.State.valueOf(defSplit[1].toUpperCase());
                                        if (defSplit[2].equals("nonmembers"))
                                            pr.setFlag(flag.getRegionGroupFlag(), RegionGroup.NON_MEMBERS);
                                        pr.setFlag((StateFlag) flag, state);
                                    } else {
                                        failed = true;
                                    }
                                }
                            } else {
                                failed = true;
                            }
                        } else {
                            pr.getFlags().remove(flag);
                        }
                        if (failed) {
                            Bukkit.getLogger().warning("ERROR: Your flag definition is invalid!");
                            break;
                        }
                    }
                }
                String name = Bukkit.getOfflinePlayer(pr.getOwners().getUniqueIds().iterator().next()).getName();
                String greeting = lm.getRawString("Alerts.defaultGreeting").replace("%owner%", name);
                String farewell = lm.getRawString("Alerts.defaultFarewell").replace("%owner%", name);
                if (!pr.getFlags().containsKey(DefaultFlag.GREET_MESSAGE)) {
                    pr.setFlag(DefaultFlag.GREET_MESSAGE, greeting);
                }
                if (!pr.getFlags().containsKey(DefaultFlag.FAREWELL_MESSAGE)) {
                    pr.setFlag(DefaultFlag.FAREWELL_MESSAGE, farewell);
                }
            }
        }
    }
    issuer.sendMessage("Finished updating lands!");
}
Also used : LandlordCommand(biz.princeps.landlord.commands.LandlordCommand) RegionGroup(com.sk89q.worldguard.protection.flags.RegionGroup) CommandSender(org.bukkit.command.CommandSender) ProtectedRegion(com.sk89q.worldguard.protection.regions.ProtectedRegion) Landlord(biz.princeps.landlord.Landlord) Set(java.util.Set) Flag(com.sk89q.worldguard.protection.flags.Flag) HashSet(java.util.HashSet) DefaultFlag(com.sk89q.worldguard.protection.flags.DefaultFlag) List(java.util.List) World(org.bukkit.World) StateFlag(com.sk89q.worldguard.protection.flags.StateFlag) Bukkit(org.bukkit.Bukkit) ProtectedRegion(com.sk89q.worldguard.protection.regions.ProtectedRegion) StateFlag(com.sk89q.worldguard.protection.flags.StateFlag) World(org.bukkit.World) HashSet(java.util.HashSet)

Example 5 with Flag

use of com.sk89q.worldguard.protection.flags.Flag in project LandLord by SpatiumPrinceps.

the class OwnedLand method initFlags.

private void initFlags() {
    List<String> flaggy = Landlord.getInstance().getConfig().getStringList("Flags");
    Set<String> flags = new HashSet<>();
    flaggy.forEach(s -> flags.add(s.split(" ")[0]));
    // Iterate over all existing flags
    for (Flag<?> flag : DefaultFlag.getFlags()) {
        if (flag instanceof StateFlag) {
            boolean failed = false;
            if (flags.contains(flag.getName())) {
                // Filters the config list for the right line and split that line in the mid at :
                String[] rules = flaggy.stream().filter(s -> s.startsWith(flag.getName())).findFirst().get().split(":");
                if (rules.length == 2) {
                    LLFlag llFlag = new LLFlag(flag, this, Material.getMaterial(Landlord.getInstance().getConfig().getString("Manage." + flag.getName() + ".item")));
                    StateFlag.State state1 = null, state2 = null;
                    String g1 = null, g2 = null;
                    String[] defSplit = rules[0].split(" ");
                    if (defSplit.length == 3) {
                        state1 = StateFlag.State.valueOf(defSplit[1].toUpperCase());
                        g1 = defSplit[2];
                    } else {
                        failed = true;
                    }
                    String[] toggleSplit = rules[1].split(" ");
                    if (toggleSplit.length == 2) {
                        state2 = StateFlag.State.valueOf(toggleSplit[0].toUpperCase());
                        g2 = toggleSplit[1];
                    } else {
                        failed = true;
                    }
                    if (state1 != null && state2 != null && g1 != null && g2 != null) {
                        llFlag.setToggle(state1, g1, state2, g2);
                        this.flags.add(llFlag);
                    }
                } else {
                    failed = true;
                }
            }
            if (failed) {
                Bukkit.getLogger().warning("ERROR: Your flag definition is invalid!");
                break;
            }
        }
    }
}
Also used : java.util(java.util) ProtectedRegion(com.sk89q.worldguard.protection.regions.ProtectedRegion) LLFlag(biz.princeps.landlord.flags.LLFlag) Landlord(biz.princeps.landlord.Landlord) Flag(com.sk89q.worldguard.protection.flags.Flag) Player(org.bukkit.entity.Player) DefaultDomain(com.sk89q.worldguard.domains.DefaultDomain) org.bukkit(org.bukkit) DefaultFlag(com.sk89q.worldguard.protection.flags.DefaultFlag) BlockVector(com.sk89q.worldedit.BlockVector) CParticle(biz.princeps.lib.crossversion.CParticle) PrincepsLib(biz.princeps.lib.PrincepsLib) StateFlag(com.sk89q.worldguard.protection.flags.StateFlag) StateFlag(com.sk89q.worldguard.protection.flags.StateFlag) LLFlag(biz.princeps.landlord.flags.LLFlag)

Aggregations

Flag (com.sk89q.worldguard.protection.flags.Flag)5 ProtectedRegion (com.sk89q.worldguard.protection.regions.ProtectedRegion)5 Landlord (biz.princeps.landlord.Landlord)4 DefaultFlag (com.sk89q.worldguard.protection.flags.DefaultFlag)4 StateFlag (com.sk89q.worldguard.protection.flags.StateFlag)4 RegionGroup (com.sk89q.worldguard.protection.flags.RegionGroup)3 LandlordCommand (biz.princeps.landlord.commands.LandlordCommand)2 BlockVector (com.sk89q.worldedit.BlockVector)2 WorldGuardPlugin (com.sk89q.worldguard.bukkit.WorldGuardPlugin)2 DefaultDomain (com.sk89q.worldguard.domains.DefaultDomain)2 java.util (java.util)2 HashSet (java.util.HashSet)2 List (java.util.List)2 Set (java.util.Set)2 org.bukkit (org.bukkit)2 Bukkit (org.bukkit.Bukkit)2 World (org.bukkit.World)2 CommandSender (org.bukkit.command.CommandSender)2 Player (org.bukkit.entity.Player)2 LLFlag (biz.princeps.landlord.flags.LLFlag)1