mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-18 17:07:43 +01:00
Upstream has released updates that appears to apply and compile correctly Tuinity Changes: 3b008f5 Optimisations 200f825 Actually unload POI data db64f14 Make sure to despawn entities if they are outside the player general 89276ac Fix villagers aggressively looking at people 8830cef Remove streams for poi searching in some zombie pathfinding a17dc2c Attempt to fix incorrect nearest village distance tracker updating ef8cd34 Fix NPE 3e45700Do not return complex parts for entity by class lookup 2110847 Rewrite getClosestEntity 460581d Fix getClosestEntity not working 2cb36ca Optimise non-flush packet sending 784b838 Some fixes e2dcdd1 Correct return value for ChunkCache#getCubes 968512b Add Velocity natives for encryption and compression (#188) 102d60b Rebuild patches 57fed71 Fix decompression with Velocity natives 442890b Fix decompression with Velocity natives (#191) 0179ea8 Re-Add region manager and notify patch cbffdcc Do not mark entities in unloaded chunks as being in blocks f2eef4a Fixup dev branch patches and store reverted patches in revert folder
122 lines
5.2 KiB
Diff
122 lines
5.2 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/EntityInsentient.java b/src/main/java/net/minecraft/server/EntityInsentient.java
|
|
index 202ccf2a7f..2fcd7f461a 100644
|
|
--- a/src/main/java/net/minecraft/server/EntityInsentient.java
|
|
+++ b/src/main/java/net/minecraft/server/EntityInsentient.java
|
|
@@ -53,7 +53,7 @@ public abstract class EntityInsentient extends EntityLiving {
|
|
private NBTTagCompound by;
|
|
private BlockPosition bz;
|
|
private float bA;
|
|
-
|
|
+ public int ticksSinceLastInteraction; // Purpur
|
|
public boolean aware = true; // CraftBukkit
|
|
|
|
protected EntityInsentient(EntityTypes<? extends EntityInsentient> entitytypes, World world) {
|
|
@@ -203,6 +203,7 @@ public abstract class EntityInsentient extends EntityLiving {
|
|
entityliving = null;
|
|
}
|
|
}
|
|
+ if (entityliving instanceof EntityPlayer) this.ticksSinceLastInteraction = 0; // Purpur
|
|
this.goalTarget = entityliving;
|
|
return true;
|
|
// CraftBukkit end
|
|
@@ -246,10 +247,35 @@ public abstract class EntityInsentient extends EntityLiving {
|
|
this.m();
|
|
this.F();
|
|
}
|
|
-
|
|
+ incrementTicksSinceLastInteraction(); // Purpur
|
|
this.world.getMethodProfiler().exit();
|
|
}
|
|
|
|
+ // Purpur start
|
|
+ private void incrementTicksSinceLastInteraction() {
|
|
+ ++ticksSinceLastInteraction;
|
|
+ //if (hasRider()) {
|
|
+ // ticksSinceLastInteraction = 0;
|
|
+ // return;
|
|
+ //}
|
|
+ if (world.purpurConfig.entityLifeSpan <= 0) {
|
|
+ return; // feature disabled
|
|
+ }
|
|
+ if (!isTypeNotPersistent(0) || isPersistent() || isSpecialPersistence() || hasCustomName()) {
|
|
+ return; // mob persistent
|
|
+ }
|
|
+ if (ticksSinceLastInteraction > world.purpurConfig.entityLifeSpan) {
|
|
+ this.dead = true;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public boolean damageEntity(DamageSource damagesource, float f) {
|
|
+ if (damagesource.getEntity() instanceof EntityPlayer) this.ticksSinceLastInteraction = 0; // Purpur
|
|
+ return super.damageEntity(damagesource, f);
|
|
+ }
|
|
+ // Purpur end
|
|
+
|
|
@Override
|
|
protected void c(DamageSource damagesource) {
|
|
this.m();
|
|
@@ -423,6 +449,7 @@ public abstract class EntityInsentient extends EntityLiving {
|
|
}
|
|
|
|
nbttagcompound.setBoolean("Bukkit.Aware", this.aware); // CraftBukkit
|
|
+ nbttagcompound.setInt("Purpur.ticksSinceLastInteraction", ticksSinceLastInteraction); // Purpur
|
|
}
|
|
|
|
@Override
|
|
@@ -493,6 +520,11 @@ public abstract class EntityInsentient extends EntityLiving {
|
|
this.aware = nbttagcompound.getBoolean("Bukkit.Aware");
|
|
}
|
|
// CraftBukkit end
|
|
+ // Purpur start
|
|
+ if (nbttagcompound.hasKey("Purpur.ticksSinceLastInteraction")) {
|
|
+ ticksSinceLastInteraction = nbttagcompound.getInt("Purpur.ticksSinceLastInteraction");
|
|
+ }
|
|
+ // Purpur end
|
|
}
|
|
|
|
@Override
|
|
@@ -1542,7 +1574,7 @@ public abstract class EntityInsentient extends EntityLiving {
|
|
this.a((EntityLiving) this, entity);
|
|
this.z(entity);
|
|
}
|
|
-
|
|
+ if (entity instanceof EntityPlayer) this.ticksSinceLastInteraction = 0; // Purpur
|
|
return flag;
|
|
}
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
|
|
index 48a9ce8317..6979590187 100644
|
|
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
|
|
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
|
|
@@ -2215,6 +2215,7 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
|
boolean triggerLeashUpdate = itemInHand != null && itemInHand.getItem() == Items.LEAD && entity instanceof EntityInsentient;
|
|
Item origItem = this.player.inventory.getItemInHand() == null ? null : this.player.inventory.getItemInHand().getItem();
|
|
PlayerInteractEntityEvent event;
|
|
+ if (entity instanceof EntityInsentient) ((EntityInsentient) entity).ticksSinceLastInteraction = 0; // Purpur
|
|
if (packetplayinuseentity.b() == PacketPlayInUseEntity.EnumEntityUseAction.INTERACT) {
|
|
event = new PlayerInteractEntityEvent((Player) this.getPlayer(), entity.getBukkitEntity(), (packetplayinuseentity.c() == EnumHand.OFF_HAND) ? EquipmentSlot.OFF_HAND : EquipmentSlot.HAND);
|
|
} else {
|
|
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
|
index 5a4642f1cd..77bb46f911 100644
|
|
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
|
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
|
@@ -103,6 +103,11 @@ public class PurpurWorldConfig {
|
|
}
|
|
}
|
|
|
|
+ public int entityLifeSpan = 0;
|
|
+ private void entitySettings() {
|
|
+ entityLifeSpan = getInt("gameplay-mechanics.entity-lifespan", entityLifeSpan);
|
|
+ }
|
|
+
|
|
public List<Item> itemImmuneToExplosion = new ArrayList<>();
|
|
public List<Item> itemImmuneToFire = new ArrayList<>();
|
|
private void itemSettings() {
|