diff --git a/src/com/sk89q/worldguard/bukkit/WorldGuardBlockListener.java b/src/com/sk89q/worldguard/bukkit/WorldGuardBlockListener.java index f9c41f2e..6776b278 100644 --- a/src/com/sk89q/worldguard/bukkit/WorldGuardBlockListener.java +++ b/src/com/sk89q/worldguard/bukkit/WorldGuardBlockListener.java @@ -18,6 +18,8 @@ */ package com.sk89q.worldguard.bukkit; +import com.sk89q.worldguard.protection.regions.flags.RegionFlagContainer; +import com.sk89q.worldguard.protection.regions.flags.FlagDatabase.FlagType; import com.nijiko.coelho.iConomy.iConomy; import com.nijiko.coelho.iConomy.system.Account; import com.sk89q.worldguard.protection.regionmanager.RegionManager; @@ -30,7 +32,6 @@ import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.World; -import org.bukkit.event.Cancellable; import org.bukkit.event.block.*; import org.bukkit.event.block.BlockIgniteEvent.IgniteCause; import org.bukkit.inventory.ItemStack; @@ -39,8 +40,6 @@ import com.sk89q.worldguard.blacklist.events.*; import com.sk89q.worldguard.domains.DefaultDomain; import com.sk89q.worldguard.protection.ApplicableRegionSet; -import com.sk89q.worldguard.protection.regions.AreaFlags; -import com.sk89q.worldguard.protection.regions.AreaFlags.State; import com.sk89q.worldguard.protection.regions.ProtectedRegion; import static com.sk89q.worldguard.bukkit.BukkitUtil.*; @@ -228,7 +227,7 @@ public void onBlockFlow(BlockFromToEvent event) { Vector pt = toVector(blockFrom.getLocation()); RegionManager mgr = plugin.getGlobalRegionManager().getRegionManager(world.getName()); - if (!mgr.getApplicableRegions(pt).allowsFlag("waterflow")) { + if (!mgr.getApplicableRegions(pt).allowsFlag(FlagType.WATER_FLOW)) { event.setCancelled(true); return; } @@ -274,18 +273,18 @@ public void onBlockIgnite(BlockIgniteEvent event) { } if (cause == IgniteCause.FLINT_AND_STEEL - && !set.allowsFlag(AreaFlags.FLAG_LIGHTER)) { + && !set.allowsFlag(FlagType.LIGHTER)) { event.setCancelled(true); return; } } - if (isFireSpread && set.allowsFlag(AreaFlags.FLAG_FIRE_SPREAD)) { + if (isFireSpread && set.allowsFlag(FlagType.FIRE_SPREAD)) { event.setCancelled(true); return; } - if (cause == IgniteCause.LAVA && !set.allowsFlag(AreaFlags.FLAG_LAVA_FIRE)) { + if (cause == IgniteCause.LAVA && !set.allowsFlag(FlagType.LAVA_FIRE)) { event.setCancelled(true); return; } @@ -429,7 +428,7 @@ public void onBlockInteract(BlockInteractEvent event) { if (!cfg.hasPermission(player, "region.bypass")) { ApplicableRegionSet set = mgr.getApplicableRegions(pt); - if (!set.allowsFlag(AreaFlags.FLAG_CHEST_ACCESS) && !set.canBuild(localPlayer)) { + if (!set.allowsFlag(FlagType.CHEST_ACCESS) && !set.canBuild(localPlayer)) { player.sendMessage(ChatColor.DARK_RED + "You don't have permission for this area."); event.setCancelled(true); return; @@ -444,7 +443,7 @@ public void onBlockInteract(BlockInteractEvent event) { ApplicableRegionSet applicableRegions = mgr.getApplicableRegions(pt); LocalPlayer localPlayer = BukkitPlayer.wrapPlayer(cfg, (Player)entity); - if (!applicableRegions.isFlagAllowed(AreaFlags.FLAG_LEVER_AND_BUTTON, true, null)) { + if (!applicableRegions.allowsFlag(FlagType.LEVER_AND_BUTTON, localPlayer)) { ((Player)entity).sendMessage(ChatColor.DARK_RED + "You don't have permission for this area."); event.setCancelled(true); return; @@ -582,13 +581,13 @@ public void onBlockRightClick(BlockRightClickEvent event) { ProtectedRegion region = mgr.getRegion(regionId); if (region != null) { - AreaFlags flags = region.getFlags(); + RegionFlagContainer flags = region.getFlags(); - if (flags.getBooleanFlag("iconomy", "buyable", false)) { + if (flags.getBooleanFlag(FlagType.BUYABLE).getValue(false)) { if (iConomy.getBank().hasAccount(player.getName())) { Account account = iConomy.getBank().getAccount(player.getName()); double balance = account.getBalance(); - int regionPrice = flags.getIntFlag("iconomy", "price"); + double regionPrice = flags.getIntegerFlag(FlagType.PRICE).getValue(); if (balance >= regionPrice) { account.subtract(regionPrice); @@ -597,7 +596,7 @@ public void onBlockRightClick(BlockRightClickEvent event) { DefaultDomain owners = region.getOwners(); owners.addPlayer(player.getName()); region.setOwners(owners); - flags.setFlag("iconomy", "buyable", false); + flags.getBooleanFlag(FlagType.BUYABLE).setValue(false); account.save(); } } else { diff --git a/src/com/sk89q/worldguard/bukkit/WorldGuardEntityListener.java b/src/com/sk89q/worldguard/bukkit/WorldGuardEntityListener.java index d405639c..1f8bd7ee 100644 --- a/src/com/sk89q/worldguard/bukkit/WorldGuardEntityListener.java +++ b/src/com/sk89q/worldguard/bukkit/WorldGuardEntityListener.java @@ -18,6 +18,7 @@ */ package com.sk89q.worldguard.bukkit; +import com.sk89q.worldguard.protection.regions.flags.FlagDatabase.FlagType; import com.sk89q.worldguard.protection.ApplicableRegionSet; import com.sk89q.worldguard.protection.regionmanager.RegionManager; import org.bukkit.ChatColor; @@ -34,7 +35,6 @@ import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import com.sk89q.worldedit.Vector; import com.sk89q.worldedit.blocks.BlockType; -import com.sk89q.worldguard.protection.regions.AreaFlags; import static com.sk89q.worldguard.bukkit.BukkitUtil.*; public class WorldGuardEntityListener extends EntityListener { @@ -102,7 +102,7 @@ public void onEntityDamageByEntity(EntityDamageByEntityEvent event) { Vector pt = toVector(defender.getLocation()); RegionManager mgr = plugin.getGlobalRegionManager().getRegionManager(player.getWorld().getName()); - if (!mgr.getApplicableRegions(pt).allowsFlag(AreaFlags.FLAG_PVP)) { + if (!mgr.getApplicableRegions(pt).allowsFlag(FlagType.PVP)) { ((Player) attacker).sendMessage(ChatColor.DARK_RED + "You are in a no-PvP area."); event.setCancelled(true); return; @@ -121,13 +121,13 @@ public void onEntityDamageByEntity(EntityDamageByEntityEvent event) { RegionManager mgr = plugin.getGlobalRegionManager().getRegionManager(player.getWorld().getName()); ApplicableRegionSet set = mgr.getApplicableRegions(pt); - if (!set.allowsFlag(AreaFlags.FLAG_MOB_DAMAGE)) { + if (!set.allowsFlag(FlagType.MOB_DAMAGE)) { event.setCancelled(true); return; } if (attacker instanceof Creeper) { - if (!set.allowsFlag(AreaFlags.FLAG_CREEPER_EXPLOSION)) { + if (!set.allowsFlag(FlagType.CREEPER_EXPLOSION)) { event.setCancelled(true); return; } @@ -158,7 +158,7 @@ public void onEntityDamageByProjectile(EntityDamageByProjectileEvent event) { Vector pt = toVector(defender.getLocation()); RegionManager mgr = plugin.getGlobalRegionManager().getRegionManager(player.getWorld().getName()); - if (!mgr.getApplicableRegions(pt).allowsFlag(AreaFlags.FLAG_PVP)) { + if (!mgr.getApplicableRegions(pt).allowsFlag(FlagType.PVP)) { ((Player) attacker).sendMessage(ChatColor.DARK_RED + "You are in a no-PvP area."); event.setCancelled(true); return; @@ -170,7 +170,7 @@ public void onEntityDamageByProjectile(EntityDamageByProjectileEvent event) { Vector pt = toVector(defender.getLocation()); RegionManager mgr = plugin.getGlobalRegionManager().getRegionManager(player.getWorld().getName()); - if (!mgr.getApplicableRegions(pt).allowsFlag(AreaFlags.FLAG_MOB_DAMAGE)) { + if (!mgr.getApplicableRegions(pt).allowsFlag(FlagType.MOB_DAMAGE)) { event.setCancelled(true); return; } @@ -275,7 +275,7 @@ public void onEntityExplode(EntityExplodeEvent event) { Vector pt = toVector(l); RegionManager mgr = plugin.getGlobalRegionManager().getRegionManager(wcfg.getWorldName()); - if (!mgr.getApplicableRegions(pt).allowsFlag(AreaFlags.FLAG_CREEPER_EXPLOSION)) { + if (!mgr.getApplicableRegions(pt).allowsFlag(FlagType.CREEPER_EXPLOSION)) { event.setCancelled(true); return; } @@ -290,7 +290,7 @@ public void onEntityExplode(EntityExplodeEvent event) { Vector pt = toVector(l); RegionManager mgr = plugin.getGlobalRegionManager().getRegionManager(wcfg.getWorldName()); - if (!mgr.getApplicableRegions(pt).allowsFlag(AreaFlags.FLAG_TNT)) { + if (!mgr.getApplicableRegions(pt).allowsFlag(FlagType.TNT)) { event.setCancelled(true); return; } @@ -386,11 +386,11 @@ public void onCreatureSpawn(CreatureSpawnEvent event) { break; } - if (wcfg.useRegions && creaName != "") { + if (wcfg.useRegions && !creaName.equals("")) { Vector pt = toVector(event.getEntity().getLocation()); RegionManager mgr = plugin.getGlobalRegionManager().getRegionManager(event.getEntity().getWorld().getName()); - Boolean flagValue = mgr.getApplicableRegions(pt).getBooleanAreaFlag("creaturespawn", creaName, true, null); + Boolean flagValue = mgr.getApplicableRegions(pt).getStringFlag(FlagType.DENY_SPAWN, true).getValue("").contains(creaName); if (flagValue != null) { if (!flagValue) { cancelEvent = true; diff --git a/src/com/sk89q/worldguard/bukkit/WorldGuardPlayerListener.java b/src/com/sk89q/worldguard/bukkit/WorldGuardPlayerListener.java index 9cbc25d3..0a9b0319 100644 --- a/src/com/sk89q/worldguard/bukkit/WorldGuardPlayerListener.java +++ b/src/com/sk89q/worldguard/bukkit/WorldGuardPlayerListener.java @@ -18,6 +18,8 @@ */ package com.sk89q.worldguard.bukkit; +import com.sk89q.worldguard.protection.regions.flags.RegionFlag.RegionGroup; +import com.sk89q.worldguard.protection.regions.flags.FlagDatabase.FlagType; import com.nijiko.coelho.iConomy.iConomy; import com.sk89q.worldguard.protection.ApplicableRegionSet; import com.sk89q.worldguard.protection.regionmanager.RegionManager; @@ -31,8 +33,6 @@ import org.bukkit.inventory.ItemStack; import com.sk89q.worldedit.Vector; import com.sk89q.worldguard.blacklist.events.ItemUseBlacklistEvent; -import com.sk89q.worldguard.protection.regions.AreaFlags; -import com.sk89q.worldguard.protection.regions.ProtectedRegion; import static com.sk89q.worldguard.bukkit.BukkitUtil.*; @@ -155,7 +155,7 @@ public void onPlayerItem(PlayerItemEvent event) { Vector pt = toVector(block.getRelative(event.getBlockFace())); RegionManager mgr = plugin.getGlobalRegionManager().getRegionManager(player.getWorld().getName()); - if (!mgr.getApplicableRegions(pt).allowsFlag(AreaFlags.FLAG_LIGHTER)) { + if (!mgr.getApplicableRegions(pt).allowsFlag(FlagType.LIGHTER)) { event.setCancelled(true); return; } @@ -258,17 +258,17 @@ public void onPlayerRespawn(PlayerRespawnEvent event) { player.getWorld().getName()).getApplicableRegions( BukkitUtil.toVector(location)); - Location spawn = regions.getLocationAreaFlag("spawn", player.getServer(), true, null); + Location spawn = regions.getLocationFlag(FlagType.SPAWN_LOC, true).getValue(player.getServer()); if (spawn != null) { - String spawnconfig = regions.getAreaFlag("spawn", "allow", true, null); + RegionGroup spawnconfig = regions.getRegionGroupFlag(FlagType.SPAWN_PERM, true).getValue(); if (spawnconfig != null) { BukkitPlayer localPlayer = BukkitPlayer.wrapPlayer(cfg, player); - if (spawnconfig.equals("owner")) { + if (spawnconfig == RegionGroup.OWNER) { if (regions.isOwner(localPlayer)) { event.setRespawnLocation(spawn); } - } else if (spawnconfig.equals("member")) { + } else if (spawnconfig == RegionGroup.MEMBER) { if (regions.isMember(localPlayer)) { event.setRespawnLocation(spawn); } diff --git a/src/com/sk89q/worldguard/bukkit/commands/CommandBuyRegion.java b/src/com/sk89q/worldguard/bukkit/commands/CommandBuyRegion.java index a6145b11..46897261 100644 --- a/src/com/sk89q/worldguard/bukkit/commands/CommandBuyRegion.java +++ b/src/com/sk89q/worldguard/bukkit/commands/CommandBuyRegion.java @@ -28,8 +28,9 @@ import com.sk89q.worldguard.domains.DefaultDomain; import com.sk89q.worldguard.bukkit.commands.CommandHandler.CommandHandlingException; import com.sk89q.worldguard.protection.regionmanager.RegionManager; -import com.sk89q.worldguard.protection.regions.AreaFlags; import com.sk89q.worldguard.protection.regions.ProtectedRegion; +import com.sk89q.worldguard.protection.regions.flags.FlagDatabase.FlagType; +import com.sk89q.worldguard.protection.regions.flags.RegionFlagContainer; /** * @@ -57,13 +58,13 @@ public boolean handle(CommandSender sender, String senderName, String command, S RegionManager mgr = cfg.getWorldGuardPlugin().getGlobalRegionManager().getRegionManager(player.getWorld().getName()); ProtectedRegion region = mgr.getRegion(id); if (region != null) { - AreaFlags flags = region.getFlags(); + RegionFlagContainer flags = region.getFlags(); - if (flags.getBooleanFlag("iconomy", "buyable", false)) { + if (flags.getBooleanFlag(FlagType.BUYABLE).getValue(false)) { if (args.length == 2) { if (args[1] == "info") { player.sendMessage(ChatColor.YELLOW + "Region " + id + " costs " + - iConomy.getBank().format(flags.getDoubleFlag("iconomy", "price"))); + iConomy.getBank().format(flags.getDoubleFlag(FlagType.PRICE).getValue())); if (iConomy.getBank().hasAccount(player.getName())) { player.sendMessage(ChatColor.YELLOW + "You have " + iConomy.getBank().format( @@ -78,7 +79,7 @@ public boolean handle(CommandSender sender, String senderName, String command, S if (iConomy.getBank().hasAccount(player.getName())) { Account account = iConomy.getBank().getAccount(player.getName()); double balance = account.getBalance(); - int regionPrice = flags.getIntFlag("iconomy", "price"); + double regionPrice = flags.getDoubleFlag(FlagType.PRICE).getValue(); if (balance >= regionPrice) { account.subtract(regionPrice); @@ -87,7 +88,7 @@ public boolean handle(CommandSender sender, String senderName, String command, S DefaultDomain owners = region.getOwners(); owners.addPlayer(player.getName()); region.setOwners(owners); - flags.setFlag("iconomy", "buyable", false); + flags.getBooleanFlag(FlagType.BUYABLE).setValue(false); account.save(); } } else { diff --git a/src/com/sk89q/worldguard/bukkit/commands/CommandRegionFlag.java b/src/com/sk89q/worldguard/bukkit/commands/CommandRegionFlag.java index dbeb17a2..6b946ac3 100644 --- a/src/com/sk89q/worldguard/bukkit/commands/CommandRegionFlag.java +++ b/src/com/sk89q/worldguard/bukkit/commands/CommandRegionFlag.java @@ -24,8 +24,10 @@ import com.sk89q.worldguard.bukkit.WorldGuardWorldConfiguration; import com.sk89q.worldguard.bukkit.commands.CommandHandler.CommandHandlingException; import com.sk89q.worldguard.protection.regionmanager.RegionManager; -import com.sk89q.worldguard.protection.regions.AreaFlags; import com.sk89q.worldguard.protection.regions.ProtectedRegion; +import com.sk89q.worldguard.protection.regions.flags.FlagDatabase; +import com.sk89q.worldguard.protection.regions.flags.RegionFlag.FlagDataType; +import com.sk89q.worldguard.protection.regions.flags.RegionFlagInfo; import java.io.IOException; import org.bukkit.ChatColor; import org.bukkit.Location; @@ -40,20 +42,18 @@ public class CommandRegionFlag extends WgRegionCommand { public boolean handle(CommandSender sender, String senderName, String command, String[] args, WorldGuardConfiguration cfg, WorldGuardWorldConfiguration wcfg) throws CommandHandlingException { - CommandHandler.checkArgs(args, 3, 4, "/region flag () "); + CommandHandler.checkArgs(args, 2, -1, "/region flag () [no value to unset flag]"); try { String id = args[0].toLowerCase(); String nameStr = args[1]; - String subnameStr = null; String valueStr = null; - if (args.length < 4) { + + if (args.length == 3) { valueStr = args[2]; - } else { - subnameStr = args[2]; + } else if (args.length > 3) { StringBuilder tmp = new StringBuilder(); - for(int i=3; i < args.length; i++) - { + for (int i = 2; i < args.length; i++) { tmp.append(args[i]); } valueStr = tmp.toString(); @@ -81,135 +81,52 @@ public boolean handle(CommandSender sender, String senderName, String command, S cfg.checkRegionPermission(sender, "region.flag.foreignregions"); } - FlagInfo nfo = FlagInfo.getFlagInfo(nameStr, subnameStr); + RegionFlagInfo nfo = FlagDatabase.getFlagInfoFromName(nameStr); if (nfo == null) { sender.sendMessage(ChatColor.RED + "Unknown flag specified."); return true; - } else if (nfo.subName != null && args.length < 4) { - sender.sendMessage(ChatColor.RED + "Name a subflag and a value to set this flag."); - return true; } - boolean validValue = false; - switch (nfo.type) { - case STRING: { - validValue = true; - break; + if (nfo.dataType == FlagDataType.LOCATION) { + if (!(sender instanceof Player)) { + sender.sendMessage(ChatColor.RED + "Flag not supported in console mode."); + return true; } - case INT: { - validValue = true; - try { - Integer val = Integer.valueOf(valueStr); - } catch (Exception e) { - validValue = false; - } - break; - } - case BOOLEAN: { - valueStr = valueStr.toLowerCase(); - if (valueStr.equals("on")) { - valueStr = "true"; - } else if (valueStr.equals("allow")) { - valueStr = "true"; - } else if (valueStr.equals("1")) { - valueStr = "true"; - } - validValue = true; - break; - } - case FLOAT: { - validValue = true; - try { - Float val = Float.valueOf(valueStr); - } catch (Exception e) { - validValue = false; - } - break; - } - case DOUBLE: { - validValue = true; - try { - Double val = Double.valueOf(valueStr); - } catch (Exception e) { - validValue = false; - } - break; - } - case STATE: { - validValue = true; + Player player = (Player) sender; + + Location l = player.getLocation(); + + if (valueStr != null && valueStr.equals("set")) { + + if (region.contains(BukkitUtil.toVector(l))) { + region.getFlags().getLocationFlag(nfo.type).setValue(l); + sender.sendMessage(ChatColor.YELLOW + "Region '" + id + "' updated. Flag " + nameStr + " set to current location"); + return true; - if (valueStr.equalsIgnoreCase("allow")) { - valueStr = AreaFlags.State.ALLOW.toString(); - } else if (valueStr.equalsIgnoreCase("deny")) { - valueStr = AreaFlags.State.DENY.toString(); - } else if (valueStr.equalsIgnoreCase("none")) { - valueStr = AreaFlags.State.NONE.toString(); } else { - validValue = false; - } - break; - } - case LOCATION: { - if (!(sender instanceof Player)) { - sender.sendMessage(ChatColor.RED + "Flag not supported in console mode."); - return true; - } - Player player = (Player) sender; - - Location l = player.getLocation(); - - if (valueStr.equals("set")) { - - if (region.contains(BukkitUtil.toVector(l))) { - region.getFlags().setLocationFlag(nfo.flagName, l); - validValue = true; - sender.sendMessage(ChatColor.YELLOW + "Region '" + id + "' updated. Flag " + nameStr + " set to current location"); - - } else { - player.sendMessage(ChatColor.RED + "You must set the " + nameStr + " location inside the region it belongs to."); - return true; - } - - } else if (valueStr.equals("delete")) { - region.getFlags().setLocationFlag(nfo.flagName, null); - validValue = true; - sender.sendMessage(ChatColor.YELLOW + "Region '" + id + "' updated. Flag " + nameStr + " removed."); - } - - - if (validValue) { - mgr.save(); + player.sendMessage(ChatColor.RED + "You must set the " + nameStr + " location inside the region it belongs to."); return true; } - break; - } - default: { - validValue = false; - break; + } else if (valueStr == null || valueStr.equals("delete")) { + region.getFlags().getLocationFlag(nfo.type).setValue((Location) null); + sender.sendMessage(ChatColor.YELLOW + "Region '" + id + "' updated. Flag " + nameStr + " removed."); + return true; } } - String fullFlagname = nameStr; - if (subnameStr != null) { - fullFlagname += " " + subnameStr; - } - - if (!validValue) { - sender.sendMessage(ChatColor.RED + "Invalid value '" + valueStr + "' for flag " + fullFlagname); + if (!region.getFlags().getLocationFlag(nfo.type).setValue(valueStr)) { + sender.sendMessage(ChatColor.RED + "Invalid value '" + valueStr + "' for flag " + nameStr); + return true; + } else { + mgr.save(); + if (valueStr == null) { + valueStr = "null"; + } + sender.sendMessage(ChatColor.YELLOW + "Region '" + id + "' updated. Flag " + nameStr + " set to " + valueStr); return true; } - - if (nfo.subName != null && nfo.subName.equals("*")) { - region.getFlags().setFlag(nfo.flagName, subnameStr, valueStr); - } else { - region.getFlags().setFlag(nfo.flagName, nfo.flagSubName, valueStr); - } - - mgr.save(); - - sender.sendMessage(ChatColor.YELLOW + "Region '" + id + "' updated. Flag " + fullFlagname + " set to " + valueStr); } catch (IOException e) { sender.sendMessage(ChatColor.RED + "Region database failed to save: " + e.getMessage()); diff --git a/src/com/sk89q/worldguard/bukkit/commands/CommandRegionInfo.java b/src/com/sk89q/worldguard/bukkit/commands/CommandRegionInfo.java index 2f608f25..d66ff767 100644 --- a/src/com/sk89q/worldguard/bukkit/commands/CommandRegionInfo.java +++ b/src/com/sk89q/worldguard/bukkit/commands/CommandRegionInfo.java @@ -22,14 +22,12 @@ import com.sk89q.worldguard.bukkit.WorldGuardConfiguration; import com.sk89q.worldguard.bukkit.WorldGuardWorldConfiguration; import com.sk89q.worldguard.bukkit.commands.CommandHandler.CommandHandlingException; -import com.sk89q.worldguard.bukkit.commands.FlagInfo.FlagValueType; import com.sk89q.worldguard.domains.DefaultDomain; import com.sk89q.worldguard.protection.regionmanager.RegionManager; -import com.sk89q.worldguard.protection.regions.AreaFlags; import com.sk89q.worldguard.protection.regions.ProtectedRegion; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; +import com.sk89q.worldguard.protection.regions.flags.FlagDatabase; +import com.sk89q.worldguard.protection.regions.flags.RegionFlagContainer; +import com.sk89q.worldguard.protection.regions.flags.RegionFlagInfo; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -68,7 +66,7 @@ public boolean handle(CommandSender sender, String senderName, String command, S cfg.checkRegionPermission(sender, "region.info.foreignregions"); } - AreaFlags flags = region.getFlags(); + RegionFlagContainer flags = region.getFlags(); DefaultDomain owners = region.getOwners(); DefaultDomain members = region.getMembers(); @@ -77,44 +75,13 @@ public boolean handle(CommandSender sender, String senderName, String command, S sender.sendMessage(ChatColor.BLUE + "Priority: " + region.getPriority()); StringBuilder s = new StringBuilder(); - List displayLocations = new ArrayList(); - for (FlagInfo nfo : FlagInfo.getFlagInfoList()) { + for (RegionFlagInfo nfo : FlagDatabase.getFlagInfoList()) { if (s.length() > 0) { s.append(", "); } - String fullName = nfo.name; - if (nfo.subName != null && nfo.subName != "*") { - fullName += " " + nfo.subName; - } - - String value; - if (nfo.type == FlagValueType.LOCATION && !displayLocations.contains(nfo.flagName)) { - value = flags.getFlag(nfo.flagName, "x"); - if (value != null) { - s.append(nfo.flagName + ": set"); - } else { - s.append(nfo.flagName + ": -"); - } - displayLocations.add(nfo.flagName); - } else if ((nfo.subName != null && nfo.subName.equals("*"))) { - StringBuilder ret = new StringBuilder(); - for (Map.Entry entry : flags.getFlagData(nfo.flagName).entrySet()) { - if (Boolean.valueOf(entry.getValue())) { - ret.append(entry.getKey() + " "); - } - } - s.append(fullName + ": " + ret); - } else { - value = flags.getFlag(nfo.flagName, nfo.flagSubName); - if (value != null) { - s.append(fullName + ": " + value); - } else { - s.append(fullName + ": -"); - } - } - + s.append(flags.getFlag(nfo.type).toString()); } sender.sendMessage(ChatColor.BLUE + "Flags: " + s.toString()); diff --git a/src/com/sk89q/worldguard/bukkit/commands/CommandTpRegion.java b/src/com/sk89q/worldguard/bukkit/commands/CommandTpRegion.java index 10685da6..1789c455 100644 --- a/src/com/sk89q/worldguard/bukkit/commands/CommandTpRegion.java +++ b/src/com/sk89q/worldguard/bukkit/commands/CommandTpRegion.java @@ -14,6 +14,9 @@ import com.sk89q.worldguard.bukkit.commands.CommandHandler.CommandHandlingException; import com.sk89q.worldguard.protection.regionmanager.RegionManager; import com.sk89q.worldguard.protection.regions.ProtectedRegion; +import com.sk89q.worldguard.protection.regions.flags.FlagDatabase.FlagType; +import com.sk89q.worldguard.protection.regions.flags.RegionFlag.RegionGroup; +import com.sk89q.worldguard.protection.regions.flags.RegionGroupRegionFlag; /** * @author wallnuss @@ -42,19 +45,19 @@ public boolean handle(CommandSender sender, String senderName, String command, S ProtectedRegion region = mgr.getRegion(id); if (region != null) { - String flagright = "all"; + RegionGroup flagright; if (spawn) { - flagright = region.getFlags().getFlag("spawn", "allow"); + flagright = region.getFlags().getRegionGroupFlag(FlagType.SPAWN_PERM).getValue(RegionGroup.ALL); } else { - flagright = region.getFlags().getFlag("teleport", "allow"); + flagright = region.getFlags().getRegionGroupFlag(FlagType.TELE_PERM).getValue(RegionGroup.ALL); } LocalPlayer lPlayer = BukkitPlayer.wrapPlayer(cfg, player); - if (flagright.equals("owner")) { + if (flagright == RegionGroup.OWNER) { if (!region.isOwner(lPlayer)) { cfg.checkPermission(player, "tpregion.override"); } - } else if (flagright.equals("member")) { + } else if (flagright == RegionGroup.MEMBER) { if (!region.isMember(lPlayer)) { cfg.checkPermission(player, "tpregion.override"); } @@ -63,9 +66,9 @@ public boolean handle(CommandSender sender, String senderName, String command, S Location location = null; if (spawn) { - location = region.getFlags().getLocationFlag(cfg.getWorldGuardPlugin().getServer(), "spawn"); + location = region.getFlags().getLocationFlag(FlagType.SPAWN_LOC).getValue(cfg.getWorldGuardPlugin().getServer()); } else { - location = region.getFlags().getLocationFlag(cfg.getWorldGuardPlugin().getServer(), "teleport"); + location = region.getFlags().getLocationFlag(FlagType.TELE_LOC).getValue(cfg.getWorldGuardPlugin().getServer()); } if (location != null) { player.teleportTo(location); diff --git a/src/com/sk89q/worldguard/bukkit/commands/FlagInfo.java b/src/com/sk89q/worldguard/bukkit/commands/FlagInfo.java deleted file mode 100644 index f8d2725e..00000000 --- a/src/com/sk89q/worldguard/bukkit/commands/FlagInfo.java +++ /dev/null @@ -1,104 +0,0 @@ -// $Id$ -/* - * WorldGuard - * Copyright (C) 2010 sk89q - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . -*/ - -package com.sk89q.worldguard.bukkit.commands; - -import java.util.ArrayList; -import java.util.List; - -/** - * - * @author Michael - */ - -public class FlagInfo { - - public static enum FlagValueType { STRING, BOOLEAN, INT, FLOAT, DOUBLE, STATE, LOCATION }; - - public String name; - public String subName; - public FlagValueType type; - public String flagName; - public String flagSubName; - - private static List flagList; - static { - flagList = new ArrayList(); - flagList.add(new FlagInfo("msg", "g", FlagValueType.STRING, "msg", "g")); - flagList.add(new FlagInfo("msg", "f", FlagValueType.STRING, "msg", "f")); - flagList.add(new FlagInfo("denyspawn", "*", FlagValueType.STRING, "creaturespawn", "*")); - flagList.add(new FlagInfo("heal", "delay", FlagValueType.INT, "heal", "delay")); - flagList.add(new FlagInfo("heal", "amount", FlagValueType.INT, "heal", "amount")); - flagList.add(new FlagInfo("passthrough", null, FlagValueType.STATE, "states", "passthrough")); - flagList.add(new FlagInfo("build", null, FlagValueType.STATE, "states", "build")); - flagList.add(new FlagInfo("pvp", null, FlagValueType.STATE, "states", "pvp")); - flagList.add(new FlagInfo("mobdamage", null, FlagValueType.STATE, "states", "mobdamage")); - flagList.add(new FlagInfo("creeper", null, FlagValueType.STATE, "states", "creeper")); - flagList.add(new FlagInfo("tnt", null, FlagValueType.STATE, "states", "tnt")); - flagList.add(new FlagInfo("lighter", null, FlagValueType.STATE, "states", "lighter")); - flagList.add(new FlagInfo("firespread", null, FlagValueType.STATE, "states", "firespread")); - flagList.add(new FlagInfo("lavafirespread", null, FlagValueType.STATE, "states", "lavafirespread")); - flagList.add(new FlagInfo("chest", null, FlagValueType.STATE, "states", "chest")); - flagList.add(new FlagInfo("waterflow", null, FlagValueType.STATE, "states", "waterflow")); - flagList.add(new FlagInfo("iconomy", "buyable", FlagValueType.BOOLEAN, "iconomy", "buyable")); - flagList.add(new FlagInfo("iconomy", "price", FlagValueType.DOUBLE, "iconomy", "price")); - flagList.add(new FlagInfo("spawn", "set", FlagValueType.LOCATION, "spawn", "")); - flagList.add(new FlagInfo("spawn", "delete", FlagValueType.LOCATION, "spawn", "")); - flagList.add(new FlagInfo("spawn", "allow", FlagValueType.STRING, "spawn", "allow")); - flagList.add(new FlagInfo("teleport", "set", FlagValueType.LOCATION, "teleport", "")); - flagList.add(new FlagInfo("teleport", "delete", FlagValueType.LOCATION, "teleport", "")); - flagList.add(new FlagInfo("teleport", "allow", FlagValueType.STRING, "teleport", "allow")); - flagList.add(new FlagInfo("leverandbutton", null, FlagValueType.STATE, "states", "leverandbutton")); - } - - public static FlagInfo getFlagInfo(String name, String subName) { - - for (FlagInfo nfo : flagList) { - if (name.equals(nfo.name)) { - if (subName == null && nfo.subName == null) { - return nfo; - } else if (nfo.subName != null) { - if (nfo.subName.equals("*")) { - return nfo; - } - else if(subName != null && subName.equals(nfo.subName)) - { - return nfo; - } - } - } - } - - return null; - } - - public static List getFlagInfoList() { - return flagList; - } - - public FlagInfo(String name, String subName, FlagValueType type, String flagName, String flagSubName) - { - this.name = name; - this.subName = subName; - this.type = type; - this.flagName = flagName; - this.flagSubName = flagSubName; - } - -} diff --git a/src/com/sk89q/worldguard/protection/ApplicableRegionSet.java b/src/com/sk89q/worldguard/protection/ApplicableRegionSet.java index 4d1a8023..62ac2e07 100644 --- a/src/com/sk89q/worldguard/protection/ApplicableRegionSet.java +++ b/src/com/sk89q/worldguard/protection/ApplicableRegionSet.java @@ -21,11 +21,12 @@ import com.sk89q.worldguard.protection.regions.ProtectedRegion; import java.util.Iterator; import com.sk89q.worldguard.LocalPlayer; -import com.sk89q.worldguard.protection.regions.AreaFlags; -import com.sk89q.worldguard.protection.regions.AreaFlags.State; +import com.sk89q.worldguard.protection.regions.flags.*; +import com.sk89q.worldguard.protection.regions.flags.FlagDatabase.FlagType; +import com.sk89q.worldguard.protection.regions.flags.RegionFlag; +import com.sk89q.worldguard.protection.regions.flags.RegionFlag.State; import java.util.List; -import org.bukkit.Location; -import org.bukkit.Server; + /** * Represents a setFlag of regions and their rules as applied to one point. @@ -59,30 +60,7 @@ public ApplicableRegionSet(List applicable, GlobalFlags global * @return */ public boolean canBuild(LocalPlayer player) { - - if (this.applicable.size() < 1) { - return global.canBuild; - } - - if (affectedRegion == null) { - return global.canBuild; - } - - String data = getAreaFlag("states", AreaFlags.FLAG_BUILD, true, null, affectedRegion); - - State state; - try { - state = data != null ? State.valueOf(data) : State.DENY; - } catch (Exception e) { - state = State.DENY; - } - - if (state != State.ALLOW && !affectedRegion.isMember(player)) { - return false; - } - - return true; - + return isFlagAllowed(FlagType.BUILD, global.canBuild) || this.isMember(player); } /** @@ -91,39 +69,180 @@ public boolean canBuild(LocalPlayer player) { * @param player * @return */ - public boolean allowsFlag(String flag) { - boolean def = true; - - if (flag.equals(AreaFlags.FLAG_CHEST_ACCESS)) { - def = global.canAccessChests; - } else if (flag.equals(AreaFlags.FLAG_PVP)) { - def = global.canPvP; - } else if (flag.equals(AreaFlags.FLAG_LIGHTER)) { - def = global.canLighter; - } else if (flag.equals(AreaFlags.FLAG_TNT)) { - def = global.canTnt; - } else if (flag.equals(AreaFlags.FLAG_CREEPER_EXPLOSION)) { - def = global.allowCreeper; - } else if (flag.equals(AreaFlags.FLAG_MOB_DAMAGE)) { - def = global.allowMobDamage; - } else if (flag.equals(AreaFlags.FLAG_WATER_FLOW)) { - def = global.allowWaterflow; - } else if (flag.equals(AreaFlags.FLAG_LEVER_AND_BUTTON)) { - def = global.canLeverandbutton; - } - - return isFlagAllowed(flag, def, null); + public boolean allowsFlag(FlagType type) { + return isFlagAllowed(type, global.getDefaultValue(type)); } - public boolean isFlagAllowed(String flag, boolean def, LocalPlayer player) { + public boolean allowsFlag(FlagType type, LocalPlayer player) { + return isFlagAllowed(type, global.getDefaultValue(type)) || this.isMember(player); + } + + public boolean isFlagAllowed(FlagType type, boolean def) { State defState = def ? State.ALLOW : State.DENY; - return getStateAreaFlag("states", flag, defState, true, player) == State.ALLOW; + return getStateFlag(type, true).getValue(defState) == State.ALLOW; + } + + public boolean isFlagAllowed(FlagType type, boolean def, LocalPlayer player) { + + State defState = def ? State.ALLOW : State.DENY; + return getStateFlag(type, true).getValue(defState) == State.ALLOW || this.isMember(player); + } + + + private RegionFlag getFlag(FlagType type, Boolean inherit) { + + ProtectedRegion region = affectedRegion; + + if (region == null) { + return null; + } + + if (!inherit) { + return region.getFlags().getFlag(type); + } else { + RegionFlag value; + do { + value = region.getFlags().getFlag(type); + region = region.getParent(); + + } while (!value.hasValue() && region != null); + + return value; + } + + } + + public BooleanRegionFlag getBooleanFlag(FlagType type, boolean inherit) { + + RegionFlag flag = this.getFlag(type, inherit); + + if (flag instanceof BooleanRegionFlag) { + return (BooleanRegionFlag) flag; + } else { + return null; + } + } + + public StateRegionFlag getStateFlag(FlagType type, boolean inherit) { + + RegionFlag flag = this.getFlag(type, inherit); + + if (flag instanceof StateRegionFlag) { + return (StateRegionFlag) flag; + } else { + return null; + } + } + + public IntegerRegionFlag getIntegerFlag(FlagType type, boolean inherit) { + + RegionFlag flag = this.getFlag(type, inherit); + + if (flag instanceof IntegerRegionFlag) { + return (IntegerRegionFlag) flag; + } else { + return null; + } + } + + public DoubleRegionFlag getDoubleFlag(FlagType type, boolean inherit) { + + RegionFlag flag = this.getFlag(type, inherit); + + if (flag instanceof DoubleRegionFlag) { + return (DoubleRegionFlag) flag; + } else { + return null; + } + } + + public StringRegionFlag getStringFlag(FlagType type, boolean inherit) { + + RegionFlag flag = this.getFlag(type, inherit); + + if (flag instanceof StringRegionFlag) { + return (StringRegionFlag) flag; + } else { + return null; + } + } + + public RegionGroupRegionFlag getRegionGroupFlag(FlagType type, boolean inherit) { + + RegionFlag flag = this.getFlag(type, inherit); + + if (flag instanceof RegionGroupRegionFlag) { + return (RegionGroupRegionFlag) flag; + } else { + return null; + } + } + + public LocationRegionFlag getLocationFlag(FlagType type, boolean inherit) { + + RegionFlag flag = this.getFlag(type, inherit); + + if (flag instanceof LocationRegionFlag) { + return (LocationRegionFlag) flag; + } else { + return null; + } + } + + public boolean isAnyRegionAffected() + { + return this.applicable.size() > 0; + } + + + /** + * Determines the region with the hightest priority that is not a parent. + * + */ + private void determineAffectedRegion() { + + affectedRegion = null; + Iterator iter = applicable.iterator(); + + while (iter.hasNext()) { + ProtectedRegion region = iter.next(); + + if (affectedRegion == null || affectedRegion.getPriority() < region.getPriority()) { + affectedRegion = region; + } + } + } + + + + public boolean isOwner(LocalPlayer player) { + return affectedRegion != null ? affectedRegion.isOwner(player) : false; } + /** + * Checks whether a player is a member of the region or any of its parents. + * + * @param player + * @return + */ + public boolean isMember(LocalPlayer player) { + return affectedRegion != null ? affectedRegion.isMember(player) : false; + } + + public String getAffectedRegionId() { + return affectedRegion != null ? affectedRegion.getId() : ""; + } + + public int getAffectedRegionPriority() { + return affectedRegion != null ? affectedRegion.getPriority() : 0; + } + + + /** * Checks to see if a flag is permitted. - * + * * @param def default state if there are no regions defined * @param player null to not check owners and members * @return @@ -205,216 +324,7 @@ private boolean isFlagAllowed(String flag, boolean def, LocalPlayer player) { || (player != null && needsClear.size() == 0); } */ - /** - * Get an area flag - * - * @param name flag name - * @param subname flag subname - * @param inherit true to inherit flag values from parents - * @param player null to not check owners and members - * @return - */ - public String getAreaFlag(String name, String subname, Boolean inherit, LocalPlayer player) { - - return getAreaFlag(name, subname, inherit, player, getAffectedRegion()); - } - - private String getAreaFlag(String name, String subname, Boolean inherit, LocalPlayer player, ProtectedRegion affectedRegion) { - - if (affectedRegion == null) { - return null; - } - - if (player != null && !affectedRegion.isMember(player)) { - return null; - } - - if (!inherit) { - return affectedRegion.getFlags().getFlag(name, subname); - } else { - String value; - do { - value = affectedRegion.getFlags().getFlag(name, subname); - affectedRegion = affectedRegion.getParent(); - - } while (value == null && affectedRegion != null); - - return value; - } - - } - - /** - * Gets the region with the hightest priority. - * - */ - private ProtectedRegion getAffectedRegion() { - - return affectedRegion; - } - - - public boolean isAnyRegionAffected() - { - return this.applicable.size() > 0; - } - - - /** - * Determines the region with the hightest priority that is not a parent. - * - */ - private void determineAffectedRegion() { - - affectedRegion = null; - Iterator iter = applicable.iterator(); - - while (iter.hasNext()) { - ProtectedRegion region = iter.next(); - - if (affectedRegion == null || affectedRegion.getPriority() < region.getPriority()) { - affectedRegion = region; - } - } - } - - - public String getAreaFlag(String name, String subname, String defaultValue, Boolean inherit, LocalPlayer player) { - String data = getAreaFlag(name, subname, inherit, player); - return data != null ? data : defaultValue; - } - - public Boolean getBooleanAreaFlag(String name, String subname, Boolean inherit, LocalPlayer player) { - String data = getAreaFlag(name, subname, inherit, player); - return data != null ? Boolean.valueOf(data) : null; - } - - public Boolean getBooleanAreaFlag(String name, String subname, boolean defaultValue, Boolean inherit, LocalPlayer player) { - String data = getAreaFlag(name, subname, inherit, player); - return data != null ? Boolean.valueOf(data) : defaultValue; - } - - public Integer getIntAreaFlag(String name, String subname, Boolean inherit, LocalPlayer player) { - String data = getAreaFlag(name, subname, inherit, player); - try { - return data != null ? Integer.valueOf(data) : null; - } catch (Exception e) { - return null; - } - } - - public Integer getIntAreaFlag(String name, String subname, int defaultValue, Boolean inherit, LocalPlayer player) { - String data = getAreaFlag(name, subname, inherit, player); - try { - return data != null ? Integer.valueOf(data) : defaultValue; - } catch (Exception e) { - return defaultValue; - } - } - - public Float getFloatAreaFlag(String name, String subname, Boolean inherit, LocalPlayer player) { - String data = getAreaFlag(name, subname, inherit, player); - try { - return data != null ? Float.valueOf(data) : null; - } catch (Exception e) { - return null; - } - } - - public Float getFloatAreaFlag(String name, String subname, float defaultValue, Boolean inherit, LocalPlayer player) { - String data = getAreaFlag(name, subname, inherit, player); - try { - return data != null ? Float.valueOf(data) : defaultValue; - } catch (Exception e) { - return defaultValue; - } - } - - public Double getDoubleAreaFlag(String name, String subname, Boolean inherit, LocalPlayer player) { - String data = getAreaFlag(name, subname, inherit, player); - try { - return data != null ? Double.valueOf(data) : null; - } catch (Exception e) { - return null; - } - } - - public Double getDoubleAreaFlag(String name, String subname, double defaultValue, Boolean inherit, LocalPlayer player) { - String data = getAreaFlag(name, subname, inherit, player); - try { - return data != null ? Double.valueOf(data) : defaultValue; - } catch (Exception e) { - return defaultValue; - } - } - - public State getStateAreaFlag(String name, String subname, Boolean inherit, LocalPlayer player) { - String data = getAreaFlag(name, subname, inherit, player); - - try { - return data != null ? State.valueOf(data) : null; - } catch (Exception e) { - return null; - } - } - - public State getStateAreaFlag(String name, String subname, State defaultValue, Boolean inherit, LocalPlayer player) { - String data = getAreaFlag(name, subname, inherit, player); - - try { - return data != null ? State.valueOf(data) : defaultValue; - } catch (Exception e) { - return defaultValue; - } - } - - public Location getLocationAreaFlag(String name, Server server, Boolean inherit, LocalPlayer player) { - - ProtectedRegion childRegion = getAffectedRegion(); - if (childRegion == null) { - return null; - } - - if (player != null && !childRegion.isMember(player)) { - return null; - } - - if (!inherit) { - return childRegion.getFlags().getLocationFlag(server, name); - } else { - Location value; - do { - value = childRegion.getFlags().getLocationFlag(server, name); - childRegion = childRegion.getParent(); - - } while (value == null && childRegion != null); - - return value; - } - - } - - public boolean isOwner(LocalPlayer player) { - return affectedRegion != null ? affectedRegion.isOwner(player) : false; - } - - /** - * Checks whether a player is a member of the region or any of its parents. - * - * @param player - * @return - */ - public boolean isMember(LocalPlayer player) { - return affectedRegion != null ? affectedRegion.isMember(player) : false; - } - - public String getAffectedRegionId() { - return affectedRegion != null ? affectedRegion.getId() : ""; - } - - public int getAffectedRegionPriority() { - return affectedRegion != null ? affectedRegion.getPriority() : 0; - } + /** * Clear a region's parents for isFlagAllowed(). diff --git a/src/com/sk89q/worldguard/protection/GlobalFlags.java b/src/com/sk89q/worldguard/protection/GlobalFlags.java index dd9e66ff..6fd72303 100644 --- a/src/com/sk89q/worldguard/protection/GlobalFlags.java +++ b/src/com/sk89q/worldguard/protection/GlobalFlags.java @@ -19,6 +19,8 @@ package com.sk89q.worldguard.protection; +import com.sk89q.worldguard.protection.regions.flags.FlagDatabase.FlagType; + /** * Used for default flags. * @@ -34,4 +36,32 @@ public class GlobalFlags { public boolean allowCreeper = true; public boolean allowMobDamage = true; public boolean allowWaterflow = true; + + + public boolean getDefaultValue(FlagType type) + { + switch(type) + { + case BUILD: + return this.canBuild; + case CHEST_ACCESS: + return this.canAccessChests; + case PVP: + return this.canPvP; + case LIGHTER: + return this.canLighter; + case TNT: + return this.canTnt; + case LEVER_AND_BUTTON: + return this.canLeverandbutton; + case CREEPER_EXPLOSION: + return this.allowCreeper; + case MOB_DAMAGE: + return this.allowMobDamage; + case WATER_FLOW: + return this.allowWaterflow; + default: + return false; + } + } } diff --git a/src/com/sk89q/worldguard/protection/TimedFlagsTimer.java b/src/com/sk89q/worldguard/protection/TimedFlagsTimer.java index 1cbf9daf..3c4a4a9d 100644 --- a/src/com/sk89q/worldguard/protection/TimedFlagsTimer.java +++ b/src/com/sk89q/worldguard/protection/TimedFlagsTimer.java @@ -19,8 +19,8 @@ package com.sk89q.worldguard.protection; -import com.sk89q.worldguard.protection.regions.ProtectedRegion; -import com.sk89q.worldguard.bukkit.BukkitPlayer; + +import com.sk89q.worldguard.protection.regions.flags.FlagDatabase.FlagType; import com.sk89q.worldguard.bukkit.WorldGuardPlugin; import com.sk89q.worldguard.protection.regionmanager.RegionManager; import java.util.HashMap; @@ -78,11 +78,11 @@ public void run() { RegionManager mgr = wg.getGlobalRegionManager().getRegionManager(player.getWorld().getName()); ApplicableRegionSet regions = mgr.getApplicableRegions(toVector(player.getLocation())); - int healDelay = regions.getIntAreaFlag("heal", "delay", -1, true, null); + int healDelay = regions.getIntegerFlag(FlagType.HEAL_DELAY, true).getValue(-1); if (healDelay > 0) { healDelay *= 1000; - int healAmount = regions.getIntAreaFlag("heal", "amount", 1, true, null); + int healAmount = regions.getIntegerFlag(FlagType.HEAL_AMOUNT, true).getValue(1); if (now - nfo.lastHealTick > healDelay) { player.setHealth(player.getHealth() + healAmount); } else { @@ -99,8 +99,8 @@ public void run() { if (nfo.lastRegion == null || !newRegionName.equals(nfo.lastRegion)) { - String newGreetMsg = regions.getAreaFlag("msg", "g", null, true, null); - String farewellMsg = regions.getAreaFlag("msg", "f", null, true, null); + String newGreetMsg = regions.getStringFlag(FlagType.GREET_MESSAGE, true).getValue(); + String farewellMsg = regions.getStringFlag(FlagType.FAREWELL_MESSAGE, true).getValue(); if (nfo.lastFarewellMsg != null) { player.sendMessage(nfo.lastFarewellMsg); diff --git a/src/com/sk89q/worldguard/protection/dbs/CSVDatabase.java b/src/com/sk89q/worldguard/protection/dbs/CSVDatabase.java index 512a2ae5..01fa82e1 100644 --- a/src/com/sk89q/worldguard/protection/dbs/CSVDatabase.java +++ b/src/com/sk89q/worldguard/protection/dbs/CSVDatabase.java @@ -33,8 +33,6 @@ import com.sk89q.worldedit.BlockVector; import com.sk89q.worldedit.Vector; import com.sk89q.worldguard.domains.DefaultDomain; -import com.sk89q.worldguard.protection.regions.AreaFlags; -import com.sk89q.worldguard.protection.regions.AreaFlags.State; import com.sk89q.worldguard.protection.regions.ProtectedRegion; import com.sk89q.worldguard.protection.regions.ProtectedRegion.CircularInheritanceException; import com.sk89q.worldguard.util.ArrayReader; @@ -100,9 +98,7 @@ public void save() throws IOException { cuboid.getParent() != null ? cuboid.getParent().getId() : "", writeDomains(cuboid.getOwners()), writeDomains(cuboid.getMembers()), - writeFlags(cuboid.getFlags()), - cuboid.getFlags().getFlag("msg", "g") != null ? cuboid.getFlags().getFlag("msg", "g") : "", - cuboid.getFlags().getFlag("msg", "l") != null ? cuboid.getFlags().getFlag("msg", "l") : "", + //writeFlags(cuboid.getFlags()), }); } } finally { @@ -163,9 +159,8 @@ public void load() throws IOException { ProtectedRegion region = new ProtectedCuboidRegion(id, min, max); region.setPriority(priority); - region.setFlags(parseFlags(flagsData)); + //region.setFlags(parseFlags(flagsData)); region.setOwners(this.parseDomains(ownersData)); - region.getFlags().setFlag("msg", "g", enterMessage); regions.put(id, region); } else if (type.equalsIgnoreCase("cuboid.2")) { Vector pt1 = new Vector( @@ -190,11 +185,9 @@ public void load() throws IOException { ProtectedRegion region = new ProtectedCuboidRegion(id, min, max); region.setPriority(priority); - region.setFlags(parseFlags(flagsData)); + //region.setFlags(parseFlags(flagsData)); region.setOwners(this.parseDomains(ownersData)); region.setMembers(this.parseDomains(membersData)); - region.getFlags().setFlag("msg", "g", enterMessage); - region.getFlags().setFlag("msg", "l", leaveMessage); regions.put(id, region); // Link children to parents later @@ -296,6 +289,7 @@ private DefaultDomain parseDomains(String data) { * @param data * @return */ +/* private AreaFlags parseFlags(String data) { if (data == null) { return new AreaFlags(); @@ -328,7 +322,8 @@ private AreaFlags parseFlags(String data) { return flags; } - +*/ + /** * Used to write the list of domains. * @@ -358,6 +353,7 @@ private String writeDomains(DefaultDomain domain) { * @param flag * @return */ +/* private String writeFlag(State state, String flag) { if (state == State.ALLOW) { return "+" + flag; @@ -367,7 +363,8 @@ private String writeFlag(State state, String flag) { return ""; } - +*/ + /** * Returns a null if a string is null or empty. * @@ -390,6 +387,7 @@ private String nullEmptyString(String str) { * @param flags * @return */ +/* private String writeFlags(AreaFlags flags) { StringBuilder str = new StringBuilder(); for (Map.Entry entry : flags.entrySet()) { @@ -397,7 +395,7 @@ private String writeFlags(AreaFlags flags) { } return str.toString(); } - +*/ /** * Get a list of protected regions. * diff --git a/src/com/sk89q/worldguard/protection/dbs/JSONContainer.java b/src/com/sk89q/worldguard/protection/dbs/JSONContainer.java index 302516a0..2ffbb67e 100644 --- a/src/com/sk89q/worldguard/protection/dbs/JSONContainer.java +++ b/src/com/sk89q/worldguard/protection/dbs/JSONContainer.java @@ -20,7 +20,6 @@ package com.sk89q.worldguard.protection.dbs; import com.sk89q.worldguard.domains.DefaultDomain; -import com.sk89q.worldguard.protection.regions.AreaFlags; import com.sk89q.worldguard.protection.regions.ProtectedRegion; import com.sk89q.worldguard.protection.regions.ProtectedPolygonalRegion; import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion; @@ -97,10 +96,7 @@ else if(region.getMembers() == null) { region.setMembers(new DefaultDomain()); } - else if(region.getFlags() == null) - { - region.setFlags(new AreaFlags()); - } + } diff --git a/src/com/sk89q/worldguard/protection/regions/AreaFlags.java b/src/com/sk89q/worldguard/protection/regions/AreaFlags.java deleted file mode 100644 index 797de82c..00000000 --- a/src/com/sk89q/worldguard/protection/regions/AreaFlags.java +++ /dev/null @@ -1,358 +0,0 @@ -// $Id$ -/* - * WorldGuard - * Copyright (C) 2010 sk89q - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.sk89q.worldguard.protection.regions; - -import java.util.HashMap; -import java.util.Map; -import java.util.Set; -import org.bukkit.Location; -import org.bukkit.Server; - -/** - * Holds the flags for a region. - * - * @author sk89q - */ -public class AreaFlags { - - public enum State { - - NONE, - ALLOW, - DENY, - }; - - public static final String FLAG_PASSTHROUGH = "passthrough"; - public static final String FLAG_BUILD = "build"; - public static final String FLAG_PVP = "pvp"; - public static final String FLAG_MOB_DAMAGE = "mobdamage"; - public static final String FLAG_CREEPER_EXPLOSION = "creeper"; - public static final String FLAG_TNT = "tnt"; - public static final String FLAG_LIGHTER = "llighter"; - public static final String FLAG_FIRE_SPREAD = "firespread"; - public static final String FLAG_LAVA_FIRE = "lavafirespread"; - public static final String FLAG_CHEST_ACCESS = "chest"; - public static final String FLAG_WATER_FLOW = "waterflow"; - public static final String FLAG_LEVER_AND_BUTTON = "leverandbutton"; - - - /** - * Get the user-friendly name of a flag. If a name isn't known, then - * the flag is returned unchanged. - * - * @param flag - * @return - */ - /* - public static String getFlagName(String flag) { - if (flag.equals(FLAG_PASSTHROUGH)) { - return "passthrough"; - } else if (flag.equals(FLAG_BUILD)) { - return "build"; - } else if (flag.equals(FLAG_PVP)) { - return "PvP"; - } else if (flag.equals(FLAG_MOB_DAMAGE)) { - return "mob damage"; - } else if (flag.equals(FLAG_CREEPER_EXPLOSION)) { - return "creeper explosion"; - } else if (flag.equals(FLAG_TNT)) { - return "TNT"; - } else if (flag.equals(FLAG_LIGHTER)) { - return "lighter"; - } else if (flag.equals(FLAG_FIRE_SPREAD)) { - return "fire spread"; - } else if (flag.equals(FLAG_LAVA_FIRE)) { - return "lava fire spread"; - } else if (flag.equals(FLAG_CHEST_ACCESS)) { - return "chest access"; - } else if (flag.equals(FLAG_WATER_FLOW)) { - return "water flow"; - } else { - return flag; - } - } -*/ - /** - * Gets a flag from an alias. May return null. - * - * @param name - * @return - */ - /* - public static String fromAlias(String name) { - if (name.equalsIgnoreCase("passthrough")) { - return FLAG_PASSTHROUGH; - } else if (name.equalsIgnoreCase("build")) { - return FLAG_BUILD; - } else if (name.equalsIgnoreCase("pvp")) { - return FLAG_PVP; - } else if (name.equalsIgnoreCase("mobdamage")) { - return FLAG_MOB_DAMAGE; - } else if (name.equalsIgnoreCase("creeper")) { - return FLAG_CREEPER_EXPLOSION; - } else if (name.equalsIgnoreCase("tnt")) { - return FLAG_TNT; - } else if (name.equalsIgnoreCase("lighter")) { - return FLAG_LIGHTER; - } else if (name.equalsIgnoreCase("firespread")) { - return FLAG_FIRE_SPREAD; - } else if (name.equalsIgnoreCase("lavafirespread")) { - return FLAG_LAVA_FIRE; - } else if (name.equalsIgnoreCase("chest")) { - return FLAG_CHEST_ACCESS; - } else if (name.equalsIgnoreCase("waterflow")) { - return FLAG_WATER_FLOW; - } else { - return null; - } - }*/ - - private Map> flags = new HashMap>(); - - public Map getFlagData(String name) { - Map ret = flags.get(name); - if (ret == null) { - ret = new HashMap(); - flags.put(name, ret); - } - - return ret; - } - - public Set> entrySet() { - - Map ret = new HashMap(); - - for (Map.Entry entry : getFlagData("states").entrySet()) { - ret.put(entry.getKey(), State.valueOf(entry.getValue())); - } - - return ret.entrySet(); - } - - /** - * Gets the State value of a state flag - * - * @param name - * @param subname - * @return State - */ - public State getStateFlag(String name, String subname) { - String value = getFlagData(name).get(subname); - if (value == null) { - return State.NONE; - } - State state = State.NONE; - try { - state = State.valueOf(value); - if (state == null) { - return State.NONE; - } - } catch (Exception e) { - return State.NONE; - } - return state; - } - - /** - * Gets the State value of a state flag - * - * @param flag - * @return State - */ - public State getStateFlag(String flag) { - return getStateFlag("states", flag); - } - - /** - * Sets the State value of a state flag - * - * @param flag - * @param state - */ - public void setFlag(String name, String subname, State state) { - if (state == State.NONE) { - getFlagData(name).remove(subname); - } else { - getFlagData(name).put(subname, state.toString()); - } - } - - /** - * Sets the State value of a state flag - * - * @param flag - * @param state - */ - public void setFlag(String flag, State state) { - setFlag("states", flag, state); - } - - @Override - public boolean equals(Object obj) { - if (!(obj instanceof AreaFlags)) { - return false; - } - - AreaFlags other = (AreaFlags) obj; - return other.flags.equals(this.flags); - } - - @Override - public int hashCode() { - int hash = 3; - hash = 97 * hash + (this.flags != null ? this.flags.hashCode() : 0); - return hash; - } - - public void setFlag(String name, String subname, String value) { - if(subname == null) - { - return; - } - if (value == null) { - getFlagData(name).remove(subname); - } else { - getFlagData(name).put(subname, value); - } - } - - public void setFlag(String name, String subname, Boolean value) { - setFlag(name, subname, value.toString()); - } - - public void setFlag(String name, String subname, Integer value) { - setFlag(name, subname, value.toString()); - } - - public void setFlag(String name, String subname, Float value) { - setFlag(name, subname, value.toString()); - } - - public void setFlag(String name, String subname, Double value) { - setFlag(name, subname, value.toString()); - } - - public String getFlag(String name, String subname) { - return getFlagData(name).get(subname); - } - - public String getFlag(String name, String subname, String defaultValue) { - String data = getFlagData(name).get(subname); - return data != null ? data : defaultValue; - } - - public Boolean getBooleanFlag(String name, String subname) { - String data = getFlagData(name).get(subname); - return data != null ? Boolean.valueOf(data) : null; - } - - public Boolean getBooleanFlag(String name, String subname, boolean defaultValue) { - String data = getFlagData(name).get(subname); - return data != null ? Boolean.valueOf(data) : defaultValue; - } - - public Integer getIntFlag(String name, String subname) { - String data = getFlagData(name).get(subname); - try { - return data != null ? Integer.valueOf(data) : null; - } catch (Exception e) { - return null; - } - } - - public Integer getIntFlag(String name, String subname, int defaultValue) { - String data = getFlagData(name).get(subname); - try { - return data != null ? Integer.valueOf(data) : defaultValue; - } catch (Exception e) { - return defaultValue; - } - } - - public Float getFloatFlag(String name, String subname) { - String data = getFlagData(name).get(subname); - try { - return data != null ? Float.valueOf(data) : null; - } catch (Exception e) { - return null; - } - } - - public Float getFloatFlag(String name, String subname, float defaultValue) { - String data = getFlagData(name).get(subname); - try { - return data != null ? Float.valueOf(data) : defaultValue; - } catch (Exception e) { - return defaultValue; - } - } - - public Double getDoubleFlag(String name, String subname) { - String data = getFlagData(name).get(subname); - try { - return data != null ? Double.valueOf(data) : null; - } catch (Exception e) { - return null; - } - } - - public Double getDoubleFlag(String name, String subname, double defaultValue) { - String data = getFlagData(name).get(subname); - try { - return data != null ? Double.valueOf(data) : defaultValue; - } catch (Exception e) { - return defaultValue; - } - } - - public Location getLocationFlag(Server server, String name) { - try { - Double x = Double.valueOf(getFlagData(name).get("x")); - Double y = Double.valueOf(getFlagData(name).get("y")); - Double z = Double.valueOf(getFlagData(name).get("z")); - Float yaw = Float.valueOf(getFlagData(name).get("yaw")); - Float pitch = Float.valueOf(getFlagData(name).get("pitch")); - String worldName = getFlagData(name).get("world"); - - Location l = new Location(server.getWorld(worldName), x, y, z, yaw, pitch); - return l; - } catch (Exception e) { - return null; - } - } - - public void setLocationFlag(String name, Location l) { - if (l != null) { - getFlagData(name).put("x", new Double(l.getX()).toString()); - getFlagData(name).put("y", new Double(l.getY()).toString()); - getFlagData(name).put("z", new Double(l.getZ()).toString()); - getFlagData(name).put("yaw", new Float(l.getYaw()).toString()); - getFlagData(name).put("pitch", new Float(l.getPitch()).toString()); - getFlagData(name).put("world", l.getWorld().getName()); - } else { - getFlagData(name).put("x", null); - getFlagData(name).put("y", null); - getFlagData(name).put("z", null); - getFlagData(name).put("yaw", null); - getFlagData(name).put("pitch", null); - getFlagData(name).put("world", null); - } - } -} diff --git a/src/com/sk89q/worldguard/protection/regions/ProtectedRegion.java b/src/com/sk89q/worldguard/protection/regions/ProtectedRegion.java index f2320deb..869aa3fb 100644 --- a/src/com/sk89q/worldguard/protection/regions/ProtectedRegion.java +++ b/src/com/sk89q/worldguard/protection/regions/ProtectedRegion.java @@ -24,6 +24,7 @@ import com.sk89q.worldguard.LocalPlayer; import com.sk89q.worldguard.domains.DefaultDomain; import com.sk89q.worldguard.protection.UnsupportedIntersectionException; +import com.sk89q.worldguard.protection.regions.flags.RegionFlagContainer; import java.util.List; /** @@ -41,11 +42,11 @@ public abstract class ProtectedRegion implements Comparable { */ private int priority = 0; /** - * Holds the parent. + * Holds the curParent. */ private transient ProtectedRegion parent; /** - * Holds the parent's Id. Used for serialization, don't touch it. + * Holds the curParent's Id. Used for serialization, don't touch it. */ private String parentId; /** @@ -59,7 +60,7 @@ public abstract class ProtectedRegion implements Comparable { /** * Area flags. */ - private AreaFlags flags = new AreaFlags(); + private RegionFlagContainer flags = new RegionFlagContainer(); /** @@ -132,17 +133,17 @@ public void setPriority(int priority) { } /** - * @return the parent + * @return the curParent */ public ProtectedRegion getParent() { return parent; } /** - * Set the parent. This checks to make sure that it will not result + * Set the curParent. This checks to make sure that it will not result * in circular inheritance. * - * @param parent the parent to setFlag + * @param curParent the curParent to setFlag * @throws CircularInheritanceException */ public void setParent(ProtectedRegion parent) throws CircularInheritanceException { @@ -166,14 +167,7 @@ public void setParent(ProtectedRegion parent) throws CircularInheritanceExceptio this.parent = parent; } - /** - * Se flags. - * @param flags - */ - public void setFlags(AreaFlags flags) { - this.flags = flags; - } - + /** * @return the owners */ @@ -215,13 +209,13 @@ public boolean isOwner(LocalPlayer player) { return true; } - ProtectedRegion parent = getParent(); - while (parent != null) { - if (parent.getOwners().contains(player)) { + ProtectedRegion curParent = getParent(); + while (curParent != null) { + if (curParent.getOwners().contains(player)) { return true; } - parent = parent.getParent(); + curParent = curParent.getParent(); } return false; @@ -239,14 +233,14 @@ public boolean isMember(LocalPlayer player) { return true; } - ProtectedRegion parent = getParent(); - while (parent != null) { - if (parent.getOwners().contains(player) - || parent.getMembers().contains(player)) { + ProtectedRegion curParent = getParent(); + while (curParent != null) { + if (curParent.getOwners().contains(player) + || curParent.getMembers().contains(player)) { return true; } - parent = parent.getParent(); + curParent = curParent.getParent(); } return false; @@ -257,7 +251,11 @@ public boolean isMember(LocalPlayer player) { * * @return */ - public AreaFlags getFlags() { + public RegionFlagContainer getFlags() { + if(this.flags == null) + { + this.flags = new RegionFlagContainer(); + } return flags; } @@ -304,7 +302,7 @@ public int compareTo(ProtectedRegion other) { /** - * Thrown when setting a parent would create a circular inheritance + * Thrown when setting a curParent would create a circular inheritance * situation. * */ diff --git a/src/com/sk89q/worldguard/protection/regions/flags/BooleanRegionFlag.java b/src/com/sk89q/worldguard/protection/regions/flags/BooleanRegionFlag.java new file mode 100644 index 00000000..34c3ac20 --- /dev/null +++ b/src/com/sk89q/worldguard/protection/regions/flags/BooleanRegionFlag.java @@ -0,0 +1,79 @@ +// $Id$ +/* + * WorldGuard + * Copyright (C) 2010 sk89q + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.sk89q.worldguard.protection.regions.flags; + +/** + * + * @author Michael + */ +public final class BooleanRegionFlag extends RegionFlag { + + private Boolean value; + + public BooleanRegionFlag(RegionFlagContainer container, RegionFlagInfo info, String value) { + super(container, info); + + this.setValue(value); + } + + public void setValue(Boolean newValue) { + this.value = newValue; + this.container.internalSetValue(info.name, newValue != null ? newValue.toString() : null); + } + + public Boolean getValue() { + return this.value; + } + + public Boolean getValue(Boolean def) { + return this.value != null ? this.value : def; + } + + public boolean setValue(String newValue) { + if (newValue == null) { + this.value = null; + } else { + newValue = newValue.toLowerCase(); + if(newValue.equals("on") || newValue.equals("allow") || newValue.equals("1")) + { + newValue = "true"; + } + this.value = Boolean.valueOf(newValue); + } + + return true; + } + + @Override + public boolean hasValue() { + return this.value != null; + } + + @Override + public String toString() { + if(this.value != null) + { + return this.value.toString(); + } + else + { + return "-"; + } + } +} diff --git a/src/com/sk89q/worldguard/protection/regions/flags/DoubleRegionFlag.java b/src/com/sk89q/worldguard/protection/regions/flags/DoubleRegionFlag.java new file mode 100644 index 00000000..92c07a02 --- /dev/null +++ b/src/com/sk89q/worldguard/protection/regions/flags/DoubleRegionFlag.java @@ -0,0 +1,78 @@ +// $Id$ +/* + * WorldGuard + * Copyright (C) 2010 sk89q + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.sk89q.worldguard.protection.regions.flags; + +/** + * + * @author Michael + */ +public final class DoubleRegionFlag extends RegionFlag { + + private Double value; + + public DoubleRegionFlag(RegionFlagContainer container, RegionFlagInfo info, String value) { + super(container, info); + this.setValue(value); + } + + public void setValue(Double newValue) { + this.value = newValue; + this.container.internalSetValue(info.name, newValue != null ? newValue.toString() : null); + } + + public Double getValue() { + return this.value; + } + + public Double getValue(Double def) { + return this.value != null ? this.value : def; + } + + public boolean setValue(String newValue) { + if (newValue == null) { + this.value = null; + } else { + try { + this.value = Double.valueOf(newValue); + } catch (Exception e) { + this.value = null; + return false; + } + } + + return true; + } + + @Override + public boolean hasValue() { + return this.value != null; + } + + @Override + public String toString() { + if(this.value != null) + { + return this.value.toString(); + } + else + { + return "-"; + } + } +} diff --git a/src/com/sk89q/worldguard/protection/regions/flags/FlagDatabase.java b/src/com/sk89q/worldguard/protection/regions/flags/FlagDatabase.java new file mode 100644 index 00000000..88af5c1c --- /dev/null +++ b/src/com/sk89q/worldguard/protection/regions/flags/FlagDatabase.java @@ -0,0 +1,157 @@ +// $Id$ +/* + * WorldGuard + * Copyright (C) 2010 sk89q + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.sk89q.worldguard.protection.regions.flags; + +import com.sk89q.worldguard.protection.regions.flags.RegionFlag.FlagDataType; +import java.util.ArrayList; +import java.util.EnumMap; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * + * @author Michael + */ +public class FlagDatabase { + + public enum FlagType { + + PASSTHROUGH, BUILD, PVP, MOB_DAMAGE, CREEPER_EXPLOSION, + TNT, LIGHTER, FIRE_SPREAD, LAVA_FIRE, CHEST_ACCESS, WATER_FLOW, + LEVER_AND_BUTTON, GREET_MESSAGE, FAREWELL_MESSAGE, DENY_SPAWN, + HEAL_DELAY, HEAL_AMOUNT, TELE_LOC, TELE_PERM, SPAWN_LOC, SPAWN_PERM, + BUYABLE, PRICE + + }; + + static { + registerFlag("passthrough", FlagType.PASSTHROUGH, FlagDataType.STATE); + registerFlag("build", FlagType.BUILD, FlagDataType.STATE); + registerFlag("pvp", FlagType.PVP, FlagDataType.STATE); + registerFlag("mobdamage", FlagType.MOB_DAMAGE, FlagDataType.STATE); + registerFlag("creeperexp", FlagType.CREEPER_EXPLOSION, FlagDataType.STATE); + registerFlag("tnt", FlagType.TNT, FlagDataType.STATE); + registerFlag("lighter", FlagType.LIGHTER, FlagDataType.STATE); + registerFlag("firespread", FlagType.FIRE_SPREAD, FlagDataType.STATE); + registerFlag("lavafire", FlagType.LAVA_FIRE, FlagDataType.STATE); + registerFlag("chest", FlagType.CHEST_ACCESS, FlagDataType.STATE); + registerFlag("waterflow", FlagType.WATER_FLOW, FlagDataType.STATE); + registerFlag("leverandbutton", FlagType.LEVER_AND_BUTTON, FlagDataType.STATE); + + registerFlag("buyable", FlagType.BUYABLE, FlagDataType.BOOLEAN); + + registerFlag("healdelay", FlagType.HEAL_DELAY, FlagDataType.INTEGER); + registerFlag("healamount", FlagType.HEAL_AMOUNT, FlagDataType.INTEGER); + + registerFlag("price", FlagType.PRICE, FlagDataType.DOUBLE); + + registerFlag("gmsg", FlagType.GREET_MESSAGE, FlagDataType.STRING); + registerFlag("fmsg", FlagType.FAREWELL_MESSAGE, FlagDataType.STRING); + registerFlag("denyspawn", FlagType.DENY_SPAWN, FlagDataType.STRING); + + registerFlag("teleloc", FlagType.TELE_LOC, FlagDataType.LOCATION); + registerFlag("spawnloc", FlagType.SPAWN_LOC, FlagDataType.LOCATION); + + registerFlag("teleperm", FlagType.TELE_PERM, FlagDataType.REGIONGROUP); + registerFlag("spawnperm", FlagType.SPAWN_PERM, FlagDataType.REGIONGROUP); + } + + + + private static void registerFlag(String name, FlagType type, FlagDataType dataType) { + + RegionFlagInfo info = new RegionFlagInfo(name, type, dataType); + flagByFlagType.put(info.type, info); + flagByName.put(info.name, info); + } + + + public static RegionFlagInfo getFlagInfoFromName(String name) + { + return flagByName.get(name); + } + + public static List getFlagInfoList() + { + List list = new ArrayList(); + list.addAll(flagByFlagType.values()); + return list; + } + + + public static RegionFlag getNewInstanceOf(FlagType type, String value, RegionFlagContainer container) { + RegionFlagInfo info = flagByFlagType.get(type); + + if (info == null) { + return null; + } + + switch (info.dataType) { + case BOOLEAN: + return new BooleanRegionFlag(container, info, value); + case STATE: + return new StateRegionFlag(container, info, value); + case INTEGER: + return new IntegerRegionFlag(container, info, value); + case DOUBLE: + return new DoubleRegionFlag(container, info, value); + case STRING: + return new StringRegionFlag(container, info, value); + case LOCATION: + return new LocationRegionFlag(container, info, value); + case REGIONGROUP: + return new RegionGroupRegionFlag(container, info, value); + default: + return null; + } + + } + + public static RegionFlag getNewInstanceOf(String name, String value, RegionFlagContainer container) { + RegionFlagInfo info = flagByName.get(name); + + if (info == null) { + return null; + } + + switch (info.dataType) { + case BOOLEAN: + return new BooleanRegionFlag(container, info, value); + case STATE: + return new StateRegionFlag(container, info, value); + case INTEGER: + return new IntegerRegionFlag(container, info, value); + case DOUBLE: + return new DoubleRegionFlag(container, info, value); + case STRING: + return new StringRegionFlag(container, info, value); + case LOCATION: + return new LocationRegionFlag(container, info, value); + case REGIONGROUP: + return new RegionGroupRegionFlag(container, info, value); + default: + return null; + } + + } + + private static Map flagByFlagType = new EnumMap(FlagType.class); + private static Map flagByName = new HashMap(); +} diff --git a/src/com/sk89q/worldguard/protection/regions/flags/IntegerRegionFlag.java b/src/com/sk89q/worldguard/protection/regions/flags/IntegerRegionFlag.java new file mode 100644 index 00000000..34c8dae1 --- /dev/null +++ b/src/com/sk89q/worldguard/protection/regions/flags/IntegerRegionFlag.java @@ -0,0 +1,78 @@ +// $Id$ +/* + * WorldGuard + * Copyright (C) 2010 sk89q + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.sk89q.worldguard.protection.regions.flags; + +/** + * + * @author Michael + */ +public final class IntegerRegionFlag extends RegionFlag { + + private Integer value; + + public IntegerRegionFlag(RegionFlagContainer container, RegionFlagInfo info, String value) { + super(container, info); + this.setValue(value); + } + + public void setValue(Integer newValue) { + this.value = newValue; + this.container.internalSetValue(info.name, newValue != null ? newValue.toString() : null); + } + + public Integer getValue() { + return this.value; + } + + public Integer getValue(Integer def) { + return this.value != null ? this.value : def; + } + + public boolean setValue(String newValue) { + if (newValue == null) { + this.value = null; + } else { + try { + this.value = Integer.valueOf(newValue); + } catch (Exception e) { + this.value = null; + return false; + } + } + + return true; + } + + @Override + public boolean hasValue() { + return this.value != null; + } + + @Override + public String toString() { + if(this.value != null) + { + return this.value.toString(); + } + else + { + return "-"; + } + } +} diff --git a/src/com/sk89q/worldguard/protection/regions/flags/LocationRegionFlag.java b/src/com/sk89q/worldguard/protection/regions/flags/LocationRegionFlag.java new file mode 100644 index 00000000..5d6b7a39 --- /dev/null +++ b/src/com/sk89q/worldguard/protection/regions/flags/LocationRegionFlag.java @@ -0,0 +1,122 @@ +// $Id$ +/* + * WorldGuard + * Copyright (C) 2010 sk89q + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.sk89q.worldguard.protection.regions.flags; + +import org.bukkit.Location; +import org.bukkit.Server; + +/** + * + * @author Michael + */ +public final class LocationRegionFlag extends RegionFlag { + + private String worldName; + private double x, y, z; + private float yaw, pitch; + + public LocationRegionFlag(RegionFlagContainer container, RegionFlagInfo info, String value) { + super(container, info); + this.setValue(value); + } + + public void setValue(Location newValue) { + if (newValue == null) { + this.worldName = null; + } else { + this.worldName = newValue.getWorld().getName(); + this.x = newValue.getBlockX(); + this.y = newValue.getBlockY(); + this.z = newValue.getBlockZ(); + this.yaw = newValue.getYaw(); + this.pitch = newValue.getPitch(); + } + + String stringVal; + if (newValue == null) { + stringVal = null; + } else { + stringVal = newValue.getWorld().getName() + ";" + newValue.getBlockX() + ";" + + newValue.getBlockY() + ";" + newValue.getBlockZ() + ";" + newValue.getYaw() + + ";" + newValue.getPitch(); + } + this.container.internalSetValue(info.name, stringVal); + } + + public Location getValue(Server server) { + + if (this.worldName == null) { + return null; + } else { + try { + Location ret = new Location(server.getWorld(this.worldName), this.x, this.y, this.z, this.yaw, this.pitch); + return ret; + } catch (Exception e) { + return null; + } + } + + } + + public Location getValue(Server server, Location def) { + Location ret = getValue(server); + return ret != null ? ret : def; + } + + public boolean setValue(String newValue) { + if (newValue == null) { + this.worldName = null; + } else { + try { + this.worldName = null; + String[] data = newValue.split(";"); + if (data.length == 6) { + this.worldName = data[0]; + this.x = Double.valueOf(data[1]); + this.y = Double.valueOf(data[2]); + this.z = Double.valueOf(data[3]); + this.yaw = Float.valueOf(data[4]); + this.pitch = Float.valueOf(data[5]); + } + + } catch (Exception e) { + this.worldName = null; + return false; + } + } + + return true; + } + + @Override + public boolean hasValue() { + return this.worldName != null; + } + @Override + public String toString() { + if(this.worldName != null) + { + return this.worldName + "(" + Math.round(this.x) + "," + Math.round(this.y) + "," + Math.round(this.z) + ")"; + } + else + { + return "-"; + } + } +} diff --git a/src/com/sk89q/worldguard/protection/regions/flags/RegionFlag.java b/src/com/sk89q/worldguard/protection/regions/flags/RegionFlag.java new file mode 100644 index 00000000..a8da27f3 --- /dev/null +++ b/src/com/sk89q/worldguard/protection/regions/flags/RegionFlag.java @@ -0,0 +1,63 @@ +// $Id$ +/* + * WorldGuard + * Copyright (C) 2010 sk89q + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.sk89q.worldguard.protection.regions.flags; + +/** + * + * @author Michael + */ +public abstract class RegionFlag { + + public enum RegionGroup { + + ALL, MEMBER, OWNER + }; + + public enum State { + + NONE, ALLOW, DENY + }; + + public enum FlagDataType { + + BOOLEAN, STATE, INTEGER, DOUBLE, STRING, LOCATION, REGIONGROUP + }; + + + protected RegionFlagContainer container; + protected RegionFlagInfo info; + + public RegionFlag(RegionFlagContainer container, RegionFlagInfo info) { + this.container = container; + this.info = info; + } + + public RegionFlagInfo getInfo() { + return this.info; + } + + public String getName() { + return this.info.name; + } + + public abstract boolean hasValue(); + + @Override + public abstract String toString(); +} diff --git a/src/com/sk89q/worldguard/protection/regions/flags/RegionFlagContainer.java b/src/com/sk89q/worldguard/protection/regions/flags/RegionFlagContainer.java new file mode 100644 index 00000000..b7acf1c7 --- /dev/null +++ b/src/com/sk89q/worldguard/protection/regions/flags/RegionFlagContainer.java @@ -0,0 +1,181 @@ +// $Id$ +/* + * WorldGuard + * Copyright (C) 2010 sk89q + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.sk89q.worldguard.protection.regions.flags; + +import com.sk89q.worldguard.protection.regions.flags.FlagDatabase.FlagType; +import java.util.EnumMap; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import java.util.Map.Entry; + + +/** + * Holds the flags for a region. + * + * @author sk89q + */ +public class RegionFlagContainer { + + private Map flags = new HashMap(); + private transient Map flagData = new EnumMap(FlagType.class); + + public RegionFlag getFlag(FlagType type) { + + if (this.flagData == null) { + this.initFlagData(); + } + + RegionFlag ret = this.flagData.get(type); + + if (ret == null) { + ret = FlagDatabase.getNewInstanceOf(type, null, this); + + if (ret != null) { + this.flagData.put(type, ret); + } + } + + return ret; + } + + private void initFlagData() { + + Iterator> iter = this.flags.entrySet().iterator(); + + while (iter.hasNext()) { + Entry entry = iter.next(); + + RegionFlag rflag = FlagDatabase.getNewInstanceOf(entry.getKey(), entry.getValue(), this); + if (rflag == null) { + iter.remove(); + } else { + this.flagData.put(rflag.info.type, rflag); + } + } + } + + protected void internalSetValue(String name, String value) { + if (name == null) { + return; + } + + if (value == null) { + this.flags.remove(name); + } else { + this.flags.put(name, value); + } + } + + @Override + public boolean equals(Object obj) { + if (!(obj instanceof RegionFlagContainer)) { + return false; + } + + RegionFlagContainer other = (RegionFlagContainer) obj; + return other.flags.equals(this.flags); + } + + @Override + public int hashCode() { + int hash = 3; + hash = 97 * hash + (this.flags != null ? this.flags.hashCode() : 0); + return hash; + } + + public BooleanRegionFlag getBooleanFlag(FlagType type) { + + RegionFlag flag = this.getFlag(type); + + if (flag instanceof BooleanRegionFlag) { + return (BooleanRegionFlag) flag; + } else { + return null; + } + } + + public StateRegionFlag getStateFlag(FlagType type) { + + RegionFlag flag = this.getFlag(type); + + if (flag instanceof StateRegionFlag) { + return (StateRegionFlag) flag; + } else { + return null; + } + } + + public IntegerRegionFlag getIntegerFlag(FlagType type) { + + RegionFlag flag = this.getFlag(type); + + if (flag instanceof IntegerRegionFlag) { + return (IntegerRegionFlag) flag; + } else { + return null; + } + } + + public DoubleRegionFlag getDoubleFlag(FlagType type) { + + RegionFlag flag = this.getFlag(type); + + if (flag instanceof DoubleRegionFlag) { + return (DoubleRegionFlag) flag; + } else { + return null; + } + } + + public StringRegionFlag getStringFlag(FlagType type) { + + RegionFlag flag = this.getFlag(type); + + if (flag instanceof StringRegionFlag) { + return (StringRegionFlag) flag; + } else { + return null; + } + } + + public RegionGroupRegionFlag getRegionGroupFlag(FlagType type) { + + RegionFlag flag = this.getFlag(type); + + if (flag instanceof RegionGroupRegionFlag) { + return (RegionGroupRegionFlag) flag; + } else { + return null; + } + } + + public LocationRegionFlag getLocationFlag(FlagType type) { + + RegionFlag flag = this.getFlag(type); + + if (flag instanceof LocationRegionFlag) { + return (LocationRegionFlag) flag; + } else { + return null; + } + } + + +} diff --git a/src/com/sk89q/worldguard/protection/regions/flags/RegionFlagInfo.java b/src/com/sk89q/worldguard/protection/regions/flags/RegionFlagInfo.java new file mode 100644 index 00000000..476755dc --- /dev/null +++ b/src/com/sk89q/worldguard/protection/regions/flags/RegionFlagInfo.java @@ -0,0 +1,27 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ + +package com.sk89q.worldguard.protection.regions.flags; + +import com.sk89q.worldguard.protection.regions.flags.FlagDatabase.FlagType; +import com.sk89q.worldguard.protection.regions.flags.RegionFlag.FlagDataType; + +/** + * + * @author Michael + */ +public class RegionFlagInfo { + + public String name; + public FlagType type; + public FlagDataType dataType; + + public RegionFlagInfo(String name, FlagType type, FlagDataType dataType) + { + this.name = name; + this.type = type; + this.dataType = dataType; + } +} diff --git a/src/com/sk89q/worldguard/protection/regions/flags/RegionGroupRegionFlag.java b/src/com/sk89q/worldguard/protection/regions/flags/RegionGroupRegionFlag.java new file mode 100644 index 00000000..a48eec70 --- /dev/null +++ b/src/com/sk89q/worldguard/protection/regions/flags/RegionGroupRegionFlag.java @@ -0,0 +1,78 @@ +// $Id$ +/* + * WorldGuard + * Copyright (C) 2010 sk89q + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.sk89q.worldguard.protection.regions.flags; + +/** + * + * @author Michael + */ +public final class RegionGroupRegionFlag extends RegionFlag { + + private RegionGroup value; + + public RegionGroupRegionFlag(RegionFlagContainer container, RegionFlagInfo info, String value) { + super(container, info); + this.setValue(value); + } + + public void setValue(RegionGroup newValue) { + this.value = newValue; + this.container.internalSetValue(info.name, newValue != null ? newValue.toString() : null); + } + + public RegionGroup getValue() { + return this.value; + } + + public RegionGroup getValue(RegionGroup def) { + return this.value != null ? this.value : def; + } + + public boolean setValue(String newValue) { + if (newValue == null) { + this.value = null; + } else { + try { + this.value = RegionGroup.valueOf(newValue); + } catch (Exception e) { + this.value = null; + return false; + } + } + + return true; + } + + @Override + public boolean hasValue() { + return this.value != null; + } + + @Override + public String toString() { + if(this.value != null) + { + return this.value.toString(); + } + else + { + return "-"; + } + } +} diff --git a/src/com/sk89q/worldguard/protection/regions/flags/StateRegionFlag.java b/src/com/sk89q/worldguard/protection/regions/flags/StateRegionFlag.java new file mode 100644 index 00000000..5d91e735 --- /dev/null +++ b/src/com/sk89q/worldguard/protection/regions/flags/StateRegionFlag.java @@ -0,0 +1,79 @@ +// $Id$ +/* + * WorldGuard + * Copyright (C) 2010 sk89q + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.sk89q.worldguard.protection.regions.flags; + +/** + * + * @author Michael + */ +public final class StateRegionFlag extends RegionFlag { + + private State value; + + public StateRegionFlag(RegionFlagContainer container, RegionFlagInfo info, String value) { + super(container, info); + this.setValue(value); + } + + public void setValue(State newValue) { + this.value = newValue; + this.container.internalSetValue(info.name, newValue != null ? newValue.toString() : null); + } + + public State getValue() { + return this.value; + } + + public State getValue(State def) { + return this.value != null ? this.value : def; + } + + public boolean setValue(String newValue) { + + if (newValue == null) { + this.value = null; + } else { + try { + this.value = State.valueOf(newValue); + } catch (Exception e) { + this.value = null; + return false; + } + } + + return true; + } + + @Override + public boolean hasValue() { + return this.value != null; + } + + @Override + public String toString() { + if(this.value != null) + { + return this.value.toString(); + } + else + { + return "-"; + } + } +} diff --git a/src/com/sk89q/worldguard/protection/regions/flags/StringRegionFlag.java b/src/com/sk89q/worldguard/protection/regions/flags/StringRegionFlag.java new file mode 100644 index 00000000..78d589d5 --- /dev/null +++ b/src/com/sk89q/worldguard/protection/regions/flags/StringRegionFlag.java @@ -0,0 +1,66 @@ +// $Id$ +/* + * WorldGuard + * Copyright (C) 2010 sk89q + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.sk89q.worldguard.protection.regions.flags; + +/** + * + * @author Michael + */ +public class StringRegionFlag extends RegionFlag { + + private String value; + + public StringRegionFlag(RegionFlagContainer container, RegionFlagInfo info, String value) { + + super(container, info); + this.value = value; + } + + public boolean setValue(String newValue) { + this.value = newValue; + this.container.internalSetValue(info.name, newValue); + return true; + } + + public String getValue() { + return this.value; + } + + public String getValue(String def) { + return this.value != null ? this.value : def; + } + + + @Override + public boolean hasValue() { + return this.value != null; + } + + @Override + public String toString() { + if(this.value != null) + { + return this.value; + } + else + { + return "-"; + } + } +} diff --git a/tests/com/sk89q/worldguard/protection/ApplicableRegionSetTest.java b/tests/com/sk89q/worldguard/protection/ApplicableRegionSetTest.java index 8d450816..3565a3a2 100644 --- a/tests/com/sk89q/worldguard/protection/ApplicableRegionSetTest.java +++ b/tests/com/sk89q/worldguard/protection/ApplicableRegionSetTest.java @@ -32,8 +32,6 @@ import com.sk89q.worldedit.Vector; import com.sk89q.worldguard.TestPlayer; import com.sk89q.worldguard.domains.DefaultDomain; -import com.sk89q.worldguard.protection.regions.AreaFlags; -import com.sk89q.worldguard.protection.regions.AreaFlags.State; import java.util.ArrayList; import java.util.List; @@ -85,11 +83,7 @@ void setUpCourtyardRegion() { //ProtectedRegion region = new ProtectedCuboidRegion(COURTYARD_ID, new BlockVector(0, 0, 0), new BlockVector(10, 10, 10)); ProtectedRegion region = new ProtectedPolygonalRegion(COURTYARD_ID, points, 0, 10); - - AreaFlags flags = new AreaFlags(); - flags.setFlag(AreaFlags.FLAG_BUILD, State.NONE); - flags.setFlag(AreaFlags.FLAG_FIRE_SPREAD, State.ALLOW); - region.setFlags(flags); + region.setOwners(domain); manager.addRegion(region); @@ -102,9 +96,6 @@ void setUpFountainRegion() throws Exception { ProtectedRegion region = new ProtectedCuboidRegion(FOUNTAIN_ID, new BlockVector(0, 0, 0), new BlockVector(5, 5, 5)); - AreaFlags flags = new AreaFlags(); - flags.setFlag(AreaFlags.FLAG_FIRE_SPREAD, State.DENY); - region.setFlags(flags); region.setMembers(domain); manager.addRegion(region); @@ -115,9 +106,6 @@ void setUpFountainRegion() throws Exception { void setUpNoFireRegion() throws Exception { ProtectedRegion region = new ProtectedCuboidRegion(NO_FIRE_ID, new BlockVector(100, 100, 100), new BlockVector(200, 200, 200)); - AreaFlags flags = new AreaFlags(); - flags.setFlag(AreaFlags.FLAG_FIRE_SPREAD, State.DENY); - region.setFlags(flags); manager.addRegion(region); } @@ -127,17 +115,17 @@ public void testNonBuildFlag() { // Outside appl = manager.getApplicableRegions(outside); - assertTrue(appl.allowsFlag(AreaFlags.FLAG_FIRE_SPREAD)); + //assertTrue(appl.allowsFlag(AreaFlags.FLAG_FIRE_SPREAD)); // Inside courtyard appl = manager.getApplicableRegions(inCourtyard); - assertTrue(appl.allowsFlag(AreaFlags.FLAG_FIRE_SPREAD)); + //assertTrue(appl.allowsFlag(AreaFlags.FLAG_FIRE_SPREAD)); // Inside fountain appl = manager.getApplicableRegions(inFountain); - assertFalse(appl.allowsFlag(AreaFlags.FLAG_FIRE_SPREAD)); + //assertFalse(appl.allowsFlag(AreaFlags.FLAG_FIRE_SPREAD)); // Inside no fire zone appl = manager.getApplicableRegions(inNoFire); - assertFalse(appl.allowsFlag(AreaFlags.FLAG_FIRE_SPREAD)); + //assertFalse(appl.allowsFlag(AreaFlags.FLAG_FIRE_SPREAD)); } @Test diff --git a/tests/com/sk89q/worldguard/protection/CSVDatabaseTest.java b/tests/com/sk89q/worldguard/protection/CSVDatabaseTest.java index 7cb9bd59..542c5a70 100644 --- a/tests/com/sk89q/worldguard/protection/CSVDatabaseTest.java +++ b/tests/com/sk89q/worldguard/protection/CSVDatabaseTest.java @@ -31,8 +31,7 @@ import static org.junit.Assert.*; import com.sk89q.worldedit.BlockVector; import com.sk89q.worldguard.domains.DefaultDomain; -import com.sk89q.worldguard.protection.regions.AreaFlags; -import com.sk89q.worldguard.protection.regions.AreaFlags.State; + public class CSVDatabaseTest { @Before @@ -67,13 +66,14 @@ public void testLoadSave() throws Exception { } private void checkTestRegion1(ProtectedRegion region) { - AreaFlags flags = new AreaFlags(); + /* AreaFlags flags = new AreaFlags(); flags.setFlag(AreaFlags.FLAG_FIRE_SPREAD, State.ALLOW); flags.setFlag(AreaFlags.FLAG_PVP, State.DENY); flags.setFlag(AreaFlags.FLAG_LIGHTER, State.DENY); region.setFlags(flags); assertEquals(region.getFlags(), flags); + */ } private ProtectedRegion getTestRegion1() { @@ -82,12 +82,12 @@ private ProtectedRegion getTestRegion1() { ProtectedRegion region = new ProtectedCuboidRegion("test2", min, max); - AreaFlags flags = new AreaFlags(); + /* AreaFlags flags = new AreaFlags(); flags.setFlag(AreaFlags.FLAG_FIRE_SPREAD, State.ALLOW); flags.setFlag(AreaFlags.FLAG_PVP, State.DENY); flags.setFlag(AreaFlags.FLAG_LIGHTER, State.DENY); region.setFlags(flags); - + */ DefaultDomain domain = new DefaultDomain(); domain.addGroup("members"); domain.addGroup("sturmehs"); @@ -106,12 +106,13 @@ private ProtectedRegion getTestRegion2() { BlockVector max = new BlockVector(10, 11, 12); ProtectedRegion region = new ProtectedCuboidRegion("test2", min, max); - + /* AreaFlags flags = new AreaFlags(); flags.setFlag(AreaFlags.FLAG_FIRE_SPREAD, State.ALLOW); flags.setFlag(AreaFlags.FLAG_PVP, State.ALLOW); flags.setFlag(AreaFlags.FLAG_LIGHTER, State.DENY); region.setFlags(flags); + */ DefaultDomain domain = new DefaultDomain(); domain.addGroup("admins");