diff --git a/patches/api/Add-ProjectileCollideEvent.patch b/patches/api/Add-ProjectileCollideEvent.patch index 2ff4ebb31..35a493ac8 100644 --- a/patches/api/Add-ProjectileCollideEvent.patch +++ b/patches/api/Add-ProjectileCollideEvent.patch @@ -3,6 +3,7 @@ From: Techcable Date: Fri, 16 Dec 2016 21:25:39 -0600 Subject: [PATCH] Add ProjectileCollideEvent +Now deprecated and replaced with ProjectileHitEvent diff --git a/src/main/java/com/destroystokyo/paper/event/entity/ProjectileCollideEvent.java b/src/main/java/com/destroystokyo/paper/event/entity/ProjectileCollideEvent.java new file mode 100644 @@ -20,10 +21,12 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 +import org.jetbrains.annotations.NotNull; + +/** -+ * Called when an projectile collides with an entity ++ * Called when a projectile collides with an entity + *

+ * This event is called before {@link org.bukkit.event.entity.EntityDamageByEntityEvent}, and cancelling it will allow the projectile to continue flying ++ * @deprecated Deprecated, use {@link org.bukkit.event.entity.ProjectileHitEvent} and check if there is a hit entity + */ ++@Deprecated +public class ProjectileCollideEvent extends EntityEvent implements Cancellable { + @NotNull private final Entity collidedWith; + diff --git a/patches/server/Add-ProjectileCollideEvent.patch b/patches/server/Add-ProjectileCollideEvent.patch index 535a741ee..9be38b77a 100644 --- a/patches/server/Add-ProjectileCollideEvent.patch +++ b/patches/server/Add-ProjectileCollideEvent.patch @@ -3,89 +3,8 @@ From: Techcable Date: Fri, 16 Dec 2016 21:25:39 -0600 Subject: [PATCH] Add ProjectileCollideEvent +Deprecated now and replaced with ProjectileHitEvent -diff --git a/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java b/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java -index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 ---- a/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java -+++ b/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java -@@ -0,0 +0,0 @@ public abstract class AbstractArrow extends Projectile { - } - } - -+ // Paper start - Call ProjectileCollideEvent -+ // TODO: flag - noclip - call cancelled? -+ if (object instanceof EntityHitResult) { -+ com.destroystokyo.paper.event.entity.ProjectileCollideEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callProjectileCollideEvent(this, (EntityHitResult)object); -+ if (event.isCancelled()) { -+ object = null; -+ movingobjectpositionentity = null; -+ } -+ } -+ // Paper end -+ - if (object != null && !flag) { - this.preOnHit((HitResult) object); // CraftBukkit - projectile hit event - this.hasImpulse = true; -diff --git a/src/main/java/net/minecraft/world/entity/projectile/AbstractHurtingProjectile.java b/src/main/java/net/minecraft/world/entity/projectile/AbstractHurtingProjectile.java -index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 ---- a/src/main/java/net/minecraft/world/entity/projectile/AbstractHurtingProjectile.java -+++ b/src/main/java/net/minecraft/world/entity/projectile/AbstractHurtingProjectile.java -@@ -0,0 +0,0 @@ import net.minecraft.world.entity.Entity; - import net.minecraft.world.entity.EntityType; - import net.minecraft.world.entity.LivingEntity; - import net.minecraft.world.level.Level; -+import net.minecraft.world.phys.EntityHitResult; - import net.minecraft.world.phys.HitResult; - import net.minecraft.world.phys.Vec3; - import org.bukkit.craftbukkit.event.CraftEventFactory; // CraftBukkit -@@ -0,0 +0,0 @@ public abstract class AbstractHurtingProjectile extends Projectile { - - HitResult movingobjectposition = ProjectileUtil.getHitResult(this, this::canHitEntity); - -- if (movingobjectposition.getType() != HitResult.Type.MISS) { -+ // Paper start - Call ProjectileCollideEvent -+ if (movingobjectposition instanceof EntityHitResult) { -+ com.destroystokyo.paper.event.entity.ProjectileCollideEvent event = CraftEventFactory.callProjectileCollideEvent(this, (EntityHitResult)movingobjectposition); -+ if (event.isCancelled()) { -+ movingobjectposition = null; -+ } -+ } -+ // Paper end -+ -+ if (movingobjectposition != null && movingobjectposition.getType() != HitResult.Type.MISS) { // Paper - add null check in case cancelled - this.preOnHit(movingobjectposition); // CraftBukkit - projectile hit event - - // CraftBukkit start - Fire ProjectileHitEvent -diff --git a/src/main/java/net/minecraft/world/entity/projectile/ThrowableProjectile.java b/src/main/java/net/minecraft/world/entity/projectile/ThrowableProjectile.java -index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 ---- a/src/main/java/net/minecraft/world/entity/projectile/ThrowableProjectile.java -+++ b/src/main/java/net/minecraft/world/entity/projectile/ThrowableProjectile.java -@@ -0,0 +0,0 @@ import net.minecraft.world.level.block.entity.BlockEntity; - import net.minecraft.world.level.block.entity.TheEndGatewayBlockEntity; - import net.minecraft.world.level.block.state.BlockState; - import net.minecraft.world.phys.BlockHitResult; -+import net.minecraft.world.phys.EntityHitResult; - import net.minecraft.world.phys.HitResult; - import net.minecraft.world.phys.Vec3; - -@@ -0,0 +0,0 @@ public abstract class ThrowableProjectile extends Projectile { - } - - if (movingobjectposition.getType() != HitResult.Type.MISS && !flag) { -+ // Paper start - Call ProjectileCollideEvent -+ if (movingobjectposition instanceof EntityHitResult) { -+ com.destroystokyo.paper.event.entity.ProjectileCollideEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callProjectileCollideEvent(this, (EntityHitResult)movingobjectposition); -+ if (event.isCancelled()) { -+ movingobjectposition = null; -+ } -+ } -+ if (movingobjectposition != null) { -+ // Paper end - this.preOnHit(movingobjectposition); // CraftBukkit - projectile hit event -+ } // Paper - } - - this.checkInsideBlocks(); diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java @@ -95,6 +14,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 } + // Paper start ++ @Deprecated + public static com.destroystokyo.paper.event.entity.ProjectileCollideEvent callProjectileCollideEvent(Entity entity, EntityHitResult position) { + Projectile projectile = (Projectile) entity.getBukkitEntity(); + org.bukkit.entity.Entity collided = position.getEntity().getBukkitEntity(); @@ -107,3 +27,19 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 public static ProjectileLaunchEvent callProjectileLaunchEvent(Entity entity) { Projectile bukkitEntity = (Projectile) entity.getBukkitEntity(); ProjectileLaunchEvent event = new ProjectileLaunchEvent(bukkitEntity); +@@ -0,0 +0,0 @@ public class CraftEventFactory { + if (position.getType() == HitResult.Type.ENTITY) { + hitEntity = ((EntityHitResult) position).getEntity().getBukkitEntity(); + } ++ // Paper start - legacy event ++ boolean cancelled = false; ++ if (hitEntity != null && position instanceof EntityHitResult entityHitResult) { ++ cancelled = callProjectileCollideEvent(entity, entityHitResult).isCancelled(); ++ } ++ // Paper end + + ProjectileHitEvent event = new ProjectileHitEvent((Projectile) entity.getBukkitEntity(), hitEntity, hitBlock, hitFace); ++ event.setCancelled(cancelled); // Paper - propagate legacy event cancellation to modern event + entity.level.getCraftServer().getPluginManager().callEvent(event); + return event; + }