Despawn rate config options per projectile type

Default values of -1 respect vanilla behaviour.
This commit is contained in:
jmp
2020-09-14 10:11:20 -07:00
committed by BillyGalbreath
parent 7a1012e4c2
commit 67a42f62bc

View File

@@ -0,0 +1,274 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: jmp <jasonpenilla2@me.com>
Date: Mon, 14 Sep 2020 10:09:05 -0700
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
--- 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 {
protected int c;
public EntityArrow.PickupStatus fromPlayer;
public int shake;
- public int despawnCounter;
+ //public int despawnCounter; // Purpur - moved to IProjectile
private double damage;
public int knockbackStrength;
private SoundEffect ak;
diff --git a/src/main/java/net/minecraft/server/EntityDragonFireball.java b/src/main/java/net/minecraft/server/EntityDragonFireball.java
index 27032abad4..9d2d5be5ee 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 {
protected boolean W_() {
return false;
}
+
+ // Purpur start
+ @Override
+ protected int getPurpurDespawnRate() {
+ return this.world.purpurConfig.dragonFireballDespawnRate;
+ }
+ // 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
--- 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 {
protected Item getDefaultItem() {
return Items.EGG;
}
+
+ // Purpur start
+ @Override
+ protected int getPurpurDespawnRate() {
+ return this.world.purpurConfig.eggDespawnRate;
+ }
+ // 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
--- 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 {
return super.b(worldserver);
}
+
+ // Purpur start
+ @Override
+ protected int getPurpurDespawnRate() {
+ return this.world.purpurConfig.enderPearlDespawnRate;
+ }
+ // 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
--- 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 {
public Packet<?> P() {
return new PacketPlayOutSpawnEntity(this);
}
+
+ // Purpur start
+ @Override
+ protected int getPurpurDespawnRate() {
+ return this.world.purpurConfig.fireworksDespawnRate;
+ }
+ // 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
--- 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 {
private HookState() {}
}
+
+ // Purpur start
+ @Override
+ protected int getPurpurDespawnRate() {
+ return this.world.purpurConfig.fishingHookDespawnRate;
+ }
+ // 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
--- 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 {
}
}
+
+ // Purpur start
+ @Override
+ protected int getPurpurDespawnRate() {
+ return this.world.purpurConfig.largeFireballDespawnRate;
+ }
+ // 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
--- 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 {
}
}
+
+ // Purpur start
+ @Override
+ protected int getPurpurDespawnRate() {
+ return this.world.purpurConfig.potionDespawnRate;
+ }
+ // 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
--- 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 {
public Packet<?> P() {
return new PacketPlayOutSpawnEntity(this);
}
+
+ // Purpur start
+ @Override
+ protected int getPurpurDespawnRate() {
+ return this.world.purpurConfig.shulkerBulletDespawnRate;
+ }
+ // 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
--- 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 {
public boolean damageEntity(DamageSource damagesource, float f) {
return false;
}
+
+ // Purpur start
+ @Override
+ protected int getPurpurDespawnRate() {
+ return this.world.purpurConfig.smallFireballDespawnRate;
+ }
+ // 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
--- 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 {
}
}
+
+ // Purpur start
+ @Override
+ protected int getPurpurDespawnRate() {
+ return this.world.purpurConfig.expBottleDespawnRate;
+ }
+ // 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
--- 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 {
protected boolean W_() {
return false;
}
+
+ // Purpur start
+ @Override
+ protected int getPurpurDespawnRate() {
+ return this.world.purpurConfig.witherSkullDespawnRate;
+ }
+ // 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
--- 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 {
private UUID shooter;
private int c;
private boolean d; public boolean leftOwner() { return d; } public void setLeftOwner(boolean leftOwner) { this.d = leftOwner; } // Purpur - OBFHELPER
+ public int despawnCounter; // Purpur - moved from EntityArrow
IProjectile(EntityTypes<? extends IProjectile> entitytypes, World world) {
super(entitytypes, world);
@@ -79,8 +80,29 @@ public abstract class IProjectile extends Entity {
}
super.tick();
+
+ // 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
+ if (this.getPurpurDespawnRate() != -1) {
+ ++this.despawnCounter;
+ if (this.despawnCounter >= this.getPurpurDespawnRate()) {
+ this.die();
+ }
+ }
}
+ 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..fa322b1742 100644
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
@@ -145,6 +145,31 @@ public class PurpurWorldConfig {
idleTimeoutUpdateTabList = getBoolean("gameplay-mechanics.player.idle-timeout.update-tab-list", idleTimeoutUpdateTabList);
}
+ public int witherSkullDespawnRate = -1;
+ public int dragonFireballDespawnRate = -1;
+ public int largeFireballDespawnRate = -1;
+ public int smallFireballDespawnRate = -1;
+ public int eggDespawnRate = -1;
+ public int enderPearlDespawnRate = -1;
+ public int fireworksDespawnRate = -1;
+ public int fishingHookDespawnRate = -1;
+ public int potionDespawnRate = -1;
+ public int shulkerBulletDespawnRate = -1;
+ public int expBottleDespawnRate = -1;
+ private void projectileDespawnRateSettings() {
+ witherSkullDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.wither_skull", witherSkullDespawnRate);
+ dragonFireballDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.dragon_fireball", dragonFireballDespawnRate);
+ largeFireballDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.fireball", largeFireballDespawnRate);
+ 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);
+ 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);
+ expBottleDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.experience_bottle", expBottleDespawnRate);
+ }
+
public boolean useBetterMending = false;
public boolean boatEjectPlayersOnLand = false;
public boolean disableDropsOnCrammingDeath = false;