diff --git a/src/main/java/com/sk89q/worldguard/bukkit/WorldGuardBlockListener.java b/src/main/java/com/sk89q/worldguard/bukkit/WorldGuardBlockListener.java index a5319ee8..6f0dcf66 100644 --- a/src/main/java/com/sk89q/worldguard/bukkit/WorldGuardBlockListener.java +++ b/src/main/java/com/sk89q/worldguard/bukkit/WorldGuardBlockListener.java @@ -66,6 +66,7 @@ public void registerEvents() { pm.registerEvent(Event.Type.BLOCK_BURN, this, Priority.High, plugin); pm.registerEvent(Event.Type.SIGN_CHANGE, this, Priority.High, plugin); pm.registerEvent(Event.Type.REDSTONE_CHANGE, this, Priority.High, plugin); + pm.registerEvent(Event.Type.SNOW_FORM, this, Priority.High, plugin); } protected WorldConfiguration getWorldConfig(World world) { @@ -529,6 +530,16 @@ public void onSignChange(SignChangeEvent event) { } } + @Override + public void onSnowForm(SnowFormEvent event) { + if (event.isCancelled()) { + return; + } + + if (!plugin.getGlobalRegionManager().allows(DefaultFlag.SNOW_FALL, event.getBlock().getLocation())) { + event.setCancelled(true); + } + } /** * Drops a sign item and removes a sign. * diff --git a/src/main/java/com/sk89q/worldguard/bukkit/WorldGuardEntityListener.java b/src/main/java/com/sk89q/worldguard/bukkit/WorldGuardEntityListener.java index 90c226c1..473bb734 100644 --- a/src/main/java/com/sk89q/worldguard/bukkit/WorldGuardEntityListener.java +++ b/src/main/java/com/sk89q/worldguard/bukkit/WorldGuardEntityListener.java @@ -27,8 +27,11 @@ import org.bukkit.Material; import org.bukkit.World; import org.bukkit.entity.*; +import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.entity.*; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +import org.bukkit.event.painting.*; + import com.sk89q.worldedit.Vector; import com.sk89q.worldedit.blocks.BlockType; import static com.sk89q.worldguard.bukkit.BukkitUtil.*; @@ -62,6 +65,8 @@ public void registerEvents() { pm.registerEvent(Event.Type.ENTITY_INTERACT, this, Priority.High, plugin); pm.registerEvent(Event.Type.CREEPER_POWER, this, Priority.High, plugin); pm.registerEvent(Event.Type.PIG_ZAP, this, Priority.High, plugin); + pm.registerEvent(Event.Type.PAINTING_BREAK, this, Priority.High, plugin); + pm.registerEvent(Event.Type.PAINTING_PLACE, this, Priority.High, plugin); } @Override @@ -451,6 +456,60 @@ public void onCreeperPower(CreeperPowerEvent event) { } } + /** + * Painting related events + */ + /** + * Called when a painting is removed + * + * @param event Relevant event details + */ + @Override + public void onPaintingBreak(PaintingBreakEvent breakEvent) { + if (breakEvent.isCancelled()) { + return; + } + + if (!(breakEvent instanceof PaintingBreakByEntityEvent)) { + return; + } + PaintingBreakByEntityEvent event = (PaintingBreakByEntityEvent) breakEvent; + if (!(event.getRemover() instanceof Player)) { + return; + } + Painting painting= event.getPainting(); + Player player = (Player) event.getRemover(); + World world = painting.getWorld(); + + ConfigurationManager cfg = plugin.getGlobalConfiguration(); + WorldConfiguration wcfg = cfg.get(world); + + if (wcfg.useRegions) { + if (!plugin.getGlobalRegionManager().canBuild(player, painting.getLocation())) { + player.sendMessage(ChatColor.DARK_RED + "You don't have permission for this area."); + event.setCancelled(true); + return; + } + } + } + + @Override + public void onPaintingPlace(PaintingPlaceEvent event) { + Block placedOn = event.getBlock(); + Player player = event.getPlayer(); + World world = placedOn.getWorld(); + + ConfigurationManager cfg = plugin.getGlobalConfiguration(); + WorldConfiguration wcfg = cfg.get(world); + + if (wcfg.useRegions) { + if (!plugin.getGlobalRegionManager().canBuild(player, placedOn.getLocation())) { + player.sendMessage(ChatColor.DARK_RED + "You don't have permission for this area."); + event.setCancelled(true); + return; + } + } + } /** * Find a position for the player to stand that is not inside a block. * Blocks above the player will be iteratively tested until there is diff --git a/src/main/java/com/sk89q/worldguard/protection/flags/DefaultFlag.java b/src/main/java/com/sk89q/worldguard/protection/flags/DefaultFlag.java index d10e0e1e..84804ab0 100644 --- a/src/main/java/com/sk89q/worldguard/protection/flags/DefaultFlag.java +++ b/src/main/java/com/sk89q/worldguard/protection/flags/DefaultFlag.java @@ -42,6 +42,7 @@ public final class DefaultFlag { public static final StateFlag LAVA_FLOW = new StateFlag("lava-flow", true); public static final StateFlag USE = new StateFlag("use", false); public static final StateFlag PLACE_VEHICLE = new StateFlag("vehicle-place", false); + public static final StateFlag SNOW_FALL = new StateFlag("snow-fall", true); public static final StringFlag GREET_MESSAGE = new StringFlag("greeting"); public static final StringFlag FAREWELL_MESSAGE = new StringFlag("farewell"); public static final BooleanFlag NOTIFY_GREET = new BooleanFlag("notify-greet"); @@ -55,13 +56,13 @@ public final class DefaultFlag { public static final RegionGroupFlag SPAWN_PERM = new RegionGroupFlag("spawn-group"); public static final BooleanFlag BUYABLE = new BooleanFlag("buyable"); public static final DoubleFlag PRICE = new DoubleFlag("price"); - + public static final Flag[] flagsList = new Flag[] { PASSTHROUGH, BUILD, PVP, MOB_DAMAGE, MOB_SPAWNING, CREEPER_EXPLOSION, SLEEP, TNT, LIGHTER, FIRE_SPREAD, LAVA_FIRE, CHEST_ACCESS, WATER_FLOW, LAVA_FLOW, USE, PLACE_VEHICLE, GREET_MESSAGE, FAREWELL_MESSAGE, NOTIFY_GREET, NOTIFY_FAREWELL, DENY_SPAWN, HEAL_DELAY, HEAL_AMOUNT, TELE_LOC, - TELE_PERM, SPAWN_LOC, SPAWN_PERM, BUYABLE, PRICE + TELE_PERM, SPAWN_LOC, SPAWN_PERM, BUYABLE, PRICE, SNOW_FALL }; private DefaultFlag() {