Skip to content

Commit 4c91cd3

Browse files
committed
Lazy set Entity.projectileSource in AbstractProjectile#getShooter
Fixes #13475 Supersedes #13643 Supersedes 13481
1 parent fc71a13 commit 4c91cd3

2 files changed

Lines changed: 8 additions & 27 deletions

File tree

paper-server/patches/sources/net/minecraft/world/entity/projectile/Projectile.java.patch

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -8,32 +8,6 @@
88

99
protected Projectile(final EntityType<? extends Projectile> type, final Level level) {
1010
super(type, level);
11-
@@ -51,12 +_,25 @@
12-
13-
protected void setOwner(final @Nullable EntityReference<Entity> owner) {
14-
this.owner = owner;
15-
+ this.refreshProjectileSource(false); // Paper
16-
}
17-
18-
public void setOwner(final @Nullable Entity owner) {
19-
this.setOwner(EntityReference.of(owner));
20-
}
21-
22-
+ // Paper start - Refresh ProjectileSource for projectiles
23-
+ public void refreshProjectileSource(boolean fillCache) {
24-
+ if (fillCache) {
25-
+ this.getOwner();
26-
+ }
27-
+ Entity owner = this.getOwner();
28-
+ if (owner != null && this.projectileSource == null && owner.getBukkitEntity() instanceof org.bukkit.projectiles.ProjectileSource projSource) {
29-
+ this.projectileSource = projSource;
30-
+ }
31-
+ }
32-
+ // Paper end - Refresh ProjectileSource for projectiles
33-
+
34-
@Override
35-
public @Nullable Entity getOwner() {
36-
return EntityReference.getEntity(this.owner, this.level());
3711
@@ -83,6 +_,7 @@
3812
@Override
3913
protected void readAdditionalSaveData(final ValueInput input) {

paper-server/src/main/java/org/bukkit/craftbukkit/entity/AbstractProjectile.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,14 @@ public void hitEntity(org.bukkit.entity.Entity entity, org.bukkit.util.Vector ve
6363

6464
@Override
6565
public final org.bukkit.projectiles.ProjectileSource getShooter() {
66-
this.getHandle().refreshProjectileSource(true); // Paper - Refresh ProjectileSource for projectiles
66+
net.minecraft.world.entity.projectile.Projectile handle = this.getHandle();
67+
68+
// Refresh the source if unset
69+
Entity owner = handle.getOwner();
70+
if (owner != null && handle.projectileSource == null && owner.getBukkitEntity() instanceof org.bukkit.projectiles.ProjectileSource projSource) {
71+
handle.projectileSource = projSource;
72+
}
73+
6774
return this.getHandle().projectileSource;
6875
}
6976

0 commit comments

Comments
 (0)