From 3d61a21422ab6a83896ef6cea92805cf99a2fdba Mon Sep 17 00:00:00 2001 From: granny Date: Thu, 30 Oct 2025 21:48:23 -0700 Subject: [PATCH] Updated Upstream (Paper) Upstream has released updates that appear to apply and compile correctly Paper Changes: PaperMC/Paper@c7714bbf Update PlayerPostRespawnEvent to include full location data (#13237) PaperMC/Paper@9d427a5e [ci/skip] Enable unpick (#13241) PaperMC/Paper@13e9c107 [ci/skip] Update mache for new unpick definitions PaperMC/Paper@9934c173 Set chunk loading radius to 0 in PlayerSpawnFinder --- gradle.properties | 2 +- .../features/0001-Ridables.patch | 342 +++++++++--------- ...-Configurable-entity-base-attributes.patch | 162 ++++----- .../0003-Barrels-and-enderchests-6-rows.patch | 16 +- ...-Minecart-settings-and-WASD-controls.patch | 6 +- ...0007-Villagers-follow-emerald-blocks.patch | 8 +- .../0008-Implement-elytra-settings.patch | 4 +- .../0009-Configurable-jockey-options.patch | 20 +- ...ed-to-crystals-and-crystals-shoot-ph.patch | 10 +- .../0011-Phantoms-burn-in-light.patch | 10 +- ...e-entity-breeding-times-configurable.patch | 72 ++-- ...mes-from-item-forms-of-entities-to-e.patch | 10 +- ...Villager-Clerics-to-farm-Nether-Wart.patch | 6 +- ...fing-override-to-everything-affected.patch | 52 +-- ...oggle-for-water-sensitive-mob-damage.patch | 142 ++++---- ...018-API-for-any-mob-to-burn-daylight.patch | 46 +-- .../0020-Mobs-always-drop-experience.patch | 134 +++---- .../dispenser/DispenseItemBehavior.java.patch | 2 +- .../server/level/ServerPlayer.java.patch | 26 +- .../ServerGamePacketListenerImpl.java.patch | 32 +- .../server/players/PlayerList.java.patch | 22 +- .../world/entity/LivingEntity.java.patch | 26 +- .../ai/goal/RunAroundLikeCrazyGoal.java.patch | 2 +- .../world/entity/ambient/Bat.java.patch | 4 +- .../world/entity/animal/Animal.java.patch | 4 +- .../world/entity/animal/Bee.java.patch | 14 +- .../world/entity/animal/Cat.java.patch | 6 +- .../world/entity/animal/Dolphin.java.patch | 8 +- .../world/entity/animal/Fox.java.patch | 6 +- .../world/entity/animal/IronGolem.java.patch | 8 +- .../world/entity/animal/Ocelot.java.patch | 2 +- .../world/entity/animal/Parrot.java.patch | 12 +- .../world/entity/animal/Rabbit.java.patch | 2 +- .../world/entity/animal/Squid.java.patch | 6 +- .../animal/coppergolem/CopperGolem.java.patch | 8 +- .../world/entity/animal/goat/Goat.java.patch | 2 +- .../world/entity/animal/wolf/Wolf.java.patch | 16 +- .../boss/enderdragon/EnderDragon.java.patch | 4 +- .../entity/boss/wither/WitherBoss.java.patch | 14 +- .../entity/decoration/ArmorStand.java.patch | 6 +- .../world/entity/monster/Ghast.java.patch | 2 +- .../world/entity/monster/Guardian.java.patch | 2 +- .../world/entity/monster/Phantom.java.patch | 2 +- .../world/entity/monster/Ravager.java.patch | 4 +- .../world/entity/monster/Skeleton.java.patch | 2 +- .../world/entity/monster/Zombie.java.patch | 4 +- .../entity/monster/ZombieVillager.java.patch | 2 +- .../entity/monster/hoglin/Hoglin.java.patch | 2 +- .../world/entity/npc/Villager.java.patch | 16 +- .../world/entity/player/Player.java.patch | 14 +- .../entity/projectile/Snowball.java.patch | 2 +- .../world/inventory/AnvilMenu.java.patch | 18 +- .../world/inventory/GrindstoneMenu.java.patch | 10 +- .../minecraft/world/item/AxeItem.java.patch | 18 +- .../world/item/ShovelItem.java.patch | 2 +- .../world/item/SpawnEggItem.java.patch | 4 +- .../world/level/BaseSpawner.java.patch | 2 +- .../minecraft/world/level/Level.java.patch | 6 +- .../level/block/CaveVinesBlock.java.patch | 2 +- .../level/block/ComposterBlock.java.patch | 10 +- .../world/level/block/DoorBlock.java.patch | 6 +- .../AbstractFurnaceBlockEntity.java.patch | 4 +- .../block/entity/SignBlockEntity.java.patch | 4 +- .../world/level/material/LavaFluid.java.patch | 6 +- .../world/level/portal/PortalShape.java.patch | 2 +- 65 files changed, 714 insertions(+), 706 deletions(-) diff --git a/gradle.properties b/gradle.properties index 90209d697..857856000 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ group = org.purpurmc.purpur version = 1.21.10-R0.1-SNAPSHOT mcVersion = 1.21.10 -paperCommit = 2a1871bba6d4406c61c872a2977f62e3d8863efc +paperCommit = 9934c17322980f2f67e2a47d09b08fb8a8a881c6 org.gradle.configuration-cache = true org.gradle.caching = true diff --git a/purpur-server/minecraft-patches/features/0001-Ridables.patch b/purpur-server/minecraft-patches/features/0001-Ridables.patch index b02a7a924..262b95c9d 100644 --- a/purpur-server/minecraft-patches/features/0001-Ridables.patch +++ b/purpur-server/minecraft-patches/features/0001-Ridables.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Ridables diff --git a/net/minecraft/gametest/framework/GameTestHelper.java b/net/minecraft/gametest/framework/GameTestHelper.java -index bbe6a5b6c7a24a77aa2304e21a9ee4fe2e22786b..cff4be95e13d00c12ae8d4074d5d6e14808d9123 100644 +index 6c452f195055afb489f828bfac9f23217ba7653d..7261bb8b2728b6e4ff519874375ef42fff74678a 100644 --- a/net/minecraft/gametest/framework/GameTestHelper.java +++ b/net/minecraft/gametest/framework/GameTestHelper.java @@ -314,6 +314,8 @@ public class GameTestHelper { @@ -42,10 +42,10 @@ index 6f1a3d9323f3d84b6b0f5d443c0875a98e435f59..b8b641caf8b82f4071bfeff37d50ef65 @Override public @Nullable LevelChunk getChunkIfLoaded(int x, int z) { diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java -index 1e490bcbeee18ca80ea79c9300863968894556bc..20f126bac6ed085e6c4a8b52480b2b8cfa679d95 100644 +index d4b57465b7d49f8000de31f75c49f3f7ed333419..3624c08509131b1acbeaffc8c90f8b52d16d8d52 100644 --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java -@@ -774,6 +774,15 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -775,6 +775,15 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc this.trackEnteredOrExitedLavaOnVehicle(); this.updatePlayerAttributes(); this.advancements.flushDirty(this, true); @@ -62,10 +62,10 @@ index 1e490bcbeee18ca80ea79c9300863968894556bc..20f126bac6ed085e6c4a8b52480b2b8c private void updatePlayerAttributes() { diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index a2d5ba92d03696d52a27f514336c6c06fea4e4af..5587142a35ef5887de3d962dd04caa6d76e462d0 100644 +index caae7fc98d13ad92d17b6869b1fe86a79a1f5ba6..cb8d0109932116776dd3be33986d1e1ef775d121 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -2862,6 +2862,8 @@ public class ServerGamePacketListenerImpl +@@ -2863,6 +2863,8 @@ public class ServerGamePacketListenerImpl ServerGamePacketListenerImpl.this.cserver.getPluginManager().callEvent(event); final boolean resendData = event.isCancelled() || !ServerGamePacketListenerImpl.this.player.getItemInHand(hand).is(itemType); @@ -75,7 +75,7 @@ index a2d5ba92d03696d52a27f514336c6c06fea4e4af..5587142a35ef5887de3d962dd04caa6d if (itemType == Items.WATER_BUCKET && target instanceof net.minecraft.world.entity.animal.Bucketable && target instanceof LivingEntity && resendData) { target.resendPossiblyDesyncedEntityData(ServerGamePacketListenerImpl.this.player); // Paper - The entire mob gets deleted, so resend it diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index 7b86550bea4c78e904a60ee234cb711ce04e1076..1c318158e1cc016cf7f26d352519f45bc244cee8 100644 +index 96320494c8c738d86d33820c4acfb504291dc58c..046cf7d2146f68bf1b959ae19fd034a241e12164 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java @@ -3353,6 +3353,13 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name @@ -177,10 +177,10 @@ index 70790f4e813bb950e103314644bd1d767edb4123..8a10da9409e19b03b559d14c6f5238b5 protected ParticleOptions getInkParticle() { return ParticleTypes.GLOW_SQUID_INK; diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java -index 7bddc4c939c37771b615a6364dccd5e5a50b1010..0002c7c4c728f44106ad4984e1d39ff2c76bf86f 100644 +index 679073e7cd4e96a018b9bc6598b2c6fb385f1688..28a6316996fe44228539bd54b019ef40f016f967 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java -@@ -239,9 +239,9 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -240,9 +240,9 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin protected int noActionTime; public float lastHurt; public boolean jumping; @@ -193,7 +193,7 @@ index 7bddc4c939c37771b615a6364dccd5e5a50b1010..0002c7c4c728f44106ad4984e1d39ff2 protected InterpolationHandler interpolation = new InterpolationHandler(this); protected double lerpYHeadRot; protected int lerpHeadSteps; -@@ -290,7 +290,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -291,7 +291,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin protected LivingEntity(EntityType type, Level level) { super(type, level); @@ -202,7 +202,7 @@ index 7bddc4c939c37771b615a6364dccd5e5a50b1010..0002c7c4c728f44106ad4984e1d39ff2 this.craftAttributes = new org.bukkit.craftbukkit.attribute.CraftAttributeMap(this.attributes); // CraftBukkit // CraftBukkit - this.setHealth(this.getMaxHealth()) inlined and simplified to skip the instanceof check for Player, as getBukkitEntity() is not initialized in constructor this.entityData.set(LivingEntity.DATA_HEALTH_ID, this.getMaxHealth()); -@@ -370,6 +370,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -371,6 +371,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin .add(Attributes.CAMERA_DISTANCE) .add(Attributes.WAYPOINT_TRANSMIT_RANGE); } @@ -210,7 +210,7 @@ index 7bddc4c939c37771b615a6364dccd5e5a50b1010..0002c7c4c728f44106ad4984e1d39ff2 @Override protected void checkFallDamage(double y, boolean onGround, BlockState state, BlockPos pos) { -@@ -3063,6 +3064,20 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -3066,6 +3067,20 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin this.move(MoverType.SELF, this.getDeltaMovement()); this.setDeltaMovement(this.getDeltaMovement().scale(0.5)); } else { @@ -231,7 +231,7 @@ index 7bddc4c939c37771b615a6364dccd5e5a50b1010..0002c7c4c728f44106ad4984e1d39ff2 this.moveRelative(amount, relative); this.move(MoverType.SELF, this.getDeltaMovement()); this.setDeltaMovement(this.getDeltaMovement().scale(0.91F)); -@@ -3666,8 +3681,10 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -3669,8 +3684,10 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin this.pushEntities(); profilerFiller.pop(); // Paper start - Add EntityMoveEvent @@ -244,7 +244,7 @@ index 7bddc4c939c37771b615a6364dccd5e5a50b1010..0002c7c4c728f44106ad4984e1d39ff2 Location from = new Location(this.level().getWorld(), this.xo, this.yo, this.zo, this.yRotO, this.xRotO); Location to = new Location(this.level().getWorld(), this.getX(), this.getY(), this.getZ(), this.getYRot(), this.getXRot()); io.papermc.paper.event.entity.EntityMoveEvent event = new io.papermc.paper.event.entity.EntityMoveEvent(this.getBukkitLivingEntity(), from, to.clone()); -@@ -3677,6 +3694,21 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -3680,6 +3697,21 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin this.absSnapTo(event.getTo().getX(), event.getTo().getY(), event.getTo().getZ(), event.getTo().getYaw(), event.getTo().getPitch()); } } @@ -267,7 +267,7 @@ index 7bddc4c939c37771b615a6364dccd5e5a50b1010..0002c7c4c728f44106ad4984e1d39ff2 // Paper end - Add EntityMoveEvent if (this.level() instanceof ServerLevel serverLevel && this.isSensitiveToWater() && this.isInWaterOrRain()) { diff --git a/net/minecraft/world/entity/Mob.java b/net/minecraft/world/entity/Mob.java -index 2697ca37851e2750c5217faf147dbac1113b8348..996e9e098ed510cdadc82e4f133b6aec509040d3 100644 +index 7d98c5aaf29d2204ed43f221f95913ac749419db..bb1d33f759b74174f5c1a45c351a2d2c243c4f03 100644 --- a/net/minecraft/world/entity/Mob.java +++ b/net/minecraft/world/entity/Mob.java @@ -156,8 +156,8 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab @@ -447,10 +447,10 @@ index d7f9b3b2b1077ea10e8f64b87c8f4c4354e90858..713f62b34a91fa76f40e49a5e390145f this.lookAtCooldown--; this.getYRotD().ifPresent(rotationWanted -> this.mob.yHeadRot = this.rotateTowards(this.mob.yHeadRot, rotationWanted + 20.0F, this.yMaxRotSpeed)); diff --git a/net/minecraft/world/entity/ambient/Bat.java b/net/minecraft/world/entity/ambient/Bat.java -index 40558cfe11f6ea28d777f17814cc08f6d92617d3..16cebb7e0ba7070c67dee00a67c29c3f808d8048 100644 +index acb402027bbb16a1b590415b2358cf03147119c0..0720d331eaae7c9f12d654cef278ffcf7510597b 100644 --- a/net/minecraft/world/entity/ambient/Bat.java +++ b/net/minecraft/world/entity/ambient/Bat.java -@@ -44,11 +44,58 @@ public class Bat extends AmbientCreature { +@@ -45,11 +45,58 @@ public class Bat extends AmbientCreature { public Bat(EntityType type, Level level) { super(type, level); @@ -509,7 +509,7 @@ index 40558cfe11f6ea28d777f17814cc08f6d92617d3..16cebb7e0ba7070c67dee00a67c29c3f @Override public boolean isFlapping() { return !this.isResting() && this.tickCount % 10.0F == 0.0F; -@@ -100,7 +147,7 @@ public class Bat extends AmbientCreature { +@@ -101,7 +148,7 @@ public class Bat extends AmbientCreature { } public static AttributeSupplier.Builder createAttributes() { @@ -518,7 +518,7 @@ index 40558cfe11f6ea28d777f17814cc08f6d92617d3..16cebb7e0ba7070c67dee00a67c29c3f } public boolean isResting() { -@@ -131,6 +178,14 @@ public class Bat extends AmbientCreature { +@@ -132,6 +179,14 @@ public class Bat extends AmbientCreature { @Override protected void customServerAiStep(ServerLevel level) { @@ -617,10 +617,10 @@ index ee762c5f6bba53e78ba7c478ebfad19f017f31ca..9ffd362fbf977e5df272ca78927cd02f double d = this.wantedX - this.fish.getX(); double d1 = this.wantedY - this.fish.getY(); diff --git a/net/minecraft/world/entity/animal/Bee.java b/net/minecraft/world/entity/animal/Bee.java -index 60031ee5b3f1b8783813dae304b14a968ed18934..c0abcf209d45146d1f98599c2f4d16877431a46c 100644 +index 3988a8e8ba319e5e80a9fba916b62bdb4996e08f..345f10125d80ead9341d285ed8d3faa3013e5b40 100644 --- a/net/minecraft/world/entity/animal/Bee.java +++ b/net/minecraft/world/entity/animal/Bee.java -@@ -152,6 +152,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -153,6 +153,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { public Bee(EntityType type, Level level) { super(type, level); @@ -628,7 +628,7 @@ index 60031ee5b3f1b8783813dae304b14a968ed18934..c0abcf209d45146d1f98599c2f4d1687 // Paper start - Fix MC-167279 class BeeFlyingMoveControl extends FlyingMoveControl { public BeeFlyingMoveControl(final Mob mob, final int maxTurn, final boolean hoversInPlace) { -@@ -160,11 +161,24 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -161,11 +162,24 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { @Override public void tick() { @@ -653,7 +653,7 @@ index 60031ee5b3f1b8783813dae304b14a968ed18934..c0abcf209d45146d1f98599c2f4d1687 } this.moveControl = new BeeFlyingMoveControl(this, 20, true); // Paper end - Fix MC-167279 -@@ -176,6 +190,40 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -177,6 +191,40 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { this.setPathfindingMalus(PathType.FENCE, -1.0F); } @@ -694,7 +694,7 @@ index 60031ee5b3f1b8783813dae304b14a968ed18934..c0abcf209d45146d1f98599c2f4d1687 @Override protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); -@@ -190,6 +238,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -191,6 +239,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { @Override protected void registerGoals() { @@ -702,7 +702,7 @@ index 60031ee5b3f1b8783813dae304b14a968ed18934..c0abcf209d45146d1f98599c2f4d1687 this.goalSelector.addGoal(0, new Bee.BeeAttackGoal(this, 1.4F, true)); this.goalSelector.addGoal(1, new Bee.BeeEnterHiveGoal()); this.goalSelector.addGoal(2, new BreedGoal(this, 1.0)); -@@ -207,6 +256,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -208,6 +257,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { this.goalSelector.addGoal(7, new Bee.BeeGrowCropGoal()); this.goalSelector.addGoal(8, new Bee.BeeWanderGoal()); this.goalSelector.addGoal(9, new FloatGoal(this)); @@ -710,7 +710,7 @@ index 60031ee5b3f1b8783813dae304b14a968ed18934..c0abcf209d45146d1f98599c2f4d1687 this.targetSelector.addGoal(1, new Bee.BeeHurtByOtherGoal(this).setAlertOthers(new Class[0])); this.targetSelector.addGoal(2, new Bee.BeeBecomeAngryTargetGoal(this)); this.targetSelector.addGoal(3, new ResetUniversalAngerTargetGoal<>(this, true)); -@@ -1086,15 +1136,15 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -1087,15 +1137,15 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { } } @@ -730,10 +730,10 @@ index 60031ee5b3f1b8783813dae304b14a968ed18934..c0abcf209d45146d1f98599c2f4d1687 } diff --git a/net/minecraft/world/entity/animal/Cat.java b/net/minecraft/world/entity/animal/Cat.java -index 0796795bc2d1aa84051ce184a769614cdaf7b843..59bcbf6d5d844000ab26c0ca7e6674c7ac6f35ed 100644 +index f6912836026638900fa5929b9550386a004fef11..dc207012d233de1fa056bb318e3e143496743ebb 100644 --- a/net/minecraft/world/entity/animal/Cat.java +++ b/net/minecraft/world/entity/animal/Cat.java -@@ -92,10 +92,36 @@ public class Cat extends TamableAnimal { +@@ -93,10 +93,36 @@ public class Cat extends TamableAnimal { this.reassessTameGoals(); } @@ -770,7 +770,7 @@ index 0796795bc2d1aa84051ce184a769614cdaf7b843..59bcbf6d5d844000ab26c0ca7e6674c7 this.goalSelector.addGoal(1, new TamableAnimal.TamableAnimalPanicGoal(1.5)); this.goalSelector.addGoal(2, new SitWhenOrderedToGoal(this)); this.goalSelector.addGoal(3, new Cat.CatRelaxOnOwnerGoal(this)); -@@ -108,6 +134,7 @@ public class Cat extends TamableAnimal { +@@ -109,6 +135,7 @@ public class Cat extends TamableAnimal { this.goalSelector.addGoal(10, new BreedGoal(this, 0.8)); this.goalSelector.addGoal(11, new WaterAvoidingRandomStrollGoal(this, 0.8, 1.0000001E-5F)); this.goalSelector.addGoal(12, new LookAtPlayerGoal(this, Player.class, 10.0F)); @@ -778,7 +778,7 @@ index 0796795bc2d1aa84051ce184a769614cdaf7b843..59bcbf6d5d844000ab26c0ca7e6674c7 this.targetSelector.addGoal(1, new NonTameRandomTargetGoal<>(this, Rabbit.class, false, null)); this.targetSelector.addGoal(1, new NonTameRandomTargetGoal<>(this, Turtle.class, false, Turtle.BABY_ON_LAND_SELECTOR)); } -@@ -374,6 +401,7 @@ public class Cat extends TamableAnimal { +@@ -375,6 +402,7 @@ public class Cat extends TamableAnimal { @Override public InteractionResult mobInteract(Player player, InteractionHand hand) { @@ -870,10 +870,10 @@ index 83b399be5af622aa413f1fd6ad82d920ae92b454..380c8e3c9c790d626cd9f8d4b1f13838 protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); diff --git a/net/minecraft/world/entity/animal/Dolphin.java b/net/minecraft/world/entity/animal/Dolphin.java -index 28785ef53fbea7a0413c16b0eaf28a2092e314d8..68dfce3c68cb4a861932e76dfa39f1b4f3724a50 100644 +index 487a0e850d1d4f4c2e9c1175708712146f809a68..703bb05c293b3ae13745c014cbd5f12864dec003 100644 --- a/net/minecraft/world/entity/animal/Dolphin.java +++ b/net/minecraft/world/entity/animal/Dolphin.java -@@ -75,14 +75,82 @@ public class Dolphin extends AgeableWaterCreature { +@@ -76,14 +76,82 @@ public class Dolphin extends AgeableWaterCreature { @Nullable public BlockPos treasurePos; private boolean isNaturallyAggressiveToPlayers; // Purpur - Dolphins naturally aggressive to players chance @@ -957,7 +957,7 @@ index 28785ef53fbea7a0413c16b0eaf28a2092e314d8..68dfce3c68cb4a861932e76dfa39f1b4 @Nullable @Override public SpawnGroupData finalizeSpawn( -@@ -159,6 +227,7 @@ public class Dolphin extends AgeableWaterCreature { +@@ -160,6 +228,7 @@ public class Dolphin extends AgeableWaterCreature { this.goalSelector.addGoal(0, new BreathAirGoal(this)); this.goalSelector.addGoal(0, new TryFindWaterGoal(this)); this.goalSelector.addGoal(1, new MeleeAttackGoal(this, 1.2000000476837158D, true)); // Purpur - Dolphins naturally aggressive to players chance @@ -965,7 +965,7 @@ index 28785ef53fbea7a0413c16b0eaf28a2092e314d8..68dfce3c68cb4a861932e76dfa39f1b4 this.goalSelector.addGoal(1, new Dolphin.DolphinSwimToTreasureGoal(this)); this.goalSelector.addGoal(2, new Dolphin.DolphinSwimWithPlayerGoal(this, 4.0)); this.goalSelector.addGoal(4, new RandomSwimmingGoal(this, 1.0, 10)); -@@ -169,6 +238,7 @@ public class Dolphin extends AgeableWaterCreature { +@@ -170,6 +239,7 @@ public class Dolphin extends AgeableWaterCreature { this.goalSelector.addGoal(8, new Dolphin.PlayWithItemsGoal()); this.goalSelector.addGoal(8, new FollowBoatGoal(this)); this.goalSelector.addGoal(9, new AvoidEntityGoal<>(this, Guardian.class, 8.0F, 1.0, 1.0)); @@ -973,7 +973,7 @@ index 28785ef53fbea7a0413c16b0eaf28a2092e314d8..68dfce3c68cb4a861932e76dfa39f1b4 this.targetSelector.addGoal(1, new HurtByTargetGoal(this, Guardian.class).setAlertOthers()); this.targetSelector.addGoal(2, new net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, (ignored, ignored2) -> isNaturallyAggressiveToPlayers)); // Purpur - Dolphins naturally aggressive to players chance } -@@ -214,7 +284,7 @@ public class Dolphin extends AgeableWaterCreature { +@@ -215,7 +285,7 @@ public class Dolphin extends AgeableWaterCreature { @Override protected boolean canRide(Entity entity) { @@ -982,7 +982,7 @@ index 28785ef53fbea7a0413c16b0eaf28a2092e314d8..68dfce3c68cb4a861932e76dfa39f1b4 } @Override -@@ -243,6 +313,11 @@ public class Dolphin extends AgeableWaterCreature { +@@ -244,6 +314,11 @@ public class Dolphin extends AgeableWaterCreature { @Override public void tick() { super.tick(); @@ -995,10 +995,10 @@ index 28785ef53fbea7a0413c16b0eaf28a2092e314d8..68dfce3c68cb4a861932e76dfa39f1b4 this.setAirSupply(this.getMaxAirSupply()); } else { diff --git a/net/minecraft/world/entity/animal/Fox.java b/net/minecraft/world/entity/animal/Fox.java -index f7da92c77fd1038750014d0ee3e878101176127a..6b931060a7be54aa6a1c0d196c52c4e4b56c0a95 100644 +index 30a781b28fc4c78ca581fba405fae66f5b72251e..1da6563a3a1d85e562b85435bb27cd82bbc05faf 100644 --- a/net/minecraft/world/entity/animal/Fox.java +++ b/net/minecraft/world/entity/animal/Fox.java -@@ -142,6 +142,44 @@ public class Fox extends Animal { +@@ -144,6 +144,44 @@ public class Fox extends Animal { this.getNavigation().setRequiredPathLength(32.0F); } @@ -1043,7 +1043,7 @@ index f7da92c77fd1038750014d0ee3e878101176127a..6b931060a7be54aa6a1c0d196c52c4e4 @Override protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); -@@ -161,6 +199,7 @@ public class Fox extends Animal { +@@ -163,6 +201,7 @@ public class Fox extends Animal { this, AbstractFish.class, 20, false, false, (entity, level) -> entity instanceof AbstractSchoolingFish ); this.goalSelector.addGoal(0, new Fox.FoxFloatGoal()); @@ -1051,7 +1051,7 @@ index f7da92c77fd1038750014d0ee3e878101176127a..6b931060a7be54aa6a1c0d196c52c4e4 this.goalSelector.addGoal(0, new ClimbOnTopOfPowderSnowGoal(this, this.level())); this.goalSelector.addGoal(1, new Fox.FaceplantGoal()); this.goalSelector.addGoal(2, new Fox.FoxPanicGoal(2.2)); -@@ -186,6 +225,7 @@ public class Fox extends Animal { +@@ -188,6 +227,7 @@ public class Fox extends Animal { this.goalSelector.addGoal(11, new Fox.FoxSearchForItemsGoal()); this.goalSelector.addGoal(12, new Fox.FoxLookAtPlayerGoal(this, Player.class, 24.0F)); this.goalSelector.addGoal(13, new Fox.PerchAndSearchGoal()); @@ -1059,7 +1059,7 @@ index f7da92c77fd1038750014d0ee3e878101176127a..6b931060a7be54aa6a1c0d196c52c4e4 this.targetSelector .addGoal( 3, -@@ -1115,15 +1155,15 @@ public class Fox extends Animal { +@@ -1117,15 +1157,15 @@ public class Fox extends Animal { } } @@ -1078,7 +1078,7 @@ index f7da92c77fd1038750014d0ee3e878101176127a..6b931060a7be54aa6a1c0d196c52c4e4 } } -@@ -1159,15 +1199,15 @@ public class Fox extends Animal { +@@ -1161,15 +1201,15 @@ public class Fox extends Animal { } } @@ -1116,10 +1116,10 @@ index aafbbe791f6913748c5aed94b7aef4cd92692c8a..eb14c2c508efd927d4696ac4e7cd4201 protected void ageBoundaryReached() { if (this.isBaby()) { diff --git a/net/minecraft/world/entity/animal/IronGolem.java b/net/minecraft/world/entity/animal/IronGolem.java -index ff8402137475fc1eb8ab4240579135e604bb7f92..ed2ddcb4d4736b384a1b90cc4ea0e086e9d53102 100644 +index 838cc49d1a8b1b9758121c07de9e483966eef245..250c5b75b9e0d49eb8834ca9e7bbb5f8c029acb2 100644 --- a/net/minecraft/world/entity/animal/IronGolem.java +++ b/net/minecraft/world/entity/animal/IronGolem.java -@@ -75,9 +75,28 @@ public class IronGolem extends AbstractGolem implements NeutralMob { +@@ -76,9 +76,28 @@ public class IronGolem extends AbstractGolem implements NeutralMob { } // Purpur end - Summoner API @@ -1148,7 +1148,7 @@ index ff8402137475fc1eb8ab4240579135e604bb7f92..ed2ddcb4d4736b384a1b90cc4ea0e086 this.goalSelector.addGoal(1, new MeleeAttackGoal(this, 1.0, true)); this.goalSelector.addGoal(2, new MoveTowardsTargetGoal(this, 0.9, 32.0F)); this.goalSelector.addGoal(2, new MoveBackToVillageGoal(this, 0.6, false)); -@@ -85,6 +104,7 @@ public class IronGolem extends AbstractGolem implements NeutralMob { +@@ -86,6 +105,7 @@ public class IronGolem extends AbstractGolem implements NeutralMob { this.goalSelector.addGoal(5, new OfferFlowerGoal(this)); this.goalSelector.addGoal(7, new LookAtPlayerGoal(this, Player.class, 6.0F)); this.goalSelector.addGoal(8, new RandomLookAroundGoal(this)); @@ -1156,7 +1156,7 @@ index ff8402137475fc1eb8ab4240579135e604bb7f92..ed2ddcb4d4736b384a1b90cc4ea0e086 this.targetSelector.addGoal(1, new DefendVillageTargetGoal(this)); this.targetSelector.addGoal(2, new HurtByTargetGoal(this)); this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, this::isAngryAt)); -@@ -273,12 +293,12 @@ public class IronGolem extends AbstractGolem implements NeutralMob { +@@ -274,12 +294,12 @@ public class IronGolem extends AbstractGolem implements NeutralMob { protected InteractionResult mobInteract(Player player, InteractionHand hand) { ItemStack itemInHand = player.getItemInHand(hand); if (!itemInHand.is(Items.IRON_INGOT)) { @@ -1209,10 +1209,10 @@ index 3ce300a6abc4ee39f010ff5318b64c50e732742b..9de016cb4e1aba2ab8ff4f16827b3450 // Paper end - custom shear drops } diff --git a/net/minecraft/world/entity/animal/Ocelot.java b/net/minecraft/world/entity/animal/Ocelot.java -index 3320024f208dc86eb344f195b61622d6e7989989..91fa99c852e79e572165322212b0291e73ebf0b3 100644 +index ae93426d4bd7f82c3beb90b2c7a957ccbf24ddd7..7db9d782a62cfac5f851a6242f4c9a24784648dc 100644 --- a/net/minecraft/world/entity/animal/Ocelot.java +++ b/net/minecraft/world/entity/animal/Ocelot.java -@@ -64,6 +64,23 @@ public class Ocelot extends Animal { +@@ -65,6 +65,23 @@ public class Ocelot extends Animal { this.reassessTrustingGoals(); } @@ -1236,7 +1236,7 @@ index 3320024f208dc86eb344f195b61622d6e7989989..91fa99c852e79e572165322212b0291e public boolean isTrusting() { return this.entityData.get(DATA_TRUSTING); } -@@ -95,12 +112,14 @@ public class Ocelot extends Animal { +@@ -96,12 +113,14 @@ public class Ocelot extends Animal { protected void registerGoals() { this.temptGoal = new Ocelot.OcelotTemptGoal(this, 0.6, itemStack -> itemStack.is(ItemTags.OCELOT_FOOD), true); this.goalSelector.addGoal(1, new FloatGoal(this)); @@ -1252,7 +1252,7 @@ index 3320024f208dc86eb344f195b61622d6e7989989..91fa99c852e79e572165322212b0291e this.targetSelector.addGoal(1, new NearestAttackableTargetGoal<>(this, Turtle.class, 10, false, false, Turtle.BABY_ON_LAND_SELECTOR)); } diff --git a/net/minecraft/world/entity/animal/Panda.java b/net/minecraft/world/entity/animal/Panda.java -index 4b8b56c1f4ee31c235a9a68746185826cd9efa41..7be63b0738a1962a4b2563e78ae72f48bc330a2a 100644 +index 4f4bfcc6b55770d9aed10904f3ac090f596d1741..180d356bf24d20dc8c8534fdb59222e18672f1b4 100644 --- a/net/minecraft/world/entity/animal/Panda.java +++ b/net/minecraft/world/entity/animal/Panda.java @@ -107,6 +107,32 @@ public class Panda extends Animal { @@ -1344,10 +1344,10 @@ index 4b8b56c1f4ee31c235a9a68746185826cd9efa41..7be63b0738a1962a4b2563e78ae72f48 } } diff --git a/net/minecraft/world/entity/animal/Parrot.java b/net/minecraft/world/entity/animal/Parrot.java -index 11c1de6f66afa74506901c88ab8de95ea4fb20e0..e0374a72738f8110e41471cd0ef2d044be616523 100644 +index f5bd84355cd57b7a8c3ccd0f9ed2f714ff21233b..31e5ca2b2e0aaae75f4f2ffc2ada7d0224652608 100644 --- a/net/minecraft/world/entity/animal/Parrot.java +++ b/net/minecraft/world/entity/animal/Parrot.java -@@ -131,12 +131,68 @@ public class Parrot extends ShoulderRidingEntity implements FlyingAnimal { +@@ -132,12 +132,68 @@ public class Parrot extends ShoulderRidingEntity implements FlyingAnimal { public Parrot(EntityType type, Level level) { super(type, level); @@ -1417,7 +1417,7 @@ index 11c1de6f66afa74506901c88ab8de95ea4fb20e0..e0374a72738f8110e41471cd0ef2d044 @Nullable @Override public SpawnGroupData finalizeSpawn( -@@ -157,9 +213,11 @@ public class Parrot extends ShoulderRidingEntity implements FlyingAnimal { +@@ -158,9 +214,11 @@ public class Parrot extends ShoulderRidingEntity implements FlyingAnimal { @Override protected void registerGoals() { @@ -1547,7 +1547,7 @@ index 59288cb00951808d3ea7921875c9cbecb2de7f98..6ffb35630bab1303edb2179e4dcf749f public float getStandingAnimationScale(float partialTick) { diff --git a/net/minecraft/world/entity/animal/Pufferfish.java b/net/minecraft/world/entity/animal/Pufferfish.java -index 29ae59edc8750ae7b10d88a425868dca7775a266..51dd0333b02ee232f3e2b17c9ae3617ea36f18ba 100644 +index e29d2b09490f2b6ce10d6254c6c9a56b79b2374b..77862aea7b2bbc931d34c4e4ebd336bb5d5755d6 100644 --- a/net/minecraft/world/entity/animal/Pufferfish.java +++ b/net/minecraft/world/entity/animal/Pufferfish.java @@ -47,6 +47,18 @@ public class Pufferfish extends AbstractFish { @@ -1570,10 +1570,10 @@ index 29ae59edc8750ae7b10d88a425868dca7775a266..51dd0333b02ee232f3e2b17c9ae3617e protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); diff --git a/net/minecraft/world/entity/animal/Rabbit.java b/net/minecraft/world/entity/animal/Rabbit.java -index 4b8a3e2299c8b216d570c57c2b449824e46a34a1..f50b38c98ec6eb96a72dde926a20e9a3803ee630 100644 +index aa5bca6c0633cffdbb79ecc50d68e5c4bc2e54cf..f2ae78ccf93dbd7617f04d3d13b8b809fde0d151 100644 --- a/net/minecraft/world/entity/animal/Rabbit.java +++ b/net/minecraft/world/entity/animal/Rabbit.java -@@ -91,6 +91,7 @@ public class Rabbit extends Animal { +@@ -93,6 +93,7 @@ public class Rabbit extends Animal { private boolean wasOnGround; private int jumpDelayTicks; public int moreCarrotTicks = 0; @@ -1581,7 +1581,7 @@ index 4b8a3e2299c8b216d570c57c2b449824e46a34a1..f50b38c98ec6eb96a72dde926a20e9a3 public Rabbit(EntityType type, Level level) { super(type, level); -@@ -99,9 +100,55 @@ public class Rabbit extends Animal { +@@ -101,9 +102,55 @@ public class Rabbit extends Animal { // this.setSpeedModifier(0.0); // CraftBukkit } @@ -1637,7 +1637,7 @@ index 4b8a3e2299c8b216d570c57c2b449824e46a34a1..f50b38c98ec6eb96a72dde926a20e9a3 this.goalSelector.addGoal(1, new ClimbOnTopOfPowderSnowGoal(this, this.level())); this.goalSelector.addGoal(1, new Rabbit.RabbitPanicGoal(this, 2.2)); this.goalSelector.addGoal(2, new BreedGoal(this, 0.8)); -@@ -116,6 +163,14 @@ public class Rabbit extends Animal { +@@ -118,6 +165,14 @@ public class Rabbit extends Animal { @Override protected float getJumpPower() { @@ -1652,7 +1652,7 @@ index 4b8a3e2299c8b216d570c57c2b449824e46a34a1..f50b38c98ec6eb96a72dde926a20e9a3 float f = 0.3F; if (this.moveControl.getSpeedModifier() <= 0.6) { f = 0.2F; -@@ -183,6 +238,12 @@ public class Rabbit extends Animal { +@@ -185,6 +240,12 @@ public class Rabbit extends Animal { @Override public void customServerAiStep(ServerLevel level) { @@ -1665,7 +1665,7 @@ index 4b8a3e2299c8b216d570c57c2b449824e46a34a1..f50b38c98ec6eb96a72dde926a20e9a3 if (this.jumpDelayTicks > 0) { this.jumpDelayTicks--; } -@@ -511,7 +572,7 @@ public class Rabbit extends Animal { +@@ -513,7 +574,7 @@ public class Rabbit extends Animal { } } @@ -1674,7 +1674,7 @@ index 4b8a3e2299c8b216d570c57c2b449824e46a34a1..f50b38c98ec6eb96a72dde926a20e9a3 private final Rabbit rabbit; private double nextJumpSpeed; -@@ -521,14 +582,14 @@ public class Rabbit extends Animal { +@@ -523,14 +584,14 @@ public class Rabbit extends Animal { } @Override @@ -1777,10 +1777,10 @@ index 8fa983d168874ef1497dc38b673295eb76a4e8b4..00af403efafbdd7274524403b2212c15 } diff --git a/net/minecraft/world/entity/animal/Squid.java b/net/minecraft/world/entity/animal/Squid.java -index 9780ee6ad6954f67c1acaa84d1ebd934cd6c3ffb..39c8703d3034b48c9218adf4d347bd5e24231145 100644 +index 1f63894c82f39e43a25b9900f8f92f83cc5b6e66..ff12229101aae273e5e887a7761ce1ba1b34e0b9 100644 --- a/net/minecraft/world/entity/animal/Squid.java +++ b/net/minecraft/world/entity/animal/Squid.java -@@ -69,9 +69,32 @@ public class Squid extends AgeableWaterCreature { +@@ -70,9 +70,32 @@ public class Squid extends AgeableWaterCreature { } // Purpur end - Flying squids! Oh my! @@ -1813,7 +1813,7 @@ index 9780ee6ad6954f67c1acaa84d1ebd934cd6c3ffb..39c8703d3034b48c9218adf4d347bd5e this.goalSelector.addGoal(1, new Squid.SquidFleeGoal()); } -@@ -325,6 +348,37 @@ public class Squid extends AgeableWaterCreature { +@@ -326,6 +349,37 @@ public class Squid extends AgeableWaterCreature { @Override public void tick() { @@ -1875,10 +1875,10 @@ index 548751d245acaf901880026a8efd9c8cea699fe5..6c2497ab50dd7ab6d5a7043935b0beee return "entity.minecraft.tropical_fish.predefined." + variantId; } diff --git a/net/minecraft/world/entity/animal/Turtle.java b/net/minecraft/world/entity/animal/Turtle.java -index 3731808f9a6a23068990bdb87a24beae73c6f616..bb54f64cc36939bfd1e6ca57a1128b813fab2ad7 100644 +index 451c9c5bc24f0b7fb6b946a3497ef2d101d59fcd..f10c2e3346fe8102e0b3a93f8b57b8d262172bea 100644 --- a/net/minecraft/world/entity/animal/Turtle.java +++ b/net/minecraft/world/entity/animal/Turtle.java -@@ -86,6 +86,23 @@ public class Turtle extends Animal { +@@ -87,6 +87,23 @@ public class Turtle extends Animal { this.moveControl = new Turtle.TurtleMoveControl(this); } @@ -1902,7 +1902,7 @@ index 3731808f9a6a23068990bdb87a24beae73c6f616..bb54f64cc36939bfd1e6ca57a1128b81 public void setHomePos(BlockPos homePos) { this.homePos = homePos; } -@@ -145,6 +162,7 @@ public class Turtle extends Animal { +@@ -146,6 +163,7 @@ public class Turtle extends Animal { @Override protected void registerGoals() { @@ -1910,7 +1910,7 @@ index 3731808f9a6a23068990bdb87a24beae73c6f616..bb54f64cc36939bfd1e6ca57a1128b81 this.goalSelector.addGoal(0, new Turtle.TurtlePanicGoal(this, 1.2)); this.goalSelector.addGoal(1, new Turtle.TurtleBreedGoal(this, 1.0)); this.goalSelector.addGoal(1, new Turtle.TurtleLayEggGoal(this, 1.0)); -@@ -493,12 +511,14 @@ public class Turtle extends Animal { +@@ -494,12 +512,14 @@ public class Turtle extends Animal { } } @@ -1926,7 +1926,7 @@ index 3731808f9a6a23068990bdb87a24beae73c6f616..bb54f64cc36939bfd1e6ca57a1128b81 } private void updateSpeed() { -@@ -517,7 +537,7 @@ public class Turtle extends Animal { +@@ -518,7 +538,7 @@ public class Turtle extends Animal { } @Override @@ -1935,7 +1935,7 @@ index 3731808f9a6a23068990bdb87a24beae73c6f616..bb54f64cc36939bfd1e6ca57a1128b81 this.updateSpeed(); if (this.operation == MoveControl.Operation.MOVE_TO && !this.turtle.getNavigation().isDone()) { double d = this.wantedX - this.turtle.getX(); -@@ -531,7 +551,7 @@ public class Turtle extends Animal { +@@ -532,7 +552,7 @@ public class Turtle extends Animal { float f = (float)(Mth.atan2(d2, d) * 180.0F / (float)Math.PI) - 90.0F; this.turtle.setYRot(this.rotlerp(this.turtle.getYRot(), f, 90.0F)); this.turtle.yBodyRot = this.turtle.getYRot(); @@ -1945,10 +1945,10 @@ index 3731808f9a6a23068990bdb87a24beae73c6f616..bb54f64cc36939bfd1e6ca57a1128b81 this.turtle.setDeltaMovement(this.turtle.getDeltaMovement().add(0.0, this.turtle.getSpeed() * d1 * 0.1, 0.0)); } diff --git a/net/minecraft/world/entity/animal/allay/Allay.java b/net/minecraft/world/entity/animal/allay/Allay.java -index b855f7cd640d9c6ae4ff3b79e54a8441ed466cad..4d08642a006d4b7d9b858d8c594c2888f0d7e595 100644 +index f0dc6dfa78da497aa9a7a021e71f8be397016a93..1811fed8085b7045003a6cc2731ce8fc6b4d74ea 100644 --- a/net/minecraft/world/entity/animal/allay/Allay.java +++ b/net/minecraft/world/entity/animal/allay/Allay.java -@@ -113,10 +113,23 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS +@@ -114,10 +114,23 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS private float spinningAnimationTicks; private float spinningAnimationTicks0; public boolean forceDancing = false; // CraftBukkit @@ -1973,7 +1973,7 @@ index b855f7cd640d9c6ae4ff3b79e54a8441ed466cad..4d08642a006d4b7d9b858d8c594c2888 this.setCanPickUpLoot(this.canPickUpLoot()); this.vibrationUser = new Allay.VibrationUser(); this.vibrationData = new VibrationSystem.Data(); -@@ -132,6 +145,28 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS +@@ -133,6 +146,28 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS } // CraftBukkit end @@ -2002,7 +2002,7 @@ index b855f7cd640d9c6ae4ff3b79e54a8441ed466cad..4d08642a006d4b7d9b858d8c594c2888 @Override protected Brain.Provider brainProvider() { return Brain.provider(MEMORY_TYPES, SENSOR_TYPES); -@@ -227,6 +262,7 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS +@@ -228,6 +263,7 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS protected void customServerAiStep(ServerLevel level) { ProfilerFiller profilerFiller = Profiler.get(); profilerFiller.push("allayBrain"); @@ -2011,10 +2011,10 @@ index b855f7cd640d9c6ae4ff3b79e54a8441ed466cad..4d08642a006d4b7d9b858d8c594c2888 profilerFiller.pop(); profilerFiller.push("allayActivityUpdate"); diff --git a/net/minecraft/world/entity/animal/armadillo/Armadillo.java b/net/minecraft/world/entity/animal/armadillo/Armadillo.java -index 5d8a20017a90896f9cf3ee06b1b2c79d9fcabf63..764ad0be43e225f2f9d84641158ad0844993489e 100644 +index b5ce8de41b087812b02f22d538d5ca18eee60694..60abd71799ec3bb61aae1f7933245156fbc1587b 100644 --- a/net/minecraft/world/entity/animal/armadillo/Armadillo.java +++ b/net/minecraft/world/entity/animal/armadillo/Armadillo.java -@@ -82,6 +82,23 @@ public class Armadillo extends Animal { +@@ -83,6 +83,23 @@ public class Armadillo extends Animal { return Animal.createAnimalAttributes().add(Attributes.MAX_HEALTH, 12.0).add(Attributes.MOVEMENT_SPEED, 0.14); } @@ -2127,10 +2127,10 @@ index 314dfd6611b95547a161517be1bf985305e45f41..486974bf7764a6eee37e67acdfc3b779 protected void addAdditionalSaveData(ValueOutput output) { super.addAdditionalSaveData(output); diff --git a/net/minecraft/world/entity/animal/coppergolem/CopperGolem.java b/net/minecraft/world/entity/animal/coppergolem/CopperGolem.java -index 67d3d3a03f78ce0c15972795e2c95db5161f5a1f..f63dee3d9192836c4a92696a4383bcfb1489385d 100644 +index 9de4727596b2fde69f4049734eee0f1d81079b6f..66e0ccdf938023a8df1cf179224b64508646e3e0 100644 --- a/net/minecraft/world/entity/animal/coppergolem/CopperGolem.java +++ b/net/minecraft/world/entity/animal/coppergolem/CopperGolem.java -@@ -109,6 +109,28 @@ public class CopperGolem extends AbstractGolem implements ContainerUser, Shearab +@@ -111,6 +111,28 @@ public class CopperGolem extends AbstractGolem implements ContainerUser, Shearab } // Purpur end - Summoner API @@ -2159,7 +2159,7 @@ index 67d3d3a03f78ce0c15972795e2c95db5161f5a1f..f63dee3d9192836c4a92696a4383bcfb public static AttributeSupplier.Builder createAttributes() { return Mob.createMobAttributes().add(Attributes.MOVEMENT_SPEED, 0.2F).add(Attributes.STEP_HEIGHT, 1.0).add(Attributes.MAX_HEALTH, 12.0); } -@@ -199,6 +221,7 @@ public class CopperGolem extends AbstractGolem implements ContainerUser, Shearab +@@ -201,6 +223,7 @@ public class CopperGolem extends AbstractGolem implements ContainerUser, Shearab protected void customServerAiStep(ServerLevel level) { ProfilerFiller profilerFiller = Profiler.get(); profilerFiller.push("copperGolemBrain"); @@ -2167,7 +2167,7 @@ index 67d3d3a03f78ce0c15972795e2c95db5161f5a1f..f63dee3d9192836c4a92696a4383bcfb this.getBrain().tick(level, this); profilerFiller.pop(); profilerFiller.push("copperGolemActivityUpdate"); -@@ -238,7 +261,7 @@ public class CopperGolem extends AbstractGolem implements ContainerUser, Shearab +@@ -240,7 +263,7 @@ public class CopperGolem extends AbstractGolem implements ContainerUser, Shearab java.util.List drops = this.generateDefaultDrops(serverLevel, itemInHand); org.bukkit.event.player.PlayerShearEntityEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.handlePlayerShearEntityEvent(player, this, itemInHand, hand, drops); if (event != null) { @@ -2176,7 +2176,7 @@ index 67d3d3a03f78ce0c15972795e2c95db5161f5a1f..f63dee3d9192836c4a92696a4383bcfb drops = org.bukkit.craftbukkit.inventory.CraftItemStack.asNMSCopy(event.getDrops()); } this.shear(serverLevel, SoundSource.PLAYERS, itemInHand, drops); -@@ -274,6 +297,8 @@ public class CopperGolem extends AbstractGolem implements ContainerUser, Shearab +@@ -276,6 +299,8 @@ public class CopperGolem extends AbstractGolem implements ContainerUser, Shearab } } @@ -2336,10 +2336,10 @@ index 3ce172c1bdaf8b8a8ad774dd37498e8e379c68bb..790194e3b618f95a003ba8eb6104f765 profilerFiller.pop(); profilerFiller.push("tadpoleActivityUpdate"); diff --git a/net/minecraft/world/entity/animal/goat/Goat.java b/net/minecraft/world/entity/animal/goat/Goat.java -index 1ec7ba1654de7cdcc292e63f2e21f0505e65cf4d..3f264db00d9312cc1e8bfba8da0c829774ba00aa 100644 +index 4f87e06695e49c09078ab673119e2af9f5158bae..f417e9337a5102d6ec95a934c4126e1ec98a94d8 100644 --- a/net/minecraft/world/entity/animal/goat/Goat.java +++ b/net/minecraft/world/entity/animal/goat/Goat.java -@@ -114,6 +114,23 @@ public class Goat extends Animal { +@@ -115,6 +115,23 @@ public class Goat extends Animal { .orElseGet(() -> new ItemStack(Items.GOAT_HORN)); } @@ -2363,7 +2363,7 @@ index 1ec7ba1654de7cdcc292e63f2e21f0505e65cf4d..3f264db00d9312cc1e8bfba8da0c8297 @Override protected Brain.Provider brainProvider() { return Brain.provider(MEMORY_TYPES, SENSOR_TYPES); -@@ -191,6 +208,7 @@ public class Goat extends Animal { +@@ -192,6 +209,7 @@ public class Goat extends Animal { protected void customServerAiStep(ServerLevel level) { ProfilerFiller profilerFiller = Profiler.get(); profilerFiller.push("goatBrain"); @@ -2372,10 +2372,10 @@ index 1ec7ba1654de7cdcc292e63f2e21f0505e65cf4d..3f264db00d9312cc1e8bfba8da0c8297 profilerFiller.pop(); profilerFiller.push("goatActivityUpdate"); diff --git a/net/minecraft/world/entity/animal/horse/AbstractHorse.java b/net/minecraft/world/entity/animal/horse/AbstractHorse.java -index f0330c1a64cdb4879cff9a06b44a7861e79adea9..628f93f477d188cb4400be9a12cdfe09badcb971 100644 +index c87a1a5e3696e40f9f0d6f4d93e102e73325d4f8..28ea58a154d5a572268004ff9d36a5ae99f291e9 100644 --- a/net/minecraft/world/entity/animal/horse/AbstractHorse.java +++ b/net/minecraft/world/entity/animal/horse/AbstractHorse.java -@@ -127,11 +127,21 @@ public abstract class AbstractHorse extends Animal implements HasCustomInventory +@@ -128,11 +128,21 @@ public abstract class AbstractHorse extends Animal implements HasCustomInventory protected AbstractHorse(EntityType type, Level level) { super(type, level); @@ -2397,7 +2397,7 @@ index f0330c1a64cdb4879cff9a06b44a7861e79adea9..628f93f477d188cb4400be9a12cdfe09 this.goalSelector.addGoal(1, new PanicGoal(this, 1.2)); this.goalSelector.addGoal(1, new RunAroundLikeCrazyGoal(this, 1.2)); this.goalSelector.addGoal(2, new BreedGoal(this, 1.0, AbstractHorse.class)); -@@ -142,6 +152,7 @@ public abstract class AbstractHorse extends Animal implements HasCustomInventory +@@ -143,6 +153,7 @@ public abstract class AbstractHorse extends Animal implements HasCustomInventory if (this.canPerformRearing()) { this.goalSelector.addGoal(9, new RandomStandGoal(this)); } @@ -2629,10 +2629,10 @@ index c7bc8c41e01f4fe1c49ed79e0e5f3324e2fa0118..c916c28b0d3115588cedf84cf70469b6 @Override diff --git a/net/minecraft/world/entity/animal/sheep/Sheep.java b/net/minecraft/world/entity/animal/sheep/Sheep.java -index 8d4601e882f2045197162cf30d21a2ca07eb1181..1e453cdbe3c290209fd2fb912a90fb44a642959a 100644 +index 7bfac1d56a2236a666115daf2464ce3283a83db6..52cdadd752c7e470a22eaac70143766d0ad46843 100644 --- a/net/minecraft/world/entity/animal/sheep/Sheep.java +++ b/net/minecraft/world/entity/animal/sheep/Sheep.java -@@ -62,10 +62,28 @@ public class Sheep extends Animal implements Shearable { +@@ -63,10 +63,28 @@ public class Sheep extends Animal implements Shearable { super(type, level); } @@ -2662,10 +2662,10 @@ index 8d4601e882f2045197162cf30d21a2ca07eb1181..1e453cdbe3c290209fd2fb912a90fb44 this.goalSelector.addGoal(2, new BreedGoal(this, 1.0)); this.goalSelector.addGoal(3, new TemptGoal(this, 1.1, stack -> stack.is(ItemTags.SHEEP_FOOD), false)); diff --git a/net/minecraft/world/entity/animal/sniffer/Sniffer.java b/net/minecraft/world/entity/animal/sniffer/Sniffer.java -index 057316aaa461cdc1659cdecf8478c7805f456cb9..1013898f40c82b64bc62eb99365d10a57e8f66b5 100644 +index a4d60a0dddabd7981d2db28af6b1d88d64d6e806..3d5cf62bd9bd99a978b7dc535675178deb695af0 100644 --- a/net/minecraft/world/entity/animal/sniffer/Sniffer.java +++ b/net/minecraft/world/entity/animal/sniffer/Sniffer.java -@@ -88,6 +88,23 @@ public class Sniffer extends Animal { +@@ -89,6 +89,23 @@ public class Sniffer extends Animal { this.setPathfindingMalus(PathType.DAMAGE_CAUTIOUS, -1.0F); } @@ -2689,7 +2689,7 @@ index 057316aaa461cdc1659cdecf8478c7805f456cb9..1013898f40c82b64bc62eb99365d10a5 @Override protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); -@@ -466,6 +483,7 @@ public class Sniffer extends Animal { +@@ -467,6 +484,7 @@ public class Sniffer extends Animal { protected void customServerAiStep(ServerLevel level) { ProfilerFiller profilerFiller = Profiler.get(); profilerFiller.push("snifferBrain"); @@ -2698,10 +2698,10 @@ index 057316aaa461cdc1659cdecf8478c7805f456cb9..1013898f40c82b64bc62eb99365d10a5 profilerFiller.popPush("snifferActivityUpdate"); SnifferAi.updateActivity(this); diff --git a/net/minecraft/world/entity/animal/wolf/Wolf.java b/net/minecraft/world/entity/animal/wolf/Wolf.java -index ecd55f1ceec45e0f0197a0517bcf81f0fe01c728..901138575d9468374565d395b56bfaeb353479f7 100644 +index 9f79615cda890d5823fda94bad5b8cddde22e14d..b452d7c881f9b90ad429e9a522b17dfdbb480c31 100644 --- a/net/minecraft/world/entity/animal/wolf/Wolf.java +++ b/net/minecraft/world/entity/animal/wolf/Wolf.java -@@ -186,9 +186,32 @@ public class Wolf extends TamableAnimal implements NeutralMob { +@@ -187,9 +187,32 @@ public class Wolf extends TamableAnimal implements NeutralMob { } // Purpur end - Configurable default collar color @@ -2734,7 +2734,7 @@ index ecd55f1ceec45e0f0197a0517bcf81f0fe01c728..901138575d9468374565d395b56bfaeb this.goalSelector.addGoal(1, new TamableAnimal.TamableAnimalPanicGoal(1.5, DamageTypeTags.PANIC_ENVIRONMENTAL_CAUSES)); this.goalSelector.addGoal(2, new SitWhenOrderedToGoal(this)); this.goalSelector.addGoal(3, new Wolf.WolfAvoidEntityGoal<>(this, Llama.class, 24.0F, 1.5, 1.5)); -@@ -201,6 +224,7 @@ public class Wolf extends TamableAnimal implements NeutralMob { +@@ -202,6 +225,7 @@ public class Wolf extends TamableAnimal implements NeutralMob { this.goalSelector.addGoal(9, new BegGoal(this, 8.0F)); this.goalSelector.addGoal(10, new LookAtPlayerGoal(this, Player.class, 8.0F)); this.goalSelector.addGoal(10, new RandomLookAroundGoal(this)); @@ -2761,10 +2761,10 @@ index c9443cbde85109b19e6c84274c562d83a229c763..ec82bd00f7be253beac1dfbe00a36d25 protected void defineSynchedData(SynchedEntityData.Builder builder) { } diff --git a/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -index 2d12c376bbcb16eb758a982be0989e668b4e36f6..f695e3ba62a4047d8203c0399790d646e97309f7 100644 +index 14216ad9e1182dd9c380c79b1f1f3926ad6f458b..743abfe1eceaa8e9530790abdc787d3765c1191e 100644 --- a/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java +++ b/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -@@ -92,6 +92,7 @@ public class EnderDragon extends Mob implements Enemy { +@@ -93,6 +93,7 @@ public class EnderDragon extends Mob implements Enemy { private final net.minecraft.world.level.Explosion explosionSource; // Paper - reusable source for CraftTNTPrimed.getSource() @Nullable private BlockPos podium; // Paper end @@ -2772,7 +2772,7 @@ index 2d12c376bbcb16eb758a982be0989e668b4e36f6..f695e3ba62a4047d8203c0399790d646 public EnderDragon(EntityType type, Level level) { super(EntityType.ENDER_DRAGON, level); -@@ -108,6 +109,37 @@ public class EnderDragon extends Mob implements Enemy { +@@ -109,6 +110,37 @@ public class EnderDragon extends Mob implements Enemy { this.noPhysics = true; this.phaseManager = new EnderDragonPhaseManager(this); this.explosionSource = new net.minecraft.world.level.ServerExplosion(level.getMinecraftWorld(), this, null, null, new Vec3(Double.NaN, Double.NaN, Double.NaN), Float.NaN, true, net.minecraft.world.level.Explosion.BlockInteraction.DESTROY); // Paper @@ -2810,7 +2810,7 @@ index 2d12c376bbcb16eb758a982be0989e668b4e36f6..f695e3ba62a4047d8203c0399790d646 } public void setDragonFight(EndDragonFight dragonFight) { -@@ -122,6 +154,17 @@ public class EnderDragon extends Mob implements Enemy { +@@ -123,6 +155,17 @@ public class EnderDragon extends Mob implements Enemy { return this.fightOrigin; } @@ -2828,7 +2828,7 @@ index 2d12c376bbcb16eb758a982be0989e668b4e36f6..f695e3ba62a4047d8203c0399790d646 public static AttributeSupplier.Builder createAttributes() { return Mob.createMobAttributes().add(Attributes.MAX_HEALTH, 200.0).add(Attributes.CAMERA_DISTANCE, 16.0); } -@@ -171,6 +214,37 @@ public class EnderDragon extends Mob implements Enemy { +@@ -172,6 +215,37 @@ public class EnderDragon extends Mob implements Enemy { @Override public void aiStep() { @@ -2866,7 +2866,7 @@ index 2d12c376bbcb16eb758a982be0989e668b4e36f6..f695e3ba62a4047d8203c0399790d646 this.processFlappingMovement(); if (this.level().isClientSide()) { this.setHealth(this.getHealth()); -@@ -199,6 +273,8 @@ public class EnderDragon extends Mob implements Enemy { +@@ -200,6 +274,8 @@ public class EnderDragon extends Mob implements Enemy { this.oFlapTime = this.flapTime; if (this.isDeadOrDying()) { @@ -2875,7 +2875,7 @@ index 2d12c376bbcb16eb758a982be0989e668b4e36f6..f695e3ba62a4047d8203c0399790d646 float f = (this.random.nextFloat() - 0.5F) * 8.0F; float f1 = (this.random.nextFloat() - 0.5F) * 4.0F; float f2 = (this.random.nextFloat() - 0.5F) * 8.0F; -@@ -208,9 +284,9 @@ public class EnderDragon extends Mob implements Enemy { +@@ -209,9 +285,9 @@ public class EnderDragon extends Mob implements Enemy { Vec3 deltaMovement = this.getDeltaMovement(); float f1 = 0.2F / ((float)deltaMovement.horizontalDistance() * 10.0F + 1.0F); f1 *= (float)Math.pow(2.0, deltaMovement.y); @@ -2887,7 +2887,7 @@ index 2d12c376bbcb16eb758a982be0989e668b4e36f6..f695e3ba62a4047d8203c0399790d646 this.flapTime += f1 * 0.5F; } else { this.flapTime += f1; -@@ -221,7 +297,7 @@ public class EnderDragon extends Mob implements Enemy { +@@ -222,7 +298,7 @@ public class EnderDragon extends Mob implements Enemy { this.flapTime = 0.5F; } else { this.flightHistory.record(this.getY(), this.getYRot()); @@ -2896,7 +2896,7 @@ index 2d12c376bbcb16eb758a982be0989e668b4e36f6..f695e3ba62a4047d8203c0399790d646 DragonPhaseInstance currentPhase = this.phaseManager.getCurrentPhase(); currentPhase.doServerTick(serverLevel1); if (this.phaseManager.getCurrentPhase() != currentPhase) { -@@ -296,7 +372,7 @@ public class EnderDragon extends Mob implements Enemy { +@@ -297,7 +373,7 @@ public class EnderDragon extends Mob implements Enemy { this.tickPart(this.body, sin1 * 0.5F, 0.0, -cos1 * 0.5F); this.tickPart(this.wing1, cos1 * 4.5F, 2.0, sin1 * 4.5F); this.tickPart(this.wing2, cos1 * -4.5F, 2.0, sin1 * -4.5F); @@ -2905,7 +2905,7 @@ index 2d12c376bbcb16eb758a982be0989e668b4e36f6..f695e3ba62a4047d8203c0399790d646 this.knockBack( serverLevel2, serverLevel2.getEntities( -@@ -346,9 +422,9 @@ public class EnderDragon extends Mob implements Enemy { +@@ -347,9 +423,9 @@ public class EnderDragon extends Mob implements Enemy { } if (this.level() instanceof ServerLevel serverLevel3) { @@ -2918,10 +2918,10 @@ index 2d12c376bbcb16eb758a982be0989e668b4e36f6..f695e3ba62a4047d8203c0399790d646 this.dragonFight.updateDragon(this); } diff --git a/net/minecraft/world/entity/boss/wither/WitherBoss.java b/net/minecraft/world/entity/boss/wither/WitherBoss.java -index 8918c55199a77f7e5efe23429a696b56fa7dccd1..151bfd4de9a11642ca128e91a6ed80d41820b358 100644 +index d94d1d673dbb69742203119d1ef6bf0404efaada..03167b61a9f2886d31881af809d7bca7be325872 100644 --- a/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/net/minecraft/world/entity/boss/wither/WitherBoss.java -@@ -71,6 +71,7 @@ public class WitherBoss extends Monster implements RangedAttackMob { +@@ -72,6 +72,7 @@ public class WitherBoss extends Monster implements RangedAttackMob { private final int[] nextHeadUpdate = new int[2]; private final int[] idleHeadUpdates = new int[2]; private int destroyBlocksTick; @@ -2929,7 +2929,7 @@ index 8918c55199a77f7e5efe23429a696b56fa7dccd1..151bfd4de9a11642ca128e91a6ed80d4 private boolean canPortal = false; // Paper public final ServerBossEvent bossEvent = (ServerBossEvent)new ServerBossEvent( this.getDisplayName(), BossEvent.BossBarColor.PURPLE, BossEvent.BossBarOverlay.PROGRESS -@@ -80,9 +81,23 @@ public class WitherBoss extends Monster implements RangedAttackMob { +@@ -81,9 +82,23 @@ public class WitherBoss extends Monster implements RangedAttackMob { && entity.attackable(); private static final TargetingConditions TARGETING_CONDITIONS = TargetingConditions.forCombat().range(20.0).selector(LIVING_ENTITY_SELECTOR); @Nullable private java.util.UUID summoner; // Purpur - Summoner API @@ -2953,7 +2953,7 @@ index 8918c55199a77f7e5efe23429a696b56fa7dccd1..151bfd4de9a11642ca128e91a6ed80d4 this.moveControl = new FlyingMoveControl(this, 10, false); this.setHealth(this.getMaxHealth()); this.xpReward = 50; -@@ -99,6 +114,105 @@ public class WitherBoss extends Monster implements RangedAttackMob { +@@ -100,6 +115,105 @@ public class WitherBoss extends Monster implements RangedAttackMob { } // Purpur end - Summoner API @@ -3059,7 +3059,7 @@ index 8918c55199a77f7e5efe23429a696b56fa7dccd1..151bfd4de9a11642ca128e91a6ed80d4 @Override protected PathNavigation createNavigation(Level level) { FlyingPathNavigation flyingPathNavigation = new FlyingPathNavigation(this, level); -@@ -109,11 +223,13 @@ public class WitherBoss extends Monster implements RangedAttackMob { +@@ -110,11 +224,13 @@ public class WitherBoss extends Monster implements RangedAttackMob { @Override protected void registerGoals() { @@ -3073,7 +3073,7 @@ index 8918c55199a77f7e5efe23429a696b56fa7dccd1..151bfd4de9a11642ca128e91a6ed80d4 this.targetSelector.addGoal(1, new HurtByTargetGoal(this)); this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, LivingEntity.class, 0, false, false, LIVING_ENTITY_SELECTOR)); } -@@ -273,6 +389,15 @@ public class WitherBoss extends Monster implements RangedAttackMob { +@@ -274,6 +390,15 @@ public class WitherBoss extends Monster implements RangedAttackMob { @Override protected void customServerAiStep(ServerLevel level) { @@ -3089,7 +3089,7 @@ index 8918c55199a77f7e5efe23429a696b56fa7dccd1..151bfd4de9a11642ca128e91a6ed80d4 if (this.getInvulnerableTicks() > 0) { int i = this.getInvulnerableTicks() - 1; this.bossEvent.setProgress(1.0F - i / 220.0F); -@@ -579,11 +704,11 @@ public class WitherBoss extends Monster implements RangedAttackMob { +@@ -580,11 +705,11 @@ public class WitherBoss extends Monster implements RangedAttackMob { } public int getAlternativeTarget(int head) { @@ -3123,10 +3123,10 @@ index 3d2fcdc99cea6981c8d516853ba28f51bd114dbd..7e43dd4b44335989127cc1b6e2c59d77 this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, IronGolem.class, true)); diff --git a/net/minecraft/world/entity/monster/Blaze.java b/net/minecraft/world/entity/monster/Blaze.java -index e36572baa045ec60543743354da6f83e4019ca37..937300689b75486ba582b6dbe294c4355dc31d9e 100644 +index db5d01f3868423c023ad317df84e9ab9a634876d..1571709d83b8e01707dac274447419413ef82a43 100644 --- a/net/minecraft/world/entity/monster/Blaze.java +++ b/net/minecraft/world/entity/monster/Blaze.java -@@ -33,6 +33,7 @@ public class Blaze extends Monster { +@@ -34,6 +34,7 @@ public class Blaze extends Monster { public Blaze(EntityType type, Level level) { super(type, level); @@ -3134,7 +3134,7 @@ index e36572baa045ec60543743354da6f83e4019ca37..937300689b75486ba582b6dbe294c435 this.setPathfindingMalus(PathType.WATER, -1.0F); this.setPathfindingMalus(PathType.LAVA, 8.0F); this.setPathfindingMalus(PathType.DANGER_FIRE, 0.0F); -@@ -40,19 +41,55 @@ public class Blaze extends Monster { +@@ -41,19 +42,55 @@ public class Blaze extends Monster { this.xpReward = 10; } @@ -3191,7 +3191,7 @@ index e36572baa045ec60543743354da6f83e4019ca37..937300689b75486ba582b6dbe294c435 } @Override -@@ -117,6 +154,13 @@ public class Blaze extends Monster { +@@ -118,6 +155,13 @@ public class Blaze extends Monster { @Override protected void customServerAiStep(ServerLevel level) { @@ -3460,7 +3460,7 @@ index 3a16eb269b733fcf1db5dbc2dfae13009e2278b5..e5d16ca14a40d520dce43dd3d9b6347a return Guardian.createAttributes().add(Attributes.MOVEMENT_SPEED, 0.3F).add(Attributes.ATTACK_DAMAGE, 8.0).add(Attributes.MAX_HEALTH, 80.0); } diff --git a/net/minecraft/world/entity/monster/EnderMan.java b/net/minecraft/world/entity/monster/EnderMan.java -index f3ffb74dd54b483113901712408734abfdc2dd74..eaa5cc7e72ba604d14e41975d24624f1def04656 100644 +index 87aaa6cd478d8d635b625d1a98bce23d577fb33a..6ded7dfa381d0041dffb914a85c2e835c0b4a493 100644 --- a/net/minecraft/world/entity/monster/EnderMan.java +++ b/net/minecraft/world/entity/monster/EnderMan.java @@ -90,9 +90,27 @@ public class EnderMan extends Monster implements NeutralMob { @@ -3596,10 +3596,10 @@ index 9fb7b3e4cbbde0f1d45d9fffb648240fbd2f3d49..70cf903d95d35b539e9a299a4035c8dd this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true).setUnseenMemoryTicks(300)); this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractVillager.class, false).setUnseenMemoryTicks(300)); diff --git a/net/minecraft/world/entity/monster/Ghast.java b/net/minecraft/world/entity/monster/Ghast.java -index 695fbbc996918339192a978c35a74ad599453796..efe4ed636d85624e4122880f95c634ffa7a3891a 100644 +index 9954f5173c427d8c61e283d9bb2dac42c296f357..89319696240f0f58fdac19b7faff29546f0ba0de 100644 --- a/net/minecraft/world/entity/monster/Ghast.java +++ b/net/minecraft/world/entity/monster/Ghast.java -@@ -52,11 +52,35 @@ public class Ghast extends Mob implements Enemy { +@@ -53,11 +53,35 @@ public class Ghast extends Mob implements Enemy { this.moveControl = new Ghast.GhastMoveControl(this, false, () -> false); } @@ -3635,7 +3635,7 @@ index 695fbbc996918339192a978c35a74ad599453796..efe4ed636d85624e4122880f95c634ff this.targetSelector .addGoal(1, new NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, (entity, level) -> Math.abs(entity.getY() - this.getY()) <= 4.0)); } -@@ -101,6 +125,15 @@ public class Ghast extends Mob implements Enemy { +@@ -102,6 +126,15 @@ public class Ghast extends Mob implements Enemy { @Override public void travel(Vec3 travelVector) { this.travelFlying(travelVector, 0.02F); @@ -3651,7 +3651,7 @@ index 695fbbc996918339192a978c35a74ad599453796..efe4ed636d85624e4122880f95c634ff } @Override -@@ -236,7 +269,7 @@ public class Ghast extends Mob implements Enemy { +@@ -237,7 +270,7 @@ public class Ghast extends Mob implements Enemy { } } @@ -3660,7 +3660,7 @@ index 695fbbc996918339192a978c35a74ad599453796..efe4ed636d85624e4122880f95c634ff private final Mob ghast; private int floatDuration; private final boolean careful; -@@ -250,7 +283,7 @@ public class Ghast extends Mob implements Enemy { +@@ -251,7 +284,7 @@ public class Ghast extends Mob implements Enemy { } @Override @@ -3704,10 +3704,10 @@ index 0de6a20a3fed53bd11a0152de6953bfaecc85289..dcbe6bbce0baa4fad7fe180944beeb6c return Monster.createMonsterAttributes() .add(Attributes.MAX_HEALTH, 100.0) diff --git a/net/minecraft/world/entity/monster/Guardian.java b/net/minecraft/world/entity/monster/Guardian.java -index c72b599a98960372b301e9ac0f5f0ca5ad330a32..3c20818bf6f86cb34666d12084caf13d409a35ca 100644 +index cd802866af8ed2d0ebd5f8dabe170848cbf4638a..8e5990d581dec09dccb1c05c636b9b617b289aac 100644 --- a/net/minecraft/world/entity/monster/Guardian.java +++ b/net/minecraft/world/entity/monster/Guardian.java -@@ -66,14 +66,35 @@ public class Guardian extends Monster { +@@ -67,14 +67,35 @@ public class Guardian extends Monster { this.xpReward = 10; this.setPathfindingMalus(PathType.WATER, 0.0F); this.moveControl = new Guardian.GuardianMoveControl(this); @@ -3743,7 +3743,7 @@ index c72b599a98960372b301e9ac0f5f0ca5ad330a32..3c20818bf6f86cb34666d12084caf13d this.goalSelector.addGoal(4, this.guardianAttackGoal = new Guardian.GuardianAttackGoal(this)); // CraftBukkit - assign field this.goalSelector.addGoal(5, moveTowardsRestrictionGoal); this.goalSelector.addGoal(7, this.randomStrollGoal); -@@ -82,6 +103,7 @@ public class Guardian extends Monster { +@@ -83,6 +104,7 @@ public class Guardian extends Monster { this.goalSelector.addGoal(9, new RandomLookAroundGoal(this)); this.randomStrollGoal.setFlags(EnumSet.of(Goal.Flag.MOVE, Goal.Flag.LOOK)); moveTowardsRestrictionGoal.setFlags(EnumSet.of(Goal.Flag.MOVE, Goal.Flag.LOOK)); @@ -3751,7 +3751,7 @@ index c72b599a98960372b301e9ac0f5f0ca5ad330a32..3c20818bf6f86cb34666d12084caf13d this.targetSelector.addGoal(1, new NearestAttackableTargetGoal<>(this, LivingEntity.class, 10, true, false, new Guardian.GuardianAttackSelector(this))); } -@@ -349,7 +371,7 @@ public class Guardian extends Monster { +@@ -350,7 +372,7 @@ public class Guardian extends Monster { @Override public void travel(Vec3 travelVector) { if (this.isInWater()) { @@ -3760,7 +3760,7 @@ index c72b599a98960372b301e9ac0f5f0ca5ad330a32..3c20818bf6f86cb34666d12084caf13d this.move(MoverType.SELF, this.getDeltaMovement()); this.setDeltaMovement(this.getDeltaMovement().scale(0.9)); if (!this.isMoving() && this.getTarget() == null) { -@@ -457,7 +479,7 @@ public class Guardian extends Monster { +@@ -458,7 +480,7 @@ public class Guardian extends Monster { } } @@ -3769,7 +3769,7 @@ index c72b599a98960372b301e9ac0f5f0ca5ad330a32..3c20818bf6f86cb34666d12084caf13d private final Guardian guardian; public GuardianMoveControl(Guardian mob) { -@@ -465,8 +487,17 @@ public class Guardian extends Monster { +@@ -466,8 +488,17 @@ public class Guardian extends Monster { this.guardian = mob; } @@ -3788,7 +3788,7 @@ index c72b599a98960372b301e9ac0f5f0ca5ad330a32..3c20818bf6f86cb34666d12084caf13d if (this.operation == MoveControl.Operation.MOVE_TO && !this.guardian.getNavigation().isDone()) { Vec3 vec3 = new Vec3(this.wantedX - this.guardian.getX(), this.wantedY - this.guardian.getY(), this.wantedZ - this.guardian.getZ()); double len = vec3.length(); -@@ -476,7 +507,7 @@ public class Guardian extends Monster { +@@ -477,7 +508,7 @@ public class Guardian extends Monster { float f = (float)(Mth.atan2(vec3.z, vec3.x) * 180.0F / (float)Math.PI) - 90.0F; this.guardian.setYRot(this.rotlerp(this.guardian.getYRot(), f, 90.0F)); this.guardian.yBodyRot = this.guardian.getYRot(); @@ -3798,10 +3798,10 @@ index c72b599a98960372b301e9ac0f5f0ca5ad330a32..3c20818bf6f86cb34666d12084caf13d this.guardian.setSpeed(f2); double d3 = Math.sin((this.guardian.tickCount + this.guardian.getId()) * 0.5) * 0.05; diff --git a/net/minecraft/world/entity/monster/Husk.java b/net/minecraft/world/entity/monster/Husk.java -index 8764b5026c68bcffc3e2fb24c2dda9865f331adc..af1af1687bbbc9a60b71ad83879ca5cb5af15eef 100644 +index 296103a0dbe3ee87451a538b1aa50702a91beaa1..671796f230bec419c3c40ff89c410babd4a31628 100644 --- a/net/minecraft/world/entity/monster/Husk.java +++ b/net/minecraft/world/entity/monster/Husk.java -@@ -20,6 +20,23 @@ public class Husk extends Zombie { +@@ -21,6 +21,23 @@ public class Husk extends Zombie { super(type, level); } @@ -3908,10 +3908,10 @@ index 2323a7315878e38710f8f31f7806ebda94077067..8b58e0a76c9651cacacb503391ef9b6a @Override diff --git a/net/minecraft/world/entity/monster/Phantom.java b/net/minecraft/world/entity/monster/Phantom.java -index c83e07372222ddf46f95fecfa10755b9755c2517..d29752add305e97d2265606b7b4212c308072523 100644 +index 7da7dfaf400e69434417f6f85d5d021235d11162..cf297cb029ea2226f876eaec0dc0875b00abb281 100644 --- a/net/minecraft/world/entity/monster/Phantom.java +++ b/net/minecraft/world/entity/monster/Phantom.java -@@ -62,6 +62,52 @@ public class Phantom extends Mob implements Enemy { +@@ -63,6 +63,52 @@ public class Phantom extends Mob implements Enemy { this.lookControl = new Phantom.PhantomLookControl(this); } @@ -3964,7 +3964,7 @@ index c83e07372222ddf46f95fecfa10755b9755c2517..d29752add305e97d2265606b7b4212c3 @Override public boolean isFlapping() { return (this.getUniqueFlapTickOffset() + this.tickCount) % TICKS_PER_FLAP == 0; -@@ -74,9 +120,11 @@ public class Phantom extends Mob implements Enemy { +@@ -75,9 +121,11 @@ public class Phantom extends Mob implements Enemy { @Override protected void registerGoals() { @@ -3976,7 +3976,7 @@ index c83e07372222ddf46f95fecfa10755b9755c2517..d29752add305e97d2265606b7b4212c3 this.targetSelector.addGoal(1, new Phantom.PhantomAttackPlayerTargetGoal()); } -@@ -92,6 +140,7 @@ public class Phantom extends Mob implements Enemy { +@@ -93,6 +141,7 @@ public class Phantom extends Mob implements Enemy { private void updatePhantomSizeInfo() { this.refreshDimensions(); @@ -3984,7 +3984,7 @@ index c83e07372222ddf46f95fecfa10755b9755c2517..d29752add305e97d2265606b7b4212c3 this.getAttribute(Attributes.ATTACK_DAMAGE).setBaseValue(6 + this.getPhantomSize()); } -@@ -144,6 +193,7 @@ public class Phantom extends Mob implements Enemy { +@@ -145,6 +194,7 @@ public class Phantom extends Mob implements Enemy { @Override public void aiStep() { if (this.isAlive() && this.shouldBurnInDay && this.isSunBurnTick()) { // Paper - shouldBurnInDay API @@ -3992,7 +3992,7 @@ index c83e07372222ddf46f95fecfa10755b9755c2517..d29752add305e97d2265606b7b4212c3 this.igniteForSeconds(8.0F); } -@@ -162,6 +212,15 @@ public class Phantom extends Mob implements Enemy { +@@ -163,6 +213,15 @@ public class Phantom extends Mob implements Enemy { @Override public void travel(Vec3 travelVector) { this.travelFlying(travelVector, 0.2F); @@ -4008,7 +4008,7 @@ index c83e07372222ddf46f95fecfa10755b9755c2517..d29752add305e97d2265606b7b4212c3 } @Override -@@ -415,25 +474,42 @@ public class Phantom extends Mob implements Enemy { +@@ -416,25 +475,42 @@ public class Phantom extends Mob implements Enemy { } } @@ -4096,10 +4096,10 @@ index e871f4b7c53894eab0d8a9593b500c7c9998ee66..f75eab4f895c0ed381b65717dc106dc1 this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractVillager.class, false)); diff --git a/net/minecraft/world/entity/monster/Ravager.java b/net/minecraft/world/entity/monster/Ravager.java -index 901313102621a04856082d81d4bf9826ce131111..91514bc1eb85eb224b8760f17cecc423c6206554 100644 +index da20eb6eaadd9468fcc96f022d67d4583371d717..34a20b3d482b98c4fca961e5fd930b283b68dc41 100644 --- a/net/minecraft/world/entity/monster/Ravager.java +++ b/net/minecraft/world/entity/monster/Ravager.java -@@ -70,15 +70,40 @@ public class Ravager extends Raider { +@@ -71,15 +71,40 @@ public class Ravager extends Raider { this.setPathfindingMalus(PathType.LEAVES, 0.0F); } @@ -4140,7 +4140,7 @@ index 901313102621a04856082d81d4bf9826ce131111..91514bc1eb85eb224b8760f17cecc423 this.targetSelector.addGoal(2, new HurtByTargetGoal(this, Raider.class).setAlertOthers()); this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, Player.class, true)); this.targetSelector.addGoal(4, new NearestAttackableTargetGoal<>(this, AbstractVillager.class, true, (entity, level) -> !entity.isBaby())); -@@ -135,7 +160,7 @@ public class Ravager extends Raider { +@@ -136,7 +161,7 @@ public class Ravager extends Raider { @Override public void aiStep() { super.aiStep(); @@ -4195,7 +4195,7 @@ index d0bcd2d1f7afd4a01c9a0f7d66082df38db50edd..d9401842948fed8edd6d31fcf08da274 super(mob); } diff --git a/net/minecraft/world/entity/monster/Silverfish.java b/net/minecraft/world/entity/monster/Silverfish.java -index fc672a2e37b521ffe42ad96cfc429a78fd67b58a..b278c8cce74f16c49f579ca13688dabfce95d14d 100644 +index 6a32d26779fa6d5ea3792c3046cc0646f678e6f4..2fb89fffb425afb0b0267fc45f8198b7b120d10c 100644 --- a/net/minecraft/world/entity/monster/Silverfish.java +++ b/net/minecraft/world/entity/monster/Silverfish.java @@ -39,14 +39,33 @@ public class Silverfish extends Monster { @@ -4233,10 +4233,10 @@ index fc672a2e37b521ffe42ad96cfc429a78fd67b58a..b278c8cce74f16c49f579ca13688dabf this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); } diff --git a/net/minecraft/world/entity/monster/Skeleton.java b/net/minecraft/world/entity/monster/Skeleton.java -index d64e4b7175a017c92b3ffa4c2b0271c772a90030..c39072d9265b2640e3bd701dacb54aa629f3b230 100644 +index fb0aa6f0713f6ab1d26711d3fce920de91deb980..d225d9cd41bdb3b6e998f3ca38394d1d3fe8b64b 100644 --- a/net/minecraft/world/entity/monster/Skeleton.java +++ b/net/minecraft/world/entity/monster/Skeleton.java -@@ -25,6 +25,23 @@ public class Skeleton extends AbstractSkeleton { +@@ -26,6 +26,23 @@ public class Skeleton extends AbstractSkeleton { super(type, level); } @@ -4497,7 +4497,7 @@ index 312564fcaf91280d70e379994bd9d8fcb54b0a40..f03ec1e8985f2c81ad2ec13d136e4c03 if (isFood && !this.isSilent()) { this.level() diff --git a/net/minecraft/world/entity/monster/Vex.java b/net/minecraft/world/entity/monster/Vex.java -index 3f050c4ce44ee3970c2904eda759230f85730462..6713498d873980bd979b864ab0ac6dfc9d4e1482 100644 +index a2dc0ee7044c964d424cf551c4cef3b6c9839057..99fe282067a2aa54d8fdb72c226d27cab6966b6c 100644 --- a/net/minecraft/world/entity/monster/Vex.java +++ b/net/minecraft/world/entity/monster/Vex.java @@ -60,6 +60,50 @@ public class Vex extends Monster implements TraceableEntity { @@ -4646,10 +4646,10 @@ index 29482ed26387e5d6f04d59deda5990d24b7a07a9..c584a404838d5f8a916a27a74b4f4e8e this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractVillager.class, true)); diff --git a/net/minecraft/world/entity/monster/Witch.java b/net/minecraft/world/entity/monster/Witch.java -index af99952cd179dc1e142f861e5efd99789cb8afb5..bed6ce6749df67c3a4966958801d13ccd9529b1d 100644 +index 70918eb0932be1c2db28025536ddd76653d63c46..8c88c5a719d15a90ba449eccf9fd568e1d2c4e8d 100644 --- a/net/minecraft/world/entity/monster/Witch.java +++ b/net/minecraft/world/entity/monster/Witch.java -@@ -56,6 +56,23 @@ public class Witch extends Raider implements RangedAttackMob { +@@ -57,6 +57,23 @@ public class Witch extends Raider implements RangedAttackMob { super(type, level); } @@ -4673,7 +4673,7 @@ index af99952cd179dc1e142f861e5efd99789cb8afb5..bed6ce6749df67c3a4966958801d13cc @Override protected void registerGoals() { super.registerGoals(); -@@ -64,10 +81,12 @@ public class Witch extends Raider implements RangedAttackMob { +@@ -65,10 +82,12 @@ public class Witch extends Raider implements RangedAttackMob { ); this.attackPlayersGoal = new NearestAttackableWitchTargetGoal<>(this, Player.class, 10, true, false, null); this.goalSelector.addGoal(1, new FloatGoal(this)); @@ -4715,10 +4715,10 @@ index 188836285862e13a9eae6d92920b0ae7d9e33a17..7061a0ae68ed28ea72335bb5eab013a6 protected void registerGoals() { this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractPiglin.class, true)); diff --git a/net/minecraft/world/entity/monster/Zoglin.java b/net/minecraft/world/entity/monster/Zoglin.java -index 66b797d4b53a0b687f494b0081ee5bf53d58fb65..68095374ffd82db27ed704eb82dd68c51071df19 100644 +index 43c727f3cef0fe8e4c1266c50b9b0389c6747d52..cab7d33f40eacdb0ba8a7058699eb2548e364524 100644 --- a/net/minecraft/world/entity/monster/Zoglin.java +++ b/net/minecraft/world/entity/monster/Zoglin.java -@@ -86,6 +86,23 @@ public class Zoglin extends Monster implements HoglinBase { +@@ -87,6 +87,23 @@ public class Zoglin extends Monster implements HoglinBase { this.xpReward = 5; } @@ -4742,7 +4742,7 @@ index 66b797d4b53a0b687f494b0081ee5bf53d58fb65..68095374ffd82db27ed704eb82dd68c5 @Override protected Brain.Provider brainProvider() { return Brain.provider(MEMORY_TYPES, SENSOR_TYPES); -@@ -251,6 +268,7 @@ public class Zoglin extends Monster implements HoglinBase { +@@ -252,6 +269,7 @@ public class Zoglin extends Monster implements HoglinBase { protected void customServerAiStep(ServerLevel level) { ProfilerFiller profilerFiller = Profiler.get(); profilerFiller.push("zoglinBrain"); @@ -4751,10 +4751,10 @@ index 66b797d4b53a0b687f494b0081ee5bf53d58fb65..68095374ffd82db27ed704eb82dd68c5 profilerFiller.pop(); this.updateActivity(); diff --git a/net/minecraft/world/entity/monster/Zombie.java b/net/minecraft/world/entity/monster/Zombie.java -index 48989a6482907efa14e7038af0ed23db251bc972..3f000e9a1be45134b12b46badc2b52d23b960e9a 100644 +index 81e9e2d87e8ea4645ee95559a08c765c1d96a65a..a2ee621ba8b242a4e4e68c3a0a1d8e63c1421c3f 100644 --- a/net/minecraft/world/entity/monster/Zombie.java +++ b/net/minecraft/world/entity/monster/Zombie.java -@@ -102,11 +102,30 @@ public class Zombie extends Monster { +@@ -103,11 +103,30 @@ public class Zombie extends Monster { this(EntityType.ZOMBIE, level); } @@ -4786,10 +4786,10 @@ index 48989a6482907efa14e7038af0ed23db251bc972..3f000e9a1be45134b12b46badc2b52d2 } diff --git a/net/minecraft/world/entity/monster/ZombieVillager.java b/net/minecraft/world/entity/monster/ZombieVillager.java -index 862d32470a2eb40c947eb1ca4554737061d7bf6e..f9c119d38c2812cfeeb775e728f6c751bf748c85 100644 +index e9cf8809fffaba98e352c6d47719a816aad4cce4..f460df654393c0bd2e27b9fd96786d2e3fa5669e 100644 --- a/net/minecraft/world/entity/monster/ZombieVillager.java +++ b/net/minecraft/world/entity/monster/ZombieVillager.java -@@ -73,6 +73,23 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { +@@ -75,6 +75,23 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { super(type, level); } @@ -4854,10 +4854,10 @@ index f02e5f09416dea33a170c43347aac7a6664c663f..405eb5f041bf3a611f8111fd58864ffe profilerFiller.popPush("breezeActivityUpdate"); BreezeAi.updateActivity(this); diff --git a/net/minecraft/world/entity/monster/creaking/Creaking.java b/net/minecraft/world/entity/monster/creaking/Creaking.java -index a5fb6c8247bbf41602984b094c09ed07394e9589..c3c4dfb89c807020c4147140bc23ba1ce5cfe888 100644 +index 591eb14eec427d6f92c0bf4eb083d05df811449d..86379fce8045722584736f1b39707f3d9a1fc4f4 100644 --- a/net/minecraft/world/entity/monster/creaking/Creaking.java +++ b/net/minecraft/world/entity/monster/creaking/Creaking.java -@@ -102,6 +102,29 @@ public class Creaking extends Monster { +@@ -103,6 +103,29 @@ public class Creaking extends Monster { return this.getHomePos() != null; } @@ -4887,7 +4887,7 @@ index a5fb6c8247bbf41602984b094c09ed07394e9589..c3c4dfb89c807020c4147140bc23ba1c @Override protected BodyRotationControl createBodyControl() { return new Creaking.CreakingBodyRotationControl(this); -@@ -565,28 +588,28 @@ public class Creaking extends Monster { +@@ -566,28 +589,28 @@ public class Creaking extends Monster { } } @@ -4923,10 +4923,10 @@ index a5fb6c8247bbf41602984b094c09ed07394e9589..c3c4dfb89c807020c4147140bc23ba1c } } diff --git a/net/minecraft/world/entity/monster/hoglin/Hoglin.java b/net/minecraft/world/entity/monster/hoglin/Hoglin.java -index 5af3c7a307e15680d15c4621870e6c17ea49c288..f304dea5ee2216b5b239dc5ce145f0aa425f5938 100644 +index 56a1e933b4b135890bec5104ef9f3cdf21ac2ff6..9f4ef9292e89565c3de0d96bcc3c4c48d3c53dff 100644 --- a/net/minecraft/world/entity/monster/hoglin/Hoglin.java +++ b/net/minecraft/world/entity/monster/hoglin/Hoglin.java -@@ -95,6 +95,23 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { +@@ -96,6 +96,23 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { this.xpReward = 5; } @@ -4950,7 +4950,7 @@ index 5af3c7a307e15680d15c4621870e6c17ea49c288..f304dea5ee2216b5b239dc5ce145f0aa @VisibleForTesting public void setTimeInOverworld(int timeInOverworld) { this.timeInOverworld = timeInOverworld; -@@ -163,6 +180,7 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { +@@ -164,6 +181,7 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { protected void customServerAiStep(ServerLevel level) { ProfilerFiller profilerFiller = Profiler.get(); profilerFiller.push("hoglinBrain"); @@ -5031,10 +5031,10 @@ index b692d989d71dc2d9ff9fe0d998b2524020d12c63..e1b1a909c7e92c5fa5e8f9c155bc5729 profilerFiller.pop(); PiglinBruteAi.updateActivity(this); diff --git a/net/minecraft/world/entity/monster/warden/Warden.java b/net/minecraft/world/entity/monster/warden/Warden.java -index 2fe643942f09b503a890994e2ea46f872bf0aed9..380fe9b03e205d6c5b2eb48030384c8b756bc3f9 100644 +index 2383f3fbe06f6b9a663798deb75ee75eacacf788..dede88234fd2b0f55863021446c4c9273f3a14d8 100644 --- a/net/minecraft/world/entity/monster/warden/Warden.java +++ b/net/minecraft/world/entity/monster/warden/Warden.java -@@ -123,8 +123,32 @@ public class Warden extends Monster implements VibrationSystem { +@@ -124,8 +124,32 @@ public class Warden extends Monster implements VibrationSystem { this.setPathfindingMalus(PathType.LAVA, 8.0F); this.setPathfindingMalus(PathType.DAMAGE_FIRE, 0.0F); this.setPathfindingMalus(PathType.DANGER_FIRE, 0.0F); @@ -5067,7 +5067,7 @@ index 2fe643942f09b503a890994e2ea46f872bf0aed9..380fe9b03e205d6c5b2eb48030384c8b @Override public Packet getAddEntityPacket(ServerEntity entity) { return new ClientboundAddEntityPacket(this, entity, this.hasPose(Pose.EMERGING) ? 1 : 0); -@@ -280,6 +304,7 @@ public class Warden extends Monster implements VibrationSystem { +@@ -281,6 +305,7 @@ public class Warden extends Monster implements VibrationSystem { protected void customServerAiStep(ServerLevel level) { ProfilerFiller profilerFiller = Profiler.get(); profilerFiller.push("wardenBrain"); @@ -5075,7 +5075,7 @@ index 2fe643942f09b503a890994e2ea46f872bf0aed9..380fe9b03e205d6c5b2eb48030384c8b this.getBrain().tick(level, this); profilerFiller.pop(); super.customServerAiStep(level); -@@ -382,6 +407,7 @@ public class Warden extends Monster implements VibrationSystem { +@@ -383,6 +408,7 @@ public class Warden extends Monster implements VibrationSystem { @Contract("null->false") public boolean canTargetEntity(@Nullable Entity entity) { @@ -5084,10 +5084,10 @@ index 2fe643942f09b503a890994e2ea46f872bf0aed9..380fe9b03e205d6c5b2eb48030384c8b && this.level() == entity.level() && EntitySelector.NO_CREATIVE_OR_SPECTATOR.test(entity) diff --git a/net/minecraft/world/entity/npc/Villager.java b/net/minecraft/world/entity/npc/Villager.java -index 2d9c8218ea211ffa845ea50fd7e79dee73e66454..5f982512eb04cbfff21e270026046a384bb01537 100644 +index be8200024a766d338705ece9a7fe0cced53a299a..7f9bd5695c960e88b9f59af4b67849db9c4ba10b 100644 --- a/net/minecraft/world/entity/npc/Villager.java +++ b/net/minecraft/world/entity/npc/Villager.java -@@ -249,6 +249,28 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -250,6 +250,28 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } // Purpur end - Lobotomize stuck villagers @@ -5116,7 +5116,7 @@ index 2d9c8218ea211ffa845ea50fd7e79dee73e66454..5f982512eb04cbfff21e270026046a38 @Override public Brain getBrain() { return (Brain)super.getBrain(); -@@ -356,7 +378,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -357,7 +379,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } else { this.isLobotomized = false; } @@ -5125,7 +5125,7 @@ index 2d9c8218ea211ffa845ea50fd7e79dee73e66454..5f982512eb04cbfff21e270026046a38 this.getBrain().tick(level, this); // Paper - EAR 2 } else if (this.isLobotomized && shouldRestock()) restock(); -@@ -416,7 +438,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -417,7 +439,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler return super.mobInteract(player, hand); } else if (this.isBaby()) { this.setUnhappy(); @@ -5134,7 +5134,7 @@ index 2d9c8218ea211ffa845ea50fd7e79dee73e66454..5f982512eb04cbfff21e270026046a38 } else { if (!this.level().isClientSide()) { boolean isEmpty = this.getOffers().isEmpty(); -@@ -429,9 +451,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -430,9 +452,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } if (isEmpty) { @@ -5187,10 +5187,10 @@ index 4032215d5907b926d1a8e08a8b0852c1388b51c5..5372f9cef4667a11b4e4447b1bacd7c2 if (this.level().purpurConfig.wanderingTraderAllowTrading) { // Purpur - Add config for villager trading this.setTradingPlayer(player); diff --git a/net/minecraft/world/entity/player/Player.java b/net/minecraft/world/entity/player/Player.java -index 179eba2b3359913562e79f196455d3f62fe992d1..2c0b158c6e666941a073295e9b112f64ad5b6d90 100644 +index 45fe132e78147bb33d986d8098b6b12567b5398a..f279a628d6627080743d9f4c49ff8bfd13494fed 100644 --- a/net/minecraft/world/entity/player/Player.java +++ b/net/minecraft/world/entity/player/Player.java -@@ -200,6 +200,19 @@ public abstract class Player extends Avatar implements ContainerUser { +@@ -201,6 +201,19 @@ public abstract class Player extends Avatar implements ContainerUser { } // CraftBukkit end diff --git a/purpur-server/minecraft-patches/features/0002-Configurable-entity-base-attributes.patch b/purpur-server/minecraft-patches/features/0002-Configurable-entity-base-attributes.patch index 23389f977..9d2a66e29 100644 --- a/purpur-server/minecraft-patches/features/0002-Configurable-entity-base-attributes.patch +++ b/purpur-server/minecraft-patches/features/0002-Configurable-entity-base-attributes.patch @@ -23,10 +23,10 @@ index 8a10da9409e19b03b559d14c6f5238b5393545c7..cbb7e0591dc761d0566ac99dc6e5697b protected ParticleOptions getInkParticle() { return ParticleTypes.GLOW_SQUID_INK; diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java -index 0002c7c4c728f44106ad4984e1d39ff2c76bf86f..be657ca79feed6a39fa5ca173d875e6678faf27e 100644 +index 28a6316996fe44228539bd54b019ef40f016f967..aeaf62b438fccc628ae3e8316d7965cdbea75731 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java -@@ -291,6 +291,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -292,6 +292,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin protected LivingEntity(EntityType type, Level level) { super(type, level); this.attributes = new AttributeMap(DefaultAttributes.getSupplier(type), this); // Purpur - Ridables @@ -34,7 +34,7 @@ index 0002c7c4c728f44106ad4984e1d39ff2c76bf86f..be657ca79feed6a39fa5ca173d875e66 this.craftAttributes = new org.bukkit.craftbukkit.attribute.CraftAttributeMap(this.attributes); // CraftBukkit // CraftBukkit - this.setHealth(this.getMaxHealth()) inlined and simplified to skip the instanceof check for Player, as getBukkitEntity() is not initialized in constructor this.entityData.set(LivingEntity.DATA_HEALTH_ID, this.getMaxHealth()); -@@ -315,6 +316,8 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -316,6 +317,8 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin return new EntityEquipment(); } @@ -44,10 +44,10 @@ index 0002c7c4c728f44106ad4984e1d39ff2c76bf86f..be657ca79feed6a39fa5ca173d875e66 return this.brain; } diff --git a/net/minecraft/world/entity/ambient/Bat.java b/net/minecraft/world/entity/ambient/Bat.java -index 16cebb7e0ba7070c67dee00a67c29c3f808d8048..947619d07ef381ab79774b3f6cdc4c2454b632cb 100644 +index 0720d331eaae7c9f12d654cef278ffcf7510597b..4624aca3dc3054ce7558023033fc953aedd33d88 100644 --- a/net/minecraft/world/entity/ambient/Bat.java +++ b/net/minecraft/world/entity/ambient/Bat.java -@@ -96,6 +96,21 @@ public class Bat extends AmbientCreature { +@@ -97,6 +97,21 @@ public class Bat extends AmbientCreature { } // Purpur end - Ridables @@ -70,10 +70,10 @@ index 16cebb7e0ba7070c67dee00a67c29c3f808d8048..947619d07ef381ab79774b3f6cdc4c24 public boolean isFlapping() { return !this.isResting() && this.tickCount % 10.0F == 0.0F; diff --git a/net/minecraft/world/entity/animal/Bee.java b/net/minecraft/world/entity/animal/Bee.java -index c0abcf209d45146d1f98599c2f4d16877431a46c..30f25727b60d3d846956b878dc53542669de6203 100644 +index 345f10125d80ead9341d285ed8d3faa3013e5b40..b8dda3956152af17ce731d337ceb157d94bfb07b 100644 --- a/net/minecraft/world/entity/animal/Bee.java +++ b/net/minecraft/world/entity/animal/Bee.java -@@ -473,6 +473,14 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -474,6 +474,14 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { return beehiveBlockEntity != null && beehiveBlockEntity.isFireNearby(); } @@ -89,10 +89,10 @@ index c0abcf209d45146d1f98599c2f4d16877431a46c..30f25727b60d3d846956b878dc535426 public int getRemainingPersistentAngerTime() { return this.entityData.get(DATA_REMAINING_ANGER_TIME); diff --git a/net/minecraft/world/entity/animal/Cat.java b/net/minecraft/world/entity/animal/Cat.java -index 59bcbf6d5d844000ab26c0ca7e6674c7ac6f35ed..10365c8a63bfbefa49d243d0e51a79b7a2052238 100644 +index dc207012d233de1fa056bb318e3e143496743ebb..7550a645d7814bc97243088e2d0f366adb081c76 100644 --- a/net/minecraft/world/entity/animal/Cat.java +++ b/net/minecraft/world/entity/animal/Cat.java -@@ -117,6 +117,14 @@ public class Cat extends TamableAnimal { +@@ -118,6 +118,14 @@ public class Cat extends TamableAnimal { } // Purpur end - Ridables @@ -164,10 +164,10 @@ index 380c8e3c9c790d626cd9f8d4b1f13838d0b756ec..e7100834ce813e9814139c6d6e957fce protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); diff --git a/net/minecraft/world/entity/animal/Dolphin.java b/net/minecraft/world/entity/animal/Dolphin.java -index 68dfce3c68cb4a861932e76dfa39f1b4f3724a50..71147da158f389207c032bc8e952ddb677e6d0ee 100644 +index 703bb05c293b3ae13745c014cbd5f12864dec003..caf0f3c0690344fafb9a52a55f81b25ea6aa91a9 100644 --- a/net/minecraft/world/entity/animal/Dolphin.java +++ b/net/minecraft/world/entity/animal/Dolphin.java -@@ -151,6 +151,14 @@ public class Dolphin extends AgeableWaterCreature { +@@ -152,6 +152,14 @@ public class Dolphin extends AgeableWaterCreature { } // Purpur end - Ridables @@ -183,10 +183,10 @@ index 68dfce3c68cb4a861932e76dfa39f1b4f3724a50..71147da158f389207c032bc8e952ddb6 @Override public SpawnGroupData finalizeSpawn( diff --git a/net/minecraft/world/entity/animal/Fox.java b/net/minecraft/world/entity/animal/Fox.java -index 6b931060a7be54aa6a1c0d196c52c4e4b56c0a95..ce46a3ff3a24666736211221fa9c5e69b8146be8 100644 +index 1da6563a3a1d85e562b85435bb27cd82bbc05faf..375ce5de2c041a7e61578c233ca0dc2ef3a588ca 100644 --- a/net/minecraft/world/entity/animal/Fox.java +++ b/net/minecraft/world/entity/animal/Fox.java -@@ -180,6 +180,14 @@ public class Fox extends Animal { +@@ -182,6 +182,14 @@ public class Fox extends Animal { } // Purpur end - Ridables @@ -235,10 +235,10 @@ index eb14c2c508efd927d4696ac4e7cd420104ccc192..c5a126718c93d01376b73eb1337cfa63 @Override diff --git a/net/minecraft/world/entity/animal/IronGolem.java b/net/minecraft/world/entity/animal/IronGolem.java -index ed2ddcb4d4736b384a1b90cc4ea0e086e9d53102..89799cb1545b29ff10c25096e5ec7ba12af74eb1 100644 +index 250c5b75b9e0d49eb8834ca9e7bbb5f8c029acb2..a8ae43ab84d746e8f046b52410602607e759761e 100644 --- a/net/minecraft/world/entity/animal/IronGolem.java +++ b/net/minecraft/world/entity/animal/IronGolem.java -@@ -92,6 +92,14 @@ public class IronGolem extends AbstractGolem implements NeutralMob { +@@ -93,6 +93,14 @@ public class IronGolem extends AbstractGolem implements NeutralMob { } // Purpur end - Ridables @@ -272,10 +272,10 @@ index 9de016cb4e1aba2ab8ff4f16827b3450e8155992..743faa77525d68181ee38415399bc607 public float getWalkTargetValue(BlockPos pos, LevelReader level) { return level.getBlockState(pos.below()).is(Blocks.MYCELIUM) ? 10.0F : level.getPathfindingCostFromLightLevels(pos); diff --git a/net/minecraft/world/entity/animal/Ocelot.java b/net/minecraft/world/entity/animal/Ocelot.java -index 91fa99c852e79e572165322212b0291e73ebf0b3..751aa4fea84db8e385001633df0c0d18ef6fde3a 100644 +index 7db9d782a62cfac5f851a6242f4c9a24784648dc..947c4d4a9f93c3da36ab5912ef362a60bdf75596 100644 --- a/net/minecraft/world/entity/animal/Ocelot.java +++ b/net/minecraft/world/entity/animal/Ocelot.java -@@ -81,6 +81,14 @@ public class Ocelot extends Animal { +@@ -82,6 +82,14 @@ public class Ocelot extends Animal { } // Purpur end - Ridables @@ -291,7 +291,7 @@ index 91fa99c852e79e572165322212b0291e73ebf0b3..751aa4fea84db8e385001633df0c0d18 return this.entityData.get(DATA_TRUSTING); } diff --git a/net/minecraft/world/entity/animal/Panda.java b/net/minecraft/world/entity/animal/Panda.java -index 7be63b0738a1962a4b2563e78ae72f48bc330a2a..c74f2a95a473464be3497ea39e366564d3f74e66 100644 +index 180d356bf24d20dc8c8534fdb59222e18672f1b4..53e4d1d35be13f04267151e1e8f808c5ad796ef5 100644 --- a/net/minecraft/world/entity/animal/Panda.java +++ b/net/minecraft/world/entity/animal/Panda.java @@ -133,6 +133,15 @@ public class Panda extends Animal { @@ -324,10 +324,10 @@ index 7be63b0738a1962a4b2563e78ae72f48bc330a2a..c74f2a95a473464be3497ea39e366564 if (this.isLazy()) { diff --git a/net/minecraft/world/entity/animal/Parrot.java b/net/minecraft/world/entity/animal/Parrot.java -index e0374a72738f8110e41471cd0ef2d044be616523..debda7f54b05831d16014fb271b1a996822fecb5 100644 +index 31e5ca2b2e0aaae75f4f2ffc2ada7d0224652608..01e2f610e8f0c54917899b54625b17fb0629df67 100644 --- a/net/minecraft/world/entity/animal/Parrot.java +++ b/net/minecraft/world/entity/animal/Parrot.java -@@ -193,6 +193,14 @@ public class Parrot extends ShoulderRidingEntity implements FlyingAnimal { +@@ -194,6 +194,14 @@ public class Parrot extends ShoulderRidingEntity implements FlyingAnimal { } // Purpur end - Ridables @@ -381,7 +381,7 @@ index 6ffb35630bab1303edb2179e4dcf749f9b3c3c28..2cf417f3bcf338a3edc4a2f71d8a700a @Override public AgeableMob getBreedOffspring(ServerLevel level, AgeableMob partner) { diff --git a/net/minecraft/world/entity/animal/Pufferfish.java b/net/minecraft/world/entity/animal/Pufferfish.java -index 51dd0333b02ee232f3e2b17c9ae3617ea36f18ba..8b895308ee7639396983c73dc4c2572c957df027 100644 +index 77862aea7b2bbc931d34c4e4ebd336bb5d5755d6..7ce2f0397b05e98a1d5721b6f5674cfbe7d19333 100644 --- a/net/minecraft/world/entity/animal/Pufferfish.java +++ b/net/minecraft/world/entity/animal/Pufferfish.java @@ -59,6 +59,13 @@ public class Pufferfish extends AbstractFish { @@ -399,10 +399,10 @@ index 51dd0333b02ee232f3e2b17c9ae3617ea36f18ba..8b895308ee7639396983c73dc4c2572c protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); diff --git a/net/minecraft/world/entity/animal/Rabbit.java b/net/minecraft/world/entity/animal/Rabbit.java -index f50b38c98ec6eb96a72dde926a20e9a3803ee630..1b29d2a49350ff557e09b1297b3825f2cc28bad3 100644 +index f2ae78ccf93dbd7617f04d3d13b8b809fde0d151..7a2a95bb2fc1b7d2103da8ce7dd7f820af284f4f 100644 --- a/net/minecraft/world/entity/animal/Rabbit.java +++ b/net/minecraft/world/entity/animal/Rabbit.java -@@ -145,6 +145,14 @@ public class Rabbit extends Animal { +@@ -147,6 +147,14 @@ public class Rabbit extends Animal { } // Purpur end - Ridables @@ -455,10 +455,10 @@ index 00af403efafbdd7274524403b2212c15026ee147..d6f2a04cf04090e3cb68f5111d47bff9 protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables diff --git a/net/minecraft/world/entity/animal/Squid.java b/net/minecraft/world/entity/animal/Squid.java -index 39c8703d3034b48c9218adf4d347bd5e24231145..ad2be25e45b350c7d971cd750245dbfa2b27ccb5 100644 +index ff12229101aae273e5e887a7761ce1ba1b34e0b9..4f8a5d0d6c3d302ebf8fcb3268f8e40b63686125 100644 --- a/net/minecraft/world/entity/animal/Squid.java +++ b/net/minecraft/world/entity/animal/Squid.java -@@ -91,6 +91,14 @@ public class Squid extends AgeableWaterCreature { +@@ -92,6 +92,14 @@ public class Squid extends AgeableWaterCreature { } // Purpur end - Ridables @@ -492,10 +492,10 @@ index 6c2497ab50dd7ab6d5a7043935b0beeed36bfad8..95368fd534c77e7d89ed6219f1f3948c return "entity.minecraft.tropical_fish.predefined." + variantId; } diff --git a/net/minecraft/world/entity/animal/Turtle.java b/net/minecraft/world/entity/animal/Turtle.java -index bb54f64cc36939bfd1e6ca57a1128b813fab2ad7..88bd025f491ec17884007cc5c1b57c64461d2901 100644 +index f10c2e3346fe8102e0b3a93f8b57b8d262172bea..047a1b27d4af3d050784241c8a34fdebbd8e1f49 100644 --- a/net/minecraft/world/entity/animal/Turtle.java +++ b/net/minecraft/world/entity/animal/Turtle.java -@@ -103,6 +103,14 @@ public class Turtle extends Animal { +@@ -104,6 +104,14 @@ public class Turtle extends Animal { } // Purpur end - Ridables @@ -511,10 +511,10 @@ index bb54f64cc36939bfd1e6ca57a1128b813fab2ad7..88bd025f491ec17884007cc5c1b57c64 this.homePos = homePos; } diff --git a/net/minecraft/world/entity/animal/allay/Allay.java b/net/minecraft/world/entity/animal/allay/Allay.java -index 4d08642a006d4b7d9b858d8c594c2888f0d7e595..d842d0158f1c685a9350c61158a6eaa36ea9e897 100644 +index 1811fed8085b7045003a6cc2731ce8fc6b4d74ea..bbe59d6ab90f1b1274289ef20811f914afa55fd3 100644 --- a/net/minecraft/world/entity/animal/allay/Allay.java +++ b/net/minecraft/world/entity/animal/allay/Allay.java -@@ -167,6 +167,14 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS +@@ -168,6 +168,14 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS } // Purpur end - Ridables @@ -530,10 +530,10 @@ index 4d08642a006d4b7d9b858d8c594c2888f0d7e595..d842d0158f1c685a9350c61158a6eaa3 protected Brain.Provider brainProvider() { return Brain.provider(MEMORY_TYPES, SENSOR_TYPES); diff --git a/net/minecraft/world/entity/animal/armadillo/Armadillo.java b/net/minecraft/world/entity/animal/armadillo/Armadillo.java -index 764ad0be43e225f2f9d84641158ad0844993489e..2343f4fcca96f4887c6fb00e8fdc43b959aba69e 100644 +index 60abd71799ec3bb61aae1f7933245156fbc1587b..17d1a3d7ad33d99a57ea11be467e746b3dc99cbe 100644 --- a/net/minecraft/world/entity/animal/armadillo/Armadillo.java +++ b/net/minecraft/world/entity/animal/armadillo/Armadillo.java -@@ -99,6 +99,14 @@ public class Armadillo extends Animal { +@@ -100,6 +100,14 @@ public class Armadillo extends Animal { } // Purpur end - Ridables @@ -596,10 +596,10 @@ index 486974bf7764a6eee37e67acdfc3b7798fa218ef..78df0eb0a0b6765406bd0dc041a02b09 public SoundEvent getAmbientSound() { return SoundEvents.CAMEL_AMBIENT; diff --git a/net/minecraft/world/entity/animal/coppergolem/CopperGolem.java b/net/minecraft/world/entity/animal/coppergolem/CopperGolem.java -index f63dee3d9192836c4a92696a4383bcfb1489385d..e50f9c7113063ce0c8696e06a3ca6ab768adc4af 100644 +index 66e0ccdf938023a8df1cf179224b64508646e3e0..cfe0bb8983dd1633085e03a6c2a57d99a0d822b8 100644 --- a/net/minecraft/world/entity/animal/coppergolem/CopperGolem.java +++ b/net/minecraft/world/entity/animal/coppergolem/CopperGolem.java -@@ -131,6 +131,16 @@ public class CopperGolem extends AbstractGolem implements ContainerUser, Shearab +@@ -133,6 +133,16 @@ public class CopperGolem extends AbstractGolem implements ContainerUser, Shearab } // Purpur end - Ridables @@ -617,10 +617,10 @@ index f63dee3d9192836c4a92696a4383bcfb1489385d..e50f9c7113063ce0c8696e06a3ca6ab7 return Mob.createMobAttributes().add(Attributes.MOVEMENT_SPEED, 0.2F).add(Attributes.STEP_HEIGHT, 1.0).add(Attributes.MAX_HEALTH, 12.0); } diff --git a/net/minecraft/world/entity/animal/horse/AbstractHorse.java b/net/minecraft/world/entity/animal/horse/AbstractHorse.java -index 628f93f477d188cb4400be9a12cdfe09badcb971..59d5f89403a33d402910a0adca13edd14607431f 100644 +index 28ea58a154d5a572268004ff9d36a5ae99f291e9..1692abcd9162f37beac489f1c704e0b8d3a6482a 100644 --- a/net/minecraft/world/entity/animal/horse/AbstractHorse.java +++ b/net/minecraft/world/entity/animal/horse/AbstractHorse.java -@@ -139,6 +139,46 @@ public abstract class AbstractHorse extends Animal implements HasCustomInventory +@@ -140,6 +140,46 @@ public abstract class AbstractHorse extends Animal implements HasCustomInventory } // Purpur end - Ridables @@ -667,7 +667,7 @@ index 628f93f477d188cb4400be9a12cdfe09badcb971..59d5f89403a33d402910a0adca13edd1 @Override protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HorseHasRider(this)); // Purpur - Ridables -@@ -1057,7 +1097,7 @@ public abstract class AbstractHorse extends Animal implements HasCustomInventory +@@ -1058,7 +1098,7 @@ public abstract class AbstractHorse extends Animal implements HasCustomInventory spawnGroupData = new AgeableMob.AgeableMobGroupData(0.2F); } @@ -873,10 +873,10 @@ index c916c28b0d3115588cedf84cf70469b6f6050ec9..6684f5dfb7dec101bad15b7ede3d9fd3 return createBaseHorseAttributes().add(Attributes.MAX_HEALTH, 15.0).add(Attributes.MOVEMENT_SPEED, 0.2F); } diff --git a/net/minecraft/world/entity/animal/sheep/Sheep.java b/net/minecraft/world/entity/animal/sheep/Sheep.java -index 1e453cdbe3c290209fd2fb912a90fb44a642959a..0e371655c8a500bad69626475222f9e726013c02 100644 +index 52cdadd752c7e470a22eaac70143766d0ad46843..e479dd9e94ee931b6e9001f89dc36406c3dde209 100644 --- a/net/minecraft/world/entity/animal/sheep/Sheep.java +++ b/net/minecraft/world/entity/animal/sheep/Sheep.java -@@ -79,6 +79,14 @@ public class Sheep extends Animal implements Shearable { +@@ -80,6 +80,14 @@ public class Sheep extends Animal implements Shearable { } // Purpur end - Ridables @@ -892,10 +892,10 @@ index 1e453cdbe3c290209fd2fb912a90fb44a642959a..0e371655c8a500bad69626475222f9e7 protected void registerGoals() { this.eatBlockGoal = new EatBlockGoal(this); diff --git a/net/minecraft/world/entity/animal/sniffer/Sniffer.java b/net/minecraft/world/entity/animal/sniffer/Sniffer.java -index 1013898f40c82b64bc62eb99365d10a57e8f66b5..cd6a5173e2c6d49c7df9baae464b391ea1fdd620 100644 +index 3d5cf62bd9bd99a978b7dc535675178deb695af0..eb6675394ecc5bba67e0f8bb0220ad92ef2b5e4f 100644 --- a/net/minecraft/world/entity/animal/sniffer/Sniffer.java +++ b/net/minecraft/world/entity/animal/sniffer/Sniffer.java -@@ -105,6 +105,14 @@ public class Sniffer extends Animal { +@@ -106,6 +106,14 @@ public class Sniffer extends Animal { } // Purpur end - Ridables @@ -911,10 +911,10 @@ index 1013898f40c82b64bc62eb99365d10a57e8f66b5..cd6a5173e2c6d49c7df9baae464b391e protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); diff --git a/net/minecraft/world/entity/animal/wolf/Wolf.java b/net/minecraft/world/entity/animal/wolf/Wolf.java -index 901138575d9468374565d395b56bfaeb353479f7..56db9816b52aed4facc80c95ec664cd98c6daca2 100644 +index b452d7c881f9b90ad429e9a522b17dfdbb480c31..826c56281f1452fd1f4f9fba12a1fd169532e8cf 100644 --- a/net/minecraft/world/entity/animal/wolf/Wolf.java +++ b/net/minecraft/world/entity/animal/wolf/Wolf.java -@@ -208,6 +208,14 @@ public class Wolf extends TamableAnimal implements NeutralMob { +@@ -209,6 +209,14 @@ public class Wolf extends TamableAnimal implements NeutralMob { } // Purpur end - Ridables @@ -930,10 +930,10 @@ index 901138575d9468374565d395b56bfaeb353479f7..56db9816b52aed4facc80c95ec664cd9 protected void registerGoals() { this.goalSelector.addGoal(1, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -index f695e3ba62a4047d8203c0399790d646e97309f7..81f73a5b400a346ee86285bf4ca6c846c0c4b87e 100644 +index 743abfe1eceaa8e9530790abdc787d3765c1191e..52c959961a13bd3b85a262128b0950c60f96dc2f 100644 --- a/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java +++ b/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -@@ -165,6 +165,13 @@ public class EnderDragon extends Mob implements Enemy { +@@ -166,6 +166,13 @@ public class EnderDragon extends Mob implements Enemy { } // Purpur end - Ridables @@ -947,7 +947,7 @@ index f695e3ba62a4047d8203c0399790d646e97309f7..81f73a5b400a346ee86285bf4ca6c846 public static AttributeSupplier.Builder createAttributes() { return Mob.createMobAttributes().add(Attributes.MAX_HEALTH, 200.0).add(Attributes.CAMERA_DISTANCE, 16.0); } -@@ -1063,7 +1070,7 @@ public class EnderDragon extends Mob implements Enemy { +@@ -1064,7 +1071,7 @@ public class EnderDragon extends Mob implements Enemy { @Override protected float sanitizeScale(float scale) { @@ -957,10 +957,10 @@ index f695e3ba62a4047d8203c0399790d646e97309f7..81f73a5b400a346ee86285bf4ca6c846 // CraftBukkit start - SPIGOT-2420: Special case, the ender dragon drops 12000 xp for the first kill and 500 xp for every other kill and this over time. diff --git a/net/minecraft/world/entity/boss/wither/WitherBoss.java b/net/minecraft/world/entity/boss/wither/WitherBoss.java -index 151bfd4de9a11642ca128e91a6ed80d41820b358..8e5e364d297a3eb55b67ce7081ec7548cbf7f3a6 100644 +index 03167b61a9f2886d31881af809d7bca7be325872..3b037d2565fb30f68384d2b391f6d8219fdc9732 100644 --- a/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/net/minecraft/world/entity/boss/wither/WitherBoss.java -@@ -213,6 +213,14 @@ public class WitherBoss extends Monster implements RangedAttackMob { +@@ -214,6 +214,14 @@ public class WitherBoss extends Monster implements RangedAttackMob { } // Purpur end - Ridables @@ -975,7 +975,7 @@ index 151bfd4de9a11642ca128e91a6ed80d41820b358..8e5e364d297a3eb55b67ce7081ec7548 @Override protected PathNavigation createNavigation(Level level) { FlyingPathNavigation flyingPathNavigation = new FlyingPathNavigation(this, level); -@@ -435,7 +443,7 @@ public class WitherBoss extends Monster implements RangedAttackMob { +@@ -436,7 +444,7 @@ public class WitherBoss extends Monster implements RangedAttackMob { this.setInvulnerableTicks(i); if (this.tickCount % 10 == 0) { @@ -985,10 +985,10 @@ index 151bfd4de9a11642ca128e91a6ed80d41820b358..8e5e364d297a3eb55b67ce7081ec7548 } else { super.customServerAiStep(level); diff --git a/net/minecraft/world/entity/monster/Blaze.java b/net/minecraft/world/entity/monster/Blaze.java -index 937300689b75486ba582b6dbe294c4355dc31d9e..8621ab150da50116260cd76821c02109cd32e351 100644 +index 1571709d83b8e01707dac274447419413ef82a43..cb536ec921c837b86c2c1dfbe1d6b08a9b18bf0f 100644 --- a/net/minecraft/world/entity/monster/Blaze.java +++ b/net/minecraft/world/entity/monster/Blaze.java -@@ -75,6 +75,14 @@ public class Blaze extends Monster { +@@ -76,6 +76,14 @@ public class Blaze extends Monster { } // Purpur end - Ridables @@ -1104,7 +1104,7 @@ index e5d16ca14a40d520dce43dd3d9b6347aefbd25d7..57fb334f670d35aa181b13e12fa2c5f3 return Guardian.createAttributes().add(Attributes.MOVEMENT_SPEED, 0.3F).add(Attributes.ATTACK_DAMAGE, 8.0).add(Attributes.MAX_HEALTH, 80.0); } diff --git a/net/minecraft/world/entity/monster/EnderMan.java b/net/minecraft/world/entity/monster/EnderMan.java -index eaa5cc7e72ba604d14e41975d24624f1def04656..b8fd334b9dd704d5d4502a6e051db09cced24f59 100644 +index 6ded7dfa381d0041dffb914a85c2e835c0b4a493..ae532c1b5f838223d416564eab626a71b2d423e7 100644 --- a/net/minecraft/world/entity/monster/EnderMan.java +++ b/net/minecraft/world/entity/monster/EnderMan.java @@ -107,6 +107,14 @@ public class EnderMan extends Monster implements NeutralMob { @@ -1161,10 +1161,10 @@ index 70cf903d95d35b539e9a299a4035c8ddde5e4b97..a5243b7969fec5d60b94368caf5e962c protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/Ghast.java b/net/minecraft/world/entity/monster/Ghast.java -index efe4ed636d85624e4122880f95c634ffa7a3891a..9e4048d55a386aad22f2054632dff457b10f1068 100644 +index 89319696240f0f58fdac19b7faff29546f0ba0de..30b75f7e7a79aaa602083eb07f125a3a5e5f19f9 100644 --- a/net/minecraft/world/entity/monster/Ghast.java +++ b/net/minecraft/world/entity/monster/Ghast.java -@@ -74,6 +74,14 @@ public class Ghast extends Mob implements Enemy { +@@ -75,6 +75,14 @@ public class Ghast extends Mob implements Enemy { } // Purpur end - Ridables @@ -1201,10 +1201,10 @@ index dcbe6bbce0baa4fad7fe180944beeb6ca4026f7d..416bb85fc87b5f9e372f33df8fe27f12 return Monster.createMonsterAttributes() .add(Attributes.MAX_HEALTH, 100.0) diff --git a/net/minecraft/world/entity/monster/Guardian.java b/net/minecraft/world/entity/monster/Guardian.java -index 3c20818bf6f86cb34666d12084caf13d409a35ca..70fbfe1d4d100d742712d19daf69c6b93891dab6 100644 +index 8e5990d581dec09dccb1c05c636b9b617b289aac..d206d9b8563dfd38c0ff4c8b4abe00aa064a2305 100644 --- a/net/minecraft/world/entity/monster/Guardian.java +++ b/net/minecraft/world/entity/monster/Guardian.java -@@ -90,6 +90,14 @@ public class Guardian extends Monster { +@@ -91,6 +91,14 @@ public class Guardian extends Monster { } // Purpur end - Ridables @@ -1220,10 +1220,10 @@ index 3c20818bf6f86cb34666d12084caf13d409a35ca..70fbfe1d4d100d742712d19daf69c6b9 protected void registerGoals() { MoveTowardsRestrictionGoal moveTowardsRestrictionGoal = new MoveTowardsRestrictionGoal(this, 1.0); diff --git a/net/minecraft/world/entity/monster/Husk.java b/net/minecraft/world/entity/monster/Husk.java -index af1af1687bbbc9a60b71ad83879ca5cb5af15eef..43d4e0eb3defdd4c76896097788d2ba0970c33c9 100644 +index 671796f230bec419c3c40ff89c410babd4a31628..18fde06fce29973871547db5f638ba05638a8b18 100644 --- a/net/minecraft/world/entity/monster/Husk.java +++ b/net/minecraft/world/entity/monster/Husk.java -@@ -37,6 +37,18 @@ public class Husk extends Zombie { +@@ -38,6 +38,18 @@ public class Husk extends Zombie { } // Purpur end - Ridables @@ -1297,10 +1297,10 @@ index 8b58e0a76c9651cacacb503391ef9b6a53a3ddbc..db9e4dff83640b1e499db944a0c1cf3b return Monster.createMonsterAttributes().add(Attributes.MOVEMENT_SPEED, 0.2F); } diff --git a/net/minecraft/world/entity/monster/Phantom.java b/net/minecraft/world/entity/monster/Phantom.java -index d29752add305e97d2265606b7b4212c308072523..ba9368c601f0b720cc665b96f392be1370fb9556 100644 +index cf297cb029ea2226f876eaec0dc0875b00abb281..f2af9bd8265d66711c7dcc8ef16893edfe8d918a 100644 --- a/net/minecraft/world/entity/monster/Phantom.java +++ b/net/minecraft/world/entity/monster/Phantom.java -@@ -141,7 +141,10 @@ public class Phantom extends Mob implements Enemy { +@@ -142,7 +142,10 @@ public class Phantom extends Mob implements Enemy { private void updatePhantomSizeInfo() { this.refreshDimensions(); if (level().purpurConfig.phantomFlamesOnSwoop && attackPhase == AttackPhase.SWOOP) shoot(); // Purpur - Ridables - Phantom flames on swoop @@ -1312,7 +1312,7 @@ index d29752add305e97d2265606b7b4212c308072523..ba9368c601f0b720cc665b96f392be13 } public int getPhantomSize() { -@@ -161,6 +164,23 @@ public class Phantom extends Mob implements Enemy { +@@ -162,6 +165,23 @@ public class Phantom extends Mob implements Enemy { return this.getId() * 3; } @@ -1356,10 +1356,10 @@ index f75eab4f895c0ed381b65717dc106dc13325428a..748233be6bdfd735aa3ccc02a7ba21a4 protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/Ravager.java b/net/minecraft/world/entity/monster/Ravager.java -index 91514bc1eb85eb224b8760f17cecc423c6206554..f43125ca7d52170a1ca2a54a5b2758794f25fbd1 100644 +index 34a20b3d482b98c4fca961e5fd930b283b68dc41..47741944d11b55bcff46bb9abc2a059652a4f86a 100644 --- a/net/minecraft/world/entity/monster/Ravager.java +++ b/net/minecraft/world/entity/monster/Ravager.java -@@ -93,6 +93,14 @@ public class Ravager extends Raider { +@@ -94,6 +94,14 @@ public class Ravager extends Raider { } // Purpur end - Ridables @@ -1403,7 +1403,7 @@ index d9401842948fed8edd6d31fcf08da2747f1a3921..3909804ba8f9e220260efe6255ff2b29 private void setVariant(Optional variant) { diff --git a/net/minecraft/world/entity/monster/Silverfish.java b/net/minecraft/world/entity/monster/Silverfish.java -index b278c8cce74f16c49f579ca13688dabfce95d14d..23722456ce82dcc6b571b96e5c9b0d70005f9c2e 100644 +index 2fb89fffb425afb0b0267fc45f8198b7b120d10c..276f8e8234ed461af57c7fe0b7ea0346c86b9698 100644 --- a/net/minecraft/world/entity/monster/Silverfish.java +++ b/net/minecraft/world/entity/monster/Silverfish.java @@ -56,6 +56,16 @@ public class Silverfish extends Monster { @@ -1424,10 +1424,10 @@ index b278c8cce74f16c49f579ca13688dabfce95d14d..23722456ce82dcc6b571b96e5c9b0d70 protected void registerGoals() { this.friendsGoal = new Silverfish.SilverfishWakeUpFriendsGoal(this); diff --git a/net/minecraft/world/entity/monster/Skeleton.java b/net/minecraft/world/entity/monster/Skeleton.java -index c39072d9265b2640e3bd701dacb54aa629f3b230..8d1f83ba8042435a0dc1e6e1fb9873173efe277d 100644 +index d225d9cd41bdb3b6e998f3ca38394d1d3fe8b64b..0a5d78da5f809afde38ebbbcec3798a7a5f0f9be 100644 --- a/net/minecraft/world/entity/monster/Skeleton.java +++ b/net/minecraft/world/entity/monster/Skeleton.java -@@ -42,6 +42,13 @@ public class Skeleton extends AbstractSkeleton { +@@ -43,6 +43,13 @@ public class Skeleton extends AbstractSkeleton { } // Purpur end - Ridables @@ -1554,7 +1554,7 @@ index f03ec1e8985f2c81ad2ec13d136e4c0362be4fff..5d41885ceb7145a516a398da0d7553fa EntityType entityType, LevelAccessor level, EntitySpawnReason spawnReason, BlockPos pos, RandomSource random ) { diff --git a/net/minecraft/world/entity/monster/Vex.java b/net/minecraft/world/entity/monster/Vex.java -index 6713498d873980bd979b864ab0ac6dfc9d4e1482..7fddf0a36b1c4a3f7fbab8b0319e00281e8acd90 100644 +index 99fe282067a2aa54d8fdb72c226d27cab6966b6c..09211a8a5b893f878ad173c4ab71393c8f309f58 100644 --- a/net/minecraft/world/entity/monster/Vex.java +++ b/net/minecraft/world/entity/monster/Vex.java @@ -104,6 +104,14 @@ public class Vex extends Monster implements TraceableEntity { @@ -1592,10 +1592,10 @@ index c584a404838d5f8a916a27a74b4f4e8e3d5c1b1d..fdaf024a27825844105ef62baddf30e3 protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/Witch.java b/net/minecraft/world/entity/monster/Witch.java -index bed6ce6749df67c3a4966958801d13ccd9529b1d..60a6d8880e6d0009cfd136599ca6f1c1b07adc42 100644 +index 8c88c5a719d15a90ba449eccf9fd568e1d2c4e8d..35dc597e5b0e703319eb5ff31bde0960b224fc40 100644 --- a/net/minecraft/world/entity/monster/Witch.java +++ b/net/minecraft/world/entity/monster/Witch.java -@@ -73,6 +73,14 @@ public class Witch extends Raider implements RangedAttackMob { +@@ -74,6 +74,14 @@ public class Witch extends Raider implements RangedAttackMob { } // Purpur end - Ridables @@ -1630,10 +1630,10 @@ index 7061a0ae68ed28ea72335bb5eab013a6554abc07..4d4e04d9fb5b68897ffa6f299bd2009b protected void registerGoals() { this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractPiglin.class, true)); diff --git a/net/minecraft/world/entity/monster/Zoglin.java b/net/minecraft/world/entity/monster/Zoglin.java -index 68095374ffd82db27ed704eb82dd68c51071df19..5e52eab9a78db8a5652bdee7127d75921f641ab9 100644 +index cab7d33f40eacdb0ba8a7058699eb2548e364524..e7e840ba5383c28e0167e7dd032359403ae3224a 100644 --- a/net/minecraft/world/entity/monster/Zoglin.java +++ b/net/minecraft/world/entity/monster/Zoglin.java -@@ -103,6 +103,14 @@ public class Zoglin extends Monster implements HoglinBase { +@@ -104,6 +104,14 @@ public class Zoglin extends Monster implements HoglinBase { } // Purpur end - Ridables @@ -1649,10 +1649,10 @@ index 68095374ffd82db27ed704eb82dd68c51071df19..5e52eab9a78db8a5652bdee7127d7592 protected Brain.Provider brainProvider() { return Brain.provider(MEMORY_TYPES, SENSOR_TYPES); diff --git a/net/minecraft/world/entity/monster/Zombie.java b/net/minecraft/world/entity/monster/Zombie.java -index 3f000e9a1be45134b12b46badc2b52d23b960e9a..6e106c03fc81ab9f5a9de80e86e0e46cf853a232 100644 +index a2ee621ba8b242a4e4e68c3a0a1d8e63c1421c3f..c0bfb7fda27fe6da33918f69f4d50d2fb2b66063 100644 --- a/net/minecraft/world/entity/monster/Zombie.java +++ b/net/minecraft/world/entity/monster/Zombie.java -@@ -119,6 +119,14 @@ public class Zombie extends Monster { +@@ -120,6 +120,14 @@ public class Zombie extends Monster { } // Purpur end - Ridables @@ -1667,7 +1667,7 @@ index 3f000e9a1be45134b12b46badc2b52d23b960e9a..6e106c03fc81ab9f5a9de80e86e0e46c @Override protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables -@@ -631,7 +639,7 @@ public class Zombie extends Monster { +@@ -632,7 +640,7 @@ public class Zombie extends Monster { } protected void randomizeReinforcementsChance() { @@ -1677,10 +1677,10 @@ index 3f000e9a1be45134b12b46badc2b52d23b960e9a..6e106c03fc81ab9f5a9de80e86e0e46c class ZombieAttackTurtleEggGoal extends RemoveBlockGoal { diff --git a/net/minecraft/world/entity/monster/ZombieVillager.java b/net/minecraft/world/entity/monster/ZombieVillager.java -index f9c119d38c2812cfeeb775e728f6c751bf748c85..1de823b94ee0e53109b4dd3e726f721eaed0acd4 100644 +index f460df654393c0bd2e27b9fd96786d2e3fa5669e..bb716fb7d19568dbe51af161c3b1543ba6f5169c 100644 --- a/net/minecraft/world/entity/monster/ZombieVillager.java +++ b/net/minecraft/world/entity/monster/ZombieVillager.java -@@ -90,6 +90,18 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { +@@ -92,6 +92,18 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { } // Purpur end - Ridables @@ -1728,10 +1728,10 @@ index d4f036c7d4b6652c5585f1ce5af9b26f9ed5b856..b78ba21e6aa753e3df6545432038daa0 @Nullable diff --git a/net/minecraft/world/entity/monster/creaking/Creaking.java b/net/minecraft/world/entity/monster/creaking/Creaking.java -index c3c4dfb89c807020c4147140bc23ba1ce5cfe888..f31a29531cc7d63bed5a4bcbe3986bcc366b6103 100644 +index 86379fce8045722584736f1b39707f3d9a1fc4f4..6ab590b428e1a694b2538c53fabae9297b58b868 100644 --- a/net/minecraft/world/entity/monster/creaking/Creaking.java +++ b/net/minecraft/world/entity/monster/creaking/Creaking.java -@@ -125,6 +125,14 @@ public class Creaking extends Monster { +@@ -126,6 +126,14 @@ public class Creaking extends Monster { } // Purpur end - Ridables @@ -1747,10 +1747,10 @@ index c3c4dfb89c807020c4147140bc23ba1ce5cfe888..f31a29531cc7d63bed5a4bcbe3986bcc protected BodyRotationControl createBodyControl() { return new Creaking.CreakingBodyRotationControl(this); diff --git a/net/minecraft/world/entity/monster/hoglin/Hoglin.java b/net/minecraft/world/entity/monster/hoglin/Hoglin.java -index f304dea5ee2216b5b239dc5ce145f0aa425f5938..b468ad62723c20b9961c8b4b9c0c34a9518d98ea 100644 +index 9f4ef9292e89565c3de0d96bcc3c4c48d3c53dff..facab39612157cdc39bb7d8efad6e90d4fb7d001 100644 --- a/net/minecraft/world/entity/monster/hoglin/Hoglin.java +++ b/net/minecraft/world/entity/monster/hoglin/Hoglin.java -@@ -112,6 +112,14 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { +@@ -113,6 +113,14 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { } // Purpur end - Ridables @@ -1804,10 +1804,10 @@ index e1b1a909c7e92c5fa5e8f9c155bc57290ef6667b..31e38737806098795de0e87fbcaf60d4 return Monster.createMonsterAttributes() .add(Attributes.MAX_HEALTH, 50.0) diff --git a/net/minecraft/world/entity/npc/Villager.java b/net/minecraft/world/entity/npc/Villager.java -index 5f982512eb04cbfff21e270026046a384bb01537..05d748a7de077694b1035d3e73f35f1f98419902 100644 +index 7f9bd5695c960e88b9f59af4b67849db9c4ba10b..16c2db7705c594ba10af274c4f5fdd1d5623c6ae 100644 --- a/net/minecraft/world/entity/npc/Villager.java +++ b/net/minecraft/world/entity/npc/Villager.java -@@ -271,6 +271,14 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -272,6 +272,14 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } // Purpur end - Ridables diff --git a/purpur-server/minecraft-patches/features/0003-Barrels-and-enderchests-6-rows.patch b/purpur-server/minecraft-patches/features/0003-Barrels-and-enderchests-6-rows.patch index d8f19b979..621f9352d 100644 --- a/purpur-server/minecraft-patches/features/0003-Barrels-and-enderchests-6-rows.patch +++ b/purpur-server/minecraft-patches/features/0003-Barrels-and-enderchests-6-rows.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Barrels and enderchests 6 rows diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java -index 235c179000b389c3b30bbe1764b837b634546512..f6b86ee7b9e5cc1b3ce0d5097e1ba8b566038a11 100644 +index 0c3451caa323ce2553c0d7ee00e7bf8cc8766b2c..1328cc6402134042d5890bedaaacf6e9807eb5ec 100644 --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java -@@ -882,6 +882,27 @@ public abstract class PlayerList { +@@ -883,6 +883,27 @@ public abstract class PlayerList { player.getBukkitEntity().recalculatePermissions(); // CraftBukkit this.server.getCommands().sendCommands(player); } // Paper - Add sendOpLevel API @@ -37,10 +37,10 @@ index 235c179000b389c3b30bbe1764b837b634546512..f6b86ee7b9e5cc1b3ce0d5097e1ba8b5 // Paper start - whitelist verify event / login event diff --git a/net/minecraft/world/entity/player/Player.java b/net/minecraft/world/entity/player/Player.java -index 2c0b158c6e666941a073295e9b112f64ad5b6d90..21e0bd539188352c9db551c96af37a6a87a089d2 100644 +index f279a628d6627080743d9f4c49ff8bfd13494fed..f30cb0815e757b54ba98ac1b226cf657448512e0 100644 --- a/net/minecraft/world/entity/player/Player.java +++ b/net/minecraft/world/entity/player/Player.java -@@ -182,6 +182,7 @@ public abstract class Player extends Avatar implements ContainerUser { +@@ -183,6 +183,7 @@ public abstract class Player extends Avatar implements ContainerUser { public net.kyori.adventure.util.TriState flyingFallDamage = net.kyori.adventure.util.TriState.NOT_SET; // Paper - flying fall damage public int burpDelay = 0; // Purpur - Burp delay public boolean canPortalInstant = false; // Purpur - Add portal permission bypass @@ -159,10 +159,10 @@ index 4fe246e457bd9befcdcb6e2301bd55e949322d6f..5189125f4a66590b7842d19cd940de65 public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { return new EnderChestBlockEntity(pos, state); diff --git a/net/minecraft/world/level/block/entity/BarrelBlockEntity.java b/net/minecraft/world/level/block/entity/BarrelBlockEntity.java -index f8cad05f5f1692c9a8701ff01f33d83477600c34..a4a4150beab8f2fa409a2d1d495a56679aecbae3 100644 +index 75c09a2079c89f9346391abdd01ef8790b9cbb13..04f6b3c328377091734a111f5a219379e32b5640 100644 --- a/net/minecraft/world/level/block/entity/BarrelBlockEntity.java +++ b/net/minecraft/world/level/block/entity/BarrelBlockEntity.java -@@ -58,7 +58,16 @@ public class BarrelBlockEntity extends RandomizableContainerBlockEntity { +@@ -59,7 +59,16 @@ public class BarrelBlockEntity extends RandomizableContainerBlockEntity { } // CraftBukkit end private static final Component DEFAULT_NAME = Component.translatable("container.barrel"); @@ -180,7 +180,7 @@ index f8cad05f5f1692c9a8701ff01f33d83477600c34..a4a4150beab8f2fa409a2d1d495a5667 public final ContainerOpenersCounter openersCounter = new ContainerOpenersCounter() { @Override protected void onOpen(Level level, BlockPos pos, BlockState state) { -@@ -110,7 +119,16 @@ public class BarrelBlockEntity extends RandomizableContainerBlockEntity { +@@ -111,7 +120,16 @@ public class BarrelBlockEntity extends RandomizableContainerBlockEntity { @Override public int getContainerSize() { @@ -198,7 +198,7 @@ index f8cad05f5f1692c9a8701ff01f33d83477600c34..a4a4150beab8f2fa409a2d1d495a5667 } @Override -@@ -130,7 +148,16 @@ public class BarrelBlockEntity extends RandomizableContainerBlockEntity { +@@ -131,7 +149,16 @@ public class BarrelBlockEntity extends RandomizableContainerBlockEntity { @Override protected AbstractContainerMenu createMenu(int id, Inventory player) { diff --git a/purpur-server/minecraft-patches/features/0006-Minecart-settings-and-WASD-controls.patch b/purpur-server/minecraft-patches/features/0006-Minecart-settings-and-WASD-controls.patch index 6acc823c6..ee9459135 100644 --- a/purpur-server/minecraft-patches/features/0006-Minecart-settings-and-WASD-controls.patch +++ b/purpur-server/minecraft-patches/features/0006-Minecart-settings-and-WASD-controls.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Minecart settings and WASD controls diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java -index b329ac34ff7fb9fa15daca26e0d2593e2db59a6f..365739b67b6d62f3e7da529117349dcbc9a509da 100644 +index 3624c08509131b1acbeaffc8c90f8b52d16d8d52..eb234fa15325d865ccd7c91026f83911a2c422d5 100644 --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java -@@ -1313,6 +1313,11 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -1314,6 +1314,11 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc } else { // Purpur start - Add boat fall damage config if (damageSource.is(net.minecraft.tags.DamageTypeTags.IS_FALL)) { @@ -21,7 +21,7 @@ index b329ac34ff7fb9fa15daca26e0d2593e2db59a6f..365739b67b6d62f3e7da529117349dcb return false; } diff --git a/net/minecraft/world/entity/vehicle/AbstractMinecart.java b/net/minecraft/world/entity/vehicle/AbstractMinecart.java -index 2ae92078d69e5ab3cc27085a9c5e5ccf9f2c175d..d3099eed865e1c0eb7eb1eab440100c1815f0386 100644 +index 3454506b2d7ada401600e2adccd462a15bd86723..0c7e3e821183eddce764f066fb8f34f9908623b5 100644 --- a/net/minecraft/world/entity/vehicle/AbstractMinecart.java +++ b/net/minecraft/world/entity/vehicle/AbstractMinecart.java @@ -102,6 +102,10 @@ public abstract class AbstractMinecart extends VehicleEntity { diff --git a/purpur-server/minecraft-patches/features/0007-Villagers-follow-emerald-blocks.patch b/purpur-server/minecraft-patches/features/0007-Villagers-follow-emerald-blocks.patch index 0f1a4ce47..02566bc79 100644 --- a/purpur-server/minecraft-patches/features/0007-Villagers-follow-emerald-blocks.patch +++ b/purpur-server/minecraft-patches/features/0007-Villagers-follow-emerald-blocks.patch @@ -43,10 +43,10 @@ index 6bb17ecbd93f6ced5436cf75f3695f44eedd4bd9..e60387c4ef2aa0fc35a559d75b1a7c15 public static final int VILLAGER_SLOT_OFFSET = 300; private static final int VILLAGER_INVENTORY_SIZE = 8; diff --git a/net/minecraft/world/entity/npc/Villager.java b/net/minecraft/world/entity/npc/Villager.java -index 05d748a7de077694b1035d3e73f35f1f98419902..b7b290e9870f8f51af7e44f71b1e04ce9c552626 100644 +index 16c2db7705c594ba10af274c4f5fdd1d5623c6ae..4a2fad1d8d6b20932b6be616e8e6b099daf715dd 100644 --- a/net/minecraft/world/entity/npc/Villager.java +++ b/net/minecraft/world/entity/npc/Villager.java -@@ -268,6 +268,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -269,6 +269,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler @Override protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); @@ -54,7 +54,7 @@ index 05d748a7de077694b1035d3e73f35f1f98419902..b7b290e9870f8f51af7e44f71b1e04ce } // Purpur end - Ridables -@@ -276,6 +277,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -277,6 +278,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler public void initAttributes() { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.villagerMaxHealth); this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.villagerScale); @@ -62,7 +62,7 @@ index 05d748a7de077694b1035d3e73f35f1f98419902..b7b290e9870f8f51af7e44f71b1e04ce } // Purpur end - Configurable entity base attributes -@@ -344,7 +346,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -345,7 +347,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } public static AttributeSupplier.Builder createAttributes() { diff --git a/purpur-server/minecraft-patches/features/0008-Implement-elytra-settings.patch b/purpur-server/minecraft-patches/features/0008-Implement-elytra-settings.patch index 642c0b6be..804cd1496 100644 --- a/purpur-server/minecraft-patches/features/0008-Implement-elytra-settings.patch +++ b/purpur-server/minecraft-patches/features/0008-Implement-elytra-settings.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Implement elytra settings diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java -index be657ca79feed6a39fa5ca173d875e6678faf27e..01b7bdf66a2b52d204257e497cfccc11a20ce4b0 100644 +index aeaf62b438fccc628ae3e8316d7965cdbea75731..2d0b13f76c2890eeef2c701a17d535e157195b29 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java -@@ -3750,7 +3750,18 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -3753,7 +3753,18 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin .filter(equipmentSlot1 -> canGlideUsing(this.getItemBySlot(equipmentSlot1), equipmentSlot1)) .toList(); EquipmentSlot equipmentSlot = Util.getRandom(list, this.random); diff --git a/purpur-server/minecraft-patches/features/0009-Configurable-jockey-options.patch b/purpur-server/minecraft-patches/features/0009-Configurable-jockey-options.patch index b983bf8bb..0cced5f4e 100644 --- a/purpur-server/minecraft-patches/features/0009-Configurable-jockey-options.patch +++ b/purpur-server/minecraft-patches/features/0009-Configurable-jockey-options.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Configurable jockey options diff --git a/net/minecraft/world/entity/monster/Drowned.java b/net/minecraft/world/entity/monster/Drowned.java -index 453f9d6e9581165c59b959ea6bccc5387dff91bd..ee13dd20af2730f3051f77fb0e73ce5c8253bd4a 100644 +index 4037f13778d21461c862c26a0fcc3c08e6d472ae..af8c33c6d8ecbc7c3d8a33fc740adc26a43c08b3 100644 --- a/net/minecraft/world/entity/monster/Drowned.java +++ b/net/minecraft/world/entity/monster/Drowned.java @@ -106,6 +106,23 @@ public class Drowned extends Zombie implements RangedAttackMob { @@ -33,10 +33,10 @@ index 453f9d6e9581165c59b959ea6bccc5387dff91bd..ee13dd20af2730f3051f77fb0e73ce5c protected void addBehaviourGoals() { this.goalSelector.addGoal(1, new Drowned.DrownedGoToWaterGoal(this, 1.0)); diff --git a/net/minecraft/world/entity/monster/Husk.java b/net/minecraft/world/entity/monster/Husk.java -index 4a617bb6bc3675d8cb42be0b5ae19befd4b3176f..557b2d684936c15299d7082a92ec8b08e7fab9a5 100644 +index 18fde06fce29973871547db5f638ba05638a8b18..d3e1f5debbd34b8afff06498de48299da37c3add 100644 --- a/net/minecraft/world/entity/monster/Husk.java +++ b/net/minecraft/world/entity/monster/Husk.java -@@ -49,6 +49,23 @@ public class Husk extends Zombie { +@@ -50,6 +50,23 @@ public class Husk extends Zombie { } // Purpur end - Configurable entity base attributes @@ -61,10 +61,10 @@ index 4a617bb6bc3675d8cb42be0b5ae19befd4b3176f..557b2d684936c15299d7082a92ec8b08 EntityType entityType, ServerLevelAccessor level, EntitySpawnReason spawnReason, BlockPos pos, RandomSource random ) { diff --git a/net/minecraft/world/entity/monster/Zombie.java b/net/minecraft/world/entity/monster/Zombie.java -index 4f5d19c19887dc543c336bb72dac76c82503f792..73b6ffd6a1f27a5d49125b51d3396df5d84493f6 100644 +index c0bfb7fda27fe6da33918f69f4d50d2fb2b66063..3095dfbba2c3e61a550abc7c48e91f5704909e03 100644 --- a/net/minecraft/world/entity/monster/Zombie.java +++ b/net/minecraft/world/entity/monster/Zombie.java -@@ -127,6 +127,20 @@ public class Zombie extends Monster { +@@ -128,6 +128,20 @@ public class Zombie extends Monster { } // Purpur end - Configurable entity base attributes @@ -85,7 +85,7 @@ index 4f5d19c19887dc543c336bb72dac76c82503f792..73b6ffd6a1f27a5d49125b51d3396df5 @Override protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables -@@ -556,19 +570,18 @@ public class Zombie extends Monster { +@@ -557,19 +571,18 @@ public class Zombie extends Monster { } if (spawnGroupData instanceof Zombie.ZombieGroupData zombieGroupData) { @@ -111,7 +111,7 @@ index 4f5d19c19887dc543c336bb72dac76c82503f792..73b6ffd6a1f27a5d49125b51d3396df5 Chicken chicken1 = EntityType.CHICKEN.create(this.level(), EntitySpawnReason.JOCKEY); if (chicken1 != null) { chicken1.snapTo(this.getX(), this.getY(), this.getZ(), this.getYRot(), 0.0F); -@@ -577,6 +590,7 @@ public class Zombie extends Monster { +@@ -578,6 +591,7 @@ public class Zombie extends Monster { this.startRiding(chicken1, false, false); level.addFreshEntity(chicken1, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.MOUNT); // CraftBukkit } @@ -120,10 +120,10 @@ index 4f5d19c19887dc543c336bb72dac76c82503f792..73b6ffd6a1f27a5d49125b51d3396df5 } } diff --git a/net/minecraft/world/entity/monster/ZombieVillager.java b/net/minecraft/world/entity/monster/ZombieVillager.java -index 706c0cc803ede18f0790e94cfc989f0676199e7a..1d01131dae3900280d5c9ce9899f4afa09acfd46 100644 +index bb716fb7d19568dbe51af161c3b1543ba6f5169c..cf88072320f46ec9cf2194f8debe05e33702521f 100644 --- a/net/minecraft/world/entity/monster/ZombieVillager.java +++ b/net/minecraft/world/entity/monster/ZombieVillager.java -@@ -102,6 +102,23 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { +@@ -104,6 +104,23 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { } // Purpur end - Configurable entity base attributes @@ -148,7 +148,7 @@ index 706c0cc803ede18f0790e94cfc989f0676199e7a..1d01131dae3900280d5c9ce9899f4afa protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); diff --git a/net/minecraft/world/entity/monster/ZombifiedPiglin.java b/net/minecraft/world/entity/monster/ZombifiedPiglin.java -index a6244a3d5d8e48b81147d6aed7ac1126e9ae5d64..325d0f32fd8824dc1c7067eb9c303bdfc122c706 100644 +index b78ba21e6aa753e3df6545432038daa0070fa7b7..06e2207d7ea554226b02d65c7fb612a87da71caa 100644 --- a/net/minecraft/world/entity/monster/ZombifiedPiglin.java +++ b/net/minecraft/world/entity/monster/ZombifiedPiglin.java @@ -89,6 +89,23 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { diff --git a/purpur-server/minecraft-patches/features/0010-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch b/purpur-server/minecraft-patches/features/0010-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch index e4ecf9647..58fbf69ec 100644 --- a/purpur-server/minecraft-patches/features/0010-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch +++ b/purpur-server/minecraft-patches/features/0010-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch @@ -72,10 +72,10 @@ index 9503ec9d44a6c0811639b7d0cf504d32fefff58d..ab878a0f789fa0dc3713eedac1bbcebc @Override diff --git a/net/minecraft/world/entity/monster/Phantom.java b/net/minecraft/world/entity/monster/Phantom.java -index ba9368c601f0b720cc665b96f392be1370fb9556..81f7223d49eac01899c877ba7e47515c17269151 100644 +index f2af9bd8265d66711c7dcc8ef16893edfe8d918a..824b100154c82d8579833a4bebd7481934ba428a 100644 --- a/net/minecraft/world/entity/monster/Phantom.java +++ b/net/minecraft/world/entity/monster/Phantom.java -@@ -49,6 +49,7 @@ public class Phantom extends Mob implements Enemy { +@@ -50,6 +50,7 @@ public class Phantom extends Mob implements Enemy { @Nullable public BlockPos anchorPoint; Phantom.AttackPhase attackPhase = Phantom.AttackPhase.CIRCLE; @@ -83,7 +83,7 @@ index ba9368c601f0b720cc665b96f392be1370fb9556..81f7223d49eac01899c877ba7e47515c // Paper start @Nullable public java.util.UUID spawningEntity; -@@ -108,6 +109,25 @@ public class Phantom extends Mob implements Enemy { +@@ -109,6 +110,25 @@ public class Phantom extends Mob implements Enemy { } // Purpur end - Ridables @@ -109,7 +109,7 @@ index ba9368c601f0b720cc665b96f392be1370fb9556..81f7223d49eac01899c877ba7e47515c @Override public boolean isFlapping() { return (this.getUniqueFlapTickOffset() + this.tickCount) % TICKS_PER_FLAP == 0; -@@ -121,9 +141,15 @@ public class Phantom extends Mob implements Enemy { +@@ -122,9 +142,15 @@ public class Phantom extends Mob implements Enemy { @Override protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables @@ -128,7 +128,7 @@ index ba9368c601f0b720cc665b96f392be1370fb9556..81f7223d49eac01899c877ba7e47515c this.targetSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables this.targetSelector.addGoal(1, new Phantom.PhantomAttackPlayerTargetGoal()); } -@@ -510,6 +536,124 @@ public class Phantom extends Mob implements Enemy { +@@ -511,6 +537,124 @@ public class Phantom extends Mob implements Enemy { } } diff --git a/purpur-server/minecraft-patches/features/0011-Phantoms-burn-in-light.patch b/purpur-server/minecraft-patches/features/0011-Phantoms-burn-in-light.patch index 2c452657f..858b02024 100644 --- a/purpur-server/minecraft-patches/features/0011-Phantoms-burn-in-light.patch +++ b/purpur-server/minecraft-patches/features/0011-Phantoms-burn-in-light.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Phantoms burn in light diff --git a/net/minecraft/world/entity/monster/Phantom.java b/net/minecraft/world/entity/monster/Phantom.java -index 81f7223d49eac01899c877ba7e47515c17269151..42089b34a1a1927247953b54cdc3300e1b600a90 100644 +index 824b100154c82d8579833a4bebd7481934ba428a..8ebe339c91d61166078291dc9f5f70dd596cc58f 100644 --- a/net/minecraft/world/entity/monster/Phantom.java +++ b/net/minecraft/world/entity/monster/Phantom.java -@@ -55,6 +55,7 @@ public class Phantom extends Mob implements Enemy { +@@ -56,6 +56,7 @@ public class Phantom extends Mob implements Enemy { public java.util.UUID spawningEntity; public boolean shouldBurnInDay = true; // Paper end @@ -16,7 +16,7 @@ index 81f7223d49eac01899c877ba7e47515c17269151..42089b34a1a1927247953b54cdc3300e public Phantom(EntityType type, Level level) { super(type, level); -@@ -238,7 +239,11 @@ public class Phantom extends Mob implements Enemy { +@@ -239,7 +240,11 @@ public class Phantom extends Mob implements Enemy { @Override public void aiStep() { @@ -29,7 +29,7 @@ index 81f7223d49eac01899c877ba7e47515c17269151..42089b34a1a1927247953b54cdc3300e if (getRider() == null || !this.isControllable()) // Purpur - Ridables this.igniteForSeconds(8.0F); } -@@ -370,6 +375,7 @@ public class Phantom extends Mob implements Enemy { +@@ -371,6 +376,7 @@ public class Phantom extends Mob implements Enemy { List nearbyPlayers = serverLevel.getNearbyPlayers( this.attackTargeting, Phantom.this, Phantom.this.getBoundingBox().inflate(16.0, 64.0, 16.0) ); @@ -37,7 +37,7 @@ index 81f7223d49eac01899c877ba7e47515c17269151..42089b34a1a1927247953b54cdc3300e if (!nearbyPlayers.isEmpty()) { nearbyPlayers.sort(Comparator.comparing(Entity::getY).reversed()); -@@ -740,6 +746,12 @@ public class Phantom extends Mob implements Enemy { +@@ -741,6 +747,12 @@ public class Phantom extends Mob implements Enemy { return false; } else if (!target.isAlive()) { return false; diff --git a/purpur-server/minecraft-patches/features/0012-Make-entity-breeding-times-configurable.patch b/purpur-server/minecraft-patches/features/0012-Make-entity-breeding-times-configurable.patch index b6dbc33e2..0f7bb1909 100644 --- a/purpur-server/minecraft-patches/features/0012-Make-entity-breeding-times-configurable.patch +++ b/purpur-server/minecraft-patches/features/0012-Make-entity-breeding-times-configurable.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Make entity breeding times configurable diff --git a/net/minecraft/world/entity/ai/behavior/VillagerMakeLove.java b/net/minecraft/world/entity/ai/behavior/VillagerMakeLove.java -index f673a7e78729edf13f094d547a0b995ea9ae7146..0fa52865c293e74c9e5f3d1fd93a0e24435a9055 100644 +index da3ab634c608a3e3b636ba2a519b3b9bb97a1659..f67b2f110ff465368e03ff9cf24318a18034e9d8 100644 --- a/net/minecraft/world/entity/ai/behavior/VillagerMakeLove.java +++ b/net/minecraft/world/entity/ai/behavior/VillagerMakeLove.java -@@ -117,8 +117,10 @@ public class VillagerMakeLove extends Behavior { +@@ -118,8 +118,10 @@ public class VillagerMakeLove extends Behavior { if (org.bukkit.craftbukkit.event.CraftEventFactory.callEntityBreedEvent(breedOffspring, parent, partner, null, null, 0).isCancelled()) { return Optional.empty(); } @@ -20,12 +20,12 @@ index f673a7e78729edf13f094d547a0b995ea9ae7146..0fa52865c293e74c9e5f3d1fd93a0e24 + // Purpur end - Make entity breeding times configurable level.addFreshEntityWithPassengers(breedOffspring, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.BREEDING); // CraftBukkit end - call EntityBreedEvent - level.broadcastEntityEvent(breedOffspring, (byte)12); + level.broadcastEntityEvent(breedOffspring, EntityEvent.LOVE_HEARTS); diff --git a/net/minecraft/world/entity/animal/Animal.java b/net/minecraft/world/entity/animal/Animal.java -index 3c77ce7861085f076bbdfb430af095420e7a12f5..643d40772770f0ebed0170bfed29e739f521d46d 100644 +index 8ccab236d1b8b00485eb6608778c43c5581641bd..3ad84e5c6ca7eaab196ffe03986c71d2d4c2ab7b 100644 --- a/net/minecraft/world/entity/animal/Animal.java +++ b/net/minecraft/world/entity/animal/Animal.java -@@ -41,6 +41,7 @@ public abstract class Animal extends AgeableMob { +@@ -42,6 +42,7 @@ public abstract class Animal extends AgeableMob { @Nullable public EntityReference loveCause; public @Nullable ItemStack breedItem; // CraftBukkit - Add breedItem variable @@ -33,7 +33,7 @@ index 3c77ce7861085f076bbdfb430af095420e7a12f5..643d40772770f0ebed0170bfed29e739 protected Animal(EntityType type, Level level) { super(type, level); -@@ -267,8 +268,10 @@ public abstract class Animal extends AgeableMob { +@@ -268,8 +269,10 @@ public abstract class Animal extends AgeableMob { player.awardStat(Stats.ANIMALS_BRED); CriteriaTriggers.BRED_ANIMALS.trigger(player, this, animal, baby); } // Paper - Call EntityBreedEvent @@ -45,12 +45,12 @@ index 3c77ce7861085f076bbdfb430af095420e7a12f5..643d40772770f0ebed0170bfed29e739 + // Purpur end - Make entity breeding times configurable this.resetLove(); animal.resetLove(); - level.broadcastEntityEvent(this, (byte)18); + level.broadcastEntityEvent(this, EntityEvent.IN_LOVE_HEARTS); diff --git a/net/minecraft/world/entity/animal/Bee.java b/net/minecraft/world/entity/animal/Bee.java -index 30f25727b60d3d846956b878dc53542669de6203..025ac8b3088ad1e45d10094c7534375a917b3a73 100644 +index b8dda3956152af17ce731d337ceb157d94bfb07b..f7d948294efcac1deac559d1fc9453f1dd0de659 100644 --- a/net/minecraft/world/entity/animal/Bee.java +++ b/net/minecraft/world/entity/animal/Bee.java -@@ -481,6 +481,13 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -482,6 +482,13 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { } // Purpur end - Configurable entity base attributes @@ -65,10 +65,10 @@ index 30f25727b60d3d846956b878dc53542669de6203..025ac8b3088ad1e45d10094c7534375a public int getRemainingPersistentAngerTime() { return this.entityData.get(DATA_REMAINING_ANGER_TIME); diff --git a/net/minecraft/world/entity/animal/Cat.java b/net/minecraft/world/entity/animal/Cat.java -index 10365c8a63bfbefa49d243d0e51a79b7a2052238..2411e1a9e98f8db63e326b4bfbe759084e938431 100644 +index 7550a645d7814bc97243088e2d0f366adb081c76..307f62466c9486ffdf8c2991fb805730198f38eb 100644 --- a/net/minecraft/world/entity/animal/Cat.java +++ b/net/minecraft/world/entity/animal/Cat.java -@@ -125,6 +125,13 @@ public class Cat extends TamableAnimal { +@@ -126,6 +126,13 @@ public class Cat extends TamableAnimal { } // Purpur end - Configurable entity base attributes @@ -119,10 +119,10 @@ index e7100834ce813e9814139c6d6e957fce15861ab7..298cbc74a7d26de1cd0fb356ce9e802c protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); diff --git a/net/minecraft/world/entity/animal/Fox.java b/net/minecraft/world/entity/animal/Fox.java -index ce46a3ff3a24666736211221fa9c5e69b8146be8..0fd04235d75a961465e44defbab9d116bcdd3f4a 100644 +index 375ce5de2c041a7e61578c233ca0dc2ef3a588ca..2cdc3fee6dfae173215733cae2f92d7304d3c5d1 100644 --- a/net/minecraft/world/entity/animal/Fox.java +++ b/net/minecraft/world/entity/animal/Fox.java -@@ -188,6 +188,13 @@ public class Fox extends Animal { +@@ -190,6 +190,13 @@ public class Fox extends Animal { } // Purpur end - Configurable entity base attributes @@ -136,7 +136,7 @@ index ce46a3ff3a24666736211221fa9c5e69b8146be8..0fd04235d75a961465e44defbab9d116 @Override protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); -@@ -993,8 +1000,10 @@ public class Fox extends Animal { +@@ -995,8 +1002,10 @@ public class Fox extends Animal { CriteriaTriggers.BRED_ANIMALS.trigger(serverPlayer, this.animal, this.partner, fox); } @@ -186,10 +186,10 @@ index 743faa77525d68181ee38415399bc6078f9360f8..6cbf93991ee375d2051128721a409a3a public float getWalkTargetValue(BlockPos pos, LevelReader level) { return level.getBlockState(pos.below()).is(Blocks.MYCELIUM) ? 10.0F : level.getPathfindingCostFromLightLevels(pos); diff --git a/net/minecraft/world/entity/animal/Ocelot.java b/net/minecraft/world/entity/animal/Ocelot.java -index 751aa4fea84db8e385001633df0c0d18ef6fde3a..c6f8e978df2ff28c0da243e44d26e33dacf221e5 100644 +index 947c4d4a9f93c3da36ab5912ef362a60bdf75596..f047fa8d33ab6b7e01447f91e6c33e22e9ce9e02 100644 --- a/net/minecraft/world/entity/animal/Ocelot.java +++ b/net/minecraft/world/entity/animal/Ocelot.java -@@ -89,6 +89,13 @@ public class Ocelot extends Animal { +@@ -90,6 +90,13 @@ public class Ocelot extends Animal { } // Purpur end - Configurable entity base attributes @@ -204,7 +204,7 @@ index 751aa4fea84db8e385001633df0c0d18ef6fde3a..c6f8e978df2ff28c0da243e44d26e33d return this.entityData.get(DATA_TRUSTING); } diff --git a/net/minecraft/world/entity/animal/Panda.java b/net/minecraft/world/entity/animal/Panda.java -index c74f2a95a473464be3497ea39e366564d3f74e66..09e64eda71bfc1d55ec9fa37c6241c1d4cdc5842 100644 +index 53e4d1d35be13f04267151e1e8f808c5ad796ef5..fbe06479b24fd0e76a063eeac96447fa88c7d45b 100644 --- a/net/minecraft/world/entity/animal/Panda.java +++ b/net/minecraft/world/entity/animal/Panda.java @@ -142,6 +142,13 @@ public class Panda extends Animal { @@ -222,10 +222,10 @@ index c74f2a95a473464be3497ea39e366564d3f74e66..09e64eda71bfc1d55ec9fa37c6241c1d protected boolean canDispenserEquipIntoSlot(EquipmentSlot slot) { return slot == EquipmentSlot.MAINHAND && this.canPickUpLoot(); diff --git a/net/minecraft/world/entity/animal/Parrot.java b/net/minecraft/world/entity/animal/Parrot.java -index debda7f54b05831d16014fb271b1a996822fecb5..eeccbee1f8e11862813abf0ed0d0f03bf28b376f 100644 +index 01e2f610e8f0c54917899b54625b17fb0629df67..0749317e7f1a7b54759b9cd335419e7f92362715 100644 --- a/net/minecraft/world/entity/animal/Parrot.java +++ b/net/minecraft/world/entity/animal/Parrot.java -@@ -201,6 +201,13 @@ public class Parrot extends ShoulderRidingEntity implements FlyingAnimal { +@@ -202,6 +202,13 @@ public class Parrot extends ShoulderRidingEntity implements FlyingAnimal { } // Purpur end - Configurable entity base attributes @@ -276,10 +276,10 @@ index 2cf417f3bcf338a3edc4a2f71d8a700aca2e52dc..884137b428a1fe69bb61b9ae05b65235 @Override public AgeableMob getBreedOffspring(ServerLevel level, AgeableMob partner) { diff --git a/net/minecraft/world/entity/animal/Rabbit.java b/net/minecraft/world/entity/animal/Rabbit.java -index 1b29d2a49350ff557e09b1297b3825f2cc28bad3..318729fdaa9c6dc7ee480618804a19fb29b6e76d 100644 +index 7a2a95bb2fc1b7d2103da8ce7dd7f820af284f4f..78c6ccc6efafb11b42b051cc204341aa2d461307 100644 --- a/net/minecraft/world/entity/animal/Rabbit.java +++ b/net/minecraft/world/entity/animal/Rabbit.java -@@ -153,6 +153,13 @@ public class Rabbit extends Animal { +@@ -155,6 +155,13 @@ public class Rabbit extends Animal { } // Purpur end - Configurable entity base attributes @@ -294,10 +294,10 @@ index 1b29d2a49350ff557e09b1297b3825f2cc28bad3..318729fdaa9c6dc7ee480618804a19fb public void registerGoals() { this.goalSelector.addGoal(1, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/animal/Turtle.java b/net/minecraft/world/entity/animal/Turtle.java -index 88bd025f491ec17884007cc5c1b57c64461d2901..38b6678cbbce86e62efe08ece6634b1a5895dd84 100644 +index 047a1b27d4af3d050784241c8a34fdebbd8e1f49..11a5f8d1a424531105436f96a097de6e9745be96 100644 --- a/net/minecraft/world/entity/animal/Turtle.java +++ b/net/minecraft/world/entity/animal/Turtle.java -@@ -111,6 +111,13 @@ public class Turtle extends Animal { +@@ -112,6 +112,13 @@ public class Turtle extends Animal { } // Purpur end - Configurable entity base attributes @@ -311,7 +311,7 @@ index 88bd025f491ec17884007cc5c1b57c64461d2901..38b6678cbbce86e62efe08ece6634b1a public void setHomePos(BlockPos homePos) { this.homePos = homePos; } -@@ -351,8 +358,10 @@ public class Turtle extends Animal { +@@ -352,8 +359,10 @@ public class Turtle extends Animal { } this.turtle.setHasEgg(true); @@ -325,10 +325,10 @@ index 88bd025f491ec17884007cc5c1b57c64461d2901..38b6678cbbce86e62efe08ece6634b1a this.partner.resetLove(); RandomSource random = this.animal.getRandom(); diff --git a/net/minecraft/world/entity/animal/armadillo/Armadillo.java b/net/minecraft/world/entity/animal/armadillo/Armadillo.java -index 2343f4fcca96f4887c6fb00e8fdc43b959aba69e..cee8103cf9406600930f34b4801748db0e2fb8ed 100644 +index 17d1a3d7ad33d99a57ea11be467e746b3dc99cbe..cf5e963d3ad0b5e22909a90dfe66d0a74ceff202 100644 --- a/net/minecraft/world/entity/animal/armadillo/Armadillo.java +++ b/net/minecraft/world/entity/animal/armadillo/Armadillo.java -@@ -107,6 +107,13 @@ public class Armadillo extends Animal { +@@ -108,6 +108,13 @@ public class Armadillo extends Animal { } // Purpur end - Configurable entity base attributes @@ -397,10 +397,10 @@ index 4979ae6dc8f6c2361b443b8bbe90738e4a199200..78863bd593acaa46f33a49fadbd0cdb0 protected Brain.Provider brainProvider() { return Brain.provider(MEMORY_TYPES, SENSOR_TYPES); diff --git a/net/minecraft/world/entity/animal/goat/Goat.java b/net/minecraft/world/entity/animal/goat/Goat.java -index 3f264db00d9312cc1e8bfba8da0c829774ba00aa..673b90e3af9a9fdc03a4cbda9702e49def025d29 100644 +index f417e9337a5102d6ec95a934c4126e1ec98a94d8..afcd9d3ea11d94ef811cce71f54f2a718619cc9f 100644 --- a/net/minecraft/world/entity/animal/goat/Goat.java +++ b/net/minecraft/world/entity/animal/goat/Goat.java -@@ -131,6 +131,13 @@ public class Goat extends Animal { +@@ -132,6 +132,13 @@ public class Goat extends Animal { } // Purpur end - Ridables @@ -541,10 +541,10 @@ index 6684f5dfb7dec101bad15b7ede3d9fd377aacd45..0d6d470b8680aed64d2b208b2ed9b037 return createBaseHorseAttributes().add(Attributes.MAX_HEALTH, 15.0).add(Attributes.MOVEMENT_SPEED, 0.2F); } diff --git a/net/minecraft/world/entity/animal/sheep/Sheep.java b/net/minecraft/world/entity/animal/sheep/Sheep.java -index 0e371655c8a500bad69626475222f9e726013c02..e5d495c12e2cd5a215f5b908ad65f6366eb47808 100644 +index e479dd9e94ee931b6e9001f89dc36406c3dde209..baa18417b0b66f33aa3bb21032cd5816dc0ed800 100644 --- a/net/minecraft/world/entity/animal/sheep/Sheep.java +++ b/net/minecraft/world/entity/animal/sheep/Sheep.java -@@ -87,6 +87,13 @@ public class Sheep extends Animal implements Shearable { +@@ -88,6 +88,13 @@ public class Sheep extends Animal implements Shearable { } // Purpur end - Configurable entity base attributes @@ -559,10 +559,10 @@ index 0e371655c8a500bad69626475222f9e726013c02..e5d495c12e2cd5a215f5b908ad65f636 protected void registerGoals() { this.eatBlockGoal = new EatBlockGoal(this); diff --git a/net/minecraft/world/entity/animal/sniffer/Sniffer.java b/net/minecraft/world/entity/animal/sniffer/Sniffer.java -index cd6a5173e2c6d49c7df9baae464b391ea1fdd620..d7e61ce6e2b77817f4eca913f2c319096e7f244f 100644 +index eb6675394ecc5bba67e0f8bb0220ad92ef2b5e4f..7ef3c94f63c8a25d09e69b818ecdf79795803570 100644 --- a/net/minecraft/world/entity/animal/sniffer/Sniffer.java +++ b/net/minecraft/world/entity/animal/sniffer/Sniffer.java -@@ -113,6 +113,13 @@ public class Sniffer extends Animal { +@@ -114,6 +114,13 @@ public class Sniffer extends Animal { } // Purpur end - Configurable entity base attributes @@ -577,10 +577,10 @@ index cd6a5173e2c6d49c7df9baae464b391ea1fdd620..d7e61ce6e2b77817f4eca913f2c31909 protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); diff --git a/net/minecraft/world/entity/animal/wolf/Wolf.java b/net/minecraft/world/entity/animal/wolf/Wolf.java -index 56db9816b52aed4facc80c95ec664cd98c6daca2..fc9b895b69385b04d56d071cbd498e61db6e6cb4 100644 +index 826c56281f1452fd1f4f9fba12a1fd169532e8cf..70b14a44f3d504788218b85317bb3812007386b0 100644 --- a/net/minecraft/world/entity/animal/wolf/Wolf.java +++ b/net/minecraft/world/entity/animal/wolf/Wolf.java -@@ -216,6 +216,13 @@ public class Wolf extends TamableAnimal implements NeutralMob { +@@ -217,6 +217,13 @@ public class Wolf extends TamableAnimal implements NeutralMob { } // Purpur end - Configurable entity base attributes @@ -613,10 +613,10 @@ index 5d41885ceb7145a516a398da0d7553faeb386710..6760c826cf72cc704f54ea0e3d6aaffd EntityType entityType, LevelAccessor level, EntitySpawnReason spawnReason, BlockPos pos, RandomSource random ) { diff --git a/net/minecraft/world/entity/monster/hoglin/Hoglin.java b/net/minecraft/world/entity/monster/hoglin/Hoglin.java -index 1062df067d6b98ffba27864450d8a867446aae79..2de148c874feeff23da144037562ded852e48a04 100644 +index facab39612157cdc39bb7d8efad6e90d4fb7d001..1f5096856ab353e2920003a54f530c952e8988da 100644 --- a/net/minecraft/world/entity/monster/hoglin/Hoglin.java +++ b/net/minecraft/world/entity/monster/hoglin/Hoglin.java -@@ -120,6 +120,13 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { +@@ -121,6 +121,13 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { } // Purpur end - Configurable entity base attributes diff --git a/purpur-server/minecraft-patches/features/0013-Apply-display-names-from-item-forms-of-entities-to-e.patch b/purpur-server/minecraft-patches/features/0013-Apply-display-names-from-item-forms-of-entities-to-e.patch index cfd8da59e..2a8af519e 100644 --- a/purpur-server/minecraft-patches/features/0013-Apply-display-names-from-item-forms-of-entities-to-e.patch +++ b/purpur-server/minecraft-patches/features/0013-Apply-display-names-from-item-forms-of-entities-to-e.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Apply display names from item forms of entities to entities diff --git a/net/minecraft/world/entity/decoration/ArmorStand.java b/net/minecraft/world/entity/decoration/ArmorStand.java -index 3412b6dcc2d65986a4f657a6efd7b9fee63d5f8b..d2c5cf955cf8eb534f7bf0afebded9fdf209f117 100644 +index f329459ad97ed4ea5297455d4741d008acb32750..8ba0e1345852693422e683d6479915ba9c13004a 100644 --- a/net/minecraft/world/entity/decoration/ArmorStand.java +++ b/net/minecraft/world/entity/decoration/ArmorStand.java -@@ -450,6 +450,7 @@ public class ArmorStand extends LivingEntity { +@@ -451,6 +451,7 @@ public class ArmorStand extends LivingEntity { private org.bukkit.event.entity.EntityDeathEvent brokenByPlayer(ServerLevel level, DamageSource damageSource) { // Paper ItemStack itemStack = new ItemStack(Items.ARMOR_STAND); @@ -18,7 +18,7 @@ index 3412b6dcc2d65986a4f657a6efd7b9fee63d5f8b..d2c5cf955cf8eb534f7bf0afebded9fd this.drops.add(new DefaultDrop(itemStack, stack -> Block.popResource(this.level(), this.blockPosition(), stack))); // CraftBukkit - add to drops // Paper - Restore vanilla drops behavior return this.brokenByAnything(level, damageSource); // Paper diff --git a/net/minecraft/world/entity/decoration/ItemFrame.java b/net/minecraft/world/entity/decoration/ItemFrame.java -index e6012d2cfe9b84782c8d5a0ba424eeda98086c09..6bf12f09c189ccaf45552f76d50f6743d93db0c3 100644 +index 1b50d5a1c61fe15d06b3c1880e046c4a674df04e..4c4af42b57a7ed20f445d9247870195bd4e6a733 100644 --- a/net/minecraft/world/entity/decoration/ItemFrame.java +++ b/net/minecraft/world/entity/decoration/ItemFrame.java @@ -246,7 +246,11 @@ public class ItemFrame extends HangingEntity { @@ -35,7 +35,7 @@ index e6012d2cfe9b84782c8d5a0ba424eeda98086c09..6bf12f09c189ccaf45552f76d50f6743 if (!item.isEmpty()) { diff --git a/net/minecraft/world/entity/decoration/Painting.java b/net/minecraft/world/entity/decoration/Painting.java -index cc34cadac8896a5f546d0879e795fea08d0c3f98..26a08b16de2318d5080be59a29c5f11e3597426d 100644 +index 97734dc34678a1f2e651c2229f62312c9a9cd8da..330d94275a7c89a11f9932fab758a1422202504e 100644 --- a/net/minecraft/world/entity/decoration/Painting.java +++ b/net/minecraft/world/entity/decoration/Painting.java @@ -182,7 +182,11 @@ public class Painting extends HangingEntity { @@ -52,7 +52,7 @@ index cc34cadac8896a5f546d0879e795fea08d0c3f98..26a08b16de2318d5080be59a29c5f11e } } diff --git a/net/minecraft/world/entity/vehicle/AbstractBoat.java b/net/minecraft/world/entity/vehicle/AbstractBoat.java -index 464d342d8e24f33745cb09d0d61aad35cf98ebdf..e6abec1b9245e07c8f0636272bece71865f59d9b 100644 +index 2e8b923a97ed33ecc2802a0ac452e86e9f397bda..c5c516ea07949a295792da0ed7b63ea98de933b1 100644 --- a/net/minecraft/world/entity/vehicle/AbstractBoat.java +++ b/net/minecraft/world/entity/vehicle/AbstractBoat.java @@ -821,7 +821,13 @@ public abstract class AbstractBoat extends VehicleEntity implements Leashable { diff --git a/purpur-server/minecraft-patches/features/0014-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch b/purpur-server/minecraft-patches/features/0014-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch index 9b475295e..4fbf6cb18 100644 --- a/purpur-server/minecraft-patches/features/0014-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch +++ b/purpur-server/minecraft-patches/features/0014-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch @@ -135,10 +135,10 @@ index f0583076ef62189508a392a76c3fb6b741bbdde9..dc4a9ddb8479e9d0c4895b19d7d677cd brain.setMemory(MemoryModuleType.SECONDARY_JOB_SITE, list); } else { diff --git a/net/minecraft/world/entity/npc/Villager.java b/net/minecraft/world/entity/npc/Villager.java -index b7b290e9870f8f51af7e44f71b1e04ce9c552626..33af111898df4e10367e6ef0d01eaf376bfc5819 100644 +index 4a2fad1d8d6b20932b6be616e8e6b099daf715dd..03b4130179b34735243b3c0b86879dbb7d9f9f00 100644 --- a/net/minecraft/world/entity/npc/Villager.java +++ b/net/minecraft/world/entity/npc/Villager.java -@@ -314,7 +314,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -315,7 +315,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler villagerBrain.setSchedule(Schedule.VILLAGER_DEFAULT); villagerBrain.addActivityWithConditions( Activity.WORK, @@ -147,7 +147,7 @@ index b7b290e9870f8f51af7e44f71b1e04ce9c552626..33af111898df4e10367e6ef0d01eaf37 ImmutableSet.of(Pair.of(MemoryModuleType.JOB_SITE, MemoryStatus.VALUE_PRESENT)) ); } -@@ -963,7 +963,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -964,7 +964,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } public boolean hasFarmSeeds() { diff --git a/purpur-server/minecraft-patches/features/0015-Add-mobGriefing-override-to-everything-affected.patch b/purpur-server/minecraft-patches/features/0015-Add-mobGriefing-override-to-everything-affected.patch index 9c81dd334..19d6418e6 100644 --- a/purpur-server/minecraft-patches/features/0015-Add-mobGriefing-override-to-everything-affected.patch +++ b/purpur-server/minecraft-patches/features/0015-Add-mobGriefing-override-to-everything-affected.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add mobGriefing override to everything affected diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java -index 01b7bdf66a2b52d204257e497cfccc11a20ce4b0..ab3ddd1c52b561c56ee240ee68f5e5aca706b744 100644 +index 2d0b13f76c2890eeef2c701a17d535e157195b29..38750906a1e15c1758c4b54eca6be0170047a2d1 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java -@@ -1949,7 +1949,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -1950,7 +1950,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin if (this.level() instanceof ServerLevel serverLevel) { boolean var6 = false; if (this.dead && entitySource instanceof WitherBoss) { // Paper @@ -18,7 +18,7 @@ index 01b7bdf66a2b52d204257e497cfccc11a20ce4b0..ab3ddd1c52b561c56ee240ee68f5e5ac BlockState blockState = Blocks.WITHER_ROSE.defaultBlockState(); if (this.level().getBlockState(blockPos).isAir() && blockState.canSurvive(this.level(), blockPos)) { diff --git a/net/minecraft/world/entity/Mob.java b/net/minecraft/world/entity/Mob.java -index 996e9e098ed510cdadc82e4f133b6aec509040d3..e4aaa451129d0ed11d855b53aae0c0279b899479 100644 +index bb1d33f759b74174f5c1a45c351a2d2c243c4f03..2d0efa66b33daa78479d01bd5ed8d558f0e0ae2d 100644 --- a/net/minecraft/world/entity/Mob.java +++ b/net/minecraft/world/entity/Mob.java @@ -554,7 +554,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab @@ -44,10 +44,10 @@ index 7776ad5d87ee8aadc9fcb36fbce62fe868754942..da974278e763df239f834c1d3653919d } else if (!owner.getVillagerData().profession().is(VillagerProfession.FARMER) && !(level.purpurConfig.villagerClericsFarmWarts && owner.getVillagerData().profession().is(VillagerProfession.CLERIC))) { // Purpur - Option for Villager Clerics to farm Nether Wart return false; diff --git a/net/minecraft/world/entity/ai/goal/BreakDoorGoal.java b/net/minecraft/world/entity/ai/goal/BreakDoorGoal.java -index e026e07ca86700c864a3dceda6817fb7b6cb11e9..cf380a13d6d54d1a9e8d10b31124942d59fca80c 100644 +index 244c8e54b3456194855a4516c4fceef85a2d3b78..4f01e8c34cbde1fa599ce0b767cc04e9c19b8dcc 100644 --- a/net/minecraft/world/entity/ai/goal/BreakDoorGoal.java +++ b/net/minecraft/world/entity/ai/goal/BreakDoorGoal.java -@@ -30,7 +30,7 @@ public class BreakDoorGoal extends DoorInteractGoal { +@@ -31,7 +31,7 @@ public class BreakDoorGoal extends DoorInteractGoal { @Override public boolean canUse() { return super.canUse() @@ -57,10 +57,10 @@ index e026e07ca86700c864a3dceda6817fb7b6cb11e9..cf380a13d6d54d1a9e8d10b31124942d && !this.isOpen(); } diff --git a/net/minecraft/world/entity/ai/goal/EatBlockGoal.java b/net/minecraft/world/entity/ai/goal/EatBlockGoal.java -index 9a9c5ced9309abb14b27b20f7f1d9e93b505b796..18dfe585d8be8d0a2031a4d2f9bf73d8ed9179e1 100644 +index 713a669799bdc095e9d01542831e604298c4a214..bdb1f17fe4d43fd28511002005d5f8ffc10fde11 100644 --- a/net/minecraft/world/entity/ai/goal/EatBlockGoal.java +++ b/net/minecraft/world/entity/ai/goal/EatBlockGoal.java -@@ -62,7 +62,7 @@ public class EatBlockGoal extends Goal { +@@ -64,7 +64,7 @@ public class EatBlockGoal extends Goal { BlockPos blockPos = this.mob.blockPosition(); final BlockState blockState = this.level.getBlockState(blockPos); // Paper - fix wrong block state if (IS_EDIBLE.test(blockState)) { // Paper - fix wrong block state @@ -69,14 +69,14 @@ index 9a9c5ced9309abb14b27b20f7f1d9e93b505b796..18dfe585d8be8d0a2031a4d2f9bf73d8 this.level.destroyBlock(blockPos, false); } -@@ -70,7 +70,7 @@ public class EatBlockGoal extends Goal { +@@ -72,7 +72,7 @@ public class EatBlockGoal extends Goal { } else { BlockPos blockPos1 = blockPos.below(); if (this.level.getBlockState(blockPos1).is(Blocks.GRASS_BLOCK)) { - if (org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(this.mob, blockPos1, Blocks.DIRT.defaultBlockState(), !getServerLevel(this.level).getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING))) { // CraftBukkit // Paper - Fix wrong block state + if (org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(this.mob, blockPos1, Blocks.DIRT.defaultBlockState(), !getServerLevel(this.level).getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING, getServerLevel(this.level).purpurConfig.sheepMobGriefingOverride))) { // CraftBukkit // Paper - Fix wrong block state // Purpur - Add mobGriefing override to everything affected - this.level.levelEvent(2001, blockPos1, Block.getId(Blocks.GRASS_BLOCK.defaultBlockState())); - this.level.setBlock(blockPos1, Blocks.DIRT.defaultBlockState(), 2); + this.level.levelEvent(LevelEvent.PARTICLES_DESTROY_BLOCK, blockPos1, Block.getId(Blocks.GRASS_BLOCK.defaultBlockState())); + this.level.setBlock(blockPos1, Blocks.DIRT.defaultBlockState(), Block.UPDATE_CLIENTS); } diff --git a/net/minecraft/world/entity/ai/goal/RemoveBlockGoal.java b/net/minecraft/world/entity/ai/goal/RemoveBlockGoal.java index 962c0b327a46cf0c58904466d3bcb608f474c329..72cc1d2cc76dd564b7fd5c797e8e784b9a343d8a 100644 @@ -92,10 +92,10 @@ index 962c0b327a46cf0c58904466d3bcb608f474c329..72cc1d2cc76dd564b7fd5c797e8e784b } else if (this.nextStartTick > 0) { this.nextStartTick--; diff --git a/net/minecraft/world/entity/animal/Fox.java b/net/minecraft/world/entity/animal/Fox.java -index 0fd04235d75a961465e44defbab9d116bcdd3f4a..51e28983b67edcd744f38aba38c704dfd2ffff6e 100644 +index 2cdc3fee6dfae173215733cae2f92d7304d3c5d1..0f32571b193ba48540c283026e5a5d99314951fe 100644 --- a/net/minecraft/world/entity/animal/Fox.java +++ b/net/minecraft/world/entity/animal/Fox.java -@@ -1058,7 +1058,7 @@ public class Fox extends Animal { +@@ -1060,7 +1060,7 @@ public class Fox extends Animal { } protected void onReachedTarget() { @@ -105,10 +105,10 @@ index 0fd04235d75a961465e44defbab9d116bcdd3f4a..51e28983b67edcd744f38aba38c704df if (blockState.is(Blocks.SWEET_BERRY_BUSH)) { this.pickSweetBerries(blockState); diff --git a/net/minecraft/world/entity/animal/Rabbit.java b/net/minecraft/world/entity/animal/Rabbit.java -index 318729fdaa9c6dc7ee480618804a19fb29b6e76d..5e194a54a3a8d350c08edcba312e95b46db6c300 100644 +index 78c6ccc6efafb11b42b051cc204341aa2d461307..f45ae44b37b512bf63e719ff15b538431a2c7e7f 100644 --- a/net/minecraft/world/entity/animal/Rabbit.java +++ b/net/minecraft/world/entity/animal/Rabbit.java -@@ -648,7 +648,7 @@ public class Rabbit extends Animal { +@@ -650,7 +650,7 @@ public class Rabbit extends Animal { @Override public boolean canUse() { if (this.nextStartTick <= 0) { @@ -131,10 +131,10 @@ index d6f2a04cf04090e3cb68f5111d47bff9f1243568..20f73d895bc55581c62283825a6d5296 } diff --git a/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -index 81f73a5b400a346ee86285bf4ca6c846c0c4b87e..1f9db9786995744c5ca5d97d8cf46fdd69aa8aa5 100644 +index 52c959961a13bd3b85a262128b0950c60f96dc2f..bf9c295408902dc02b96e54959231338cd52c29c 100644 --- a/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java +++ b/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -@@ -544,7 +544,7 @@ public class EnderDragon extends Mob implements Enemy { +@@ -545,7 +545,7 @@ public class EnderDragon extends Mob implements Enemy { BlockPos blockPos = new BlockPos(i, i1, i2); BlockState blockState = level.getBlockState(blockPos); if (!blockState.isAir() && !blockState.is(BlockTags.DRAGON_TRANSPARENT)) { @@ -144,10 +144,10 @@ index 81f73a5b400a346ee86285bf4ca6c846c0c4b87e..1f9db9786995744c5ca5d97d8cf46fdd //flag1 = level.removeBlock(blockPos, false) || flag1; flag1 = true; diff --git a/net/minecraft/world/entity/boss/wither/WitherBoss.java b/net/minecraft/world/entity/boss/wither/WitherBoss.java -index 8e5e364d297a3eb55b67ce7081ec7548cbf7f3a6..f6af57f402847e0f9af6a00b387d8a4b3e4d2afe 100644 +index 3b037d2565fb30f68384d2b391f6d8219fdc9732..6d35cce3fde4d0cee5fa1266d831fdf97ad85d35 100644 --- a/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/net/minecraft/world/entity/boss/wither/WitherBoss.java -@@ -495,7 +495,7 @@ public class WitherBoss extends Monster implements RangedAttackMob { +@@ -496,7 +496,7 @@ public class WitherBoss extends Monster implements RangedAttackMob { if (this.destroyBlocksTick > 0) { this.destroyBlocksTick--; @@ -157,7 +157,7 @@ index 8e5e364d297a3eb55b67ce7081ec7548cbf7f3a6..f6af57f402847e0f9af6a00b387d8a4b int alternativeTarget = Mth.floor(this.getBbWidth() / 2.0F + 1.0F); int floor = Mth.floor(this.getBbHeight()); diff --git a/net/minecraft/world/entity/monster/EnderMan.java b/net/minecraft/world/entity/monster/EnderMan.java -index b8fd334b9dd704d5d4502a6e051db09cced24f59..e6304680a8f2e9fb5fdcfd166471fd3355fb643c 100644 +index ae532c1b5f838223d416564eab626a71b2d423e7..0d2fb6a1b4c8e02e40afa612744e259ef3230c0a 100644 --- a/net/minecraft/world/entity/monster/EnderMan.java +++ b/net/minecraft/world/entity/monster/EnderMan.java @@ -513,7 +513,7 @@ public class EnderMan extends Monster implements NeutralMob { @@ -192,10 +192,10 @@ index a5243b7969fec5d60b94368caf5e962c348c4135..24d104036902b8aaf79325e33d3063cc } else { List nearbyEntities = serverLevel.getNearbyEntities( diff --git a/net/minecraft/world/entity/monster/Ravager.java b/net/minecraft/world/entity/monster/Ravager.java -index f43125ca7d52170a1ca2a54a5b2758794f25fbd1..a1fb74b51f51c045eed0fe09eceafa6d533babe2 100644 +index 47741944d11b55bcff46bb9abc2a059652a4f86a..0220bb3add91779979cf7591dc1ea18f69f9e7c4 100644 --- a/net/minecraft/world/entity/monster/Ravager.java +++ b/net/minecraft/world/entity/monster/Ravager.java -@@ -179,7 +179,7 @@ public class Ravager extends Raider { +@@ -180,7 +180,7 @@ public class Ravager extends Raider { if (this.level() instanceof ServerLevel serverLevel && this.horizontalCollision @@ -205,7 +205,7 @@ index f43125ca7d52170a1ca2a54a5b2758794f25fbd1..a1fb74b51f51c045eed0fe09eceafa6d AABB aabb = this.getBoundingBox().inflate(0.2); diff --git a/net/minecraft/world/entity/monster/Silverfish.java b/net/minecraft/world/entity/monster/Silverfish.java -index 23722456ce82dcc6b571b96e5c9b0d70005f9c2e..97662c39001b4433601f46ef83f28c0ee916c02a 100644 +index 276f8e8234ed461af57c7fe0b7ea0346c86b9698..d81ed52599cf4cba49726f2ad9da4ce1dab14df1 100644 --- a/net/minecraft/world/entity/monster/Silverfish.java +++ b/net/minecraft/world/entity/monster/Silverfish.java @@ -170,7 +170,7 @@ public class Silverfish extends Monster { @@ -307,10 +307,10 @@ index 8d8315edfb69b062ed5e3d957f4043ec411dd5d7..4d72b60489e9c684905ca251ead011aa return true; } else if (this.mob.getCurrentRaid().isOver()) { diff --git a/net/minecraft/world/level/GameRules.java b/net/minecraft/world/level/GameRules.java -index c6e9dac65474cc9c8a1200756b5be45c22fe1637..22c558f6ed1d2593b7bd1505730cd25c804c5eda 100644 +index b159cae4d9c1274de14f3044c9d22a1231c639e5..57fc1c8bb1350dad26a616d2a8530df73fdf38da 100644 --- a/net/minecraft/world/level/GameRules.java +++ b/net/minecraft/world/level/GameRules.java -@@ -365,6 +365,13 @@ public class GameRules { +@@ -366,6 +366,13 @@ public class GameRules { this.getRule(key).setFrom(rule, level); // CraftBukkit - per-world } @@ -351,7 +351,7 @@ index 9883e6d1a1b76155c8ba1817fda6615b4742e18e..dc1ad33f801c308871931d271f97ff91 // CraftBukkit start - Interact soil org.bukkit.event.Cancellable cancellable; diff --git a/net/minecraft/world/level/block/PowderSnowBlock.java b/net/minecraft/world/level/block/PowderSnowBlock.java -index cfc0fda316d14c178a663dbbd4e19f1469519f0f..99abf0f4e73cbfe916901dfc9081fec6e437c758 100644 +index e3a11a1f68e2aa89610dfda25c0f1f11fd3427aa..525644c33b9d1b42c86b93145c7120f6bc87b5e5 100644 --- a/net/minecraft/world/level/block/PowderSnowBlock.java +++ b/net/minecraft/world/level/block/PowderSnowBlock.java @@ -96,7 +96,7 @@ public class PowderSnowBlock extends Block implements BucketPickup { @@ -364,7 +364,7 @@ index cfc0fda316d14c178a663dbbd4e19f1469519f0f..99abf0f4e73cbfe916901dfc9081fec6 } // CraftBukkit end diff --git a/net/minecraft/world/level/block/TurtleEggBlock.java b/net/minecraft/world/level/block/TurtleEggBlock.java -index 7be238baf5373296fa5192704969307146e2dfa4..0d8d9b560eadce88f0b334270767ee1d53c7cf79 100644 +index 6fd922a7cf1c9679344af91e817469350b01de17..90d2317ca3e05bb41a1d03a8ccbc57d84f79f70c 100644 --- a/net/minecraft/world/level/block/TurtleEggBlock.java +++ b/net/minecraft/world/level/block/TurtleEggBlock.java @@ -214,7 +214,7 @@ public class TurtleEggBlock extends Block { diff --git a/purpur-server/minecraft-patches/features/0017-Toggle-for-water-sensitive-mob-damage.patch b/purpur-server/minecraft-patches/features/0017-Toggle-for-water-sensitive-mob-damage.patch index 90606d404..8f0299a69 100644 --- a/purpur-server/minecraft-patches/features/0017-Toggle-for-water-sensitive-mob-damage.patch +++ b/purpur-server/minecraft-patches/features/0017-Toggle-for-water-sensitive-mob-damage.patch @@ -23,10 +23,10 @@ index cbb7e0591dc761d0566ac99dc6e5697b3ba4eeda..a10a1e26d0260968c6becd1e9d684360 protected ParticleOptions getInkParticle() { return ParticleTypes.GLOW_SQUID_INK; diff --git a/net/minecraft/world/entity/ambient/Bat.java b/net/minecraft/world/entity/ambient/Bat.java -index 947619d07ef381ab79774b3f6cdc4c2454b632cb..9dd4d9a10df973fbf4e4fc63a8a7b7041f21ede4 100644 +index 4624aca3dc3054ce7558023033fc953aedd33d88..a64afb30454ee537b0e044d6d55ce0b0a8e944ea 100644 --- a/net/minecraft/world/entity/ambient/Bat.java +++ b/net/minecraft/world/entity/ambient/Bat.java -@@ -111,6 +111,13 @@ public class Bat extends AmbientCreature { +@@ -112,6 +112,13 @@ public class Bat extends AmbientCreature { } // Purpur end - Configurable entity base attributes @@ -41,10 +41,10 @@ index 947619d07ef381ab79774b3f6cdc4c2454b632cb..9dd4d9a10df973fbf4e4fc63a8a7b704 public boolean isFlapping() { return !this.isResting() && this.tickCount % 10.0F == 0.0F; diff --git a/net/minecraft/world/entity/animal/Bee.java b/net/minecraft/world/entity/animal/Bee.java -index 025ac8b3088ad1e45d10094c7534375a917b3a73..234f02e0b75c6b9a8f52c440c680b539ee783f91 100644 +index f7d948294efcac1deac559d1fc9453f1dd0de659..b2b234490aba52c8125c0644f0176fe825b63e91 100644 --- a/net/minecraft/world/entity/animal/Bee.java +++ b/net/minecraft/world/entity/animal/Bee.java -@@ -184,7 +184,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -185,7 +185,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { // Paper end - Fix MC-167279 this.lookControl = new Bee.BeeLookControl(this); this.setPathfindingMalus(PathType.DANGER_FIRE, -1.0F); @@ -53,7 +53,7 @@ index 025ac8b3088ad1e45d10094c7534375a917b3a73..234f02e0b75c6b9a8f52c440c680b539 this.setPathfindingMalus(PathType.WATER_BORDER, 16.0F); this.setPathfindingMalus(PathType.COCOA, -1.0F); this.setPathfindingMalus(PathType.FENCE, -1.0F); -@@ -488,6 +488,13 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -489,6 +489,13 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { } // Purpur end - Make entity breeding times configurable @@ -68,10 +68,10 @@ index 025ac8b3088ad1e45d10094c7534375a917b3a73..234f02e0b75c6b9a8f52c440c680b539 public int getRemainingPersistentAngerTime() { return this.entityData.get(DATA_REMAINING_ANGER_TIME); diff --git a/net/minecraft/world/entity/animal/Cat.java b/net/minecraft/world/entity/animal/Cat.java -index 2411e1a9e98f8db63e326b4bfbe759084e938431..842c03df5a4ee67192f2850b89be45648024fd17 100644 +index 307f62466c9486ffdf8c2991fb805730198f38eb..09467cb1f8f3c6978771464b292e33a1396d76e3 100644 --- a/net/minecraft/world/entity/animal/Cat.java +++ b/net/minecraft/world/entity/animal/Cat.java -@@ -132,6 +132,13 @@ public class Cat extends TamableAnimal { +@@ -133,6 +133,13 @@ public class Cat extends TamableAnimal { } // Purpur end - Make entity breeding times configurable @@ -140,10 +140,10 @@ index 298cbc74a7d26de1cd0fb356ce9e802c0cc3a1ca..a71b6c8a0c48d9c7121e7d29cff6d388 protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); diff --git a/net/minecraft/world/entity/animal/Dolphin.java b/net/minecraft/world/entity/animal/Dolphin.java -index 71147da158f389207c032bc8e952ddb677e6d0ee..aaeb8a787158171920993719afcacc58ffd0f5a2 100644 +index caf0f3c0690344fafb9a52a55f81b25ea6aa91a9..b89f87425721e540d612b62bd3a78eb6d3fcfaf7 100644 --- a/net/minecraft/world/entity/animal/Dolphin.java +++ b/net/minecraft/world/entity/animal/Dolphin.java -@@ -159,6 +159,13 @@ public class Dolphin extends AgeableWaterCreature { +@@ -160,6 +160,13 @@ public class Dolphin extends AgeableWaterCreature { } // Purpur end - Configurable entity base attributes @@ -158,10 +158,10 @@ index 71147da158f389207c032bc8e952ddb677e6d0ee..aaeb8a787158171920993719afcacc58 @Override public SpawnGroupData finalizeSpawn( diff --git a/net/minecraft/world/entity/animal/Fox.java b/net/minecraft/world/entity/animal/Fox.java -index 51e28983b67edcd744f38aba38c704dfd2ffff6e..22058c67eff5204202b71d2df9db3e59c2e5f916 100644 +index 0f32571b193ba48540c283026e5a5d99314951fe..71def83ec7b69832dbb0af4eaa012e25673e38b3 100644 --- a/net/minecraft/world/entity/animal/Fox.java +++ b/net/minecraft/world/entity/animal/Fox.java -@@ -195,6 +195,13 @@ public class Fox extends Animal { +@@ -197,6 +197,13 @@ public class Fox extends Animal { } // Purpur end - Make entity breeding times configurable @@ -194,10 +194,10 @@ index 5f7ab269e406e6d6912a58b3b48123d6c4da282c..dbc01564e23e7785e85b16f100925d36 protected void ageBoundaryReached() { if (this.isBaby()) { diff --git a/net/minecraft/world/entity/animal/IronGolem.java b/net/minecraft/world/entity/animal/IronGolem.java -index 89799cb1545b29ff10c25096e5ec7ba12af74eb1..4a7c6dedb23ac1057eda80de4a2cd54fe3e6f76f 100644 +index a8ae43ab84d746e8f046b52410602607e759761e..54b7edced2b95f874d9ef7ba21418a68e9bd6291 100644 --- a/net/minecraft/world/entity/animal/IronGolem.java +++ b/net/minecraft/world/entity/animal/IronGolem.java -@@ -100,6 +100,13 @@ public class IronGolem extends AbstractGolem implements NeutralMob { +@@ -101,6 +101,13 @@ public class IronGolem extends AbstractGolem implements NeutralMob { } // Purpur end - Configurable entity base attributes @@ -230,10 +230,10 @@ index 6cbf93991ee375d2051128721a409a3a7a9064e8..ddd763cc38e8c624db7ef207f244961b public float getWalkTargetValue(BlockPos pos, LevelReader level) { return level.getBlockState(pos.below()).is(Blocks.MYCELIUM) ? 10.0F : level.getPathfindingCostFromLightLevels(pos); diff --git a/net/minecraft/world/entity/animal/Ocelot.java b/net/minecraft/world/entity/animal/Ocelot.java -index c6f8e978df2ff28c0da243e44d26e33dacf221e5..125d324832623bb52ac1afd197862876a0f5f928 100644 +index f047fa8d33ab6b7e01447f91e6c33e22e9ce9e02..15d0d05dd80744880da9192d3fdfe3bc0c3e9401 100644 --- a/net/minecraft/world/entity/animal/Ocelot.java +++ b/net/minecraft/world/entity/animal/Ocelot.java -@@ -96,6 +96,13 @@ public class Ocelot extends Animal { +@@ -97,6 +97,13 @@ public class Ocelot extends Animal { } // Purpur end - Make entity breeding times configurable @@ -248,7 +248,7 @@ index c6f8e978df2ff28c0da243e44d26e33dacf221e5..125d324832623bb52ac1afd197862876 return this.entityData.get(DATA_TRUSTING); } diff --git a/net/minecraft/world/entity/animal/Panda.java b/net/minecraft/world/entity/animal/Panda.java -index 09e64eda71bfc1d55ec9fa37c6241c1d4cdc5842..36ec50791543c4eabf7158aa8d6ba272b14f6cd6 100644 +index fbe06479b24fd0e76a063eeac96447fa88c7d45b..4e9aa65002e4134600ee95b16bd14dcb6f1f46ee 100644 --- a/net/minecraft/world/entity/animal/Panda.java +++ b/net/minecraft/world/entity/animal/Panda.java @@ -149,6 +149,13 @@ public class Panda extends Animal { @@ -266,10 +266,10 @@ index 09e64eda71bfc1d55ec9fa37c6241c1d4cdc5842..36ec50791543c4eabf7158aa8d6ba272 protected boolean canDispenserEquipIntoSlot(EquipmentSlot slot) { return slot == EquipmentSlot.MAINHAND && this.canPickUpLoot(); diff --git a/net/minecraft/world/entity/animal/Parrot.java b/net/minecraft/world/entity/animal/Parrot.java -index eeccbee1f8e11862813abf0ed0d0f03bf28b376f..f5c98b277984249ec077c5742854a3cb444eb68c 100644 +index 0749317e7f1a7b54759b9cd335419e7f92362715..d31e85b63f41121678c67e6c284923251ef744f6 100644 --- a/net/minecraft/world/entity/animal/Parrot.java +++ b/net/minecraft/world/entity/animal/Parrot.java -@@ -208,6 +208,13 @@ public class Parrot extends ShoulderRidingEntity implements FlyingAnimal { +@@ -209,6 +209,13 @@ public class Parrot extends ShoulderRidingEntity implements FlyingAnimal { } // Purpur end - Make entity breeding times configurable @@ -320,7 +320,7 @@ index 884137b428a1fe69bb61b9ae05b652357daecc27..eda9e5965a6ff244288215188de8e05e @Override public AgeableMob getBreedOffspring(ServerLevel level, AgeableMob partner) { diff --git a/net/minecraft/world/entity/animal/Pufferfish.java b/net/minecraft/world/entity/animal/Pufferfish.java -index 8b895308ee7639396983c73dc4c2572c957df027..49f1d08239e92aa4e8f18ee8054c13e54089ed82 100644 +index 7ce2f0397b05e98a1d5721b6f5674cfbe7d19333..0f3bf73faf5c8d4bae5af6d4a9c4fa1be8394a6b 100644 --- a/net/minecraft/world/entity/animal/Pufferfish.java +++ b/net/minecraft/world/entity/animal/Pufferfish.java @@ -66,6 +66,13 @@ public class Pufferfish extends AbstractFish { @@ -338,10 +338,10 @@ index 8b895308ee7639396983c73dc4c2572c957df027..49f1d08239e92aa4e8f18ee8054c13e5 protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); diff --git a/net/minecraft/world/entity/animal/Rabbit.java b/net/minecraft/world/entity/animal/Rabbit.java -index 5e194a54a3a8d350c08edcba312e95b46db6c300..fb773ac6f450f6632fd7af3d0c44af57075fdcce 100644 +index f45ae44b37b512bf63e719ff15b538431a2c7e7f..0320fbe2d266366f85080487ac9533b672451cbb 100644 --- a/net/minecraft/world/entity/animal/Rabbit.java +++ b/net/minecraft/world/entity/animal/Rabbit.java -@@ -160,6 +160,13 @@ public class Rabbit extends Animal { +@@ -162,6 +162,13 @@ public class Rabbit extends Animal { } // Purpur end - Make entity breeding times configurable @@ -387,10 +387,10 @@ index 20f73d895bc55581c62283825a6d5296150ac707..6cb6ff86e3fd7b9dd2929669dc1b0d33 @Override diff --git a/net/minecraft/world/entity/animal/Squid.java b/net/minecraft/world/entity/animal/Squid.java -index ad2be25e45b350c7d971cd750245dbfa2b27ccb5..38a2d3f1344a8a826ceca645279779beb3a4dde7 100644 +index 4f8a5d0d6c3d302ebf8fcb3268f8e40b63686125..fcdab19016a3f92776447a51df9ea2796461ef9c 100644 --- a/net/minecraft/world/entity/animal/Squid.java +++ b/net/minecraft/world/entity/animal/Squid.java -@@ -99,6 +99,13 @@ public class Squid extends AgeableWaterCreature { +@@ -100,6 +100,13 @@ public class Squid extends AgeableWaterCreature { } // Purpur end - Configurable entity base attributes @@ -423,10 +423,10 @@ index 95368fd534c77e7d89ed6219f1f3948c428c256c..22a75b6b1e6f130027e39051f04267fb return "entity.minecraft.tropical_fish.predefined." + variantId; } diff --git a/net/minecraft/world/entity/animal/Turtle.java b/net/minecraft/world/entity/animal/Turtle.java -index 38b6678cbbce86e62efe08ece6634b1a5895dd84..e9b19fe300f9d5caebe8603d0347eae834408809 100644 +index 11a5f8d1a424531105436f96a097de6e9745be96..536a0cddb05e1224562528d19a69a9ef5c1e07f5 100644 --- a/net/minecraft/world/entity/animal/Turtle.java +++ b/net/minecraft/world/entity/animal/Turtle.java -@@ -118,6 +118,13 @@ public class Turtle extends Animal { +@@ -119,6 +119,13 @@ public class Turtle extends Animal { } // Purpur end - Make entity breeding times configurable @@ -459,10 +459,10 @@ index 277e955eabed07bdc50531dfe182de8cb05e56c2..c32a5f348e41d6ff733331b85baf32da public float getWalkTargetValue(BlockPos pos, LevelReader level) { return 0.0F; diff --git a/net/minecraft/world/entity/animal/coppergolem/CopperGolem.java b/net/minecraft/world/entity/animal/coppergolem/CopperGolem.java -index e50f9c7113063ce0c8696e06a3ca6ab768adc4af..5095ddcf1a2a4d4f5cff6dbaeec39a4e6e0d1d92 100644 +index cfe0bb8983dd1633085e03a6c2a57d99a0d822b8..e533edb6163cada2bc9bc9ed61bf333b2a2703b8 100644 --- a/net/minecraft/world/entity/animal/coppergolem/CopperGolem.java +++ b/net/minecraft/world/entity/animal/coppergolem/CopperGolem.java -@@ -141,6 +141,13 @@ public class CopperGolem extends AbstractGolem implements ContainerUser, Shearab +@@ -143,6 +143,13 @@ public class CopperGolem extends AbstractGolem implements ContainerUser, Shearab } // Purpur end - Configurable entity base attributes @@ -477,10 +477,10 @@ index e50f9c7113063ce0c8696e06a3ca6ab768adc4af..5095ddcf1a2a4d4f5cff6dbaeec39a4e return Mob.createMobAttributes().add(Attributes.MOVEMENT_SPEED, 0.2F).add(Attributes.STEP_HEIGHT, 1.0).add(Attributes.MAX_HEALTH, 12.0); } diff --git a/net/minecraft/world/entity/animal/goat/Goat.java b/net/minecraft/world/entity/animal/goat/Goat.java -index 673b90e3af9a9fdc03a4cbda9702e49def025d29..b048ca99370c65446855e3867eeb29ddb6ad51f6 100644 +index afcd9d3ea11d94ef811cce71f54f2a718619cc9f..60c97b44d3977eda2fa2c302aad3c7e337de51d9 100644 --- a/net/minecraft/world/entity/animal/goat/Goat.java +++ b/net/minecraft/world/entity/animal/goat/Goat.java -@@ -138,6 +138,13 @@ public class Goat extends Animal { +@@ -139,6 +139,13 @@ public class Goat extends Animal { } // Purpur end - Make entity breeding times configurable @@ -621,10 +621,10 @@ index 0d6d470b8680aed64d2b208b2ed9b037c96563d9..fd8a512910c886af1ae4e66edbf7f8d6 return createBaseHorseAttributes().add(Attributes.MAX_HEALTH, 15.0).add(Attributes.MOVEMENT_SPEED, 0.2F); } diff --git a/net/minecraft/world/entity/animal/sheep/Sheep.java b/net/minecraft/world/entity/animal/sheep/Sheep.java -index e5d495c12e2cd5a215f5b908ad65f6366eb47808..e204b349615be98ea9a143ca2bb73a3a0a32baa4 100644 +index baa18417b0b66f33aa3bb21032cd5816dc0ed800..3bdadfed6a06b965193cc615c490f89de65d515e 100644 --- a/net/minecraft/world/entity/animal/sheep/Sheep.java +++ b/net/minecraft/world/entity/animal/sheep/Sheep.java -@@ -94,6 +94,13 @@ public class Sheep extends Animal implements Shearable { +@@ -95,6 +95,13 @@ public class Sheep extends Animal implements Shearable { } // Purpur end - Make entity breeding times configurable @@ -639,10 +639,10 @@ index e5d495c12e2cd5a215f5b908ad65f6366eb47808..e204b349615be98ea9a143ca2bb73a3a protected void registerGoals() { this.eatBlockGoal = new EatBlockGoal(this); diff --git a/net/minecraft/world/entity/animal/wolf/Wolf.java b/net/minecraft/world/entity/animal/wolf/Wolf.java -index fc9b895b69385b04d56d071cbd498e61db6e6cb4..4b1c93cf2e17ae85d3b34a49c15e2926d8d1c81a 100644 +index 70b14a44f3d504788218b85317bb3812007386b0..9832cafd14d42d3bf92bb5791d6ded4008215998 100644 --- a/net/minecraft/world/entity/animal/wolf/Wolf.java +++ b/net/minecraft/world/entity/animal/wolf/Wolf.java -@@ -223,6 +223,13 @@ public class Wolf extends TamableAnimal implements NeutralMob { +@@ -224,6 +224,13 @@ public class Wolf extends TamableAnimal implements NeutralMob { } // Purpur end - Make entity breeding times configurable @@ -657,10 +657,10 @@ index fc9b895b69385b04d56d071cbd498e61db6e6cb4..4b1c93cf2e17ae85d3b34a49c15e2926 protected void registerGoals() { this.goalSelector.addGoal(1, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -index 1f9db9786995744c5ca5d97d8cf46fdd69aa8aa5..a3fe470ee11475c90462c50d54bfb27658a9536f 100644 +index bf9c295408902dc02b96e54959231338cd52c29c..5229ea2712436c4b087f1a159e3b1f680f0d237c 100644 --- a/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java +++ b/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -@@ -172,6 +172,13 @@ public class EnderDragon extends Mob implements Enemy { +@@ -173,6 +173,13 @@ public class EnderDragon extends Mob implements Enemy { } // Purpur end - Configurable entity base attributes @@ -675,10 +675,10 @@ index 1f9db9786995744c5ca5d97d8cf46fdd69aa8aa5..a3fe470ee11475c90462c50d54bfb276 return Mob.createMobAttributes().add(Attributes.MAX_HEALTH, 200.0).add(Attributes.CAMERA_DISTANCE, 16.0); } diff --git a/net/minecraft/world/entity/boss/wither/WitherBoss.java b/net/minecraft/world/entity/boss/wither/WitherBoss.java -index f6af57f402847e0f9af6a00b387d8a4b3e4d2afe..37919a338630efeb87accb7e0a7d86fddc03e858 100644 +index 6d35cce3fde4d0cee5fa1266d831fdf97ad85d35..e4f3d21422ccf45aee34885cc7633f37ec0c9903 100644 --- a/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/net/minecraft/world/entity/boss/wither/WitherBoss.java -@@ -221,6 +221,13 @@ public class WitherBoss extends Monster implements RangedAttackMob { +@@ -222,6 +222,13 @@ public class WitherBoss extends Monster implements RangedAttackMob { } // Purpur end - Configurable entity base attributes @@ -693,10 +693,10 @@ index f6af57f402847e0f9af6a00b387d8a4b3e4d2afe..37919a338630efeb87accb7e0a7d86fd protected PathNavigation createNavigation(Level level) { FlyingPathNavigation flyingPathNavigation = new FlyingPathNavigation(this, level); diff --git a/net/minecraft/world/entity/monster/Blaze.java b/net/minecraft/world/entity/monster/Blaze.java -index 8621ab150da50116260cd76821c02109cd32e351..e940633d5140bb19623cef9cc9d6acdae77ed392 100644 +index cb536ec921c837b86c2c1dfbe1d6b08a9b18bf0f..8941252b8c91ce26097651ab32c139a53c43feb3 100644 --- a/net/minecraft/world/entity/monster/Blaze.java +++ b/net/minecraft/world/entity/monster/Blaze.java -@@ -34,7 +34,7 @@ public class Blaze extends Monster { +@@ -35,7 +35,7 @@ public class Blaze extends Monster { public Blaze(EntityType type, Level level) { super(type, level); this.moveControl = new org.purpurmc.purpur.controller.FlyingWithSpacebarMoveControllerWASD(this, 0.3F); // Purpur - Ridables @@ -705,7 +705,7 @@ index 8621ab150da50116260cd76821c02109cd32e351..e940633d5140bb19623cef9cc9d6acda this.setPathfindingMalus(PathType.LAVA, 8.0F); this.setPathfindingMalus(PathType.DANGER_FIRE, 0.0F); this.setPathfindingMalus(PathType.DAMAGE_FIRE, 0.0F); -@@ -157,7 +157,7 @@ public class Blaze extends Monster { +@@ -158,7 +158,7 @@ public class Blaze extends Monster { @Override public boolean isSensitiveToWater() { @@ -787,7 +787,7 @@ index 57fb334f670d35aa181b13e12fa2c5f36da1dda6..1ea323a17440abbe36c9528e80e16981 return Guardian.createAttributes().add(Attributes.MOVEMENT_SPEED, 0.3F).add(Attributes.ATTACK_DAMAGE, 8.0).add(Attributes.MAX_HEALTH, 80.0); } diff --git a/net/minecraft/world/entity/monster/EnderMan.java b/net/minecraft/world/entity/monster/EnderMan.java -index e6304680a8f2e9fb5fdcfd166471fd3355fb643c..09cce24dcc6a57f02c020c7e035e7940ddf9a962 100644 +index 0d2fb6a1b4c8e02e40afa612744e259ef3230c0a..f6cc9107702e5cfa985694c7c88ae21622cd39c6 100644 --- a/net/minecraft/world/entity/monster/EnderMan.java +++ b/net/minecraft/world/entity/monster/EnderMan.java @@ -87,7 +87,7 @@ public class EnderMan extends Monster implements NeutralMob { @@ -845,10 +845,10 @@ index 24d104036902b8aaf79325e33d3063ccea29e13e..9015643b47e2d20a5c75c5f4bf2ec663 protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/Ghast.java b/net/minecraft/world/entity/monster/Ghast.java -index fdbf14ff7e62d8db023b3d3bdf4ae685b5f085a8..f87e4b960fad01ceb62dc4c80ab80aaad5c7a986 100644 +index 30b75f7e7a79aaa602083eb07f125a3a5e5f19f9..544f3564411138c59eaad2b0bf50ec01ceb319bf 100644 --- a/net/minecraft/world/entity/monster/Ghast.java +++ b/net/minecraft/world/entity/monster/Ghast.java -@@ -82,6 +82,13 @@ public class Ghast extends Mob implements Enemy { +@@ -83,6 +83,13 @@ public class Ghast extends Mob implements Enemy { } // Purpur end - Configurable entity base attributes @@ -881,10 +881,10 @@ index e6fb01e4e2146d6c6971d80af0f101d20c03950a..2204c729ce42e89a0b42b365e0060098 return Monster.createMonsterAttributes() .add(Attributes.MAX_HEALTH, 100.0) diff --git a/net/minecraft/world/entity/monster/Guardian.java b/net/minecraft/world/entity/monster/Guardian.java -index c59f2dd8661d7a6bd35aaa1933a60a47f795bdd1..68eb628b5019c60df9f8bdfc7d47a6e68913fbd4 100644 +index d206d9b8563dfd38c0ff4c8b4abe00aa064a2305..901338319b78e538208f72ead289f7277fd00eb9 100644 --- a/net/minecraft/world/entity/monster/Guardian.java +++ b/net/minecraft/world/entity/monster/Guardian.java -@@ -98,6 +98,13 @@ public class Guardian extends Monster { +@@ -99,6 +99,13 @@ public class Guardian extends Monster { } // Purpur end - Configurable entity base attributes @@ -899,10 +899,10 @@ index c59f2dd8661d7a6bd35aaa1933a60a47f795bdd1..68eb628b5019c60df9f8bdfc7d47a6e6 protected void registerGoals() { MoveTowardsRestrictionGoal moveTowardsRestrictionGoal = new MoveTowardsRestrictionGoal(this, 1.0); diff --git a/net/minecraft/world/entity/monster/Husk.java b/net/minecraft/world/entity/monster/Husk.java -index c3f582260bce068a887b3211b7add009efe18bd1..b43f65cf25ac1a7b753cc0c879e42fcb6508376a 100644 +index d3e1f5debbd34b8afff06498de48299da37c3add..fe593e955c93f5dd211db11a3e2ae8051e74e164 100644 --- a/net/minecraft/world/entity/monster/Husk.java +++ b/net/minecraft/world/entity/monster/Husk.java -@@ -66,6 +66,13 @@ public class Husk extends Zombie { +@@ -67,6 +67,13 @@ public class Husk extends Zombie { } // Purpur end - Configurable jockey options @@ -935,7 +935,7 @@ index b6872c94d769346ed2a8bb2406fc2b39ef64a67c..ee5e0b20f65a5f7d7dc2cf8fea2eff56 protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/MagmaCube.java b/net/minecraft/world/entity/monster/MagmaCube.java -index f39611741c4dacec2b1ad2d25ca9b7d47c188049..a5ca7a2f301cc8ae5878e583c2cf8aeef2085982 100644 +index db9e4dff83640b1e499db944a0c1cf3b869bc314..bce9a085dfbe06bd4a869ae8d7d407ebbf7ad6b4 100644 --- a/net/minecraft/world/entity/monster/MagmaCube.java +++ b/net/minecraft/world/entity/monster/MagmaCube.java @@ -68,6 +68,13 @@ public class MagmaCube extends Slime { @@ -953,10 +953,10 @@ index f39611741c4dacec2b1ad2d25ca9b7d47c188049..a5ca7a2f301cc8ae5878e583c2cf8aee return Monster.createMonsterAttributes().add(Attributes.MOVEMENT_SPEED, 0.2F); } diff --git a/net/minecraft/world/entity/monster/Phantom.java b/net/minecraft/world/entity/monster/Phantom.java -index 42089b34a1a1927247953b54cdc3300e1b600a90..b4ff8b2f5fecffe808788014e0903b7238849172 100644 +index 8ebe339c91d61166078291dc9f5f70dd596cc58f..f6ee097af3337c39baacad9a572443141c750223 100644 --- a/net/minecraft/world/entity/monster/Phantom.java +++ b/net/minecraft/world/entity/monster/Phantom.java -@@ -129,6 +129,13 @@ public class Phantom extends Mob implements Enemy { +@@ -130,6 +130,13 @@ public class Phantom extends Mob implements Enemy { } // Purpur end - Phantoms attracted to crystals and crystals shoot phantoms @@ -989,10 +989,10 @@ index 748233be6bdfd735aa3ccc02a7ba21a45603ffa4..1aa2f744b0d875fb874cf23a0601fee4 protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/Ravager.java b/net/minecraft/world/entity/monster/Ravager.java -index a1fb74b51f51c045eed0fe09eceafa6d533babe2..5d7f6825d7bff413cac0fbf3a1d613bccd5102d6 100644 +index 0220bb3add91779979cf7591dc1ea18f69f9e7c4..2dcf90e3be35290ed9cbe7cf19aa67d1f9acac80 100644 --- a/net/minecraft/world/entity/monster/Ravager.java +++ b/net/minecraft/world/entity/monster/Ravager.java -@@ -101,6 +101,13 @@ public class Ravager extends Raider { +@@ -102,6 +102,13 @@ public class Ravager extends Raider { } // Purpur end - Configurable entity base attributes @@ -1025,7 +1025,7 @@ index 3909804ba8f9e220260efe6255ff2b298a4448db..21b28d1ba59656b123aef95a7e18075d protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables diff --git a/net/minecraft/world/entity/monster/Silverfish.java b/net/minecraft/world/entity/monster/Silverfish.java -index 97662c39001b4433601f46ef83f28c0ee916c02a..190312706c2e69bb0cf6e402e8e3ad7dd64b7b98 100644 +index d81ed52599cf4cba49726f2ad9da4ce1dab14df1..58a759fdfae0ef20decc82842bdf4e9947f51807 100644 --- a/net/minecraft/world/entity/monster/Silverfish.java +++ b/net/minecraft/world/entity/monster/Silverfish.java @@ -66,6 +66,13 @@ public class Silverfish extends Monster { @@ -1043,10 +1043,10 @@ index 97662c39001b4433601f46ef83f28c0ee916c02a..190312706c2e69bb0cf6e402e8e3ad7d protected void registerGoals() { this.friendsGoal = new Silverfish.SilverfishWakeUpFriendsGoal(this); diff --git a/net/minecraft/world/entity/monster/Skeleton.java b/net/minecraft/world/entity/monster/Skeleton.java -index 8d1f83ba8042435a0dc1e6e1fb9873173efe277d..1ae787edeb2011afb373fb44702f8a5150ee95b1 100644 +index 0a5d78da5f809afde38ebbbcec3798a7a5f0f9be..c7bfa5214fd46c6b5e264314f86ca5c2904bf123 100644 --- a/net/minecraft/world/entity/monster/Skeleton.java +++ b/net/minecraft/world/entity/monster/Skeleton.java -@@ -49,6 +49,13 @@ public class Skeleton extends AbstractSkeleton { +@@ -50,6 +50,13 @@ public class Skeleton extends AbstractSkeleton { } // Purpur end - Configurable entity base attributes @@ -1061,7 +1061,7 @@ index 8d1f83ba8042435a0dc1e6e1fb9873173efe277d..1ae787edeb2011afb373fb44702f8a51 protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); diff --git a/net/minecraft/world/entity/monster/Slime.java b/net/minecraft/world/entity/monster/Slime.java -index beb504f9a5de48d9631585648a98cd3d2d682d76..f6e0ec18150f91d42f9a5b2f45e5a6e80c4ea031 100644 +index 5af9f8182fa8bc3720cf30ed073ecc8050a76b43..7c5d3c30be47f0cac043e73153a1face837406dd 100644 --- a/net/minecraft/world/entity/monster/Slime.java +++ b/net/minecraft/world/entity/monster/Slime.java @@ -134,6 +134,13 @@ public class Slime extends Mob implements Enemy { @@ -1137,7 +1137,7 @@ index 6760c826cf72cc704f54ea0e3d6aaffde4ac22c4..1004aaf885268d08e68e5d2465fae2b5 @Override diff --git a/net/minecraft/world/entity/monster/Vex.java b/net/minecraft/world/entity/monster/Vex.java -index 7fddf0a36b1c4a3f7fbab8b0319e00281e8acd90..75681ed441e5cbb4c01a433f9757795089af234b 100644 +index 09211a8a5b893f878ad173c4ab71393c8f309f58..13285c9f233c3240729de4baf5f014e25b245547 100644 --- a/net/minecraft/world/entity/monster/Vex.java +++ b/net/minecraft/world/entity/monster/Vex.java @@ -112,6 +112,13 @@ public class Vex extends Monster implements TraceableEntity { @@ -1173,10 +1173,10 @@ index fdaf024a27825844105ef62baddf30e3b4412d28..33452593731c53f404059271b3fbb040 protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/Witch.java b/net/minecraft/world/entity/monster/Witch.java -index 60a6d8880e6d0009cfd136599ca6f1c1b07adc42..cafdebd0fa9a7458e5adaf109b3ebd4beed7a1ef 100644 +index 35dc597e5b0e703319eb5ff31bde0960b224fc40..a785deb09373e20c13f8be49626d9619491b02c8 100644 --- a/net/minecraft/world/entity/monster/Witch.java +++ b/net/minecraft/world/entity/monster/Witch.java -@@ -81,6 +81,13 @@ public class Witch extends Raider implements RangedAttackMob { +@@ -82,6 +82,13 @@ public class Witch extends Raider implements RangedAttackMob { } // Purpur end - Configurable entity base attributes @@ -1209,10 +1209,10 @@ index 4d4e04d9fb5b68897ffa6f299bd2009bb397da3d..778779c79c56e2ca438ecbb82fbb16d7 protected void registerGoals() { this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractPiglin.class, true)); diff --git a/net/minecraft/world/entity/monster/Zoglin.java b/net/minecraft/world/entity/monster/Zoglin.java -index 5e52eab9a78db8a5652bdee7127d75921f641ab9..67998321b2c47d4aaf027c5fd17cb6d01e105b6f 100644 +index e7e840ba5383c28e0167e7dd032359403ae3224a..d9ca3944fce3464be69ca1b3b5191e2d8de01e3d 100644 --- a/net/minecraft/world/entity/monster/Zoglin.java +++ b/net/minecraft/world/entity/monster/Zoglin.java -@@ -111,6 +111,13 @@ public class Zoglin extends Monster implements HoglinBase { +@@ -112,6 +112,13 @@ public class Zoglin extends Monster implements HoglinBase { } // Purpur end - Configurable entity base attributes @@ -1227,10 +1227,10 @@ index 5e52eab9a78db8a5652bdee7127d75921f641ab9..67998321b2c47d4aaf027c5fd17cb6d0 protected Brain.Provider brainProvider() { return Brain.provider(MEMORY_TYPES, SENSOR_TYPES); diff --git a/net/minecraft/world/entity/monster/Zombie.java b/net/minecraft/world/entity/monster/Zombie.java -index 787efb0297b675e18c2e237126c849ec98eeab5b..336588a6bc2e95a02656c98aa58865ef4d90a8d5 100644 +index 3095dfbba2c3e61a550abc7c48e91f5704909e03..23484fe8ca8568d533e1604876900f75a96ac6d8 100644 --- a/net/minecraft/world/entity/monster/Zombie.java +++ b/net/minecraft/world/entity/monster/Zombie.java -@@ -141,6 +141,13 @@ public class Zombie extends Monster { +@@ -142,6 +142,13 @@ public class Zombie extends Monster { } // Purpur end - Configurable jockey options @@ -1245,10 +1245,10 @@ index 787efb0297b675e18c2e237126c849ec98eeab5b..336588a6bc2e95a02656c98aa58865ef protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables diff --git a/net/minecraft/world/entity/monster/ZombieVillager.java b/net/minecraft/world/entity/monster/ZombieVillager.java -index fa11f0fc2b036032fde14cc1a64df693eed1a017..1693fbcd47cc06409ac1849475feda7b5c4e437a 100644 +index cf88072320f46ec9cf2194f8debe05e33702521f..5ae0e9d5f3c3b7a6f64775396acf061ff0d3561f 100644 --- a/net/minecraft/world/entity/monster/ZombieVillager.java +++ b/net/minecraft/world/entity/monster/ZombieVillager.java -@@ -119,6 +119,13 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { +@@ -121,6 +121,13 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { } // Purpur end - Configurable jockey options @@ -1263,7 +1263,7 @@ index fa11f0fc2b036032fde14cc1a64df693eed1a017..1693fbcd47cc06409ac1849475feda7b protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); diff --git a/net/minecraft/world/entity/monster/ZombifiedPiglin.java b/net/minecraft/world/entity/monster/ZombifiedPiglin.java -index 8e226a6a732efee42ecf492676089ecf0b2d785a..d43e4d29a75dd66551eb432ceec1cc3fda738364 100644 +index 06e2207d7ea554226b02d65c7fb612a87da71caa..46520af2dcf89a54374b933f5acdb8d2c66abbff 100644 --- a/net/minecraft/world/entity/monster/ZombifiedPiglin.java +++ b/net/minecraft/world/entity/monster/ZombifiedPiglin.java @@ -106,6 +106,13 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { @@ -1281,10 +1281,10 @@ index 8e226a6a732efee42ecf492676089ecf0b2d785a..d43e4d29a75dd66551eb432ceec1cc3f public void setPersistentAngerTarget(@Nullable UUID target) { this.persistentAngerTarget = target; diff --git a/net/minecraft/world/entity/monster/hoglin/Hoglin.java b/net/minecraft/world/entity/monster/hoglin/Hoglin.java -index 2de148c874feeff23da144037562ded852e48a04..660d1f56cc74bc2a8764094d16772aace1234c15 100644 +index 1f5096856ab353e2920003a54f530c952e8988da..053c47fcaf4e5d3bc8f9a3d913508a7816b15747 100644 --- a/net/minecraft/world/entity/monster/hoglin/Hoglin.java +++ b/net/minecraft/world/entity/monster/hoglin/Hoglin.java -@@ -127,6 +127,13 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { +@@ -128,6 +128,13 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { } // Purpur end - Make entity breeding times configurable @@ -1299,7 +1299,7 @@ index 2de148c874feeff23da144037562ded852e48a04..660d1f56cc74bc2a8764094d16772aac public void setTimeInOverworld(int timeInOverworld) { this.timeInOverworld = timeInOverworld; diff --git a/net/minecraft/world/entity/monster/piglin/Piglin.java b/net/minecraft/world/entity/monster/piglin/Piglin.java -index 4e1a7b6caf8c0a3721a3a799261d7b63301c3b29..5bf58287dad04c96459982d55b5ac00646e37d53 100644 +index de65ff0bf3de1d20360bc0ebb1cd3dc48c5560fe..293d6359469095c5faf87ec574ac8a475ce33ba9 100644 --- a/net/minecraft/world/entity/monster/piglin/Piglin.java +++ b/net/minecraft/world/entity/monster/piglin/Piglin.java @@ -161,6 +161,13 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento @@ -1335,10 +1335,10 @@ index 31e38737806098795de0e87fbcaf60d4ab83ea6e..e988a65cbd1f71f488fa8221ef11b6b1 return Monster.createMonsterAttributes() .add(Attributes.MAX_HEALTH, 50.0) diff --git a/net/minecraft/world/entity/npc/Villager.java b/net/minecraft/world/entity/npc/Villager.java -index 33af111898df4e10367e6ef0d01eaf376bfc5819..810494826a7b600941f3087f114064e157ba88e6 100644 +index 03b4130179b34735243b3c0b86879dbb7d9f9f00..2a145e4eb0474950cbfb4a229891b4b2320d98d2 100644 --- a/net/minecraft/world/entity/npc/Villager.java +++ b/net/minecraft/world/entity/npc/Villager.java -@@ -281,6 +281,13 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -282,6 +282,13 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } // Purpur end - Configurable entity base attributes diff --git a/purpur-server/minecraft-patches/features/0018-API-for-any-mob-to-burn-daylight.patch b/purpur-server/minecraft-patches/features/0018-API-for-any-mob-to-burn-daylight.patch index 478624168..6bfa7844c 100644 --- a/purpur-server/minecraft-patches/features/0018-API-for-any-mob-to-burn-daylight.patch +++ b/purpur-server/minecraft-patches/features/0018-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/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index 1c318158e1cc016cf7f26d352519f45bc244cee8..1b9f3e94206cc5627ca6c98f142766d4aaa7f4d7 100644 +index 046cf7d2146f68bf1b959ae19fd034a241e12164..a45d8f5355becd08cbd247b3a489667bdfc73995 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java @@ -543,6 +543,24 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name @@ -35,10 +35,10 @@ index 1c318158e1cc016cf7f26d352519f45bc244cee8..1b9f3e94206cc5627ca6c98f142766d4 this.type = type; this.level = level; diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java -index ab3ddd1c52b561c56ee240ee68f5e5aca706b744..7dd9e6ecb2d68a98e3c4980638098cfc3ee82633 100644 +index 38750906a1e15c1758c4b54eca6be0170047a2d1..c528300563a5318969c5acab6971b2257a57a112 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java -@@ -286,6 +286,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -287,6 +287,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin public org.bukkit.craftbukkit.entity.CraftLivingEntity getBukkitLivingEntity() { return (org.bukkit.craftbukkit.entity.CraftLivingEntity) super.getBukkitEntity(); } // Paper public boolean silentDeath = false; // Paper - mark entity as dying silently for cancellable death event public net.kyori.adventure.util.TriState frictionState = net.kyori.adventure.util.TriState.NOT_SET; // Paper - Friction API @@ -46,7 +46,7 @@ index ab3ddd1c52b561c56ee240ee68f5e5aca706b744..7dd9e6ecb2d68a98e3c4980638098cfc // CraftBukkit end protected LivingEntity(EntityType type, Level level) { -@@ -795,6 +796,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -796,6 +797,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin this.getSleepingPos().ifPresent(blockPos -> output.store("sleeping_pos", BlockPos.CODEC, blockPos)); DataResult> dataResult = this.brain.serializeStart(NbtOps.INSTANCE).map(tag -> new Dynamic<>(NbtOps.INSTANCE, tag)); dataResult.resultOrPartial(LOGGER::error).ifPresent(dynamic -> output.store("Brain", Codec.PASSTHROUGH, (Dynamic)dynamic)); @@ -54,7 +54,7 @@ index ab3ddd1c52b561c56ee240ee68f5e5aca706b744..7dd9e6ecb2d68a98e3c4980638098cfc if (this.lastHurtByPlayer != null) { this.lastHurtByPlayer.store(output, "last_hurt_by_player"); output.putInt("last_hurt_by_player_memory_time", this.lastHurtByPlayerMemoryTime); -@@ -921,6 +923,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -922,6 +924,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin } // Paper - The sleeping pos will always also set the actual pos, so a desync suggests something is wrong }, this::clearSleepingPos); input.read("Brain", Codec.PASSTHROUGH).ifPresent(dynamic -> this.brain = this.makeBrain((Dynamic)dynamic)); @@ -62,7 +62,7 @@ index ab3ddd1c52b561c56ee240ee68f5e5aca706b744..7dd9e6ecb2d68a98e3c4980638098cfc this.lastHurtByPlayer = EntityReference.read(input, "last_hurt_by_player"); this.lastHurtByPlayerMemoryTime = input.getIntOr("last_hurt_by_player_memory_time", 0); this.lastHurtByMob = EntityReference.read(input, "last_hurt_by_mob"); -@@ -3717,6 +3720,32 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -3720,6 +3723,32 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin if (this.level() instanceof ServerLevel serverLevel && this.isSensitiveToWater() && this.isInWaterOrRain()) { this.hurtServer(serverLevel, this.damageSources().drown(), 1.0F); } @@ -96,7 +96,7 @@ index ab3ddd1c52b561c56ee240ee68f5e5aca706b744..7dd9e6ecb2d68a98e3c4980638098cfc protected void applyInput() { diff --git a/net/minecraft/world/entity/Mob.java b/net/minecraft/world/entity/Mob.java -index e4aaa451129d0ed11d855b53aae0c0279b899479..19ce70712cb651f2cf086a0b490ef9008dbc4ce0 100644 +index 2d0efa66b33daa78479d01bd5ed8d558f0e0ae2d..8ca2005133aaf76ecd437e8d9317ea05a303f79d 100644 --- a/net/minecraft/world/entity/Mob.java +++ b/net/minecraft/world/entity/Mob.java @@ -1589,19 +1589,8 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab @@ -186,10 +186,10 @@ index 7e43dd4b44335989127cc1b6e2c59d771876887a..14730f53561dec218b0fa6648c8de2b2 // Paper end - shouldBurnInDay API diff --git a/net/minecraft/world/entity/monster/Husk.java b/net/minecraft/world/entity/monster/Husk.java -index b43f65cf25ac1a7b753cc0c879e42fcb6508376a..938c8e0708df47299a627b1c7f56793035dd219c 100644 +index fe593e955c93f5dd211db11a3e2ae8051e74e164..ac02f6abf186a1f31e48fd4ed8181e22919c2f04 100644 --- a/net/minecraft/world/entity/monster/Husk.java +++ b/net/minecraft/world/entity/monster/Husk.java -@@ -18,6 +18,7 @@ import net.minecraft.world.level.ServerLevelAccessor; +@@ -19,6 +19,7 @@ import net.minecraft.world.level.block.LevelEvent; public class Husk extends Zombie { public Husk(EntityType type, Level level) { super(type, level); @@ -197,7 +197,7 @@ index b43f65cf25ac1a7b753cc0c879e42fcb6508376a..938c8e0708df47299a627b1c7f567930 } // Purpur start - Ridables -@@ -81,7 +82,7 @@ public class Husk extends Zombie { +@@ -82,7 +83,7 @@ public class Husk extends Zombie { @Override public boolean isSunSensitive() { @@ -207,10 +207,10 @@ index b43f65cf25ac1a7b753cc0c879e42fcb6508376a..938c8e0708df47299a627b1c7f567930 @Override diff --git a/net/minecraft/world/entity/monster/Phantom.java b/net/minecraft/world/entity/monster/Phantom.java -index b4ff8b2f5fecffe808788014e0903b7238849172..c7d52c623d8616209ab742b69838beed156d80de 100644 +index f6ee097af3337c39baacad9a572443141c750223..332c08a2d0d0fe2e8c7e9461bb73a73ddee91b94 100644 --- a/net/minecraft/world/entity/monster/Phantom.java +++ b/net/minecraft/world/entity/monster/Phantom.java -@@ -53,7 +53,7 @@ public class Phantom extends Mob implements Enemy { +@@ -54,7 +54,7 @@ public class Phantom extends Mob implements Enemy { // Paper start @Nullable public java.util.UUID spawningEntity; @@ -219,7 +219,7 @@ index b4ff8b2f5fecffe808788014e0903b7238849172..c7d52c623d8616209ab742b69838beed // Paper end private static final net.minecraft.world.item.crafting.Ingredient TORCH = net.minecraft.world.item.crafting.Ingredient.of(net.minecraft.world.item.Items.TORCH, net.minecraft.world.item.Items.SOUL_TORCH); // Purpur - Phantoms burn in light -@@ -62,6 +62,7 @@ public class Phantom extends Mob implements Enemy { +@@ -63,6 +63,7 @@ public class Phantom extends Mob implements Enemy { this.xpReward = 5; this.moveControl = new Phantom.PhantomMoveControl(this); this.lookControl = new Phantom.PhantomLookControl(this); @@ -227,7 +227,7 @@ index b4ff8b2f5fecffe808788014e0903b7238849172..c7d52c623d8616209ab742b69838beed } // Purpur start - Ridables -@@ -136,6 +137,16 @@ public class Phantom extends Mob implements Enemy { +@@ -137,6 +138,16 @@ public class Phantom extends Mob implements Enemy { } // Purpur end - Toggle for water sensitive mob damage @@ -244,7 +244,7 @@ index b4ff8b2f5fecffe808788014e0903b7238849172..c7d52c623d8616209ab742b69838beed @Override public boolean isFlapping() { return (this.getUniqueFlapTickOffset() + this.tickCount) % TICKS_PER_FLAP == 0; -@@ -246,15 +257,7 @@ public class Phantom extends Mob implements Enemy { +@@ -247,15 +258,7 @@ public class Phantom extends Mob implements Enemy { @Override public void aiStep() { @@ -261,7 +261,7 @@ index b4ff8b2f5fecffe808788014e0903b7238849172..c7d52c623d8616209ab742b69838beed super.aiStep(); } -@@ -301,7 +304,7 @@ public class Phantom extends Mob implements Enemy { +@@ -302,7 +305,7 @@ public class Phantom extends Mob implements Enemy { this.setPhantomSize(input.getIntOr("size", 0)); // Paper start this.spawningEntity = input.read("Paper.SpawningEntity", net.minecraft.core.UUIDUtil.CODEC).orElse(null); @@ -270,7 +270,7 @@ index b4ff8b2f5fecffe808788014e0903b7238849172..c7d52c623d8616209ab742b69838beed // Paper end } -@@ -312,7 +315,7 @@ public class Phantom extends Mob implements Enemy { +@@ -313,7 +316,7 @@ public class Phantom extends Mob implements Enemy { output.putInt("size", this.getPhantomSize()); // Paper start output.storeNullable("Paper.SpawningEntity", net.minecraft.core.UUIDUtil.CODEC, this.spawningEntity); @@ -280,10 +280,10 @@ index b4ff8b2f5fecffe808788014e0903b7238849172..c7d52c623d8616209ab742b69838beed } diff --git a/net/minecraft/world/entity/monster/Zombie.java b/net/minecraft/world/entity/monster/Zombie.java -index 336588a6bc2e95a02656c98aa58865ef4d90a8d5..00e9383ad8251da600c84885c439a207c256c22a 100644 +index 23484fe8ca8568d533e1604876900f75a96ac6d8..1280605d393d0afda475c5d54b073824d141a460 100644 --- a/net/minecraft/world/entity/monster/Zombie.java +++ b/net/minecraft/world/entity/monster/Zombie.java -@@ -91,11 +91,12 @@ public class Zombie extends Monster { +@@ -92,11 +92,12 @@ public class Zombie extends Monster { private boolean canBreakDoors = false; private int inWaterTime = 0; public int conversionTime; @@ -297,7 +297,7 @@ index 336588a6bc2e95a02656c98aa58865ef4d90a8d5..00e9383ad8251da600c84885c439a207 } public Zombie(Level level) { -@@ -292,29 +293,7 @@ public class Zombie extends Monster { +@@ -293,29 +294,7 @@ public class Zombie extends Monster { @Override public void aiStep() { @@ -328,7 +328,7 @@ index 336588a6bc2e95a02656c98aa58865ef4d90a8d5..00e9383ad8251da600c84885c439a207 super.aiStep(); } -@@ -373,6 +352,7 @@ public class Zombie extends Monster { +@@ -374,6 +353,7 @@ public class Zombie extends Monster { // CraftBukkit end } @@ -336,7 +336,7 @@ index 336588a6bc2e95a02656c98aa58865ef4d90a8d5..00e9383ad8251da600c84885c439a207 public boolean isSunSensitive() { return this.shouldBurnInDay; // Paper - Add more Zombie API } -@@ -510,7 +490,7 @@ public class Zombie extends Monster { +@@ -511,7 +491,7 @@ public class Zombie extends Monster { output.putBoolean("CanBreakDoors", this.canBreakDoors()); output.putInt("InWaterTime", this.isInWater() ? this.inWaterTime : -1); output.putInt("DrownedConversionTime", this.isUnderWaterConverting() ? this.conversionTime : -1); @@ -345,7 +345,7 @@ index 336588a6bc2e95a02656c98aa58865ef4d90a8d5..00e9383ad8251da600c84885c439a207 } @Override -@@ -525,7 +505,7 @@ public class Zombie extends Monster { +@@ -526,7 +506,7 @@ public class Zombie extends Monster { } else { this.getEntityData().set(DATA_DROWNED_CONVERSION_ID, false); } diff --git a/purpur-server/minecraft-patches/features/0020-Mobs-always-drop-experience.patch b/purpur-server/minecraft-patches/features/0020-Mobs-always-drop-experience.patch index 5d2ff9efa..3c417b5f1 100644 --- a/purpur-server/minecraft-patches/features/0020-Mobs-always-drop-experience.patch +++ b/purpur-server/minecraft-patches/features/0020-Mobs-always-drop-experience.patch @@ -23,10 +23,10 @@ index a10a1e26d0260968c6becd1e9d68436071da8411..0a29ed8b1347ce7c854bb787e0d003ff protected ParticleOptions getInkParticle() { return ParticleTypes.GLOW_SQUID_INK; diff --git a/net/minecraft/world/entity/ambient/Bat.java b/net/minecraft/world/entity/ambient/Bat.java -index 9dd4d9a10df973fbf4e4fc63a8a7b7041f21ede4..a764dec7a349273b31a994c38e2c7374c6a1adb6 100644 +index a64afb30454ee537b0e044d6d55ce0b0a8e944ea..f8b3cae866b68b71345c1d0cb578ea5346d83cba 100644 --- a/net/minecraft/world/entity/ambient/Bat.java +++ b/net/minecraft/world/entity/ambient/Bat.java -@@ -118,6 +118,13 @@ public class Bat extends AmbientCreature { +@@ -119,6 +119,13 @@ public class Bat extends AmbientCreature { } // Purpur end - Toggle for water sensitive mob damage @@ -41,10 +41,10 @@ index 9dd4d9a10df973fbf4e4fc63a8a7b7041f21ede4..a764dec7a349273b31a994c38e2c7374 public boolean isFlapping() { return !this.isResting() && this.tickCount % 10.0F == 0.0F; diff --git a/net/minecraft/world/entity/animal/Bee.java b/net/minecraft/world/entity/animal/Bee.java -index 234f02e0b75c6b9a8f52c440c680b539ee783f91..968ec5a7188cc4e4a60956e12e44c4b746cf78d1 100644 +index b2b234490aba52c8125c0644f0176fe825b63e91..5e054044444b464243c11574bbac9a0eabcc4073 100644 --- a/net/minecraft/world/entity/animal/Bee.java +++ b/net/minecraft/world/entity/animal/Bee.java -@@ -495,6 +495,13 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -496,6 +496,13 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { } // Purpur end - Toggle for water sensitive mob damage @@ -59,10 +59,10 @@ index 234f02e0b75c6b9a8f52c440c680b539ee783f91..968ec5a7188cc4e4a60956e12e44c4b7 public int getRemainingPersistentAngerTime() { return this.entityData.get(DATA_REMAINING_ANGER_TIME); diff --git a/net/minecraft/world/entity/animal/Cat.java b/net/minecraft/world/entity/animal/Cat.java -index 842c03df5a4ee67192f2850b89be45648024fd17..aff91b88efcb2e089d5d0faebb4fc8cb8a48accd 100644 +index 09467cb1f8f3c6978771464b292e33a1396d76e3..dcfa9994cbc9213e15e6528c21149eed3294be2c 100644 --- a/net/minecraft/world/entity/animal/Cat.java +++ b/net/minecraft/world/entity/animal/Cat.java -@@ -139,6 +139,13 @@ public class Cat extends TamableAnimal { +@@ -140,6 +140,13 @@ public class Cat extends TamableAnimal { } // Purpur end - Toggle for water sensitive mob damage @@ -131,10 +131,10 @@ index 150ba89fee07dcb67550165597203f572d901f04..c3d225f555b44d73196a3c34ca0b3a0c protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/animal/Dolphin.java b/net/minecraft/world/entity/animal/Dolphin.java -index aaeb8a787158171920993719afcacc58ffd0f5a2..c790233d6f254a77a42ec5628441345a506c37b0 100644 +index b89f87425721e540d612b62bd3a78eb6d3fcfaf7..9bf53221bf6652fa8e0a2ef47ac1524065ffe784 100644 --- a/net/minecraft/world/entity/animal/Dolphin.java +++ b/net/minecraft/world/entity/animal/Dolphin.java -@@ -166,6 +166,13 @@ public class Dolphin extends AgeableWaterCreature { +@@ -167,6 +167,13 @@ public class Dolphin extends AgeableWaterCreature { } // Purpur end - Toggle for water sensitive mob damage @@ -149,10 +149,10 @@ index aaeb8a787158171920993719afcacc58ffd0f5a2..c790233d6f254a77a42ec5628441345a @Override public SpawnGroupData finalizeSpawn( diff --git a/net/minecraft/world/entity/animal/Fox.java b/net/minecraft/world/entity/animal/Fox.java -index 22058c67eff5204202b71d2df9db3e59c2e5f916..a78af2629a9df93ea17b21c05f3d688692250920 100644 +index 71def83ec7b69832dbb0af4eaa012e25673e38b3..e35772494c56918592ee5684dc5c86b5f2123a80 100644 --- a/net/minecraft/world/entity/animal/Fox.java +++ b/net/minecraft/world/entity/animal/Fox.java -@@ -202,6 +202,13 @@ public class Fox extends Animal { +@@ -204,6 +204,13 @@ public class Fox extends Animal { } // Purpur end - Toggle for water sensitive mob damage @@ -185,10 +185,10 @@ index dbc01564e23e7785e85b16f100925d36496ef51c..e85f17f362548f13a414a41f711900ad protected void ageBoundaryReached() { if (this.isBaby()) { diff --git a/net/minecraft/world/entity/animal/IronGolem.java b/net/minecraft/world/entity/animal/IronGolem.java -index 4a7c6dedb23ac1057eda80de4a2cd54fe3e6f76f..1c96cd8e369507dfedd7d3495861e0e270ad0cd6 100644 +index 54b7edced2b95f874d9ef7ba21418a68e9bd6291..2b9595f060bb3d1172380e3b985d8320a2594dc9 100644 --- a/net/minecraft/world/entity/animal/IronGolem.java +++ b/net/minecraft/world/entity/animal/IronGolem.java -@@ -107,6 +107,13 @@ public class IronGolem extends AbstractGolem implements NeutralMob { +@@ -108,6 +108,13 @@ public class IronGolem extends AbstractGolem implements NeutralMob { } // Purpur end - Toggle for water sensitive mob damage @@ -221,10 +221,10 @@ index ddd763cc38e8c624db7ef207f244961bda0b5ae1..3b18ea446cc7e19295a9fa37b74c3a02 public float getWalkTargetValue(BlockPos pos, LevelReader level) { return level.getBlockState(pos.below()).is(Blocks.MYCELIUM) ? 10.0F : level.getPathfindingCostFromLightLevels(pos); diff --git a/net/minecraft/world/entity/animal/Ocelot.java b/net/minecraft/world/entity/animal/Ocelot.java -index 125d324832623bb52ac1afd197862876a0f5f928..72cbb5bf9023272f6e169a2956d2035706dd8a57 100644 +index 15d0d05dd80744880da9192d3fdfe3bc0c3e9401..effabafb4e686f5d8464821fd59e23a56b87b90a 100644 --- a/net/minecraft/world/entity/animal/Ocelot.java +++ b/net/minecraft/world/entity/animal/Ocelot.java -@@ -103,6 +103,13 @@ public class Ocelot extends Animal { +@@ -104,6 +104,13 @@ public class Ocelot extends Animal { } // Purpur end - Toggle for water sensitive mob damage @@ -239,7 +239,7 @@ index 125d324832623bb52ac1afd197862876a0f5f928..72cbb5bf9023272f6e169a2956d20357 return this.entityData.get(DATA_TRUSTING); } diff --git a/net/minecraft/world/entity/animal/Panda.java b/net/minecraft/world/entity/animal/Panda.java -index 36ec50791543c4eabf7158aa8d6ba272b14f6cd6..c97ec93732d10197ee978477dc07c097d45bbe15 100644 +index 4e9aa65002e4134600ee95b16bd14dcb6f1f46ee..9fae0d54fce37ef1b3511339ba05673e80ef6d01 100644 --- a/net/minecraft/world/entity/animal/Panda.java +++ b/net/minecraft/world/entity/animal/Panda.java @@ -156,6 +156,13 @@ public class Panda extends Animal { @@ -257,10 +257,10 @@ index 36ec50791543c4eabf7158aa8d6ba272b14f6cd6..c97ec93732d10197ee978477dc07c097 protected boolean canDispenserEquipIntoSlot(EquipmentSlot slot) { return slot == EquipmentSlot.MAINHAND && this.canPickUpLoot(); diff --git a/net/minecraft/world/entity/animal/Parrot.java b/net/minecraft/world/entity/animal/Parrot.java -index f5c98b277984249ec077c5742854a3cb444eb68c..17d3814887adbc62d7a2f6eccc6e05e61b30bb29 100644 +index d31e85b63f41121678c67e6c284923251ef744f6..09cc4b2e6b8479a54aa1c867fdc73eac0fdf7e35 100644 --- a/net/minecraft/world/entity/animal/Parrot.java +++ b/net/minecraft/world/entity/animal/Parrot.java -@@ -215,6 +215,13 @@ public class Parrot extends ShoulderRidingEntity implements FlyingAnimal { +@@ -216,6 +216,13 @@ public class Parrot extends ShoulderRidingEntity implements FlyingAnimal { } // Purpur end - Toggle for water sensitive mob damage @@ -311,7 +311,7 @@ index eda9e5965a6ff244288215188de8e05ebcb61f14..9ac8beb6075502e3b18064429cb71c5d @Override public AgeableMob getBreedOffspring(ServerLevel level, AgeableMob partner) { diff --git a/net/minecraft/world/entity/animal/Pufferfish.java b/net/minecraft/world/entity/animal/Pufferfish.java -index 49f1d08239e92aa4e8f18ee8054c13e54089ed82..6775cb8d78aaa7007077277b272825b7410877d4 100644 +index 0f3bf73faf5c8d4bae5af6d4a9c4fa1be8394a6b..4dbc56c4e4668a6634d6a7ff603403e001942a78 100644 --- a/net/minecraft/world/entity/animal/Pufferfish.java +++ b/net/minecraft/world/entity/animal/Pufferfish.java @@ -73,6 +73,13 @@ public class Pufferfish extends AbstractFish { @@ -329,10 +329,10 @@ index 49f1d08239e92aa4e8f18ee8054c13e54089ed82..6775cb8d78aaa7007077277b272825b7 protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); diff --git a/net/minecraft/world/entity/animal/Rabbit.java b/net/minecraft/world/entity/animal/Rabbit.java -index fb773ac6f450f6632fd7af3d0c44af57075fdcce..f91e63d9bd382bf2ef76766def08342a91eae29c 100644 +index 0320fbe2d266366f85080487ac9533b672451cbb..c5413f063c14ce2eccee28f1d8e0b57349968cbb 100644 --- a/net/minecraft/world/entity/animal/Rabbit.java +++ b/net/minecraft/world/entity/animal/Rabbit.java -@@ -167,6 +167,13 @@ public class Rabbit extends Animal { +@@ -169,6 +169,13 @@ public class Rabbit extends Animal { } // Purpur end - Toggle for water sensitive mob damage @@ -383,10 +383,10 @@ index 6cb6ff86e3fd7b9dd2929669dc1b0d339af9a95a..03071650204193f1130e8e17f280ae6a protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables diff --git a/net/minecraft/world/entity/animal/Squid.java b/net/minecraft/world/entity/animal/Squid.java -index 38a2d3f1344a8a826ceca645279779beb3a4dde7..7126ee1e2c950d37ec33204da1b6910bcb6e9e30 100644 +index fcdab19016a3f92776447a51df9ea2796461ef9c..1e71f73622e0c11b3e3ff2ee5afbf6522d03922a 100644 --- a/net/minecraft/world/entity/animal/Squid.java +++ b/net/minecraft/world/entity/animal/Squid.java -@@ -106,6 +106,13 @@ public class Squid extends AgeableWaterCreature { +@@ -107,6 +107,13 @@ public class Squid extends AgeableWaterCreature { } // Purpur end - Toggle for water sensitive mob damage @@ -419,10 +419,10 @@ index 22a75b6b1e6f130027e39051f04267fb436ae6de..64682d4cadcc15d6308f535591d130cf return "entity.minecraft.tropical_fish.predefined." + variantId; } diff --git a/net/minecraft/world/entity/animal/Turtle.java b/net/minecraft/world/entity/animal/Turtle.java -index e9b19fe300f9d5caebe8603d0347eae834408809..22401f6b05ab371568f76eb64af28bd762c21ce8 100644 +index 536a0cddb05e1224562528d19a69a9ef5c1e07f5..75e367535ce46411fffdfbab89293146fc95782b 100644 --- a/net/minecraft/world/entity/animal/Turtle.java +++ b/net/minecraft/world/entity/animal/Turtle.java -@@ -125,6 +125,13 @@ public class Turtle extends Animal { +@@ -126,6 +126,13 @@ public class Turtle extends Animal { } // Purpur end - Toggle for water sensitive mob damage @@ -455,10 +455,10 @@ index c32a5f348e41d6ff733331b85baf32da839083fe..3cc8ee115e889ced4457596b9c5fce43 public float getWalkTargetValue(BlockPos pos, LevelReader level) { return 0.0F; diff --git a/net/minecraft/world/entity/animal/coppergolem/CopperGolem.java b/net/minecraft/world/entity/animal/coppergolem/CopperGolem.java -index 5095ddcf1a2a4d4f5cff6dbaeec39a4e6e0d1d92..088b2cf28f56d60167b03bcce5fbd2c47fa2de9a 100644 +index e533edb6163cada2bc9bc9ed61bf333b2a2703b8..739deece6ae077b8fa1694eb6cc6ed9996dff09b 100644 --- a/net/minecraft/world/entity/animal/coppergolem/CopperGolem.java +++ b/net/minecraft/world/entity/animal/coppergolem/CopperGolem.java -@@ -148,6 +148,13 @@ public class CopperGolem extends AbstractGolem implements ContainerUser, Shearab +@@ -150,6 +150,13 @@ public class CopperGolem extends AbstractGolem implements ContainerUser, Shearab } // Purpur end - Toggle for water sensitive mob damage @@ -473,10 +473,10 @@ index 5095ddcf1a2a4d4f5cff6dbaeec39a4e6e0d1d92..088b2cf28f56d60167b03bcce5fbd2c4 return Mob.createMobAttributes().add(Attributes.MOVEMENT_SPEED, 0.2F).add(Attributes.STEP_HEIGHT, 1.0).add(Attributes.MAX_HEALTH, 12.0); } diff --git a/net/minecraft/world/entity/animal/goat/Goat.java b/net/minecraft/world/entity/animal/goat/Goat.java -index b048ca99370c65446855e3867eeb29ddb6ad51f6..6b6461a61a1738d64220f571b8cf7b46605327c0 100644 +index 60c97b44d3977eda2fa2c302aad3c7e337de51d9..a226956bc47c5f6145c0dd4d3f957be43e60272b 100644 --- a/net/minecraft/world/entity/animal/goat/Goat.java +++ b/net/minecraft/world/entity/animal/goat/Goat.java -@@ -145,6 +145,13 @@ public class Goat extends Animal { +@@ -146,6 +146,13 @@ public class Goat extends Animal { } // Purpur end - Toggle for water sensitive mob damage @@ -617,10 +617,10 @@ index fd8a512910c886af1ae4e66edbf7f8d6fe0bc4f3..384bb954ea633c8e8ac239539925948b return createBaseHorseAttributes().add(Attributes.MAX_HEALTH, 15.0).add(Attributes.MOVEMENT_SPEED, 0.2F); } diff --git a/net/minecraft/world/entity/animal/sheep/Sheep.java b/net/minecraft/world/entity/animal/sheep/Sheep.java -index e204b349615be98ea9a143ca2bb73a3a0a32baa4..21d66dd46650afae2091e236dfec760c096c34f8 100644 +index 3bdadfed6a06b965193cc615c490f89de65d515e..2f90f1a5e4d2aad7fc1fe84bac6cf18ed8f35f4d 100644 --- a/net/minecraft/world/entity/animal/sheep/Sheep.java +++ b/net/minecraft/world/entity/animal/sheep/Sheep.java -@@ -101,6 +101,13 @@ public class Sheep extends Animal implements Shearable { +@@ -102,6 +102,13 @@ public class Sheep extends Animal implements Shearable { } // Purpur end - Toggle for water sensitive mob damage @@ -635,10 +635,10 @@ index e204b349615be98ea9a143ca2bb73a3a0a32baa4..21d66dd46650afae2091e236dfec760c protected void registerGoals() { this.eatBlockGoal = new EatBlockGoal(this); diff --git a/net/minecraft/world/entity/animal/wolf/Wolf.java b/net/minecraft/world/entity/animal/wolf/Wolf.java -index 4b1c93cf2e17ae85d3b34a49c15e2926d8d1c81a..353507a7483afd6428fb10c461ff5c4162a97704 100644 +index 9832cafd14d42d3bf92bb5791d6ded4008215998..8160e5f7c5fbc28c61653d8e57807636f6ab0eab 100644 --- a/net/minecraft/world/entity/animal/wolf/Wolf.java +++ b/net/minecraft/world/entity/animal/wolf/Wolf.java -@@ -230,6 +230,13 @@ public class Wolf extends TamableAnimal implements NeutralMob { +@@ -231,6 +231,13 @@ public class Wolf extends TamableAnimal implements NeutralMob { } // Purpur end - Toggle for water sensitive mob damage @@ -653,10 +653,10 @@ index 4b1c93cf2e17ae85d3b34a49c15e2926d8d1c81a..353507a7483afd6428fb10c461ff5c41 protected void registerGoals() { this.goalSelector.addGoal(1, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/boss/wither/WitherBoss.java b/net/minecraft/world/entity/boss/wither/WitherBoss.java -index 37919a338630efeb87accb7e0a7d86fddc03e858..b2c0dc521f46fe3aaf82c70626917af4141a6615 100644 +index e4f3d21422ccf45aee34885cc7633f37ec0c9903..3e5c1a2fc6dba77982d53f75355b3694f7bc289f 100644 --- a/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/net/minecraft/world/entity/boss/wither/WitherBoss.java -@@ -228,6 +228,13 @@ public class WitherBoss extends Monster implements RangedAttackMob { +@@ -229,6 +229,13 @@ public class WitherBoss extends Monster implements RangedAttackMob { } // Purpur end - Toggle for water sensitive mob damage @@ -671,10 +671,10 @@ index 37919a338630efeb87accb7e0a7d86fddc03e858..b2c0dc521f46fe3aaf82c70626917af4 protected PathNavigation createNavigation(Level level) { FlyingPathNavigation flyingPathNavigation = new FlyingPathNavigation(this, level); diff --git a/net/minecraft/world/entity/monster/Blaze.java b/net/minecraft/world/entity/monster/Blaze.java -index e940633d5140bb19623cef9cc9d6acdae77ed392..354a4a10cce3fc3b7611ad99c0c7ed7d34f87b15 100644 +index 8941252b8c91ce26097651ab32c139a53c43feb3..3f8d1c00bfb274edd2d9f5f278d8c5f9ff908584 100644 --- a/net/minecraft/world/entity/monster/Blaze.java +++ b/net/minecraft/world/entity/monster/Blaze.java -@@ -83,6 +83,13 @@ public class Blaze extends Monster { +@@ -84,6 +84,13 @@ public class Blaze extends Monster { } // Purpur end - Configurable entity base attributes @@ -761,7 +761,7 @@ index 1ea323a17440abbe36c9528e80e169816267005b..abb7496c293175828fde54ae2b4991aa return Guardian.createAttributes().add(Attributes.MOVEMENT_SPEED, 0.3F).add(Attributes.ATTACK_DAMAGE, 8.0).add(Attributes.MAX_HEALTH, 80.0); } diff --git a/net/minecraft/world/entity/monster/EnderMan.java b/net/minecraft/world/entity/monster/EnderMan.java -index 09cce24dcc6a57f02c020c7e035e7940ddf9a962..e4d6610c43a019e9e1e296703e80eecc4ffdd36c 100644 +index f6cc9107702e5cfa985694c7c88ae21622cd39c6..29168e1536550b2e49d86dd17604e2da807495fc 100644 --- a/net/minecraft/world/entity/monster/EnderMan.java +++ b/net/minecraft/world/entity/monster/EnderMan.java @@ -115,6 +115,13 @@ public class EnderMan extends Monster implements NeutralMob { @@ -815,10 +815,10 @@ index 9015643b47e2d20a5c75c5f4bf2ec66399d4a2e5..274a40f0edc4d928570cf75ee1c51d1d protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/Ghast.java b/net/minecraft/world/entity/monster/Ghast.java -index f87e4b960fad01ceb62dc4c80ab80aaad5c7a986..2b3b893c6fa05727df0f24cac67f97cb890054fe 100644 +index 544f3564411138c59eaad2b0bf50ec01ceb319bf..eca52dae254689eced7b3ee12b83d193b8d3b49f 100644 --- a/net/minecraft/world/entity/monster/Ghast.java +++ b/net/minecraft/world/entity/monster/Ghast.java -@@ -89,6 +89,13 @@ public class Ghast extends Mob implements Enemy { +@@ -90,6 +90,13 @@ public class Ghast extends Mob implements Enemy { } // Purpur end - Toggle for water sensitive mob damage @@ -851,10 +851,10 @@ index 2204c729ce42e89a0b42b365e0060098afcf68f9..b7edb5db6621e982a6a529c5319ba68a return Monster.createMonsterAttributes() .add(Attributes.MAX_HEALTH, 100.0) diff --git a/net/minecraft/world/entity/monster/Guardian.java b/net/minecraft/world/entity/monster/Guardian.java -index 68eb628b5019c60df9f8bdfc7d47a6e68913fbd4..24f7af91a59d4e8975cf8aece3a934aa927972e9 100644 +index 901338319b78e538208f72ead289f7277fd00eb9..7f742ac64be0d4bcfb780da13a0e2f571438442b 100644 --- a/net/minecraft/world/entity/monster/Guardian.java +++ b/net/minecraft/world/entity/monster/Guardian.java -@@ -105,6 +105,13 @@ public class Guardian extends Monster { +@@ -106,6 +106,13 @@ public class Guardian extends Monster { } // Purpur end - Toggle for water sensitive mob damage @@ -869,10 +869,10 @@ index 68eb628b5019c60df9f8bdfc7d47a6e68913fbd4..24f7af91a59d4e8975cf8aece3a934aa protected void registerGoals() { MoveTowardsRestrictionGoal moveTowardsRestrictionGoal = new MoveTowardsRestrictionGoal(this, 1.0); diff --git a/net/minecraft/world/entity/monster/Husk.java b/net/minecraft/world/entity/monster/Husk.java -index 938c8e0708df47299a627b1c7f56793035dd219c..0bc9c1b235cd5ac771c7b0f200abe4fde38b7858 100644 +index ac02f6abf186a1f31e48fd4ed8181e22919c2f04..ef261e61358bf466bdfdd6cfe982c5afe53d7c4d 100644 --- a/net/minecraft/world/entity/monster/Husk.java +++ b/net/minecraft/world/entity/monster/Husk.java -@@ -74,6 +74,13 @@ public class Husk extends Zombie { +@@ -75,6 +75,13 @@ public class Husk extends Zombie { } // Purpur end - Toggle for water sensitive mob damage @@ -905,7 +905,7 @@ index ee5e0b20f65a5f7d7dc2cf8fea2eff56f8f56a41..e34c37a9a2eacc97f44fcb6d911cf215 protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/MagmaCube.java b/net/minecraft/world/entity/monster/MagmaCube.java -index a5ca7a2f301cc8ae5878e583c2cf8aeef2085982..da80b17668e4268f02999f553e0e829f8fbb0d10 100644 +index bce9a085dfbe06bd4a869ae8d7d407ebbf7ad6b4..29da12b942736dfe8fa06a9eb5f132ae7c534d72 100644 --- a/net/minecraft/world/entity/monster/MagmaCube.java +++ b/net/minecraft/world/entity/monster/MagmaCube.java @@ -75,6 +75,13 @@ public class MagmaCube extends Slime { @@ -923,10 +923,10 @@ index a5ca7a2f301cc8ae5878e583c2cf8aeef2085982..da80b17668e4268f02999f553e0e829f return Monster.createMonsterAttributes().add(Attributes.MOVEMENT_SPEED, 0.2F); } diff --git a/net/minecraft/world/entity/monster/Phantom.java b/net/minecraft/world/entity/monster/Phantom.java -index c7d52c623d8616209ab742b69838beed156d80de..628fc869f5b4c33dfb2daf1e35db7c5df8aa28fd 100644 +index 332c08a2d0d0fe2e8c7e9461bb73a73ddee91b94..359f376723f1fe8f50643d8eea6f22591580811d 100644 --- a/net/minecraft/world/entity/monster/Phantom.java +++ b/net/minecraft/world/entity/monster/Phantom.java -@@ -147,6 +147,13 @@ public class Phantom extends Mob implements Enemy { +@@ -148,6 +148,13 @@ public class Phantom extends Mob implements Enemy { public void setShouldBurnInDay(boolean shouldBurnInDay) { this.shouldBurnInDay = shouldBurnInDay; } // Purpur end - API for any mob to burn daylight @@ -959,10 +959,10 @@ index 1aa2f744b0d875fb874cf23a0601fee48ead66c2..8bc07bbf713ebd3afc8c0e62c92b5e11 protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/Ravager.java b/net/minecraft/world/entity/monster/Ravager.java -index 5d7f6825d7bff413cac0fbf3a1d613bccd5102d6..7e137ae1bf2d2c0eae37a5ea857d4ea51d4044b7 100644 +index 2dcf90e3be35290ed9cbe7cf19aa67d1f9acac80..a7deae32d5b1e9622152ec74de085110a8decbce 100644 --- a/net/minecraft/world/entity/monster/Ravager.java +++ b/net/minecraft/world/entity/monster/Ravager.java -@@ -108,6 +108,13 @@ public class Ravager extends Raider { +@@ -109,6 +109,13 @@ public class Ravager extends Raider { } // Purpur end - Toggle for water sensitive mob damage @@ -995,7 +995,7 @@ index 21b28d1ba59656b123aef95a7e18075dae9bc236..99589855c69e76ecdfa9bb21b62e59f1 protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables diff --git a/net/minecraft/world/entity/monster/Silverfish.java b/net/minecraft/world/entity/monster/Silverfish.java -index 190312706c2e69bb0cf6e402e8e3ad7dd64b7b98..929ebc003b0dd7bea252e905fb9fa671dc54a252 100644 +index 58a759fdfae0ef20decc82842bdf4e9947f51807..60c96e040d6941e66dc51c1b2cd7b85d70313efb 100644 --- a/net/minecraft/world/entity/monster/Silverfish.java +++ b/net/minecraft/world/entity/monster/Silverfish.java @@ -73,6 +73,13 @@ public class Silverfish extends Monster { @@ -1013,10 +1013,10 @@ index 190312706c2e69bb0cf6e402e8e3ad7dd64b7b98..929ebc003b0dd7bea252e905fb9fa671 protected void registerGoals() { this.friendsGoal = new Silverfish.SilverfishWakeUpFriendsGoal(this); diff --git a/net/minecraft/world/entity/monster/Skeleton.java b/net/minecraft/world/entity/monster/Skeleton.java -index 1ae787edeb2011afb373fb44702f8a5150ee95b1..717e34cbca2e70d80c2c9e2921d9a53cac1b3f8f 100644 +index c7bfa5214fd46c6b5e264314f86ca5c2904bf123..2a380964ae999edfa5260c0730a79d9e8e4c1bfc 100644 --- a/net/minecraft/world/entity/monster/Skeleton.java +++ b/net/minecraft/world/entity/monster/Skeleton.java -@@ -56,6 +56,13 @@ public class Skeleton extends AbstractSkeleton { +@@ -57,6 +57,13 @@ public class Skeleton extends AbstractSkeleton { } // Purpur end - Toggle for water sensitive mob damage @@ -1031,7 +1031,7 @@ index 1ae787edeb2011afb373fb44702f8a5150ee95b1..717e34cbca2e70d80c2c9e2921d9a53c protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); diff --git a/net/minecraft/world/entity/monster/Slime.java b/net/minecraft/world/entity/monster/Slime.java -index f6e0ec18150f91d42f9a5b2f45e5a6e80c4ea031..97d15b759d65e32df4d780ec4850b986fcaf6ead 100644 +index 7c5d3c30be47f0cac043e73153a1face837406dd..a03b1d15aa8b41e7c22464e8b66811c41acdcef2 100644 --- a/net/minecraft/world/entity/monster/Slime.java +++ b/net/minecraft/world/entity/monster/Slime.java @@ -141,6 +141,13 @@ public class Slime extends Mob implements Enemy { @@ -1103,7 +1103,7 @@ index 1004aaf885268d08e68e5d2465fae2b5566a4eff..da7644dd2b9e86ec8947250ff998fb55 EntityType entityType, LevelAccessor level, EntitySpawnReason spawnReason, BlockPos pos, RandomSource random ) { diff --git a/net/minecraft/world/entity/monster/Vex.java b/net/minecraft/world/entity/monster/Vex.java -index 75681ed441e5cbb4c01a433f9757795089af234b..39d164dbc8aac355987c1725411395919ce1685f 100644 +index 13285c9f233c3240729de4baf5f014e25b245547..4b5b30a0c710e83ce2c193ceb16fc210fe4f87d8 100644 --- a/net/minecraft/world/entity/monster/Vex.java +++ b/net/minecraft/world/entity/monster/Vex.java @@ -119,6 +119,13 @@ public class Vex extends Monster implements TraceableEntity { @@ -1139,10 +1139,10 @@ index 33452593731c53f404059271b3fbb0407d75517c..e209b0ad1fa95d01387671b7dad4a347 protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/Witch.java b/net/minecraft/world/entity/monster/Witch.java -index cafdebd0fa9a7458e5adaf109b3ebd4beed7a1ef..76e051fee759ce86b3d410c250ebee31a678f459 100644 +index a785deb09373e20c13f8be49626d9619491b02c8..ca1cd20e919d1223cec2756580e588e90d336cba 100644 --- a/net/minecraft/world/entity/monster/Witch.java +++ b/net/minecraft/world/entity/monster/Witch.java -@@ -88,6 +88,13 @@ public class Witch extends Raider implements RangedAttackMob { +@@ -89,6 +89,13 @@ public class Witch extends Raider implements RangedAttackMob { } // Purpur end - Toggle for water sensitive mob damage @@ -1175,10 +1175,10 @@ index 778779c79c56e2ca438ecbb82fbb16d70d312524..51e2078912991266f2dac79775b1d570 protected void registerGoals() { this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractPiglin.class, true)); diff --git a/net/minecraft/world/entity/monster/Zoglin.java b/net/minecraft/world/entity/monster/Zoglin.java -index 67998321b2c47d4aaf027c5fd17cb6d01e105b6f..2632dd89d2f5661137e2c09b8cd426fc40599f69 100644 +index d9ca3944fce3464be69ca1b3b5191e2d8de01e3d..e2bf2bc45e4f8236ab47cf28c270dad748f80b50 100644 --- a/net/minecraft/world/entity/monster/Zoglin.java +++ b/net/minecraft/world/entity/monster/Zoglin.java -@@ -118,6 +118,13 @@ public class Zoglin extends Monster implements HoglinBase { +@@ -119,6 +119,13 @@ public class Zoglin extends Monster implements HoglinBase { } // Purpur end - Toggle for water sensitive mob damage @@ -1193,10 +1193,10 @@ index 67998321b2c47d4aaf027c5fd17cb6d01e105b6f..2632dd89d2f5661137e2c09b8cd426fc protected Brain.Provider brainProvider() { return Brain.provider(MEMORY_TYPES, SENSOR_TYPES); diff --git a/net/minecraft/world/entity/monster/Zombie.java b/net/minecraft/world/entity/monster/Zombie.java -index 00e9383ad8251da600c84885c439a207c256c22a..7e13f2958f3935077fe25570567d2576f435028c 100644 +index 1280605d393d0afda475c5d54b073824d141a460..2dd08e5ef413c37a682046071b83f595c8499cf2 100644 --- a/net/minecraft/world/entity/monster/Zombie.java +++ b/net/minecraft/world/entity/monster/Zombie.java -@@ -149,6 +149,13 @@ public class Zombie extends Monster { +@@ -150,6 +150,13 @@ public class Zombie extends Monster { } // Purpur end - Toggle for water sensitive mob damage @@ -1211,10 +1211,10 @@ index 00e9383ad8251da600c84885c439a207c256c22a..7e13f2958f3935077fe25570567d2576 protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables diff --git a/net/minecraft/world/entity/monster/ZombieVillager.java b/net/minecraft/world/entity/monster/ZombieVillager.java -index 1693fbcd47cc06409ac1849475feda7b5c4e437a..ee6ce9ccace1f602772542670d02bb5a4c8a4766 100644 +index 5ae0e9d5f3c3b7a6f64775396acf061ff0d3561f..9c769b129764b4354f5dcbed821225ed045c86c8 100644 --- a/net/minecraft/world/entity/monster/ZombieVillager.java +++ b/net/minecraft/world/entity/monster/ZombieVillager.java -@@ -126,6 +126,13 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { +@@ -128,6 +128,13 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { } // Purpur end - Toggle for water sensitive mob damage @@ -1229,7 +1229,7 @@ index 1693fbcd47cc06409ac1849475feda7b5c4e437a..ee6ce9ccace1f602772542670d02bb5a protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); diff --git a/net/minecraft/world/entity/monster/ZombifiedPiglin.java b/net/minecraft/world/entity/monster/ZombifiedPiglin.java -index d43e4d29a75dd66551eb432ceec1cc3fda738364..9ee3fcc538be14f2eea8ed97eeec93b05a9cb4f2 100644 +index 46520af2dcf89a54374b933f5acdb8d2c66abbff..05bbd9588ae85256c46d8b0c2434a3bc8cb5f620 100644 --- a/net/minecraft/world/entity/monster/ZombifiedPiglin.java +++ b/net/minecraft/world/entity/monster/ZombifiedPiglin.java @@ -113,6 +113,13 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { @@ -1247,10 +1247,10 @@ index d43e4d29a75dd66551eb432ceec1cc3fda738364..9ee3fcc538be14f2eea8ed97eeec93b0 public void setPersistentAngerTarget(@Nullable UUID target) { this.persistentAngerTarget = target; diff --git a/net/minecraft/world/entity/monster/hoglin/Hoglin.java b/net/minecraft/world/entity/monster/hoglin/Hoglin.java -index 660d1f56cc74bc2a8764094d16772aace1234c15..c5f7213b91d7a533ff56e4789514b47adb791777 100644 +index 053c47fcaf4e5d3bc8f9a3d913508a7816b15747..72dc725b8cd6a2fca26aae376f91ab3e246a810b 100644 --- a/net/minecraft/world/entity/monster/hoglin/Hoglin.java +++ b/net/minecraft/world/entity/monster/hoglin/Hoglin.java -@@ -134,6 +134,13 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { +@@ -135,6 +135,13 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { } // Purpur end - Toggle for water sensitive mob damage @@ -1265,7 +1265,7 @@ index 660d1f56cc74bc2a8764094d16772aace1234c15..c5f7213b91d7a533ff56e4789514b47a public void setTimeInOverworld(int timeInOverworld) { this.timeInOverworld = timeInOverworld; diff --git a/net/minecraft/world/entity/monster/piglin/Piglin.java b/net/minecraft/world/entity/monster/piglin/Piglin.java -index 5bf58287dad04c96459982d55b5ac00646e37d53..dee71746e90f8a81e29ee35c3438219172509d6b 100644 +index 293d6359469095c5faf87ec574ac8a475ce33ba9..9a1f1b8ff394e4849301508dd82669246eeba2de 100644 --- a/net/minecraft/world/entity/monster/piglin/Piglin.java +++ b/net/minecraft/world/entity/monster/piglin/Piglin.java @@ -168,6 +168,13 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento @@ -1301,10 +1301,10 @@ index e988a65cbd1f71f488fa8221ef11b6b1a05dc554..ebe1b4e0b841906684561151919a5b3f return Monster.createMonsterAttributes() .add(Attributes.MAX_HEALTH, 50.0) diff --git a/net/minecraft/world/entity/npc/Villager.java b/net/minecraft/world/entity/npc/Villager.java -index 810494826a7b600941f3087f114064e157ba88e6..0ab9ac120703285baa563391653323c17d05b20b 100644 +index 2a145e4eb0474950cbfb4a229891b4b2320d98d2..bfff91e5e252141f887d8965ecf1dd9ff1cebfe3 100644 --- a/net/minecraft/world/entity/npc/Villager.java +++ b/net/minecraft/world/entity/npc/Villager.java -@@ -288,6 +288,13 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -289,6 +289,13 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } // Purpur end - Toggle for water sensitive mob damage diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/core/dispenser/DispenseItemBehavior.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/core/dispenser/DispenseItemBehavior.java.patch index fecce322e..658be117e 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/core/dispenser/DispenseItemBehavior.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/core/dispenser/DispenseItemBehavior.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/core/dispenser/DispenseItemBehavior.java +++ b/net/minecraft/core/dispenser/DispenseItemBehavior.java -@@ -744,5 +_,22 @@ +@@ -746,5 +_,22 @@ DispenserBlock.registerBehavior(Items.TNT_MINECART, new MinecartDispenseItemBehavior(EntityType.TNT_MINECART)); DispenserBlock.registerBehavior(Items.HOPPER_MINECART, new MinecartDispenseItemBehavior(EntityType.HOPPER_MINECART)); DispenserBlock.registerBehavior(Items.COMMAND_BLOCK_MINECART, new MinecartDispenseItemBehavior(EntityType.COMMAND_BLOCK_MINECART)); diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/server/level/ServerPlayer.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/server/level/ServerPlayer.java.patch index 3e11403f7..1d875f64e 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/server/level/ServerPlayer.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/server/level/ServerPlayer.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java -@@ -442,6 +_,9 @@ +@@ -443,6 +_,9 @@ public boolean isRealPlayer; // Paper public @Nullable com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent playerNaturallySpawnedEvent; // Paper - PlayerNaturallySpawnCreaturesEvent public @Nullable org.bukkit.event.player.PlayerQuitEvent.QuitReason quitReason = null; // Paper - Add API for quit reason; there are a lot of changes to do if we change all methods leading to the event @@ -10,7 +10,7 @@ // Paper start - rewrite chunk system private ca.spottedleaf.moonrise.patches.chunk_system.player.RegionizedPlayerChunkLoader.PlayerChunkLoaderData chunkLoader; -@@ -515,6 +_,9 @@ +@@ -516,6 +_,9 @@ this.respawnConfig = input.read("respawn", ServerPlayer.RespawnConfig.CODEC).orElse(null); this.spawnExtraParticlesOnFall = input.getBooleanOr("spawn_extra_particles_on_fall", false); this.raidOmenPosition = input.read("raid_omen_position", BlockPos.CODEC).orElse(null); @@ -20,7 +20,7 @@ // Paper start - Expand PlayerGameModeChangeEvent this.loadGameTypes(input); } -@@ -556,6 +_,9 @@ +@@ -557,6 +_,9 @@ output.store("ShoulderEntityRight", CompoundTag.CODEC, this.getShoulderEntityRight()); } this.getBukkitEntity().setExtraData(output); // CraftBukkit @@ -30,7 +30,7 @@ } private void saveParentVehicle(ValueOutput output) { -@@ -1185,6 +_,7 @@ +@@ -1186,6 +_,7 @@ // Paper - moved up to sendClientboundPlayerCombatKillPacket() sendClientboundPlayerCombatKillPacket(event.getShowDeathMessages(), deathScreenMessage); // Paper - Expand PlayerDeathEvent Team team = this.getTeam(); @@ -38,7 +38,7 @@ if (team == null || team.getDeathMessageVisibility() == Team.Visibility.ALWAYS) { this.server.getPlayerList().broadcastSystemMessage(deathMessage, false); } else if (team.getDeathMessageVisibility() == Team.Visibility.HIDE_FOR_OTHER_TEAMS) { -@@ -1292,6 +_,13 @@ +@@ -1293,6 +_,13 @@ if (this.isInvulnerableTo(level, damageSource)) { return false; } else { @@ -52,7 +52,7 @@ Entity entity = damageSource.getEntity(); if (!( // Paper - split the if statement. If below statement is false, hurtServer would not have been evaluated. Return false. !(entity instanceof Player player && !this.canHarmPlayer(player)) -@@ -1545,6 +_,7 @@ +@@ -1546,6 +_,7 @@ profilerFiller.pop(); profilerFiller.push("placing"); @@ -60,7 +60,7 @@ this.setServerLevel(level); this.connection.internalTeleport(PositionMoveRotation.of(teleportTransition), teleportTransition.relatives()); // CraftBukkit - use internal teleport without event this.connection.resetPosition(); -@@ -1646,7 +_,7 @@ +@@ -1647,7 +_,7 @@ new AABB(vec3.x() - 8.0, vec3.y() - 5.0, vec3.z() - 8.0, vec3.x() + 8.0, vec3.y() + 5.0, vec3.z() + 8.0), monster -> monster.isPreventingPlayerRest(this.level(), this) ); @@ -69,7 +69,7 @@ return Either.left(Player.BedSleepingProblem.NOT_SAFE); } } -@@ -1683,7 +_,19 @@ +@@ -1684,7 +_,19 @@ CriteriaTriggers.SLEPT_IN_BED.trigger(this); }); if (!this.level().canSleepThroughNights()) { @@ -90,7 +90,7 @@ } this.level().updateSleepingPlayerList(); -@@ -1775,6 +_,7 @@ +@@ -1776,6 +_,7 @@ @Override public void openTextEdit(SignBlockEntity signEntity, boolean isFrontText) { @@ -98,7 +98,7 @@ this.connection.send(new ClientboundBlockUpdatePacket(this.level(), signEntity.getBlockPos())); this.connection.send(new ClientboundOpenSignEditorPacket(signEntity.getBlockPos(), isFrontText)); } -@@ -2084,6 +_,26 @@ +@@ -2085,6 +_,26 @@ this.lastSentExp = -1; // CraftBukkit - Added to reset } @@ -125,7 +125,7 @@ @Override public void displayClientMessage(Component message, boolean overlay) { this.sendSystemMessage(message, overlay); -@@ -2318,6 +_,20 @@ +@@ -2319,6 +_,20 @@ ); } @@ -146,7 +146,7 @@ public void sendSystemMessage(Component message) { this.sendSystemMessage(message, false); } -@@ -2456,7 +_,67 @@ +@@ -2457,7 +_,67 @@ public void resetLastActionTime() { this.lastActionTime = Util.getMillis(); @@ -215,7 +215,7 @@ public ServerStatsCounter getStats() { return this.stats; -@@ -3097,4 +_,65 @@ +@@ -3098,4 +_,65 @@ return (org.bukkit.craftbukkit.entity.CraftPlayer) super.getBukkitEntity(); } // CraftBukkit end diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/server/network/ServerGamePacketListenerImpl.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/server/network/ServerGamePacketListenerImpl.java.patch index 17a8fc421..537c07949 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/server/network/ServerGamePacketListenerImpl.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/server/network/ServerGamePacketListenerImpl.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -340,6 +_,20 @@ +@@ -341,6 +_,20 @@ } // Paper end - configuration phase API @@ -21,7 +21,7 @@ @Override public void tick() { if (this.ackBlockChangesUpTo > -1) { -@@ -357,6 +_,12 @@ +@@ -358,6 +_,12 @@ && this.server.playerIdleTimeout() > 0 && Util.getMillis() - this.player.getLastActionTime() > TimeUnit.MINUTES.toMillis(this.server.playerIdleTimeout()) && !this.player.wonGame) { @@ -34,7 +34,7 @@ this.disconnect(Component.translatable("multiplayer.disconnect.idling"), org.bukkit.event.player.PlayerKickEvent.Cause.IDLING); // Paper - kick event cause } } -@@ -671,6 +_,8 @@ +@@ -672,6 +_,8 @@ this.lastYaw = to.getYaw(); this.lastPitch = to.getPitch(); @@ -43,7 +43,7 @@ Location oldTo = to.clone(); PlayerMoveEvent event = new PlayerMoveEvent(player, from, to); this.cserver.getPluginManager().callEvent(event); -@@ -750,6 +_,7 @@ +@@ -751,6 +_,7 @@ PacketUtils.ensureRunningOnSameThread(packet, this, this.player.level()); if (packet.getId() == this.awaitingTeleport) { if (this.awaitingPositionFromClient == null) { @@ -51,7 +51,7 @@ this.disconnect(Component.translatable("multiplayer.disconnect.invalid_player_movement"), org.bukkit.event.player.PlayerKickEvent.Cause.INVALID_PLAYER_MOVEMENT); // Paper - kick event cause return; } -@@ -1283,6 +_,10 @@ +@@ -1284,6 +_,10 @@ final int maxBookPageSize = pageMax.intValue(); final double multiplier = Math.clamp(io.papermc.paper.configuration.GlobalConfiguration.get().itemValidation.bookSize.totalMultiplier, 0.3D, 1D); long byteAllowed = maxBookPageSize; @@ -62,7 +62,7 @@ for (final String page : pageList) { final int byteLength = page.getBytes(java.nio.charset.StandardCharsets.UTF_8).length; byteTotal += byteLength; -@@ -1307,7 +_,8 @@ +@@ -1308,7 +_,8 @@ } if (byteTotal > byteAllowed) { @@ -72,7 +72,7 @@ this.disconnectAsync(Component.literal("Book too large!"), org.bukkit.event.player.PlayerKickEvent.Cause.ILLEGAL_ACTION); // Paper - kick event cause // Paper - add proper async disconnect return; } -@@ -1326,31 +_,45 @@ +@@ -1327,31 +_,45 @@ Optional optional = packet.title(); optional.ifPresent(list::add); list.addAll(packet.pages()); @@ -122,7 +122,7 @@ itemStack.set( DataComponents.WRITTEN_BOOK_CONTENT, new WrittenBookContent(this.filterableFromOutgoing(title), this.player.getPlainTextName(), 0, list, true) ); -@@ -1363,6 +_,16 @@ +@@ -1364,6 +_,16 @@ return this.player.isTextFilteringEnabled() ? Filterable.passThrough(filteredText.filteredOrEmpty()) : Filterable.from(filteredText); } @@ -139,7 +139,7 @@ @Override public void handleEntityTagQuery(ServerboundEntityTagQueryPacket packet) { PacketUtils.ensureRunningOnSameThread(packet, this, this.player.level()); -@@ -1402,7 +_,15 @@ +@@ -1403,7 +_,15 @@ @Override public void handleMovePlayer(ServerboundMovePlayerPacket packet) { PacketUtils.ensureRunningOnSameThread(packet, this, this.player.level()); @@ -156,7 +156,7 @@ this.disconnect(Component.translatable("multiplayer.disconnect.invalid_player_movement"), org.bukkit.event.player.PlayerKickEvent.Cause.INVALID_PLAYER_MOVEMENT); // Paper - kick event cause } else { ServerLevel serverLevel = this.player.level(); -@@ -1584,7 +_,7 @@ +@@ -1585,7 +_,7 @@ movedWrongly = true; if (event.getLogWarning()) // Paper end @@ -165,7 +165,7 @@ } // Paper } -@@ -1649,6 +_,8 @@ +@@ -1650,6 +_,8 @@ this.lastYaw = to.getYaw(); this.lastPitch = to.getPitch(); @@ -174,7 +174,7 @@ Location oldTo = to.clone(); PlayerMoveEvent event = new PlayerMoveEvent(player, from, to); this.cserver.getPluginManager().callEvent(event); -@@ -1704,6 +_,13 @@ +@@ -1705,6 +_,13 @@ this.player.tryResetCurrentImpulseContext(); } @@ -188,7 +188,7 @@ this.player.checkMovementStatistics(this.player.getX() - x, this.player.getY() - y, this.player.getZ() - z); this.lastGoodX = this.player.getX(); this.lastGoodY = this.player.getY(); -@@ -1721,6 +_,17 @@ +@@ -1722,6 +_,17 @@ } } @@ -206,7 +206,7 @@ private boolean shouldCheckPlayerMovement(boolean isElytraMovement) { if (this.isSingleplayerOwner()) { return false; -@@ -2120,6 +_,7 @@ +@@ -2121,6 +_,7 @@ boolean cancelled; if (hitResult == null || hitResult.getType() != HitResult.Type.BLOCK) { @@ -214,7 +214,7 @@ org.bukkit.event.player.PlayerInteractEvent event = CraftEventFactory.callPlayerInteractEvent(this.player, Action.RIGHT_CLICK_AIR, itemInHand, hand); cancelled = event.useItemInHand() == Event.Result.DENY; } else { -@@ -2767,6 +_,7 @@ +@@ -2768,6 +_,7 @@ AABB boundingBox = target.getBoundingBox(); if (this.player.canInteractWithEntity(boundingBox, io.papermc.paper.configuration.GlobalConfiguration.get().misc.clientInteractionLeniencyDistance.or(3.0))) { // Paper - configurable lenience value for interact range @@ -222,7 +222,7 @@ packet.dispatch( new ServerboundInteractPacket.Handler() { private void performInteraction(InteractionHand hand, ServerGamePacketListenerImpl.EntityInteraction entityInteraction, PlayerInteractEntityEvent event) { // CraftBukkit -@@ -3508,7 +_,7 @@ +@@ -3509,7 +_,7 @@ @Override public void handleChangeGameMode(ServerboundChangeGameModePacket packet) { PacketUtils.ensureRunningOnSameThread(packet, this, this.player.level()); diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/server/players/PlayerList.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/server/players/PlayerList.java.patch index 4bb985c0d..c4b5f2656 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/server/players/PlayerList.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/server/players/PlayerList.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java -@@ -304,6 +_,7 @@ +@@ -305,6 +_,7 @@ scoreboard.addPlayerToTeam(player.getScoreboardName(), collideRuleTeam); } // Paper end - Configurable player collision @@ -8,7 +8,7 @@ // CraftBukkit start - moved down LOGGER.info( "{}[{}] logged in with entity id {} at ([{}]{}, {}, {})", // CraftBukkit - add world name -@@ -424,6 +_,7 @@ +@@ -425,6 +_,7 @@ } public @Nullable net.kyori.adventure.text.Component remove(ServerPlayer player, net.kyori.adventure.text.Component leaveMessage) { // Paper end - Fix kick event leave message not being sent @@ -16,7 +16,7 @@ ServerLevel serverLevel = player.level(); player.awardStat(Stats.LEAVE_GAME); // CraftBukkit start - Quitting must be before we do final save of data, in case plugins need to modify it -@@ -763,6 +_,20 @@ +@@ -764,6 +_,20 @@ } } @@ -37,15 +37,23 @@ public void broadcastAll(Packet packet, ResourceKey dimension) { for (ServerPlayer serverPlayer : this.players) { if (serverPlayer.level().dimension() == dimension) { -@@ -857,6 +_,7 @@ +@@ -852,12 +_,13 @@ + if (player.connection != null) { + byte b; + if (permLevel <= 0) { +- b = 24; ++ b = EntityEvent.PERMISSION_LEVEL_ALL; // Purpur - Constants + } else if (permLevel >= 4) { +- b = 28; ++ b = EntityEvent.PERMISSION_LEVEL_OWNERS; // Purpur - Constants } else { - b = (byte)(24 + permLevel); + b = (byte)(EntityEvent.PERMISSION_LEVEL_ALL + permLevel); } -+ if (b < 28 && player.getBukkitEntity().hasPermission("purpur.debug.f3n")) b = 28; // Purpur - Add permission for F3+N debug ++ if (b < EntityEvent.PERMISSION_LEVEL_OWNERS && player.getBukkitEntity().hasPermission("purpur.debug.f3n")) b = EntityEvent.PERMISSION_LEVEL_OWNERS; // Purpur - Add permission for F3+N debug player.connection.send(new ClientboundEntityEventPacket(player, b)); } -@@ -869,7 +_,7 @@ +@@ -870,7 +_,7 @@ // Paper start - whitelist verify event / login event public LoginResult canBypassFullServerLogin(final NameAndId nameAndId, final LoginResult currentResult) { diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/LivingEntity.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/LivingEntity.java.patch index 5bd962719..f98b9be3f 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/LivingEntity.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/LivingEntity.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java -@@ -446,6 +_,12 @@ +@@ -447,6 +_,12 @@ if (d < 0.0) { double damagePerBlock = serverLevel1.getWorldBorder().getDamagePerBlock(); if (damagePerBlock > 0.0) { @@ -13,16 +13,16 @@ this.hurtServer(serverLevel1, this.damageSources().outOfBorder(), Math.max(1, Mth.floor(-d * damagePerBlock))); } } -@@ -461,7 +_,7 @@ +@@ -462,7 +_,7 @@ if (this.shouldTakeDrowningDamage()) { this.setAirSupply(0); - serverLevel1.broadcastEntityEvent(this, (byte)67); + serverLevel1.broadcastEntityEvent(this, EntityEvent.DROWN_PARTICLES); - this.hurtServer(serverLevel1, this.damageSources().drown(), 2.0F); + this.hurtServer(serverLevel1, this.damageSources().drown(), (float) this.level().purpurConfig.damageFromDrowning); // Purpur - Drowning Settings } } else if (this.getAirSupply() < this.getMaxAirSupply()) { this.setAirSupply(this.increaseAirSupply(this.getAirSupply())); -@@ -521,7 +_,7 @@ +@@ -522,7 +_,7 @@ } protected boolean shouldTakeDrowningDamage() { @@ -31,7 +31,7 @@ } @Override -@@ -1045,14 +_,32 @@ +@@ -1046,14 +_,32 @@ if (lookingEntity != null) { ItemStack itemBySlot = this.getItemBySlot(EquipmentSlot.HEAD); EntityType type = lookingEntity.getType(); @@ -72,7 +72,7 @@ return d; } -@@ -1099,6 +_,7 @@ +@@ -1100,6 +_,7 @@ Iterator iterator = this.activeEffects.values().iterator(); while (iterator.hasNext()) { MobEffectInstance effect = iterator.next(); @@ -80,7 +80,7 @@ EntityPotionEffectEvent event = CraftEventFactory.callEntityPotionEffectChangeEvent(this, effect, null, cause, EntityPotionEffectEvent.Action.CLEARED); if (event.isCancelled()) { continue; -@@ -1423,6 +_,24 @@ +@@ -1424,6 +_,24 @@ this.stopSleeping(); } @@ -105,7 +105,7 @@ this.noActionTime = 0; if (amount < 0.0F) { amount = 0.0F; -@@ -1685,10 +_,10 @@ +@@ -1686,10 +_,10 @@ protected Player resolvePlayerResponsibleForDamage(DamageSource damageSource) { Entity entity = damageSource.getEntity(); if (entity instanceof Player player) { @@ -118,7 +118,7 @@ } else { this.lastHurtByPlayer = null; this.lastHurtByPlayerMemoryTime = 0; -@@ -1739,6 +_,18 @@ +@@ -1740,6 +_,18 @@ } } @@ -137,7 +137,7 @@ final org.bukkit.inventory.EquipmentSlot handSlot = (hand != null) ? org.bukkit.craftbukkit.CraftEquipmentSlot.getHand(hand) : null; final EntityResurrectEvent event = new EntityResurrectEvent((org.bukkit.entity.LivingEntity) this.getBukkitEntity(), handSlot); event.setCancelled(itemStack == null); -@@ -1920,6 +_,7 @@ +@@ -1921,6 +_,7 @@ boolean flag = this.lastHurtByPlayerMemoryTime > 0; this.dropEquipment(level); // CraftBukkit - from below if (this.shouldDropLoot(level)) { @@ -145,7 +145,7 @@ this.dropFromLootTable(level, damageSource, flag); // Paper start final boolean prev = this.clearEquipmentSlots; -@@ -1928,6 +_,7 @@ +@@ -1929,6 +_,7 @@ // Paper end this.dropCustomDeathLoot(level, damageSource, flag); this.clearEquipmentSlots = prev; // Paper @@ -153,7 +153,7 @@ } // CraftBukkit start - Call death event // Paper start - call advancement triggers with correct entity equipment -@@ -3146,6 +_,7 @@ +@@ -3149,6 +_,7 @@ float f = (float)(d * 10.0 - 3.0); if (f > 0.0F) { this.playSound(this.getFallDamageSound((int)f), 1.0F, 1.0F); @@ -161,7 +161,7 @@ this.hurt(this.damageSources().flyIntoWall(), f); } } -@@ -4545,6 +_,12 @@ +@@ -4548,6 +_,12 @@ ? slot == EquipmentSlot.MAINHAND && this.canUseSlot(EquipmentSlot.MAINHAND) : slot == equippable.slot() && this.canUseSlot(equippable.slot()) && equippable.canBeEquippedBy(this.getType()); } diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/ai/goal/RunAroundLikeCrazyGoal.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/ai/goal/RunAroundLikeCrazyGoal.java.patch index cb39bb4e0..dbec726c4 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/ai/goal/RunAroundLikeCrazyGoal.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/ai/goal/RunAroundLikeCrazyGoal.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/ai/goal/RunAroundLikeCrazyGoal.java +++ b/net/minecraft/world/entity/ai/goal/RunAroundLikeCrazyGoal.java -@@ -58,7 +_,7 @@ +@@ -59,7 +_,7 @@ if (firstPassenger instanceof Player player) { int temper = this.horse.getTemper(); int maxTemper = this.horse.getMaxTemper(); diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/ambient/Bat.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/ambient/Bat.java.patch index 14d936a35..083b7154f 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/ambient/Bat.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/ambient/Bat.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/ambient/Bat.java +++ b/net/minecraft/world/entity/ambient/Bat.java -@@ -233,7 +_,7 @@ +@@ -234,7 +_,7 @@ } else { int maxLocalRawBrightness = level.getMaxLocalRawBrightness(pos); int i = 4; @@ -9,7 +9,7 @@ i = 7; } else if (randomSource.nextBoolean()) { return false; -@@ -245,6 +_,7 @@ +@@ -246,6 +_,7 @@ } } diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Animal.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Animal.java.patch index bd095422e..1732e9e64 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Animal.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Animal.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/animal/Animal.java +++ b/net/minecraft/world/entity/animal/Animal.java -@@ -141,7 +_,7 @@ +@@ -142,7 +_,7 @@ ItemStack itemInHand = player.getItemInHand(hand); if (this.isFood(itemInHand)) { int age = this.getAge(); @@ -9,7 +9,7 @@ final ItemStack breedCopy = itemInHand.copy(); // Paper - Fix EntityBreedEvent copying this.usePlayerItem(player, hand, itemInHand); this.setInLove(serverPlayer, breedCopy); // Paper - Fix EntityBreedEvent copying -@@ -223,10 +_,20 @@ +@@ -224,10 +_,20 @@ public void spawnChildFromBreeding(ServerLevel level, Animal partner) { AgeableMob breedOffspring = this.getBreedOffspring(level, partner); if (breedOffspring != null) { diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Bee.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Bee.java.patch index fa8da0b6c..28b494c1d 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Bee.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Bee.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/animal/Bee.java +++ b/net/minecraft/world/entity/animal/Bee.java -@@ -170,7 +_,7 @@ +@@ -171,7 +_,7 @@ // Paper end - Fix MC-167279 this.lookControl = new Bee.BeeLookControl(this); this.setPathfindingMalus(PathType.DANGER_FIRE, -1.0F); @@ -9,7 +9,7 @@ this.setPathfindingMalus(PathType.WATER_BORDER, 16.0F); this.setPathfindingMalus(PathType.COCOA, -1.0F); this.setPathfindingMalus(PathType.FENCE, -1.0F); -@@ -366,7 +_,7 @@ +@@ -367,7 +_,7 @@ } public static boolean isNightOrRaining(Level level) { @@ -18,7 +18,7 @@ } public void setStayOutOfHiveCountdown(int stayOutOfHiveCountdown) { -@@ -389,7 +_,7 @@ +@@ -390,7 +_,7 @@ @Override protected void customServerAiStep(ServerLevel level) { boolean hasStung = this.hasStung(); @@ -27,7 +27,7 @@ this.underWaterTicks++; } else { this.underWaterTicks = 0; -@@ -399,6 +_,7 @@ +@@ -400,6 +_,7 @@ this.hurtServer(level, this.damageSources().drown(), 1.0F); } @@ -35,7 +35,7 @@ if (hasStung) { this.timeSinceSting++; if (this.timeSinceSting % 5 == 0 && this.random.nextInt(Mth.clamp(1200 - this.timeSinceSting, 1, 1200)) == 0) { -@@ -1138,6 +_,7 @@ +@@ -1139,6 +_,7 @@ Bee.this.savedFlowerPos = optional.get(); Bee.this.navigation .moveTo(Bee.this.savedFlowerPos.getX() + 0.5, Bee.this.savedFlowerPos.getY() + 0.5, Bee.this.savedFlowerPos.getZ() + 0.5, 1.2F); @@ -43,7 +43,7 @@ return true; } else { Bee.this.remainingCooldownBeforeLocatingNewFlower = Mth.nextInt(Bee.this.random, 20, 60); -@@ -1184,6 +_,7 @@ +@@ -1185,6 +_,7 @@ this.pollinating = false; Bee.this.navigation.stop(); Bee.this.remainingCooldownBeforeLocatingNewFlower = 200; @@ -51,7 +51,7 @@ } @Override -@@ -1230,6 +_,7 @@ +@@ -1231,6 +_,7 @@ this.setWantedPos(); } diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Cat.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Cat.java.patch index b8bee71f9..6c4050386 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Cat.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Cat.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/animal/Cat.java +++ b/net/minecraft/world/entity/animal/Cat.java -@@ -354,6 +_,14 @@ +@@ -355,6 +_,14 @@ return this.isTame() && otherAnimal instanceof Cat cat && cat.isTame() && super.canMate(otherAnimal); } @@ -15,7 +15,7 @@ @Nullable @Override public SpawnGroupData finalizeSpawn( -@@ -452,7 +_,7 @@ +@@ -453,7 +_,7 @@ } private void tryToTame(Player player) { @@ -23,4 +23,4 @@ + if (((this.level().purpurConfig.alwaysTameInCreative && player.hasInfiniteMaterials()) || this.random.nextInt(3) == 0) && !org.bukkit.craftbukkit.event.CraftEventFactory.callEntityTameEvent(this, player).isCancelled()) { // CraftBukkit // Purpur - Config to always tame in Creative this.tame(player); this.setOrderedToSit(true); - this.level().broadcastEntityEvent(this, (byte)7); + this.level().broadcastEntityEvent(this, EntityEvent.TAMING_SUCCEEDED); diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Dolphin.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Dolphin.java.patch index 548eb7512..6bf7cb62c 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Dolphin.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Dolphin.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/animal/Dolphin.java +++ b/net/minecraft/world/entity/animal/Dolphin.java -@@ -74,6 +_,7 @@ +@@ -75,6 +_,7 @@ private static final boolean DEFAULT_GOT_FISH = false; @Nullable public BlockPos treasurePos; @@ -8,7 +8,7 @@ public Dolphin(EntityType type, Level level) { super(type, level); -@@ -90,6 +_,7 @@ +@@ -91,6 +_,7 @@ this.setAirSupply(this.getMaxAirSupply()); this.setXRot(0.0F); SpawnGroupData spawnGroupData1 = Objects.requireNonNullElseGet(spawnGroupData, () -> new AgeableMob.AgeableMobGroupData(0.1F)); @@ -16,7 +16,7 @@ return super.finalizeSpawn(level, difficulty, spawnReason, spawnGroupData1); } -@@ -156,17 +_,19 @@ +@@ -157,17 +_,19 @@ protected void registerGoals() { this.goalSelector.addGoal(0, new BreathAirGoal(this)); this.goalSelector.addGoal(0, new TryFindWaterGoal(this)); @@ -37,7 +37,7 @@ } public static AttributeSupplier.Builder createAttributes() { -@@ -399,6 +_,7 @@ +@@ -400,6 +_,7 @@ @Override public boolean canUse() { diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Fox.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Fox.java.patch index 134e6108c..df0a11421 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Fox.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Fox.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/animal/Fox.java +++ b/net/minecraft/world/entity/animal/Fox.java -@@ -346,6 +_,11 @@ +@@ -348,6 +_,11 @@ } private void setTargetGoals() { @@ -12,7 +12,7 @@ if (this.getVariant() == Fox.Variant.RED) { this.targetSelector.addGoal(4, this.landTargetGoal); this.targetSelector.addGoal(4, this.turtleEggTargetGoal); -@@ -373,6 +_,7 @@ +@@ -375,6 +_,7 @@ public void setVariant(Fox.Variant variant) { this.entityData.set(DATA_TYPE_ID, variant.getId()); @@ -20,7 +20,7 @@ } @Nullable -@@ -702,6 +_,29 @@ +@@ -704,6 +_,29 @@ return slot == EquipmentSlot.MAINHAND; } // Paper end diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/IronGolem.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/IronGolem.java.patch index 1d05bc69c..349d0b8d9 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/IronGolem.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/IronGolem.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/animal/IronGolem.java +++ b/net/minecraft/world/entity/animal/IronGolem.java -@@ -58,13 +_,26 @@ +@@ -59,13 +_,26 @@ private int remainingPersistentAngerTime; @Nullable private UUID persistentAngerTarget; @@ -27,7 +27,7 @@ this.goalSelector.addGoal(1, new MeleeAttackGoal(this, 1.0, true)); this.goalSelector.addGoal(2, new MoveTowardsTargetGoal(this, 0.9, 32.0F)); this.goalSelector.addGoal(2, new MoveBackToVillageGoal(this, 0.6, false)); -@@ -142,6 +_,7 @@ +@@ -143,6 +_,7 @@ protected void addAdditionalSaveData(ValueOutput output) { super.addAdditionalSaveData(output); output.putBoolean("PlayerCreated", this.isPlayerCreated()); @@ -35,7 +35,7 @@ this.addPersistentAngerSaveData(output); } -@@ -149,6 +_,7 @@ +@@ -150,6 +_,7 @@ protected void readAdditionalSaveData(ValueInput input) { super.readAdditionalSaveData(input); this.setPlayerCreated(input.getBooleanOr("PlayerCreated", false)); @@ -43,7 +43,7 @@ this.readPersistentAngerSaveData(this.level(), input); } -@@ -268,6 +_,7 @@ +@@ -269,6 +_,7 @@ float f = 1.0F + (this.random.nextFloat() - this.random.nextFloat()) * 0.2F; this.playSound(SoundEvents.IRON_GOLEM_REPAIR, 1.0F, f); itemInHand.consume(1, player); diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Ocelot.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Ocelot.java.patch index 48b3a30ef..8770edae2 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Ocelot.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Ocelot.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/animal/Ocelot.java +++ b/net/minecraft/world/entity/animal/Ocelot.java -@@ -234,7 +_,7 @@ +@@ -235,7 +_,7 @@ public boolean checkSpawnObstruction(LevelReader level) { if (level.isUnobstructed(this) && !level.containsAnyLiquid(this.getBoundingBox())) { BlockPos blockPos = this.blockPosition(); diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Parrot.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Parrot.java.patch index 8f9a8dcf1..6bdb9d04c 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Parrot.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Parrot.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/animal/Parrot.java +++ b/net/minecraft/world/entity/animal/Parrot.java -@@ -159,6 +_,7 @@ +@@ -160,6 +_,7 @@ protected void registerGoals() { this.goalSelector.addGoal(0, new TamableAnimal.TamableAnimalPanicGoal(1.25)); this.goalSelector.addGoal(0, new FloatGoal(this)); @@ -8,16 +8,16 @@ this.goalSelector.addGoal(1, new LookAtPlayerGoal(this, Player.class, 8.0F)); this.goalSelector.addGoal(2, new SitWhenOrderedToGoal(this)); this.goalSelector.addGoal(2, new FollowOwnerGoal(this, 1.0, 5.0F, 1.0F)); -@@ -264,7 +_,7 @@ +@@ -265,7 +_,7 @@ } if (!this.level().isClientSide()) { - if (this.random.nextInt(10) == 0 && !org.bukkit.craftbukkit.event.CraftEventFactory.callEntityTameEvent(this, player).isCancelled()) { // CraftBukkit + if (((this.level().purpurConfig.alwaysTameInCreative && player.hasInfiniteMaterials()) || this.random.nextInt(10) == 0) && !org.bukkit.craftbukkit.event.CraftEventFactory.callEntityTameEvent(this, player).isCancelled()) { // CraftBukkit // Purpur - Config to always tame in Creative this.tame(player); - this.level().broadcastEntityEvent(this, (byte)7); + this.level().broadcastEntityEvent(this, EntityEvent.TAMING_SUCCEEDED); } else { -@@ -272,6 +_,7 @@ +@@ -273,6 +_,7 @@ } } @@ -25,7 +25,7 @@ return InteractionResult.SUCCESS; } else if (!itemInHand.is(ItemTags.PARROT_POISONOUS_FOOD)) { if (!this.isFlying() && this.isTame() && this.isOwnedBy(player)) { -@@ -296,7 +_,7 @@ +@@ -297,7 +_,7 @@ @Override public boolean isFood(ItemStack stack) { @@ -34,7 +34,7 @@ } public static boolean checkParrotSpawnRules( -@@ -311,13 +_,13 @@ +@@ -312,13 +_,13 @@ @Override public boolean canMate(Animal otherAnimal) { diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Rabbit.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Rabbit.java.patch index ea0874b61..ffcca1991 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Rabbit.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Rabbit.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/animal/Rabbit.java +++ b/net/minecraft/world/entity/animal/Rabbit.java -@@ -404,10 +_,23 @@ +@@ -406,10 +_,23 @@ } this.setVariant(randomRabbitVariant); diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Squid.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Squid.java.patch index 89574a219..0a0742185 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Squid.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Squid.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/animal/Squid.java +++ b/net/minecraft/world/entity/animal/Squid.java -@@ -46,10 +_,29 @@ +@@ -47,10 +_,29 @@ public Squid(EntityType type, Level level) { super(type, level); @@ -31,7 +31,7 @@ @Override protected void registerGoals() { this.goalSelector.addGoal(0, new Squid.SquidRandomMovementGoal(this)); -@@ -127,6 +_,7 @@ +@@ -128,6 +_,7 @@ } if (this.isInWater()) { @@ -39,7 +39,7 @@ if (this.tentacleMovement < (float) Math.PI) { float f = this.tentacleMovement / (float) Math.PI; this.tentacleAngle = Mth.sin(f * f * (float) Math.PI) * (float) Math.PI * 0.25F; -@@ -308,7 +_,7 @@ +@@ -309,7 +_,7 @@ int noActionTime = this.squid.getNoActionTime(); if (noActionTime > 100) { this.squid.movementVector = Vec3.ZERO; diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/coppergolem/CopperGolem.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/coppergolem/CopperGolem.java.patch index 26bd84af0..488d40186 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/coppergolem/CopperGolem.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/coppergolem/CopperGolem.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/animal/coppergolem/CopperGolem.java +++ b/net/minecraft/world/entity/animal/coppergolem/CopperGolem.java -@@ -84,6 +_,7 @@ +@@ -86,6 +_,7 @@ private final AnimationState interactionDropItemAnimationState = new AnimationState(); private final AnimationState interactionDropNoItemAnimationState = new AnimationState(); public static final EquipmentSlot EQUIPMENT_SLOT_ANTENNA = EquipmentSlot.SADDLE; @@ -8,7 +8,7 @@ public CopperGolem(EntityType type, Level level) { super(type, level); -@@ -97,6 +_,17 @@ +@@ -99,6 +_,17 @@ this.getBrain().setMemory(MemoryModuleType.TRANSPORT_ITEMS_COOLDOWN_TICKS, this.getRandom().nextInt(60, 100)); } @@ -26,7 +26,7 @@ public static AttributeSupplier.Builder createAttributes() { return Mob.createMobAttributes().add(Attributes.MOVEMENT_SPEED, 0.2F).add(Attributes.STEP_HEIGHT, 1.0).add(Attributes.MAX_HEALTH, 12.0); } -@@ -172,6 +_,7 @@ +@@ -174,6 +_,7 @@ super.addAdditionalSaveData(output); output.putLong("next_weather_age", this.nextWeatheringTick); output.store("weather_state", WeatheringCopper.WeatherState.CODEC, this.getWeatherState()); @@ -34,7 +34,7 @@ } @Override -@@ -179,6 +_,7 @@ +@@ -181,6 +_,7 @@ super.readAdditionalSaveData(input); this.nextWeatheringTick = input.getLongOr("next_weather_age", -1L); this.setWeatherState(input.read("weather_state", WeatheringCopper.WeatherState.CODEC).orElse(WeatheringCopper.WeatherState.UNAFFECTED)); diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/goat/Goat.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/goat/Goat.java.patch index d854787d7..f07c129d7 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/goat/Goat.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/goat/Goat.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/animal/goat/Goat.java +++ b/net/minecraft/world/entity/animal/goat/Goat.java -@@ -389,6 +_,7 @@ +@@ -390,6 +_,7 @@ // Paper start - Goat ram API public void ram(net.minecraft.world.entity.LivingEntity entity) { diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/wolf/Wolf.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/wolf/Wolf.java.patch index a696b0e4b..c95115fd1 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/wolf/Wolf.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/wolf/Wolf.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/animal/wolf/Wolf.java +++ b/net/minecraft/world/entity/animal/wolf/Wolf.java -@@ -99,6 +_,37 @@ +@@ -100,6 +_,37 @@ EntityType type = entity.getType(); return type == EntityType.SHEEP || type == EntityType.RABBIT || type == EntityType.FOX; }; @@ -38,7 +38,7 @@ private static final float START_HEALTH = 8.0F; private static final float TAME_HEALTH = 40.0F; private static final float ARMOR_REPAIR_UNIT = 0.125F; -@@ -121,12 +_,47 @@ +@@ -122,12 +_,47 @@ this.setPathfindingMalus(PathType.DANGER_POWDER_SNOW, -1.0F); } @@ -86,7 +86,7 @@ this.goalSelector.addGoal(4, new LeapAtTargetGoal(this, 0.4F)); this.goalSelector.addGoal(5, new MeleeAttackGoal(this, 1.0, true)); this.goalSelector.addGoal(6, new FollowOwnerGoal(this, 1.0, 10.0F, 2.0F)); -@@ -139,7 +_,7 @@ +@@ -140,7 +_,7 @@ this.targetSelector.addGoal(2, new OwnerHurtTargetGoal(this)); this.targetSelector.addGoal(3, new HurtByTargetGoal(this).setAlertOthers()); this.targetSelector.addGoal(4, new NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, this::isAngryAt)); @@ -95,7 +95,7 @@ this.targetSelector.addGoal(6, new NonTameRandomTargetGoal<>(this, Turtle.class, false, Turtle.BABY_ON_LAND_SELECTOR)); this.targetSelector.addGoal(7, new NearestAttackableTargetGoal<>(this, AbstractSkeleton.class, false)); this.targetSelector.addGoal(8, new ResetUniversalAngerTargetGoal<>(this, true)); -@@ -230,6 +_,7 @@ +@@ -231,6 +_,7 @@ protected void addAdditionalSaveData(ValueOutput output) { super.addAdditionalSaveData(output); output.store("CollarColor", DyeColor.LEGACY_ID_CODEC, this.getCollarColor()); @@ -103,7 +103,7 @@ VariantUtils.writeVariant(output, this.getVariant()); this.addPersistentAngerSaveData(output); this.getSoundVariant() -@@ -244,6 +_,10 @@ +@@ -245,6 +_,10 @@ super.readAdditionalSaveData(input); VariantUtils.readVariant(input, Registries.WOLF_VARIANT).ifPresent(this::setVariant); this.setCollarColor(input.read("CollarColor", DyeColor.LEGACY_ID_CODEC).orElse(DEFAULT_COLLAR_COLOR)); @@ -114,7 +114,7 @@ this.readPersistentAngerSaveData(this.level(), input); input.read("sound_variant", ResourceKey.codec(Registries.WOLF_SOUND_VARIANT)) .flatMap(resourceKey -> this.registryAccess().lookupOrThrow(Registries.WOLF_SOUND_VARIANT).get((ResourceKey)resourceKey)) -@@ -268,6 +_,10 @@ +@@ -269,6 +_,10 @@ } this.setSoundVariant(WolfSoundVariants.pickRandomSoundVariant(this.registryAccess(), level.getRandom())); @@ -125,7 +125,7 @@ return super.finalizeSpawn(level, difficulty, spawnReason, spawnGroupData); } -@@ -318,6 +_,11 @@ +@@ -319,6 +_,11 @@ public void tick() { super.tick(); if (this.isAlive()) { @@ -137,7 +137,7 @@ this.interestedAngleO = this.interestedAngle; if (this.isInterested()) { this.interestedAngle = this.interestedAngle + (1.0F - this.interestedAngle) * 0.4F; -@@ -519,13 +_,27 @@ +@@ -520,13 +_,27 @@ itemInHand.consume(1, player); this.tryToTame(player); return InteractionResult.SUCCESS_SERVER; diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java.patch index 8d855a599..68b24b0fc 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java +++ b/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -@@ -961,6 +_,7 @@ +@@ -962,6 +_,7 @@ @Override protected boolean canRide(Entity entity) { @@ -8,7 +8,7 @@ return false; } -@@ -996,7 +_,7 @@ +@@ -997,7 +_,7 @@ boolean flag = level.getGameRules().getBoolean(GameRules.RULE_DOMOBLOOT); int i = 500; diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/boss/wither/WitherBoss.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/boss/wither/WitherBoss.java.patch index 177964f06..219e4e227 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/boss/wither/WitherBoss.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/boss/wither/WitherBoss.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/net/minecraft/world/entity/boss/wither/WitherBoss.java -@@ -79,6 +_,7 @@ +@@ -80,6 +_,7 @@ private static final TargetingConditions.Selector LIVING_ENTITY_SELECTOR = (entity, level) -> !entity.getType().is(EntityTypeTags.WITHER_FRIENDS) && entity.attackable(); private static final TargetingConditions TARGETING_CONDITIONS = TargetingConditions.forCombat().range(20.0).selector(LIVING_ENTITY_SELECTOR); @@ -8,7 +8,7 @@ public WitherBoss(EntityType type, Level level) { super(type, level); -@@ -87,6 +_,17 @@ +@@ -88,6 +_,17 @@ this.xpReward = 50; } @@ -26,7 +26,7 @@ @Override protected PathNavigation createNavigation(Level level) { FlyingPathNavigation flyingPathNavigation = new FlyingPathNavigation(this, level); -@@ -119,6 +_,7 @@ +@@ -120,6 +_,7 @@ protected void addAdditionalSaveData(ValueOutput output) { super.addAdditionalSaveData(output); output.putInt("Invul", this.getInvulnerableTicks()); @@ -34,7 +34,7 @@ } @Override -@@ -128,6 +_,7 @@ +@@ -129,6 +_,7 @@ if (this.hasCustomName()) { this.bossEvent.setName(this.getDisplayName()); } @@ -42,7 +42,7 @@ } @Override -@@ -271,7 +_,7 @@ +@@ -272,7 +_,7 @@ level.explode(this, this.getX(), this.getEyeY(), this.getZ(), event.getRadius(), event.getFire(), Level.ExplosionInteraction.MOB); } // CraftBukkit end @@ -51,7 +51,7 @@ // CraftBukkit start - Use relative location for far away sounds // level.globalLevelEvent(1023, this.blockPosition(), 0); int viewDistance = level.getCraftServer().getViewDistance() * 16; -@@ -378,8 +_,10 @@ +@@ -379,8 +_,10 @@ } } @@ -64,7 +64,7 @@ } this.bossEvent.setProgress(this.getHealth() / this.getMaxHealth()); -@@ -576,6 +_,7 @@ +@@ -577,6 +_,7 @@ @Override protected boolean canRide(Entity entity) { diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/decoration/ArmorStand.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/decoration/ArmorStand.java.patch index a4a86eb95..503f2d42c 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/decoration/ArmorStand.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/decoration/ArmorStand.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/decoration/ArmorStand.java +++ b/net/minecraft/world/entity/decoration/ArmorStand.java -@@ -91,10 +_,13 @@ +@@ -92,10 +_,13 @@ public boolean canTickSetByAPI = false; private boolean noTickEquipmentDirty = false; // Paper end - Allow ArmorStands not to tick @@ -14,7 +14,7 @@ } public ArmorStand(Level level, double x, double y, double z) { -@@ -521,6 +_,7 @@ +@@ -522,6 +_,7 @@ // Paper start - Allow ArmorStands not to tick @Override public void tick() { @@ -22,7 +22,7 @@ if (!this.canTick) { if (this.noTickEquipmentDirty) { this.noTickEquipmentDirty = false; -@@ -811,4 +_,18 @@ +@@ -812,4 +_,18 @@ } } // Paper end diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Ghast.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Ghast.java.patch index 6c1bf42f5..c05e83d84 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Ghast.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Ghast.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/monster/Ghast.java +++ b/net/minecraft/world/entity/monster/Ghast.java -@@ -155,6 +_,11 @@ +@@ -156,6 +_,11 @@ public static boolean checkGhastSpawnRules( EntityType entityType, LevelAccessor level, EntitySpawnReason spawnReason, BlockPos pos, RandomSource random ) { diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Guardian.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Guardian.java.patch index fb76bfad6..34f6b89aa 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Guardian.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Guardian.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/monster/Guardian.java +++ b/net/minecraft/world/entity/monster/Guardian.java -@@ -314,6 +_,11 @@ +@@ -315,6 +_,11 @@ public static boolean checkGuardianSpawnRules( EntityType entityType, LevelAccessor level, EntitySpawnReason spawnReason, BlockPos pos, RandomSource random ) { diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Phantom.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Phantom.java.patch index f9fb6e447..c33845e7b 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Phantom.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Phantom.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/monster/Phantom.java +++ b/net/minecraft/world/entity/monster/Phantom.java -@@ -169,7 +_,11 @@ +@@ -170,7 +_,11 @@ ServerLevelAccessor level, DifficultyInstance difficulty, EntitySpawnReason spawnReason, @Nullable SpawnGroupData spawnGroupData ) { this.anchorPoint = this.blockPosition().above(5); diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Ravager.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Ravager.java.patch index e15c2cd73..2e7516440 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Ravager.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Ravager.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/monster/Ravager.java +++ b/net/minecraft/world/entity/monster/Ravager.java -@@ -74,6 +_,7 @@ +@@ -75,6 +_,7 @@ protected void registerGoals() { super.registerGoals(); this.goalSelector.addGoal(0, new FloatGoal(this)); @@ -8,7 +8,7 @@ this.goalSelector.addGoal(4, new MeleeAttackGoal(this, 1.0, true)); this.goalSelector.addGoal(5, new WaterAvoidingRandomStrollGoal(this, 0.4)); this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 6.0F)); -@@ -154,7 +_,7 @@ +@@ -155,7 +_,7 @@ )) { BlockState blockState = serverLevel.getBlockState(blockPos); Block block = blockState.getBlock(); diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Skeleton.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Skeleton.java.patch index fcae77e76..0425ced22 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Skeleton.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Skeleton.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/monster/Skeleton.java +++ b/net/minecraft/world/entity/monster/Skeleton.java -@@ -129,4 +_,64 @@ +@@ -130,4 +_,64 @@ SoundEvent getStepSound() { return SoundEvents.SKELETON_STEP; } diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Zombie.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Zombie.java.patch index ab0f726fc..c07653823 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Zombie.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Zombie.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/monster/Zombie.java +++ b/net/minecraft/world/entity/monster/Zombie.java -@@ -116,7 +_,19 @@ +@@ -117,7 +_,19 @@ this.goalSelector.addGoal(7, new WaterAvoidingRandomStrollGoal(this, 1.0)); this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers(ZombifiedPiglin.class)); this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); @@ -21,7 +21,7 @@ this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, IronGolem.class, true)); this.targetSelector.addGoal(5, new NearestAttackableTargetGoal<>(this, Turtle.class, 10, true, false, Turtle.BABY_ON_LAND_SELECTOR)); } -@@ -550,10 +_,7 @@ +@@ -551,10 +_,7 @@ } if (this.getItemBySlot(EquipmentSlot.HEAD).isEmpty()) { diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/ZombieVillager.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/ZombieVillager.java.patch index 1daf00dde..8f30c483c 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/ZombieVillager.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/ZombieVillager.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/monster/ZombieVillager.java +++ b/net/minecraft/world/entity/monster/ZombieVillager.java -@@ -138,10 +_,10 @@ +@@ -140,10 +_,10 @@ public InteractionResult mobInteract(Player player, InteractionHand hand) { ItemStack itemInHand = player.getItemInHand(hand); if (itemInHand.is(Items.GOLDEN_APPLE)) { diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/hoglin/Hoglin.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/hoglin/Hoglin.java.patch index 216434a31..39c40207c 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/hoglin/Hoglin.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/hoglin/Hoglin.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/monster/hoglin/Hoglin.java +++ b/net/minecraft/world/entity/monster/hoglin/Hoglin.java -@@ -200,6 +_,11 @@ +@@ -201,6 +_,11 @@ public static boolean checkHoglinSpawnRules( EntityType entityType, LevelAccessor level, EntitySpawnReason spawnReason, BlockPos pos, RandomSource random ) { diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/npc/Villager.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/npc/Villager.java.patch index 93d2e733a..f0dc4f5b5 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/npc/Villager.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/npc/Villager.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/npc/Villager.java +++ b/net/minecraft/world/entity/npc/Villager.java -@@ -178,6 +_,8 @@ +@@ -179,6 +_,8 @@ MemoryModuleType.MEETING_POINT, (villager, poiType) -> poiType.is(PoiTypes.MEETING) ); @@ -9,7 +9,7 @@ public Villager(EntityType type, Level level) { this(type, level, VillagerType.PLAINS); -@@ -196,6 +_,57 @@ +@@ -197,6 +_,57 @@ this.setVillagerData(this.getVillagerData().withType(villagerType).withProfession(level.registryAccess(), VillagerProfession.NONE)); } @@ -67,7 +67,7 @@ @Override public Brain getBrain() { return (Brain)super.getBrain(); -@@ -292,11 +_,22 @@ +@@ -293,11 +_,22 @@ // Paper start - EAR 2 this.customServerAiStep(level, false); } @@ -92,7 +92,7 @@ profilerFiller.pop(); if (this.assignProfessionWhenSpawned) { this.assignProfessionWhenSpawned = false; -@@ -368,6 +_,7 @@ +@@ -369,6 +_,7 @@ return InteractionResult.CONSUME; } @@ -100,7 +100,7 @@ this.startTrading(player); } -@@ -504,7 +_,7 @@ +@@ -505,7 +_,7 @@ public void updateDemand() { for (MerchantOffer merchantOffer : this.getOffers()) { @@ -109,7 +109,7 @@ } } -@@ -697,7 +_,7 @@ +@@ -698,7 +_,7 @@ @Override public boolean canBreed() { @@ -118,7 +118,7 @@ } private boolean hungry() { -@@ -922,6 +_,7 @@ +@@ -923,6 +_,7 @@ } public void spawnGolemIfNeeded(ServerLevel level, long gameTime, int minVillagerAmount) { @@ -126,7 +126,7 @@ if (this.wantsToSpawnGolem(gameTime)) { AABB aabb = this.getBoundingBox().inflate(10.0, 10.0, 10.0); List entitiesOfClass = level.getEntitiesOfClass(Villager.class, aabb); -@@ -989,6 +_,12 @@ +@@ -990,6 +_,12 @@ @Override public void startSleeping(BlockPos pos) { diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/player/Player.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/player/Player.java.patch index 861dbc575..82c259aaf 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/player/Player.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/player/Player.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/player/Player.java +++ b/net/minecraft/world/entity/player/Player.java -@@ -180,11 +_,20 @@ +@@ -181,11 +_,20 @@ private int currentImpulseContextResetGraceTime = 0; public boolean affectsSpawning = true; // Paper - Affects Spawning API public net.kyori.adventure.util.TriState flyingFallDamage = net.kyori.adventure.util.TriState.NOT_SET; // Paper - flying fall damage @@ -21,7 +21,7 @@ @Override public org.bukkit.craftbukkit.entity.CraftHumanEntity getBukkitEntity() { return (org.bukkit.craftbukkit.entity.CraftHumanEntity) super.getBukkitEntity(); -@@ -246,6 +_,12 @@ +@@ -247,6 +_,12 @@ @Override public void tick() { @@ -34,7 +34,7 @@ this.noPhysics = this.isSpectator(); if (this.isSpectator() || this.isPassenger()) { this.setOnGround(false); -@@ -301,6 +_,17 @@ +@@ -302,6 +_,17 @@ this.turtleHelmetTick(); } @@ -52,7 +52,7 @@ this.cooldowns.tick(); this.updatePlayerPose(); if (this.currentImpulseContextResetGraceTime > 0) { -@@ -512,7 +_,7 @@ +@@ -513,7 +_,7 @@ List list = Lists.newArrayList(); for (Entity entity : entities) { @@ -61,7 +61,7 @@ list.add(entity); } else if (!entity.isRemoved()) { this.touch(entity); -@@ -1074,7 +_,7 @@ +@@ -1075,7 +_,7 @@ flag2 = flag2 && !this.level().paperConfig().entities.behavior.disablePlayerCrits; // Paper - Toggleable player crits if (flag2) { damageSource = damageSource.critical(); // Paper - critical damage API @@ -70,7 +70,7 @@ } float f2 = f + f1; -@@ -1674,7 +_,23 @@ +@@ -1675,7 +_,23 @@ @Override protected int getBaseExperienceReward(ServerLevel level) { @@ -95,7 +95,7 @@ } @Override -@@ -1717,6 +_,13 @@ +@@ -1718,6 +_,13 @@ public boolean addItem(ItemStack stack) { return this.inventory.add(stack); } diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/projectile/Snowball.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/projectile/Snowball.java.patch index 1fe34a7dd..1f0d0f7dd 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/projectile/Snowball.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/projectile/Snowball.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/projectile/Snowball.java +++ b/net/minecraft/world/entity/projectile/Snowball.java -@@ -52,9 +_,39 @@ +@@ -53,9 +_,39 @@ protected void onHitEntity(EntityHitResult result) { super.onHitEntity(result); Entity entity = result.getEntity(); diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/inventory/AnvilMenu.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/inventory/AnvilMenu.java.patch index 88ef4768c..7c93cca5f 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/inventory/AnvilMenu.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/inventory/AnvilMenu.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/inventory/AnvilMenu.java +++ b/net/minecraft/world/inventory/AnvilMenu.java -@@ -21,6 +_,12 @@ +@@ -23,6 +_,12 @@ import net.minecraft.world.level.block.state.BlockState; import org.slf4j.Logger; @@ -13,7 +13,7 @@ public class AnvilMenu extends ItemCombinerMenu { public static final int INPUT_SLOT = 0; public static final int ADDITIONAL_SLOT = 1; -@@ -50,6 +_,10 @@ +@@ -52,6 +_,10 @@ private org.bukkit.craftbukkit.inventory.view.CraftAnvilView bukkitEntity; // CraftBukkit end public boolean bypassEnchantmentLevelRestriction = false; // Paper - bypass anvil level restrictions @@ -24,7 +24,7 @@ public AnvilMenu(int containerId, Inventory playerInventory) { this(containerId, playerInventory, ContainerLevelAccess.NULL); -@@ -75,12 +_,17 @@ +@@ -77,12 +_,17 @@ @Override protected boolean mayPickup(Player player, boolean hasStack) { @@ -43,7 +43,7 @@ player.giveExperienceLevels(-this.cost.get()); } -@@ -133,13 +_,19 @@ +@@ -135,13 +_,19 @@ @Override public void createResult() { @@ -64,7 +64,7 @@ ItemStack itemStack = item.copy(); ItemStack item1 = this.inputSlots.getItem(1); ItemEnchantments.Mutable mutable = new ItemEnchantments.Mutable(EnchantmentHelper.getEnchantmentsForCrafting(itemStack)); -@@ -197,23 +_,34 @@ +@@ -199,23 +_,34 @@ int intValue = entry.getIntValue(); intValue = level == intValue ? intValue + 1 : Math.max(intValue, level); Enchantment enchantment = holder.value(); @@ -103,7 +103,7 @@ intValue = enchantment.getMaxLevel(); } -@@ -242,6 +_,54 @@ +@@ -244,6 +_,54 @@ if (!this.itemName.equals(item.getHoverName().getString())) { i1 = 1; i += i1; @@ -158,7 +158,7 @@ itemStack.set(DataComponents.CUSTOM_NAME, Component.literal(this.itemName)); } } else if (item.has(DataComponents.CUSTOM_NAME)) { -@@ -266,6 +_,12 @@ +@@ -268,6 +_,12 @@ this.onlyRenaming = true; } @@ -171,7 +171,7 @@ if (this.cost.get() >= this.maximumRepairCost && !this.player.hasInfiniteMaterials()) { // CraftBukkit itemStack = ItemStack.EMPTY; } -@@ -286,6 +_,13 @@ +@@ -288,6 +_,13 @@ org.bukkit.craftbukkit.event.CraftEventFactory.callPrepareAnvilEvent(this.getBukkitView(), itemStack); // CraftBukkit this.broadcastChanges(); @@ -185,7 +185,7 @@ } else { org.bukkit.craftbukkit.event.CraftEventFactory.callPrepareAnvilEvent(this.getBukkitView(), ItemStack.EMPTY); // CraftBukkit this.cost.set(AnvilMenu.DEFAULT_DENIED_COST); // CraftBukkit - use a variable for set a cost for denied item -@@ -294,7 +_,7 @@ +@@ -296,7 +_,7 @@ } public static int calculateIncreasedRepairCost(int oldRepairCost) { diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/inventory/GrindstoneMenu.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/inventory/GrindstoneMenu.java.patch index f30e76901..f1ba2081a 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/inventory/GrindstoneMenu.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/inventory/GrindstoneMenu.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/inventory/GrindstoneMenu.java +++ b/net/minecraft/world/inventory/GrindstoneMenu.java -@@ -91,11 +_,13 @@ +@@ -92,11 +_,13 @@ @Override public void onTake(Player player, ItemStack stack) { access.execute((level, blockPos) -> { @@ -15,7 +15,7 @@ // Paper end - Fire BlockExpEvent on grindstone use } -@@ -124,7 +_,7 @@ +@@ -125,7 +_,7 @@ for (Entry> entry : enchantmentsForCrafting.entrySet()) { Holder holder = entry.getKey(); int intValue = entry.getIntValue(); @@ -24,7 +24,7 @@ i += holder.value().getMinCost(intValue); } } -@@ -202,15 +_,75 @@ +@@ -203,15 +_,75 @@ for (Entry> entry : enchantmentsForCrafting.entrySet()) { Holder holder = entry.getKey(); @@ -102,7 +102,7 @@ if (item.is(Items.ENCHANTED_BOOK) && itemEnchantments.isEmpty()) { item = item.transmuteCopy(Items.BOOK); } -@@ -222,6 +_,23 @@ +@@ -223,6 +_,23 @@ } item.set(DataComponents.REPAIR_COST, i); @@ -126,7 +126,7 @@ return item; } -@@ -278,7 +_,9 @@ +@@ -279,7 +_,9 @@ return ItemStack.EMPTY; } diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/item/AxeItem.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/item/AxeItem.java.patch index bfa2d177a..91c2180ca 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/item/AxeItem.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/item/AxeItem.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/item/AxeItem.java +++ b/net/minecraft/world/item/AxeItem.java -@@ -64,13 +_,15 @@ +@@ -65,13 +_,15 @@ if (playerHasBlockingItemUseIntent(context)) { return InteractionResult.PASS; } else { @@ -18,14 +18,14 @@ return InteractionResult.PASS; } // Paper end -@@ -78,8 +_,15 @@ +@@ -79,8 +_,15 @@ CriteriaTriggers.ITEM_USED_ON_BLOCK.trigger((ServerPlayer)player, clickedPos, itemInHand); } -- level.setBlock(clickedPos, optional.get(), 11); +- level.setBlock(clickedPos, optional.get(), Block.UPDATE_ALL_IMMEDIATE); - level.gameEvent(GameEvent.BLOCK_CHANGE, clickedPos, GameEvent.Context.of(player, optional.get())); + // Purpur start - Tool actionable options -+ level.setBlock(clickedPos, state, 11); ++ level.setBlock(clickedPos, state, Block.UPDATE_ALL_IMMEDIATE); + actionable.drops().forEach((drop, chance) -> { + if (level.random.nextDouble() < chance) { + Block.popResourceFromFace(level, clickedPos, context.getClickedFace(), new ItemStack(drop)); @@ -36,7 +36,7 @@ if (player != null) { itemInHand.hurtAndBreak(1, player, context.getHand().asEquipmentSlot()); } -@@ -96,21 +_,23 @@ +@@ -97,21 +_,23 @@ && !player.isSecondaryUseActive(); } @@ -52,8 +52,8 @@ - Optional previous = WeatheringCopper.getPrevious(state); + Optional previous = Optional.ofNullable(level.purpurConfig.axeWeatherables.get(state.getBlock())); // Purpur - Tool actionable options if (previous.isPresent()) { -- spawnSoundAndParticle(level, pos, player, state, SoundEvents.AXE_SCRAPE, 3005); -+ spawnSoundAndParticle(level, pos, WeatheringCopper.getPrevious(state).isPresent() ? player : null, state, SoundEvents.AXE_SCRAPE, 3005); // Purpur - Tool actionable options - force sound +- spawnSoundAndParticle(level, pos, player, state, SoundEvents.AXE_SCRAPE, LevelEvent.PARTICLES_SCRAPE); ++ spawnSoundAndParticle(level, pos, WeatheringCopper.getPrevious(state).isPresent() ? player : null, state, SoundEvents.AXE_SCRAPE, LevelEvent.PARTICLES_SCRAPE); // Purpur - Tool actionable options - force sound return previous; } else { - Optional optional = Optional.ofNullable(HoneycombItem.WAX_OFF_BY_BLOCK.get().get(state.getBlock())) @@ -63,8 +63,8 @@ + // .map(block -> block.withPropertiesOf(state)); + // Purpur end - Tool actionable options if (optional.isPresent()) { -- spawnSoundAndParticle(level, pos, player, state, SoundEvents.AXE_WAX_OFF, 3004); -+ spawnSoundAndParticle(level, pos, HoneycombItem.WAX_OFF_BY_BLOCK.get().containsKey(state.getBlock()) ? player : null, state, SoundEvents.AXE_WAX_OFF, 3004); // Purpur - Tool actionable options - force sound +- spawnSoundAndParticle(level, pos, player, state, SoundEvents.AXE_WAX_OFF, LevelEvent.PARTICLES_WAX_OFF); ++ spawnSoundAndParticle(level, pos, HoneycombItem.WAX_OFF_BY_BLOCK.get().containsKey(state.getBlock()) ? player : null, state, SoundEvents.AXE_WAX_OFF, LevelEvent.PARTICLES_WAX_OFF); // Purpur - Tool actionable options - force sound return optional; } else { return Optional.empty(); diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/item/ShovelItem.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/item/ShovelItem.java.patch index 7c9681734..c583f3853 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/item/ShovelItem.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/item/ShovelItem.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/item/ShovelItem.java +++ b/net/minecraft/world/item/ShovelItem.java -@@ -45,9 +_,12 @@ +@@ -46,9 +_,12 @@ BlockState blockState1 = FLATTENABLES.get(blockState.getBlock()); BlockState blockState2 = null; Runnable afterAction = null; // Paper diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/item/SpawnEggItem.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/item/SpawnEggItem.java.patch index 7c068db48..d8234d335 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/item/SpawnEggItem.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/item/SpawnEggItem.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/item/SpawnEggItem.java +++ b/net/minecraft/world/item/SpawnEggItem.java -@@ -68,6 +_,23 @@ +@@ -69,6 +_,23 @@ return InteractionResult.FAIL; } else { if (level.paperConfig().entities.spawning.disableMobSpawnerSpawnEggTransformation) return InteractionResult.FAIL; // Paper - Allow disabling mob spawner spawn egg transformation @@ -22,5 +22,5 @@ + } + // Purpur end - PlayerSetSpawnerTypeWithEggEvent spawner.setEntityId(type, level.getRandom()); - level.sendBlockUpdated(clickedPos, blockState, blockState, 3); + level.sendBlockUpdated(clickedPos, blockState, blockState, Block.UPDATE_ALL); level.gameEvent(context.getPlayer(), GameEvent.BLOCK_CHANGE, clickedPos); diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/level/BaseSpawner.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/BaseSpawner.java.patch index e016949ae..472caee0b 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/level/BaseSpawner.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/BaseSpawner.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/BaseSpawner.java +++ b/net/minecraft/world/level/BaseSpawner.java -@@ -61,6 +_,7 @@ +@@ -62,6 +_,7 @@ } public boolean isNearPlayer(Level level, BlockPos pos) { diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/level/Level.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/Level.java.patch index a4e3a51c0..6ef376885 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/level/Level.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/Level.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/Level.java +++ b/net/minecraft/world/level/Level.java -@@ -165,11 +_,55 @@ +@@ -166,11 +_,55 @@ } // Paper end - add paper world config @@ -56,7 +56,7 @@ public CraftWorld getWorld() { return this.world; } -@@ -845,6 +_,8 @@ +@@ -846,6 +_,8 @@ // Paper end - getblock optimisations - cache world height/sections this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) levelData).getLevelName()); // Spigot this.paperConfig = paperWorldConfigCreator.apply(this.spigotConfig); // Paper - create paper world config @@ -65,7 +65,7 @@ this.generator = generator; this.world = new CraftWorld((ServerLevel) this, generator, biomeProvider, environment); -@@ -2112,4 +_,14 @@ +@@ -2113,4 +_,14 @@ return this.id; } } diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/CaveVinesBlock.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/CaveVinesBlock.java.patch index 631c2fafe..a024a56e2 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/CaveVinesBlock.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/CaveVinesBlock.java.patch @@ -2,7 +2,7 @@ +++ b/net/minecraft/world/level/block/CaveVinesBlock.java @@ -92,4 +_,11 @@ public void performBonemeal(ServerLevel level, RandomSource random, BlockPos pos, BlockState state) { - level.setBlock(pos, state.setValue(BERRIES, true), 2); + level.setBlock(pos, state.setValue(BERRIES, true), Block.UPDATE_CLIENTS); } + + // Purpur start - cave vines configurable max growth age diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/ComposterBlock.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/ComposterBlock.java.patch index e7743d07a..f2b522991 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/ComposterBlock.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/ComposterBlock.java.patch @@ -11,7 +11,7 @@ - return InteractionResult.PASS; - } - // Paper end -- level.levelEvent(1500, pos, state != blockState ? 1 : 0); +- level.levelEvent(LevelEvent.COMPOSTER_FILL, pos, state != blockState ? 1 : 0); - player.awardStat(Stats.ITEM_USED.get(stack.getItem())); - stack.consume(1, player); - } @@ -46,17 +46,17 @@ + // Purpur start - sneak to bulk process composter + private static @Nullable BlockState process(int levelValue, Player player, BlockState state, Level level, BlockPos pos, ItemStack stack) { + if (levelValue < 7 && !level.isClientSide()) { -+ BlockState iblockdata1 = ComposterBlock.addItem(player, state, level, pos, stack); ++ BlockState blockState = ComposterBlock.addItem(player, state, level, pos, stack); + // Paper start - handle cancelled events -+ if (iblockdata1 == null) { ++ if (blockState == null) { + return null; + } + // Paper end + -+ level.levelEvent(1500, pos, state != iblockdata1 ? 1 : 0); ++ level.levelEvent(LevelEvent.COMPOSTER_FILL, pos, state != blockState ? 1 : 0); + player.awardStat(Stats.ITEM_USED.get(stack.getItem())); + stack.consume(1, player); -+ return iblockdata1; ++ return blockState; + } + return state; + } diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/DoorBlock.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/DoorBlock.java.patch index 235a738f9..fab0aced9 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/DoorBlock.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/DoorBlock.java.patch @@ -7,7 +7,7 @@ + } else if (requiresRedstone(level, state, pos)) { return InteractionResult.CONSUME; // Purpur - Option to make doors require redstone } else { state = state.cycle(OPEN); - level.setBlock(pos, state, 10); + level.setBlock(pos, state, Block.UPDATE_CLIENTS | Block.UPDATE_IMMEDIATE); @@ -287,4 +_,18 @@ public static boolean isWoodenDoor(BlockState state) { return state.getBlock() instanceof DoorBlock doorBlock && doorBlock.type().canOpenByHand(); @@ -19,8 +19,8 @@ + // force update client + BlockPos otherPos = pos.relative(state.getValue(DoorBlock.HALF) == DoubleBlockHalf.LOWER ? Direction.UP : Direction.DOWN); + BlockState otherState = level.getBlockState(otherPos); -+ level.sendBlockUpdated(pos, state, state, 3); -+ level.sendBlockUpdated(otherPos, otherState, otherState, 3); ++ level.sendBlockUpdated(pos, state, state, Block.UPDATE_ALL); ++ level.sendBlockUpdated(otherPos, otherState, otherState, Block.UPDATE_ALL); + return true; + } + return false; diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java.patch index 4cb4b65da..db42baa35 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java +++ b/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java -@@ -186,6 +_,21 @@ +@@ -187,6 +_,21 @@ } ItemStack itemStack = furnace.items.get(1); @@ -22,7 +22,7 @@ ItemStack itemStack1 = furnace.items.get(0); boolean flag1 = !itemStack1.isEmpty(); boolean flag2 = !itemStack.isEmpty(); -@@ -269,6 +_,8 @@ +@@ -270,6 +_,8 @@ if (flag) { setChanged(level, pos, state); } diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/entity/SignBlockEntity.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/entity/SignBlockEntity.java.patch index d9530e11b..765660670 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/entity/SignBlockEntity.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/entity/SignBlockEntity.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/block/entity/SignBlockEntity.java +++ b/net/minecraft/world/level/block/entity/SignBlockEntity.java -@@ -148,16 +_,32 @@ +@@ -149,16 +_,32 @@ return this.setText(updater.apply(text), isFrontText); } @@ -35,7 +35,7 @@ ); } } -@@ -306,6 +_,27 @@ +@@ -307,6 +_,27 @@ // CraftBukkit - this return new CommandSourceStack(commandSource, Vec3.atCenterOf(pos), Vec2.ZERO, level, 2, string, component, level.getServer(), player); // Paper - Fix commands from signs not firing command events } diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/level/material/LavaFluid.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/material/LavaFluid.java.patch index b15fa4f09..e2e16d9a1 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/level/material/LavaFluid.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/material/LavaFluid.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/material/LavaFluid.java +++ b/net/minecraft/world/level/material/LavaFluid.java -@@ -190,7 +_,7 @@ +@@ -192,7 +_,7 @@ @Override public int getTickDelay(LevelReader level) { @@ -9,9 +9,9 @@ } @Override -@@ -211,6 +_,13 @@ +@@ -213,6 +_,13 @@ private void fizz(LevelAccessor level, BlockPos pos) { - level.levelEvent(1501, pos, 0); + level.levelEvent(LevelEvent.LAVA_FIZZ, pos, 0); } + + // Purpur start - Implement infinite liquids diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/level/portal/PortalShape.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/portal/PortalShape.java.patch index 925647acc..bb195b4da 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/level/portal/PortalShape.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/portal/PortalShape.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/portal/PortalShape.java +++ b/net/minecraft/world/level/portal/PortalShape.java -@@ -28,7 +_,7 @@ +@@ -29,7 +_,7 @@ public static final int MAX_WIDTH = 21; private static final int MIN_HEIGHT = 3; public static final int MAX_HEIGHT = 21;