From e0df194ff28fcd8c9e1bd613aed5e64dd8edfaf1 Mon Sep 17 00:00:00 2001 From: wizjany Date: Mon, 13 Jun 2016 22:18:04 -0400 Subject: [PATCH] Fix unmarshalling of region group flags. Fixes WORLDGUARD-3708. --- .../sk89q/worldguard/protection/flags/Flag.java | 2 -- .../flags/registry/SimpleFlagRegistry.java | 15 +++++++++++++++ .../managers/storage/RegionDatabaseUtils.java | 2 -- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/Flag.java b/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/Flag.java index 4f327f2c..60801620 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/Flag.java +++ b/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/Flag.java @@ -20,10 +20,8 @@ package com.sk89q.worldguard.protection.flags; import com.google.common.collect.Iterators; -import com.sk89q.worldguard.bukkit.WorldGuardPlugin; import com.sk89q.worldguard.protection.FlagValueCalculator; import com.sk89q.worldguard.protection.flags.registry.FlagRegistry; -import org.bukkit.command.CommandSender; import javax.annotation.Nullable; import java.util.Collection; diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/registry/SimpleFlagRegistry.java b/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/registry/SimpleFlagRegistry.java index 29a6ba0d..4b0800d5 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/registry/SimpleFlagRegistry.java +++ b/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/registry/SimpleFlagRegistry.java @@ -115,7 +115,13 @@ public Map, Object> unmarshal(Map rawValues, boolean cre checkNotNull(rawValues, "rawValues"); ConcurrentMap, Object> values = Maps.newConcurrentMap(); + ConcurrentMap regionFlags = Maps.newConcurrentMap(); + for (Entry entry : rawValues.entrySet()) { + if (entry.getKey().endsWith("-group")) { + regionFlags.put(entry.getKey(), entry.getValue()); + continue; + } Flag flag = createUnknown ? getOrCreate(entry.getKey()) : get(entry.getKey()); if (flag != null) { @@ -132,6 +138,15 @@ public Map, Object> unmarshal(Map rawValues, boolean cre } } } + for (Entry entry : regionFlags.entrySet()) { + String parentName = entry.getKey().replaceAll("-group", ""); + Flag parent = get(parentName); + if (parent == null || parent instanceof UnknownFlag) { + forceRegister(new UnknownFlag(entry.getKey())); + } else { + parent.getRegionGroupFlag().unmarshal(entry.getValue()); + } + } return values; } diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/storage/RegionDatabaseUtils.java b/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/storage/RegionDatabaseUtils.java index 310db981..dc5e5e21 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/storage/RegionDatabaseUtils.java +++ b/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/storage/RegionDatabaseUtils.java @@ -19,11 +19,9 @@ package com.sk89q.worldguard.protection.managers.storage; -import com.sk89q.worldguard.protection.flags.Flag; import com.sk89q.worldguard.protection.regions.ProtectedRegion; import com.sk89q.worldguard.protection.regions.ProtectedRegion.CircularInheritanceException; -import javax.annotation.Nullable; import java.util.Map; import java.util.logging.Logger;