mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-21 10:27:44 +01:00
331 lines
16 KiB
Diff
331 lines
16 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Jason Penilla <11360596+jpenilla@users.noreply.github.com>
|
|
Date: Mon, 14 Sep 2020 10:09:05 -0700
|
|
Subject: [PATCH] |FEAT| |PERF| Despawn rate config options per projectile type
|
|
|
|
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
|
|
index 6636845ea044c3810e1880aad8b679134cd33668..f6fc98ffe49d5af9a69f57f2e53e6010f71d55d9 100644
|
|
--- a/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 {
|
|
protected int inGroundTime;
|
|
public AbstractArrow.Pickup pickup;
|
|
public int shakeTime;
|
|
- public int life;
|
|
+ // public int life; // Purpur - moved to Projectile
|
|
private double baseDamage;
|
|
public int knockback;
|
|
private SoundEvent soundEvent;
|
|
@@ -320,12 +320,23 @@ public abstract class AbstractArrow extends Projectile {
|
|
|
|
}
|
|
|
|
- protected void tickDespawn() {
|
|
- ++this.life;
|
|
- if (this.life >= (pickup == Pickup.CREATIVE_ONLY ? level.paperConfig.creativeArrowDespawnRate : (pickup == Pickup.DISALLOWED ? level.paperConfig.nonPlayerArrowDespawnRate : ((this instanceof ThrownTrident) ? level.spigotConfig.tridentDespawnRate : level.spigotConfig.arrowDespawnRate)))) { // Spigot // Paper - TODO: Extract this to init?
|
|
- this.discard();
|
|
+ // Purpur start
|
|
+ protected int getPurpurDespawnRate() {
|
|
+ if (pickup == Pickup.CREATIVE_ONLY) {
|
|
+ return level.paperConfig.creativeArrowDespawnRate;
|
|
+ }
|
|
+ if (pickup == Pickup.DISALLOWED) {
|
|
+ return level.paperConfig.nonPlayerArrowDespawnRate;
|
|
+ }
|
|
+ if (this instanceof ThrownTrident) {
|
|
+ return level.spigotConfig.tridentDespawnRate;
|
|
}
|
|
+ return level.spigotConfig.arrowDespawnRate;
|
|
+ }
|
|
+ // Purpur end
|
|
|
|
+ protected void tickDespawn() {
|
|
+ tickDespawnCounter(); // Purpur
|
|
}
|
|
|
|
private void resetPiercedEntities() {
|
|
diff --git a/src/main/java/net/minecraft/world/entity/projectile/DragonFireball.java b/src/main/java/net/minecraft/world/entity/projectile/DragonFireball.java
|
|
index 6afe37e42d88701af38df5793a9ea9d7d2cda5c5..1de27407c92d496715899fcafb3794df9f5ef6cd 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/projectile/DragonFireball.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/projectile/DragonFireball.java
|
|
@@ -81,4 +81,11 @@ public class DragonFireball extends AbstractHurtingProjectile {
|
|
protected boolean shouldBurn() {
|
|
return false;
|
|
}
|
|
+
|
|
+ // Purpur start
|
|
+ @Override
|
|
+ protected int getPurpurDespawnRate() {
|
|
+ return this.level.purpurConfig.dragonFireballDespawnRate;
|
|
+ }
|
|
+ // Purpur end
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/world/entity/projectile/FireworkRocketEntity.java b/src/main/java/net/minecraft/world/entity/projectile/FireworkRocketEntity.java
|
|
index 3ac0d0419cbdacabf647a530a82ddf67ddaa13b7..78111e7c26f5237e9954791cf17037eb6fd111b2 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/projectile/FireworkRocketEntity.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/projectile/FireworkRocketEntity.java
|
|
@@ -355,4 +355,11 @@ public class FireworkRocketEntity extends Projectile implements ItemSupplier {
|
|
public boolean isAttackable() {
|
|
return false;
|
|
}
|
|
+
|
|
+ // Purpur start
|
|
+ @Override
|
|
+ protected int getPurpurDespawnRate() {
|
|
+ return this.level.purpurConfig.fireworkDespawnRate;
|
|
+ }
|
|
+ // Purpur end
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/world/entity/projectile/FishingHook.java b/src/main/java/net/minecraft/world/entity/projectile/FishingHook.java
|
|
index 852a4edde291bf368b2396e3c94ab402e3c66622..83b733efa3a4e135870806589ca9733ca6d8775b 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/projectile/FishingHook.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/projectile/FishingHook.java
|
|
@@ -664,4 +664,11 @@ public class FishingHook extends Projectile {
|
|
|
|
private OpenWaterType() {}
|
|
}
|
|
+
|
|
+ // Purpur start
|
|
+ @Override
|
|
+ protected int getPurpurDespawnRate() {
|
|
+ return this.level.purpurConfig.fishingHookDespawnRate;
|
|
+ }
|
|
+ // Purpur end
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/world/entity/projectile/LargeFireball.java b/src/main/java/net/minecraft/world/entity/projectile/LargeFireball.java
|
|
index 5237b699e000b4fed99be39b0a7e2daab9c8bf42..e69213b43c8aa5a7c04add7a87482d531fbf52d2 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/projectile/LargeFireball.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/projectile/LargeFireball.java
|
|
@@ -77,4 +77,11 @@ public class LargeFireball extends Fireball {
|
|
}
|
|
|
|
}
|
|
+
|
|
+ // Purpur start
|
|
+ @Override
|
|
+ protected int getPurpurDespawnRate() {
|
|
+ return this.level.purpurConfig.largeFireballDespawnRate;
|
|
+ }
|
|
+ // Purpur end
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/world/entity/projectile/LlamaSpit.java b/src/main/java/net/minecraft/world/entity/projectile/LlamaSpit.java
|
|
index f1a12b147d55e34d4f8374593640a311598cf1a6..c4bdebd4310035a5cce5a5790f538eb0b8021b30 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/projectile/LlamaSpit.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/projectile/LlamaSpit.java
|
|
@@ -100,4 +100,11 @@ public class LlamaSpit extends Projectile {
|
|
|
|
this.setDeltaMovement(d0, d1, d2);
|
|
}
|
|
+
|
|
+ // Purpur start
|
|
+ @Override
|
|
+ protected int getPurpurDespawnRate() {
|
|
+ return this.level.purpurConfig.llamaSpitDespawnRate;
|
|
+ }
|
|
+ // 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
|
|
index ae6ccfc11a206e64c0cbced7ca692ba7e50aab03..d5d6fde1e375e5cdfc7726edd4c9b202c4cb0171 100644
|
|
--- a/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 {
|
|
public Entity cachedOwner;
|
|
private boolean leftOwner;
|
|
private boolean hasBeenShot;
|
|
+ public int life; // Purpur - moved from AbstractArrow
|
|
|
|
// CraftBukkit start
|
|
public boolean hitCancelled = false; // Purpur - private -> public
|
|
@@ -72,6 +73,19 @@ public abstract class Projectile extends Entity {
|
|
}
|
|
// Airplane start
|
|
|
|
+ // Purpur start
|
|
+ protected final void tickDespawnCounter() {
|
|
+ if (this.getPurpurDespawnRate() != -1) {
|
|
+ ++this.life;
|
|
+ if (this.life >= this.getPurpurDespawnRate()) {
|
|
+ this.discard();
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+
|
|
+ protected abstract int getPurpurDespawnRate();
|
|
+ // Purpur end
|
|
+
|
|
public void setOwner(@Nullable Entity entity) {
|
|
if (entity != null) {
|
|
this.ownerUUID = entity.getUUID();
|
|
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 123f9a93b014107c8f609d38a2b8d37261bb5d18..aa91cc06f6411fe83467e43c0df1145cb85aead0 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/projectile/ShulkerBullet.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/projectile/ShulkerBullet.java
|
|
@@ -63,6 +63,13 @@ public class ShulkerBullet extends Projectile {
|
|
projectileSource = (org.bukkit.entity.LivingEntity) owner.getBukkitEntity(); // CraftBukkit
|
|
}
|
|
|
|
+ // Purpur start
|
|
+ @Override
|
|
+ protected int getPurpurDespawnRate() {
|
|
+ return this.level.purpurConfig.shulkerBulletDespawnRate;
|
|
+ }
|
|
+ // Purpur end
|
|
+
|
|
// CraftBukkit start
|
|
public Entity getTarget() {
|
|
return this.finalTarget;
|
|
diff --git a/src/main/java/net/minecraft/world/entity/projectile/SmallFireball.java b/src/main/java/net/minecraft/world/entity/projectile/SmallFireball.java
|
|
index b77d04ef22711a4f90e274e81faa261f3f6c25af..a6d75f20d6b7679d53c3c081c6632e9c303e2d74 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/projectile/SmallFireball.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/projectile/SmallFireball.java
|
|
@@ -99,4 +99,11 @@ public class SmallFireball extends Fireball {
|
|
public boolean hurt(DamageSource source, float amount) {
|
|
return false;
|
|
}
|
|
+
|
|
+ // Purpur start
|
|
+ @Override
|
|
+ protected int getPurpurDespawnRate() {
|
|
+ return this.level.purpurConfig.smallFireballDespawnRate;
|
|
+ }
|
|
+ // Purpur end
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/world/entity/projectile/Snowball.java b/src/main/java/net/minecraft/world/entity/projectile/Snowball.java
|
|
index a725851060f13e734dbd2fbf8c83c9e1af57a8b7..ed2f039c4042861bcfa2e41d8281eefd37daa9fa 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/projectile/Snowball.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/projectile/Snowball.java
|
|
@@ -67,4 +67,11 @@ public class Snowball extends ThrowableItemProjectile {
|
|
}
|
|
|
|
}
|
|
+
|
|
+ // Purpur start
|
|
+ @Override
|
|
+ protected int getPurpurDespawnRate() {
|
|
+ return this.level.purpurConfig.snowballDespawnRate;
|
|
+ }
|
|
+ // Purpur end
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/world/entity/projectile/ThrownEgg.java b/src/main/java/net/minecraft/world/entity/projectile/ThrownEgg.java
|
|
index 77941e3981e49cf5662b3e3c86a9c419080b17c8..8c6243aab556c993b43ab52e216bcb0a70d1a686 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/projectile/ThrownEgg.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/projectile/ThrownEgg.java
|
|
@@ -107,4 +107,11 @@ public class ThrownEgg extends ThrowableItemProjectile {
|
|
protected Item getDefaultItem() {
|
|
return Items.EGG;
|
|
}
|
|
+
|
|
+ // Purpur start
|
|
+ @Override
|
|
+ protected int getPurpurDespawnRate() {
|
|
+ return this.level.purpurConfig.eggDespawnRate;
|
|
+ }
|
|
+ // Purpur end
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/world/entity/projectile/ThrownEnderpearl.java b/src/main/java/net/minecraft/world/entity/projectile/ThrownEnderpearl.java
|
|
index 1b2ada3663cc0739782ac591f2ee1f6d0fb94841..6599f267e30d15ad179e98d3683273cd9bbc3bd0 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/projectile/ThrownEnderpearl.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/projectile/ThrownEnderpearl.java
|
|
@@ -131,4 +131,11 @@ public class ThrownEnderpearl extends ThrowableItemProjectile {
|
|
|
|
return super.changeDimension(destination);
|
|
}
|
|
+
|
|
+ // Purpur start
|
|
+ @Override
|
|
+ protected int getPurpurDespawnRate() {
|
|
+ return this.level.purpurConfig.enderPearlDespawnRate;
|
|
+ }
|
|
+ // Purpur end
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/world/entity/projectile/ThrownExperienceBottle.java b/src/main/java/net/minecraft/world/entity/projectile/ThrownExperienceBottle.java
|
|
index 11d1db5ef709dfb6fa596ebc4f5fff1415ad4f6d..ef771a190c6a437d4cf741a6d5a3be88070e011d 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/projectile/ThrownExperienceBottle.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/projectile/ThrownExperienceBottle.java
|
|
@@ -56,4 +56,11 @@ public class ThrownExperienceBottle extends ThrowableItemProjectile {
|
|
}
|
|
|
|
}
|
|
+
|
|
+ // Purpur start
|
|
+ @Override
|
|
+ protected int getPurpurDespawnRate() {
|
|
+ return this.level.purpurConfig.expBottleDespawnRate;
|
|
+ }
|
|
+ // Purpur end
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/world/entity/projectile/ThrownPotion.java b/src/main/java/net/minecraft/world/entity/projectile/ThrownPotion.java
|
|
index 8676796ff65cd0bd3f215dc7edcf3a5b2291ca27..15e7c19093e74a3354a115074449c1f6a830afc9 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/projectile/ThrownPotion.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/projectile/ThrownPotion.java
|
|
@@ -303,4 +303,11 @@ public class ThrownPotion extends ThrowableItemProjectile implements ItemSupplie
|
|
}
|
|
|
|
}
|
|
+
|
|
+ // Purpur start
|
|
+ @Override
|
|
+ protected int getPurpurDespawnRate() {
|
|
+ return this.level.purpurConfig.potionDespawnRate;
|
|
+ }
|
|
+ // Purpur end
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/world/entity/projectile/WitherSkull.java b/src/main/java/net/minecraft/world/entity/projectile/WitherSkull.java
|
|
index 4a11f7417b438ee5711a720aca3321c88e970b2a..46b74271ce5f614f07754db14d2a552c36f73226 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/projectile/WitherSkull.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/projectile/WitherSkull.java
|
|
@@ -136,4 +136,11 @@ public class WitherSkull extends AbstractHurtingProjectile {
|
|
protected boolean shouldBurn() {
|
|
return false;
|
|
}
|
|
+
|
|
+ // Purpur start
|
|
+ @Override
|
|
+ protected int getPurpurDespawnRate() {
|
|
+ return this.level.purpurConfig.witherSkullDespawnRate;
|
|
+ }
|
|
+ // Purpur end
|
|
}
|
|
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
|
index 73c2312de3140bb95f5b71817b970b4dbfa79307..ec8d6caa531d53d5f7899c135fc067c3f892286c 100644
|
|
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
|
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
|
@@ -273,6 +273,35 @@ public class PurpurWorldConfig {
|
|
totemOfUndyingWorksInInventory = getBoolean("gameplay-mechanics.player.totem-of-undying-works-in-inventory", totemOfUndyingWorksInInventory);
|
|
}
|
|
|
|
+ public int dragonFireballDespawnRate = -1;
|
|
+ public int eggDespawnRate = -1;
|
|
+ public int enderPearlDespawnRate = -1;
|
|
+ public int expBottleDespawnRate = -1;
|
|
+ public int fireworkDespawnRate = -1;
|
|
+ public int fishingHookDespawnRate = -1;
|
|
+ public int largeFireballDespawnRate = -1;
|
|
+ public int llamaSpitDespawnRate = -1;
|
|
+ public int potionDespawnRate = -1;
|
|
+ public int shulkerBulletDespawnRate = -1;
|
|
+ public int smallFireballDespawnRate = -1;
|
|
+ public int snowballDespawnRate = -1;
|
|
+ public int witherSkullDespawnRate = -1;
|
|
+ private void projectileDespawnRateSettings() {
|
|
+ dragonFireballDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.dragon_fireball", dragonFireballDespawnRate);
|
|
+ eggDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.egg", eggDespawnRate);
|
|
+ enderPearlDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.ender_pearl", enderPearlDespawnRate);
|
|
+ expBottleDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.experience_bottle", expBottleDespawnRate);
|
|
+ fireworkDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.firework_rocket", fireworkDespawnRate);
|
|
+ fishingHookDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.fishing_bobber", fishingHookDespawnRate);
|
|
+ largeFireballDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.fireball", largeFireballDespawnRate);
|
|
+ llamaSpitDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.llama_spit", llamaSpitDespawnRate);
|
|
+ potionDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.potion", potionDespawnRate);
|
|
+ shulkerBulletDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.shulker_bullet", shulkerBulletDespawnRate);
|
|
+ smallFireballDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.small_fireball", smallFireballDespawnRate);
|
|
+ snowballDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.snowball", snowballDespawnRate);
|
|
+ witherSkullDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.wither_skull", witherSkullDespawnRate);
|
|
+ }
|
|
+
|
|
public boolean silkTouchEnabled = false;
|
|
public String silkTouchSpawnerName = "<reset><white>Spawner";
|
|
public List<String> silkTouchSpawnerLore = new ArrayList<>();
|