diff --git a/src/com/sk89q/worldguard/bukkit/commands/CommandRegionFlag.java b/src/com/sk89q/worldguard/bukkit/commands/CommandRegionFlag.java index 6b946ac3..8267c762 100644 --- a/src/com/sk89q/worldguard/bukkit/commands/CommandRegionFlag.java +++ b/src/com/sk89q/worldguard/bukkit/commands/CommandRegionFlag.java @@ -116,7 +116,7 @@ public boolean handle(CommandSender sender, String senderName, String command, S } } - if (!region.getFlags().getLocationFlag(nfo.type).setValue(valueStr)) { + if (!region.getFlags().getFlag(nfo.type).setValue(valueStr)) { sender.sendMessage(ChatColor.RED + "Invalid value '" + valueStr + "' for flag " + nameStr); return true; } else { diff --git a/src/com/sk89q/worldguard/protection/regions/flags/FlagDatabase.java b/src/com/sk89q/worldguard/protection/regions/flags/FlagDatabase.java index 88af5c1c..d4278bd7 100644 --- a/src/com/sk89q/worldguard/protection/regions/flags/FlagDatabase.java +++ b/src/com/sk89q/worldguard/protection/regions/flags/FlagDatabase.java @@ -31,6 +31,9 @@ */ public class FlagDatabase { + private static Map flagByFlagType; + private static Map flagByName; + public enum FlagType { PASSTHROUGH, BUILD, PVP, MOB_DAMAGE, CREEPER_EXPLOSION, @@ -42,6 +45,9 @@ public enum FlagType { }; static { + flagByFlagType = new EnumMap(FlagType.class); + flagByName = new HashMap(); + registerFlag("passthrough", FlagType.PASSTHROUGH, FlagDataType.STATE); registerFlag("build", FlagType.BUILD, FlagDataType.STATE); registerFlag("pvp", FlagType.PVP, FlagDataType.STATE); @@ -152,6 +158,4 @@ public static RegionFlag getNewInstanceOf(String name, String value, RegionFlagC } - private static Map flagByFlagType = new EnumMap(FlagType.class); - private static Map flagByName = new HashMap(); } diff --git a/src/com/sk89q/worldguard/protection/regions/flags/RegionFlag.java b/src/com/sk89q/worldguard/protection/regions/flags/RegionFlag.java index a8da27f3..21afdc9c 100644 --- a/src/com/sk89q/worldguard/protection/regions/flags/RegionFlag.java +++ b/src/com/sk89q/worldguard/protection/regions/flags/RegionFlag.java @@ -60,4 +60,6 @@ public String getName() { @Override public abstract String toString(); + + public abstract boolean setValue(String newVal); } diff --git a/src/com/sk89q/worldguard/protection/regions/flags/RegionFlagContainer.java b/src/com/sk89q/worldguard/protection/regions/flags/RegionFlagContainer.java index b7acf1c7..39ab514f 100644 --- a/src/com/sk89q/worldguard/protection/regions/flags/RegionFlagContainer.java +++ b/src/com/sk89q/worldguard/protection/regions/flags/RegionFlagContainer.java @@ -35,11 +35,13 @@ public class RegionFlagContainer { private Map flags = new HashMap(); private transient Map flagData = new EnumMap(FlagType.class); + private transient boolean hasInit = false; public RegionFlag getFlag(FlagType type) { - if (this.flagData == null) { + if (!this.hasInit) { this.initFlagData(); + this.hasInit = true; } RegionFlag ret = this.flagData.get(type); diff --git a/src/com/sk89q/worldguard/protection/regions/flags/StateRegionFlag.java b/src/com/sk89q/worldguard/protection/regions/flags/StateRegionFlag.java index a812e902..5de07522 100644 --- a/src/com/sk89q/worldguard/protection/regions/flags/StateRegionFlag.java +++ b/src/com/sk89q/worldguard/protection/regions/flags/StateRegionFlag.java @@ -28,6 +28,7 @@ public final class StateRegionFlag extends RegionFlag { public StateRegionFlag(RegionFlagContainer container, RegionFlagInfo info, String value) { super(container, info); + System.out.println("new state value : " + value); this.setValue(value); }