2023-06-01 04:43:51 +02:00
|
|
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
|
|
From: Jake Potrebic <jake.m.potrebic@gmail.com>
|
|
|
|
Date: Tue, 30 May 2023 12:59:10 -0700
|
|
|
|
Subject: [PATCH] Refresh ProjectileSource for projectiles
|
|
|
|
|
|
|
|
Makes sure the value returned by Projectile#getShooter in
|
|
|
|
the API matches the owner UUID specified in the entity nbt.
|
|
|
|
Previously, after the entity reloaded, Projectile#getShooter
|
|
|
|
would return null, while the entity still had an owner.
|
|
|
|
|
2023-09-16 23:37:38 +02:00
|
|
|
Also fixes setting the shooter/owner to null actually
|
|
|
|
clearing the owner.
|
|
|
|
|
|
|
|
Co-authored-by: Warrior <50800980+Warriorrrr@users.noreply.github.com>
|
|
|
|
|
2023-06-01 04:43:51 +02:00
|
|
|
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
|
2024-04-12 21:14:06 +02:00
|
|
|
index 9eecdc0a6fb111fb36e4e8e8666d056563e48cda..ee9ab1abbed298138e48c659481e03c01ac5940a 100644
|
2023-06-01 04:43:51 +02:00
|
|
|
--- a/src/main/java/net/minecraft/world/entity/Entity.java
|
|
|
|
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
|
Updated Upstream (Bukkit/CraftBukkit/Spigot) (#10277)
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
Bukkit Changes:
9a80d38c SPIGOT-336, SPIGOT-3366, SPIGOT-5768, SPIGOT-6409, SPIGOT-6861, PR-722: Add EntityRemoveEvent
258086d9 SPIGOT-7417, PR-967: Add Sign#getTargetSide and Sign#getAllowedEditor
ffaba051 SPIGOT-7584: Add missing Tag.ITEMS_NON_FLAMMABLE_WOOD
CraftBukkit Changes:
98b6c1ac7 SPIGOT-7589 Fix NullPointerException when bans expire
a2736ddb0 SPIGOT-336, SPIGOT-3366, SPIGOT-5768, SPIGOT-6409, SPIGOT-6861, PR-1008: Add EntityRemoveEvent
5bf12cb89 SPIGOT-7565: Throw a more descriptive error message when a developer tries to spawn an entity from a CraftBukkit class
76d95fe7e SPIGOT-7417, PR-1343: Add Sign#getTargetSide and Sign#getAllowedEditor
Spigot Changes:
e9ec5485 Rebuild patches
f1b62e0c Rebuild patches
2024-02-23 14:37:33 +01:00
|
|
|
@@ -384,6 +384,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
|
2023-12-06 17:21:56 +01:00
|
|
|
public boolean inWorld = false;
|
2023-06-01 04:43:51 +02:00
|
|
|
public boolean generation;
|
|
|
|
public int maxAirTicks = this.getDefaultMaxAirSupply(); // CraftBukkit - SPIGOT-6907: re-implement LivingEntity#setMaximumAir()
|
2024-01-15 12:38:39 +01:00
|
|
|
+ @Nullable // Paper - Refresh ProjectileSource for projectiles
|
2023-06-01 04:43:51 +02:00
|
|
|
public org.bukkit.projectiles.ProjectileSource projectileSource; // For projectiles only
|
|
|
|
public boolean lastDamageCancelled; // SPIGOT-5339, SPIGOT-6252, SPIGOT-6777: Keep track if the event was canceled
|
|
|
|
public boolean persistentInvisibility = false;
|
|
|
|
diff --git a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java
|
2024-01-22 21:04:08 +01:00
|
|
|
index 0a207f3f2e4c0790e784fb4b0c3c2dfa49c39724..156809090f1f83ad68e7e2477a3cfddac5757a8e 100644
|
2023-06-01 04:43:51 +02:00
|
|
|
--- a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java
|
|
|
|
+++ b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java
|
2023-12-06 17:21:56 +01:00
|
|
|
@@ -50,14 +50,31 @@ public abstract class Projectile extends Entity implements TraceableEntity {
|
2023-06-01 04:43:51 +02:00
|
|
|
this.ownerUUID = entity.getUUID();
|
|
|
|
this.cachedOwner = entity;
|
|
|
|
}
|
|
|
|
- this.projectileSource = (entity != null && entity.getBukkitEntity() instanceof ProjectileSource) ? (ProjectileSource) entity.getBukkitEntity() : null; // CraftBukkit
|
|
|
|
-
|
2024-01-15 12:38:39 +01:00
|
|
|
+ // Paper start - Refresh ProjectileSource for projectiles
|
2023-09-16 23:37:38 +02:00
|
|
|
+ else {
|
|
|
|
+ this.ownerUUID = null;
|
|
|
|
+ this.cachedOwner = null;
|
|
|
|
+ this.projectileSource = null;
|
|
|
|
+ }
|
2024-01-15 12:38:39 +01:00
|
|
|
+ // Paper end - Refresh ProjectileSource for projectiles
|
2023-06-01 04:43:51 +02:00
|
|
|
+ this.refreshProjectileSource(false); // Paper
|
|
|
|
+ }
|
2024-01-15 12:38:39 +01:00
|
|
|
+ // Paper start - Refresh ProjectileSource for projectiles
|
2023-06-01 04:43:51 +02:00
|
|
|
+ public void refreshProjectileSource(boolean fillCache) {
|
|
|
|
+ if (fillCache) {
|
|
|
|
+ this.getOwner();
|
|
|
|
+ }
|
|
|
|
+ if (this.cachedOwner != null && !this.cachedOwner.isRemoved() && this.projectileSource == null && this.cachedOwner.getBukkitEntity() instanceof ProjectileSource projSource) {
|
|
|
|
+ this.projectileSource = projSource;
|
|
|
|
+ }
|
|
|
|
}
|
2024-01-15 12:38:39 +01:00
|
|
|
+ // Paper end - Refresh ProjectileSource for projectiles
|
2023-06-01 04:43:51 +02:00
|
|
|
|
|
|
|
@Nullable
|
|
|
|
@Override
|
|
|
|
public Entity getOwner() {
|
|
|
|
if (this.cachedOwner != null && !this.cachedOwner.isRemoved()) {
|
2024-01-15 12:38:39 +01:00
|
|
|
+ this.refreshProjectileSource(false); // Paper - Refresh ProjectileSource for projectiles
|
2023-06-01 04:43:51 +02:00
|
|
|
return this.cachedOwner;
|
2023-12-06 17:21:56 +01:00
|
|
|
} else {
|
|
|
|
if (this.ownerUUID != null) {
|
2023-12-06 21:09:14 +01:00
|
|
|
@@ -67,6 +84,7 @@ public abstract class Projectile extends Entity implements TraceableEntity {
|
|
|
|
ServerLevel worldserver = (ServerLevel) world;
|
|
|
|
|
|
|
|
this.cachedOwner = worldserver.getEntity(this.ownerUUID);
|
2024-01-15 12:38:39 +01:00
|
|
|
+ this.refreshProjectileSource(false); // Paper - Refresh ProjectileSource for projectiles
|
2023-12-06 17:21:56 +01:00
|
|
|
return this.cachedOwner;
|
2023-06-01 04:43:51 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/AbstractProjectile.java b/src/main/java/org/bukkit/craftbukkit/entity/AbstractProjectile.java
|
2024-01-18 18:52:00 +01:00
|
|
|
index c1c52f4fc5f900fac4098e5e37c52dfc4e82b8bb..236f94348ff8da661e23e3e17b7fc1b143680da9 100644
|
2023-06-01 04:43:51 +02:00
|
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/AbstractProjectile.java
|
|
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/AbstractProjectile.java
|
2023-09-29 02:28:26 +02:00
|
|
|
@@ -60,6 +60,7 @@ public abstract class AbstractProjectile extends CraftEntity implements Projecti
|
2023-06-01 04:43:51 +02:00
|
|
|
|
|
|
|
@Override
|
|
|
|
public final org.bukkit.projectiles.ProjectileSource getShooter() {
|
2024-01-15 12:38:39 +01:00
|
|
|
+ this.getHandle().refreshProjectileSource(true); // Paper - Refresh ProjectileSource for projectiles
|
2023-06-01 04:43:51 +02:00
|
|
|
return this.getHandle().projectileSource;
|
|
|
|
}
|
|
|
|
|