mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-17 16:37:43 +01:00
Tick projectile despawn logic (Fixes #978)
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user