Files
Purpur/patches/server/0079-Entity-lifespan.patch
Ben Kerllenevich 1ba98f8537 Updated Upstream (Paper & Pufferfish)
Upstream has released updates that appear to apply and compile correctly

Paper Changes:
PaperMC/Paper@a90092e Updated Upstream (CraftBukkit/Spigot) (#7848)
PaperMC/Paper@79e07f3 Fix addPassenger for Marker (#7762)
PaperMC/Paper@182a609 Fix duplicate world keys via createWorld (#7614)
PaperMC/Paper@b6a6544 Provide ComponentSerializer services (#7527)
PaperMC/Paper@3f7fbe3 Fix cb's janky level name in WorldCreator (#7851)
PaperMC/Paper@af3b377 Update ForgeFlower (#7857)
PaperMC/Paper@9667181 Fix OfflinePlayer#getBedSpawnLocation (#7861)
PaperMC/Paper@c123915 Fix FurnaceInventory for smokers and blast furnaces (#7249)
PaperMC/Paper@f7382f5 Remove unneeded UOE when copying biome sources (#7629)
PaperMC/Paper@6b035fd Update default vanilla command perms (#7386)
PaperMC/Paper@f210f67 Update the rewriteForIde for new cb package version (#7242)
PaperMC/Paper@3f7111d Fix EntityEquipment and related javadocs (#7380)
PaperMC/Paper@78e6431 Add default kick msg component (#6886)
PaperMC/Paper@04e1b07 Check HAProxyMessage type is PROXY (#7864)
PaperMC/Paper@00c6ae8 Implement Translatable on CreativeCategory (#7587)
PaperMC/Paper@7602dd2 Sanitize Sent BlockEntity NBT (#7010)
PaperMC/Paper@2d17a50 Add translation keys to GameMode enum (#7081)
PaperMC/Paper@c5caee3 Prevent entity loading causing async lookups (#7553)
PaperMC/Paper@71fe3c6 Add numeric string completion suggestions as int suggestions (#6360)
PaperMC/Paper@b1ac25f Respect x-ray permission in World#refreshChunk (#7214)

Pufferfish Changes:
pufferfish-gg/Pufferfish@6186c1f Updated Upstream (Paper)
pufferfish-gg/Pufferfish@b235d83 Fix regression with SIMD vector sizes not matching 256-bits
pufferfish-gg/Pufferfish@27cb1ac Updated Upstream (Paper)
2022-06-02 10:10:09 -04:00

113 lines
5.0 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: William Blake Galbreath <blake.galbreath@gmail.com>
Date: Sat, 11 Jul 2020 19:41:34 -0500
Subject: [PATCH] Entity lifespan
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index bab75482e1be354f66ef34144d15e628fb118309..0a7d748e0279a1fd7bb97051732ea1843510087b 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -2531,6 +2531,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
double d0 = 36.0D;
if (this.player.distanceToSqr(entity) < 36.0D) {
+ if (entity instanceof Mob mob) mob.ticksSinceLastInteraction = 0; // Purpur
packet.dispatch(new ServerboundInteractPacket.Handler() {
private void performInteraction(InteractionHand enumhand, ServerGamePacketListenerImpl.EntityInteraction playerconnection_a, PlayerInteractEntityEvent event) { // CraftBukkit
ItemStack itemstack = ServerGamePacketListenerImpl.this.player.getItemInHand(enumhand).copy();
diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java
index e1a13fadcf83e84c89a1bfc6d4e4f13f2299ffa5..8f53dd70d815493148709fbdff29a85924d12d00 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<? extends Mob> type, Level world) {
@@ -285,6 +286,7 @@ public abstract class Mob extends LivingEntity {
entityliving = null;
}
}
+ if (entityliving instanceof ServerPlayer) this.ticksSinceLastInteraction = 0; // Purpur
this.target = entityliving;
return true;
// CraftBukkit end
@@ -329,9 +331,29 @@ public abstract class Mob extends LivingEntity {
this.playAmbientSound();
}
+ incrementTicksSinceLastInteraction(); // Purpur
this.level.getProfiler().pop();
}
+ // Purpur start
+ private void incrementTicksSinceLastInteraction() {
+ ++this.ticksSinceLastInteraction;
+ if (getRider() != null) {
+ this.ticksSinceLastInteraction = 0;
+ return;
+ }
+ if (this.level.purpurConfig.entityLifeSpan <= 0) {
+ return; // feature disabled
+ }
+ if (!this.removeWhenFarAway(0) || isPersistenceRequired() || requiresCustomPersistence() || hasCustomName()) {
+ return; // mob persistent
+ }
+ if (this.ticksSinceLastInteraction > this.level.purpurConfig.entityLifeSpan) {
+ this.discard();
+ }
+ }
+ // Purpur end
+
@Override
protected void playHurtSound(DamageSource source) {
this.resetAmbientSoundTime();
@@ -515,6 +537,7 @@ public abstract class Mob extends LivingEntity {
}
nbt.putBoolean("Bukkit.Aware", this.aware); // CraftBukkit
+ nbt.putInt("Purpur.ticksSinceLastInteraction", this.ticksSinceLastInteraction); // Purpur
}
@Override
@@ -585,6 +608,11 @@ public abstract class Mob extends LivingEntity {
this.aware = nbt.getBoolean("Bukkit.Aware");
}
// CraftBukkit end
+ // Purpur start
+ if (nbt.contains("Purpur.ticksSinceLastInteraction")) {
+ this.ticksSinceLastInteraction = nbt.getInt("Purpur.ticksSinceLastInteraction");
+ }
+ // Purpur end
}
@Override
@@ -1614,6 +1642,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 d6f6cf7e17d9cd5b1398aab8e2b9b6df75fea02e..d25af1733601d26b6d2173837a0a5948ae01a6d4 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -124,6 +124,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<Item> itemImmuneToCactus = new ArrayList<>();
public List<Item> itemImmuneToExplosion = new ArrayList<>();
public List<Item> itemImmuneToFire = new ArrayList<>();