From afb619d2ace96513069f5c6b14fca83d1163ca4b Mon Sep 17 00:00:00 2001 From: Joo200 Date: Mon, 22 Jul 2024 21:40:57 +0200 Subject: [PATCH 1/3] Fix breeze damage flags --- .../bukkit/BukkitWorldConfiguration.java | 1 + .../event/block/AbstractBlockEvent.java | 2 +- .../listener/EventAbstractionListener.java | 29 +++++++---- .../listener/WorldGuardEntityListener.java | 52 +++++++------------ .../worldguard/bukkit/util/Entities.java | 22 ++++++++ .../worldguard/bukkit/util/Materials.java | 1 + .../worldguard/config/WorldConfiguration.java | 1 + 7 files changed, 64 insertions(+), 44 deletions(-) diff --git a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/BukkitWorldConfiguration.java b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/BukkitWorldConfiguration.java index ba58b48ed..fe02c2ebb 100644 --- a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/BukkitWorldConfiguration.java +++ b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/BukkitWorldConfiguration.java @@ -215,6 +215,7 @@ public void loadConfiguration() { blockEnderDragonPortalCreation = getBoolean("mobs.block-enderdragon-portal-creation", false); blockFireballExplosions = getBoolean("mobs.block-fireball-explosions", false); blockFireballBlockDamage = getBoolean("mobs.block-fireball-block-damage", false); + blockWindChargeExplosions = getBoolean("mobs.block-windcharge-explosions", false); antiWolfDumbness = getBoolean("mobs.anti-wolf-dumbness", false); allowTamedSpawns = getBoolean("mobs.allow-tamed-spawns", true); disableEndermanGriefing = getBoolean("mobs.disable-enderman-griefing", false); diff --git a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/event/block/AbstractBlockEvent.java b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/event/block/AbstractBlockEvent.java index 8e1192523..02fac016e 100644 --- a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/event/block/AbstractBlockEvent.java +++ b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/event/block/AbstractBlockEvent.java @@ -45,7 +45,7 @@ * This event is an internal event. We do not recommend handling or throwing * this event or its subclasses as the interface is highly subject to change. */ -abstract class AbstractBlockEvent extends DelegateEvent implements BulkEvent { +public abstract class AbstractBlockEvent extends DelegateEvent implements BulkEvent { private final World world; private List blocks; diff --git a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/EventAbstractionListener.java b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/EventAbstractionListener.java index 9aafddb98..1a523158b 100644 --- a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/EventAbstractionListener.java +++ b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/EventAbstractionListener.java @@ -25,6 +25,7 @@ import com.sk89q.worldguard.bukkit.WorldGuardPlugin; import com.sk89q.worldguard.bukkit.cause.Cause; import com.sk89q.worldguard.bukkit.event.DelegateEvent; +import com.sk89q.worldguard.bukkit.event.block.AbstractBlockEvent; import com.sk89q.worldguard.bukkit.event.block.BreakBlockEvent; import com.sk89q.worldguard.bukkit.event.block.PlaceBlockEvent; import com.sk89q.worldguard.bukkit.event.block.UseBlockEvent; @@ -46,10 +47,12 @@ import com.sk89q.worldguard.bukkit.util.Materials; import com.sk89q.worldguard.config.WorldConfiguration; import com.sk89q.worldguard.protection.flags.Flags; +import com.sk89q.worldguard.protection.flags.StateFlag; import io.papermc.lib.PaperLib; import io.papermc.paper.event.player.PlayerOpenSignEvent; import org.bukkit.Bukkit; import org.bukkit.Effect; +import org.bukkit.ExplosionResult; import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.Material; @@ -65,7 +68,6 @@ import org.bukkit.block.data.BlockData; import org.bukkit.block.data.Waterlogged; import org.bukkit.block.data.type.Dispenser; -import org.bukkit.entity.AbstractWindCharge; import org.bukkit.entity.AreaEffectCloud; import org.bukkit.entity.Creeper; import org.bukkit.entity.Entity; @@ -358,14 +360,21 @@ public void onEntityChangeBlock(EntityChangeBlockEvent event) { @EventHandler(ignoreCancelled = true) public void onEntityExplode(EntityExplodeEvent event) { Entity entity = event.getEntity(); - if (entity instanceof AbstractWindCharge) { - UseBlockEvent useEvent = new UseBlockEvent(event, create(entity), event.getLocation().getWorld(), event.blockList(), Material.AIR); - useEvent.getRelevantFlags().add(Flags.WIND_CHARGE_BURST); - useEvent.setSilent(true); - Events.fireBulkEventToCancel(event, useEvent); + AbstractBlockEvent wgEvent; + + if (event.getExplosionResult() == ExplosionResult.TRIGGER_BLOCK) { + wgEvent = new UseBlockEvent(event, create(entity), event.getLocation().getWorld(), event.blockList(), Material.AIR); + } else if (event.getExplosionResult() == ExplosionResult.DESTROY || event.getExplosionResult() == ExplosionResult.DESTROY_WITH_DECAY) { + wgEvent = new BreakBlockEvent(event, create(entity), event.getLocation().getWorld(), event.blockList(), Material.AIR); + } else { return; } - Events.fireBulkEventToCancel(event, new BreakBlockEvent(event, create(entity), event.getLocation().getWorld(), event.blockList(), Material.AIR)); + + wgEvent.getRelevantFlags().add(Entities.getExplosionFlag(event.getEntity())); + + wgEvent.setSilent(true); + Events.fireBulkEventToCancel(event, wgEvent); + if (entity instanceof Creeper) { Cause.untrackParentCause(entity); } @@ -584,7 +593,7 @@ public void onEntityInteract(EntityInteractEvent event) { @EventHandler(ignoreCancelled = true) public void onBlockFertilize(BlockFertilizeEvent event) { - if (event.getBlocks().isEmpty()) return; + if (event.getBlocks().isEmpty()) return; Cause cause = create(event.getPlayer(), event.getBlock()); Events.fireToCancel(event, new PlaceBlockEvent(event, cause, event.getBlock().getWorld(), event.getBlocks())); } @@ -750,7 +759,7 @@ public void onHangingBreak(HangingBreakEvent event) { if (event.isCancelled() && remover instanceof Player) { playDenyEffect((Player) remover, event.getEntity().getLocation()); } - } else if (event.getCause() == HangingBreakEvent.RemoveCause.EXPLOSION){ + } else if (event.getCause() == HangingBreakEvent.RemoveCause.EXPLOSION) { DestroyEntityEvent destroyEntityEvent = new DestroyEntityEvent(event, Cause.unknown(), event.getEntity()); destroyEntityEvent.getRelevantFlags().add(Flags.OTHER_EXPLOSION); if (event.getEntity() instanceof ItemFrame) { @@ -1112,7 +1121,7 @@ public void onLingeringApply(AreaEffectCloudApplyEvent event) { } @EventHandler(ignoreCancelled = true) - public void onPlayerInteractAtEntity(PlayerInteractAtEntityEvent event){ + public void onPlayerInteractAtEntity(PlayerInteractAtEntityEvent event) { onPlayerInteractEntity(event); } diff --git a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardEntityListener.java b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardEntityListener.java index 7ea3bf477..111cffdd5 100644 --- a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardEntityListener.java +++ b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardEntityListener.java @@ -44,6 +44,7 @@ import org.bukkit.World; import org.bukkit.block.Block; import org.bukkit.block.BlockState; +import org.bukkit.entity.AbstractWindCharge; import org.bukkit.entity.ArmorStand; import org.bukkit.entity.Creeper; import org.bukkit.entity.EnderCrystal; @@ -311,13 +312,17 @@ private void onEntityDamageByProjectile(EntityDamageByEntityEvent event) { return; } } - if (event.getDamager() instanceof Fireball) { - Fireball fireball = (Fireball) event.getDamager(); + if (event.getDamager() instanceof Fireball fireball) { if (fireball instanceof WitherSkull) { if (wcfg.blockWitherSkullExplosions) { event.setCancelled(true); return; } + } else if (fireball instanceof AbstractWindCharge) { + if (wcfg.blockWindChargeExplosions) { + event.setCancelled(true); + return; + } } else { if (wcfg.blockFireballExplosions) { event.setCancelled(true); @@ -325,8 +330,9 @@ private void onEntityDamageByProjectile(EntityDamageByEntityEvent event) { } } if (wcfg.useRegions) { + WorldGuardPlugin.inst().getLogger().info("Getting damager type " + event.getDamager().getType()); RegionQuery query = WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery(); - if (!query.testState(localPlayer.getLocation(), localPlayer, Flags.GHAST_FIREBALL) && wcfg.explosionFlagCancellation) { + if (!query.testState(localPlayer.getLocation(), localPlayer, Entities.getExplosionFlag(event.getDamager())) && wcfg.explosionFlagCancellation) { event.setCancelled(true); return; } @@ -483,6 +489,11 @@ public void onEntityExplode(EntityExplodeEvent event) { event.blockList().clear(); return; } + } else if (ent instanceof AbstractWindCharge) { + if (wcfg.blockWindChargeExplosions) { + event.setCancelled(true); + return; + } } else { if (wcfg.blockFireballExplosions) { event.setCancelled(true); @@ -493,16 +504,6 @@ public void onEntityExplode(EntityExplodeEvent event) { return; } } - // allow wither skull blocking since there is no dedicated flag atm - if (wcfg.useRegions) { - for (Block block : event.blockList()) { - if (!WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery().getApplicableRegions(BukkitAdapter.adapt(block.getLocation())).testState(null, Flags.GHAST_FIREBALL)) { - event.blockList().clear(); - if (wcfg.explosionFlagCancellation) event.setCancelled(true); - return; - } - } - } } else if (ent instanceof Wither) { if (wcfg.blockWitherExplosions) { event.setCancelled(true); @@ -512,34 +513,14 @@ public void onEntityExplode(EntityExplodeEvent event) { event.blockList().clear(); return; } - if (wcfg.useRegions) { - for (Block block : event.blockList()) { - if (!StateFlag.test(WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery().queryState(BukkitAdapter.adapt(block.getLocation()), - (RegionAssociable) null, Flags.WITHER_DAMAGE))) { - event.blockList().clear(); - event.setCancelled(true); - return; - } - } - } } else { // unhandled entity if (wcfg.blockOtherExplosions) { event.setCancelled(true); return; } - if (wcfg.useRegions) { - for (Block block : event.blockList()) { - if (!WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery().getApplicableRegions(BukkitAdapter.adapt(block.getLocation())).testState(null, Flags.OTHER_EXPLOSION)) { - event.blockList().clear(); - if (wcfg.explosionFlagCancellation) event.setCancelled(true); - return; - } - } - } } - if (wcfg.signChestProtection) { for (Block block : event.blockList()) { if (wcfg.isChestProtected(BukkitAdapter.adapt(block.getLocation()))) { @@ -592,6 +573,11 @@ public void onExplosionPrime(ExplosionPrimeEvent event) { event.setCancelled(true); return; } + } else if (event instanceof AbstractWindCharge) { + if (wcfg.blockWindChargeExplosions) { + event.setCancelled(true); + return; + } } } diff --git a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/util/Entities.java b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/util/Entities.java index 8a89e7a77..205d0b649 100644 --- a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/util/Entities.java +++ b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/util/Entities.java @@ -19,6 +19,9 @@ package com.sk89q.worldguard.bukkit.util; +import com.sk89q.worldguard.protection.flags.Flags; +import com.sk89q.worldguard.protection.flags.StateFlag; +import org.bukkit.entity.AbstractWindCharge; import org.bukkit.entity.Allay; import org.bukkit.entity.Ambient; import org.bukkit.entity.ArmorStand; @@ -28,6 +31,8 @@ import org.bukkit.entity.EnderDragon; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; +import org.bukkit.entity.Fireball; +import org.bukkit.entity.Firework; import org.bukkit.entity.Flying; import org.bukkit.entity.Hanging; import org.bukkit.entity.LivingEntity; @@ -43,11 +48,13 @@ import org.bukkit.entity.TNTPrimed; import org.bukkit.entity.Tameable; import org.bukkit.entity.Vehicle; +import org.bukkit.entity.Wither; import org.bukkit.entity.minecart.ExplosiveMinecart; import org.bukkit.event.entity.CreatureSpawnEvent; import org.bukkit.inventory.InventoryHolder; import org.bukkit.projectiles.ProjectileSource; +import javax.annotation.Nonnull; import javax.annotation.Nullable; public final class Entities { @@ -245,4 +252,19 @@ public static boolean isPluginSpawning(CreatureSpawnEvent.SpawnReason spawnReaso default -> false; }; } + + /** + * Get the explosion flag relevant for an entity type. + * @param entity the entity + * @return the relevant StateFlag or OTHER_EXPLOSION if none is matching + */ + public static @Nonnull StateFlag getExplosionFlag(Entity entity) { + return switch (entity) { + case AbstractWindCharge abstractWindCharge -> Flags.WIND_CHARGE_BURST; + case Firework firework -> Flags.FIREWORK_DAMAGE; + case Fireball fireball -> Flags.GHAST_FIREBALL; + case Wither wither -> Flags.WITHER_DAMAGE; + case null, default -> Flags.OTHER_EXPLOSION; + }; + } } diff --git a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/util/Materials.java b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/util/Materials.java index ea0e2f047..28032158b 100644 --- a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/util/Materials.java +++ b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/util/Materials.java @@ -22,6 +22,7 @@ import com.google.common.collect.BiMap; import com.google.common.collect.HashBiMap; import com.sk89q.worldguard.protection.flags.Flags; +import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.Tag; import org.bukkit.entity.EntityType; diff --git a/worldguard-core/src/main/java/com/sk89q/worldguard/config/WorldConfiguration.java b/worldguard-core/src/main/java/com/sk89q/worldguard/config/WorldConfiguration.java index df3d5fc18..0f0c24604 100644 --- a/worldguard-core/src/main/java/com/sk89q/worldguard/config/WorldConfiguration.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/config/WorldConfiguration.java @@ -101,6 +101,7 @@ public abstract class WorldConfiguration { public boolean blockEnderDragonPortalCreation; public boolean blockFireballExplosions; public boolean blockFireballBlockDamage; + public boolean blockWindChargeExplosions; public boolean blockOtherExplosions; public boolean blockEntityPaintingDestroy; public boolean blockEntityItemFrameDestroy; From 9dd7d7c03ef7a66128f22639e37a83f7569a5f49 Mon Sep 17 00:00:00 2001 From: Joo200 Date: Sat, 27 Jul 2024 16:58:19 +0200 Subject: [PATCH 2/3] Fix wind-charge-burst flag for player knockback --- .../bukkit/listener/EventAbstractionListener.java | 13 +++++++++++++ .../bukkit/listener/WorldGuardEntityListener.java | 1 - 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/EventAbstractionListener.java b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/EventAbstractionListener.java index 1a523158b..58e971da4 100644 --- a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/EventAbstractionListener.java +++ b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/EventAbstractionListener.java @@ -68,6 +68,7 @@ import org.bukkit.block.data.BlockData; import org.bukkit.block.data.Waterlogged; import org.bukkit.block.data.type.Dispenser; +import org.bukkit.entity.AbstractWindCharge; import org.bukkit.entity.AreaEffectCloud; import org.bukkit.entity.Creeper; import org.bukkit.entity.Entity; @@ -117,6 +118,7 @@ import org.bukkit.event.entity.EntityDeathEvent; import org.bukkit.event.entity.EntityExplodeEvent; import org.bukkit.event.entity.EntityInteractEvent; +import org.bukkit.event.entity.EntityKnockbackByEntityEvent; import org.bukkit.event.entity.EntityPickupItemEvent; import org.bukkit.event.entity.EntityTameEvent; import org.bukkit.event.entity.EntityUnleashEvent; @@ -357,6 +359,17 @@ public void onEntityChangeBlock(EntityChangeBlockEvent event) { } + @EventHandler(ignoreCancelled = true) + public void onEntityKnockbackByEntity(EntityKnockbackByEntityEvent event) { + Entity damager = event.getSourceEntity(); + + final DamageEntityEvent eventToFire = new DamageEntityEvent(event, create(damager), event.getEntity()); + if (damager instanceof AbstractWindCharge) { + eventToFire.getRelevantFlags().add(Flags.WIND_CHARGE_BURST); + } + Events.fireToCancel(event, eventToFire); + } + @EventHandler(ignoreCancelled = true) public void onEntityExplode(EntityExplodeEvent event) { Entity entity = event.getEntity(); diff --git a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardEntityListener.java b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardEntityListener.java index 111cffdd5..8ae09c3c5 100644 --- a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardEntityListener.java +++ b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardEntityListener.java @@ -330,7 +330,6 @@ private void onEntityDamageByProjectile(EntityDamageByEntityEvent event) { } } if (wcfg.useRegions) { - WorldGuardPlugin.inst().getLogger().info("Getting damager type " + event.getDamager().getType()); RegionQuery query = WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery(); if (!query.testState(localPlayer.getLocation(), localPlayer, Entities.getExplosionFlag(event.getDamager())) && wcfg.explosionFlagCancellation) { event.setCancelled(true); From 679b56948f41869bd545564a8c57562f157a6b66 Mon Sep 17 00:00:00 2001 From: wizjany Date: Sun, 8 Sep 2024 16:46:50 -0400 Subject: [PATCH 3/3] Split wind charge into breeze/player flags. Player flag is build-checked (default false) and breeze flag is not (default true). Having multiple flags is ugly but if we need every bit of behavior to be manipulable this is the only way. --- .../bukkit/listener/EventAbstractionListener.java | 14 ++++++++------ .../com/sk89q/worldguard/bukkit/util/Entities.java | 6 ++++-- .../sk89q/worldguard/bukkit/util/Materials.java | 1 - .../sk89q/worldguard/protection/flags/Flags.java | 3 ++- 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/EventAbstractionListener.java b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/EventAbstractionListener.java index 58e971da4..987e84238 100644 --- a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/EventAbstractionListener.java +++ b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/EventAbstractionListener.java @@ -47,7 +47,6 @@ import com.sk89q.worldguard.bukkit.util.Materials; import com.sk89q.worldguard.config.WorldConfiguration; import com.sk89q.worldguard.protection.flags.Flags; -import com.sk89q.worldguard.protection.flags.StateFlag; import io.papermc.lib.PaperLib; import io.papermc.paper.event.player.PlayerOpenSignEvent; import org.bukkit.Bukkit; @@ -68,8 +67,8 @@ import org.bukkit.block.data.BlockData; import org.bukkit.block.data.Waterlogged; import org.bukkit.block.data.type.Dispenser; -import org.bukkit.entity.AbstractWindCharge; import org.bukkit.entity.AreaEffectCloud; +import org.bukkit.entity.BreezeWindCharge; import org.bukkit.entity.Creeper; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; @@ -83,6 +82,7 @@ import org.bukkit.entity.Player; import org.bukkit.entity.Tameable; import org.bukkit.entity.ThrownPotion; +import org.bukkit.entity.WindCharge; import org.bukkit.entity.minecart.HopperMinecart; import org.bukkit.event.Cancellable; import org.bukkit.event.Event; @@ -328,10 +328,10 @@ public void onEntityChangeBlock(EntityChangeBlockEvent event) { // Fire two events: one as BREAK and one as PLACE if (toType != Material.AIR && fromType != Material.AIR) { - BreakBlockEvent breakDelagate = new BreakBlockEvent(event, cause, block); - setDelegateEventMaterialOptions(breakDelagate, fromType, toType); + BreakBlockEvent breakDelegate = new BreakBlockEvent(event, cause, block); + setDelegateEventMaterialOptions(breakDelegate, fromType, toType); boolean denied; - if (!(denied = Events.fireToCancel(event, breakDelagate))) { + if (!(denied = Events.fireToCancel(event, breakDelegate))) { PlaceBlockEvent placeDelegate = new PlaceBlockEvent(event, cause, block.getLocation(), toType); setDelegateEventMaterialOptions(placeDelegate, fromType, toType); denied = Events.fireToCancel(event, placeDelegate); @@ -364,7 +364,9 @@ public void onEntityKnockbackByEntity(EntityKnockbackByEntityEvent event) { Entity damager = event.getSourceEntity(); final DamageEntityEvent eventToFire = new DamageEntityEvent(event, create(damager), event.getEntity()); - if (damager instanceof AbstractWindCharge) { + if (damager instanceof BreezeWindCharge) { + eventToFire.getRelevantFlags().add(Flags.BREEZE_WIND_CHARGE); + } else if (damager instanceof WindCharge) { eventToFire.getRelevantFlags().add(Flags.WIND_CHARGE_BURST); } Events.fireToCancel(event, eventToFire); diff --git a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/util/Entities.java b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/util/Entities.java index 205d0b649..c66cefe5d 100644 --- a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/util/Entities.java +++ b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/util/Entities.java @@ -21,11 +21,11 @@ import com.sk89q.worldguard.protection.flags.Flags; import com.sk89q.worldguard.protection.flags.StateFlag; -import org.bukkit.entity.AbstractWindCharge; import org.bukkit.entity.Allay; import org.bukkit.entity.Ambient; import org.bukkit.entity.ArmorStand; import org.bukkit.entity.Arrow; +import org.bukkit.entity.BreezeWindCharge; import org.bukkit.entity.Creature; import org.bukkit.entity.EnderCrystal; import org.bukkit.entity.EnderDragon; @@ -48,6 +48,7 @@ import org.bukkit.entity.TNTPrimed; import org.bukkit.entity.Tameable; import org.bukkit.entity.Vehicle; +import org.bukkit.entity.WindCharge; import org.bukkit.entity.Wither; import org.bukkit.entity.minecart.ExplosiveMinecart; import org.bukkit.event.entity.CreatureSpawnEvent; @@ -260,7 +261,8 @@ public static boolean isPluginSpawning(CreatureSpawnEvent.SpawnReason spawnReaso */ public static @Nonnull StateFlag getExplosionFlag(Entity entity) { return switch (entity) { - case AbstractWindCharge abstractWindCharge -> Flags.WIND_CHARGE_BURST; + case BreezeWindCharge breezeWindCharge -> Flags.BREEZE_WIND_CHARGE; + case WindCharge windCharge -> Flags.WIND_CHARGE_BURST; case Firework firework -> Flags.FIREWORK_DAMAGE; case Fireball fireball -> Flags.GHAST_FIREBALL; case Wither wither -> Flags.WITHER_DAMAGE; diff --git a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/util/Materials.java b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/util/Materials.java index 28032158b..ea0e2f047 100644 --- a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/util/Materials.java +++ b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/util/Materials.java @@ -22,7 +22,6 @@ import com.google.common.collect.BiMap; import com.google.common.collect.HashBiMap; import com.sk89q.worldguard.protection.flags.Flags; -import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.Tag; import org.bukkit.entity.EntityType; diff --git a/worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/Flags.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/Flags.java index 5702cfe15..6b7c20630 100644 --- a/worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/Flags.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/Flags.java @@ -74,6 +74,7 @@ public final class Flags { public static final StateFlag FIREWORK_DAMAGE = register(new StateFlag("firework-damage", false)); public static final StateFlag USE_ANVIL = register(new StateFlag("use-anvil", false)); public static final StateFlag USE_DRIPLEAF = register(new StateFlag("use-dripleaf", false)); + public static final StateFlag WIND_CHARGE_BURST = register(new StateFlag("wind-charge-burst", false)); // These flags are similar to the ones above (used in tandem with BUILD), // but their defaults are set to TRUE because it is more user friendly. @@ -93,7 +94,7 @@ public final class Flags { public static final StateFlag ENDERDRAGON_BLOCK_DAMAGE = register(new StateFlag("enderdragon-block-damage", true)); public static final StateFlag GHAST_FIREBALL = register(new StateFlag("ghast-fireball", true)); public static final StateFlag OTHER_EXPLOSION = register(new StateFlag("other-explosion", true)); - public static final StateFlag WIND_CHARGE_BURST = register(new StateFlag("wind-charge-burst", true)); + public static final StateFlag BREEZE_WIND_CHARGE = register(new StateFlag("breeze-charge-explosion", true)); public static final StateFlag WITHER_DAMAGE = register(new StateFlag("wither-damage", true)); public static final StateFlag ENDER_BUILD = register(new StateFlag("enderman-grief", true)); public static final StateFlag SNOWMAN_TRAILS = register(new StateFlag("snowman-trails", true));