mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-17 16:37:43 +01:00
Fix #892
This commit is contained in:
@@ -4,8 +4,20 @@ 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 8cb641008f9def46cb74b4be224b3daba64ccefe..e772b87896ce878c34ad226991c6c339792195ae 100644
|
||||
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||
@@ -2517,6 +2517,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 68858cb7376c8c030a1e4039e76c296894168ce3..83fb51ad723f06d002f31bd1caefb778f057a5ad 100644
|
||||
index 68858cb7376c8c030a1e4039e76c296894168ce3..f3c01f5a6a23b65acc6239ea1df9ec8aed5d28f3 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 {
|
||||
@@ -24,63 +36,57 @@ index 68858cb7376c8c030a1e4039e76c296894168ce3..83fb51ad723f06d002f31bd1caefb778
|
||||
this.target = entityliving;
|
||||
return true;
|
||||
// CraftBukkit end
|
||||
@@ -330,9 +332,35 @@ public abstract class Mob extends LivingEntity {
|
||||
@@ -330,9 +332,29 @@ public abstract class Mob extends LivingEntity {
|
||||
this.playAmbientSound();
|
||||
}
|
||||
|
||||
+ incrementTicksSinceLastInteraction();
|
||||
+ incrementTicksSinceLastInteraction(); // Purpur
|
||||
this.level.getProfiler().pop();
|
||||
}
|
||||
|
||||
+ // Purpur start
|
||||
+ private void incrementTicksSinceLastInteraction() {
|
||||
+ ++ticksSinceLastInteraction;
|
||||
+ //if (hasRider()) {
|
||||
+ // ticksSinceLastInteraction = 0;
|
||||
+ // return;
|
||||
+ //}
|
||||
+ if (level.purpurConfig.entityLifeSpan <= 0) {
|
||||
+ ++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 (ticksSinceLastInteraction > level.purpurConfig.entityLifeSpan) {
|
||||
+ if (this.ticksSinceLastInteraction > this.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 {
|
||||
@@ -516,6 +538,7 @@ public abstract class Mob extends LivingEntity {
|
||||
}
|
||||
|
||||
nbt.putBoolean("Bukkit.Aware", this.aware); // CraftBukkit
|
||||
+ nbt.putInt("Purpur.ticksSinceLastInteraction", ticksSinceLastInteraction); // Purpur
|
||||
+ nbt.putInt("Purpur.ticksSinceLastInteraction", this.ticksSinceLastInteraction); // Purpur
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -586,6 +615,11 @@ public abstract class Mob extends LivingEntity {
|
||||
@@ -586,6 +609,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");
|
||||
+ this.ticksSinceLastInteraction = nbt.getInt("Purpur.ticksSinceLastInteraction");
|
||||
+ }
|
||||
+ // Purpur end
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -1611,6 +1645,7 @@ public abstract class Mob extends LivingEntity {
|
||||
@@ -1611,6 +1639,7 @@ public abstract class Mob extends LivingEntity {
|
||||
this.setLastHurtMob(target);
|
||||
}
|
||||
|
||||
|
||||
@@ -5,10 +5,10 @@ Subject: [PATCH] Changeable Mob Left Handed Chance
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java
|
||||
index 83fb51ad723f06d002f31bd1caefb778f057a5ad..48fbb4344587be603e921ebf3f0f0e8b0dc44972 100644
|
||||
index f3c01f5a6a23b65acc6239ea1df9ec8aed5d28f3..6a0ddb0f337bafa0146e77758759ee5c1c85d5ec 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/Mob.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/Mob.java
|
||||
@@ -1229,7 +1229,7 @@ public abstract class Mob extends LivingEntity {
|
||||
@@ -1223,7 +1223,7 @@ public abstract class Mob extends LivingEntity {
|
||||
@Nullable
|
||||
public SpawnGroupData finalizeSpawn(ServerLevelAccessor world, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData entityData, @Nullable CompoundTag entityNbt) {
|
||||
this.getAttribute(Attributes.FOLLOW_RANGE).addPermanentModifier(new AttributeModifier("Random spawn bonus", this.random.nextGaussian() * 0.05D, AttributeModifier.Operation.MULTIPLY_BASE));
|
||||
|
||||
@@ -5,7 +5,7 @@ Subject: [PATCH] Add mobGriefing bypass to everything affected
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
|
||||
index 57f742372485be36f6e854c9a113f0fc3d8f2f13..c34ba47e889f348442d37820e9ba575cb6492ef6 100644
|
||||
index 8f77d232a2ce67f8687946959e28b987f40b4523..f46f532dd5c8eadb6250e0aa6161929c7aaa03e3 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
|
||||
@@ -1689,7 +1689,7 @@ public abstract class LivingEntity extends Entity {
|
||||
@@ -18,10 +18,10 @@ index 57f742372485be36f6e854c9a113f0fc3d8f2f13..c34ba47e889f348442d37820e9ba575c
|
||||
BlockState iblockdata = Blocks.WITHER_ROSE.defaultBlockState();
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java
|
||||
index 48fbb4344587be603e921ebf3f0f0e8b0dc44972..1060f3f27eb5cb205629e939c2a106dfa69d5626 100644
|
||||
index 6a0ddb0f337bafa0146e77758759ee5c1c85d5ec..7fa3cd8a7f1005386f68f61cf17e65fb5c9a4958 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/Mob.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/Mob.java
|
||||
@@ -664,7 +664,7 @@ public abstract class Mob extends LivingEntity {
|
||||
@@ -658,7 +658,7 @@ public abstract class Mob extends LivingEntity {
|
||||
public void aiStep() {
|
||||
super.aiStep();
|
||||
this.level.getProfiler().push("looting");
|
||||
@@ -131,7 +131,7 @@ index d5f4166e3148d1a15ed1f04069ac0b4f5d09ebdc..bf9256fb8d50259fe099d6f4a2b945be
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java
|
||||
index e6772a3c4cda03824ed6a34936e1639979e73a0e..ee9cdd91a969e94b36ddb4cf06b15118d5d7204b 100644
|
||||
index 88532dce1148f3cf4a794894065a57582fe15924..7753e3f094574ec19b75013e2745a057ac840962 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java
|
||||
@@ -565,7 +565,7 @@ public class EnderDragon extends Mob implements Enemy {
|
||||
@@ -144,7 +144,7 @@ index e6772a3c4cda03824ed6a34936e1639979e73a0e..ee9cdd91a969e94b36ddb4cf06b15118
|
||||
// flag1 = this.level.removeBlock(blockposition, false) || flag1;
|
||||
flag1 = true;
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java
|
||||
index 5bb5390ccec6826ead2198b413254dd1bd10f4b8..99b901f1ee202213dae3ab1930342920bbfe3d7a 100644
|
||||
index d40a82fe6045a76c9b8d2294092f63e071f858ef..5271a1143073c06a1a961b05128b8e7fad9eb47b 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java
|
||||
@@ -391,7 +391,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob
|
||||
|
||||
@@ -6,7 +6,7 @@ Subject: [PATCH] API for any mob to burn daylight
|
||||
Co-authored by: Encode42 <me@encode42.dev>
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
|
||||
index a0dfd64a6bd7da1e15abf12e82648d7d781152f5..cfe2230245d6b04619c886a46e3b4aca4c01e50b 100644
|
||||
index 994fa9a62936314420f124d8fa48af585439f91b..b80927752acd563c944ef6928db55e5c99e1a96c 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/Entity.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
|
||||
@@ -4457,5 +4457,18 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, i
|
||||
@@ -89,10 +89,10 @@ index 6710358370ade90410a836242862cd72703dba95..3f2af5dfa530b0a9e86b707aaec3218d
|
||||
|
||||
public boolean isSensitiveToWater() {
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java
|
||||
index 1060f3f27eb5cb205629e939c2a106dfa69d5626..487ceabadd9a38b89de64ccdfbd97ba6304c9ced 100644
|
||||
index 7fa3cd8a7f1005386f68f61cf17e65fb5c9a4958..f760e6f20e65154417e694e94018a3f6760d6ed6 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/Mob.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/Mob.java
|
||||
@@ -1662,17 +1662,7 @@ public abstract class Mob extends LivingEntity {
|
||||
@@ -1656,17 +1656,7 @@ public abstract class Mob extends LivingEntity {
|
||||
}
|
||||
|
||||
public boolean isSunBurnTick() {
|
||||
|
||||
@@ -17,10 +17,10 @@ index f300589fad36c5c9768474a13db74144b760c2a5..61b0b0a847042557d7b9cd20f0ad51f0
|
||||
this.connection.send(new ClientboundBlockUpdatePacket(this.level, sign.getBlockPos()));
|
||||
this.connection.send(new ClientboundOpenSignEditorPacket(sign.getBlockPos()));
|
||||
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||
index f05912f1dea06105a2c3b2248e19d640f082dbc3..28c75287e8b104bc3673420e902e2efe5eb7c9b2 100644
|
||||
index 0439bfb0cba7e3a4c80668f32ae8fbe1e1bf8e4e..bfa9fa16ec033570162acd015a6b2da721a0e9ee 100644
|
||||
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||
@@ -3166,11 +3166,15 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
|
||||
@@ -3167,11 +3167,15 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
|
||||
}
|
||||
// Paper end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user