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;
}
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;
}
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!");
}
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!");
}
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;
}
}
}
}
Aggregations