From aea3aa0ad95b997232ae928f2e0c1e93b2d46cf6 Mon Sep 17 00:00:00 2001 From: BillyGalbreath Date: Tue, 8 Feb 2022 15:08:35 -0600 Subject: [PATCH] Fix #892 --- patches/server/0079-Entity-lifespan.patch | 48 +++++++++++-------- ...16-Changeable-Mob-Left-Handed-Chance.patch | 4 +- ...iefing-bypass-to-everything-affected.patch | 10 ++-- ...187-API-for-any-mob-to-burn-daylight.patch | 6 +-- .../server/0242-Signs-allow-color-codes.patch | 4 +- 5 files changed, 39 insertions(+), 33 deletions(-) diff --git a/patches/server/0079-Entity-lifespan.patch b/patches/server/0079-Entity-lifespan.patch index a5dd441fc..bb87084a1 100644 --- a/patches/server/0079-Entity-lifespan.patch +++ b/patches/server/0079-Entity-lifespan.patch @@ -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); } diff --git a/patches/server/0116-Changeable-Mob-Left-Handed-Chance.patch b/patches/server/0116-Changeable-Mob-Left-Handed-Chance.patch index 99225ee7a..c289969d9 100644 --- a/patches/server/0116-Changeable-Mob-Left-Handed-Chance.patch +++ b/patches/server/0116-Changeable-Mob-Left-Handed-Chance.patch @@ -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)); diff --git a/patches/server/0132-Add-mobGriefing-bypass-to-everything-affected.patch b/patches/server/0132-Add-mobGriefing-bypass-to-everything-affected.patch index 426f97742..0757b2bf5 100644 --- a/patches/server/0132-Add-mobGriefing-bypass-to-everything-affected.patch +++ b/patches/server/0132-Add-mobGriefing-bypass-to-everything-affected.patch @@ -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 diff --git a/patches/server/0187-API-for-any-mob-to-burn-daylight.patch b/patches/server/0187-API-for-any-mob-to-burn-daylight.patch index 19d22a8a9..35b32f360 100644 --- a/patches/server/0187-API-for-any-mob-to-burn-daylight.patch +++ b/patches/server/0187-API-for-any-mob-to-burn-daylight.patch @@ -6,7 +6,7 @@ Subject: [PATCH] API for any mob to burn daylight Co-authored by: Encode42 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() { diff --git a/patches/server/0242-Signs-allow-color-codes.patch b/patches/server/0242-Signs-allow-color-codes.patch index 30e59532b..fbbb051d8 100644 --- a/patches/server/0242-Signs-allow-color-codes.patch +++ b/patches/server/0242-Signs-allow-color-codes.patch @@ -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