mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-04 16:34:44 +01:00
6e71f41536
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 CraftBukkit Changes: 65247583f SPIGOT-7857: Improve ItemMeta block data deserialization 05d80500d SPIGOT-7857: Fix spurious internal NBT tag when deserializing BlockStateMeta cebb58e9a SPIGOT-7804: Fix written book serialization efcdd5d38 SPIGOT-7794: Cancelling InventoryItemMoveEvent destroys items b568ba572 SPIGOT-7789: Fix NPE in CraftMetaFirework applyToItem f057cf449 Remove outdated build delay Spigot Changes: f6a48054 SPIGOT-7835: Fix issue with custom hopper settings bb63b137 Rebuild patches e1142b4d Rebuild patches
41 lines
2.0 KiB
Diff
41 lines
2.0 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Jake Potrebic <jake.m.potrebic@gmail.com>
|
|
Date: Sat, 19 Feb 2022 19:05:59 -0800
|
|
Subject: [PATCH] Fix cancelling ProjectileHitEvent for piercing arrows
|
|
|
|
Piercing arrows search for multiple entities inside a while
|
|
loop that is checking the projectile entity's removed state.
|
|
If the hit event is cancelled on the first entity, the event will
|
|
be called over and over again inside that while loop until the event
|
|
is not cancelled. The solution here, is to make use of an
|
|
already-existing field on AbstractArrow for tracking entities hit by
|
|
piercing arrows to avoid duplicate damage being applied.
|
|
|
|
== AT ==
|
|
protected net.minecraft.world.entity.projectile.Projectile hitCancelled
|
|
|
|
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 723ea3c0a9b69157362f229891567c37b1dd6f3b..a7626757597e5014b0d1190345f930cbaf8fec7e 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java
|
|
@@ -305,6 +305,19 @@ public abstract class AbstractArrow extends Projectile {
|
|
}
|
|
}
|
|
|
|
+ // Paper start - Fix cancelling ProjectileHitEvent for piercing arrows
|
|
+ @Override
|
|
+ public ProjectileDeflection preHitTargetOrDeflectSelf(HitResult hitResult) {
|
|
+ if (hitResult instanceof EntityHitResult entityHitResult && this.hitCancelled && this.getPierceLevel() > 0) {
|
|
+ if (this.piercingIgnoreEntityIds == null) {
|
|
+ this.piercingIgnoreEntityIds = new IntOpenHashSet(5);
|
|
+ }
|
|
+ this.piercingIgnoreEntityIds.add(entityHitResult.getEntity().getId());
|
|
+ }
|
|
+ return super.preHitTargetOrDeflectSelf(hitResult);
|
|
+ }
|
|
+ // Paper end - Fix cancelling ProjectileHitEvent for piercing arrows
|
|
+
|
|
@Override
|
|
protected double getDefaultGravity() {
|
|
return 0.05D;
|