mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-02 04:56:50 +01:00
d219fd642f
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
58 lines
3.5 KiB
Diff
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) {
|