mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-18 08:57:44 +01:00
Upstream has released updates that appear to apply and compile correctly Paper Changes: 9a129fa99 Add #getEligibleHumans to SkeletonHorseTrapEvent b5e23c7a6 Fix merging spawning values a932e8ad7 Turn off spigot verbose world by default 8ced89f65 Fix Delegation to vanilla chunk gen
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 91941763dd..2c526846d7 100644
|
|
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
|
|
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
|
|
@@ -2216,6 +2216,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 14996fcaed..8126603aab 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() {
|