Tick projectile despawn logic (Fixes #978)

This commit is contained in:
Encode42
2022-05-25 02:29:16 -04:00
parent a4679f2af7
commit 61fc0a557f
3 changed files with 29 additions and 11 deletions

View File

@@ -6,7 +6,7 @@ Subject: [PATCH] Despawn rate config options per projectile type
Default values of -1 respect vanilla behaviour. Default values of -1 respect vanilla behaviour.
diff --git a/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java b/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java 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 53d0024daf6963ac4dab575666b0d6a74a39a958..2772351085add7d25c39bd9e5537fe354d07e9e1 100644 index 53d0024daf6963ac4dab575666b0d6a74a39a958..c5cbcf8d6b26bbb7712d3a72f8313f600dfc7c11 100644
--- a/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java --- a/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java
+++ b/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java +++ b/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java
@@ -62,7 +62,7 @@ public abstract class AbstractArrow extends Projectile { @@ -62,7 +62,7 @@ public abstract class AbstractArrow extends Projectile {
@@ -18,7 +18,7 @@ index 53d0024daf6963ac4dab575666b0d6a74a39a958..2772351085add7d25c39bd9e5537fe35
private double baseDamage; private double baseDamage;
public int knockback; public int knockback;
private SoundEvent soundEvent; private SoundEvent soundEvent;
@@ -333,12 +333,23 @@ public abstract class AbstractArrow extends Projectile { @@ -333,12 +333,28 @@ public abstract class AbstractArrow extends Projectile {
} }
@@ -33,14 +33,19 @@ index 53d0024daf6963ac4dab575666b0d6a74a39a958..2772351085add7d25c39bd9e5537fe35
+ } + }
+ if (pickup == Pickup.DISALLOWED) { + if (pickup == Pickup.DISALLOWED) {
+ return level.paperConfig.nonPlayerArrowDespawnRate; + return level.paperConfig.nonPlayerArrowDespawnRate;
+ } }
+ if (this instanceof ThrownTrident) { + if (this instanceof ThrownTrident) {
+ return level.spigotConfig.tridentDespawnRate; + return level.spigotConfig.tridentDespawnRate;
} + }
+ return level.spigotConfig.arrowDespawnRate; + return level.spigotConfig.arrowDespawnRate;
+ } + }
+ // Purpur end
+ // Arrow despawn ticking is handled differently
+ protected boolean shouldAlwaysTickDespawn() {
+ return false;
+ };
+ // Purpur end
+
+ protected void tickDespawn() { + protected void tickDespawn() {
+ tickDespawnCounter(); // Purpur + tickDespawnCounter(); // Purpur
} }
@@ -127,7 +132,7 @@ index 1a945a32c3d3705a318ebca72a365931a8c001b7..c7fdcfae1ba823046fdfe78aa97b4a7a
+ // Purpur end + // Purpur end
} }
diff --git a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java 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 0c7d31c7ffd603e54fb19010331ad220c7b15627..73d18318afff5eac5966ddaeadf014524d06ec66 100644 index 0c7d31c7ffd603e54fb19010331ad220c7b15627..878757f6b5034ed54198102cf8d48ace580f856f 100644
--- a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java --- a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java
+++ b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java +++ b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java
@@ -33,6 +33,7 @@ public abstract class Projectile extends Entity { @@ -33,6 +33,7 @@ public abstract class Projectile extends Entity {
@@ -138,7 +143,7 @@ index 0c7d31c7ffd603e54fb19010331ad220c7b15627..73d18318afff5eac5966ddaeadf01452
// CraftBukkit start // CraftBukkit start
protected boolean hitCancelled = false; protected boolean hitCancelled = false;
@@ -72,6 +73,19 @@ public abstract class Projectile extends Entity { @@ -72,6 +73,23 @@ public abstract class Projectile extends Entity {
} }
// Pufferfish start // Pufferfish start
@@ -153,11 +158,24 @@ index 0c7d31c7ffd603e54fb19010331ad220c7b15627..73d18318afff5eac5966ddaeadf01452
+ } + }
+ +
+ protected abstract int getPurpurDespawnRate(); + protected abstract int getPurpurDespawnRate();
+
+ protected boolean shouldAlwaysTickDespawn() {
+ return true;
+ };
+ // Purpur end + // Purpur end
+ +
public void setOwner(@Nullable Entity entity) { public void setOwner(@Nullable Entity entity) {
if (entity != null) { if (entity != null) {
this.ownerUUID = entity.getUUID(); this.ownerUUID = entity.getUUID();
@@ -148,6 +166,8 @@ public abstract class Projectile extends Entity {
this.leftOwner = this.checkLeftOwner();
}
+ if (this.shouldAlwaysTickDespawn()) tickDespawnCounter(); // Purpur
+
super.tick();
}
diff --git a/src/main/java/net/minecraft/world/entity/projectile/ShulkerBullet.java b/src/main/java/net/minecraft/world/entity/projectile/ShulkerBullet.java diff --git a/src/main/java/net/minecraft/world/entity/projectile/ShulkerBullet.java b/src/main/java/net/minecraft/world/entity/projectile/ShulkerBullet.java
index a4591e4dc1a277a2fd0a323f3b54a107fd6598c8..ca0133bcb82df8112b63c7aef3670a8970676ef9 100644 index a4591e4dc1a277a2fd0a323f3b54a107fd6598c8..ca0133bcb82df8112b63c7aef3670a8970676ef9 100644
--- a/src/main/java/net/minecraft/world/entity/projectile/ShulkerBullet.java --- a/src/main/java/net/minecraft/world/entity/projectile/ShulkerBullet.java

View File

@@ -7,7 +7,7 @@ This prevents keeping arrows alive indefinitely (such as when the block
the arrow is stuck in gets removed, like a piston head going up/down) the arrow is stuck in gets removed, like a piston head going up/down)
diff --git a/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java b/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java 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 2772351085add7d25c39bd9e5537fe354d07e9e1..59e434c31d1929bdc1d5242ef1f117d998ca46ec 100644 index c5cbcf8d6b26bbb7712d3a72f8313f600dfc7c11..50b531cdaa26af8e06007552fc18cabddbd5f0de 100644
--- a/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java --- a/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java
+++ b/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java +++ b/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java
@@ -321,7 +321,7 @@ public abstract class AbstractArrow extends Projectile { @@ -321,7 +321,7 @@ public abstract class AbstractArrow extends Projectile {
@@ -15,7 +15,7 @@ index 2772351085add7d25c39bd9e5537fe354d07e9e1..59e434c31d1929bdc1d5242ef1f117d9
this.setDeltaMovement(vec3d.multiply((double) (this.random.nextFloat() * 0.2F), (double) (this.random.nextFloat() * 0.2F), (double) (this.random.nextFloat() * 0.2F))); this.setDeltaMovement(vec3d.multiply((double) (this.random.nextFloat() * 0.2F), (double) (this.random.nextFloat() * 0.2F), (double) (this.random.nextFloat() * 0.2F)));
- this.life = 0; - this.life = 0;
+ // this.life = 0; // PUrpur - do not reset despawn counter + // this.life = 0; // Purpur - do not reset despawn counter
} }
@Override @Override

View File

@@ -290,10 +290,10 @@ index e69213b43c8aa5a7c04add7a87482d531fbf52d2..f51ea103238b4a50439f5162a248cd9a
// CraftBukkit start - fire ExplosionPrimeEvent // CraftBukkit start - fire ExplosionPrimeEvent
ExplosionPrimeEvent event = new ExplosionPrimeEvent((org.bukkit.entity.Explosive) this.getBukkitEntity()); ExplosionPrimeEvent event = new ExplosionPrimeEvent((org.bukkit.entity.Explosive) this.getBukkitEntity());
diff --git a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java 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 73d18318afff5eac5966ddaeadf014524d06ec66..90f6a355e345f409ad7702ddc2b6c81ef4e7b933 100644 index 878757f6b5034ed54198102cf8d48ace580f856f..17a9ac588490232e8883d5df1619e1290e260a9b 100644
--- a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java --- a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java
+++ b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java +++ b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java
@@ -320,6 +320,6 @@ public abstract class Projectile extends Entity { @@ -326,6 +326,6 @@ public abstract class Projectile extends Entity {
public boolean mayInteract(Level world, BlockPos pos) { public boolean mayInteract(Level world, BlockPos pos) {
Entity entity = this.getOwner(); Entity entity = this.getOwner();