mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-27 15:00:13 +01:00
Fix PickupStatus getting reset
This commit is contained in:
parent
15c4f72cf0
commit
92fa922afd
3 changed files with 46 additions and 9 deletions
|
@ -115,13 +115,12 @@
|
|||
|
||||
this.hasImpulse = true;
|
||||
if (this.getPierceLevel() > 0 && projectiledeflection == ProjectileDeflection.NONE) {
|
||||
@@ -317,8 +342,21 @@
|
||||
|
||||
@@ -318,7 +343,20 @@
|
||||
this.level().addParticle(ParticleTypes.BUBBLE, pos.x - vec3d1.x * 0.25D, pos.y - vec3d1.y * 0.25D, pos.z - vec3d1.z * 0.25D, vec3d1.x, vec3d1.y, vec3d1.z);
|
||||
}
|
||||
+
|
||||
+ }
|
||||
|
||||
+ }
|
||||
+
|
||||
+ // Paper start - Fix cancelling ProjectileHitEvent for piercing arrows
|
||||
+ @Override
|
||||
+ public ProjectileDeflection preHitTargetOrDeflectSelf(HitResult hitResult) {
|
||||
|
@ -234,7 +233,18 @@
|
|||
} else {
|
||||
this.firedFromWeapon = null;
|
||||
}
|
||||
@@ -688,34 +733,31 @@
|
||||
@@ -684,38 +729,42 @@
|
||||
|
||||
@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;
|
||||
|
||||
|
@ -281,7 +291,7 @@
|
|||
}
|
||||
|
||||
this.pickup = entityarrow_pickupstatus;
|
||||
@@ -724,9 +766,24 @@
|
||||
@@ -724,9 +773,24 @@
|
||||
@Override
|
||||
public void playerTouch(Player player) {
|
||||
if (!this.level().isClientSide && (this.isInGround() || this.isNoPhysics()) && this.shakeTime <= 0) {
|
||||
|
|
|
@ -164,7 +164,22 @@
|
|||
protected ProjectileDeflection hitTargetOrDeflectSelf(HitResult hitResult) {
|
||||
if (hitResult.getType() == HitResult.Type.ENTITY) {
|
||||
EntityHitResult movingobjectpositionentity = (EntityHitResult) hitResult;
|
||||
@@ -309,6 +393,11 @@
|
||||
@@ -269,7 +353,13 @@
|
||||
public boolean deflect(ProjectileDeflection deflection, @Nullable Entity deflector, @Nullable Entity owner, boolean fromAttack) {
|
||||
deflection.deflect(this, deflector, this.random);
|
||||
if (!this.level().isClientSide) {
|
||||
- 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);
|
||||
}
|
||||
|
||||
@@ -309,6 +399,11 @@
|
||||
protected void onHitEntity(EntityHitResult entityHitResult) {}
|
||||
|
||||
protected void onHitBlock(BlockHitResult blockHitResult) {
|
||||
|
@ -176,7 +191,7 @@
|
|||
BlockState iblockdata = this.level().getBlockState(blockHitResult.getBlockPos());
|
||||
|
||||
iblockdata.onProjectileHit(this.level(), iblockdata, blockHitResult, this);
|
||||
@@ -320,6 +409,15 @@
|
||||
@@ -320,6 +415,15 @@
|
||||
} else {
|
||||
Entity entity1 = this.getOwner();
|
||||
|
||||
|
@ -192,7 +207,7 @@
|
|||
return entity1 == null || this.leftOwner || !entity1.isPassengerOfSameVehicle(entity);
|
||||
}
|
||||
}
|
||||
@@ -333,14 +431,8 @@
|
||||
@@ -333,14 +437,8 @@
|
||||
}
|
||||
|
||||
protected static float lerpRotation(float prevRot, float newRot) {
|
||||
|
|
|
@ -173,4 +173,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
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue