diff --git a/Bukkit/src/main/java/com/plotsquared/bukkit/listener/ProjectileEventListener.java b/Bukkit/src/main/java/com/plotsquared/bukkit/listener/ProjectileEventListener.java index 47e3b76e7..0f5b551e0 100644 --- a/Bukkit/src/main/java/com/plotsquared/bukkit/listener/ProjectileEventListener.java +++ b/Bukkit/src/main/java/com/plotsquared/bukkit/listener/ProjectileEventListener.java @@ -47,6 +47,7 @@ import org.bukkit.event.entity.LingeringPotionSplashEvent; import org.bukkit.event.entity.PotionSplashEvent; import org.bukkit.event.entity.ProjectileHitEvent; import org.bukkit.event.entity.ProjectileLaunchEvent; +import org.bukkit.event.player.PlayerEggThrowEvent; import org.bukkit.projectiles.BlockProjectileSource; import org.bukkit.projectiles.ProjectileSource; import org.checkerframework.checker.nullness.qual.NonNull; @@ -157,14 +158,26 @@ public class ProjectileEventListener implements Listener { @EventHandler public void onProjectileHit(ProjectileHitEvent event) { - Projectile entity = event.getEntity(); + if (cancelProjectileHit(event.getEntity())) { + event.setCancelled(true); + } + } + + @EventHandler + public void onPlayerEggThrow(PlayerEggThrowEvent event) { + if (cancelProjectileHit(event.getEgg())) { + event.setHatching(false); + } + } + + private boolean cancelProjectileHit(Projectile entity) { Location location = BukkitUtil.adapt(entity.getLocation()); if (!this.plotAreaManager.hasPlotArea(location.getWorldName())) { - return; + return false; } PlotArea area = location.getPlotArea(); if (area == null) { - return; + return false; } Plot plot = area.getPlot(location); ProjectileSource shooter = entity.getShooter(); @@ -172,15 +185,14 @@ public class ProjectileEventListener implements Listener { if (!((Player) shooter).isOnline()) { if (plot != null) { if (plot.isAdded(((Player) shooter).getUniqueId()) || plot.getFlag(ProjectilesFlag.class)) { - return; + return false; } } else if (PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, ProjectilesFlag.class, true)) { - return; + return false; } entity.remove(); - event.setCancelled(true); - return; + return true; } PlotPlayer pp = BukkitUtil.adapt((Player) shooter); @@ -189,38 +201,36 @@ public class ProjectileEventListener implements Listener { Permission.PERMISSION_ADMIN_PROJECTILE_UNOWNED )) { entity.remove(); - event.setCancelled(true); + return true; } - return; + return false; } if (plot.isAdded(pp.getUUID()) || pp.hasPermission(Permission.PERMISSION_ADMIN_PROJECTILE_OTHER) || plot.getFlag( ProjectilesFlag.class) || (entity instanceof FishHook && plot.getFlag( FishingFlag.class))) { - return; + return false; } entity.remove(); - event.setCancelled(true); - return; + return true; } if (!(shooter instanceof Entity) && shooter != null) { if (plot == null) { entity.remove(); - event.setCancelled(true); - return; + return true; } Location sLoc = BukkitUtil.adapt(((BlockProjectileSource) shooter).getBlock().getLocation()); if (!area.contains(sLoc.getX(), sLoc.getZ())) { entity.remove(); - event.setCancelled(true); - return; + return true; } Plot sPlot = area.getOwnedPlotAbs(sLoc); if (sPlot == null || !PlotHandler.sameOwners(plot, sPlot)) { entity.remove(); - event.setCancelled(true); + return true; } } + return false; } }