geforkt von Mirrors/Paper
5a5c3a4a24
The issue the patch was initially added for has already been fixed and filling stacktraces can be expensive
66 Zeilen
3.4 KiB
Diff
66 Zeilen
3.4 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Tamion <70228790+notTamion@users.noreply.github.com>
|
|
Date: Sun, 21 Jul 2024 19:11:22 +0200
|
|
Subject: [PATCH] Fix PickupStatus getting reset
|
|
|
|
|
|
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 ddf47dab1ab92c45e3eea09239d418a9798ed59e..9ca29b3d4bf8bca5f51f3644e12fcbec2cb5d35e 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java
|
|
@@ -668,7 +668,14 @@ public abstract class AbstractArrow extends Projectile {
|
|
|
|
@Override
|
|
public void setOwner(@Nullable Entity entity) {
|
|
+ // Paper start - Fix PickupStatus getting reset
|
|
+ this.setOwner(entity, true);
|
|
+ }
|
|
+
|
|
+ public void setOwner(@Nullable Entity entity, boolean resetPickup) {
|
|
+ // Paper end - Fix PickupStatus getting reset
|
|
super.setOwner(entity);
|
|
+ if (!resetPickup) return; // Paper - Fix PickupStatus getting reset
|
|
Entity entity1 = entity;
|
|
byte b0 = 0;
|
|
|
|
diff --git a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java
|
|
index 5f7d152f41eb85f17bcded4bc8099b998e5a338b..a01c0d9ae53d1b748c5da914069bd672cb1215c7 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java
|
|
@@ -237,7 +237,13 @@ public abstract class Projectile extends Entity implements TraceableEntity {
|
|
public boolean deflect(ProjectileDeflection deflection, @Nullable Entity deflector, @Nullable Entity owner, boolean fromAttack) {
|
|
if (!this.level().isClientSide) {
|
|
deflection.deflect(this, deflector, this.random);
|
|
- this.setOwner(owner);
|
|
+ // Paper start - Fix PickupStatus getting reset
|
|
+ if (this instanceof AbstractArrow arrow) {
|
|
+ arrow.setOwner(owner, false);
|
|
+ } else {
|
|
+ this.setOwner(owner);
|
|
+ }
|
|
+ // Paper end - Fix PickupStatus getting reset
|
|
this.onDeflection(deflector, fromAttack);
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractArrow.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractArrow.java
|
|
index faa08ad912fa43e7a6c5a2359e23c04c059c5edf..501e2aa3a10dae94c4a8d9dfcdc902e434fcca62 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractArrow.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractArrow.java
|
|
@@ -170,4 +170,16 @@ public class CraftAbstractArrow extends AbstractProjectile implements AbstractAr
|
|
this.getHandle().setSoundEvent(org.bukkit.craftbukkit.CraftSound.bukkitToMinecraft(sound));
|
|
}
|
|
// Paper end
|
|
+
|
|
+ // Paper start - Fix PickupStatus getting reset - Copy of CraftProjectile#setShooter, calling setOwner(Entity,boolean)
|
|
+ @Override
|
|
+ public void setShooter(org.bukkit.projectiles.ProjectileSource shooter, boolean resetPickupStatus) {
|
|
+ if (shooter instanceof CraftEntity craftEntity) {
|
|
+ this.getHandle().setOwner(craftEntity.getHandle(), resetPickupStatus);
|
|
+ } else {
|
|
+ this.getHandle().setOwner(null, resetPickupStatus);
|
|
+ }
|
|
+ this.getHandle().projectileSource = shooter;
|
|
+ }
|
|
+ // Paper end - Fix PickupStatus getting reset
|
|
}
|