diff --git a/patches/server/0127-Despawn-rate-config-options-per-projectile-type.patch b/patches/server/0127-Despawn-rate-config-options-per-projectile-type.patch index 3f794954f..88462ed12 100644 --- a/patches/server/0127-Despawn-rate-config-options-per-projectile-type.patch +++ b/patches/server/0127-Despawn-rate-config-options-per-projectile-type.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Despawn rate config options per projectile type Default values of -1 respect vanilla behaviour. diff --git a/src/main/java/net/minecraft/server/EntityArrow.java b/src/main/java/net/minecraft/server/EntityArrow.java -index b0218959a0..1587a5aa77 100644 +index b0218959a..cecaa6e70 100644 --- a/src/main/java/net/minecraft/server/EntityArrow.java +++ b/src/main/java/net/minecraft/server/EntityArrow.java @@ -23,7 +23,7 @@ public abstract class EntityArrow extends IProjectile { @@ -18,8 +18,37 @@ index b0218959a0..1587a5aa77 100644 private double damage; public int knockbackStrength; private SoundEffect ak; +@@ -255,13 +255,23 @@ public abstract class EntityArrow extends IProjectile { + + } + +- protected final void tickDespawnCounter() { this.h(); } // Paper - OBFHELPER +- protected void h() { +- ++this.despawnCounter; +- if (this.despawnCounter >= (fromPlayer == PickupStatus.CREATIVE_ONLY ? world.paperConfig.creativeArrowDespawnRate : (fromPlayer == PickupStatus.DISALLOWED ? world.paperConfig.nonPlayerArrowDespawnRate : ((this instanceof EntityThrownTrident) ? world.spigotConfig.tridentDespawnRate : world.spigotConfig.arrowDespawnRate)))) { // Spigot // Paper - TODO: Extract this to init? +- this.die(); ++ // Purpur start ++ protected int getPurpurDespawnRate() { ++ if (fromPlayer == PickupStatus.CREATIVE_ONLY) { ++ return world.paperConfig.creativeArrowDespawnRate; ++ } ++ if (fromPlayer == PickupStatus.DISALLOWED) { ++ return world.paperConfig.nonPlayerArrowDespawnRate; ++ } ++ if (this instanceof EntityThrownTrident) { ++ return world.spigotConfig.tridentDespawnRate; + } ++ return world.spigotConfig.arrowDespawnRate; ++ } ++ // Purpur end + ++ protected void h() { ++ tickDespawnCounter(); // Purpur + } + + private void A() { diff --git a/src/main/java/net/minecraft/server/EntityDragonFireball.java b/src/main/java/net/minecraft/server/EntityDragonFireball.java -index 27032abad4..9d2d5be5ee 100644 +index 27032abad..9d2d5be5e 100644 --- a/src/main/java/net/minecraft/server/EntityDragonFireball.java +++ b/src/main/java/net/minecraft/server/EntityDragonFireball.java @@ -75,4 +75,11 @@ public class EntityDragonFireball extends EntityFireball { @@ -35,7 +64,7 @@ index 27032abad4..9d2d5be5ee 100644 + // Purpur end } diff --git a/src/main/java/net/minecraft/server/EntityEgg.java b/src/main/java/net/minecraft/server/EntityEgg.java -index edce89169b..4951abdfa1 100644 +index edce89169..4951abdfa 100644 --- a/src/main/java/net/minecraft/server/EntityEgg.java +++ b/src/main/java/net/minecraft/server/EntityEgg.java @@ -87,4 +87,11 @@ public class EntityEgg extends EntityProjectileThrowable { @@ -51,7 +80,7 @@ index edce89169b..4951abdfa1 100644 + // Purpur end } diff --git a/src/main/java/net/minecraft/server/EntityEnderPearl.java b/src/main/java/net/minecraft/server/EntityEnderPearl.java -index 63b4a449b5..e8650c1bfa 100644 +index 63b4a449b..e8650c1bf 100644 --- a/src/main/java/net/minecraft/server/EntityEnderPearl.java +++ b/src/main/java/net/minecraft/server/EntityEnderPearl.java @@ -106,4 +106,11 @@ public class EntityEnderPearl extends EntityProjectileThrowable { @@ -67,7 +96,7 @@ index 63b4a449b5..e8650c1bfa 100644 + // Purpur end } diff --git a/src/main/java/net/minecraft/server/EntityFireworks.java b/src/main/java/net/minecraft/server/EntityFireworks.java -index 36729e4783..7fb57607e2 100644 +index 36729e478..a9418cbe3 100644 --- a/src/main/java/net/minecraft/server/EntityFireworks.java +++ b/src/main/java/net/minecraft/server/EntityFireworks.java @@ -296,4 +296,11 @@ public class EntityFireworks extends IProjectile { @@ -78,12 +107,12 @@ index 36729e4783..7fb57607e2 100644 + // Purpur start + @Override + protected int getPurpurDespawnRate() { -+ return this.world.purpurConfig.fireworksDespawnRate; ++ return this.world.purpurConfig.fireworkDespawnRate; + } + // Purpur end } diff --git a/src/main/java/net/minecraft/server/EntityFishingHook.java b/src/main/java/net/minecraft/server/EntityFishingHook.java -index b6cace72ab..2484290238 100644 +index b6cace72a..248429023 100644 --- a/src/main/java/net/minecraft/server/EntityFishingHook.java +++ b/src/main/java/net/minecraft/server/EntityFishingHook.java @@ -554,4 +554,11 @@ public class EntityFishingHook extends IProjectile { @@ -99,7 +128,7 @@ index b6cace72ab..2484290238 100644 + // Purpur end } diff --git a/src/main/java/net/minecraft/server/EntityLargeFireball.java b/src/main/java/net/minecraft/server/EntityLargeFireball.java -index b4b0dfbc70..d12de20cf4 100644 +index b4b0dfbc7..d12de20cf 100644 --- a/src/main/java/net/minecraft/server/EntityLargeFireball.java +++ b/src/main/java/net/minecraft/server/EntityLargeFireball.java @@ -66,4 +66,11 @@ public class EntityLargeFireball extends EntityFireballFireball { @@ -115,7 +144,7 @@ index b4b0dfbc70..d12de20cf4 100644 + // Purpur end } diff --git a/src/main/java/net/minecraft/server/EntityPotion.java b/src/main/java/net/minecraft/server/EntityPotion.java -index c7416602c1..b189e2d8e9 100644 +index c7416602c..b189e2d8e 100644 --- a/src/main/java/net/minecraft/server/EntityPotion.java +++ b/src/main/java/net/minecraft/server/EntityPotion.java @@ -240,4 +240,11 @@ public class EntityPotion extends EntityProjectileThrowable { @@ -131,7 +160,7 @@ index c7416602c1..b189e2d8e9 100644 + // Purpur end } diff --git a/src/main/java/net/minecraft/server/EntityShulkerBullet.java b/src/main/java/net/minecraft/server/EntityShulkerBullet.java -index 226b346436..b482dce83b 100644 +index 226b34643..b482dce83 100644 --- a/src/main/java/net/minecraft/server/EntityShulkerBullet.java +++ b/src/main/java/net/minecraft/server/EntityShulkerBullet.java @@ -313,4 +313,11 @@ public class EntityShulkerBullet extends IProjectile { @@ -147,7 +176,7 @@ index 226b346436..b482dce83b 100644 + // Purpur end } diff --git a/src/main/java/net/minecraft/server/EntitySmallFireball.java b/src/main/java/net/minecraft/server/EntitySmallFireball.java -index 92efb29534..f884e4cf7a 100644 +index 92efb2953..f884e4cf7 100644 --- a/src/main/java/net/minecraft/server/EntitySmallFireball.java +++ b/src/main/java/net/minecraft/server/EntitySmallFireball.java @@ -88,4 +88,11 @@ public class EntitySmallFireball extends EntityFireballFireball { @@ -160,26 +189,10 @@ index 92efb29534..f884e4cf7a 100644 + protected int getPurpurDespawnRate() { + return this.world.purpurConfig.smallFireballDespawnRate; + } -+ // Purpur end - } -diff --git a/src/main/java/net/minecraft/server/EntitySnowball.java b/src/main/java/net/minecraft/server/EntitySnowball.java -index e44249f59b..592846759f 100644 ---- a/src/main/java/net/minecraft/server/EntitySnowball.java -+++ b/src/main/java/net/minecraft/server/EntitySnowball.java -@@ -37,4 +37,11 @@ public class EntitySnowball extends EntityProjectileThrowable { - } - - } -+ -+ // Purpur start -+ @Override -+ protected int getPurpurDespawnRate() { -+ return this.world.purpurConfig.snowballDespawnRate; -+ } + // Purpur end } diff --git a/src/main/java/net/minecraft/server/EntityThrownExpBottle.java b/src/main/java/net/minecraft/server/EntityThrownExpBottle.java -index 2d3ca8c424..1d32518bd7 100644 +index 2d3ca8c42..1d32518bd 100644 --- a/src/main/java/net/minecraft/server/EntityThrownExpBottle.java +++ b/src/main/java/net/minecraft/server/EntityThrownExpBottle.java @@ -51,4 +51,11 @@ public class EntityThrownExpBottle extends EntityProjectileThrowable { @@ -195,7 +208,7 @@ index 2d3ca8c424..1d32518bd7 100644 + // Purpur end } diff --git a/src/main/java/net/minecraft/server/EntityWitherSkull.java b/src/main/java/net/minecraft/server/EntityWitherSkull.java -index 2c02e114cc..4a97a7517d 100644 +index 2c02e114c..4a97a7517 100644 --- a/src/main/java/net/minecraft/server/EntityWitherSkull.java +++ b/src/main/java/net/minecraft/server/EntityWitherSkull.java @@ -116,4 +116,11 @@ public class EntityWitherSkull extends EntityFireball { @@ -211,7 +224,7 @@ index 2c02e114cc..4a97a7517d 100644 + // Purpur end } diff --git a/src/main/java/net/minecraft/server/IProjectile.java b/src/main/java/net/minecraft/server/IProjectile.java -index 9a17eb6066..ab0809992c 100644 +index 9a17eb606..f0b898289 100644 --- a/src/main/java/net/minecraft/server/IProjectile.java +++ b/src/main/java/net/minecraft/server/IProjectile.java @@ -13,6 +13,7 @@ public abstract class IProjectile extends Entity { @@ -222,41 +235,42 @@ index 9a17eb6066..ab0809992c 100644 IProjectile(EntityTypes entitytypes, World world) { super(entitytypes, world); -@@ -79,8 +80,29 @@ public abstract class IProjectile extends Entity { - } - - super.tick(); +@@ -23,6 +24,17 @@ public abstract class IProjectile extends Entity { + public boolean canSaveToDisk() { + return world != null && world.purpurConfig.saveProjectilesToDisk; + } + -+ // Purpur start -+ if (!(this instanceof EntityArrow)) { -+ if (ticksLived > 200) this.tickDespawnCounter(); // Paper - tick despawnCounter regardless after 10 seconds -+ } -+ // Purpur end -+ } -+ -+ // Purpur start -+ protected void tickDespawnCounter() { // Purpur - modified from EntityArrow ++ protected final void tickDespawnCounter() { + if (this.getPurpurDespawnRate() != -1) { + ++this.despawnCounter; + if (this.despawnCounter >= this.getPurpurDespawnRate()) { + this.die(); + } + } ++ } ++ ++ protected abstract int getPurpurDespawnRate(); + // Purpur end + + public void setShooter(@Nullable Entity entity) { +@@ -79,6 +91,12 @@ public abstract class IProjectile extends Entity { + } + + super.tick(); ++ ++ // Purpur start ++ if (!(this instanceof EntityArrow)) { // EntityArrow handles its own despawn counter ++ this.tickDespawnCounter(); ++ } ++ // Purpur end } -+ protected int getPurpurDespawnRate() { -+ return -1; -+ } -+ // Purpur end -+ public boolean checkIfLeftOwner() { return this.h(); } // Purpur - OBFHELPER - private boolean h() { - Entity entity = this.getShooter(); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 423593ae66..bd58350796 100644 +index 423593ae6..e077fcfe1 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -145,6 +145,33 @@ public class PurpurWorldConfig { +@@ -145,6 +145,31 @@ public class PurpurWorldConfig { idleTimeoutUpdateTabList = getBoolean("gameplay-mechanics.player.idle-timeout.update-tab-list", idleTimeoutUpdateTabList); } @@ -266,11 +280,10 @@ index 423593ae66..bd58350796 100644 + public int smallFireballDespawnRate = -1; + public int eggDespawnRate = -1; + public int enderPearlDespawnRate = -1; -+ public int fireworksDespawnRate = -1; ++ public int fireworkDespawnRate = -1; + public int fishingHookDespawnRate = -1; + public int potionDespawnRate = -1; + public int shulkerBulletDespawnRate = -1; -+ public int snowballDespawnRate = -1; + public int expBottleDespawnRate = -1; + private void projectileDespawnRateSettings() { + witherSkullDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.wither_skull", witherSkullDespawnRate); @@ -279,11 +292,10 @@ index 423593ae66..bd58350796 100644 + smallFireballDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.small_fireball", smallFireballDespawnRate); + eggDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.egg", eggDespawnRate); + enderPearlDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.ender_pearl", enderPearlDespawnRate); -+ fireworksDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.fireworks_rocket", fireworksDespawnRate); ++ fireworkDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.firework_rocket", fireworkDespawnRate); + fishingHookDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.fishing_bobber", fishingHookDespawnRate); + potionDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.potion", potionDespawnRate); + shulkerBulletDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.shulker_bullet", shulkerBulletDespawnRate); -+ snowballDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.snowball", snowballDespawnRate); + expBottleDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.experience_bottle", expBottleDespawnRate); + } +