PaperMC/Spigot-Server-Patches/0651-Make-ProjectileHitEvent-Cancellable.patch
Aikar d219fd642f
[Auto] Updated Upstream (Bukkit/CraftBukkit)
Upstream has released updates that appear to apply and compile correctly.
This update has not been tested by PaperMC and as with ANY update, please do your own testing

Bukkit Changes:
6bff9d09 #508: Add PlayerBucketFishEvent

CraftBukkit Changes:
a8d7c94a5 SPIGOT-6434: Smithing Table and Anvil inventories .getType() returns CRAFTING
c5494d195 #683: Add PlayerBucketFishEvent
2021-04-24 18:47:20 -04:00

58 lines
3.5 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co>
Date: Sat, 16 Jan 2021 14:30:12 -0500
Subject: [PATCH] Make ProjectileHitEvent Cancellable
Allows cancelling things like detonating TNT from Fire Arrows
diff --git a/src/main/java/net/minecraft/world/entity/projectile/EntityFireball.java b/src/main/java/net/minecraft/world/entity/projectile/EntityFireball.java
index ede7b4dbf2dce7bac83c5e17eecfdaf0e8a84fe7..b9680f6f2e30ec9397d6a9c83e79563d9253aff6 100644
--- a/src/main/java/net/minecraft/world/entity/projectile/EntityFireball.java
+++ b/src/main/java/net/minecraft/world/entity/projectile/EntityFireball.java
@@ -87,7 +87,7 @@ public abstract class EntityFireball extends IProjectile {
// CraftBukkit start - Fire ProjectileHitEvent
if (this.dead) {
- CraftEventFactory.callProjectileHitEvent(this, movingobjectposition);
+ if (!CraftEventFactory.callProjectileHitEvent(this, movingobjectposition)) return; // Paper - this is an undesired duplicate event, but make cancellable
}
// CraftBukkit end
}
diff --git a/src/main/java/net/minecraft/world/entity/projectile/IProjectile.java b/src/main/java/net/minecraft/world/entity/projectile/IProjectile.java
index 37b1febb45b900dfe4b225152e66bc4be83df220..9f2e7d345d98f50e6d47cbf4bb35714852fa42da 100644
--- a/src/main/java/net/minecraft/world/entity/projectile/IProjectile.java
+++ b/src/main/java/net/minecraft/world/entity/projectile/IProjectile.java
@@ -130,7 +130,7 @@ public abstract class IProjectile extends Entity {
}
protected void a(MovingObjectPosition movingobjectposition) {
- org.bukkit.craftbukkit.event.CraftEventFactory.callProjectileHitEvent(this, movingobjectposition); // CraftBukkit - Call event
+ if (!org.bukkit.craftbukkit.event.CraftEventFactory.callProjectileHitEvent(this, movingobjectposition)) return; // CraftBukkit - Call event // Paper - make cancellable
MovingObjectPosition.EnumMovingObjectType movingobjectposition_enummovingobjecttype = movingobjectposition.getType();
if (movingobjectposition_enummovingobjecttype == MovingObjectPosition.EnumMovingObjectType.ENTITY) {
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
index 08b3adcd1ab8c8872a40b2faecc95471c3236292..5f40bc588971bae14e500755697db3290aa4af3b 100644
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
@@ -1312,9 +1312,9 @@ public class CraftEventFactory {
return event;
}
- public static void callProjectileHitEvent(Entity entity, MovingObjectPosition position) {
+ public static boolean callProjectileHitEvent(Entity entity, MovingObjectPosition position) { // Paper - make cancellable
if (position.getType() == MovingObjectPosition.EnumMovingObjectType.MISS) {
- return;
+ return false; // Paper - make cancellable
}
Block hitBlock = null;
@@ -1331,7 +1331,7 @@ public class CraftEventFactory {
}
ProjectileHitEvent event = new ProjectileHitEvent((Projectile) entity.getBukkitEntity(), hitEntity, hitBlock, hitFace);
- entity.world.getServer().getPluginManager().callEvent(event);
+ return event.callEvent(); // Paper
}
public static ExpBottleEvent callExpBottleEvent(Entity entity, int exp) {