From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sat, 11 Jul 2020 19:41:34 -0500 Subject: [PATCH] Entity lifespan diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java index 3249ea9a4b7dc05a1b53373955c267e7a4c7903b..78f7022c6584e634b000cc0c079112fc6cc8e869 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java @@ -129,6 +129,7 @@ public abstract class Mob extends LivingEntity { private BlockPos restrictCenter; private float restrictRadius; + public int ticksSinceLastInteraction; // Purpur public boolean aware = true; // CraftBukkit protected Mob(EntityType type, Level world) { @@ -286,6 +287,7 @@ public abstract class Mob extends LivingEntity { entityliving = null; } } + if (entityliving instanceof ServerPlayer) this.ticksSinceLastInteraction = 0; // Purpur this.target = entityliving; return true; // CraftBukkit end @@ -330,9 +332,35 @@ public abstract class Mob extends LivingEntity { this.playAmbientSound(); } + incrementTicksSinceLastInteraction(); this.level.getProfiler().pop(); } + // Purpur start + private void incrementTicksSinceLastInteraction() { + ++ticksSinceLastInteraction; + //if (hasRider()) { + // ticksSinceLastInteraction = 0; + // return; + //} + if (level.purpurConfig.entityLifeSpan <= 0) { + return; // feature disabled + } + if (!this.removeWhenFarAway(0) || isPersistenceRequired() || requiresCustomPersistence() || hasCustomName()) { + return; // mob persistent + } + if (ticksSinceLastInteraction > level.purpurConfig.entityLifeSpan) { + this.discard(); + } + } + + @Override + public boolean hurt(DamageSource source, float amount) { + if (source.getEntity() instanceof ServerPlayer) this.ticksSinceLastInteraction = 0; // Purpur + return super.hurt(source, amount); + } + // Purpur end + @Override protected void playHurtSound(DamageSource source) { this.resetAmbientSoundTime(); @@ -516,6 +544,7 @@ public abstract class Mob extends LivingEntity { } nbt.putBoolean("Bukkit.Aware", this.aware); // CraftBukkit + nbt.putInt("Purpur.ticksSinceLastInteraction", ticksSinceLastInteraction); // Purpur } @Override @@ -586,6 +615,11 @@ public abstract class Mob extends LivingEntity { this.aware = nbt.getBoolean("Bukkit.Aware"); } // CraftBukkit end + // Purpur start + if (nbt.contains("Purpur.ticksSinceLastInteraction")) { + ticksSinceLastInteraction = nbt.getInt("Purpur.ticksSinceLastInteraction"); + } + // Purpur end } @Override @@ -1607,6 +1641,7 @@ public abstract class Mob extends LivingEntity { this.setLastHurtMob(target); } + if (target instanceof ServerPlayer) this.ticksSinceLastInteraction = 0; // Purpur return flag; } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java index 3e58c569253c0162e506c07527bf7306c88ff8c1..971fef23a4381221164834e2c8f30aaf7ee7cd45 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -112,6 +112,11 @@ public class PurpurWorldConfig { elytraDamagePerTridentBoost = getInt("gameplay-mechanics.elytra.damage-per-boost.trident", elytraDamagePerTridentBoost); } + public int entityLifeSpan = 0; + private void entitySettings() { + entityLifeSpan = getInt("gameplay-mechanics.entity-lifespan", entityLifeSpan); + } + public List itemImmuneToCactus = new ArrayList<>(); public List itemImmuneToExplosion = new ArrayList<>(); public List itemImmuneToFire = new ArrayList<>();