54dd19b818
Upstream has released updates that appears 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: 18cda936 Fix variant of unloadChunkRequest that was incorrectly never deprecated 00763e1b Deprecate some methods 35a83d54 SPIGOT-4572: Make default no permission message clearer 6163343d Fix some misplaced material enum entries 8736469c Fix typo in TechnicalPiston documentation CraftBukkit Changes: 0c715b32 SPIGOT-4579: Shulker boxes not dropping in creative 50fbc3f1 SPIGOT-4576: Fix attributes in itemstack internal data being lost 8059a937 SPIGOT-4577: Fix loss of int/double custom tags when serialized to yaml 07e504c3 Clarify exception thrown when setting drop chance for player inventory 98b862ad Fix duplicate iron golem add 843cee65 Fix a bunch of duplicate EntityCombustEvent calls 43855624 SPIGOT-4571: EntityCombustEvent not firing for phantoms
112 lines
5.9 KiB
Diff
112 lines
5.9 KiB
Diff
From 03fec54dc977d5a0cb70e31330a235e119d12796 Mon Sep 17 00:00:00 2001
|
|
From: Techcable <Techcable@outlook.com>
|
|
Date: Fri, 16 Dec 2016 21:25:39 -0600
|
|
Subject: [PATCH] Add ProjectileCollideEvent
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/EntityArrow.java b/src/main/java/net/minecraft/server/EntityArrow.java
|
|
index feafb82dd3..6aa518f17f 100644
|
|
--- a/src/main/java/net/minecraft/server/EntityArrow.java
|
|
+++ b/src/main/java/net/minecraft/server/EntityArrow.java
|
|
@@ -194,6 +194,16 @@ public abstract class EntityArrow extends Entity implements IProjectile {
|
|
}
|
|
}
|
|
|
|
+ // Paper start - Call ProjectileCollideEvent
|
|
+ // TODO: flag - noclip - call cancelled?
|
|
+ if (movingobjectposition != null && movingobjectposition.entity != null) {
|
|
+ com.destroystokyo.paper.event.entity.ProjectileCollideEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callProjectileCollideEvent(this, movingobjectposition);
|
|
+ if (event.isCancelled()) {
|
|
+ movingobjectposition = null;
|
|
+ }
|
|
+ }
|
|
+ // Paper end
|
|
+
|
|
if (movingobjectposition != null && !flag) {
|
|
this.a(movingobjectposition);
|
|
this.impulse = true;
|
|
diff --git a/src/main/java/net/minecraft/server/EntityFireball.java b/src/main/java/net/minecraft/server/EntityFireball.java
|
|
index 3e3619d79f..58cc4824cf 100644
|
|
--- a/src/main/java/net/minecraft/server/EntityFireball.java
|
|
+++ b/src/main/java/net/minecraft/server/EntityFireball.java
|
|
@@ -68,6 +68,15 @@ public abstract class EntityFireball extends Entity {
|
|
++this.f;
|
|
MovingObjectPosition movingobjectposition = ProjectileHelper.a(this, true, this.f >= 25, this.shooter);
|
|
|
|
+ // Paper start - Call ProjectileCollideEvent
|
|
+ if (movingobjectposition != null && movingobjectposition.entity != null) {
|
|
+ com.destroystokyo.paper.event.entity.ProjectileCollideEvent event = CraftEventFactory.callProjectileCollideEvent(this, movingobjectposition);
|
|
+ if (event.isCancelled()) {
|
|
+ movingobjectposition = null;
|
|
+ }
|
|
+ }
|
|
+ // Paper end
|
|
+
|
|
if (movingobjectposition != null) {
|
|
this.a(movingobjectposition);
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/EntityFishingHook.java b/src/main/java/net/minecraft/server/EntityFishingHook.java
|
|
index 16aa2b5f25..23f7d36b55 100644
|
|
--- a/src/main/java/net/minecraft/server/EntityFishingHook.java
|
|
+++ b/src/main/java/net/minecraft/server/EntityFishingHook.java
|
|
@@ -245,6 +245,16 @@ public class EntityFishingHook extends Entity {
|
|
|
|
vec3d = new Vec3D(this.locX, this.locY, this.locZ);
|
|
vec3d1 = new Vec3D(this.locX + this.motX, this.locY + this.motY, this.locZ + this.motZ);
|
|
+
|
|
+ // Paper start - Call ProjectileCollideEvent
|
|
+ if (movingobjectposition != null && movingobjectposition.entity != null) {
|
|
+ com.destroystokyo.paper.event.entity.ProjectileCollideEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callProjectileCollideEvent(this, movingobjectposition);
|
|
+ if (event.isCancelled()) {
|
|
+ movingobjectposition = null;
|
|
+ }
|
|
+ }
|
|
+ // Paper end
|
|
+
|
|
if (movingobjectposition != null) {
|
|
vec3d1 = new Vec3D(movingobjectposition.pos.x, movingobjectposition.pos.y, movingobjectposition.pos.z);
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/server/EntityProjectile.java b/src/main/java/net/minecraft/server/EntityProjectile.java
|
|
index 751ea456b9..bab5b89fe9 100644
|
|
--- a/src/main/java/net/minecraft/server/EntityProjectile.java
|
|
+++ b/src/main/java/net/minecraft/server/EntityProjectile.java
|
|
@@ -144,6 +144,15 @@ public abstract class EntityProjectile extends Entity implements IProjectile {
|
|
movingobjectposition = new MovingObjectPosition(entity);
|
|
}
|
|
|
|
+ // Paper start - Call ProjectileCollideEvent
|
|
+ if (movingobjectposition != null && movingobjectposition.entity != null) {
|
|
+ com.destroystokyo.paper.event.entity.ProjectileCollideEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callProjectileCollideEvent(this, movingobjectposition);
|
|
+ if (event.isCancelled()) {
|
|
+ movingobjectposition = null;
|
|
+ }
|
|
+ }
|
|
+ // Paper end
|
|
+
|
|
if (movingobjectposition != null) {
|
|
if (movingobjectposition.type == MovingObjectPosition.EnumMovingObjectType.BLOCK && this.world.getType(movingobjectposition.getBlockPosition()).getBlock() == Blocks.NETHER_PORTAL) {
|
|
this.e(movingobjectposition.getBlockPosition());
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
|
index b386395560..866dee45b0 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
|
@@ -974,6 +974,16 @@ public class CraftEventFactory {
|
|
return CraftItemStack.asNMSCopy(bitem);
|
|
}
|
|
|
|
+ // Paper start
|
|
+ public static com.destroystokyo.paper.event.entity.ProjectileCollideEvent callProjectileCollideEvent(Entity entity, MovingObjectPosition position) {
|
|
+ Projectile projectile = (Projectile) entity.getBukkitEntity();
|
|
+ org.bukkit.entity.Entity collided = position.entity.getBukkitEntity();
|
|
+ com.destroystokyo.paper.event.entity.ProjectileCollideEvent event = new com.destroystokyo.paper.event.entity.ProjectileCollideEvent(projectile, collided);
|
|
+ Bukkit.getPluginManager().callEvent(event);
|
|
+ return event;
|
|
+ }
|
|
+ // Paper end
|
|
+
|
|
public static ProjectileLaunchEvent callProjectileLaunchEvent(Entity entity) {
|
|
Projectile bukkitEntity = (Projectile) entity.getBukkitEntity();
|
|
ProjectileLaunchEvent event = new ProjectileLaunchEvent(bukkitEntity);
|
|
--
|
|
2.20.1
|
|
|