diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index db5579ebf..77b242f09 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -27,7 +27,7 @@ autoService = "com.google.auto.service:auto-service:1.1.1" jsr305 = "com.google.code.findbugs:jsr305:3.0.2" jetbrains-annotations = "org.jetbrains:annotations:24.1.0" -paperApi = "io.papermc.paper:paper-api:26.2.build.+" +paperApi = "io.papermc.paper:paper-api:26.3.build.+" paperLib = "io.papermc:paperlib:1.0.8" dummypermscompat = "com.sk89q:dummypermscompat:1.10" 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 7bc7957e8..ae1c4e3aa 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 @@ -48,6 +48,8 @@ import com.sk89q.worldguard.config.WorldConfiguration; import com.sk89q.worldguard.protection.flags.Flags; import io.papermc.lib.PaperLib; +import io.papermc.paper.event.entity.EntityBreakByEntityEvent; +import io.papermc.paper.event.entity.EntityBreakEvent; import io.papermc.paper.event.entity.EntityPushedByEntityAttackEvent; import io.papermc.paper.event.player.PlayerOpenSignEvent; import org.bukkit.Bukkit; @@ -77,6 +79,7 @@ import org.bukkit.entity.FallingBlock; import org.bukkit.entity.Firework; import org.bukkit.entity.FishHook; +import org.bukkit.entity.Hanging; import org.bukkit.entity.Item; import org.bukkit.entity.ItemFrame; import org.bukkit.entity.LivingEntity; @@ -1380,6 +1383,26 @@ public void onSignOpen(PlayerOpenSignEvent event) { public void onEntityKnockbackByEntity(EntityPushedByEntityAttackEvent event) { handleKnockback(event, event.getPushedBy()); } + + @EventHandler(ignoreCancelled = true) + public void onEntityBreak(EntityBreakEvent event) { + if (event.getEntity() instanceof Hanging) { + return; + } + + if (event instanceof EntityBreakByEntityEvent entityEvent) { + Entity remover = entityEvent.getRemover(); + Events.fireToCancel(event, new DestroyEntityEvent(event, create(remover), event.getEntity())); + + if (event.isCancelled() && remover instanceof Player player) { + playDenyEffect(player, event.getEntity().getLocation()); + } + } else if (event.getCause() == EntityBreakEvent.RemoveCause.EXPLOSION) { + DestroyEntityEvent destroyEntityEvent = new DestroyEntityEvent(event, Cause.unknown(), event.getEntity()); + destroyEntityEvent.getRelevantFlags().add(Flags.OTHER_EXPLOSION); + Events.fireToCancel(event, destroyEntityEvent); + } + } } @SuppressWarnings("removal") diff --git a/worldguard-bukkit/src/main/resources/plugin.yml b/worldguard-bukkit/src/main/resources/plugin.yml index f248570a2..9fe4e7d91 100644 --- a/worldguard-bukkit/src/main/resources/plugin.yml +++ b/worldguard-bukkit/src/main/resources/plugin.yml @@ -2,5 +2,5 @@ name: WorldGuard main: com.sk89q.worldguard.bukkit.WorldGuardPlugin version: "${internalVersion}" depend: [WorldEdit] -api-version: "26.2" +api-version: "26.3" folia-supported: true