From 503c6f4641d05ab1cde532ff9801fd6ad5631379 Mon Sep 17 00:00:00 2001 From: granny Date: Sun, 1 Jun 2025 14:58:14 -0700 Subject: [PATCH] all feature patches applied?? that was too easy... --- .../0001-Ridables.patch | 605 +++++++++--------- ...-Configurable-entity-base-attributes.patch | 280 ++++---- .../0003-Barrels-and-enderchests-6-rows.patch | 12 +- .../0004-Giants-AI-settings.patch | 6 +- .../0005-Chickens-can-retaliate.patch | 8 +- ...-Minecart-settings-and-WASD-controls.patch | 14 +- ...0007-Villagers-follow-emerald-blocks.patch | 26 +- .../0008-Implement-elytra-settings.patch | 20 +- .../0009-Configurable-jockey-options.patch | 20 +- ...ed-to-crystals-and-crystals-shoot-ph.patch | 16 +- .../0011-Phantoms-burn-in-light.patch | 10 +- ...e-entity-breeding-times-configurable.patch | 120 ++-- ...mes-from-item-forms-of-entities-to-e.patch | 16 +- ...Villager-Clerics-to-farm-Nether-Wart.patch | 6 +- ...fing-override-to-everything-affected.patch | 62 +- ...0016-Add-EntityTeleportHinderedEvent.patch | 8 +- ...oggle-for-water-sensitive-mob-damage.patch | 234 +++---- ...018-API-for-any-mob-to-burn-daylight.patch | 112 ++-- ...turally-aggressive-to-players-chance.patch | 26 +- .../0020-Mobs-always-drop-experience.patch | 224 +++---- 20 files changed, 907 insertions(+), 918 deletions(-) rename purpur-server/minecraft-patches/{unapplied-features => features}/0001-Ridables.patch (90%) rename purpur-server/minecraft-patches/{unapplied-features => features}/0002-Configurable-entity-base-attributes.patch (87%) rename purpur-server/minecraft-patches/{unapplied-features => features}/0003-Barrels-and-enderchests-6-rows.patch (95%) rename purpur-server/minecraft-patches/{unapplied-features => features}/0004-Giants-AI-settings.patch (93%) rename purpur-server/minecraft-patches/{unapplied-features => features}/0005-Chickens-can-retaliate.patch (91%) rename purpur-server/minecraft-patches/{unapplied-features => features}/0006-Minecart-settings-and-WASD-controls.patch (93%) rename purpur-server/minecraft-patches/{unapplied-features => features}/0007-Villagers-follow-emerald-blocks.patch (86%) rename purpur-server/minecraft-patches/{unapplied-features => features}/0008-Implement-elytra-settings.patch (83%) rename purpur-server/minecraft-patches/{unapplied-features => features}/0009-Configurable-jockey-options.patch (90%) rename purpur-server/minecraft-patches/{unapplied-features => features}/0010-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch (94%) rename purpur-server/minecraft-patches/{unapplied-features => features}/0011-Phantoms-burn-in-light.patch (88%) rename purpur-server/minecraft-patches/{unapplied-features => features}/0012-Make-entity-breeding-times-configurable.patch (84%) rename purpur-server/minecraft-patches/{unapplied-features => features}/0013-Apply-display-names-from-item-forms-of-entities-to-e.patch (91%) rename purpur-server/minecraft-patches/{unapplied-features => features}/0014-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch (98%) rename purpur-server/minecraft-patches/{unapplied-features => features}/0015-Add-mobGriefing-override-to-everything-affected.patch (92%) rename purpur-server/minecraft-patches/{unapplied-features => features}/0016-Add-EntityTeleportHinderedEvent.patch (94%) rename purpur-server/minecraft-patches/{unapplied-features => features}/0017-Toggle-for-water-sensitive-mob-damage.patch (85%) rename purpur-server/minecraft-patches/{unapplied-features => features}/0018-API-for-any-mob-to-burn-daylight.patch (72%) rename purpur-server/minecraft-patches/{unapplied-features => features}/0019-Cows-naturally-aggressive-to-players-chance.patch (82%) rename purpur-server/minecraft-patches/{unapplied-features => features}/0020-Mobs-always-drop-experience.patch (85%) diff --git a/purpur-server/minecraft-patches/unapplied-features/0001-Ridables.patch b/purpur-server/minecraft-patches/features/0001-Ridables.patch similarity index 90% rename from purpur-server/minecraft-patches/unapplied-features/0001-Ridables.patch rename to purpur-server/minecraft-patches/features/0001-Ridables.patch index 009aa9ee9..4703d4bed 100644 --- a/purpur-server/minecraft-patches/unapplied-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 fa7a2a85adf7758a753c54a7cf75cc667922d3d7..b0a86aac9603e72062f59dbe67c88ed8f07023e3 100644 +index 61ab8b508d2b614d0f05ae4cc23dc214f8e95a1d..d6e8bd3b302f821b286b15db3d66c8b2a9493ef5 100644 --- a/net/minecraft/gametest/framework/GameTestHelper.java +++ b/net/minecraft/gametest/framework/GameTestHelper.java @@ -294,6 +294,8 @@ public class GameTestHelper { @@ -18,34 +18,34 @@ index fa7a2a85adf7758a753c54a7cf75cc667922d3d7..b0a86aac9603e72062f59dbe67c88ed8 public boolean isClientAuthoritative() { return false; diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index 924dc9a32cd78f37078ff47cde54e61844572f47..d1e33c3ed23f4c68694ec3628c64e87dcbc916d9 100644 +index 096ee3a095468a7d0577f9adc7a9bf7cccc4727d..cf3d17009faee82e659b2ca6cabfae70abf96b8a 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java -@@ -1743,6 +1743,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0; // Paper - BlockPhysicsEvent serverLevel.hasEntityMoveEvent = io.papermc.paper.event.entity.EntityMoveEvent.getHandlerList().getRegisteredListeners().length > 0; // Paper - Add EntityMoveEvent serverLevel.updateLagCompensationTick(); // Paper - lag compensation - net.minecraft.world.level.block.entity.HopperBlockEntity.skipHopperEvents = serverLevel.paperConfig().hopper.disableMoveEvent || org.bukkit.event.inventory.InventoryMoveItemEvent.getHandlerList().getRegisteredListeners().length == 0; // Paper - Perf: Optimize Hoppers + serverLevel.hasRidableMoveEvent = org.purpurmc.purpur.event.entity.RidableMoveEvent.getHandlerList().getRegisteredListeners().length > 0; // Purpur - Ridables profilerFiller.push(() -> serverLevel + " " + serverLevel.dimension().location()); /* Drop global time updates if (this.tickCount % 20 == 0) { diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index f3f53791d4c5532434abc281a5798ee0e2653da2..56eabc55203756461fc679837b55b30a5c503268 100644 +index e4c88e1f99e684fadec47eeceb82420c879897cf..44a8629ec03c01597c7167c26d801c015157c242 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java -@@ -213,6 +213,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -215,6 +215,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe + public final java.util.UUID uuid; public boolean hasPhysicsEvent = true; // Paper - BlockPhysicsEvent public boolean hasEntityMoveEvent; // Paper - Add EntityMoveEvent - private final alternate.current.wire.WireHandler wireHandler = new alternate.current.wire.WireHandler(this); // Paper - optimize redstone (Alternate Current) + public boolean hasRidableMoveEvent = false; // Purpur - Ridables @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 5ced523477c2b86e2b46182a77a9d991cf4cdd1f..f55dc4affffd495b4c02b77c8a60f172c1c6cf79 100644 +index 14a7b040e9f5609a0e08783b60a767618a192de7..0c489a6d3357ed0d3dc9341440b87623d007da3f 100644 --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java -@@ -792,6 +792,15 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -761,6 +761,15 @@ public class ServerPlayer extends Player { this.trackEnteredOrExitedLavaOnVehicle(); this.updatePlayerAttributes(); this.advancements.flushDirty(this, true); @@ -62,10 +62,10 @@ index 5ced523477c2b86e2b46182a77a9d991cf4cdd1f..f55dc4affffd495b4c02b77c8a60f172 private void updatePlayerAttributes() { diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index c6b2591eb8ba7005919ea4b885f95c4d603305b6..9f695e97d247b24b12a4a115bfb012c7e344ccf8 100644 +index 7cdb4d46bb0ebdece3cdbe0dc2c156fe211da0d0..58be234e80a0c55642ba66a5001bac784c420a95 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -2831,6 +2831,8 @@ public class ServerGamePacketListenerImpl +@@ -2773,6 +2773,8 @@ public class ServerGamePacketListenerImpl ServerGamePacketListenerImpl.this.cserver.getPluginManager().callEvent(event); @@ -75,10 +75,10 @@ index c6b2591eb8ba7005919ea4b885f95c4d603305b6..9f695e97d247b24b12a4a115bfb012c7 if ((target instanceof net.minecraft.world.entity.animal.Bucketable && target instanceof LivingEntity && origItem != null && origItem == Items.WATER_BUCKET) && (event.isCancelled() || ServerGamePacketListenerImpl.this.player.getInventory().getSelectedItem().isEmpty() || !ServerGamePacketListenerImpl.this.player.getInventory().getSelectedItem().is(origItem))) { 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 b8a0abd1cbdc0c86ae9e68ebaeec14cd4728450e..05b936babba4fb9847dedb823406d06fa79a95c2 100644 +index fe1b49288dabc8aecfcae151b40fa76d633fc8c2..bce2b06cd7c0b9928a6538ddcd370f2c4d84a9ae 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java -@@ -3110,6 +3110,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3069,6 +3069,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess this.passengers = ImmutableList.copyOf(list); } @@ -92,7 +92,7 @@ index b8a0abd1cbdc0c86ae9e68ebaeec14cd4728450e..05b936babba4fb9847dedb823406d06f this.gameEvent(GameEvent.ENTITY_MOUNT, passenger); } } -@@ -3151,6 +3158,14 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3110,6 +3117,14 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return false; } // CraftBukkit end @@ -107,7 +107,7 @@ index b8a0abd1cbdc0c86ae9e68ebaeec14cd4728450e..05b936babba4fb9847dedb823406d06f if (this.passengers.size() == 1 && this.passengers.get(0) == passenger) { this.passengers = ImmutableList.of(); } else { -@@ -5153,4 +5168,44 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -5079,4 +5094,44 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return ((ServerLevel) this.level()).isPositionEntityTicking(this.blockPosition()); } // Paper end - Expose entity id counter @@ -153,10 +153,10 @@ index b8a0abd1cbdc0c86ae9e68ebaeec14cd4728450e..05b936babba4fb9847dedb823406d06f + // Purpur end - Ridables } diff --git a/net/minecraft/world/entity/GlowSquid.java b/net/minecraft/world/entity/GlowSquid.java -index bda521cca91f070139f5e9bdef6a50e1497f53ff..351f92e1627f465a9a292d4a5e5c256a8e323ab3 100644 +index f0c452ddc4b299a930de261722cc41a89aa78eeb..8e8ddab59de508c84c4182e105a11554387dcce0 100644 --- a/net/minecraft/world/entity/GlowSquid.java +++ b/net/minecraft/world/entity/GlowSquid.java -@@ -33,6 +33,19 @@ public class GlowSquid extends Squid { +@@ -34,6 +34,19 @@ public class GlowSquid extends Squid { } // Purpur end - Flying squids! Oh my! @@ -177,10 +177,10 @@ index bda521cca91f070139f5e9bdef6a50e1497f53ff..351f92e1627f465a9a292d4a5e5c256a 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 20d9856daa5ef4c42010381091c2a85e0755fa77..133da6ac0fff416c5849b64f053ca4cd105d00ac 100644 +index 65cb0a0cfa3d75e4d1083b7e6b22ca1b2682dc49..e78d30d8fdfcb1a530bf3380251fabd0c9a18f46 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java -@@ -226,9 +226,9 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -238,9 +238,9 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin protected int noActionTime; public float lastHurt; public boolean jumping; @@ -193,7 +193,7 @@ index 20d9856daa5ef4c42010381091c2a85e0755fa77..133da6ac0fff416c5849b64f053ca4cd protected InterpolationHandler interpolation = new InterpolationHandler(this); protected double lerpYHeadRot; protected int lerpHeadSteps; -@@ -277,7 +277,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -290,7 +290,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin protected LivingEntity(EntityType entityType, Level level) { super(entityType, level); @@ -202,15 +202,15 @@ index 20d9856daa5ef4c42010381091c2a85e0755fa77..133da6ac0fff416c5849b64f053ca4cd 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()); -@@ -350,6 +350,7 @@ public abstract class LivingEntity extends Entity implements Attackable { - .add(Attributes.MOVEMENT_EFFICIENCY) - .add(Attributes.ATTACK_KNOCKBACK); +@@ -364,6 +364,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin + .add(Attributes.CAMERA_DISTANCE) + .add(Attributes.WAYPOINT_TRANSMIT_RANGE); } + public boolean shouldSendAttribute(Attribute attribute) { return true; } // Purpur - Ridables @Override protected void checkFallDamage(double y, boolean onGround, BlockState state, BlockPos pos) { -@@ -3577,8 +3578,10 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3629,8 +3630,10 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin this.pushEntities(); profilerFiller.pop(); // Paper start - Add EntityMoveEvent @@ -223,7 +223,7 @@ index 20d9856daa5ef4c42010381091c2a85e0755fa77..133da6ac0fff416c5849b64f053ca4cd 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()); -@@ -3588,6 +3591,21 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3640,6 +3643,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()); } } @@ -246,10 +246,10 @@ index 20d9856daa5ef4c42010381091c2a85e0755fa77..133da6ac0fff416c5849b64f053ca4cd // 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 e3b804f2d612ed7971db450aeea6768109b63470..ca1d0164c90e695731f05de39c1d2fff947ecfc1 100644 +index 9784ae86390748bf72e2cc75d67b99f766335ee8..3215ca469e0e469089a559672739e91c9db0edaf 100644 --- a/net/minecraft/world/entity/Mob.java +++ b/net/minecraft/world/entity/Mob.java -@@ -142,8 +142,8 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -145,8 +145,8 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab super(entityType, level); this.goalSelector = new GoalSelector(); this.targetSelector = new GoalSelector(); @@ -260,7 +260,7 @@ index e3b804f2d612ed7971db450aeea6768109b63470..ca1d0164c90e695731f05de39c1d2fff this.jumpControl = new JumpControl(this); this.bodyRotationControl = this.createBodyControl(); this.navigation = this.createNavigation(level); -@@ -1279,7 +1279,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -1300,7 +1300,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab } protected InteractionResult mobInteract(Player player, InteractionHand hand) { @@ -268,8 +268,8 @@ index e3b804f2d612ed7971db450aeea6768109b63470..ca1d0164c90e695731f05de39c1d2fff + return tryRide(player, hand); // Purpur - Ridables } - public boolean isWithinRestriction() { -@@ -1591,4 +1591,58 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab + public boolean isWithinHome() { +@@ -1617,4 +1617,58 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab this.getNavigation().updatePathfinderMaxVisitedNodes(); } } @@ -329,7 +329,7 @@ index e3b804f2d612ed7971db450aeea6768109b63470..ca1d0164c90e695731f05de39c1d2fff + // Purpur end - Ridables } diff --git a/net/minecraft/world/entity/ai/attributes/AttributeMap.java b/net/minecraft/world/entity/ai/attributes/AttributeMap.java -index bed9b564c493cd84bf53fc49368fda736f3fbc2b..23576e631ad4a12ec3ff3630be253738534588f3 100644 +index fdb02fc40579866167e8cc9bcefbd961588b53a6..7dd8c1c8e27410854ce1ee90defc607c2710b5a2 100644 --- a/net/minecraft/world/entity/ai/attributes/AttributeMap.java +++ b/net/minecraft/world/entity/ai/attributes/AttributeMap.java @@ -18,14 +18,21 @@ public class AttributeMap { @@ -366,10 +366,10 @@ index bed9b564c493cd84bf53fc49368fda736f3fbc2b..23576e631ad4a12ec3ff3630be253738 @Nullable diff --git a/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java b/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java -index e6fd15c3172a951d6551cf3fb42f92f39f1cf7b8..75d8fe03558ba38caf46c826dfea5208f88bde52 100644 +index 26ffe98c94b2aaf61bf1693e86e8e7962e892a09..4bb7a8955182d786a09fd2667b37a93373ff47be 100644 --- a/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java +++ b/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java -@@ -131,7 +131,7 @@ public class DefaultAttributes { +@@ -133,7 +133,7 @@ public class DefaultAttributes { .put(EntityType.OCELOT, Ocelot.createAttributes().build()) .put(EntityType.PANDA, Panda.createAttributes().build()) .put(EntityType.PARROT, Parrot.createAttributes().build()) @@ -379,7 +379,7 @@ index e6fd15c3172a951d6551cf3fb42f92f39f1cf7b8..75d8fe03558ba38caf46c826dfea5208 .put(EntityType.PIGLIN, Piglin.createAttributes().build()) .put(EntityType.PIGLIN_BRUTE, PiglinBrute.createAttributes().build()) diff --git a/net/minecraft/world/entity/ai/control/MoveControl.java b/net/minecraft/world/entity/ai/control/MoveControl.java -index cdd85c11a214db4829305eb54e0de9670a9241ac..88adfbb7998515f1f64b2d4121549179dc719375 100644 +index b6921582adef6f4c48de4dcffd6873ac0f909a08..89ee325b26ec3a647f55e45c9122ff4196433a43 100644 --- a/net/minecraft/world/entity/ai/control/MoveControl.java +++ b/net/minecraft/world/entity/ai/control/MoveControl.java @@ -29,6 +29,20 @@ public class MoveControl implements Control { @@ -426,10 +426,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 ed8920bb6d29ce49626bc716aa2c2ce938f6d92b..99845dde0c633714acefb0bb482d8422d946dd46 100644 +index c1c9d056f5c78d26c777728c09b2481f9ccd1c3b..ed4016af3532f33023a3267cd0daa10757765fa3 100644 --- a/net/minecraft/world/entity/ambient/Bat.java +++ b/net/minecraft/world/entity/ambient/Bat.java -@@ -43,11 +43,58 @@ public class Bat extends AmbientCreature { +@@ -44,11 +44,58 @@ public class Bat extends AmbientCreature { public Bat(EntityType entityType, Level level) { super(entityType, level); @@ -488,7 +488,7 @@ index ed8920bb6d29ce49626bc716aa2c2ce938f6d92b..99845dde0c633714acefb0bb482d8422 @Override public boolean isFlapping() { return !this.isResting() && this.tickCount % 10.0F == 0.0F; -@@ -99,7 +146,7 @@ public class Bat extends AmbientCreature { +@@ -100,7 +147,7 @@ public class Bat extends AmbientCreature { } public static AttributeSupplier.Builder createAttributes() { @@ -497,7 +497,7 @@ index ed8920bb6d29ce49626bc716aa2c2ce938f6d92b..99845dde0c633714acefb0bb482d8422 } public boolean isResting() { -@@ -130,6 +177,14 @@ public class Bat extends AmbientCreature { +@@ -131,6 +178,14 @@ public class Bat extends AmbientCreature { @Override protected void customServerAiStep(ServerLevel level) { @@ -541,10 +541,10 @@ index 4e81bc7215c845b316bcd46ce29f49af7f986088..61e7300bbf272398b2faebf5e537d9c2 // CraftBukkit end player.playSound(SoundEvents.COW_MILK, 1.0F, 1.0F); diff --git a/net/minecraft/world/entity/animal/AbstractFish.java b/net/minecraft/world/entity/animal/AbstractFish.java -index 363582056339f64dbe7e686b61451c095c538c00..2cf95769ec3a1662443ea31e1bc2ba01cb7b523e 100644 +index b18765bb91b4015bef326663dbc8966945929996..0002e39e2670ad92849ccc0aada163b174fe1ec2 100644 --- a/net/minecraft/world/entity/animal/AbstractFish.java +++ b/net/minecraft/world/entity/animal/AbstractFish.java -@@ -88,6 +88,7 @@ public abstract class AbstractFish extends WaterAnimal implements Bucketable { +@@ -90,6 +90,7 @@ public abstract class AbstractFish extends WaterAnimal implements Bucketable { @Override protected void registerGoals() { super.registerGoals(); @@ -552,7 +552,7 @@ index 363582056339f64dbe7e686b61451c095c538c00..2cf95769ec3a1662443ea31e1bc2ba01 this.goalSelector.addGoal(0, new PanicGoal(this, 1.25)); this.goalSelector.addGoal(2, new AvoidEntityGoal<>(this, Player.class, 8.0F, 1.6, 1.4, EntitySelector.NO_SPECTATORS::test)); this.goalSelector.addGoal(4, new AbstractFish.FishSwimGoal(this)); -@@ -101,7 +102,7 @@ public abstract class AbstractFish extends WaterAnimal implements Bucketable { +@@ -103,7 +104,7 @@ public abstract class AbstractFish extends WaterAnimal implements Bucketable { @Override public void travel(Vec3 travelVector) { if (this.isInWater()) { @@ -561,7 +561,7 @@ index 363582056339f64dbe7e686b61451c095c538c00..2cf95769ec3a1662443ea31e1bc2ba01 this.move(MoverType.SELF, this.getDeltaMovement()); this.setDeltaMovement(this.getDeltaMovement().scale(0.9)); if (this.getTarget() == null) { -@@ -161,7 +162,7 @@ public abstract class AbstractFish extends WaterAnimal implements Bucketable { +@@ -163,7 +164,7 @@ public abstract class AbstractFish extends WaterAnimal implements Bucketable { protected void playStepSound(BlockPos pos, BlockState block) { } @@ -570,7 +570,7 @@ index 363582056339f64dbe7e686b61451c095c538c00..2cf95769ec3a1662443ea31e1bc2ba01 private final AbstractFish fish; FishMoveControl(AbstractFish mob) { -@@ -169,14 +170,22 @@ public abstract class AbstractFish extends WaterAnimal implements Bucketable { +@@ -171,14 +172,22 @@ public abstract class AbstractFish extends WaterAnimal implements Bucketable { this.fish = mob; } @@ -596,10 +596,10 @@ index 363582056339f64dbe7e686b61451c095c538c00..2cf95769ec3a1662443ea31e1bc2ba01 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 585131365c40136cf8a8a715b077982091ee38d5..65ee07e09bb9bafb60abeec4916fdbb065fc26eb 100644 +index 5588eb85a101f118fcaeb0a085f4d3b69498c72d..be1774d479bfcd349e62ecb69bf7367d6eea7d75 100644 --- a/net/minecraft/world/entity/animal/Bee.java +++ b/net/minecraft/world/entity/animal/Bee.java -@@ -149,6 +149,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -150,6 +150,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { public Bee(EntityType entityType, Level level) { super(entityType, level); @@ -607,7 +607,7 @@ index 585131365c40136cf8a8a715b077982091ee38d5..65ee07e09bb9bafb60abeec4916fdbb0 // Paper start - Fix MC-167279 class BeeFlyingMoveControl extends FlyingMoveControl { public BeeFlyingMoveControl(final Mob entity, final int maxPitchChange, final boolean noGravity) { -@@ -157,11 +158,24 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -158,11 +159,24 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { @Override public void tick() { @@ -632,7 +632,7 @@ index 585131365c40136cf8a8a715b077982091ee38d5..65ee07e09bb9bafb60abeec4916fdbb0 } this.moveControl = new BeeFlyingMoveControl(this, 20, true); // Paper end - Fix MC-167279 -@@ -173,6 +187,40 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -174,6 +188,40 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { this.setPathfindingMalus(PathType.FENCE, -1.0F); } @@ -673,7 +673,7 @@ index 585131365c40136cf8a8a715b077982091ee38d5..65ee07e09bb9bafb60abeec4916fdbb0 @Override protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); -@@ -187,6 +235,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -188,6 +236,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { @Override protected void registerGoals() { @@ -681,7 +681,7 @@ index 585131365c40136cf8a8a715b077982091ee38d5..65ee07e09bb9bafb60abeec4916fdbb0 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)); -@@ -204,6 +253,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -205,6 +254,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)); @@ -689,7 +689,7 @@ index 585131365c40136cf8a8a715b077982091ee38d5..65ee07e09bb9bafb60abeec4916fdbb0 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)); -@@ -1083,15 +1133,15 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -1081,15 +1131,15 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { } } @@ -709,10 +709,10 @@ index 585131365c40136cf8a8a715b077982091ee38d5..65ee07e09bb9bafb60abeec4916fdbb0 } diff --git a/net/minecraft/world/entity/animal/Cat.java b/net/minecraft/world/entity/animal/Cat.java -index 7894db23663c4647742f543195b610bd7e1f3360..74a44f97dcf4fabeac28a2f8b31e9b717d47ea49 100644 +index 5b9d8c85f91396287b0deb4deac30e2c136cc461..a960c3a4854f7d2343747d463d1d505b2e39d16b 100644 --- a/net/minecraft/world/entity/animal/Cat.java +++ b/net/minecraft/world/entity/animal/Cat.java -@@ -91,10 +91,36 @@ public class Cat extends TamableAnimal { +@@ -92,10 +92,36 @@ public class Cat extends TamableAnimal { this.reassessTameGoals(); } @@ -749,7 +749,7 @@ index 7894db23663c4647742f543195b610bd7e1f3360..74a44f97dcf4fabeac28a2f8b31e9b71 this.goalSelector.addGoal(1, new TamableAnimal.TamableAnimalPanicGoal(1.5)); this.goalSelector.addGoal(2, new SitWhenOrderedToGoal(this)); this.goalSelector.addGoal(3, new Cat.CatRelaxOnOwnerGoal(this)); -@@ -107,6 +133,7 @@ public class Cat extends TamableAnimal { +@@ -108,6 +134,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)); @@ -757,7 +757,7 @@ index 7894db23663c4647742f543195b610bd7e1f3360..74a44f97dcf4fabeac28a2f8b31e9b71 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)); } -@@ -373,6 +400,7 @@ public class Cat extends TamableAnimal { +@@ -374,6 +401,7 @@ public class Cat extends TamableAnimal { @Override public InteractionResult mobInteract(Player player, InteractionHand hand) { @@ -766,10 +766,10 @@ index 7894db23663c4647742f543195b610bd7e1f3360..74a44f97dcf4fabeac28a2f8b31e9b71 Item item = itemInHand.getItem(); if (this.isTame()) { diff --git a/net/minecraft/world/entity/animal/Chicken.java b/net/minecraft/world/entity/animal/Chicken.java -index 351c29ffe842cc1406c36361520057ab046ca649..8708a6e5a493b6150671b7bdd6b9971371ef309c 100644 +index da408c313d898413dee928e9c80501ddf56d75e8..26732fde9894816cb83ba1249b2ac9b47e2b639b 100644 --- a/net/minecraft/world/entity/animal/Chicken.java +++ b/net/minecraft/world/entity/animal/Chicken.java -@@ -71,9 +71,27 @@ public class Chicken extends Animal { +@@ -72,9 +72,27 @@ public class Chicken extends Animal { this.setPathfindingMalus(PathType.WATER, 0.0F); } @@ -821,10 +821,10 @@ index 75509be5b9162c1f7f91f2290ef2d80171ae61df..651c9243902e3c48fb438913974e996d public ItemStack getBucketItemStack() { return new ItemStack(Items.COD_BUCKET); diff --git a/net/minecraft/world/entity/animal/Cow.java b/net/minecraft/world/entity/animal/Cow.java -index 42c79a88679d2100528150d490554a75589e1ad8..ff1b8c93baccf1d417ef0f9338a6f8d66716dafc 100644 +index 176425cbacea381990386d440059b768a583af98..802c536659d45d0974fe788535ca326b86f90551 100644 --- a/net/minecraft/world/entity/animal/Cow.java +++ b/net/minecraft/world/entity/animal/Cow.java -@@ -28,6 +28,23 @@ public class Cow extends AbstractCow { +@@ -29,6 +29,23 @@ public class Cow extends AbstractCow { super(entityType, level); } @@ -849,10 +849,10 @@ index 42c79a88679d2100528150d490554a75589e1ad8..ff1b8c93baccf1d417ef0f9338a6f8d6 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 bca2e4659f4afdd7106f77e32af1943e4d276f5e..144b163a4a82997ca88e906bbadcf5835636aece 100644 +index f4a6f17bb158146e7287ab46930cd57c0ffb9454..213421070ce6a356aecc31ef7b13701b4403952a 100644 --- a/net/minecraft/world/entity/animal/Dolphin.java +++ b/net/minecraft/world/entity/animal/Dolphin.java -@@ -74,14 +74,82 @@ public class Dolphin extends AgeableWaterCreature { +@@ -75,14 +75,82 @@ public class Dolphin extends AgeableWaterCreature { @Nullable public BlockPos treasurePos; private boolean isNaturallyAggressiveToPlayers; // Purpur - Dolphins naturally aggressive to players chance @@ -936,7 +936,7 @@ index bca2e4659f4afdd7106f77e32af1943e4d276f5e..144b163a4a82997ca88e906bbadcf583 @Nullable @Override public SpawnGroupData finalizeSpawn( -@@ -158,6 +226,7 @@ public class Dolphin extends AgeableWaterCreature { +@@ -159,6 +227,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 @@ -944,7 +944,7 @@ index bca2e4659f4afdd7106f77e32af1943e4d276f5e..144b163a4a82997ca88e906bbadcf583 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)); -@@ -168,6 +237,7 @@ public class Dolphin extends AgeableWaterCreature { +@@ -169,6 +238,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)); @@ -952,7 +952,7 @@ index bca2e4659f4afdd7106f77e32af1943e4d276f5e..144b163a4a82997ca88e906bbadcf583 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 } -@@ -213,7 +283,7 @@ public class Dolphin extends AgeableWaterCreature { +@@ -214,7 +284,7 @@ public class Dolphin extends AgeableWaterCreature { @Override protected boolean canRide(Entity entity) { @@ -961,7 +961,7 @@ index bca2e4659f4afdd7106f77e32af1943e4d276f5e..144b163a4a82997ca88e906bbadcf583 } @Override -@@ -242,6 +312,11 @@ public class Dolphin extends AgeableWaterCreature { +@@ -243,6 +313,11 @@ public class Dolphin extends AgeableWaterCreature { @Override public void tick() { super.tick(); @@ -974,10 +974,10 @@ index bca2e4659f4afdd7106f77e32af1943e4d276f5e..144b163a4a82997ca88e906bbadcf583 this.setAirSupply(this.getMaxAirSupply()); } else { diff --git a/net/minecraft/world/entity/animal/Fox.java b/net/minecraft/world/entity/animal/Fox.java -index 4aae42396bd3abb131efe336d7b774384897671d..eb25d655140e425208ee9eeae24ebb756f1b7306 100644 +index 354c7a41407fc6518965d09bfe3089676b6da794..a81ada76bfd6c4b49d1552f48e2009bc7d8c71d2 100644 --- a/net/minecraft/world/entity/animal/Fox.java +++ b/net/minecraft/world/entity/animal/Fox.java -@@ -141,6 +141,44 @@ public class Fox extends Animal { +@@ -142,6 +142,44 @@ public class Fox extends Animal { this.getNavigation().setRequiredPathLength(32.0F); } @@ -1022,7 +1022,7 @@ index 4aae42396bd3abb131efe336d7b774384897671d..eb25d655140e425208ee9eeae24ebb75 @Override protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); -@@ -160,6 +198,7 @@ public class Fox extends Animal { +@@ -161,6 +199,7 @@ public class Fox extends Animal { this, AbstractFish.class, 20, false, false, (entity, level) -> entity instanceof AbstractSchoolingFish ); this.goalSelector.addGoal(0, new Fox.FoxFloatGoal()); @@ -1030,7 +1030,7 @@ index 4aae42396bd3abb131efe336d7b774384897671d..eb25d655140e425208ee9eeae24ebb75 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)); -@@ -185,6 +224,7 @@ public class Fox extends Animal { +@@ -186,6 +225,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()); @@ -1038,7 +1038,7 @@ index 4aae42396bd3abb131efe336d7b774384897671d..eb25d655140e425208ee9eeae24ebb75 this.targetSelector .addGoal( 3, -@@ -1118,15 +1158,15 @@ public class Fox extends Animal { +@@ -1115,15 +1155,15 @@ public class Fox extends Animal { } } @@ -1057,7 +1057,7 @@ index 4aae42396bd3abb131efe336d7b774384897671d..eb25d655140e425208ee9eeae24ebb75 } } -@@ -1162,15 +1202,15 @@ public class Fox extends Animal { +@@ -1159,15 +1199,15 @@ public class Fox extends Animal { } } @@ -1077,10 +1077,10 @@ index 4aae42396bd3abb131efe336d7b774384897671d..eb25d655140e425208ee9eeae24ebb75 } } diff --git a/net/minecraft/world/entity/animal/IronGolem.java b/net/minecraft/world/entity/animal/IronGolem.java -index 91897447d7ef35af3300443e8eb96340081fed48..3a78342a9ce9b5393a280530b50a8c843e201845 100644 +index 25e0438e1a98dc5f6aaabba8af2295cec871d6f1..d7c330e77c384bba800829bdbe07f6b66695896e 100644 --- a/net/minecraft/world/entity/animal/IronGolem.java +++ b/net/minecraft/world/entity/animal/IronGolem.java -@@ -74,9 +74,28 @@ public class IronGolem extends AbstractGolem implements NeutralMob { +@@ -75,9 +75,28 @@ public class IronGolem extends AbstractGolem implements NeutralMob { } // Purpur end - Summoner API @@ -1109,7 +1109,7 @@ index 91897447d7ef35af3300443e8eb96340081fed48..3a78342a9ce9b5393a280530b50a8c84 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)); -@@ -84,6 +103,7 @@ public class IronGolem extends AbstractGolem implements NeutralMob { +@@ -85,6 +104,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)); @@ -1117,7 +1117,7 @@ index 91897447d7ef35af3300443e8eb96340081fed48..3a78342a9ce9b5393a280530b50a8c84 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)); -@@ -272,12 +292,12 @@ public class IronGolem extends AbstractGolem implements NeutralMob { +@@ -273,12 +293,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)) { @@ -1133,10 +1133,10 @@ index 91897447d7ef35af3300443e8eb96340081fed48..3a78342a9ce9b5393a280530b50a8c84 float f = 1.0F + (this.random.nextFloat() - this.random.nextFloat()) * 0.2F; this.playSound(SoundEvents.IRON_GOLEM_REPAIR, 1.0F, f); diff --git a/net/minecraft/world/entity/animal/MushroomCow.java b/net/minecraft/world/entity/animal/MushroomCow.java -index 0931bab3f52ccc4e405be22559323df90bcc065e..f04342dd4addb2be47533f12a2a475f12c1869f1 100644 +index 32f3d5f66fb61074a2f9db751c0b3e16af9cf3ce..80c25b591e0b9f3f8132cdad27d1896d70293cd2 100644 --- a/net/minecraft/world/entity/animal/MushroomCow.java +++ b/net/minecraft/world/entity/animal/MushroomCow.java -@@ -61,6 +61,23 @@ public class MushroomCow extends AbstractCow implements Shearable { +@@ -62,6 +62,23 @@ public class MushroomCow extends AbstractCow implements Shearable { super(entityType, level); } @@ -1160,7 +1160,7 @@ index 0931bab3f52ccc4e405be22559323df90bcc065e..f04342dd4addb2be47533f12a2a475f1 @Override public float getWalkTargetValue(BlockPos pos, LevelReader level) { return level.getBlockState(pos.below()).is(Blocks.MYCELIUM) ? 10.0F : level.getPathfindingCostFromLightLevels(pos); -@@ -121,7 +138,7 @@ public class MushroomCow extends AbstractCow implements Shearable { +@@ -122,7 +139,7 @@ public class MushroomCow extends AbstractCow implements Shearable { 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) { @@ -1170,10 +1170,10 @@ index 0931bab3f52ccc4e405be22559323df90bcc065e..f04342dd4addb2be47533f12a2a475f1 // Paper end - custom shear drops } diff --git a/net/minecraft/world/entity/animal/Ocelot.java b/net/minecraft/world/entity/animal/Ocelot.java -index 48c8fdfea8687f37187b6092c285275c12963ea0..b8780911350ac5f4f10acdbed2b13523c8692344 100644 +index a304a09eb20b84033ea9b84cf577749fe842fc57..2aad5800fa4e2fc68fb63ab440dc9d5fccb2d86b 100644 --- a/net/minecraft/world/entity/animal/Ocelot.java +++ b/net/minecraft/world/entity/animal/Ocelot.java -@@ -63,6 +63,23 @@ public class Ocelot extends Animal { +@@ -64,6 +64,23 @@ public class Ocelot extends Animal { this.reassessTrustingGoals(); } @@ -1197,7 +1197,7 @@ index 48c8fdfea8687f37187b6092c285275c12963ea0..b8780911350ac5f4f10acdbed2b13523 public boolean isTrusting() { return this.entityData.get(DATA_TRUSTING); } -@@ -94,12 +111,14 @@ public class Ocelot extends Animal { +@@ -95,12 +112,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)); @@ -1213,10 +1213,10 @@ index 48c8fdfea8687f37187b6092c285275c12963ea0..b8780911350ac5f4f10acdbed2b13523 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 ecd85f3e33f80084b9ee06c9ff1f57b73399be50..44af6a2bcb1ba60a487555c5240b38798798b769 100644 +index 44c12820b9b39acc5220db8b8d29a31c0e57526e..cbe493c19cd377c3b284dd9b3ea7bf24fee5cd7c 100644 --- a/net/minecraft/world/entity/animal/Panda.java +++ b/net/minecraft/world/entity/animal/Panda.java -@@ -106,6 +106,32 @@ public class Panda extends Animal { +@@ -107,6 +107,32 @@ public class Panda extends Animal { } } @@ -1249,7 +1249,7 @@ index ecd85f3e33f80084b9ee06c9ff1f57b73399be50..44af6a2bcb1ba60a487555c5240b3879 @Override protected boolean canDispenserEquipIntoSlot(EquipmentSlot slot) { return slot == EquipmentSlot.MAINHAND && this.canPickUpLoot(); -@@ -259,6 +285,7 @@ public class Panda extends Animal { +@@ -260,6 +286,7 @@ public class Panda extends Animal { @Override protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); @@ -1257,7 +1257,7 @@ index ecd85f3e33f80084b9ee06c9ff1f57b73399be50..44af6a2bcb1ba60a487555c5240b3879 this.goalSelector.addGoal(2, new Panda.PandaPanicGoal(this, 2.0)); this.goalSelector.addGoal(2, new Panda.PandaBreedGoal(this, 1.0)); this.goalSelector.addGoal(3, new Panda.PandaAttackGoal(this, 1.2F, true)); -@@ -274,6 +301,7 @@ public class Panda extends Animal { +@@ -275,6 +302,7 @@ public class Panda extends Animal { this.goalSelector.addGoal(12, new Panda.PandaRollGoal(this)); this.goalSelector.addGoal(13, new FollowParentGoal(this, 1.25)); this.goalSelector.addGoal(14, new WaterAvoidingRandomStrollGoal(this, 1.0)); @@ -1265,7 +1265,7 @@ index ecd85f3e33f80084b9ee06c9ff1f57b73399be50..44af6a2bcb1ba60a487555c5240b3879 this.targetSelector.addGoal(1, new Panda.PandaHurtByTargetGoal(this).setAlertOthers(new Class[0])); } -@@ -617,7 +645,7 @@ public class Panda extends Animal { +@@ -618,7 +646,7 @@ public class Panda extends Animal { public InteractionResult mobInteract(Player player, InteractionHand hand) { ItemStack itemInHand = player.getItemInHand(hand); if (this.isScared()) { @@ -1274,7 +1274,7 @@ index ecd85f3e33f80084b9ee06c9ff1f57b73399be50..44af6a2bcb1ba60a487555c5240b3879 } else if (this.isOnBack()) { this.setOnBack(false); return InteractionResult.SUCCESS; -@@ -653,7 +681,7 @@ public class Panda extends Animal { +@@ -654,7 +682,7 @@ public class Panda extends Animal { return InteractionResult.SUCCESS_SERVER; } else { @@ -1283,7 +1283,7 @@ index ecd85f3e33f80084b9ee06c9ff1f57b73399be50..44af6a2bcb1ba60a487555c5240b3879 } } -@@ -961,7 +989,7 @@ public class Panda extends Animal { +@@ -962,7 +990,7 @@ public class Panda extends Animal { } } @@ -1292,7 +1292,7 @@ index ecd85f3e33f80084b9ee06c9ff1f57b73399be50..44af6a2bcb1ba60a487555c5240b3879 private final Panda panda; public PandaMoveControl(Panda mob) { -@@ -970,9 +998,9 @@ public class Panda extends Animal { +@@ -971,9 +999,9 @@ public class Panda extends Animal { } @Override @@ -1305,10 +1305,10 @@ index ecd85f3e33f80084b9ee06c9ff1f57b73399be50..44af6a2bcb1ba60a487555c5240b3879 } } diff --git a/net/minecraft/world/entity/animal/Parrot.java b/net/minecraft/world/entity/animal/Parrot.java -index ca661c215d2eb719392a30c7b917bd622524c4dc..573efbc5f5f4ad0be30868c7faa058e68bf2fd67 100644 +index 50d836960e6b2d7dae760ac648b5999d8c58b785..03e68a5bd1c51da13dafefe002f95884ee5787d0 100644 --- a/net/minecraft/world/entity/animal/Parrot.java +++ b/net/minecraft/world/entity/animal/Parrot.java -@@ -129,12 +129,68 @@ public class Parrot extends ShoulderRidingEntity implements FlyingAnimal { +@@ -131,12 +131,68 @@ public class Parrot extends ShoulderRidingEntity implements FlyingAnimal { public Parrot(EntityType entityType, Level level) { super(entityType, level); @@ -1378,7 +1378,7 @@ index ca661c215d2eb719392a30c7b917bd622524c4dc..573efbc5f5f4ad0be30868c7faa058e6 @Nullable @Override public SpawnGroupData finalizeSpawn( -@@ -155,9 +211,11 @@ public class Parrot extends ShoulderRidingEntity implements FlyingAnimal { +@@ -157,9 +213,11 @@ public class Parrot extends ShoulderRidingEntity implements FlyingAnimal { @Override protected void registerGoals() { @@ -1392,10 +1392,10 @@ index ca661c215d2eb719392a30c7b917bd622524c4dc..573efbc5f5f4ad0be30868c7faa058e6 this.goalSelector.addGoal(2, new SitWhenOrderedToGoal(this)); this.goalSelector.addGoal(2, new FollowOwnerGoal(this, 1.0, 5.0F, 1.0F)); diff --git a/net/minecraft/world/entity/animal/Pig.java b/net/minecraft/world/entity/animal/Pig.java -index 027d47b89d306bf6bc3d5457a163041f6aa7ab49..74d4be1761b9c9b45bf454f187d4454d9ee6a37f 100644 +index 858913db98c6f46867e5f5d3d1231e7f94b669ab..c2ac954b9cdea04450c7d72845568236fff1b686 100644 --- a/net/minecraft/world/entity/animal/Pig.java +++ b/net/minecraft/world/entity/animal/Pig.java -@@ -65,9 +65,27 @@ public class Pig extends Animal implements ItemSteerable { +@@ -66,9 +66,27 @@ public class Pig extends Animal implements ItemSteerable { super(entityType, level); } @@ -1424,10 +1424,10 @@ index 027d47b89d306bf6bc3d5457a163041f6aa7ab49..74d4be1761b9c9b45bf454f187d4454d this.goalSelector.addGoal(3, new BreedGoal(this, 1.0)); this.goalSelector.addGoal(4, new TemptGoal(this, 1.2, itemStack -> itemStack.is(Items.CARROT_ON_A_STICK), false)); diff --git a/net/minecraft/world/entity/animal/PolarBear.java b/net/minecraft/world/entity/animal/PolarBear.java -index d018b1a967557cfae0d3227d8f43d281a78a22bc..4561b590b0068bfbcfd990bbf8b6640c0bd1493c 100644 +index 0cbe162c952fe3cba5c33284d766aea514d6a40b..16dcc17778f3bde4c034a12259188d8297685dd9 100644 --- a/net/minecraft/world/entity/animal/PolarBear.java +++ b/net/minecraft/world/entity/animal/PolarBear.java -@@ -59,6 +59,7 @@ public class PolarBear extends Animal implements NeutralMob { +@@ -60,6 +60,7 @@ public class PolarBear extends Animal implements NeutralMob { private int remainingPersistentAngerTime; @Nullable private UUID persistentAngerTarget; @@ -1435,7 +1435,7 @@ index d018b1a967557cfae0d3227d8f43d281a78a22bc..4561b590b0068bfbcfd990bbf8b6640c public PolarBear(EntityType entityType, Level level) { super(entityType, level); -@@ -87,6 +88,34 @@ public class PolarBear extends Animal implements NeutralMob { +@@ -88,6 +89,34 @@ public class PolarBear extends Animal implements NeutralMob { } // Purpur end - Breedable Polar Bears @@ -1470,7 +1470,7 @@ index d018b1a967557cfae0d3227d8f43d281a78a22bc..4561b590b0068bfbcfd990bbf8b6640c @Nullable @Override public AgeableMob getBreedOffspring(ServerLevel level, AgeableMob otherParent) { -@@ -102,6 +131,7 @@ public class PolarBear extends Animal implements NeutralMob { +@@ -103,6 +132,7 @@ public class PolarBear extends Animal implements NeutralMob { protected void registerGoals() { super.registerGoals(); this.goalSelector.addGoal(0, new FloatGoal(this)); @@ -1478,7 +1478,7 @@ index d018b1a967557cfae0d3227d8f43d281a78a22bc..4561b590b0068bfbcfd990bbf8b6640c this.goalSelector.addGoal(1, new PolarBear.PolarBearMeleeAttackGoal()); this.goalSelector.addGoal(1, new PanicGoal(this, 2.0, mob -> mob.isBaby() ? DamageTypeTags.PANIC_CAUSES : DamageTypeTags.PANIC_ENVIRONMENTAL_CAUSES)); // Purpur start - Breedable Polar Bears -@@ -114,6 +144,7 @@ public class PolarBear extends Animal implements NeutralMob { +@@ -115,6 +145,7 @@ public class PolarBear extends Animal implements NeutralMob { this.goalSelector.addGoal(5, new RandomStrollGoal(this, 1.0)); this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 6.0F)); this.goalSelector.addGoal(7, new RandomLookAroundGoal(this)); @@ -1486,7 +1486,7 @@ index d018b1a967557cfae0d3227d8f43d281a78a22bc..4561b590b0068bfbcfd990bbf8b6640c this.targetSelector.addGoal(1, new PolarBear.PolarBearHurtByTargetGoal()); this.targetSelector.addGoal(2, new PolarBear.PolarBearAttackPlayersGoal()); this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, this::isAngryAt)); -@@ -232,6 +263,12 @@ public class PolarBear extends Animal implements NeutralMob { +@@ -233,6 +264,12 @@ public class PolarBear extends Animal implements NeutralMob { if (!this.level().isClientSide) { this.updatePersistentAnger((ServerLevel)this.level(), true); } @@ -1499,7 +1499,7 @@ index d018b1a967557cfae0d3227d8f43d281a78a22bc..4561b590b0068bfbcfd990bbf8b6640c } @Override -@@ -251,6 +288,7 @@ public class PolarBear extends Animal implements NeutralMob { +@@ -252,6 +289,7 @@ public class PolarBear extends Animal implements NeutralMob { public void setStanding(boolean standing) { this.entityData.set(DATA_STANDING_ID, standing); @@ -1508,10 +1508,10 @@ index d018b1a967557cfae0d3227d8f43d281a78a22bc..4561b590b0068bfbcfd990bbf8b6640c public float getStandingAnimationScale(float partialTick) { diff --git a/net/minecraft/world/entity/animal/Pufferfish.java b/net/minecraft/world/entity/animal/Pufferfish.java -index 4a7201fe9e946fc20ed04e729d00f7986a748bad..c35973498b0abae2dafa63f30ed5e6ca87f6baa5 100644 +index e67f9b26444e3af42feeb0223c1b7c1e536646ba..754cd3c887c22b9b2afb0d70a2c57bfe6b251206 100644 --- a/net/minecraft/world/entity/animal/Pufferfish.java +++ b/net/minecraft/world/entity/animal/Pufferfish.java -@@ -46,6 +46,18 @@ public class Pufferfish extends AbstractFish { +@@ -47,6 +47,18 @@ public class Pufferfish extends AbstractFish { this.refreshDimensions(); } @@ -1531,10 +1531,10 @@ index 4a7201fe9e946fc20ed04e729d00f7986a748bad..c35973498b0abae2dafa63f30ed5e6ca 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 e9445749c5264bd0ce7c426845cb342d34dea713..338a1d3f1352f49ba5b53c55a49abce3ded2b0c0 100644 +index 880cb3bdbd389a798c202c4dd572bf2b74bc0847..4f33044bf7c8fdf867983691b74a7f47b4689267 100644 --- a/net/minecraft/world/entity/animal/Rabbit.java +++ b/net/minecraft/world/entity/animal/Rabbit.java -@@ -90,6 +90,7 @@ public class Rabbit extends Animal { +@@ -91,6 +91,7 @@ public class Rabbit extends Animal { private boolean wasOnGround; private int jumpDelayTicks; public int moreCarrotTicks = 0; @@ -1542,7 +1542,7 @@ index e9445749c5264bd0ce7c426845cb342d34dea713..338a1d3f1352f49ba5b53c55a49abce3 public Rabbit(EntityType entityType, Level level) { super(entityType, level); -@@ -98,9 +99,55 @@ public class Rabbit extends Animal { +@@ -99,9 +100,55 @@ public class Rabbit extends Animal { //this.setSpeedModifier(0.0); // CraftBukkit } @@ -1598,7 +1598,7 @@ index e9445749c5264bd0ce7c426845cb342d34dea713..338a1d3f1352f49ba5b53c55a49abce3 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)); -@@ -115,6 +162,14 @@ public class Rabbit extends Animal { +@@ -116,6 +163,14 @@ public class Rabbit extends Animal { @Override protected float getJumpPower() { @@ -1613,7 +1613,7 @@ index e9445749c5264bd0ce7c426845cb342d34dea713..338a1d3f1352f49ba5b53c55a49abce3 float f = 0.3F; if (this.moveControl.getSpeedModifier() <= 0.6) { f = 0.2F; -@@ -182,6 +237,12 @@ public class Rabbit extends Animal { +@@ -183,6 +238,12 @@ public class Rabbit extends Animal { @Override public void customServerAiStep(ServerLevel level) { @@ -1626,7 +1626,7 @@ index e9445749c5264bd0ce7c426845cb342d34dea713..338a1d3f1352f49ba5b53c55a49abce3 if (this.jumpDelayTicks > 0) { this.jumpDelayTicks--; } -@@ -510,7 +571,7 @@ public class Rabbit extends Animal { +@@ -511,7 +572,7 @@ public class Rabbit extends Animal { } } @@ -1635,7 +1635,7 @@ index e9445749c5264bd0ce7c426845cb342d34dea713..338a1d3f1352f49ba5b53c55a49abce3 private final Rabbit rabbit; private double nextJumpSpeed; -@@ -520,14 +581,14 @@ public class Rabbit extends Animal { +@@ -521,14 +582,14 @@ public class Rabbit extends Animal { } @Override @@ -1653,10 +1653,10 @@ index e9445749c5264bd0ce7c426845cb342d34dea713..338a1d3f1352f49ba5b53c55a49abce3 @Override diff --git a/net/minecraft/world/entity/animal/Salmon.java b/net/minecraft/world/entity/animal/Salmon.java -index 1786205346bb02835b10676155b65d2f11f0c221..2b60d92eec3192416b0c39ddaa1fa490d15a6137 100644 +index 8a3e1d420263ac53b87ffed026380dcdc4a48285..265b2a6db778cabc1a97726c22c991051e3007fe 100644 --- a/net/minecraft/world/entity/animal/Salmon.java +++ b/net/minecraft/world/entity/animal/Salmon.java -@@ -38,6 +38,18 @@ public class Salmon extends AbstractSchoolingFish { +@@ -39,6 +39,18 @@ public class Salmon extends AbstractSchoolingFish { this.refreshDimensions(); } @@ -1676,10 +1676,10 @@ index 1786205346bb02835b10676155b65d2f11f0c221..2b60d92eec3192416b0c39ddaa1fa490 public int getMaxSchoolSize() { return 5; diff --git a/net/minecraft/world/entity/animal/SnowGolem.java b/net/minecraft/world/entity/animal/SnowGolem.java -index 67c8f1e82c775818f906eeaa639e55d7c02834c6..aca62391131333d604d21c9aaf2bcea620dc51b3 100644 +index 1a7c14f9307629386af0a62b3e19545728fa3a8d..6c7b218c01f466ccd1d427206c6662e23bea1c0e 100644 --- a/net/minecraft/world/entity/animal/SnowGolem.java +++ b/net/minecraft/world/entity/animal/SnowGolem.java -@@ -62,12 +62,31 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM +@@ -63,12 +63,31 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM } // Purpur end - Summoner API @@ -1711,7 +1711,7 @@ index 67c8f1e82c775818f906eeaa639e55d7c02834c6..aca62391131333d604d21c9aaf2bcea6 this.targetSelector.addGoal(1, new NearestAttackableTargetGoal<>(this, Mob.class, 10, true, false, (entity, level) -> entity instanceof Enemy)); } -@@ -112,6 +131,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM +@@ -113,6 +132,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM return; } @@ -1719,7 +1719,7 @@ index 67c8f1e82c775818f906eeaa639e55d7c02834c6..aca62391131333d604d21c9aaf2bcea6 BlockState blockState = Blocks.SNOW.defaultBlockState(); for (int i = 0; i < 4; i++) { -@@ -154,7 +174,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM +@@ -155,7 +175,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM org.bukkit.event.player.PlayerShearEntityEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.handlePlayerShearEntityEvent(player, this, itemInHand, hand, drops); if (event != null) { if (event.isCancelled()) { @@ -1728,7 +1728,7 @@ index 67c8f1e82c775818f906eeaa639e55d7c02834c6..aca62391131333d604d21c9aaf2bcea6 } drops = org.bukkit.craftbukkit.inventory.CraftItemStack.asNMSCopy(event.getDrops()); // Paper end - custom shear drops -@@ -175,7 +195,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM +@@ -176,7 +196,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM return InteractionResult.SUCCESS; // Purpur end - Snowman drop and put back pumpkin } else { @@ -1813,10 +1813,10 @@ index 2e51e64991d326fc055520b6fefc76e80f7c2d97..21ff0b49a1df9b8a95cb2fdf7b43d9a6 if (noActionTime > 100) { this.squid.movementVector = Vec3.ZERO; diff --git a/net/minecraft/world/entity/animal/TropicalFish.java b/net/minecraft/world/entity/animal/TropicalFish.java -index 89e14f04328995e6491c01321789be0bf9ddd438..d7bea58644dd707b835e0c728b2c89c697c7e554 100644 +index 806fb2561d1eb0fba56dc40ba5c1f306c3105880..cc26b929abd249536659df03a1cafbe83cde6f0f 100644 --- a/net/minecraft/world/entity/animal/TropicalFish.java +++ b/net/minecraft/world/entity/animal/TropicalFish.java -@@ -76,6 +76,18 @@ public class TropicalFish extends AbstractSchoolingFish { +@@ -77,6 +77,18 @@ public class TropicalFish extends AbstractSchoolingFish { super(entityType, level); } @@ -1836,10 +1836,10 @@ index 89e14f04328995e6491c01321789be0bf9ddd438..d7bea58644dd707b835e0c728b2c89c6 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 d24ddf8a585395c0f7b1cd5a61aaea0516636d93..7c97f917b0cc5652c20abdd26428cccad10b8757 100644 +index 8738424b92726f45de2c166a063d46e1071e8b29..4302c302d974bae294d7ffa6f30439f44fe5d0b1 100644 --- a/net/minecraft/world/entity/animal/Turtle.java +++ b/net/minecraft/world/entity/animal/Turtle.java -@@ -85,6 +85,23 @@ public class Turtle extends Animal { +@@ -86,6 +86,23 @@ public class Turtle extends Animal { this.moveControl = new Turtle.TurtleMoveControl(this); } @@ -1863,7 +1863,7 @@ index d24ddf8a585395c0f7b1cd5a61aaea0516636d93..7c97f917b0cc5652c20abdd26428ccca public void setHomePos(BlockPos homePos) { this.homePos = homePos; } -@@ -144,6 +161,7 @@ public class Turtle extends Animal { +@@ -145,6 +162,7 @@ public class Turtle extends Animal { @Override protected void registerGoals() { @@ -1871,7 +1871,7 @@ index d24ddf8a585395c0f7b1cd5a61aaea0516636d93..7c97f917b0cc5652c20abdd26428ccca 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)); -@@ -492,12 +510,14 @@ public class Turtle extends Animal { +@@ -493,12 +511,14 @@ public class Turtle extends Animal { } } @@ -1887,7 +1887,7 @@ index d24ddf8a585395c0f7b1cd5a61aaea0516636d93..7c97f917b0cc5652c20abdd26428ccca } private void updateSpeed() { -@@ -516,7 +536,7 @@ public class Turtle extends Animal { +@@ -517,7 +537,7 @@ public class Turtle extends Animal { } @Override @@ -1896,7 +1896,7 @@ index d24ddf8a585395c0f7b1cd5a61aaea0516636d93..7c97f917b0cc5652c20abdd26428ccca this.updateSpeed(); if (this.operation == MoveControl.Operation.MOVE_TO && !this.turtle.getNavigation().isDone()) { double d = this.wantedX - this.turtle.getX(); -@@ -530,7 +550,7 @@ public class Turtle extends Animal { +@@ -531,7 +551,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(); @@ -1906,10 +1906,10 @@ index d24ddf8a585395c0f7b1cd5a61aaea0516636d93..7c97f917b0cc5652c20abdd26428ccca 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 eaa1745d34323cd684782a7fb2e153851a736471..31371684bb2bddc6bf9592bef1190af3b09f4d65 100644 +index b7b964bd4e2d611a3e48ece072d5787193077a92..e05f92d31cae8ac143274c662b2eca18ebc378d7 100644 --- a/net/minecraft/world/entity/animal/allay/Allay.java +++ b/net/minecraft/world/entity/animal/allay/Allay.java -@@ -117,10 +117,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 @@ -1934,7 +1934,7 @@ index eaa1745d34323cd684782a7fb2e153851a736471..31371684bb2bddc6bf9592bef1190af3 this.setCanPickUpLoot(this.canPickUpLoot()); this.vibrationUser = new Allay.VibrationUser(); this.vibrationData = new VibrationSystem.Data(); -@@ -136,6 +149,28 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS +@@ -133,6 +146,28 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS } // CraftBukkit end @@ -1963,7 +1963,7 @@ index eaa1745d34323cd684782a7fb2e153851a736471..31371684bb2bddc6bf9592bef1190af3 @Override protected Brain.Provider brainProvider() { return Brain.provider(MEMORY_TYPES, SENSOR_TYPES); -@@ -243,6 +278,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"); @@ -1972,10 +1972,10 @@ index eaa1745d34323cd684782a7fb2e153851a736471..31371684bb2bddc6bf9592bef1190af3 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 b72e07ad954efa7f26f876a59f428086b40d9bb2..2b38e942492b3324683e05d36ed906462da92ac4 100644 +index c1798db2972c8f2a343cf6e16fd9354ff212d906..c13745fc848c56bfce6161099c27388dc4164cb3 100644 --- a/net/minecraft/world/entity/animal/armadillo/Armadillo.java +++ b/net/minecraft/world/entity/animal/armadillo/Armadillo.java -@@ -81,6 +81,23 @@ public class Armadillo extends Animal { +@@ -82,6 +82,23 @@ public class Armadillo extends Animal { return Animal.createAnimalAttributes().add(Attributes.MAX_HEALTH, 12.0).add(Attributes.MOVEMENT_SPEED, 0.14); } @@ -2000,10 +2000,10 @@ index b72e07ad954efa7f26f876a59f428086b40d9bb2..2b38e942492b3324683e05d36ed90646 protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); diff --git a/net/minecraft/world/entity/animal/axolotl/Axolotl.java b/net/minecraft/world/entity/animal/axolotl/Axolotl.java -index 233025bc1d4ba2590223def9b206140c68ea5f26..f3f0f5d7fe79e87b893aa52113f02a774ccc057a 100644 +index b0467750dab4c6f411fd2f318009d25f83d94bc0..8a21191672e524457f7f45782c57dd3638df1cec 100644 --- a/net/minecraft/world/entity/animal/axolotl/Axolotl.java +++ b/net/minecraft/world/entity/animal/axolotl/Axolotl.java -@@ -120,6 +120,23 @@ public class Axolotl extends Animal implements Bucketable { +@@ -122,6 +122,23 @@ public class Axolotl extends Animal implements Bucketable { this.lookControl = new Axolotl.AxolotlLookControl(this, 20); } @@ -2027,7 +2027,7 @@ index 233025bc1d4ba2590223def9b206140c68ea5f26..f3f0f5d7fe79e87b893aa52113f02a77 @Override public float getWalkTargetValue(BlockPos pos, LevelReader level) { return 0.0F; -@@ -329,6 +346,7 @@ public class Axolotl extends Animal implements Bucketable { +@@ -331,6 +348,7 @@ public class Axolotl extends Animal implements Bucketable { protected void customServerAiStep(ServerLevel level) { ProfilerFiller profilerFiller = Profiler.get(); profilerFiller.push("axolotlBrain"); @@ -2035,7 +2035,7 @@ index 233025bc1d4ba2590223def9b206140c68ea5f26..f3f0f5d7fe79e87b893aa52113f02a77 this.getBrain().tick(level, this); profilerFiller.pop(); profilerFiller.push("axolotlActivityUpdate"); -@@ -578,23 +596,31 @@ public class Axolotl extends Animal implements Bucketable { +@@ -580,23 +598,31 @@ public class Axolotl extends Animal implements Bucketable { } @Override @@ -2070,10 +2070,10 @@ index 233025bc1d4ba2590223def9b206140c68ea5f26..f3f0f5d7fe79e87b893aa52113f02a77 super.tick(); } diff --git a/net/minecraft/world/entity/animal/camel/Camel.java b/net/minecraft/world/entity/animal/camel/Camel.java -index 6336fb58f4314be2fe987d7e3de258d977369417..3d4efc2918fd10a63065a052d9e460b49489cf00 100644 +index 757b63ee059c95e673a098706b4ee7ab4fc21f70..78073cf5c93389224ccf7d7036d6b11af05280b6 100644 --- a/net/minecraft/world/entity/animal/camel/Camel.java +++ b/net/minecraft/world/entity/animal/camel/Camel.java -@@ -89,6 +89,13 @@ public class Camel extends AbstractHorse { +@@ -91,6 +91,13 @@ public class Camel extends AbstractHorse { groundPathNavigation.setCanWalkOverFences(true); } @@ -2085,13 +2085,13 @@ index 6336fb58f4314be2fe987d7e3de258d977369417..3d4efc2918fd10a63065a052d9e460b4 + // Purpur end - Ridables + @Override - public void addAdditionalSaveData(CompoundTag compound) { - super.addAdditionalSaveData(compound); + protected void addAdditionalSaveData(ValueOutput output) { + super.addAdditionalSaveData(output); diff --git a/net/minecraft/world/entity/animal/frog/Frog.java b/net/minecraft/world/entity/animal/frog/Frog.java -index 8ffbe420528cd63f30f9b41d4fb0a6519042eadc..054811d807c56018617dc4a8e10af87ed15ad00c 100644 +index 66f503e045ccb0985ec718b39be07eea538fad8d..0bb0c875b12c94e9fb42b81210c5935cb5efecf8 100644 --- a/net/minecraft/world/entity/animal/frog/Frog.java +++ b/net/minecraft/world/entity/animal/frog/Frog.java -@@ -105,6 +105,8 @@ public class Frog extends Animal { +@@ -106,6 +106,8 @@ public class Frog extends Animal { public final AnimationState croakAnimationState = new AnimationState(); public final AnimationState tongueAnimationState = new AnimationState(); public final AnimationState swimIdleAnimationState = new AnimationState(); @@ -2100,7 +2100,7 @@ index 8ffbe420528cd63f30f9b41d4fb0a6519042eadc..054811d807c56018617dc4a8e10af87e public Frog(EntityType entityType, Level level) { super(entityType, level); -@@ -112,7 +114,55 @@ public class Frog extends Animal { +@@ -113,7 +115,55 @@ public class Frog extends Animal { this.setPathfindingMalus(PathType.WATER, 4.0F); this.setPathfindingMalus(PathType.TRAPDOOR, -1.0F); this.moveControl = new SmoothSwimmingMoveControl(this, 85, 10, 0.02F, 0.1F, true); @@ -2156,7 +2156,7 @@ index 8ffbe420528cd63f30f9b41d4fb0a6519042eadc..054811d807c56018617dc4a8e10af87e @Override protected Brain.Provider brainProvider() { -@@ -205,6 +255,7 @@ public class Frog extends Animal { +@@ -206,6 +256,7 @@ public class Frog extends Animal { protected void customServerAiStep(ServerLevel level) { ProfilerFiller profilerFiller = Profiler.get(); profilerFiller.push("frogBrain"); @@ -2164,7 +2164,7 @@ index 8ffbe420528cd63f30f9b41d4fb0a6519042eadc..054811d807c56018617dc4a8e10af87e this.getBrain().tick(level, this); profilerFiller.pop(); profilerFiller.push("frogActivityUpdate"); -@@ -389,7 +440,7 @@ public class Frog extends Animal { +@@ -390,7 +441,7 @@ public class Frog extends Animal { return level.getBlockState(pos.below()).is(BlockTags.FROGS_SPAWNABLE_ON) && isBrightEnoughToSpawn(level, pos); } @@ -2174,10 +2174,10 @@ index 8ffbe420528cd63f30f9b41d4fb0a6519042eadc..054811d807c56018617dc4a8e10af87e super(mob); } diff --git a/net/minecraft/world/entity/animal/frog/Tadpole.java b/net/minecraft/world/entity/animal/frog/Tadpole.java -index ebdfd3fb6c0de48982d392bb2aa415f3676c6056..4db2d63fbc021f28b8ad8d20cc1cc1bb257b057f 100644 +index 17f58246849ed407821a987b200cc765eb7943f9..6932e85b3db0205f9a69d9ef965a934f100e6bcf 100644 --- a/net/minecraft/world/entity/animal/frog/Tadpole.java +++ b/net/minecraft/world/entity/animal/frog/Tadpole.java -@@ -64,13 +64,50 @@ public class Tadpole extends AbstractFish { +@@ -66,13 +66,50 @@ public class Tadpole extends AbstractFish { MemoryModuleType.IS_PANICKING ); public boolean ageLocked; // Paper @@ -2229,7 +2229,7 @@ index ebdfd3fb6c0de48982d392bb2aa415f3676c6056..4db2d63fbc021f28b8ad8d20cc1cc1bb @Override protected PathNavigation createNavigation(Level level) { return new WaterBoundPathNavigation(this, level); -@@ -100,6 +137,7 @@ public class Tadpole extends AbstractFish { +@@ -102,6 +139,7 @@ public class Tadpole extends AbstractFish { protected void customServerAiStep(ServerLevel level) { ProfilerFiller profilerFiller = Profiler.get(); profilerFiller.push("tadpoleBrain"); @@ -2238,10 +2238,10 @@ index ebdfd3fb6c0de48982d392bb2aa415f3676c6056..4db2d63fbc021f28b8ad8d20cc1cc1bb 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 c399192687e01bd4a05e4a85d71493d4c3c3e9a8..b922d8c37b89a5762c8ed29e6a5fa545f408511e 100644 +index d5e5ea2a20739b81742b1a5323d19f2d01baec25..f106d5bbbe9227b2c7cc4cc24ade57d8df9b4e10 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)); } @@ -2265,7 +2265,7 @@ index c399192687e01bd4a05e4a85d71493d4c3c3e9a8..b922d8c37b89a5762c8ed29e6a5fa545 @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"); @@ -2274,10 +2274,10 @@ index c399192687e01bd4a05e4a85d71493d4c3c3e9a8..b922d8c37b89a5762c8ed29e6a5fa545 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 7c473eea481f5e055cc70512027726f41f0c6f67..8bd9fd0a017b9822129119d7e16e872f0bdc8c2d 100644 +index 31ed5d7cfbda1a1f98ebfc89f5cbc65332cabdae..ba56d68737cedabcddafafb18022f7c106631ca4 100644 --- a/net/minecraft/world/entity/animal/horse/AbstractHorse.java +++ b/net/minecraft/world/entity/animal/horse/AbstractHorse.java -@@ -126,11 +126,21 @@ public abstract class AbstractHorse extends Animal implements HasCustomInventory +@@ -127,11 +127,21 @@ public abstract class AbstractHorse extends Animal implements HasCustomInventory protected AbstractHorse(EntityType entityType, Level level) { super(entityType, level); @@ -2299,7 +2299,7 @@ index 7c473eea481f5e055cc70512027726f41f0c6f67..8bd9fd0a017b9822129119d7e16e872f 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)); -@@ -141,6 +151,7 @@ public abstract class AbstractHorse extends Animal implements HasCustomInventory +@@ -142,6 +152,7 @@ public abstract class AbstractHorse extends Animal implements HasCustomInventory if (this.canPerformRearing()) { this.goalSelector.addGoal(9, new RandomStandGoal(this)); } @@ -2326,10 +2326,10 @@ index 5dff98b5b2e4bba5f874d6a99d034a3905775c9b..66dda36aeb668488076f0c93dc83ab6c public SoundEvent getAmbientSound() { return SoundEvents.DONKEY_AMBIENT; diff --git a/net/minecraft/world/entity/animal/horse/Horse.java b/net/minecraft/world/entity/animal/horse/Horse.java -index a0d85cd6c5306385b074a636166ff8eee2b320ce..5b2d1fedf61880990ca29b51b3d83a19e79047d1 100644 +index 2a1d720557c0bd4895a32723e34512c0a557e4f2..f1cb2e315e1d86f9fcd87db11d3ee7a81cfe12f6 100644 --- a/net/minecraft/world/entity/animal/horse/Horse.java +++ b/net/minecraft/world/entity/animal/horse/Horse.java -@@ -46,6 +46,13 @@ public class Horse extends AbstractHorse { +@@ -47,6 +47,13 @@ public class Horse extends AbstractHorse { super(entityType, level); } @@ -2344,10 +2344,10 @@ index a0d85cd6c5306385b074a636166ff8eee2b320ce..5b2d1fedf61880990ca29b51b3d83a19 protected void randomizeAttributes(RandomSource random) { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(generateMaxHealth(random::nextInt)); diff --git a/net/minecraft/world/entity/animal/horse/Llama.java b/net/minecraft/world/entity/animal/horse/Llama.java -index d4467235e8dc9d10c61dfb6fd9dc32386903dd09..b60fa4cb07d8dc6b52e76b5e9f596bafc815ba2d 100644 +index 5e3382351b1b5728750534f64babc85c4da3ac54..da6450f7573ca9797577d5afae2bb1365d112177 100644 --- a/net/minecraft/world/entity/animal/horse/Llama.java +++ b/net/minecraft/world/entity/animal/horse/Llama.java -@@ -83,7 +83,51 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob { +@@ -84,7 +84,51 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob { super(entityType, level); this.getNavigation().setRequiredPathLength(40.0F); this.maxDomestication = 30; // Paper - Missing entity API; configure max temper instead of a hardcoded value @@ -2399,7 +2399,7 @@ index d4467235e8dc9d10c61dfb6fd9dc32386903dd09..b60fa4cb07d8dc6b52e76b5e9f596baf public boolean isTraderLlama() { return false; -@@ -126,6 +170,7 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob { +@@ -127,6 +171,7 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob { @Override protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); @@ -2407,7 +2407,7 @@ index d4467235e8dc9d10c61dfb6fd9dc32386903dd09..b60fa4cb07d8dc6b52e76b5e9f596baf this.goalSelector.addGoal(1, new RunAroundLikeCrazyGoal(this, 1.2)); this.goalSelector.addGoal(2, new LlamaFollowCaravanGoal(this, 2.1F)); this.goalSelector.addGoal(3, new RangedAttackGoal(this, 1.25, 40, 20.0F)); -@@ -136,6 +181,7 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob { +@@ -137,6 +182,7 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob { this.goalSelector.addGoal(7, new WaterAvoidingRandomStrollGoal(this, 0.7)); this.goalSelector.addGoal(8, new LookAtPlayerGoal(this, Player.class, 6.0F)); this.goalSelector.addGoal(9, new RandomLookAroundGoal(this)); @@ -2434,10 +2434,10 @@ index 39725b7a6bac9390406733cd51d7341d0cb363d1..b1c96936ba8dcba4435a649dd7e6ec3c public SoundEvent getAmbientSound() { return SoundEvents.MULE_AMBIENT; diff --git a/net/minecraft/world/entity/animal/horse/SkeletonHorse.java b/net/minecraft/world/entity/animal/horse/SkeletonHorse.java -index 797405b187bb8102aafbf880552accd82e2c9af2..b8bdf9d4665cbfa590842727079a740274f13c34 100644 +index 580134c5a075c7efdc7c2f86a179df2fa336eba9..ba0e483df57cc56f356282519105a2e3e77601f8 100644 --- a/net/minecraft/world/entity/animal/horse/SkeletonHorse.java +++ b/net/minecraft/world/entity/animal/horse/SkeletonHorse.java -@@ -41,6 +41,13 @@ public class SkeletonHorse extends AbstractHorse { +@@ -42,6 +42,13 @@ public class SkeletonHorse extends AbstractHorse { super(entityType, level); } @@ -2451,7 +2451,7 @@ index 797405b187bb8102aafbf880552accd82e2c9af2..b8bdf9d4665cbfa590842727079a7402 public static AttributeSupplier.Builder createAttributes() { return createBaseHorseAttributes().add(Attributes.MAX_HEALTH, 15.0).add(Attributes.MOVEMENT_SPEED, 0.2F); } -@@ -60,6 +67,7 @@ public class SkeletonHorse extends AbstractHorse { +@@ -61,6 +68,7 @@ public class SkeletonHorse extends AbstractHorse { @Override protected void addBehaviourGoals() { @@ -2460,10 +2460,10 @@ index 797405b187bb8102aafbf880552accd82e2c9af2..b8bdf9d4665cbfa590842727079a7402 @Override diff --git a/net/minecraft/world/entity/animal/horse/TraderLlama.java b/net/minecraft/world/entity/animal/horse/TraderLlama.java -index 38a5554d6e28ab73c225625531c94592a46d50a8..d67d24e64d387a7f6a18aef1c8dcab1c6df3f824 100644 +index 2cd1b988f44caf271a7d2dfccf118be53b77caba..7214a8d3597cd46cdc8e0837365cdb4a0a5b4cba 100644 --- a/net/minecraft/world/entity/animal/horse/TraderLlama.java +++ b/net/minecraft/world/entity/animal/horse/TraderLlama.java -@@ -30,6 +30,28 @@ public class TraderLlama extends Llama { +@@ -31,6 +31,28 @@ public class TraderLlama extends Llama { super(entityType, level); } @@ -2524,10 +2524,10 @@ index ee327bdec37df5197c35aef60cf456bb81f8d048..45d09ebcc9ce4321285a4ec49e8ee369 @Override diff --git a/net/minecraft/world/entity/animal/sheep/Sheep.java b/net/minecraft/world/entity/animal/sheep/Sheep.java -index bb51adb44cbff3e7feaa80421f5f1a01c119aa00..a3df1d80dbaefb5bc7e7e2618039876bcf1d3462 100644 +index 4e4887cd2c6d6d22966395d68ed59da090f609a3..f9e86a4f632e96d5cf531c90f2813afe2fb45fbb 100644 --- a/net/minecraft/world/entity/animal/sheep/Sheep.java +++ b/net/minecraft/world/entity/animal/sheep/Sheep.java -@@ -84,10 +84,28 @@ public class Sheep extends Animal implements Shearable { +@@ -62,10 +62,28 @@ public class Sheep extends Animal implements Shearable { super(entityType, level); } @@ -2557,10 +2557,10 @@ index bb51adb44cbff3e7feaa80421f5f1a01c119aa00..a3df1d80dbaefb5bc7e7e2618039876b 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 d34dcbbdeae41d23d6fb497e0e8da038580b6d01..6c252b8021dbeb2a9ffee8a3744ac0165fd032e8 100644 +index 6a9f31c1f39cc14ad7b5ae3af85908bc7a4caae4..430c2ba035468a81402d6ed0a442006d94d33f09 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); } @@ -2585,10 +2585,10 @@ index d34dcbbdeae41d23d6fb497e0e8da038580b6d01..6c252b8021dbeb2a9ffee8a3744ac016 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 0487c463806509b1dd93dcfee3b518c95b0bdb19..7cac99a33a398528bbc55f90cc57a9848e56ff01 100644 +index 6fc2d5d558832dd55479deb9ad5984fbe81c9bee..d4fa7d17d3fb63e0bdc09db9e454ca4376817265 100644 --- a/net/minecraft/world/entity/animal/wolf/Wolf.java +++ b/net/minecraft/world/entity/animal/wolf/Wolf.java -@@ -187,9 +187,32 @@ public class Wolf extends TamableAnimal implements NeutralMob { +@@ -186,9 +186,32 @@ public class Wolf extends TamableAnimal implements NeutralMob { } // Purpur end - Configurable default collar color @@ -2621,7 +2621,7 @@ index 0487c463806509b1dd93dcfee3b518c95b0bdb19..7cac99a33a398528bbc55f90cc57a984 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)); -@@ -202,6 +225,7 @@ public class Wolf extends TamableAnimal implements NeutralMob { +@@ -201,6 +224,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)); @@ -2630,10 +2630,10 @@ index 0487c463806509b1dd93dcfee3b518c95b0bdb19..7cac99a33a398528bbc55f90cc57a984 this.targetSelector.addGoal(2, new OwnerHurtTargetGoal(this)); this.targetSelector.addGoal(3, new HurtByTargetGoal(this).setAlertOthers()); diff --git a/net/minecraft/world/entity/boss/EnderDragonPart.java b/net/minecraft/world/entity/boss/EnderDragonPart.java -index 31f064267514e590944ad809c95915b481e65aaa..c8bc09c3fe27e69360027698c41fd51a111ffa66 100644 +index c9443cbde85109b19e6c84274c562d83a229c763..ec82bd00f7be253beac1dfbe00a36d25daa11775 100644 --- a/net/minecraft/world/entity/boss/EnderDragonPart.java +++ b/net/minecraft/world/entity/boss/EnderDragonPart.java -@@ -27,6 +27,13 @@ public class EnderDragonPart extends Entity { +@@ -28,6 +28,13 @@ public class EnderDragonPart extends Entity { this.name = name; } @@ -2648,10 +2648,10 @@ index 31f064267514e590944ad809c95915b481e65aaa..c8bc09c3fe27e69360027698c41fd51a 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 ea9d27a3205b3699b9577f42bb04254bd76e700e..a414934ae4332cc6cf622d4bb19c5937713f92a2 100644 +index 3389c79e18601d582f95fe3765c291d46706d015..f669dd446fc07d15c66a2a96006891bc6171baa4 100644 --- a/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java +++ b/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -@@ -91,6 +91,7 @@ public class EnderDragon extends Mob implements Enemy { +@@ -92,6 +92,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 @@ -2659,7 +2659,7 @@ index ea9d27a3205b3699b9577f42bb04254bd76e700e..a414934ae4332cc6cf622d4bb19c5937 public EnderDragon(EntityType entityType, Level level) { super(EntityType.ENDER_DRAGON, level); -@@ -107,6 +108,37 @@ public class EnderDragon extends Mob implements Enemy { +@@ -108,6 +109,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 @@ -2697,7 +2697,7 @@ index ea9d27a3205b3699b9577f42bb04254bd76e700e..a414934ae4332cc6cf622d4bb19c5937 } public void setDragonFight(EndDragonFight dragonFight) { -@@ -121,6 +153,17 @@ public class EnderDragon extends Mob implements Enemy { +@@ -122,6 +154,17 @@ public class EnderDragon extends Mob implements Enemy { return this.fightOrigin; } @@ -2713,9 +2713,9 @@ index ea9d27a3205b3699b9577f42bb04254bd76e700e..a414934ae4332cc6cf622d4bb19c5937 + // Purpur end - Ridables + public static AttributeSupplier.Builder createAttributes() { - return Mob.createMobAttributes().add(Attributes.MAX_HEALTH, 200.0); + return Mob.createMobAttributes().add(Attributes.MAX_HEALTH, 200.0).add(Attributes.CAMERA_DISTANCE, 16.0); } -@@ -170,6 +213,37 @@ public class EnderDragon extends Mob implements Enemy { +@@ -171,6 +214,37 @@ public class EnderDragon extends Mob implements Enemy { @Override public void aiStep() { @@ -2753,7 +2753,7 @@ index ea9d27a3205b3699b9577f42bb04254bd76e700e..a414934ae4332cc6cf622d4bb19c5937 this.processFlappingMovement(); if (this.level().isClientSide) { this.setHealth(this.getHealth()); -@@ -198,6 +272,8 @@ public class EnderDragon extends Mob implements Enemy { +@@ -199,6 +273,8 @@ public class EnderDragon extends Mob implements Enemy { this.oFlapTime = this.flapTime; if (this.isDeadOrDying()) { @@ -2762,7 +2762,7 @@ index ea9d27a3205b3699b9577f42bb04254bd76e700e..a414934ae4332cc6cf622d4bb19c5937 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; -@@ -207,9 +283,9 @@ public class EnderDragon extends Mob implements Enemy { +@@ -208,9 +284,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); @@ -2774,7 +2774,7 @@ index ea9d27a3205b3699b9577f42bb04254bd76e700e..a414934ae4332cc6cf622d4bb19c5937 this.flapTime += f1 * 0.5F; } else { this.flapTime += f1; -@@ -220,7 +296,7 @@ public class EnderDragon extends Mob implements Enemy { +@@ -221,7 +297,7 @@ public class EnderDragon extends Mob implements Enemy { this.flapTime = 0.5F; } else { this.flightHistory.record(this.getY(), this.getYRot()); @@ -2783,7 +2783,7 @@ index ea9d27a3205b3699b9577f42bb04254bd76e700e..a414934ae4332cc6cf622d4bb19c5937 DragonPhaseInstance currentPhase = this.phaseManager.getCurrentPhase(); currentPhase.doServerTick(serverLevel1); if (this.phaseManager.getCurrentPhase() != currentPhase) { -@@ -295,7 +371,7 @@ public class EnderDragon extends Mob implements Enemy { +@@ -296,7 +372,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); @@ -2792,7 +2792,7 @@ index ea9d27a3205b3699b9577f42bb04254bd76e700e..a414934ae4332cc6cf622d4bb19c5937 this.knockBack( serverLevel2, serverLevel2.getEntities( -@@ -345,9 +421,9 @@ public class EnderDragon extends Mob implements Enemy { +@@ -346,9 +422,9 @@ public class EnderDragon extends Mob implements Enemy { } if (this.level() instanceof ServerLevel serverLevel3) { @@ -2805,10 +2805,10 @@ index ea9d27a3205b3699b9577f42bb04254bd76e700e..a414934ae4332cc6cf622d4bb19c5937 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 2f7da367b58fd9c06c4e012e8eb7f59e5a7f9b6d..15e2c0d566256c4ba175e991d6d7fd4fdcd49c8e 100644 +index c4a2fb6f08e5d6d69571f448c6ac9defaac3fcd3..2c6158de44a8ba95d3c5124ed2827a0aa24b672d 100644 --- a/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/net/minecraft/world/entity/boss/wither/WitherBoss.java -@@ -70,6 +70,7 @@ public class WitherBoss extends Monster implements RangedAttackMob { +@@ -71,6 +71,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; @@ -2816,7 +2816,7 @@ index 2f7da367b58fd9c06c4e012e8eb7f59e5a7f9b6d..15e2c0d566256c4ba175e991d6d7fd4f private boolean canPortal = false; // Paper public final ServerBossEvent bossEvent = (ServerBossEvent)new ServerBossEvent( this.getDisplayName(), BossEvent.BossBarColor.PURPLE, BossEvent.BossBarOverlay.PROGRESS -@@ -79,9 +80,23 @@ public class WitherBoss extends Monster implements RangedAttackMob { +@@ -80,9 +81,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 @@ -2840,7 +2840,7 @@ index 2f7da367b58fd9c06c4e012e8eb7f59e5a7f9b6d..15e2c0d566256c4ba175e991d6d7fd4f this.moveControl = new FlyingMoveControl(this, 10, false); this.setHealth(this.getMaxHealth()); this.xpReward = 50; -@@ -98,6 +113,105 @@ public class WitherBoss extends Monster implements RangedAttackMob { +@@ -99,6 +114,105 @@ public class WitherBoss extends Monster implements RangedAttackMob { } // Purpur end - Summoner API @@ -2946,7 +2946,7 @@ index 2f7da367b58fd9c06c4e012e8eb7f59e5a7f9b6d..15e2c0d566256c4ba175e991d6d7fd4f @Override protected PathNavigation createNavigation(Level level) { FlyingPathNavigation flyingPathNavigation = new FlyingPathNavigation(this, level); -@@ -108,11 +222,13 @@ public class WitherBoss extends Monster implements RangedAttackMob { +@@ -109,11 +223,13 @@ public class WitherBoss extends Monster implements RangedAttackMob { @Override protected void registerGoals() { @@ -2960,7 +2960,7 @@ index 2f7da367b58fd9c06c4e012e8eb7f59e5a7f9b6d..15e2c0d566256c4ba175e991d6d7fd4f this.targetSelector.addGoal(1, new HurtByTargetGoal(this)); this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, LivingEntity.class, 0, false, false, LIVING_ENTITY_SELECTOR)); } -@@ -272,6 +388,15 @@ public class WitherBoss extends Monster implements RangedAttackMob { +@@ -273,6 +389,15 @@ public class WitherBoss extends Monster implements RangedAttackMob { @Override protected void customServerAiStep(ServerLevel level) { @@ -2976,7 +2976,7 @@ index 2f7da367b58fd9c06c4e012e8eb7f59e5a7f9b6d..15e2c0d566256c4ba175e991d6d7fd4f if (this.getInvulnerableTicks() > 0) { int i = this.getInvulnerableTicks() - 1; this.bossEvent.setProgress(1.0F - i / 220.0F); -@@ -578,11 +703,11 @@ public class WitherBoss extends Monster implements RangedAttackMob { +@@ -579,11 +704,11 @@ public class WitherBoss extends Monster implements RangedAttackMob { } public int getAlternativeTarget(int head) { @@ -2991,7 +2991,7 @@ index 2f7da367b58fd9c06c4e012e8eb7f59e5a7f9b6d..15e2c0d566256c4ba175e991d6d7fd4f public boolean isPowered() { diff --git a/net/minecraft/world/entity/monster/AbstractSkeleton.java b/net/minecraft/world/entity/monster/AbstractSkeleton.java -index 025b74f7fe2094110a9fd293911588f361785d0a..607be674b6dcb9b099e9182b268c6bd960c5a87d 100644 +index fa124fc779aaf7c1747a2007a2d5826cd4fde13a..caa018d1dd0b6e97ec9d3fa70bbffe9eb3b1edec 100644 --- a/net/minecraft/world/entity/monster/AbstractSkeleton.java +++ b/net/minecraft/world/entity/monster/AbstractSkeleton.java @@ -73,12 +73,14 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo @@ -3093,10 +3093,10 @@ index 4ab7072b4290db7fbe72f81b89d3c428b05f737c..971b974c6717a544f7f96c441cd76e9d if (this.nextHeightOffsetChangeTick <= 0) { this.nextHeightOffsetChangeTick = 100; diff --git a/net/minecraft/world/entity/monster/Bogged.java b/net/minecraft/world/entity/monster/Bogged.java -index c279d38ed8d5d0fef6dea4afdc3ab308456f31a7..f572ee0a8edd6c4adb17c06083e165d4d8ed8550 100644 +index afb4cee70d0feecab93d943baf7ddfd83ad7f3b5..b1f06656bf60eda01e06cd4cfd908edc7b51c628 100644 --- a/net/minecraft/world/entity/monster/Bogged.java +++ b/net/minecraft/world/entity/monster/Bogged.java -@@ -42,6 +42,23 @@ public class Bogged extends AbstractSkeleton implements Shearable { +@@ -43,6 +43,23 @@ public class Bogged extends AbstractSkeleton implements Shearable { super(entityType, level); } @@ -3149,10 +3149,10 @@ index 2e32567fca7a2a4cd87bc078a6eeb30e3ffabfce..4873a3d8dd9c160ecdbda594ee546c35 public boolean doHurtTarget(ServerLevel level, Entity source) { if (super.doHurtTarget(level, source)) { diff --git a/net/minecraft/world/entity/monster/Creeper.java b/net/minecraft/world/entity/monster/Creeper.java -index c2327306f093c834da9574f9466236fbec572aec..562641cdb76e7a50706459bee8a2dcdf441588cd 100644 +index d82fe9db4d074a0484d8c5e2998ff9faf87dfd6e..5684ab59acb554f097d713d7c1a9860452bd3564 100644 --- a/net/minecraft/world/entity/monster/Creeper.java +++ b/net/minecraft/world/entity/monster/Creeper.java -@@ -55,21 +55,98 @@ public class Creeper extends Monster { +@@ -56,21 +56,98 @@ public class Creeper extends Monster { private int droppedSkulls; public @Nullable Entity entityIgniter; // CraftBukkit private boolean exploding = false; // Purpur - Config to make Creepers explode on death @@ -3251,7 +3251,7 @@ index c2327306f093c834da9574f9466236fbec572aec..562641cdb76e7a50706459bee8a2dcdf this.targetSelector.addGoal(1, new NearestAttackableTargetGoal<>(this, Player.class, true)); this.targetSelector.addGoal(2, new HurtByTargetGoal(this)); } -@@ -310,6 +387,7 @@ public class Creeper extends Monster { +@@ -311,6 +388,7 @@ public class Creeper extends Monster { com.destroystokyo.paper.event.entity.CreeperIgniteEvent event = new com.destroystokyo.paper.event.entity.CreeperIgniteEvent((org.bukkit.entity.Creeper) getBukkitEntity(), ignited); if (event.callEvent()) { this.entityData.set(DATA_IS_IGNITED, event.isIgnited()); @@ -3260,10 +3260,10 @@ index c2327306f093c834da9574f9466236fbec572aec..562641cdb76e7a50706459bee8a2dcdf } } diff --git a/net/minecraft/world/entity/monster/Drowned.java b/net/minecraft/world/entity/monster/Drowned.java -index c0afb6f85cecf26bb1a08669ac3fcec8fea6cbfc..be7b7eb8328277dc790b9953161c3603d3bbe873 100644 +index 84c6b5552f2b408b7b9f24a85b8c4fd54310c349..fb7a06d64a2f3ac2355bcf9eb515d4504786c585 100644 --- a/net/minecraft/world/entity/monster/Drowned.java +++ b/net/minecraft/world/entity/monster/Drowned.java -@@ -75,6 +75,23 @@ public class Drowned extends Zombie implements RangedAttackMob { +@@ -71,6 +71,23 @@ public class Drowned extends Zombie implements RangedAttackMob { return Zombie.createAttributes().add(Attributes.STEP_HEIGHT, 1.0); } @@ -3285,9 +3285,9 @@ index c0afb6f85cecf26bb1a08669ac3fcec8fea6cbfc..be7b7eb8328277dc790b9953161c3603 + // Purpur end - Ridables + @Override - protected void addBehaviourGoals() { - this.goalSelector.addGoal(1, new Drowned.DrownedGoToWaterGoal(this, 1.0)); -@@ -411,7 +428,7 @@ public class Drowned extends Zombie implements RangedAttackMob { + protected PathNavigation createNavigation(Level level) { + return new AmphibiousPathNavigation(this, level); +@@ -405,7 +422,7 @@ public class Drowned extends Zombie implements RangedAttackMob { } } @@ -3296,7 +3296,7 @@ index c0afb6f85cecf26bb1a08669ac3fcec8fea6cbfc..be7b7eb8328277dc790b9953161c3603 private final Drowned drowned; public DrownedMoveControl(Drowned mob) { -@@ -420,7 +437,7 @@ public class Drowned extends Zombie implements RangedAttackMob { +@@ -414,7 +431,7 @@ public class Drowned extends Zombie implements RangedAttackMob { } @Override @@ -3305,7 +3305,7 @@ index c0afb6f85cecf26bb1a08669ac3fcec8fea6cbfc..be7b7eb8328277dc790b9953161c3603 LivingEntity target = this.drowned.getTarget(); if (this.drowned.wantsToSwim() && this.drowned.isInWater()) { if (target != null && target.getY() > this.drowned.getY() || this.drowned.searchingForLand) { -@@ -440,7 +457,7 @@ public class Drowned extends Zombie implements RangedAttackMob { +@@ -434,7 +451,7 @@ public class Drowned extends Zombie implements RangedAttackMob { float f = (float)(Mth.atan2(d2, d) * 180.0F / (float)Math.PI) - 90.0F; this.drowned.setYRot(this.rotlerp(this.drowned.getYRot(), f, 90.0F)); this.drowned.yBodyRot = this.drowned.getYRot(); @@ -3314,7 +3314,7 @@ index c0afb6f85cecf26bb1a08669ac3fcec8fea6cbfc..be7b7eb8328277dc790b9953161c3603 float f2 = Mth.lerp(0.125F, this.drowned.getSpeed(), f1); this.drowned.setSpeed(f2); this.drowned.setDeltaMovement(this.drowned.getDeltaMovement().add(f2 * d * 0.005, f2 * d1 * 0.1, f2 * d2 * 0.005)); -@@ -449,7 +466,7 @@ public class Drowned extends Zombie implements RangedAttackMob { +@@ -443,7 +460,7 @@ public class Drowned extends Zombie implements RangedAttackMob { this.drowned.setDeltaMovement(this.drowned.getDeltaMovement().add(0.0, -0.008, 0.0)); } @@ -3324,7 +3324,7 @@ index c0afb6f85cecf26bb1a08669ac3fcec8fea6cbfc..be7b7eb8328277dc790b9953161c3603 } } diff --git a/net/minecraft/world/entity/monster/ElderGuardian.java b/net/minecraft/world/entity/monster/ElderGuardian.java -index fd33a8b59f40299ab644a4c52921b66a9b6552ca..eccbb27aa7efa6e24e04db114b06c7dbf54f9938 100644 +index 7eef05b988d52391ab061382fd8898705c705e03..07355eb21c7b06d282be32f6956d4de9e399b9c9 100644 --- a/net/minecraft/world/entity/monster/ElderGuardian.java +++ b/net/minecraft/world/entity/monster/ElderGuardian.java @@ -31,6 +31,18 @@ public class ElderGuardian extends Guardian { @@ -3347,10 +3347,10 @@ index fd33a8b59f40299ab644a4c52921b66a9b6552ca..eccbb27aa7efa6e24e04db114b06c7db 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 19a047c99c3afc6f8b23d7279491b156785a2c28..f991e59e896fc39da8f318871168b4c9bb0d8328 100644 +index ddb916856cff7179eca474738dfbba910408434c..6836b44d88d8c7b74c05f56b66887c0319805ee7 100644 --- a/net/minecraft/world/entity/monster/EnderMan.java +++ b/net/minecraft/world/entity/monster/EnderMan.java -@@ -91,9 +91,27 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -89,9 +89,27 @@ public class EnderMan extends Monster implements NeutralMob { this.setPathfindingMalus(PathType.WATER, -1.0F); } @@ -3378,7 +3378,7 @@ index 19a047c99c3afc6f8b23d7279491b156785a2c28..f991e59e896fc39da8f318871168b4c9 this.goalSelector.addGoal(1, new EnderMan.EndermanFreezeWhenLookedAt(this)); this.goalSelector.addGoal(2, new MeleeAttackGoal(this, 1.0, false)); this.goalSelector.addGoal(7, new WaterAvoidingRandomStrollGoal(this, 1.0, 0.0F)); -@@ -101,6 +119,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -99,6 +117,7 @@ public class EnderMan extends Monster implements NeutralMob { this.goalSelector.addGoal(8, new RandomLookAroundGoal(this)); this.goalSelector.addGoal(10, new EnderMan.EndermanLeaveBlockGoal(this)); this.goalSelector.addGoal(11, new EnderMan.EndermanTakeBlockGoal(this)); @@ -3386,7 +3386,7 @@ index 19a047c99c3afc6f8b23d7279491b156785a2c28..f991e59e896fc39da8f318871168b4c9 this.targetSelector.addGoal(1, new EnderMan.EndermanLookForPlayerGoal(this, this::isAngryAt)); this.targetSelector.addGoal(2, new HurtByTargetGoal(this)); this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, Endermite.class, 10, true, false, (entityliving, ignored) -> entityliving.level().purpurConfig.endermanAggroEndermites && entityliving instanceof Endermite endermite && (!entityliving.level().purpurConfig.endermanAggroEndermitesOnlyIfPlayerSpawned || endermite.isPlayerSpawned()))); // Purpur -@@ -263,7 +282,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -259,7 +278,7 @@ public class EnderMan extends Monster implements NeutralMob { @Override protected void customServerAiStep(ServerLevel level) { @@ -3395,7 +3395,7 @@ index 19a047c99c3afc6f8b23d7279491b156785a2c28..f991e59e896fc39da8f318871168b4c9 float lightLevelDependentMagicValue = this.getLightLevelDependentMagicValue(); if (lightLevelDependentMagicValue > 0.5F && level.canSeeSky(this.blockPosition()) -@@ -376,6 +395,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -372,6 +391,7 @@ public class EnderMan extends Monster implements NeutralMob { public boolean hurtServer(ServerLevel level, DamageSource damageSource, float amount) { if (this.isInvulnerableTo(level, damageSource)) { return false; @@ -3404,10 +3404,10 @@ index 19a047c99c3afc6f8b23d7279491b156785a2c28..f991e59e896fc39da8f318871168b4c9 } else { AbstractThrownPotion abstractThrownPotion1 = damageSource.getDirectEntity() instanceof AbstractThrownPotion abstractThrownPotion diff --git a/net/minecraft/world/entity/monster/Endermite.java b/net/minecraft/world/entity/monster/Endermite.java -index 37eaed1455f34011c24170ca0b05f606bd03fac0..ddb40c13cee7db16fc9b094828356e743e9507f2 100644 +index 50eefb77a6c346b2643324f526c5c01d5e667ce4..0d03bebf2cda34072db561f6e27b06a7d26095d1 100644 --- a/net/minecraft/world/entity/monster/Endermite.java +++ b/net/minecraft/world/entity/monster/Endermite.java -@@ -46,14 +46,33 @@ public class Endermite extends Monster { +@@ -47,14 +47,33 @@ public class Endermite extends Monster { } // Purpur end - Add back player spawned endermite API @@ -3442,10 +3442,10 @@ index 37eaed1455f34011c24170ca0b05f606bd03fac0..ddb40c13cee7db16fc9b094828356e74 this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); } diff --git a/net/minecraft/world/entity/monster/Evoker.java b/net/minecraft/world/entity/monster/Evoker.java -index cf9f0c60efc4f7cbc275ed9b154c979e82b4d50c..889f6be331b3b7b80de60c414b77d68947477f9e 100644 +index 7efa39ab1fb34da41a04cd6816f2571c6eba98f5..10142de6bdf9474958ca939c956a428218ee48db 100644 --- a/net/minecraft/world/entity/monster/Evoker.java +++ b/net/minecraft/world/entity/monster/Evoker.java -@@ -50,10 +50,28 @@ public class Evoker extends SpellcasterIllager { +@@ -48,10 +48,28 @@ public class Evoker extends SpellcasterIllager { this.xpReward = 10; } @@ -3474,7 +3474,7 @@ index cf9f0c60efc4f7cbc275ed9b154c979e82b4d50c..889f6be331b3b7b80de60c414b77d689 this.goalSelector.addGoal(1, new Evoker.EvokerCastingSpellGoal()); this.goalSelector.addGoal(2, new AvoidEntityGoal<>(this, Player.class, 8.0F, 0.6, 1.0)); this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, Creaking.class, 8.0F, 0.6, 1.0)); -@@ -63,6 +81,7 @@ public class Evoker extends SpellcasterIllager { +@@ -61,6 +79,7 @@ public class Evoker extends SpellcasterIllager { this.goalSelector.addGoal(8, new RandomStrollGoal(this, 0.6)); this.goalSelector.addGoal(9, new LookAtPlayerGoal(this, Player.class, 3.0F, 1.0F)); this.goalSelector.addGoal(10, new LookAtPlayerGoal(this, Mob.class, 8.0F)); @@ -3483,11 +3483,11 @@ index cf9f0c60efc4f7cbc275ed9b154c979e82b4d50c..889f6be331b3b7b80de60c414b77d689 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 97b4352671910d2deedc6d280f3ce6e645597f3c..e087a2348dee66e0374246e992ed66bb8f18dce0 100644 +index bbdff8b4043f27045684a2aa5687e2b7ca7afbb5..c7ac650f9618fd124035f9cf01fffada7efc97e1 100644 --- a/net/minecraft/world/entity/monster/Ghast.java +++ b/net/minecraft/world/entity/monster/Ghast.java -@@ -43,11 +43,47 @@ public class Ghast extends FlyingMob implements Enemy { - this.moveControl = new Ghast.GhastMoveControl(this); +@@ -52,11 +52,47 @@ public class Ghast extends Mob implements Enemy { + this.moveControl = new Ghast.GhastMoveControl(this, false, () -> false); } + // Purpur start - Ridables @@ -3534,35 +3534,26 @@ index 97b4352671910d2deedc6d280f3ce6e645597f3c..e087a2348dee66e0374246e992ed66bb this.targetSelector .addGoal(1, new NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, (entity, level) -> Math.abs(entity.getY() - this.getY()) <= 4.0)); } -@@ -102,7 +138,7 @@ public class Ghast extends FlyingMob implements Enemy { - } - - public static AttributeSupplier.Builder createAttributes() { -- return Mob.createMobAttributes().add(Attributes.MAX_HEALTH, 10.0).add(Attributes.FOLLOW_RANGE, 100.0); -+ return Mob.createMobAttributes().add(Attributes.MAX_HEALTH, 10.0).add(Attributes.FOLLOW_RANGE, 100.0).add(Attributes.FLYING_SPEED, 0.6D); // Purpur - Ridables - } - - @Override -@@ -190,7 +226,7 @@ public class Ghast extends FlyingMob implements Enemy { +@@ -236,7 +272,7 @@ public class Ghast extends Mob implements Enemy { } } -- static class GhastMoveControl extends MoveControl { -+ static class GhastMoveControl extends org.purpurmc.purpur.controller.FlyingMoveControllerWASD { // Purpur - Ridables - private final Ghast ghast; +- public static class GhastMoveControl extends MoveControl { ++ public static class GhastMoveControl extends org.purpurmc.purpur.controller.FlyingMoveControllerWASD { // Purpur - Ridables + private final Mob ghast; private int floatDuration; - -@@ -200,7 +236,7 @@ public class Ghast extends FlyingMob implements Enemy { + private final boolean careful; +@@ -250,7 +286,7 @@ public class Ghast extends Mob implements Enemy { } @Override - public void tick() { + public void vanillaTick() { // Purpur - Ridables - if (this.operation == MoveControl.Operation.MOVE_TO) { - if (this.floatDuration-- <= 0) { - this.floatDuration = this.floatDuration + this.ghast.getRandom().nextInt(5) + 2; + if (this.shouldBeStopped.getAsBoolean()) { + this.operation = MoveControl.Operation.WAIT; + this.ghast.stopInPlace(); diff --git a/net/minecraft/world/entity/monster/Giant.java b/net/minecraft/world/entity/monster/Giant.java -index 969eb604851d1cce50f0f99ed479189061d5de0c..135f83484ac31db7dcc225ba6f94e2e4ca27eea8 100644 +index ab0b44fd3e20fcab4e2fea985e7471575b619069..c098fc14eb4f2ebd7dc1f6be9507279296416eea 100644 --- a/net/minecraft/world/entity/monster/Giant.java +++ b/net/minecraft/world/entity/monster/Giant.java @@ -12,6 +12,29 @@ public class Giant extends Monster { @@ -3593,8 +3584,8 @@ index 969eb604851d1cce50f0f99ed479189061d5de0c..135f83484ac31db7dcc225ba6f94e2e4 + // Purpur end - Ridables + public static AttributeSupplier.Builder createAttributes() { - return Monster.createMonsterAttributes().add(Attributes.MAX_HEALTH, 100.0).add(Attributes.MOVEMENT_SPEED, 0.5).add(Attributes.ATTACK_DAMAGE, 50.0); - } + 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 a36f0181e1aa24538d6c868a8675da89427bdeae..26fb38b9741304f4fe461c929ead0f392255a3de 100644 --- a/net/minecraft/world/entity/monster/Guardian.java @@ -3800,10 +3791,10 @@ index 889c31cc9257fbbd5df8325ccee9ce39b026ec4b..4a1299d6cee2807522de0c2d0d4745c5 @Override diff --git a/net/minecraft/world/entity/monster/Phantom.java b/net/minecraft/world/entity/monster/Phantom.java -index 73edb1a4e5daee16fa518c05de24e413847ab65d..2653cf2c353d7ae360201e74c4860a4745dd4948 100644 +index 2abb55d84507fd29817760cb0068dd083f7f1c37..99194cf1fa89d3112719ead9f7de260ca5b9b676 100644 --- a/net/minecraft/world/entity/monster/Phantom.java +++ b/net/minecraft/world/entity/monster/Phantom.java -@@ -61,6 +61,64 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -62,6 +62,64 @@ public class Phantom extends Mob implements Enemy { this.lookControl = new Phantom.PhantomLookControl(this); } @@ -3868,7 +3859,7 @@ index 73edb1a4e5daee16fa518c05de24e413847ab65d..2653cf2c353d7ae360201e74c4860a47 @Override public boolean isFlapping() { return (this.getUniqueFlapTickOffset() + this.tickCount) % TICKS_PER_FLAP == 0; -@@ -73,9 +131,11 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -74,9 +132,11 @@ public class Phantom extends Mob implements Enemy { @Override protected void registerGoals() { @@ -3880,7 +3871,7 @@ index 73edb1a4e5daee16fa518c05de24e413847ab65d..2653cf2c353d7ae360201e74c4860a47 this.targetSelector.addGoal(1, new Phantom.PhantomAttackPlayerTargetGoal()); } -@@ -91,6 +151,7 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -92,6 +152,7 @@ public class Phantom extends Mob implements Enemy { private void updatePhantomSizeInfo() { this.refreshDimensions(); @@ -3888,7 +3879,7 @@ index 73edb1a4e5daee16fa518c05de24e413847ab65d..2653cf2c353d7ae360201e74c4860a47 this.getAttribute(Attributes.ATTACK_DAMAGE).setBaseValue(6 + this.getPhantomSize()); } -@@ -148,6 +209,7 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -149,6 +210,7 @@ public class Phantom extends Mob implements Enemy { @Override public void aiStep() { if (this.isAlive() && this.shouldBurnInDay && this.isSunBurnTick()) { // Paper - shouldBurnInDay API @@ -3896,7 +3887,7 @@ index 73edb1a4e5daee16fa518c05de24e413847ab65d..2653cf2c353d7ae360201e74c4860a47 this.igniteForSeconds(8.0F); } -@@ -404,25 +466,42 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -419,25 +481,42 @@ public class Phantom extends Mob implements Enemy { } } @@ -3944,10 +3935,10 @@ index 73edb1a4e5daee16fa518c05de24e413847ab65d..2653cf2c353d7ae360201e74c4860a47 Phantom.this.setYRot(Phantom.this.getYRot() + 180.0F); this.speed = 0.1F; diff --git a/net/minecraft/world/entity/monster/Pillager.java b/net/minecraft/world/entity/monster/Pillager.java -index d7b05fed206cfb63a75fab94f687d69fb230de9c..852316c9a9d0860a538eae32001e60f05dc6938f 100644 +index 4f72db7e6f99844761de2f749e52cda156b08ad7..fa49ed77f33bca6335812e9f56176cc053a364ad 100644 --- a/net/minecraft/world/entity/monster/Pillager.java +++ b/net/minecraft/world/entity/monster/Pillager.java -@@ -63,16 +63,35 @@ public class Pillager extends AbstractIllager implements CrossbowAttackMob, Inve +@@ -64,16 +64,35 @@ public class Pillager extends AbstractIllager implements CrossbowAttackMob, Inve super(entityType, level); } @@ -3984,10 +3975,10 @@ index d7b05fed206cfb63a75fab94f687d69fb230de9c..852316c9a9d0860a538eae32001e60f0 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 85018a01b5d803a91228e2fa02717c2c518a3004..382ef8b0f8d5c5ef6a7698097e9b41b7adc04353 100644 +index 2b9a72b8742bf13c69df5ce0c905d47a92b9d8bc..b67ac487ce4a7fd8b2f62452ab0b87f4a55006f2 100644 --- a/net/minecraft/world/entity/monster/Ravager.java +++ b/net/minecraft/world/entity/monster/Ravager.java -@@ -69,15 +69,40 @@ public class Ravager extends Raider { +@@ -70,15 +70,40 @@ public class Ravager extends Raider { this.setPathfindingMalus(PathType.LEAVES, 0.0F); } @@ -4028,7 +4019,7 @@ index 85018a01b5d803a91228e2fa02717c2c518a3004..382ef8b0f8d5c5ef6a7698097e9b41b7 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())); -@@ -134,7 +159,7 @@ public class Ravager extends Raider { +@@ -135,7 +160,7 @@ public class Ravager extends Raider { @Override public void aiStep() { super.aiStep(); @@ -4038,10 +4029,10 @@ index 85018a01b5d803a91228e2fa02717c2c518a3004..382ef8b0f8d5c5ef6a7698097e9b41b7 this.getAttribute(Attributes.MOVEMENT_SPEED).setBaseValue(0.0); } else { diff --git a/net/minecraft/world/entity/monster/Shulker.java b/net/minecraft/world/entity/monster/Shulker.java -index a8c5c2ad80afd03b3fc53127b519b5c2b73bff85..14cddb216b32990c2ce2381a4d6bf6f76c686f95 100644 +index aaa95836e7d767ab6d162ff227f8a82a41255304..e0c70493e771b50885b0263ff07e8ee594c2dfdc 100644 --- a/net/minecraft/world/entity/monster/Shulker.java +++ b/net/minecraft/world/entity/monster/Shulker.java -@@ -109,12 +109,31 @@ public class Shulker extends AbstractGolem implements Enemy { +@@ -110,12 +110,31 @@ public class Shulker extends AbstractGolem implements Enemy { } // Purpur end - Shulker change color with dye @@ -4073,7 +4064,7 @@ index a8c5c2ad80afd03b3fc53127b519b5c2b73bff85..14cddb216b32990c2ce2381a4d6bf6f7 this.targetSelector.addGoal(1, new HurtByTargetGoal(this, this.getClass()).setAlertOthers()); this.targetSelector.addGoal(2, new Shulker.ShulkerNearestAttackGoal(this)); this.targetSelector.addGoal(3, new Shulker.ShulkerDefenseAttackGoal(this)); -@@ -718,7 +737,7 @@ public class Shulker extends AbstractGolem implements Enemy { +@@ -719,7 +738,7 @@ public class Shulker extends AbstractGolem implements Enemy { } } @@ -4121,10 +4112,10 @@ index 4e34833ea5c71b817c9f42a58320fe100981ec93..19dcc657fd2a995638d5e23c2b043d01 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 1f35105f6ddd33fc9558d19590a5696479d2de83..5394a5c302c4bd9417dfb304848747fcd2180f07 100644 +index d53364e33bd9e15ad419f306d7cc2e09c9de242c..ed4f0d48120384d847291724ac995cdee00d10aa 100644 --- a/net/minecraft/world/entity/monster/Skeleton.java +++ b/net/minecraft/world/entity/monster/Skeleton.java -@@ -26,6 +26,23 @@ public class Skeleton extends AbstractSkeleton { +@@ -27,6 +27,23 @@ public class Skeleton extends AbstractSkeleton { super(entityType, level); } @@ -4149,10 +4140,10 @@ index 1f35105f6ddd33fc9558d19590a5696479d2de83..5394a5c302c4bd9417dfb304848747fc 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 5a81172c88f5699f1440b69b331a8ea353c1950a..b3a78d66c0e64e7c8bf54d820c7fff13d46b396b 100644 +index 7b9105cc38380d60892647e52608787dbde28f0d..7ac6449dc3ede6bda51579282b1155371f0800d3 100644 --- a/net/minecraft/world/entity/monster/Slime.java +++ b/net/minecraft/world/entity/monster/Slime.java -@@ -58,6 +58,7 @@ public class Slime extends Mob implements Enemy { +@@ -59,6 +59,7 @@ public class Slime extends Mob implements Enemy { public float oSquish; private boolean wasOnGround = false; private boolean canWander = true; // Paper - Slime pathfinder events @@ -4160,7 +4151,7 @@ index 5a81172c88f5699f1440b69b331a8ea353c1950a..b3a78d66c0e64e7c8bf54d820c7fff13 public Slime(EntityType entityType, Level level) { super(entityType, level); -@@ -65,12 +66,48 @@ public class Slime extends Mob implements Enemy { +@@ -66,12 +67,48 @@ public class Slime extends Mob implements Enemy { this.moveControl = new Slime.SlimeMoveControl(this); } @@ -4209,7 +4200,7 @@ index 5a81172c88f5699f1440b69b331a8ea353c1950a..b3a78d66c0e64e7c8bf54d820c7fff13 this.targetSelector .addGoal(1, new NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, (entity, level) -> Math.abs(entity.getY() - this.getY()) <= 4.0)); this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, IronGolem.class, true)); -@@ -359,6 +396,7 @@ public class Slime extends Mob implements Enemy { +@@ -360,6 +397,7 @@ public class Slime extends Mob implements Enemy { Vec3 deltaMovement = this.getDeltaMovement(); this.setDeltaMovement(deltaMovement.x, this.getJumpPower(), deltaMovement.z); this.hasImpulse = true; @@ -4217,7 +4208,7 @@ index 5a81172c88f5699f1440b69b331a8ea353c1950a..b3a78d66c0e64e7c8bf54d820c7fff13 } @Nullable -@@ -523,7 +561,7 @@ public class Slime extends Mob implements Enemy { +@@ -524,7 +562,7 @@ public class Slime extends Mob implements Enemy { } } @@ -4226,7 +4217,7 @@ index 5a81172c88f5699f1440b69b331a8ea353c1950a..b3a78d66c0e64e7c8bf54d820c7fff13 private float yRot; private int jumpDelay; private final Slime slime; -@@ -541,21 +579,33 @@ public class Slime extends Mob implements Enemy { +@@ -542,21 +580,33 @@ public class Slime extends Mob implements Enemy { } public void setWantedMovement(double speed) { @@ -4263,7 +4254,7 @@ index 5a81172c88f5699f1440b69b331a8ea353c1950a..b3a78d66c0e64e7c8bf54d820c7fff13 if (this.jumpDelay-- <= 0) { this.jumpDelay = this.slime.getJumpDelay(); if (this.isAggressive) { -@@ -572,7 +622,7 @@ public class Slime extends Mob implements Enemy { +@@ -573,7 +623,7 @@ public class Slime extends Mob implements Enemy { this.mob.setSpeed(0.0F); } } else { @@ -4385,10 +4376,10 @@ index 4b9e60d930bc3a4bfe9aad2e81391e57cfc45d40..ddd3a0d629f720b7acacf01bf2a7db53 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 bc74bdc3e13f1d51ed6d31470f3ac6f9855778c9..720060d422a6b77020da478b514e9581d8d7e4eb 100644 +index b6f570c0140200ddaf29fe8334d6c1e729acf8a0..970eab5794263e40243f0527ab8be98252841fb0 100644 --- a/net/minecraft/world/entity/monster/Vex.java +++ b/net/minecraft/world/entity/monster/Vex.java -@@ -58,6 +58,50 @@ public class Vex extends Monster implements TraceableEntity { +@@ -60,6 +60,50 @@ public class Vex extends Monster implements TraceableEntity { this.xpReward = 3; } @@ -4439,7 +4430,7 @@ index bc74bdc3e13f1d51ed6d31470f3ac6f9855778c9..720060d422a6b77020da478b514e9581 @Override public boolean isFlapping() { return this.tickCount % TICKS_PER_FLAP == 0; -@@ -70,7 +114,7 @@ public class Vex extends Monster implements TraceableEntity { +@@ -72,7 +116,7 @@ public class Vex extends Monster implements TraceableEntity { @Override public void tick() { @@ -4448,7 +4439,7 @@ index bc74bdc3e13f1d51ed6d31470f3ac6f9855778c9..720060d422a6b77020da478b514e9581 super.tick(); this.noPhysics = false; this.setNoGravity(true); -@@ -84,17 +128,19 @@ public class Vex extends Monster implements TraceableEntity { +@@ -86,17 +130,19 @@ public class Vex extends Monster implements TraceableEntity { protected void registerGoals() { super.registerGoals(); this.goalSelector.addGoal(0, new FloatGoal(this)); @@ -4469,7 +4460,7 @@ index bc74bdc3e13f1d51ed6d31470f3ac6f9855778c9..720060d422a6b77020da478b514e9581 } @Override -@@ -291,13 +337,13 @@ public class Vex extends Monster implements TraceableEntity { +@@ -298,13 +344,13 @@ public class Vex extends Monster implements TraceableEntity { } } @@ -4485,7 +4476,7 @@ index bc74bdc3e13f1d51ed6d31470f3ac6f9855778c9..720060d422a6b77020da478b514e9581 if (this.operation == MoveControl.Operation.MOVE_TO) { Vec3 vec3 = new Vec3(this.wantedX - Vex.this.getX(), this.wantedY - Vex.this.getY(), this.wantedZ - Vex.this.getZ()); double len = vec3.length(); -@@ -305,7 +351,7 @@ public class Vex extends Monster implements TraceableEntity { +@@ -312,7 +358,7 @@ public class Vex extends Monster implements TraceableEntity { this.operation = MoveControl.Operation.WAIT; Vex.this.setDeltaMovement(Vex.this.getDeltaMovement().scale(0.5)); } else { @@ -4495,10 +4486,10 @@ index bc74bdc3e13f1d51ed6d31470f3ac6f9855778c9..720060d422a6b77020da478b514e9581 Vec3 deltaMovement = Vex.this.getDeltaMovement(); Vex.this.setYRot(-((float)Mth.atan2(deltaMovement.x, deltaMovement.z)) * (180.0F / (float)Math.PI)); diff --git a/net/minecraft/world/entity/monster/Vindicator.java b/net/minecraft/world/entity/monster/Vindicator.java -index 79c2248b0dce457fed6d61d4b38eeb92bbc3927e..922c5ce69fc2a3cb53dc230f4efe96bde91cd96a 100644 +index 86886889f4a2859eaf35c57b5130b2b10143a368..f908db6eeff5ee5a1ab2783d8e8bbb1598c3ace3 100644 --- a/net/minecraft/world/entity/monster/Vindicator.java +++ b/net/minecraft/world/entity/monster/Vindicator.java -@@ -56,15 +56,34 @@ public class Vindicator extends AbstractIllager { +@@ -57,15 +57,34 @@ public class Vindicator extends AbstractIllager { super(entityType, level); } @@ -4603,10 +4594,10 @@ index 3ff71ba1bd29faa4d8380dad9397ab34ef930234..d8c10f5f93e3ca92a49e1df321625645 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 4405f465ad5b136390c4204b177967c6e47738dd..636b1e88f6d76a4c0110fa34e89634eee3fbdcdf 100644 +index 0dbc528bcad2b2f79585e2462a265d43fcbebe76..4379832f464824260a25055ed7338c2879a9a194 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; } @@ -4630,7 +4621,7 @@ index 4405f465ad5b136390c4204b177967c6e47738dd..636b1e88f6d76a4c0110fa34e89634ee @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"); @@ -4639,10 +4630,10 @@ index 4405f465ad5b136390c4204b177967c6e47738dd..636b1e88f6d76a4c0110fa34e89634ee profilerFiller.pop(); this.updateActivity(); diff --git a/net/minecraft/world/entity/monster/Zombie.java b/net/minecraft/world/entity/monster/Zombie.java -index e15df574282e0f5ba5791435020bc6ac96860d15..f9233f0689b26a8c65d60ab9421c1216d436bae7 100644 +index e8f54f358b0af0a6755912df7cceb2909da9f0a9..5d68fa532c588ed942d6b9703cc1047feca4e641 100644 --- a/net/minecraft/world/entity/monster/Zombie.java +++ b/net/minecraft/world/entity/monster/Zombie.java -@@ -104,11 +104,30 @@ public class Zombie extends Monster { +@@ -103,11 +103,30 @@ public class Zombie extends Monster { this(EntityType.ZOMBIE, level); } @@ -4674,11 +4665,11 @@ index e15df574282e0f5ba5791435020bc6ac96860d15..f9233f0689b26a8c65d60ab9421c1216 } diff --git a/net/minecraft/world/entity/monster/ZombieVillager.java b/net/minecraft/world/entity/monster/ZombieVillager.java -index 6b0bbcf99941d768d235b9f96c3e112a4dfea2fc..2d3636697a544e78113fc1e6902dd216acee070b 100644 +index 75a8f3ecaec5cdfe98aa8363326a8a2047ea75b1..317693bccccbb41f38dc726a71cf059d5a861e27 100644 --- a/net/minecraft/world/entity/monster/ZombieVillager.java +++ b/net/minecraft/world/entity/monster/ZombieVillager.java -@@ -77,6 +77,23 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { - .ifPresent(profession -> this.setVillagerData(this.getVillagerData().withProfession(profession))); +@@ -76,6 +76,23 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { + super(entityType, level); } + // Purpur start - Ridables @@ -4702,10 +4693,10 @@ index 6b0bbcf99941d768d235b9f96c3e112a4dfea2fc..2d3636697a544e78113fc1e6902dd216 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 eff0dec6efe043ad0cb0126061583bc5b67ba0e2..f16aa79ba5137cd6132452c21b0dc81cbf4fac8b 100644 +index 1be7c756d56cca63347d97f7896b491f3a343fa4..deb47d4828ac94f8d68a799b98cc696674d94a6f 100644 --- a/net/minecraft/world/entity/monster/ZombifiedPiglin.java +++ b/net/minecraft/world/entity/monster/ZombifiedPiglin.java -@@ -63,6 +63,23 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { +@@ -64,6 +64,23 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { this.setPathfindingMalus(PathType.LAVA, 8.0F); } @@ -4730,10 +4721,10 @@ index eff0dec6efe043ad0cb0126061583bc5b67ba0e2..f16aa79ba5137cd6132452c21b0dc81c public void setPersistentAngerTarget(@Nullable UUID target) { this.persistentAngerTarget = target; diff --git a/net/minecraft/world/entity/monster/creaking/Creaking.java b/net/minecraft/world/entity/monster/creaking/Creaking.java -index bdefd070cfebe7f3f792c998f2f53be720cbfbcd..a23d624abb0622d362af0dc816425283e25c479a 100644 +index 567e7952efec69b4222563fae724d18a9902bb05..b87ad5259b416693e57e3863327f46ee08a4928f 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; } @@ -4763,7 +4754,7 @@ index bdefd070cfebe7f3f792c998f2f53be720cbfbcd..a23d624abb0622d362af0dc816425283 @Override protected BodyRotationControl createBodyControl() { return new Creaking.CreakingBodyRotationControl(this); -@@ -571,28 +594,28 @@ public class Creaking extends Monster { +@@ -572,28 +595,28 @@ public class Creaking extends Monster { } } @@ -4799,10 +4790,10 @@ index bdefd070cfebe7f3f792c998f2f53be720cbfbcd..a23d624abb0622d362af0dc816425283 } } diff --git a/net/minecraft/world/entity/monster/hoglin/Hoglin.java b/net/minecraft/world/entity/monster/hoglin/Hoglin.java -index 0d05d21158a59dc3aa648c1d6541121c5bb547e6..7c83e0612b8b0d48966aa3808d86daac79753584 100644 +index 0ecf8533f6cad081df8713856feb74db93028f71..fce1a2dda2587c55e39e4ef51c30b5556efe0b33 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; } @@ -4826,7 +4817,7 @@ index 0d05d21158a59dc3aa648c1d6541121c5bb547e6..7c83e0612b8b0d48966aa3808d86daac @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"); @@ -4835,10 +4826,10 @@ index 0d05d21158a59dc3aa648c1d6541121c5bb547e6..7c83e0612b8b0d48966aa3808d86daac profilerFiller.pop(); HoglinAi.updateActivity(this); diff --git a/net/minecraft/world/entity/monster/piglin/Piglin.java b/net/minecraft/world/entity/monster/piglin/Piglin.java -index e200e974e46de6166d56e051806c00a69aefc9bb..589e3014fb86448456c249c0255186644abb13c2 100644 +index 8392ff1316f0c5be685a6ded7ccd08933c10ff4e..29c687a5f459e100a78f77a2edbf9e607f17a5ab 100644 --- a/net/minecraft/world/entity/monster/piglin/Piglin.java +++ b/net/minecraft/world/entity/monster/piglin/Piglin.java -@@ -136,6 +136,23 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento +@@ -137,6 +137,23 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento this.xpReward = 5; } @@ -4860,9 +4851,9 @@ index e200e974e46de6166d56e051806c00a69aefc9bb..589e3014fb86448456c249c025518664 + // Purpur end - Ridables + @Override - public void addAdditionalSaveData(CompoundTag compound) { - super.addAdditionalSaveData(compound); -@@ -321,6 +338,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento + protected void addAdditionalSaveData(ValueOutput output) { + super.addAdditionalSaveData(output); +@@ -322,6 +339,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento protected void customServerAiStep(ServerLevel level) { ProfilerFiller profilerFiller = Profiler.get(); profilerFiller.push("piglinBrain"); @@ -4907,10 +4898,10 @@ index 219978cb0341b2d691f44c1146707d875788881e..4c8e49ba064241ec7ac505fa6f5df6d7 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 cd28ca290c081d9f5e4498f59d7b87a566f81544..8d61d5347896481f250a18d04d17fd4d2088f633 100644 +index 4a4cc7f9c95d4f4b6ad4948e3ed3504efbbcef15..f8a6aba7d6f0f357c72602f4ac6c2537b604eb6c 100644 --- a/net/minecraft/world/entity/monster/warden/Warden.java +++ b/net/minecraft/world/entity/monster/warden/Warden.java -@@ -126,8 +126,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); @@ -4943,7 +4934,7 @@ index cd28ca290c081d9f5e4498f59d7b87a566f81544..8d61d5347896481f250a18d04d17fd4d @Override public Packet getAddEntityPacket(ServerEntity entity) { return new ClientboundAddEntityPacket(this, entity, this.hasPose(Pose.EMERGING) ? 1 : 0); -@@ -391,6 +415,7 @@ public class Warden extends Monster implements VibrationSystem { +@@ -389,6 +413,7 @@ public class Warden extends Monster implements VibrationSystem { @Contract("null->false") public boolean canTargetEntity(@Nullable Entity entity) { @@ -4952,10 +4943,10 @@ index cd28ca290c081d9f5e4498f59d7b87a566f81544..8d61d5347896481f250a18d04d17fd4d && 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 49d43837b88d8f278baa5062aed83a297fe20ed8..15669f9157dc3d3d5e3fb76a668c7e3b43ee8a52 100644 +index bcd191dc713d426b0af739ad67953fa130d0898c..dc5622cbb9d6a3ba92db634d5572d3c1c16d2bf6 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 @@ -4984,7 +4975,7 @@ index 49d43837b88d8f278baa5062aed83a297fe20ed8..15669f9157dc3d3d5e3fb76a668c7e3b @Override public Brain getBrain() { return (Brain)super.getBrain(); -@@ -358,7 +380,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -359,7 +381,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } // Purpur end - Lobotomize stuck villagers // Pufferfish start @@ -4993,7 +4984,7 @@ index 49d43837b88d8f278baa5062aed83a297fe20ed8..15669f9157dc3d3d5e3fb76a668c7e3b this.getBrain().tick(level, this); // Paper - EAR 2 } else if (this.isLobotomized && shouldRestock()) restock(); // Purpur - Lobotomize stuck villagers -@@ -418,7 +440,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -419,7 +441,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler return super.mobInteract(player, hand); } else if (this.isBaby()) { this.setUnhappy(); @@ -5002,7 +4993,7 @@ index 49d43837b88d8f278baa5062aed83a297fe20ed8..15669f9157dc3d3d5e3fb76a668c7e3b } else { if (!this.level().isClientSide) { boolean isEmpty = this.getOffers().isEmpty(); -@@ -431,9 +453,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -432,9 +454,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } if (isEmpty) { @@ -5016,10 +5007,10 @@ index 49d43837b88d8f278baa5062aed83a297fe20ed8..15669f9157dc3d3d5e3fb76a668c7e3b this.startTrading(player); } diff --git a/net/minecraft/world/entity/npc/WanderingTrader.java b/net/minecraft/world/entity/npc/WanderingTrader.java -index b0eec451b68a6a2697b1620410f07b25c4d2fda7..21ab5911d52e49ec2de99071cb85ff2daa090dc4 100644 +index 93ed977260f369677028bbd8396862f344dfeaa3..e5d6d8bd30876832e6219969849e826070343f45 100644 --- a/net/minecraft/world/entity/npc/WanderingTrader.java +++ b/net/minecraft/world/entity/npc/WanderingTrader.java -@@ -66,6 +66,23 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill +@@ -67,6 +67,23 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill } // Purpur end - Allow leashing villagers @@ -5043,7 +5034,7 @@ index b0eec451b68a6a2697b1620410f07b25c4d2fda7..21ab5911d52e49ec2de99071cb85ff2d @Override protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); -@@ -127,8 +144,9 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill +@@ -128,8 +145,9 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill if (!this.level().isClientSide) { if (this.getOffers().isEmpty()) { @@ -5055,10 +5046,10 @@ index b0eec451b68a6a2697b1620410f07b25c4d2fda7..21ab5911d52e49ec2de99071cb85ff2d 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 bd4d3a920e015db49436336cc180bc0b937750a0..2417c26a03decf756ad93cd54265277c95c653ca 100644 +index aba0104c4953ef514118ee8af76d029100081fc4..c421cc7dc6c401a19eaf193abd970f21e910f927 100644 --- a/net/minecraft/world/entity/player/Player.java +++ b/net/minecraft/world/entity/player/Player.java -@@ -230,6 +230,19 @@ public abstract class Player extends LivingEntity { +@@ -239,6 +239,19 @@ public abstract class Player extends LivingEntity { } // CraftBukkit end @@ -5075,7 +5066,7 @@ index bd4d3a920e015db49436336cc180bc0b937750a0..2417c26a03decf756ad93cd54265277c + } + // Purpur end - Ridables + - public Player(Level level, BlockPos pos, float yRot, GameProfile gameProfile) { + public Player(Level level, GameProfile gameProfile) { super(EntityType.PLAYER, level); this.setUUID(gameProfile.getId()); diff --git a/net/minecraft/world/entity/projectile/LlamaSpit.java b/net/minecraft/world/entity/projectile/LlamaSpit.java @@ -5096,10 +5087,10 @@ index f736f72b8e76dd82236badcdd2756f0d4da89aa4..0dbfbadcabcf1b719addb034e676cb51 protected double getDefaultGravity() { return 0.06; diff --git a/net/minecraft/world/entity/projectile/WitherSkull.java b/net/minecraft/world/entity/projectile/WitherSkull.java -index c96dc62b9f890335892a8075ed9b1285f98c9e8a..8e95577de28fc4834dcfc3d4fed747d9d14b1618 100644 +index 5f20dded96fac2dd5d1b0282e7f8487344beb4ee..3b68e1a73da3e70f459cdc31e8447bcee37a914d 100644 --- a/net/minecraft/world/entity/projectile/WitherSkull.java +++ b/net/minecraft/world/entity/projectile/WitherSkull.java -@@ -109,6 +109,14 @@ public class WitherSkull extends AbstractHurtingProjectile { +@@ -110,6 +110,14 @@ public class WitherSkull extends AbstractHurtingProjectile { } // Purpur end - Add canSaveToDisk to Entity diff --git a/purpur-server/minecraft-patches/unapplied-features/0002-Configurable-entity-base-attributes.patch b/purpur-server/minecraft-patches/features/0002-Configurable-entity-base-attributes.patch similarity index 87% rename from purpur-server/minecraft-patches/unapplied-features/0002-Configurable-entity-base-attributes.patch rename to purpur-server/minecraft-patches/features/0002-Configurable-entity-base-attributes.patch index 8f2f93849..c732be65e 100644 --- a/purpur-server/minecraft-patches/unapplied-features/0002-Configurable-entity-base-attributes.patch +++ b/purpur-server/minecraft-patches/features/0002-Configurable-entity-base-attributes.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configurable entity base attributes diff --git a/net/minecraft/world/entity/GlowSquid.java b/net/minecraft/world/entity/GlowSquid.java -index 351f92e1627f465a9a292d4a5e5c256a8e323ab3..b6f52326f52ce2885ece346944a321d7c924a470 100644 +index 8e8ddab59de508c84c4182e105a11554387dcce0..1896f91e10a5e17332836d5354813a18a4dfe6dc 100644 --- a/net/minecraft/world/entity/GlowSquid.java +++ b/net/minecraft/world/entity/GlowSquid.java -@@ -46,6 +46,13 @@ public class GlowSquid extends Squid { +@@ -47,6 +47,13 @@ public class GlowSquid extends Squid { } // Purpur end - Ridables @@ -23,10 +23,10 @@ index 351f92e1627f465a9a292d4a5e5c256a8e323ab3..b6f52326f52ce2885ece346944a321d7 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 a6739650bfee639925a63f345ac39c6e0c5c3209..5208518ad9fe86e25b07aeffa9633407aa6f2f1c 100644 +index e78d30d8fdfcb1a530bf3380251fabd0c9a18f46..ae0c2f41c522656bde37d4f31699ee6172b5a79d 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java -@@ -278,6 +278,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -291,6 +291,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin protected LivingEntity(EntityType entityType, Level level) { super(entityType, level); this.attributes = new AttributeMap(DefaultAttributes.getSupplier(entityType), this); // Purpur - Ridables @@ -34,7 +34,7 @@ index a6739650bfee639925a63f345ac39c6e0c5c3209..5208518ad9fe86e25b07aeffa9633407 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()); -@@ -297,6 +298,8 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -309,6 +310,8 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin return new EntityEquipment(); } @@ -44,10 +44,10 @@ index a6739650bfee639925a63f345ac39c6e0c5c3209..5208518ad9fe86e25b07aeffa9633407 return this.brain; } diff --git a/net/minecraft/world/entity/ambient/Bat.java b/net/minecraft/world/entity/ambient/Bat.java -index 99845dde0c633714acefb0bb482d8422d946dd46..581894f58df1df4b50aa537252cb4be6bbcebf80 100644 +index ed4016af3532f33023a3267cd0daa10757765fa3..d25da9a9560ce171df3ada22756e4c54a91ff378 100644 --- a/net/minecraft/world/entity/ambient/Bat.java +++ b/net/minecraft/world/entity/ambient/Bat.java -@@ -95,6 +95,21 @@ public class Bat extends AmbientCreature { +@@ -96,6 +96,21 @@ public class Bat extends AmbientCreature { } // Purpur end - Ridables @@ -70,10 +70,10 @@ index 99845dde0c633714acefb0bb482d8422d946dd46..581894f58df1df4b50aa537252cb4be6 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 e55507fa09001b431519ef9c76bf444d7df3f7ea..d07a708f06ba738369882ddaa968c2de9c6c560e 100644 +index be1774d479bfcd349e62ecb69bf7367d6eea7d75..bdb16d355dac48760c9a083303035265f6a1fc74 100644 --- a/net/minecraft/world/entity/animal/Bee.java +++ b/net/minecraft/world/entity/animal/Bee.java -@@ -472,6 +472,14 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -473,6 +473,14 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { return beehiveBlockEntity != null && beehiveBlockEntity.isFireNearby(); } @@ -89,10 +89,10 @@ index e55507fa09001b431519ef9c76bf444d7df3f7ea..d07a708f06ba738369882ddaa968c2de 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 74a44f97dcf4fabeac28a2f8b31e9b717d47ea49..d2813c68df511a2702f2b57c31f828730a9a21c8 100644 +index a960c3a4854f7d2343747d463d1d505b2e39d16b..d429beb03da8b499f19c3ed721b110d916849698 100644 --- a/net/minecraft/world/entity/animal/Cat.java +++ b/net/minecraft/world/entity/animal/Cat.java -@@ -116,6 +116,14 @@ public class Cat extends TamableAnimal { +@@ -117,6 +117,14 @@ public class Cat extends TamableAnimal { } // Purpur end - Ridables @@ -108,10 +108,10 @@ index 74a44f97dcf4fabeac28a2f8b31e9b717d47ea49..d2813c68df511a2702f2b57c31f82873 protected void registerGoals() { this.temptGoal = new Cat.CatTemptGoal(this, 0.6, stack -> stack.is(ItemTags.CAT_FOOD), true); diff --git a/net/minecraft/world/entity/animal/Chicken.java b/net/minecraft/world/entity/animal/Chicken.java -index 8708a6e5a493b6150671b7bdd6b9971371ef309c..40fc57f1c298e1c70fddf8b6eb2f3e8e9e41e60c 100644 +index 26732fde9894816cb83ba1249b2ac9b47e2b639b..b4b2cebbc8d4645dec0b1bfe4243426a1e7ccda5 100644 --- a/net/minecraft/world/entity/animal/Chicken.java +++ b/net/minecraft/world/entity/animal/Chicken.java -@@ -88,6 +88,14 @@ public class Chicken extends Animal { +@@ -89,6 +89,14 @@ public class Chicken extends Animal { } // Purpur end - Ridables @@ -145,10 +145,10 @@ index 651c9243902e3c48fb438913974e996d67d6f746..ed52fbbf93e7a238d0f45981f8629ba8 public ItemStack getBucketItemStack() { return new ItemStack(Items.COD_BUCKET); diff --git a/net/minecraft/world/entity/animal/Cow.java b/net/minecraft/world/entity/animal/Cow.java -index ff1b8c93baccf1d417ef0f9338a6f8d66716dafc..7c4f1eadcbc13010f6b4b5748b8e0d5c822458e1 100644 +index 802c536659d45d0974fe788535ca326b86f90551..9dbc5f7b3896acb199577afa85451da38f2d2a01 100644 --- a/net/minecraft/world/entity/animal/Cow.java +++ b/net/minecraft/world/entity/animal/Cow.java -@@ -45,6 +45,14 @@ public class Cow extends AbstractCow { +@@ -46,6 +46,14 @@ public class Cow extends AbstractCow { } // Purpur end - Ridables @@ -164,10 +164,10 @@ index ff1b8c93baccf1d417ef0f9338a6f8d66716dafc..7c4f1eadcbc13010f6b4b5748b8e0d5c 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 144b163a4a82997ca88e906bbadcf5835636aece..932ec7ed4ec102f64fa977835d2c7ebe23afa6e3 100644 +index 213421070ce6a356aecc31ef7b13701b4403952a..c8ed91c1902261d6b15744e1fbe1bf7f861b51a8 100644 --- a/net/minecraft/world/entity/animal/Dolphin.java +++ b/net/minecraft/world/entity/animal/Dolphin.java -@@ -150,6 +150,14 @@ public class Dolphin extends AgeableWaterCreature { +@@ -151,6 +151,14 @@ public class Dolphin extends AgeableWaterCreature { } // Purpur end - Ridables @@ -183,10 +183,10 @@ index 144b163a4a82997ca88e906bbadcf5835636aece..932ec7ed4ec102f64fa977835d2c7ebe @Override public SpawnGroupData finalizeSpawn( diff --git a/net/minecraft/world/entity/animal/Fox.java b/net/minecraft/world/entity/animal/Fox.java -index eb25d655140e425208ee9eeae24ebb756f1b7306..8d69b6bb1d5efd0b47595a12acdd2088cddd5ace 100644 +index a81ada76bfd6c4b49d1552f48e2009bc7d8c71d2..869a0154c81593db8933f9daa6a7d3a9d02facc5 100644 --- a/net/minecraft/world/entity/animal/Fox.java +++ b/net/minecraft/world/entity/animal/Fox.java -@@ -179,6 +179,14 @@ public class Fox extends Animal { +@@ -180,6 +180,14 @@ public class Fox extends Animal { } // Purpur end - Ridables @@ -202,10 +202,10 @@ index eb25d655140e425208ee9eeae24ebb756f1b7306..8d69b6bb1d5efd0b47595a12acdd2088 protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); diff --git a/net/minecraft/world/entity/animal/IronGolem.java b/net/minecraft/world/entity/animal/IronGolem.java -index 3a78342a9ce9b5393a280530b50a8c843e201845..fd0d1abcb34862fc7a812f1e3d96969a5c917352 100644 +index d7c330e77c384bba800829bdbe07f6b66695896e..1cb7e0985a59e83f118d4656e94a79f4d81836ff 100644 --- a/net/minecraft/world/entity/animal/IronGolem.java +++ b/net/minecraft/world/entity/animal/IronGolem.java -@@ -91,6 +91,14 @@ public class IronGolem extends AbstractGolem implements NeutralMob { +@@ -92,6 +92,14 @@ public class IronGolem extends AbstractGolem implements NeutralMob { } // Purpur end - Ridables @@ -221,10 +221,10 @@ index 3a78342a9ce9b5393a280530b50a8c843e201845..fd0d1abcb34862fc7a812f1e3d96969a protected void registerGoals() { if (this.level().purpurConfig.ironGolemPoppyCalm) this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.ReceiveFlower(this)); // Purpur - Iron golem calm anger options diff --git a/net/minecraft/world/entity/animal/MushroomCow.java b/net/minecraft/world/entity/animal/MushroomCow.java -index f04342dd4addb2be47533f12a2a475f12c1869f1..af035af33db993cf7c573b87df576529e98a842e 100644 +index 80c25b591e0b9f3f8132cdad27d1896d70293cd2..8cfbe37df24647c3f0a2d64bcc3451de1402c86f 100644 --- a/net/minecraft/world/entity/animal/MushroomCow.java +++ b/net/minecraft/world/entity/animal/MushroomCow.java -@@ -78,6 +78,13 @@ public class MushroomCow extends AbstractCow implements Shearable { +@@ -79,6 +79,13 @@ public class MushroomCow extends AbstractCow implements Shearable { } // Purpur end - Ridables @@ -239,10 +239,10 @@ index f04342dd4addb2be47533f12a2a475f12c1869f1..af035af33db993cf7c573b87df576529 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 b8780911350ac5f4f10acdbed2b13523c8692344..b05aea388ddadaa5bc28bee9f3f4d7fbf673eaa7 100644 +index 2aad5800fa4e2fc68fb63ab440dc9d5fccb2d86b..84664a62dcae89dff1b63b0ac952756440ee090f 100644 --- a/net/minecraft/world/entity/animal/Ocelot.java +++ b/net/minecraft/world/entity/animal/Ocelot.java -@@ -80,6 +80,14 @@ public class Ocelot extends Animal { +@@ -81,6 +81,14 @@ public class Ocelot extends Animal { } // Purpur end - Ridables @@ -258,10 +258,10 @@ index b8780911350ac5f4f10acdbed2b13523c8692344..b05aea388ddadaa5bc28bee9f3f4d7fb 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 44af6a2bcb1ba60a487555c5240b38798798b769..ebeed4fab4fff87ac61a3a4ef28443eb4746c3fa 100644 +index cbe493c19cd377c3b284dd9b3ea7bf24fee5cd7c..4ec69b45049b2c947e0d9ef71619e8acd358e7ad 100644 --- a/net/minecraft/world/entity/animal/Panda.java +++ b/net/minecraft/world/entity/animal/Panda.java -@@ -132,6 +132,15 @@ public class Panda extends Animal { +@@ -133,6 +133,15 @@ public class Panda extends Animal { } // Purpur end - Ridables @@ -277,7 +277,7 @@ index 44af6a2bcb1ba60a487555c5240b38798798b769..ebeed4fab4fff87ac61a3a4ef28443eb @Override protected boolean canDispenserEquipIntoSlot(EquipmentSlot slot) { return slot == EquipmentSlot.MAINHAND && this.canPickUpLoot(); -@@ -625,7 +634,11 @@ public class Panda extends Animal { +@@ -626,7 +635,11 @@ public class Panda extends Animal { public void setAttributes() { if (this.isWeak()) { @@ -291,10 +291,10 @@ index 44af6a2bcb1ba60a487555c5240b38798798b769..ebeed4fab4fff87ac61a3a4ef28443eb if (this.isLazy()) { diff --git a/net/minecraft/world/entity/animal/Parrot.java b/net/minecraft/world/entity/animal/Parrot.java -index 573efbc5f5f4ad0be30868c7faa058e68bf2fd67..94031cbd5d40c9a5536b1d1c404bbe2666e8ae0a 100644 +index 03e68a5bd1c51da13dafefe002f95884ee5787d0..d997102941a6add1b116053c119bcd6690eb42a5 100644 --- a/net/minecraft/world/entity/animal/Parrot.java +++ b/net/minecraft/world/entity/animal/Parrot.java -@@ -191,6 +191,14 @@ public class Parrot extends ShoulderRidingEntity implements FlyingAnimal { +@@ -193,6 +193,14 @@ public class Parrot extends ShoulderRidingEntity implements FlyingAnimal { } // Purpur end - Ridables @@ -310,10 +310,10 @@ index 573efbc5f5f4ad0be30868c7faa058e68bf2fd67..94031cbd5d40c9a5536b1d1c404bbe26 @Override public SpawnGroupData finalizeSpawn( diff --git a/net/minecraft/world/entity/animal/Pig.java b/net/minecraft/world/entity/animal/Pig.java -index 9e15bf55aa3986a227452fb1a5ebc4315f6f4d6c..70d5debdf6a7e9b631e21b47e7e35b15c065410b 100644 +index c2ac954b9cdea04450c7d72845568236fff1b686..9f511a6a2692dc46c14e0e0e59518c0a3040cfb9 100644 --- a/net/minecraft/world/entity/animal/Pig.java +++ b/net/minecraft/world/entity/animal/Pig.java -@@ -82,6 +82,14 @@ public class Pig extends Animal implements ItemSteerable { +@@ -83,6 +83,14 @@ public class Pig extends Animal implements ItemSteerable { } // Purpur end - Ridables @@ -329,10 +329,10 @@ index 9e15bf55aa3986a227452fb1a5ebc4315f6f4d6c..70d5debdf6a7e9b631e21b47e7e35b15 protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/animal/PolarBear.java b/net/minecraft/world/entity/animal/PolarBear.java -index 4561b590b0068bfbcfd990bbf8b6640c0bd1493c..d6f5c2573f5fd072a7eaed39790b43e7a67cf3b8 100644 +index 16dcc17778f3bde4c034a12259188d8297685dd9..28919a96de837a15d116c6b863eba5c8a1cf6a7b 100644 --- a/net/minecraft/world/entity/animal/PolarBear.java +++ b/net/minecraft/world/entity/animal/PolarBear.java -@@ -116,6 +116,14 @@ public class PolarBear extends Animal implements NeutralMob { +@@ -117,6 +117,14 @@ public class PolarBear extends Animal implements NeutralMob { } // Purpur end - Ridables @@ -348,10 +348,10 @@ index 4561b590b0068bfbcfd990bbf8b6640c0bd1493c..d6f5c2573f5fd072a7eaed39790b43e7 @Override public AgeableMob getBreedOffspring(ServerLevel level, AgeableMob otherParent) { diff --git a/net/minecraft/world/entity/animal/Pufferfish.java b/net/minecraft/world/entity/animal/Pufferfish.java -index c35973498b0abae2dafa63f30ed5e6ca87f6baa5..bed7d937f02d1fbc8fdd277a2d0524e79b19f707 100644 +index 754cd3c887c22b9b2afb0d70a2c57bfe6b251206..dbdb7f71464ccd06a04a47ace24a86e6854409fc 100644 --- a/net/minecraft/world/entity/animal/Pufferfish.java +++ b/net/minecraft/world/entity/animal/Pufferfish.java -@@ -58,6 +58,13 @@ public class Pufferfish extends AbstractFish { +@@ -59,6 +59,13 @@ public class Pufferfish extends AbstractFish { } // Purpur end - Ridables @@ -366,10 +366,10 @@ index c35973498b0abae2dafa63f30ed5e6ca87f6baa5..bed7d937f02d1fbc8fdd277a2d0524e7 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 338a1d3f1352f49ba5b53c55a49abce3ded2b0c0..8e3dcd912d7631bc7863a576e28f85c8d1cb2818 100644 +index 4f33044bf7c8fdf867983691b74a7f47b4689267..d74b492c5d1c3a323106b5de5bbf595a38d976a1 100644 --- a/net/minecraft/world/entity/animal/Rabbit.java +++ b/net/minecraft/world/entity/animal/Rabbit.java -@@ -144,6 +144,14 @@ public class Rabbit extends Animal { +@@ -145,6 +145,14 @@ public class Rabbit extends Animal { } // Purpur end - Ridables @@ -385,10 +385,10 @@ index 338a1d3f1352f49ba5b53c55a49abce3ded2b0c0..8e3dcd912d7631bc7863a576e28f85c8 public void registerGoals() { this.goalSelector.addGoal(1, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/animal/Salmon.java b/net/minecraft/world/entity/animal/Salmon.java -index 2b60d92eec3192416b0c39ddaa1fa490d15a6137..8559e7e8c5163eb55b997521dca2e96b5ae3c9bc 100644 +index 265b2a6db778cabc1a97726c22c991051e3007fe..e426b3280b519a3cd727b200794324361c62b67e 100644 --- a/net/minecraft/world/entity/animal/Salmon.java +++ b/net/minecraft/world/entity/animal/Salmon.java -@@ -50,6 +50,13 @@ public class Salmon extends AbstractSchoolingFish { +@@ -51,6 +51,13 @@ public class Salmon extends AbstractSchoolingFish { } // Purpur end - Ridables @@ -403,10 +403,10 @@ index 2b60d92eec3192416b0c39ddaa1fa490d15a6137..8559e7e8c5163eb55b997521dca2e96b public int getMaxSchoolSize() { return 5; diff --git a/net/minecraft/world/entity/animal/SnowGolem.java b/net/minecraft/world/entity/animal/SnowGolem.java -index aca62391131333d604d21c9aaf2bcea620dc51b3..764429b9d20ac105c9ae3b050adf5d3defbd6038 100644 +index 6c7b218c01f466ccd1d427206c6662e23bea1c0e..2350e5a0ba3d4c3782332a4ef51e2b0ef0b53f39 100644 --- a/net/minecraft/world/entity/animal/SnowGolem.java +++ b/net/minecraft/world/entity/animal/SnowGolem.java -@@ -79,6 +79,14 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM +@@ -80,6 +80,14 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM } // Purpur end - Ridables @@ -441,10 +441,10 @@ index 21ff0b49a1df9b8a95cb2fdf7b43d9a676a497a6..2a0dc779ec2a53a4feb4d2d665cf9d82 protected void registerGoals() { this.goalSelector.addGoal(0, new Squid.SquidRandomMovementGoal(this)); diff --git a/net/minecraft/world/entity/animal/TropicalFish.java b/net/minecraft/world/entity/animal/TropicalFish.java -index d7bea58644dd707b835e0c728b2c89c697c7e554..946874b3146bd7b226b4cb07110eec57c2968bb7 100644 +index cc26b929abd249536659df03a1cafbe83cde6f0f..c102db5ffdfc7dcb0ec7e59fb031fe6afcdd8237 100644 --- a/net/minecraft/world/entity/animal/TropicalFish.java +++ b/net/minecraft/world/entity/animal/TropicalFish.java -@@ -88,6 +88,13 @@ public class TropicalFish extends AbstractSchoolingFish { +@@ -89,6 +89,13 @@ public class TropicalFish extends AbstractSchoolingFish { } // Purpur end - Ridables @@ -459,10 +459,10 @@ index d7bea58644dd707b835e0c728b2c89c697c7e554..946874b3146bd7b226b4cb07110eec57 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 7c97f917b0cc5652c20abdd26428cccad10b8757..11772e81d932fae6542a0cb2d283ef91b5bbbd76 100644 +index 4302c302d974bae294d7ffa6f30439f44fe5d0b1..e26b97e92ecfadb351e91aeae38beb4c4da87e26 100644 --- a/net/minecraft/world/entity/animal/Turtle.java +++ b/net/minecraft/world/entity/animal/Turtle.java -@@ -102,6 +102,14 @@ public class Turtle extends Animal { +@@ -103,6 +103,14 @@ public class Turtle extends Animal { } // Purpur end - Ridables @@ -478,10 +478,10 @@ index 7c97f917b0cc5652c20abdd26428cccad10b8757..11772e81d932fae6542a0cb2d283ef91 this.homePos = homePos; } diff --git a/net/minecraft/world/entity/animal/allay/Allay.java b/net/minecraft/world/entity/animal/allay/Allay.java -index 31371684bb2bddc6bf9592bef1190af3b09f4d65..062f2ca0c8f2443cf890dc917b9de46310eb79bc 100644 +index e05f92d31cae8ac143274c662b2eca18ebc378d7..cf6ff7b7b4a007d7ff4b3c5a25d4f5a36422c683 100644 --- a/net/minecraft/world/entity/animal/allay/Allay.java +++ b/net/minecraft/world/entity/animal/allay/Allay.java -@@ -171,6 +171,14 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS +@@ -168,6 +168,14 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS } // Purpur end - Ridables @@ -497,10 +497,10 @@ index 31371684bb2bddc6bf9592bef1190af3b09f4d65..062f2ca0c8f2443cf890dc917b9de463 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 2b38e942492b3324683e05d36ed906462da92ac4..67a93960b3c6fe5725783ebf9f1c5b57e931f58c 100644 +index c13745fc848c56bfce6161099c27388dc4164cb3..e4c8376c009984e40b90c01f78c65e76e260ee0b 100644 --- a/net/minecraft/world/entity/animal/armadillo/Armadillo.java +++ b/net/minecraft/world/entity/animal/armadillo/Armadillo.java -@@ -98,6 +98,14 @@ public class Armadillo extends Animal { +@@ -99,6 +99,14 @@ public class Armadillo extends Animal { } // Purpur end - Ridables @@ -516,10 +516,10 @@ index 2b38e942492b3324683e05d36ed906462da92ac4..67a93960b3c6fe5725783ebf9f1c5b57 protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); diff --git a/net/minecraft/world/entity/animal/axolotl/Axolotl.java b/net/minecraft/world/entity/animal/axolotl/Axolotl.java -index f3f0f5d7fe79e87b893aa52113f02a774ccc057a..83b1080765eb49a8a606258bb2db8b1a7daea081 100644 +index 8a21191672e524457f7f45782c57dd3638df1cec..17b20b36a3edafaea089288d22ad3e07795b9770 100644 --- a/net/minecraft/world/entity/animal/axolotl/Axolotl.java +++ b/net/minecraft/world/entity/animal/axolotl/Axolotl.java -@@ -137,6 +137,14 @@ public class Axolotl extends Animal implements Bucketable { +@@ -139,6 +139,14 @@ public class Axolotl extends Animal implements Bucketable { } // Purpur end - Ridables @@ -535,10 +535,10 @@ index f3f0f5d7fe79e87b893aa52113f02a774ccc057a..83b1080765eb49a8a606258bb2db8b1a public float getWalkTargetValue(BlockPos pos, LevelReader level) { return 0.0F; diff --git a/net/minecraft/world/entity/animal/camel/Camel.java b/net/minecraft/world/entity/animal/camel/Camel.java -index 3d4efc2918fd10a63065a052d9e460b49489cf00..6c6ef89aacbc328a2cb2dc05022998dbd79cfaf8 100644 +index 78073cf5c93389224ccf7d7036d6b11af05280b6..f45d1ba8dc0bb4b7041c5efba5d6261a3a5f5ff4 100644 --- a/net/minecraft/world/entity/animal/camel/Camel.java +++ b/net/minecraft/world/entity/animal/camel/Camel.java -@@ -334,6 +334,23 @@ public class Camel extends AbstractHorse { +@@ -336,6 +336,23 @@ public class Camel extends AbstractHorse { return this.dashCooldown; } @@ -563,10 +563,10 @@ index 3d4efc2918fd10a63065a052d9e460b49489cf00..6c6ef89aacbc328a2cb2dc05022998db public SoundEvent getAmbientSound() { return SoundEvents.CAMEL_AMBIENT; diff --git a/net/minecraft/world/entity/animal/horse/AbstractHorse.java b/net/minecraft/world/entity/animal/horse/AbstractHorse.java -index 8bd9fd0a017b9822129119d7e16e872f0bdc8c2d..601e2912790759487c8d2f270f30a82689c52236 100644 +index ba56d68737cedabcddafafb18022f7c106631ca4..e78ef459d6eecb7f69882ed95cd9f9967f53989f 100644 --- a/net/minecraft/world/entity/animal/horse/AbstractHorse.java +++ b/net/minecraft/world/entity/animal/horse/AbstractHorse.java -@@ -138,6 +138,46 @@ public abstract class AbstractHorse extends Animal implements HasCustomInventory +@@ -139,6 +139,46 @@ public abstract class AbstractHorse extends Animal implements HasCustomInventory } // Purpur end - Ridables @@ -613,7 +613,7 @@ index 8bd9fd0a017b9822129119d7e16e872f0bdc8c2d..601e2912790759487c8d2f270f30a826 @Override protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HorseHasRider(this)); // Purpur - Ridables -@@ -1054,7 +1094,7 @@ public abstract class AbstractHorse extends Animal implements HasCustomInventory +@@ -1051,7 +1091,7 @@ public abstract class AbstractHorse extends Animal implements HasCustomInventory spawnGroupData = new AgeableMob.AgeableMobGroupData(0.2F); } @@ -651,10 +651,10 @@ index 66dda36aeb668488076f0c93dc83ab6cc4ec1a31..3aa12702cd1f4ef160180bc6ba64a656 public SoundEvent getAmbientSound() { return SoundEvents.DONKEY_AMBIENT; diff --git a/net/minecraft/world/entity/animal/horse/Horse.java b/net/minecraft/world/entity/animal/horse/Horse.java -index 5b2d1fedf61880990ca29b51b3d83a19e79047d1..e0346014de51958976459eeb6677d886e7f261ab 100644 +index f1cb2e315e1d86f9fcd87db11d3ee7a81cfe12f6..53c0eac62018a0d88e30b8c13de94216ff829cd8 100644 --- a/net/minecraft/world/entity/animal/horse/Horse.java +++ b/net/minecraft/world/entity/animal/horse/Horse.java -@@ -53,6 +53,23 @@ public class Horse extends AbstractHorse { +@@ -54,6 +54,23 @@ public class Horse extends AbstractHorse { } // Purpur end - Ridables @@ -679,10 +679,10 @@ index 5b2d1fedf61880990ca29b51b3d83a19e79047d1..e0346014de51958976459eeb6677d886 protected void randomizeAttributes(RandomSource random) { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(generateMaxHealth(random::nextInt)); diff --git a/net/minecraft/world/entity/animal/horse/Llama.java b/net/minecraft/world/entity/animal/horse/Llama.java -index b60fa4cb07d8dc6b52e76b5e9f596bafc815ba2d..10e7724d424cd39c96b91cf3de4bc4524d9311a4 100644 +index da6450f7573ca9797577d5afae2bb1365d112177..6fe6507edbf4c3c2795b8fe000d230d5fe6a2486 100644 --- a/net/minecraft/world/entity/animal/horse/Llama.java +++ b/net/minecraft/world/entity/animal/horse/Llama.java -@@ -129,6 +129,23 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob { +@@ -130,6 +130,23 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob { } // Purpur end - Ridables @@ -735,10 +735,10 @@ index b1c96936ba8dcba4435a649dd7e6ec3c921c3702..0107bb5fc029c5390d73e9a4cd08c138 public SoundEvent getAmbientSound() { return SoundEvents.MULE_AMBIENT; diff --git a/net/minecraft/world/entity/animal/horse/SkeletonHorse.java b/net/minecraft/world/entity/animal/horse/SkeletonHorse.java -index b8bdf9d4665cbfa590842727079a740274f13c34..b7903386ce4648ef577b1d4875866b7c268c888b 100644 +index ba0e483df57cc56f356282519105a2e3e77601f8..a7bcc0ff10e429ebfe91173c392e9a0c07903289 100644 --- a/net/minecraft/world/entity/animal/horse/SkeletonHorse.java +++ b/net/minecraft/world/entity/animal/horse/SkeletonHorse.java -@@ -48,6 +48,23 @@ public class SkeletonHorse extends AbstractHorse { +@@ -49,6 +49,23 @@ public class SkeletonHorse extends AbstractHorse { } // Purpur end - Ridables @@ -763,10 +763,10 @@ index b8bdf9d4665cbfa590842727079a740274f13c34..b7903386ce4648ef577b1d4875866b7c return createBaseHorseAttributes().add(Attributes.MAX_HEALTH, 15.0).add(Attributes.MOVEMENT_SPEED, 0.2F); } diff --git a/net/minecraft/world/entity/animal/horse/TraderLlama.java b/net/minecraft/world/entity/animal/horse/TraderLlama.java -index d67d24e64d387a7f6a18aef1c8dcab1c6df3f824..4664de247745c5346f1d131b19aac0512d394647 100644 +index 7214a8d3597cd46cdc8e0837365cdb4a0a5b4cba..39175d4537e84ef39bcbdafc5200ed7b14482d62 100644 --- a/net/minecraft/world/entity/animal/horse/TraderLlama.java +++ b/net/minecraft/world/entity/animal/horse/TraderLlama.java -@@ -52,6 +52,23 @@ public class TraderLlama extends Llama { +@@ -53,6 +53,23 @@ public class TraderLlama extends Llama { } // Purpur end - Ridables @@ -819,10 +819,10 @@ index 45d09ebcc9ce4321285a4ec49e8ee369290f6b2c..3d597bd355b6c918ea1bf4b7d537ad4f 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 a3df1d80dbaefb5bc7e7e2618039876bcf1d3462..7d4d13d78da258bdceae82cc57e0aa5a3e06fd7d 100644 +index f9e86a4f632e96d5cf531c90f2813afe2fb45fbb..8e4a14ca6a0cef1c52c64de3502077d7d25b0308 100644 --- a/net/minecraft/world/entity/animal/sheep/Sheep.java +++ b/net/minecraft/world/entity/animal/sheep/Sheep.java -@@ -101,6 +101,14 @@ public class Sheep extends Animal implements Shearable { +@@ -79,6 +79,14 @@ public class Sheep extends Animal implements Shearable { } // Purpur end - Ridables @@ -838,10 +838,10 @@ index a3df1d80dbaefb5bc7e7e2618039876bcf1d3462..7d4d13d78da258bdceae82cc57e0aa5a 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 6c252b8021dbeb2a9ffee8a3744ac0165fd032e8..fab5a8d0974aab57a1e4a803eb4f3b47a3ee4a07 100644 +index 430c2ba035468a81402d6ed0a442006d94d33f09..683c9f82bfb2306f81b094464462d7d372ef5b22 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 @@ -857,10 +857,10 @@ index 6c252b8021dbeb2a9ffee8a3744ac0165fd032e8..fab5a8d0974aab57a1e4a803eb4f3b47 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 cff9bc3d8c9ef1935c25c4001dfd638855062573..601343a604322bae7ef91eecc91da70ee377d8f3 100644 +index d4fa7d17d3fb63e0bdc09db9e454ca4376817265..7326debf3725844bfe8730dab480da7b1d6e99aa 100644 --- a/net/minecraft/world/entity/animal/wolf/Wolf.java +++ b/net/minecraft/world/entity/animal/wolf/Wolf.java -@@ -209,6 +209,14 @@ public class Wolf extends TamableAnimal implements NeutralMob { +@@ -208,6 +208,14 @@ public class Wolf extends TamableAnimal implements NeutralMob { } // Purpur end - Ridables @@ -876,10 +876,10 @@ index cff9bc3d8c9ef1935c25c4001dfd638855062573..601343a604322bae7ef91eecc91da70e 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 a414934ae4332cc6cf622d4bb19c5937713f92a2..793567170b33ba21016b8767598d294fca4acec4 100644 +index f669dd446fc07d15c66a2a96006891bc6171baa4..40c92ff02c22ef18b36f5d8677096dc82a60f1bb 100644 --- a/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java +++ b/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -@@ -164,6 +164,13 @@ public class EnderDragon extends Mob implements Enemy { +@@ -165,6 +165,13 @@ public class EnderDragon extends Mob implements Enemy { } // Purpur end - Ridables @@ -891,9 +891,9 @@ index a414934ae4332cc6cf622d4bb19c5937713f92a2..793567170b33ba21016b8767598d294f + // Purpur end - Configurable entity base attributes + public static AttributeSupplier.Builder createAttributes() { - return Mob.createMobAttributes().add(Attributes.MAX_HEALTH, 200.0); + return Mob.createMobAttributes().add(Attributes.MAX_HEALTH, 200.0).add(Attributes.CAMERA_DISTANCE, 16.0); } -@@ -1062,7 +1069,7 @@ public class EnderDragon extends Mob implements Enemy { +@@ -1063,7 +1070,7 @@ public class EnderDragon extends Mob implements Enemy { @Override protected float sanitizeScale(float scale) { @@ -903,10 +903,10 @@ index a414934ae4332cc6cf622d4bb19c5937713f92a2..793567170b33ba21016b8767598d294f // 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 15e2c0d566256c4ba175e991d6d7fd4fdcd49c8e..f0ec9334d9e6bf879568a085db691c46f7c652b6 100644 +index 2c6158de44a8ba95d3c5124ed2827a0aa24b672d..7aaa905034979e557db97456eae3563614aab8d1 100644 --- a/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/net/minecraft/world/entity/boss/wither/WitherBoss.java -@@ -212,6 +212,14 @@ public class WitherBoss extends Monster implements RangedAttackMob { +@@ -213,6 +213,14 @@ public class WitherBoss extends Monster implements RangedAttackMob { } // Purpur end - Ridables @@ -921,7 +921,7 @@ index 15e2c0d566256c4ba175e991d6d7fd4fdcd49c8e..f0ec9334d9e6bf879568a085db691c46 @Override protected PathNavigation createNavigation(Level level) { FlyingPathNavigation flyingPathNavigation = new FlyingPathNavigation(this, level); -@@ -434,7 +442,7 @@ public class WitherBoss extends Monster implements RangedAttackMob { +@@ -435,7 +443,7 @@ public class WitherBoss extends Monster implements RangedAttackMob { this.setInvulnerableTicks(i); if (this.tickCount % 10 == 0) { @@ -950,10 +950,10 @@ index 971b974c6717a544f7f96c441cd76e9dc8d0cc2c..1636e2809701013a18700ac17807fe7e 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/Bogged.java b/net/minecraft/world/entity/monster/Bogged.java -index f572ee0a8edd6c4adb17c06083e165d4d8ed8550..bc8f46b656895d916e44a9e1dc9175da96c2fde8 100644 +index b1f06656bf60eda01e06cd4cfd908edc7b51c628..cace310ad4ad320a8a5745c6af3ec4b57e75b6a5 100644 --- a/net/minecraft/world/entity/monster/Bogged.java +++ b/net/minecraft/world/entity/monster/Bogged.java -@@ -59,6 +59,14 @@ public class Bogged extends AbstractSkeleton implements Shearable { +@@ -60,6 +60,14 @@ public class Bogged extends AbstractSkeleton implements Shearable { } // Purpur end - Ridables @@ -988,10 +988,10 @@ index 4873a3d8dd9c160ecdbda594ee546c35ec03a1e7..64eecd8d1acd318743800c1daa77cd97 public boolean doHurtTarget(ServerLevel level, Entity source) { if (super.doHurtTarget(level, source)) { diff --git a/net/minecraft/world/entity/monster/Creeper.java b/net/minecraft/world/entity/monster/Creeper.java -index 562641cdb76e7a50706459bee8a2dcdf441588cd..53a7390c61b9ada8784eae0c9b4e78ee85c68317 100644 +index 5684ab59acb554f097d713d7c1a9860452bd3564..60e420d79b73dd844bdae6c3846c6f4838fe2ca2 100644 --- a/net/minecraft/world/entity/monster/Creeper.java +++ b/net/minecraft/world/entity/monster/Creeper.java -@@ -135,6 +135,14 @@ public class Creeper extends Monster { +@@ -136,6 +136,14 @@ public class Creeper extends Monster { } // Purpur end - Ridables @@ -1007,12 +1007,12 @@ index 562641cdb76e7a50706459bee8a2dcdf441588cd..53a7390c61b9ada8784eae0c9b4e78ee protected void registerGoals() { this.goalSelector.addGoal(1, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/monster/Drowned.java b/net/minecraft/world/entity/monster/Drowned.java -index be7b7eb8328277dc790b9953161c3603d3bbe873..526de34154d873d1479f9276981e181be959ebef 100644 +index fb7a06d64a2f3ac2355bcf9eb515d4504786c585..ec0f27d04125765e91e43c4c18415b29db62b181 100644 --- a/net/minecraft/world/entity/monster/Drowned.java +++ b/net/minecraft/world/entity/monster/Drowned.java -@@ -92,6 +92,19 @@ public class Drowned extends Zombie implements RangedAttackMob { +@@ -93,6 +93,19 @@ public class Drowned extends Zombie implements RangedAttackMob { + return new AmphibiousPathNavigation(this, level); } - // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override @@ -1031,7 +1031,7 @@ index be7b7eb8328277dc790b9953161c3603d3bbe873..526de34154d873d1479f9276981e181b protected void addBehaviourGoals() { this.goalSelector.addGoal(1, new Drowned.DrownedGoToWaterGoal(this, 1.0)); diff --git a/net/minecraft/world/entity/monster/ElderGuardian.java b/net/minecraft/world/entity/monster/ElderGuardian.java -index eccbb27aa7efa6e24e04db114b06c7dbf54f9938..15f037dbd9bafc8a978911dfa04c42f3c19dc7fd 100644 +index 07355eb21c7b06d282be32f6956d4de9e399b9c9..7ebc7224d3db38cc5137112d5a74999f6e23b8d5 100644 --- a/net/minecraft/world/entity/monster/ElderGuardian.java +++ b/net/minecraft/world/entity/monster/ElderGuardian.java @@ -43,6 +43,14 @@ public class ElderGuardian extends Guardian { @@ -1050,10 +1050,10 @@ index eccbb27aa7efa6e24e04db114b06c7dbf54f9938..15f037dbd9bafc8a978911dfa04c42f3 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 f991e59e896fc39da8f318871168b4c9bb0d8328..c01c91db94136700f9501624763e3bd735986a9f 100644 +index 6836b44d88d8c7b74c05f56b66887c0319805ee7..c83d7c43969a94432f6bec076f78fb500f672926 100644 --- a/net/minecraft/world/entity/monster/EnderMan.java +++ b/net/minecraft/world/entity/monster/EnderMan.java -@@ -108,6 +108,14 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -106,6 +106,14 @@ public class EnderMan extends Monster implements NeutralMob { } // Purpur end - Ridables @@ -1069,10 +1069,10 @@ index f991e59e896fc39da8f318871168b4c9bb0d8328..c01c91db94136700f9501624763e3bd7 protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/monster/Endermite.java b/net/minecraft/world/entity/monster/Endermite.java -index ddb40c13cee7db16fc9b094828356e743e9507f2..a3095f2a5ff162d502502ad2ed0a485daba86962 100644 +index 0d03bebf2cda34072db561f6e27b06a7d26095d1..2c3e44b82b396dd8e870f548f1d18d8f4b91ad1d 100644 --- a/net/minecraft/world/entity/monster/Endermite.java +++ b/net/minecraft/world/entity/monster/Endermite.java -@@ -63,6 +63,14 @@ public class Endermite extends Monster { +@@ -64,6 +64,14 @@ public class Endermite extends Monster { } // Purpur end - Ridables @@ -1088,10 +1088,10 @@ index ddb40c13cee7db16fc9b094828356e743e9507f2..a3095f2a5ff162d502502ad2ed0a485d protected void registerGoals() { this.goalSelector.addGoal(1, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/monster/Evoker.java b/net/minecraft/world/entity/monster/Evoker.java -index 889f6be331b3b7b80de60c414b77d68947477f9e..5773dd99ad2b014dde6666f4b32a1e6ee024a9fc 100644 +index 10142de6bdf9474958ca939c956a428218ee48db..e8aac93cffa3a9d4105c03c1aeb4d571ee0eba6c 100644 --- a/net/minecraft/world/entity/monster/Evoker.java +++ b/net/minecraft/world/entity/monster/Evoker.java -@@ -67,6 +67,14 @@ public class Evoker extends SpellcasterIllager { +@@ -65,6 +65,14 @@ public class Evoker extends SpellcasterIllager { } // Purpur end - Ridables @@ -1107,10 +1107,10 @@ index 889f6be331b3b7b80de60c414b77d68947477f9e..5773dd99ad2b014dde6666f4b32a1e6e protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/Ghast.java b/net/minecraft/world/entity/monster/Ghast.java -index e087a2348dee66e0374246e992ed66bb8f18dce0..a55d588709bbf04d4267bd991fb3be0daaba34d4 100644 +index c7ac650f9618fd124035f9cf01fffada7efc97e1..5e2ae3ada994b5fa7758a61cdf1c0e9f26c23a79 100644 --- a/net/minecraft/world/entity/monster/Ghast.java +++ b/net/minecraft/world/entity/monster/Ghast.java -@@ -77,6 +77,14 @@ public class Ghast extends FlyingMob implements Enemy { +@@ -86,6 +86,14 @@ public class Ghast extends Mob implements Enemy { } // Purpur end - Ridables @@ -1126,7 +1126,7 @@ index e087a2348dee66e0374246e992ed66bb8f18dce0..a55d588709bbf04d4267bd991fb3be0d 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/Giant.java b/net/minecraft/world/entity/monster/Giant.java -index 135f83484ac31db7dcc225ba6f94e2e4ca27eea8..13021800af7cc9263ef4f393f9cfbda5061a32ae 100644 +index c098fc14eb4f2ebd7dc1f6be9507279296416eea..e673f488bfab9648075857bc40e1339f974a903c 100644 --- a/net/minecraft/world/entity/monster/Giant.java +++ b/net/minecraft/world/entity/monster/Giant.java @@ -35,6 +35,16 @@ public class Giant extends Monster { @@ -1144,8 +1144,8 @@ index 135f83484ac31db7dcc225ba6f94e2e4ca27eea8..13021800af7cc9263ef4f393f9cfbda5 + // Purpur end - Configurable entity base attributes + public static AttributeSupplier.Builder createAttributes() { - return Monster.createMonsterAttributes().add(Attributes.MAX_HEALTH, 100.0).add(Attributes.MOVEMENT_SPEED, 0.5).add(Attributes.ATTACK_DAMAGE, 50.0); - } + 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 26fb38b9741304f4fe461c929ead0f392255a3de..2b03af6e0f378d855c42fa688d0cd2bc8480102b 100644 --- a/net/minecraft/world/entity/monster/Guardian.java @@ -1189,7 +1189,7 @@ index 0335e85f196363c06597812149e9a93cba57fa9e..5b0794bd87423715cada1f860b4141fd EntityType entityType, ServerLevelAccessor level, EntitySpawnReason spawnReason, BlockPos pos, RandomSource random ) { diff --git a/net/minecraft/world/entity/monster/Illusioner.java b/net/minecraft/world/entity/monster/Illusioner.java -index d75eb765f271fb7e33d0332079aea024788dc227..09804a8c789bff4f40277c2697c3f9aed00c4d15 100644 +index 304a1ce41071e5597859b1235fa014f966ff5cfb..c45786fa6b9c7834b73fa0266ad4f37dfdfb8937 100644 --- a/net/minecraft/world/entity/monster/Illusioner.java +++ b/net/minecraft/world/entity/monster/Illusioner.java @@ -74,6 +74,16 @@ public class Illusioner extends SpellcasterIllager implements RangedAttackMob { @@ -1243,10 +1243,10 @@ index 4a1299d6cee2807522de0c2d0d4745c5810e4121..bb1364c4a220cc93f7ac01cbaa617561 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 2653cf2c353d7ae360201e74c4860a4745dd4948..2f14561a3722f8175a234ad656ef64d4c58e3b96 100644 +index 99194cf1fa89d3112719ead9f7de260ca5b9b676..96ef89704122485948a526bcc323379474ac9343 100644 --- a/net/minecraft/world/entity/monster/Phantom.java +++ b/net/minecraft/world/entity/monster/Phantom.java -@@ -152,7 +152,10 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -153,7 +153,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 @@ -1258,7 +1258,7 @@ index 2653cf2c353d7ae360201e74c4860a4745dd4948..2f14561a3722f8175a234ad656ef64d4 } public int getPhantomSize() { -@@ -177,6 +180,23 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -178,6 +181,23 @@ public class Phantom extends Mob implements Enemy { return true; } @@ -1283,10 +1283,10 @@ index 2653cf2c353d7ae360201e74c4860a4745dd4948..2f14561a3722f8175a234ad656ef64d4 public void tick() { super.tick(); diff --git a/net/minecraft/world/entity/monster/Pillager.java b/net/minecraft/world/entity/monster/Pillager.java -index 852316c9a9d0860a538eae32001e60f05dc6938f..eb4fcf0e78c39a4b94b7edb733694a87e3103552 100644 +index fa49ed77f33bca6335812e9f56176cc053a364ad..bcc20f9642e9d20cf18bb5f8e63daa277154be1a 100644 --- a/net/minecraft/world/entity/monster/Pillager.java +++ b/net/minecraft/world/entity/monster/Pillager.java -@@ -80,6 +80,14 @@ public class Pillager extends AbstractIllager implements CrossbowAttackMob, Inve +@@ -81,6 +81,14 @@ public class Pillager extends AbstractIllager implements CrossbowAttackMob, Inve } // Purpur end - Ridables @@ -1302,10 +1302,10 @@ index 852316c9a9d0860a538eae32001e60f05dc6938f..eb4fcf0e78c39a4b94b7edb733694a87 protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/Ravager.java b/net/minecraft/world/entity/monster/Ravager.java -index 382ef8b0f8d5c5ef6a7698097e9b41b7adc04353..3adf0ec66db61b556a06ffe0fe835b57f8520948 100644 +index b67ac487ce4a7fd8b2f62452ab0b87f4a55006f2..9e7b07f353fb8f0650b8805014c371368eaabcd5 100644 --- a/net/minecraft/world/entity/monster/Ravager.java +++ b/net/minecraft/world/entity/monster/Ravager.java -@@ -92,6 +92,14 @@ public class Ravager extends Raider { +@@ -93,6 +93,14 @@ public class Ravager extends Raider { } // Purpur end - Ridables @@ -1321,10 +1321,10 @@ index 382ef8b0f8d5c5ef6a7698097e9b41b7adc04353..3adf0ec66db61b556a06ffe0fe835b57 protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/Shulker.java b/net/minecraft/world/entity/monster/Shulker.java -index 14cddb216b32990c2ce2381a4d6bf6f76c686f95..2b19edafe00be425427f47cac045bf301e3caa39 100644 +index e0c70493e771b50885b0263ff07e8ee594c2dfdc..069dacf455e597a4cb2efae03553479cac2a5fec 100644 --- a/net/minecraft/world/entity/monster/Shulker.java +++ b/net/minecraft/world/entity/monster/Shulker.java -@@ -126,6 +126,14 @@ public class Shulker extends AbstractGolem implements Enemy { +@@ -127,6 +127,14 @@ public class Shulker extends AbstractGolem implements Enemy { } // Purpur end - Ridables @@ -1339,7 +1339,7 @@ index 14cddb216b32990c2ce2381a4d6bf6f76c686f95..2b19edafe00be425427f47cac045bf30 @Override protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables -@@ -609,7 +617,7 @@ public class Shulker extends AbstractGolem implements Enemy { +@@ -610,7 +618,7 @@ public class Shulker extends AbstractGolem implements Enemy { @Override protected float sanitizeScale(float scale) { @@ -1370,10 +1370,10 @@ index 19dcc657fd2a995638d5e23c2b043d012d978e79..c200d57841304ba0d7a76fdd9a440fe9 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 9a197c2be40e0a69f4a68ff045c2395802f0a5f3..54941e5f93579db512472d324a48a9b272787b91 100644 +index ed4f0d48120384d847291724ac995cdee00d10aa..c19b76a1a0572cb52ee83769384cdb44e4cdf700 100644 --- a/net/minecraft/world/entity/monster/Skeleton.java +++ b/net/minecraft/world/entity/monster/Skeleton.java -@@ -43,6 +43,13 @@ public class Skeleton extends AbstractSkeleton { +@@ -44,6 +44,13 @@ public class Skeleton extends AbstractSkeleton { } // Purpur end - Ridables @@ -1388,10 +1388,10 @@ index 9a197c2be40e0a69f4a68ff045c2395802f0a5f3..54941e5f93579db512472d324a48a9b2 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 9127e99d632bcd01c2f042c33dc87dd49736b96f..015af82ab82c3676a7b80c01b83eaf61ee28b61b 100644 +index 7ac6449dc3ede6bda51579282b1155371f0800d3..38cdc67bd683b653eb76b1c70e5b493f08245fe6 100644 --- a/net/minecraft/world/entity/monster/Slime.java +++ b/net/minecraft/world/entity/monster/Slime.java -@@ -100,6 +100,39 @@ public class Slime extends Mob implements Enemy { +@@ -101,6 +101,39 @@ public class Slime extends Mob implements Enemy { } // Purpur end - Ridables @@ -1431,7 +1431,7 @@ index 9127e99d632bcd01c2f042c33dc87dd49736b96f..015af82ab82c3676a7b80c01b83eaf61 @Override protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables -@@ -130,9 +163,9 @@ public class Slime extends Mob implements Enemy { +@@ -131,9 +164,9 @@ public class Slime extends Mob implements Enemy { this.entityData.set(ID_SIZE, i); this.reapplyPosition(); this.refreshDimensions(); @@ -1481,7 +1481,7 @@ index 4a7dbd1e4d927240433882a95822e9edfc83b827..b5465b552c5aea7603a54cfdeafe451b EntityType entityType, ServerLevelAccessor level, EntitySpawnReason spawnReason, BlockPos pos, RandomSource random ) { diff --git a/net/minecraft/world/entity/monster/Strider.java b/net/minecraft/world/entity/monster/Strider.java -index bb46a6ec3ad6a7d0943bf61028d5f9abf76bbeb7..4ea92637677997ab4c98da437394f5682ba2389a 100644 +index ddd3a0d629f720b7acacf01bf2a7db53ee28724e..a68e9f3f96f37b6dd685fd02072f38b9e320fffc 100644 --- a/net/minecraft/world/entity/monster/Strider.java +++ b/net/minecraft/world/entity/monster/Strider.java @@ -109,6 +109,14 @@ public class Strider extends Animal implements ItemSteerable { @@ -1500,10 +1500,10 @@ index bb46a6ec3ad6a7d0943bf61028d5f9abf76bbeb7..4ea92637677997ab4c98da437394f568 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 129c712f767fbbdcc7d0df83f838194102efcd15..43de5ca497f5e3ac3d64345cb998f392852e6e3b 100644 +index 970eab5794263e40243f0527ab8be98252841fb0..b5e0f1a2c3ca138cfa1cc4138cf1c5e76dcb9436 100644 --- a/net/minecraft/world/entity/monster/Vex.java +++ b/net/minecraft/world/entity/monster/Vex.java -@@ -102,6 +102,14 @@ public class Vex extends Monster implements TraceableEntity { +@@ -104,6 +104,14 @@ public class Vex extends Monster implements TraceableEntity { } // Purpur end - Ridables @@ -1519,10 +1519,10 @@ index 129c712f767fbbdcc7d0df83f838194102efcd15..43de5ca497f5e3ac3d64345cb998f392 public boolean isFlapping() { return this.tickCount % TICKS_PER_FLAP == 0; diff --git a/net/minecraft/world/entity/monster/Vindicator.java b/net/minecraft/world/entity/monster/Vindicator.java -index 922c5ce69fc2a3cb53dc230f4efe96bde91cd96a..01a5357d5359394b61f2456fdee8bf3aadf0ca32 100644 +index f908db6eeff5ee5a1ab2783d8e8bbb1598c3ace3..0abc1da5154bef4c7aa03d44f651af39b289c187 100644 --- a/net/minecraft/world/entity/monster/Vindicator.java +++ b/net/minecraft/world/entity/monster/Vindicator.java -@@ -73,6 +73,14 @@ public class Vindicator extends AbstractIllager { +@@ -74,6 +74,14 @@ public class Vindicator extends AbstractIllager { } // Purpur end - Ridables @@ -1576,10 +1576,10 @@ index d8c10f5f93e3ca92a49e1df3216256450c62f219..213530a2378411db2bc597ba7e0bb68c 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 636b1e88f6d76a4c0110fa34e89634eee3fbdcdf..9f5db385dabb01bda033aecaebd1d9b7c9e2ed0b 100644 +index 4379832f464824260a25055ed7338c2879a9a194..5333aea53ff61eb6143138c4e44ad85977e524d5 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 @@ -1595,10 +1595,10 @@ index 636b1e88f6d76a4c0110fa34e89634eee3fbdcdf..9f5db385dabb01bda033aecaebd1d9b7 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 f9233f0689b26a8c65d60ab9421c1216d436bae7..126c5982c1b274cad67649b8e26391c7c4011bab 100644 +index 5d68fa532c588ed942d6b9703cc1047feca4e641..6f26221e6982db3c97a77d4496686c666a80e3a4 100644 --- a/net/minecraft/world/entity/monster/Zombie.java +++ b/net/minecraft/world/entity/monster/Zombie.java -@@ -121,6 +121,14 @@ public class Zombie extends Monster { +@@ -120,6 +120,14 @@ public class Zombie extends Monster { } // Purpur end - Ridables @@ -1613,7 +1613,7 @@ index f9233f0689b26a8c65d60ab9421c1216d436bae7..126c5982c1b274cad67649b8e26391c7 @Override protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables -@@ -633,7 +641,7 @@ public class Zombie extends Monster { +@@ -632,7 +640,7 @@ public class Zombie extends Monster { } protected void randomizeReinforcementsChance() { @@ -1623,10 +1623,10 @@ index f9233f0689b26a8c65d60ab9421c1216d436bae7..126c5982c1b274cad67649b8e26391c7 @Override diff --git a/net/minecraft/world/entity/monster/ZombieVillager.java b/net/minecraft/world/entity/monster/ZombieVillager.java -index 2d3636697a544e78113fc1e6902dd216acee070b..239e78203dec09653ef8e001aef3e4b95b0f7a7c 100644 +index 317693bccccbb41f38dc726a71cf059d5a861e27..537bff97a27e043ed2f71fc82580689ecb784ac8 100644 --- a/net/minecraft/world/entity/monster/ZombieVillager.java +++ b/net/minecraft/world/entity/monster/ZombieVillager.java -@@ -94,6 +94,18 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { +@@ -93,6 +93,18 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { } // Purpur end - Ridables @@ -1646,10 +1646,10 @@ index 2d3636697a544e78113fc1e6902dd216acee070b..239e78203dec09653ef8e001aef3e4b9 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 f16aa79ba5137cd6132452c21b0dc81cbf4fac8b..ada982eb4dca7c75a5fd3576d3793f1f12819e51 100644 +index deb47d4828ac94f8d68a799b98cc696674d94a6f..f0a809464d9e7f1839e1932955a7313e744384b1 100644 --- a/net/minecraft/world/entity/monster/ZombifiedPiglin.java +++ b/net/minecraft/world/entity/monster/ZombifiedPiglin.java -@@ -80,6 +80,14 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { +@@ -81,6 +81,14 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { } // Purpur end - Ridables @@ -1664,7 +1664,7 @@ index f16aa79ba5137cd6132452c21b0dc81cbf4fac8b..ada982eb4dca7c75a5fd3576d3793f1f @Override public void setPersistentAngerTarget(@Nullable UUID target) { this.persistentAngerTarget = target; -@@ -265,7 +273,7 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { +@@ -266,7 +274,7 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { @Override protected void randomizeReinforcementsChance() { @@ -1674,10 +1674,10 @@ index f16aa79ba5137cd6132452c21b0dc81cbf4fac8b..ada982eb4dca7c75a5fd3576d3793f1f @Nullable diff --git a/net/minecraft/world/entity/monster/creaking/Creaking.java b/net/minecraft/world/entity/monster/creaking/Creaking.java -index a23d624abb0622d362af0dc816425283e25c479a..d19f34616942177e736ba507c27ec93ba1e1e903 100644 +index b87ad5259b416693e57e3863327f46ee08a4928f..1b01d2b37dd221d5832cb68c072af9863aeb6868 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 @@ -1693,10 +1693,10 @@ index a23d624abb0622d362af0dc816425283e25c479a..d19f34616942177e736ba507c27ec93b 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 7c83e0612b8b0d48966aa3808d86daac79753584..6b0eb12e9d879f22098eb2294d0d73db6ca266ed 100644 +index fce1a2dda2587c55e39e4ef51c30b5556efe0b33..c2de8c58f43a43df77f28e077fbbf00e0f930ba7 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 @@ -1712,10 +1712,10 @@ index 7c83e0612b8b0d48966aa3808d86daac79753584..6b0eb12e9d879f22098eb2294d0d73db 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 589e3014fb86448456c249c0255186644abb13c2..b37038568b83db1602dca06aa06d72c4c4978cdd 100644 +index 29c687a5f459e100a78f77a2edbf9e607f17a5ab..a86cd2da7d0467e5b7d79ec2daceb65c86750445 100644 --- a/net/minecraft/world/entity/monster/piglin/Piglin.java +++ b/net/minecraft/world/entity/monster/piglin/Piglin.java -@@ -153,6 +153,14 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento +@@ -154,6 +154,14 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento } // Purpur end - Ridables @@ -1728,8 +1728,8 @@ index 589e3014fb86448456c249c0255186644abb13c2..b37038568b83db1602dca06aa06d72c4 + // Purpur end - Configurable entity base attributes + @Override - public void addAdditionalSaveData(CompoundTag compound) { - super.addAdditionalSaveData(compound); + protected void addAdditionalSaveData(ValueOutput output) { + super.addAdditionalSaveData(output); diff --git a/net/minecraft/world/entity/monster/piglin/PiglinBrute.java b/net/minecraft/world/entity/monster/piglin/PiglinBrute.java index 4c8e49ba064241ec7ac505fa6f5df6d7f9c009b6..f52aba35ee7e202074cda8fb4dfd6a7d9ded1f09 100644 --- a/net/minecraft/world/entity/monster/piglin/PiglinBrute.java @@ -1750,10 +1750,10 @@ index 4c8e49ba064241ec7ac505fa6f5df6d7f9c009b6..f52aba35ee7e202074cda8fb4dfd6a7d 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 15669f9157dc3d3d5e3fb76a668c7e3b43ee8a52..b2687ee9494d491971fa4124382b214d7c3ba9be 100644 +index dc5622cbb9d6a3ba92db634d5572d3c1c16d2bf6..b91c7bdfa4df80bf52ed714efc877a30cdcb3f36 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 @@ -1769,10 +1769,10 @@ index 15669f9157dc3d3d5e3fb76a668c7e3b43ee8a52..b2687ee9494d491971fa4124382b214d public Brain getBrain() { return (Brain)super.getBrain(); diff --git a/net/minecraft/world/entity/npc/WanderingTrader.java b/net/minecraft/world/entity/npc/WanderingTrader.java -index 21ab5911d52e49ec2de99071cb85ff2daa090dc4..4abc4037a059b9c1dc58bf7a776e6269c5188868 100644 +index e5d6d8bd30876832e6219969849e826070343f45..28c86505efa994f9c7657538f5ffdf12772fb0a9 100644 --- a/net/minecraft/world/entity/npc/WanderingTrader.java +++ b/net/minecraft/world/entity/npc/WanderingTrader.java -@@ -83,6 +83,13 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill +@@ -84,6 +84,13 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill } // Purpur end - Ridables diff --git a/purpur-server/minecraft-patches/unapplied-features/0003-Barrels-and-enderchests-6-rows.patch b/purpur-server/minecraft-patches/features/0003-Barrels-and-enderchests-6-rows.patch similarity index 95% rename from purpur-server/minecraft-patches/unapplied-features/0003-Barrels-and-enderchests-6-rows.patch rename to purpur-server/minecraft-patches/features/0003-Barrels-and-enderchests-6-rows.patch index 3d833c13f..c8acefc2e 100644 --- a/purpur-server/minecraft-patches/unapplied-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 f7b12d5924005a24899aef11746b9f056fac3559..aaebaa42eef53af8a8c1606b79caf6bb4a99f4f9 100644 +index 7a247b713ceb3a513de1f91cdda1d30a32845d13..f9f3deed9f892ece5568a6ede9955c8e19937b60 100644 --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java -@@ -1041,6 +1041,27 @@ public abstract class PlayerList { +@@ -1040,6 +1040,27 @@ public abstract class PlayerList { player.getBukkitEntity().recalculatePermissions(); // CraftBukkit this.server.getCommands().sendCommands(player); } // Paper - Add sendOpLevel API @@ -37,10 +37,10 @@ index f7b12d5924005a24899aef11746b9f056fac3559..aaebaa42eef53af8a8c1606b79caf6bb public boolean isWhiteListed(GameProfile profile) { diff --git a/net/minecraft/world/entity/player/Player.java b/net/minecraft/world/entity/player/Player.java -index 2417c26a03decf756ad93cd54265277c95c653ca..87c8bc6f9128d2fcb19628bc3ef354e517b632bb 100644 +index c421cc7dc6c401a19eaf193abd970f21e910f927..acb53dba83fe9481508fa4d4704203a08f575450 100644 --- a/net/minecraft/world/entity/player/Player.java +++ b/net/minecraft/world/entity/player/Player.java -@@ -212,6 +212,7 @@ public abstract class Player extends LivingEntity { +@@ -221,6 +221,7 @@ public abstract class Player extends LivingEntity { 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 @@ -84,7 +84,7 @@ index 0fffa384f928ab84451331380968fb4650eafe26..0399092c9f7a43ac100c11505176ade6 return new ChestMenu(MenuType.GENERIC_9x6, containerId, playerInventory, container, 6); } diff --git a/net/minecraft/world/inventory/PlayerEnderChestContainer.java b/net/minecraft/world/inventory/PlayerEnderChestContainer.java -index bc2b95973192069fc64581b59583b19df876f55d..b68d57eee9605dba8ecd31f82185ec3ea81d60c1 100644 +index beb74bc8398de8b48f41af7daef14d624826310e..7ae8d115b6f4af45db9309b46ed4b4fdd8e25c08 100644 --- a/net/minecraft/world/inventory/PlayerEnderChestContainer.java +++ b/net/minecraft/world/inventory/PlayerEnderChestContainer.java @@ -25,11 +25,18 @@ public class PlayerEnderChestContainer extends SimpleContainer { @@ -159,7 +159,7 @@ index 5077a9ff7b78801bdc53536a37aee07b8d86ee4d..72794e204f7fcc31ece94913b7fd9f36 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 027502d0af5512c31878978c4d05c52fa3029cca..f5216355ef13593bc7333d50a003012e25b3d7ea 100644 +index d679ab599dfd0bdbdc3ab5530d7fcd1c38baf7fa..0e4f6455ec48c5a7fcd4613c1c5b79d599e4960a 100644 --- a/net/minecraft/world/level/block/entity/BarrelBlockEntity.java +++ b/net/minecraft/world/level/block/entity/BarrelBlockEntity.java @@ -56,7 +56,17 @@ public class BarrelBlockEntity extends RandomizableContainerBlockEntity { diff --git a/purpur-server/minecraft-patches/unapplied-features/0004-Giants-AI-settings.patch b/purpur-server/minecraft-patches/features/0004-Giants-AI-settings.patch similarity index 93% rename from purpur-server/minecraft-patches/unapplied-features/0004-Giants-AI-settings.patch rename to purpur-server/minecraft-patches/features/0004-Giants-AI-settings.patch index 0418b7349..c50df5bb9 100644 --- a/purpur-server/minecraft-patches/unapplied-features/0004-Giants-AI-settings.patch +++ b/purpur-server/minecraft-patches/features/0004-Giants-AI-settings.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Giants AI settings diff --git a/net/minecraft/world/entity/monster/Giant.java b/net/minecraft/world/entity/monster/Giant.java -index 13021800af7cc9263ef4f393f9cfbda5061a32ae..73da18c4b54e250c434fd75971ef0a8f7c8cf6a3 100644 +index e673f488bfab9648075857bc40e1339f974a903c..f5565d314ded2145219debc446c7ddcb93b660e9 100644 --- a/net/minecraft/world/entity/monster/Giant.java +++ b/net/minecraft/world/entity/monster/Giant.java @@ -30,8 +30,25 @@ public class Giant extends Monster { @@ -36,8 +36,8 @@ index 13021800af7cc9263ef4f393f9cfbda5061a32ae..73da18c4b54e250c434fd75971ef0a8f } // Purpur end - Ridables -@@ -49,8 +66,36 @@ public class Giant extends Monster { - return Monster.createMonsterAttributes().add(Attributes.MAX_HEALTH, 100.0).add(Attributes.MOVEMENT_SPEED, 0.5).add(Attributes.ATTACK_DAMAGE, 50.0); +@@ -53,8 +70,36 @@ public class Giant extends Monster { + .add(Attributes.CAMERA_DISTANCE, 16.0); } + // Purpur - Giants AI settings diff --git a/purpur-server/minecraft-patches/unapplied-features/0005-Chickens-can-retaliate.patch b/purpur-server/minecraft-patches/features/0005-Chickens-can-retaliate.patch similarity index 91% rename from purpur-server/minecraft-patches/unapplied-features/0005-Chickens-can-retaliate.patch rename to purpur-server/minecraft-patches/features/0005-Chickens-can-retaliate.patch index eb8fb9cec..91143d225 100644 --- a/purpur-server/minecraft-patches/unapplied-features/0005-Chickens-can-retaliate.patch +++ b/purpur-server/minecraft-patches/features/0005-Chickens-can-retaliate.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Chickens can retaliate diff --git a/net/minecraft/world/entity/animal/Chicken.java b/net/minecraft/world/entity/animal/Chicken.java -index 40fc57f1c298e1c70fddf8b6eb2f3e8e9e41e60c..fc3291b5e1a2c3956802b268abb58189b24a7a16 100644 +index b4b2cebbc8d4645dec0b1bfe4243426a1e7ccda5..6f6d99c075b3e402742e3c7401dea366f2d871b6 100644 --- a/net/minecraft/world/entity/animal/Chicken.java +++ b/net/minecraft/world/entity/animal/Chicken.java -@@ -93,6 +93,11 @@ public class Chicken extends Animal { +@@ -94,6 +94,11 @@ public class Chicken extends Animal { public void initAttributes() { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.chickenMaxHealth); this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.chickenScale); @@ -20,7 +20,7 @@ index 40fc57f1c298e1c70fddf8b6eb2f3e8e9e41e60c..fc3291b5e1a2c3956802b268abb58189 } // Purpur end - Configurable entity base attributes -@@ -100,13 +105,21 @@ public class Chicken extends Animal { +@@ -101,13 +106,21 @@ public class Chicken extends Animal { protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables @@ -43,7 +43,7 @@ index 40fc57f1c298e1c70fddf8b6eb2f3e8e9e41e60c..fc3291b5e1a2c3956802b268abb58189 } @Override -@@ -115,7 +128,7 @@ public class Chicken extends Animal { +@@ -116,7 +129,7 @@ public class Chicken extends Animal { } public static AttributeSupplier.Builder createAttributes() { diff --git a/purpur-server/minecraft-patches/unapplied-features/0006-Minecart-settings-and-WASD-controls.patch b/purpur-server/minecraft-patches/features/0006-Minecart-settings-and-WASD-controls.patch similarity index 93% rename from purpur-server/minecraft-patches/unapplied-features/0006-Minecart-settings-and-WASD-controls.patch rename to purpur-server/minecraft-patches/features/0006-Minecart-settings-and-WASD-controls.patch index 10367a373..9c035117e 100644 --- a/purpur-server/minecraft-patches/unapplied-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 f55dc4affffd495b4c02b77c8a60f172c1c6cf79..47a6a607513c97910c7d57e8fb4862f6de74f9ac 100644 +index 0c489a6d3357ed0d3dc9341440b87623d007da3f..ed63c0cc2750485ab4d53c242fec94c1a66e9dbe 100644 --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java -@@ -1192,6 +1192,11 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -1170,6 +1170,11 @@ public class ServerPlayer extends Player { } else { // Purpur start - Add boat fall damage config if (damageSource.is(net.minecraft.tags.DamageTypeTags.IS_FALL)) { @@ -21,10 +21,10 @@ index f55dc4affffd495b4c02b77c8a60f172c1c6cf79..47a6a607513c97910c7d57e8fb4862f6 return false; } diff --git a/net/minecraft/world/entity/vehicle/AbstractMinecart.java b/net/minecraft/world/entity/vehicle/AbstractMinecart.java -index 99617c08cbd989092ba357d8df928786fd04c89a..9d88b260528c3cea2c5fe8e2760094b0a8a35667 100644 +index 7e61d68b36ca2768f70dc1fc130a8d7b95347b6b..00eb9aef52ee54f9750c44832f2b3a9321a9f81a 100644 --- a/net/minecraft/world/entity/vehicle/AbstractMinecart.java +++ b/net/minecraft/world/entity/vehicle/AbstractMinecart.java -@@ -103,6 +103,10 @@ public abstract class AbstractMinecart extends VehicleEntity { +@@ -102,6 +102,10 @@ public abstract class AbstractMinecart extends VehicleEntity { private double flyingY = 0.95; private double flyingZ = 0.95; public @Nullable Double maxSpeed; @@ -35,7 +35,7 @@ index 99617c08cbd989092ba357d8df928786fd04c89a..9d88b260528c3cea2c5fe8e2760094b0 public net.kyori.adventure.util.TriState frictionState = net.kyori.adventure.util.TriState.NOT_SET; // Paper - Friction API // CraftBukkit end -@@ -111,8 +115,13 @@ public abstract class AbstractMinecart extends VehicleEntity { +@@ -110,8 +114,13 @@ public abstract class AbstractMinecart extends VehicleEntity { this.blocksBuilding = true; if (useExperimentalMovement(level)) { this.behavior = new NewMinecartBehavior(this); @@ -49,7 +49,7 @@ index 99617c08cbd989092ba357d8df928786fd04c89a..9d88b260528c3cea2c5fe8e2760094b0 } } -@@ -277,6 +286,14 @@ public abstract class AbstractMinecart extends VehicleEntity { +@@ -276,6 +285,14 @@ public abstract class AbstractMinecart extends VehicleEntity { @Override public void tick() { @@ -64,7 +64,7 @@ index 99617c08cbd989092ba357d8df928786fd04c89a..9d88b260528c3cea2c5fe8e2760094b0 // CraftBukkit start double prevX = this.getX(); double prevY = this.getY(); -@@ -384,15 +401,61 @@ public abstract class AbstractMinecart extends VehicleEntity { +@@ -390,15 +407,61 @@ public abstract class AbstractMinecart extends VehicleEntity { this.behavior.moveAlongTrack(level); } diff --git a/purpur-server/minecraft-patches/unapplied-features/0007-Villagers-follow-emerald-blocks.patch b/purpur-server/minecraft-patches/features/0007-Villagers-follow-emerald-blocks.patch similarity index 86% rename from purpur-server/minecraft-patches/unapplied-features/0007-Villagers-follow-emerald-blocks.patch rename to purpur-server/minecraft-patches/features/0007-Villagers-follow-emerald-blocks.patch index fc5022641..612d28fa9 100644 --- a/purpur-server/minecraft-patches/unapplied-features/0007-Villagers-follow-emerald-blocks.patch +++ b/purpur-server/minecraft-patches/features/0007-Villagers-follow-emerald-blocks.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Villagers follow emerald blocks diff --git a/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java b/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java -index 75d8fe03558ba38caf46c826dfea5208f88bde52..46022a0aabc9c319deeb75913d356eeb74f1a12c 100644 +index 4bb7a8955182d786a09fd2667b37a93373ff47be..bead2f6800bdc404228500c12caf326559fa47de 100644 --- a/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java +++ b/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java -@@ -162,7 +162,7 @@ public class DefaultAttributes { +@@ -164,7 +164,7 @@ public class DefaultAttributes { .put(EntityType.VILLAGER, Villager.createAttributes().build()) .put(EntityType.VINDICATOR, Vindicator.createAttributes().build()) .put(EntityType.WARDEN, Warden.createAttributes().build()) @@ -18,10 +18,10 @@ index 75d8fe03558ba38caf46c826dfea5208f88bde52..46022a0aabc9c319deeb75913d356eeb .put(EntityType.WITHER, WitherBoss.createAttributes().build()) .put(EntityType.WITHER_SKELETON, AbstractSkeleton.createAttributes().build()) diff --git a/net/minecraft/world/entity/ai/goal/TemptGoal.java b/net/minecraft/world/entity/ai/goal/TemptGoal.java -index 438d6347778a94b4fe430320b268a2d67afa209a..f88f618d34fb343b31de3af1a875d6633703df71 100644 +index dae935cc68e2e571d50e56ac8913c099a11cf771..a805c9426630c2c46db9d0dd536f1d16769395d3 100644 --- a/net/minecraft/world/entity/ai/goal/TemptGoal.java +++ b/net/minecraft/world/entity/ai/goal/TemptGoal.java -@@ -58,7 +58,7 @@ public class TemptGoal extends Goal { +@@ -71,7 +71,7 @@ public class TemptGoal extends Goal { } private boolean shouldFollow(LivingEntity entity) { @@ -31,10 +31,10 @@ index 438d6347778a94b4fe430320b268a2d67afa209a..f88f618d34fb343b31de3af1a875d663 @Override diff --git a/net/minecraft/world/entity/npc/AbstractVillager.java b/net/minecraft/world/entity/npc/AbstractVillager.java -index 1d3381f1481bb2b192bb78462c85c2a185d94ad5..e574c38e1c1c13fc2f96340138f784697cef8c48 100644 +index f8782cdcf3015cad2693663a3c222bd60822f45b..d1a77544df7bcaa5f1dbca3139324107d687ae0d 100644 --- a/net/minecraft/world/entity/npc/AbstractVillager.java +++ b/net/minecraft/world/entity/npc/AbstractVillager.java -@@ -35,6 +35,7 @@ import net.minecraft.world.level.portal.TeleportTransition; +@@ -35,6 +35,7 @@ import net.minecraft.world.level.storage.ValueOutput; import net.minecraft.world.phys.Vec3; public abstract class AbstractVillager extends AgeableMob implements InventoryCarrier, Npc, Merchant { @@ -43,10 +43,10 @@ index 1d3381f1481bb2b192bb78462c85c2a185d94ad5..e574c38e1c1c13fc2f96340138f78469 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 b2687ee9494d491971fa4124382b214d7c3ba9be..005af720a6385056f09f939813e97c10a7414a91 100644 +index b91c7bdfa4df80bf52ed714efc877a30cdcb3f36..4a68a8124716a57801f2d42a87e4d68c99d2f348 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 b2687ee9494d491971fa4124382b214d7c3ba9be..005af720a6385056f09f939813e97c10 } // 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 b2687ee9494d491971fa4124382b214d7c3ba9be..005af720a6385056f09f939813e97c10 } // 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() { @@ -72,10 +72,10 @@ index b2687ee9494d491971fa4124382b214d7c3ba9be..005af720a6385056f09f939813e97c10 public boolean assignProfessionWhenSpawned() { diff --git a/net/minecraft/world/entity/npc/WanderingTrader.java b/net/minecraft/world/entity/npc/WanderingTrader.java -index 4abc4037a059b9c1dc58bf7a776e6269c5188868..e726893a3ddf49bdfd2d190477bccf6e33de1847 100644 +index 28c86505efa994f9c7657538f5ffdf12772fb0a9..2917820bf01b1a2ca7301a7099b7b3dcd6c3ee67 100644 --- a/net/minecraft/world/entity/npc/WanderingTrader.java +++ b/net/minecraft/world/entity/npc/WanderingTrader.java -@@ -87,9 +87,16 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill +@@ -88,9 +88,16 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill @Override public void initAttributes() { this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.wanderingTraderMaxHealth); @@ -92,7 +92,7 @@ index 4abc4037a059b9c1dc58bf7a776e6269c5188868..e726893a3ddf49bdfd2d190477bccf6e @Override protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); -@@ -124,6 +131,7 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill +@@ -125,6 +132,7 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill this.goalSelector.addGoal(1, new PanicGoal(this, 0.5)); this.goalSelector.addGoal(1, new LookAtTradingPlayerGoal(this)); this.goalSelector.addGoal(2, new WanderingTrader.WanderToPositionGoal(this, 2.0, 0.35)); diff --git a/purpur-server/minecraft-patches/unapplied-features/0008-Implement-elytra-settings.patch b/purpur-server/minecraft-patches/features/0008-Implement-elytra-settings.patch similarity index 83% rename from purpur-server/minecraft-patches/unapplied-features/0008-Implement-elytra-settings.patch rename to purpur-server/minecraft-patches/features/0008-Implement-elytra-settings.patch index b03972156..436e1a581 100644 --- a/purpur-server/minecraft-patches/unapplied-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 a3b83376f1468dbdb4e17fb86d199e66047f686c..5dd1a36b967176f96a18cb0d842ccb73b7b584ef 100644 +index ae0c2f41c522656bde37d4f31699ee6172b5a79d..4f149e5e17d2d2f2964e2f6626e20f52121e72d9 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java -@@ -3643,7 +3643,18 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3699,7 +3699,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); @@ -29,14 +29,13 @@ index a3b83376f1468dbdb4e17fb86d199e66047f686c..5dd1a36b967176f96a18cb0d842ccb73 this.gameEvent(GameEvent.ELYTRA_GLIDE); diff --git a/net/minecraft/world/item/FireworkRocketItem.java b/net/minecraft/world/item/FireworkRocketItem.java -index 18d63d2da49451a2d5e1da7bf0c00e05e2f192bc..1f081e098ce3bec61b7f374e9b737838783657bb 100644 +index 83cfe63b0245f79d0873477ab3aae75f690ecb68..f32370217735b5e9556a0df7652682d89f23c595 100644 --- a/net/minecraft/world/item/FireworkRocketItem.java +++ b/net/minecraft/world/item/FireworkRocketItem.java -@@ -62,6 +62,19 @@ public class FireworkRocketItem extends Item implements ProjectileItem { - com.destroystokyo.paper.event.player.PlayerElytraBoostEvent event = new com.destroystokyo.paper.event.player.PlayerElytraBoostEvent((org.bukkit.entity.Player) player.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemInHand), (org.bukkit.entity.Firework) delayed.projectile().getBukkitEntity(), org.bukkit.craftbukkit.CraftEquipmentSlot.getHand(hand)); - if (event.callEvent() && delayed.attemptSpawn()) { - player.awardStat(Stats.ITEM_USED.get(this)); // Moved up from below -+ +@@ -72,6 +72,17 @@ public class FireworkRocketItem extends Item implements ProjectileItem { + if (player.dropAllLeashConnections(null)) { + level.playSound(null, player, SoundEvents.LEAD_BREAK, SoundSource.NEUTRAL, 1.0F, 1.0F); + } + // Purpur start - Implement elytra settings + if (level.purpurConfig.elytraDamagePerFireworkBoost > 0) { + java.util.List list = net.minecraft.world.entity.EquipmentSlot.VALUES.stream().filter((enumitemslot) -> net.minecraft.world.entity.LivingEntity.canGlideUsing(player.getItemBySlot(enumitemslot), enumitemslot)).toList(); @@ -48,15 +47,14 @@ index 18d63d2da49451a2d5e1da7bf0c00e05e2f192bc..1f081e098ce3bec61b7f374e9b737838 + } + } + // Purpur end - Implement elytra settings -+ if (event.shouldConsume() && !player.hasInfiniteMaterials()) { itemInHand.shrink(1); // Moved up from below } else { diff --git a/net/minecraft/world/item/ItemStack.java b/net/minecraft/world/item/ItemStack.java -index 6de42886ed681b5e00903f0d213e4d2fcaea1482..36677cb0db42b74fa84d67b85717f629f84b4dd0 100644 +index 52aaa325476af53eca97fc14ad5f82fbb9193c80..d512ee6b1039b80b908816b625ef1aa9cd50461c 100644 --- a/net/minecraft/world/item/ItemStack.java +++ b/net/minecraft/world/item/ItemStack.java -@@ -724,6 +724,14 @@ public final class ItemStack implements DataComponentHolder { +@@ -700,6 +700,14 @@ public final class ItemStack implements DataComponentHolder { org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerItemBreakEvent(serverPlayer, this); // Paper - Add EntityDamageItemEvent } // CraftBukkit end diff --git a/purpur-server/minecraft-patches/unapplied-features/0009-Configurable-jockey-options.patch b/purpur-server/minecraft-patches/features/0009-Configurable-jockey-options.patch similarity index 90% rename from purpur-server/minecraft-patches/unapplied-features/0009-Configurable-jockey-options.patch rename to purpur-server/minecraft-patches/features/0009-Configurable-jockey-options.patch index 8b865c59d..c53d8777b 100644 --- a/purpur-server/minecraft-patches/unapplied-features/0009-Configurable-jockey-options.patch +++ b/purpur-server/minecraft-patches/features/0009-Configurable-jockey-options.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configurable jockey options diff --git a/net/minecraft/world/entity/monster/Drowned.java b/net/minecraft/world/entity/monster/Drowned.java -index 526de34154d873d1479f9276981e181be959ebef..2004595c51564d863aee65fc47541014ea184e10 100644 +index ec0f27d04125765e91e43c4c18415b29db62b181..ffd9e34b4d57bdafc597b2208f754c7454afd48a 100644 --- a/net/minecraft/world/entity/monster/Drowned.java +++ b/net/minecraft/world/entity/monster/Drowned.java -@@ -105,6 +105,23 @@ public class Drowned extends Zombie implements RangedAttackMob { +@@ -106,6 +106,23 @@ public class Drowned extends Zombie implements RangedAttackMob { } // Purpur end - Configurable entity base attributes @@ -61,10 +61,10 @@ index 5b0794bd87423715cada1f860b4141fdacd9ede6..75cb1db5584c04e442583ab2f50a2613 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 126c5982c1b274cad67649b8e26391c7c4011bab..02073d4374580278829e680b875d596844213e78 100644 +index 6f26221e6982db3c97a77d4496686c666a80e3a4..ede9101c44ba53c5bd67254bea6fcff7f00b5b47 100644 --- a/net/minecraft/world/entity/monster/Zombie.java +++ b/net/minecraft/world/entity/monster/Zombie.java -@@ -129,6 +129,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 126c5982c1b274cad67649b8e26391c7c4011bab..02073d4374580278829e680b875d5968 @Override protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables -@@ -558,19 +572,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 126c5982c1b274cad67649b8e26391c7c4011bab..02073d4374580278829e680b875d5968 Chicken chicken1 = EntityType.CHICKEN.create(this.level(), EntitySpawnReason.JOCKEY); if (chicken1 != null) { chicken1.snapTo(this.getX(), this.getY(), this.getZ(), this.getYRot(), 0.0F); -@@ -579,6 +592,7 @@ public class Zombie extends Monster { +@@ -578,6 +591,7 @@ public class Zombie extends Monster { this.startRiding(chicken1); level.addFreshEntity(chicken1, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.MOUNT); // CraftBukkit } @@ -120,10 +120,10 @@ index 126c5982c1b274cad67649b8e26391c7c4011bab..02073d4374580278829e680b875d5968 } } diff --git a/net/minecraft/world/entity/monster/ZombieVillager.java b/net/minecraft/world/entity/monster/ZombieVillager.java -index 239e78203dec09653ef8e001aef3e4b95b0f7a7c..6bd633390df582e0b1999f5c67cd76e2b23a04eb 100644 +index 537bff97a27e043ed2f71fc82580689ecb784ac8..02b503453fb8b64cbf0b9db1e498566289c6bbe3 100644 --- a/net/minecraft/world/entity/monster/ZombieVillager.java +++ b/net/minecraft/world/entity/monster/ZombieVillager.java -@@ -106,6 +106,23 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { +@@ -105,6 +105,23 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { } // Purpur end - Configurable entity base attributes @@ -148,10 +148,10 @@ index 239e78203dec09653ef8e001aef3e4b95b0f7a7c..6bd633390df582e0b1999f5c67cd76e2 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 ada982eb4dca7c75a5fd3576d3793f1f12819e51..a8916a8fe5bed57e7b1f755a20e15bed544567fb 100644 +index f0a809464d9e7f1839e1932955a7313e744384b1..2adee917a4275742968a2e1e8b65bce4b9ac3cc3 100644 --- a/net/minecraft/world/entity/monster/ZombifiedPiglin.java +++ b/net/minecraft/world/entity/monster/ZombifiedPiglin.java -@@ -88,6 +88,23 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { +@@ -89,6 +89,23 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { } // Purpur end - Configurable entity base attributes diff --git a/purpur-server/minecraft-patches/unapplied-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 similarity index 94% rename from purpur-server/minecraft-patches/unapplied-features/0010-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch rename to purpur-server/minecraft-patches/features/0010-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch index 203e0f291..0045fa085 100644 --- a/purpur-server/minecraft-patches/unapplied-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 @@ -5,10 +5,10 @@ Subject: [PATCH] Phantoms attracted to crystals and crystals shoot phantoms diff --git a/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java b/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java -index 57f9f705c62706902efe9a7873f0e3866820f7d9..90ac1e4bdca5b6233eeae9bc84549770bed383da 100644 +index 5bff703ae4f95091620dec5347246d7c0cbe5d5e..220a828717e1933a44c5282b56713ba0053d2440 100644 --- a/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java +++ b/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java -@@ -26,6 +26,12 @@ public class EndCrystal extends Entity { +@@ -27,6 +27,12 @@ public class EndCrystal extends Entity { private static final boolean DEFAULT_SHOW_BOTTOM = true; public int time; public boolean generatedByDragonFight = false; // Paper - Fix invulnerable end crystals @@ -21,7 +21,7 @@ index 57f9f705c62706902efe9a7873f0e3866820f7d9..90ac1e4bdca5b6233eeae9bc84549770 public EndCrystal(EntityType entityType, Level level) { super(entityType, level); -@@ -94,6 +100,49 @@ public class EndCrystal extends Entity { +@@ -95,6 +101,49 @@ public class EndCrystal extends Entity { // Paper end - Fix invulnerable end crystals if (this.level().purpurConfig.endCrystalCramming > 0 && this.level().getEntitiesOfClass(EndCrystal.class, getBoundingBox()).size() > this.level().purpurConfig.endCrystalCramming) this.hurt(this.damageSources().cramming(), 6.0F); // Purpur - End Crystal Cramming @@ -72,10 +72,10 @@ index 57f9f705c62706902efe9a7873f0e3866820f7d9..90ac1e4bdca5b6233eeae9bc84549770 @Override diff --git a/net/minecraft/world/entity/monster/Phantom.java b/net/minecraft/world/entity/monster/Phantom.java -index 2f14561a3722f8175a234ad656ef64d4c58e3b96..6c41a2cc9a772c216abfc2b241429ec712119bb4 100644 +index 96ef89704122485948a526bcc323379474ac9343..f9f6199f5b64733be69e9e8dbdb3cd26700d822b 100644 --- a/net/minecraft/world/entity/monster/Phantom.java +++ b/net/minecraft/world/entity/monster/Phantom.java -@@ -48,6 +48,7 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -49,6 +49,7 @@ public class Phantom extends Mob implements Enemy { @Nullable public BlockPos anchorPoint; Phantom.AttackPhase attackPhase = Phantom.AttackPhase.CIRCLE; @@ -83,7 +83,7 @@ index 2f14561a3722f8175a234ad656ef64d4c58e3b96..6c41a2cc9a772c216abfc2b241429ec7 // Paper start @Nullable public java.util.UUID spawningEntity; -@@ -119,6 +120,25 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -120,6 +121,25 @@ public class Phantom extends Mob implements Enemy { } // Purpur end - Ridables @@ -109,7 +109,7 @@ index 2f14561a3722f8175a234ad656ef64d4c58e3b96..6c41a2cc9a772c216abfc2b241429ec7 @Override public boolean isFlapping() { return (this.getUniqueFlapTickOffset() + this.tickCount) % TICKS_PER_FLAP == 0; -@@ -132,9 +152,15 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -133,9 +153,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 2f14561a3722f8175a234ad656ef64d4c58e3b96..6c41a2cc9a772c216abfc2b241429ec7 this.targetSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables this.targetSelector.addGoal(1, new Phantom.PhantomAttackPlayerTargetGoal()); } -@@ -502,6 +528,124 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -517,6 +543,124 @@ public class Phantom extends Mob implements Enemy { } } diff --git a/purpur-server/minecraft-patches/unapplied-features/0011-Phantoms-burn-in-light.patch b/purpur-server/minecraft-patches/features/0011-Phantoms-burn-in-light.patch similarity index 88% rename from purpur-server/minecraft-patches/unapplied-features/0011-Phantoms-burn-in-light.patch rename to purpur-server/minecraft-patches/features/0011-Phantoms-burn-in-light.patch index 2b429096d..79cdba713 100644 --- a/purpur-server/minecraft-patches/unapplied-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 6c41a2cc9a772c216abfc2b241429ec712119bb4..eaa5f2db1bc6b01ef6a508cc5a60ff1e252c2360 100644 +index f9f6199f5b64733be69e9e8dbdb3cd26700d822b..f0351975340dec2b2bd51670f193baf44a62ae16 100644 --- a/net/minecraft/world/entity/monster/Phantom.java +++ b/net/minecraft/world/entity/monster/Phantom.java -@@ -54,6 +54,7 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -55,6 +55,7 @@ public class Phantom extends Mob implements Enemy { public java.util.UUID spawningEntity; public boolean shouldBurnInDay = true; // Paper end @@ -16,7 +16,7 @@ index 6c41a2cc9a772c216abfc2b241429ec712119bb4..eaa5f2db1bc6b01ef6a508cc5a60ff1e public Phantom(EntityType entityType, Level level) { super(entityType, level); -@@ -254,7 +255,11 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -255,7 +256,11 @@ public class Phantom extends Mob implements Enemy { @Override public void aiStep() { @@ -29,7 +29,7 @@ index 6c41a2cc9a772c216abfc2b241429ec712119bb4..eaa5f2db1bc6b01ef6a508cc5a60ff1e if (getRider() == null || !this.isControllable()) // Purpur - Ridables this.igniteForSeconds(8.0F); } -@@ -363,6 +368,7 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -378,6 +383,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 6c41a2cc9a772c216abfc2b241429ec712119bb4..eaa5f2db1bc6b01ef6a508cc5a60ff1e if (!nearbyPlayers.isEmpty()) { nearbyPlayers.sort(Comparator.comparing(Entity::getY).reversed()); -@@ -732,6 +738,12 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -747,6 +753,12 @@ public class Phantom extends Mob implements Enemy { return false; } else if (!target.isAlive()) { return false; diff --git a/purpur-server/minecraft-patches/unapplied-features/0012-Make-entity-breeding-times-configurable.patch b/purpur-server/minecraft-patches/features/0012-Make-entity-breeding-times-configurable.patch similarity index 84% rename from purpur-server/minecraft-patches/unapplied-features/0012-Make-entity-breeding-times-configurable.patch rename to purpur-server/minecraft-patches/features/0012-Make-entity-breeding-times-configurable.patch index 00f5a1ca0..136aa01b4 100644 --- a/purpur-server/minecraft-patches/unapplied-features/0012-Make-entity-breeding-times-configurable.patch +++ b/purpur-server/minecraft-patches/features/0012-Make-entity-breeding-times-configurable.patch @@ -22,18 +22,18 @@ index 2591e4bbd234e51ff2c6b00db888d3b158f5a07d..e3d48c7c6615185f8a14bc96476a665b // CraftBukkit end - call EntityBreedEvent level.broadcastEntityEvent(breedOffspring, (byte)12); diff --git a/net/minecraft/world/entity/animal/Animal.java b/net/minecraft/world/entity/animal/Animal.java -index 2ce0099460c14a6dd8b128f268ee915ea4be5183..1cae770340e969ec4f037b9121142878894102d3 100644 +index 235f6514328338d28c2bf967bcd06f1413f12c65..4d99a1bf2dc141630a76942ccbf1f60824cf7495 100644 --- a/net/minecraft/world/entity/animal/Animal.java +++ b/net/minecraft/world/entity/animal/Animal.java -@@ -42,6 +42,7 @@ public abstract class Animal extends AgeableMob { +@@ -43,6 +43,7 @@ public abstract class Animal extends AgeableMob { @Nullable - public UUID loveCause; + public EntityReference loveCause; public @Nullable ItemStack breedItem; // CraftBukkit - Add breedItem variable + public abstract int getPurpurBreedTime(); // Purpur - Make entity breeding times configurable protected Animal(EntityType entityType, Level level) { super(entityType, level); -@@ -283,8 +284,10 @@ public abstract class Animal extends AgeableMob { +@@ -279,8 +280,10 @@ public abstract class Animal extends AgeableMob { player.awardStat(Stats.ANIMALS_BRED); CriteriaTriggers.BRED_ANIMALS.trigger(player, this, animal, baby); } // Paper - Call EntityBreedEvent @@ -47,10 +47,10 @@ index 2ce0099460c14a6dd8b128f268ee915ea4be5183..1cae770340e969ec4f037b9121142878 animal.resetLove(); level.broadcastEntityEvent(this, (byte)18); diff --git a/net/minecraft/world/entity/animal/Bee.java b/net/minecraft/world/entity/animal/Bee.java -index 7fbf46efe8007e4b0e2f07c3ada8f0e02484d59d..68acacdf30834fe318862d1900cb18800caa0e13 100644 +index bdb16d355dac48760c9a083303035265f6a1fc74..11a7cbb1781e396ecb2b9fdbad7af2c55ea2606a 100644 --- a/net/minecraft/world/entity/animal/Bee.java +++ b/net/minecraft/world/entity/animal/Bee.java -@@ -480,6 +480,13 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -481,6 +481,13 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { } // Purpur end - Configurable entity base attributes @@ -65,10 +65,10 @@ index 7fbf46efe8007e4b0e2f07c3ada8f0e02484d59d..68acacdf30834fe318862d1900cb1880 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 d2813c68df511a2702f2b57c31f828730a9a21c8..75a63c8e8917f20b389f8194ae3089ff41e9d0ff 100644 +index d429beb03da8b499f19c3ed721b110d916849698..5e6a66c1a3532d39dae82eaeb2428605536e2155 100644 --- a/net/minecraft/world/entity/animal/Cat.java +++ b/net/minecraft/world/entity/animal/Cat.java -@@ -124,6 +124,13 @@ public class Cat extends TamableAnimal { +@@ -125,6 +125,13 @@ public class Cat extends TamableAnimal { } // Purpur end - Configurable entity base attributes @@ -83,10 +83,10 @@ index d2813c68df511a2702f2b57c31f828730a9a21c8..75a63c8e8917f20b389f8194ae3089ff protected void registerGoals() { this.temptGoal = new Cat.CatTemptGoal(this, 0.6, stack -> stack.is(ItemTags.CAT_FOOD), true); diff --git a/net/minecraft/world/entity/animal/Chicken.java b/net/minecraft/world/entity/animal/Chicken.java -index fc3291b5e1a2c3956802b268abb58189b24a7a16..ef808c4462387bb73466b33d1c3156796fea251b 100644 +index 6f6d99c075b3e402742e3c7401dea366f2d871b6..e4702a5a89147bd83fa73a969fab7077ddd623f6 100644 --- a/net/minecraft/world/entity/animal/Chicken.java +++ b/net/minecraft/world/entity/animal/Chicken.java -@@ -101,6 +101,13 @@ public class Chicken extends Animal { +@@ -102,6 +102,13 @@ public class Chicken extends Animal { } // Purpur end - Configurable entity base attributes @@ -101,10 +101,10 @@ index fc3291b5e1a2c3956802b268abb58189b24a7a16..ef808c4462387bb73466b33d1c315679 protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/animal/Cow.java b/net/minecraft/world/entity/animal/Cow.java -index 7c4f1eadcbc13010f6b4b5748b8e0d5c822458e1..0f4f732d9501df42e0d42fe978692c4b0e3d8f0b 100644 +index 9dbc5f7b3896acb199577afa85451da38f2d2a01..753ed26cc6bfc8276d4405091b78b0e50182b84a 100644 --- a/net/minecraft/world/entity/animal/Cow.java +++ b/net/minecraft/world/entity/animal/Cow.java -@@ -53,6 +53,13 @@ public class Cow extends AbstractCow { +@@ -54,6 +54,13 @@ public class Cow extends AbstractCow { } // Purpur end - Configurable entity base attributes @@ -119,10 +119,10 @@ index 7c4f1eadcbc13010f6b4b5748b8e0d5c822458e1..0f4f732d9501df42e0d42fe978692c4b 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 8d69b6bb1d5efd0b47595a12acdd2088cddd5ace..6a531e5d93d42d3dca7a5e49fb2ba14063665d2e 100644 +index 869a0154c81593db8933f9daa6a7d3a9d02facc5..37b6bfa8dc1fd4ed0006f6531d2056bcd3c3abae 100644 --- a/net/minecraft/world/entity/animal/Fox.java +++ b/net/minecraft/world/entity/animal/Fox.java -@@ -187,6 +187,13 @@ public class Fox extends Animal { +@@ -188,6 +188,13 @@ public class Fox extends Animal { } // Purpur end - Configurable entity base attributes @@ -136,7 +136,7 @@ index 8d69b6bb1d5efd0b47595a12acdd2088cddd5ace..6a531e5d93d42d3dca7a5e49fb2ba140 @Override protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); -@@ -996,8 +1003,10 @@ public class Fox extends Animal { +@@ -993,8 +1000,10 @@ public class Fox extends Animal { CriteriaTriggers.BRED_ANIMALS.trigger(serverPlayer, this.animal, this.partner, fox); } @@ -150,10 +150,10 @@ index 8d69b6bb1d5efd0b47595a12acdd2088cddd5ace..6a531e5d93d42d3dca7a5e49fb2ba140 this.partner.resetLove(); serverLevel.addFreshEntityWithPassengers(fox, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.BREEDING); // CraftBukkit - added SpawnReason diff --git a/net/minecraft/world/entity/animal/MushroomCow.java b/net/minecraft/world/entity/animal/MushroomCow.java -index af035af33db993cf7c573b87df576529e98a842e..24313a5dd5f5be39677ac8080ecf56703c751923 100644 +index 8cfbe37df24647c3f0a2d64bcc3451de1402c86f..3e4cb7680e6082ebab95e2b8307eedb0d3fcfbcd 100644 --- a/net/minecraft/world/entity/animal/MushroomCow.java +++ b/net/minecraft/world/entity/animal/MushroomCow.java -@@ -85,6 +85,13 @@ public class MushroomCow extends AbstractCow implements Shearable { +@@ -86,6 +86,13 @@ public class MushroomCow extends AbstractCow implements Shearable { } // Purpur end - Configurable entity base attributes @@ -168,10 +168,10 @@ index af035af33db993cf7c573b87df576529e98a842e..24313a5dd5f5be39677ac8080ecf5670 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 b05aea388ddadaa5bc28bee9f3f4d7fbf673eaa7..56b9fa9b24a9b5cf510dc6610a1b1bedf3a32d72 100644 +index 84664a62dcae89dff1b63b0ac952756440ee090f..c4ed3f906d4b47c07915afd07db7a731e99b7215 100644 --- a/net/minecraft/world/entity/animal/Ocelot.java +++ b/net/minecraft/world/entity/animal/Ocelot.java -@@ -88,6 +88,13 @@ public class Ocelot extends Animal { +@@ -89,6 +89,13 @@ public class Ocelot extends Animal { } // Purpur end - Configurable entity base attributes @@ -186,10 +186,10 @@ index b05aea388ddadaa5bc28bee9f3f4d7fbf673eaa7..56b9fa9b24a9b5cf510dc6610a1b1bed 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 ebeed4fab4fff87ac61a3a4ef28443eb4746c3fa..cc1144d44526caa7fc7549ecaf405813b4bad1de 100644 +index 4ec69b45049b2c947e0d9ef71619e8acd358e7ad..c7686698a9615a51c653658cf6a46ccfb9c4d168 100644 --- a/net/minecraft/world/entity/animal/Panda.java +++ b/net/minecraft/world/entity/animal/Panda.java -@@ -141,6 +141,13 @@ public class Panda extends Animal { +@@ -142,6 +142,13 @@ public class Panda extends Animal { } // Purpur end - Configurable entity base attributes @@ -204,10 +204,10 @@ index ebeed4fab4fff87ac61a3a4ef28443eb4746c3fa..cc1144d44526caa7fc7549ecaf405813 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 94031cbd5d40c9a5536b1d1c404bbe2666e8ae0a..d69992a1f729ba99f3992920cd2372a04ff60996 100644 +index d997102941a6add1b116053c119bcd6690eb42a5..6019406d7c7e51c53d8822e44070e626091495af 100644 --- a/net/minecraft/world/entity/animal/Parrot.java +++ b/net/minecraft/world/entity/animal/Parrot.java -@@ -199,6 +199,13 @@ public class Parrot extends ShoulderRidingEntity implements FlyingAnimal { +@@ -201,6 +201,13 @@ public class Parrot extends ShoulderRidingEntity implements FlyingAnimal { } // Purpur end - Configurable entity base attributes @@ -222,10 +222,10 @@ index 94031cbd5d40c9a5536b1d1c404bbe2666e8ae0a..d69992a1f729ba99f3992920cd2372a0 @Override public SpawnGroupData finalizeSpawn( diff --git a/net/minecraft/world/entity/animal/Pig.java b/net/minecraft/world/entity/animal/Pig.java -index bdf0574bf6b70aa7477e1143df24e63d658bc841..f81a448a522fa7551ead16a5ac2b41460235f4b6 100644 +index 9f511a6a2692dc46c14e0e0e59518c0a3040cfb9..885135fb301eeb6149aa53d581b4073d3724264d 100644 --- a/net/minecraft/world/entity/animal/Pig.java +++ b/net/minecraft/world/entity/animal/Pig.java -@@ -90,6 +90,13 @@ public class Pig extends Animal implements ItemSteerable { +@@ -91,6 +91,13 @@ public class Pig extends Animal implements ItemSteerable { } // Purpur end - Configurable entity base attributes @@ -240,10 +240,10 @@ index bdf0574bf6b70aa7477e1143df24e63d658bc841..f81a448a522fa7551ead16a5ac2b4146 protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/animal/PolarBear.java b/net/minecraft/world/entity/animal/PolarBear.java -index d6f5c2573f5fd072a7eaed39790b43e7a67cf3b8..329115fcd70531c48b352008faef92e10ddc84de 100644 +index 28919a96de837a15d116c6b863eba5c8a1cf6a7b..e39ca22a871c911defdbfe1cb0f1b15cde8d4612 100644 --- a/net/minecraft/world/entity/animal/PolarBear.java +++ b/net/minecraft/world/entity/animal/PolarBear.java -@@ -124,6 +124,13 @@ public class PolarBear extends Animal implements NeutralMob { +@@ -125,6 +125,13 @@ public class PolarBear extends Animal implements NeutralMob { } // Purpur end - Configurable entity base attributes @@ -258,10 +258,10 @@ index d6f5c2573f5fd072a7eaed39790b43e7a67cf3b8..329115fcd70531c48b352008faef92e1 @Override public AgeableMob getBreedOffspring(ServerLevel level, AgeableMob otherParent) { diff --git a/net/minecraft/world/entity/animal/Rabbit.java b/net/minecraft/world/entity/animal/Rabbit.java -index 8e3dcd912d7631bc7863a576e28f85c8d1cb2818..6c1e23e96352aa777c4e0c7d00f7620aa3f29a32 100644 +index d74b492c5d1c3a323106b5de5bbf595a38d976a1..5fc1d6ba3cb54f2ea8c6fe3f994ffea2cca5784b 100644 --- a/net/minecraft/world/entity/animal/Rabbit.java +++ b/net/minecraft/world/entity/animal/Rabbit.java -@@ -152,6 +152,13 @@ public class Rabbit extends Animal { +@@ -153,6 +153,13 @@ public class Rabbit extends Animal { } // Purpur end - Configurable entity base attributes @@ -276,10 +276,10 @@ index 8e3dcd912d7631bc7863a576e28f85c8d1cb2818..6c1e23e96352aa777c4e0c7d00f7620a 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 11772e81d932fae6542a0cb2d283ef91b5bbbd76..57e4cb66fbf29b992a144ca923f2e22983cc1db5 100644 +index e26b97e92ecfadb351e91aeae38beb4c4da87e26..f5735e5bcc34b78db544aa8971234bc86e0ddfa9 100644 --- a/net/minecraft/world/entity/animal/Turtle.java +++ b/net/minecraft/world/entity/animal/Turtle.java -@@ -110,6 +110,13 @@ public class Turtle extends Animal { +@@ -111,6 +111,13 @@ public class Turtle extends Animal { } // Purpur end - Configurable entity base attributes @@ -293,7 +293,7 @@ index 11772e81d932fae6542a0cb2d283ef91b5bbbd76..57e4cb66fbf29b992a144ca923f2e229 public void setHomePos(BlockPos homePos) { this.homePos = homePos; } -@@ -350,8 +357,10 @@ public class Turtle extends Animal { +@@ -351,8 +358,10 @@ public class Turtle extends Animal { } this.turtle.setHasEgg(true); @@ -307,10 +307,10 @@ index 11772e81d932fae6542a0cb2d283ef91b5bbbd76..57e4cb66fbf29b992a144ca923f2e229 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 67a93960b3c6fe5725783ebf9f1c5b57e931f58c..0b4d1e6633ecc2e11606024d085bb9e6cca5a86b 100644 +index e4c8376c009984e40b90c01f78c65e76e260ee0b..0da5c51c4830cf1826261f4d8877303b34c6cb87 100644 --- a/net/minecraft/world/entity/animal/armadillo/Armadillo.java +++ b/net/minecraft/world/entity/animal/armadillo/Armadillo.java -@@ -106,6 +106,13 @@ public class Armadillo extends Animal { +@@ -107,6 +107,13 @@ public class Armadillo extends Animal { } // Purpur end - Configurable entity base attributes @@ -325,10 +325,10 @@ index 67a93960b3c6fe5725783ebf9f1c5b57e931f58c..0b4d1e6633ecc2e11606024d085bb9e6 protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); diff --git a/net/minecraft/world/entity/animal/axolotl/Axolotl.java b/net/minecraft/world/entity/animal/axolotl/Axolotl.java -index 83b1080765eb49a8a606258bb2db8b1a7daea081..8cf67fe3807ccbe8c9cdebf9d79f1fc5e4f1a817 100644 +index 17b20b36a3edafaea089288d22ad3e07795b9770..e32a78cb9574505d78f3e298a38a28a2422d34b3 100644 --- a/net/minecraft/world/entity/animal/axolotl/Axolotl.java +++ b/net/minecraft/world/entity/animal/axolotl/Axolotl.java -@@ -145,6 +145,13 @@ public class Axolotl extends Animal implements Bucketable { +@@ -147,6 +147,13 @@ public class Axolotl extends Animal implements Bucketable { } // Purpur end - Configurable entity base attributes @@ -343,10 +343,10 @@ index 83b1080765eb49a8a606258bb2db8b1a7daea081..8cf67fe3807ccbe8c9cdebf9d79f1fc5 public float getWalkTargetValue(BlockPos pos, LevelReader level) { return 0.0F; diff --git a/net/minecraft/world/entity/animal/camel/Camel.java b/net/minecraft/world/entity/animal/camel/Camel.java -index 6c6ef89aacbc328a2cb2dc05022998dbd79cfaf8..344edef98e13831d1238e5ae155d81b13126a696 100644 +index f45d1ba8dc0bb4b7041c5efba5d6261a3a5f5ff4..0c698241b10f84afb17ae10d3661a90bc62ec243 100644 --- a/net/minecraft/world/entity/animal/camel/Camel.java +++ b/net/minecraft/world/entity/animal/camel/Camel.java -@@ -96,6 +96,13 @@ public class Camel extends AbstractHorse { +@@ -98,6 +98,13 @@ public class Camel extends AbstractHorse { } // Purpur end - Ridables @@ -358,13 +358,13 @@ index 6c6ef89aacbc328a2cb2dc05022998dbd79cfaf8..344edef98e13831d1238e5ae155d81b1 + // Purpur end - Make entity breeding times configurable + @Override - public void addAdditionalSaveData(CompoundTag compound) { - super.addAdditionalSaveData(compound); + protected void addAdditionalSaveData(ValueOutput output) { + super.addAdditionalSaveData(output); diff --git a/net/minecraft/world/entity/animal/frog/Frog.java b/net/minecraft/world/entity/animal/frog/Frog.java -index 054811d807c56018617dc4a8e10af87ed15ad00c..71c09b9b8cc66d1a6f557a685539f9f4c93c0b8b 100644 +index 0bb0c875b12c94e9fb42b81210c5935cb5efecf8..1d5079602e7ae1042e2bb92209dded4007f703da 100644 --- a/net/minecraft/world/entity/animal/frog/Frog.java +++ b/net/minecraft/world/entity/animal/frog/Frog.java -@@ -164,6 +164,13 @@ public class Frog extends Animal { +@@ -165,6 +165,13 @@ public class Frog extends Animal { } // Purpur end - Ridables @@ -379,10 +379,10 @@ index 054811d807c56018617dc4a8e10af87ed15ad00c..71c09b9b8cc66d1a6f557a685539f9f4 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 b922d8c37b89a5762c8ed29e6a5fa545f408511e..a04892dce1f904fad3312499352ad56853ea658e 100644 +index f106d5bbbe9227b2c7cc4cc24ade57d8df9b4e10..8da2cdf5a308b4c1359f94127934ee90e9cef558 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 @@ -415,10 +415,10 @@ index 3aa12702cd1f4ef160180bc6ba64a6566cbddc9d..9e1100d672bfb712854d23203d0b730b public SoundEvent getAmbientSound() { return SoundEvents.DONKEY_AMBIENT; diff --git a/net/minecraft/world/entity/animal/horse/Horse.java b/net/minecraft/world/entity/animal/horse/Horse.java -index e0346014de51958976459eeb6677d886e7f261ab..6c1897fadaf93e9a71f0e361a602e6d9475a4f50 100644 +index 53c0eac62018a0d88e30b8c13de94216ff829cd8..3678c767818abb9e4180c2ade378ca09761ad784 100644 --- a/net/minecraft/world/entity/animal/horse/Horse.java +++ b/net/minecraft/world/entity/animal/horse/Horse.java -@@ -70,6 +70,13 @@ public class Horse extends AbstractHorse { +@@ -71,6 +71,13 @@ public class Horse extends AbstractHorse { } // Purpur end - Configurable entity base attributes @@ -433,10 +433,10 @@ index e0346014de51958976459eeb6677d886e7f261ab..6c1897fadaf93e9a71f0e361a602e6d9 protected void randomizeAttributes(RandomSource random) { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(generateMaxHealth(random::nextInt)); diff --git a/net/minecraft/world/entity/animal/horse/Llama.java b/net/minecraft/world/entity/animal/horse/Llama.java -index 10e7724d424cd39c96b91cf3de4bc4524d9311a4..db73d8821b3374341fa77fbbb3308a21abb60db6 100644 +index 6fe6507edbf4c3c2795b8fe000d230d5fe6a2486..9cfc31b9acca44c56b78ba6d935bcb6c1d6c5697 100644 --- a/net/minecraft/world/entity/animal/horse/Llama.java +++ b/net/minecraft/world/entity/animal/horse/Llama.java -@@ -146,6 +146,13 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob { +@@ -147,6 +147,13 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob { } // Purpur end - Configurable entity base attributes @@ -469,10 +469,10 @@ index 0107bb5fc029c5390d73e9a4cd08c13838a2ded5..fe2570ceb96d39ff6598a67a4ac4b470 public SoundEvent getAmbientSound() { return SoundEvents.MULE_AMBIENT; diff --git a/net/minecraft/world/entity/animal/horse/SkeletonHorse.java b/net/minecraft/world/entity/animal/horse/SkeletonHorse.java -index b7903386ce4648ef577b1d4875866b7c268c888b..39b8b10b950359952c7b149e4fca08d68f1ad8eb 100644 +index a7bcc0ff10e429ebfe91173c392e9a0c07903289..042b73f0807438327ebf4a2fd3a9d54d52159511 100644 --- a/net/minecraft/world/entity/animal/horse/SkeletonHorse.java +++ b/net/minecraft/world/entity/animal/horse/SkeletonHorse.java -@@ -65,6 +65,13 @@ public class SkeletonHorse extends AbstractHorse { +@@ -66,6 +66,13 @@ public class SkeletonHorse extends AbstractHorse { } // Purpur end - Configurable entity base attributes @@ -487,10 +487,10 @@ index b7903386ce4648ef577b1d4875866b7c268c888b..39b8b10b950359952c7b149e4fca08d6 return createBaseHorseAttributes().add(Attributes.MAX_HEALTH, 15.0).add(Attributes.MOVEMENT_SPEED, 0.2F); } diff --git a/net/minecraft/world/entity/animal/horse/TraderLlama.java b/net/minecraft/world/entity/animal/horse/TraderLlama.java -index 4664de247745c5346f1d131b19aac0512d394647..c67f82654897bec94dce1226d5ef2ce10d53e077 100644 +index 39175d4537e84ef39bcbdafc5200ed7b14482d62..b36064e58ecc1512fed2d53c20bde333a405e8b0 100644 --- a/net/minecraft/world/entity/animal/horse/TraderLlama.java +++ b/net/minecraft/world/entity/animal/horse/TraderLlama.java -@@ -69,6 +69,13 @@ public class TraderLlama extends Llama { +@@ -70,6 +70,13 @@ public class TraderLlama extends Llama { } // Purpur end - Configurable entity base attributes @@ -523,10 +523,10 @@ index 3d597bd355b6c918ea1bf4b7d537ad4f76e218d2..69b9ae449e58f13bf0950fdfe3f89742 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 7d4d13d78da258bdceae82cc57e0aa5a3e06fd7d..625f9b7bb027ccc4495d83349909be59e7a19061 100644 +index 8e4a14ca6a0cef1c52c64de3502077d7d25b0308..1fee6d36abe42ff9998287c47d0f498bbba910e3 100644 --- a/net/minecraft/world/entity/animal/sheep/Sheep.java +++ b/net/minecraft/world/entity/animal/sheep/Sheep.java -@@ -109,6 +109,13 @@ public class Sheep extends Animal implements Shearable { +@@ -87,6 +87,13 @@ public class Sheep extends Animal implements Shearable { } // Purpur end - Configurable entity base attributes @@ -541,10 +541,10 @@ index 7d4d13d78da258bdceae82cc57e0aa5a3e06fd7d..625f9b7bb027ccc4495d83349909be59 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 fab5a8d0974aab57a1e4a803eb4f3b47a3ee4a07..a21604d3ff3377946cbcbd57ddfa1cbb7e84dac6 100644 +index 683c9f82bfb2306f81b094464462d7d372ef5b22..9ad310cbc5fa41c949a37c1a5db6d6cd024f1483 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 @@ -559,10 +559,10 @@ index fab5a8d0974aab57a1e4a803eb4f3b47a3ee4a07..a21604d3ff3377946cbcbd57ddfa1cbb 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 cca4debfabbe60ecea9fc59514a24fc199c79003..99050a33a170b685c2fe3645b80c21b6069ab48a 100644 +index 7326debf3725844bfe8730dab480da7b1d6e99aa..372360baedbe4f8b59e94c261bc60346ba3cfbbe 100644 --- a/net/minecraft/world/entity/animal/wolf/Wolf.java +++ b/net/minecraft/world/entity/animal/wolf/Wolf.java -@@ -217,6 +217,13 @@ public class Wolf extends TamableAnimal implements NeutralMob { +@@ -216,6 +216,13 @@ public class Wolf extends TamableAnimal implements NeutralMob { } // Purpur end - Configurable entity base attributes @@ -595,10 +595,10 @@ index a68e9f3f96f37b6dd685fd02072f38b9e320fffc..4e300141b0c7fa967e3d0b9ef952097e 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 6b0eb12e9d879f22098eb2294d0d73db6ca266ed..df763444e9935b8f43ea65b3695c715993903fb8 100644 +index c2de8c58f43a43df77f28e077fbbf00e0f930ba7..298246318f5103ff416f076467d3b6bfec297c5e 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/unapplied-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 similarity index 91% rename from purpur-server/minecraft-patches/unapplied-features/0013-Apply-display-names-from-item-forms-of-entities-to-e.patch rename to purpur-server/minecraft-patches/features/0013-Apply-display-names-from-item-forms-of-entities-to-e.patch index afe0d94d9..26a4c805e 100644 --- a/purpur-server/minecraft-patches/unapplied-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 4c78de34dc656d3a8c88913c03da4df228b4d134..a3408b9f6306b42a1ce1d8f094695052202c45a7 100644 +index 5dfd78a0e00cae85feff8acd785cdfdf23433ba6..e6813da9d002b90acd44db1435f5fa9bf1bbed47 100644 --- a/net/minecraft/world/entity/decoration/ArmorStand.java +++ b/net/minecraft/world/entity/decoration/ArmorStand.java -@@ -492,6 +492,7 @@ public class ArmorStand extends LivingEntity { +@@ -450,6 +450,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,10 +18,10 @@ index 4c78de34dc656d3a8c88913c03da4df228b4d134..a3408b9f6306b42a1ce1d8f094695052 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 f9a97000b75db7999b1cbe1f72d680d4d7b803b7..9dfadb5639e840e69274b35f3366322141527104 100644 +index 90fd3ca5ecd29befa9237222e9f86a8a79a011e4..7e96617f0d5e8777873b4c2cccd012d656612f96 100644 --- a/net/minecraft/world/entity/decoration/ItemFrame.java +++ b/net/minecraft/world/entity/decoration/ItemFrame.java -@@ -232,7 +232,11 @@ public class ItemFrame extends HangingEntity { +@@ -237,7 +237,11 @@ public class ItemFrame extends HangingEntity { this.removeFramedMap(item); } else { if (dropItem) { @@ -35,10 +35,10 @@ index f9a97000b75db7999b1cbe1f72d680d4d7b803b7..9dfadb5639e840e69274b35f33663221 if (!item.isEmpty()) { diff --git a/net/minecraft/world/entity/decoration/Painting.java b/net/minecraft/world/entity/decoration/Painting.java -index 3f13bb1ad260d250efe2622297e432dc300e73a0..b1ee059501532cc2df5f0824e5becbd2bc6727b2 100644 +index cc34cadac8896a5f546d0879e795fea08d0c3f98..26a08b16de2318d5080be59a29c5f11e3597426d 100644 --- a/net/minecraft/world/entity/decoration/Painting.java +++ b/net/minecraft/world/entity/decoration/Painting.java -@@ -179,7 +179,11 @@ public class Painting extends HangingEntity { +@@ -182,7 +182,11 @@ public class Painting extends HangingEntity { if (level.getGameRules().getBoolean(GameRules.RULE_DOENTITYDROPS)) { this.playSound(SoundEvents.PAINTING_BREAK, 1.0F, 1.0F); if (!(entity instanceof Player player && player.hasInfiniteMaterials())) { @@ -52,10 +52,10 @@ index 3f13bb1ad260d250efe2622297e432dc300e73a0..b1ee059501532cc2df5f0824e5becbd2 } } diff --git a/net/minecraft/world/entity/vehicle/AbstractBoat.java b/net/minecraft/world/entity/vehicle/AbstractBoat.java -index abfe3370382c39aeab2cc7832c0ff6ee5b95fa5b..4f61c17e0a4a82773834bc21e00cac6eb75f794e 100644 +index 4dcf6daa146645f096ac8815588c837715073c22..d947801b616af5b5dcdcc8bb70b36f97d6a69fdd 100644 --- a/net/minecraft/world/entity/vehicle/AbstractBoat.java +++ b/net/minecraft/world/entity/vehicle/AbstractBoat.java -@@ -822,7 +822,13 @@ public abstract class AbstractBoat extends VehicleEntity implements Leashable { +@@ -825,7 +825,13 @@ public abstract class AbstractBoat extends VehicleEntity implements Leashable { @Override public final ItemStack getPickResult() { diff --git a/purpur-server/minecraft-patches/unapplied-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 similarity index 98% rename from purpur-server/minecraft-patches/unapplied-features/0014-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch rename to purpur-server/minecraft-patches/features/0014-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch index fc69100b5..a2f749d85 100644 --- a/purpur-server/minecraft-patches/unapplied-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 005af720a6385056f09f939813e97c10a7414a91..2846aca7bad55b56430738baeee9554e34da316c 100644 +index 4a68a8124716a57801f2d42a87e4d68c99d2f348..3b78e25de462a6fc393175f7992b9a1d4d08c64b 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 005af720a6385056f09f939813e97c10a7414a91..2846aca7bad55b56430738baeee9554e ImmutableSet.of(Pair.of(MemoryModuleType.JOB_SITE, MemoryStatus.VALUE_PRESENT)) ); } -@@ -965,7 +965,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -966,7 +966,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } public boolean hasFarmSeeds() { diff --git a/purpur-server/minecraft-patches/unapplied-features/0015-Add-mobGriefing-override-to-everything-affected.patch b/purpur-server/minecraft-patches/features/0015-Add-mobGriefing-override-to-everything-affected.patch similarity index 92% rename from purpur-server/minecraft-patches/unapplied-features/0015-Add-mobGriefing-override-to-everything-affected.patch rename to purpur-server/minecraft-patches/features/0015-Add-mobGriefing-override-to-everything-affected.patch index 9cb07cb80..c80a58dc6 100644 --- a/purpur-server/minecraft-patches/unapplied-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 5dd1a36b967176f96a18cb0d842ccb73b7b584ef..e7b7f09d224a630f61259a0d905b2ad6a6fa6986 100644 +index 4f149e5e17d2d2f2964e2f6626e20f52121e72d9..a70fddd19b24bb25edde63e4fda4685ee6997eba 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java -@@ -1904,7 +1904,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1936,7 +1936,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,10 +18,10 @@ index 5dd1a36b967176f96a18cb0d842ccb73b7b584ef..e7b7f09d224a630f61259a0d905b2ad6 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 ca1d0164c90e695731f05de39c1d2fff947ecfc1..964c7e60a8b0171ee31b12a277a4e9f8940ab58d 100644 +index 3215ca469e0e469089a559672739e91c9db0edaf..e05cf29c630d43c66614012c50b9dd4ece4c44f6 100644 --- a/net/minecraft/world/entity/Mob.java +++ b/net/minecraft/world/entity/Mob.java -@@ -519,7 +519,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -532,7 +532,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab && this.canPickUpLoot() && this.isAlive() && !this.dead @@ -92,10 +92,10 @@ index 3d40911970caf6f1de2a1ebee1df4c077703226a..179597558e93c6e9172207f716f9294d } 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 6a531e5d93d42d3dca7a5e49fb2ba14063665d2e..9fc8ec5886e2b747f9780e43df3ac2212f50526d 100644 +index 37b6bfa8dc1fd4ed0006f6531d2056bcd3c3abae..07767c9d649e7ef2b8fd8e3ac62d99ce13271fe4 100644 --- a/net/minecraft/world/entity/animal/Fox.java +++ b/net/minecraft/world/entity/animal/Fox.java -@@ -1061,7 +1061,7 @@ public class Fox extends Animal { +@@ -1058,7 +1058,7 @@ public class Fox extends Animal { } protected void onReachedTarget() { @@ -105,10 +105,10 @@ index 6a531e5d93d42d3dca7a5e49fb2ba14063665d2e..9fc8ec5886e2b747f9780e43df3ac221 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 6c1e23e96352aa777c4e0c7d00f7620aa3f29a32..09b618be3ae8baed11f4d411923edbc9b26ccca8 100644 +index 5fc1d6ba3cb54f2ea8c6fe3f994ffea2cca5784b..39154b01e23c626cc29b587ae96c611062e5b791 100644 --- a/net/minecraft/world/entity/animal/Rabbit.java +++ b/net/minecraft/world/entity/animal/Rabbit.java -@@ -647,7 +647,7 @@ public class Rabbit extends Animal { +@@ -648,7 +648,7 @@ public class Rabbit extends Animal { @Override public boolean canUse() { if (this.nextStartTick <= 0) { @@ -118,10 +118,10 @@ index 6c1e23e96352aa777c4e0c7d00f7620aa3f29a32..09b618be3ae8baed11f4d411923edbc9 } diff --git a/net/minecraft/world/entity/animal/SnowGolem.java b/net/minecraft/world/entity/animal/SnowGolem.java -index 764429b9d20ac105c9ae3b050adf5d3defbd6038..af3af77e5d6420044fa6d5aa62e64311247bc1a8 100644 +index 2350e5a0ba3d4c3782332a4ef51e2b0ef0b53f39..a747c4bd3a41025c6dc225e5d809ba03f57069f8 100644 --- a/net/minecraft/world/entity/animal/SnowGolem.java +++ b/net/minecraft/world/entity/animal/SnowGolem.java -@@ -135,7 +135,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM +@@ -136,7 +136,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM this.hurtServer(serverLevel, this.damageSources().onFire().knownCause(org.bukkit.event.entity.EntityDamageEvent.DamageCause.MELTING), 1.0F); // CraftBukkit } @@ -131,10 +131,10 @@ index 764429b9d20ac105c9ae3b050adf5d3defbd6038..af3af77e5d6420044fa6d5aa62e64311 } diff --git a/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -index 793567170b33ba21016b8767598d294fca4acec4..967c360e11beeb0150920e80d2e2bcbbfd305ab2 100644 +index 40c92ff02c22ef18b36f5d8677096dc82a60f1bb..6191a58d09fd0ca4625ecb90be78cce2049e4696 100644 --- a/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java +++ b/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -@@ -543,7 +543,7 @@ public class EnderDragon extends Mob implements Enemy { +@@ -544,7 +544,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 793567170b33ba21016b8767598d294fca4acec4..967c360e11beeb0150920e80d2e2bcbb //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 f0ec9334d9e6bf879568a085db691c46f7c652b6..38772967805dc73ffaae19d95b4f2d203e5a2be4 100644 +index 7aaa905034979e557db97456eae3563614aab8d1..72a7fde24a132f986318c9730aad9e4cefc70fdb 100644 --- a/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/net/minecraft/world/entity/boss/wither/WitherBoss.java -@@ -494,7 +494,7 @@ public class WitherBoss extends Monster implements RangedAttackMob { +@@ -495,7 +495,7 @@ public class WitherBoss extends Monster implements RangedAttackMob { if (this.destroyBlocksTick > 0) { this.destroyBlocksTick--; @@ -157,10 +157,10 @@ index f0ec9334d9e6bf879568a085db691c46f7c652b6..38772967805dc73ffaae19d95b4f2d20 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 b8094cd018e7b6cf165c92bd37cf6f9d5703599a..a6f8a3164a7c57ac9d9ea9850f037410c861de26 100644 +index c83d7c43969a94432f6bec076f78fb500f672926..002fef87101e2c98c8a091d416cb4729bd092455 100644 --- a/net/minecraft/world/entity/monster/EnderMan.java +++ b/net/minecraft/world/entity/monster/EnderMan.java -@@ -511,7 +511,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -507,7 +507,7 @@ public class EnderMan extends Monster implements NeutralMob { public boolean canUse() { if (!enderman.level().purpurConfig.endermanAllowGriefing) return false; // Purpur - Add enderman and creeper griefing controls return this.enderman.getCarriedBlock() != null @@ -169,7 +169,7 @@ index b8094cd018e7b6cf165c92bd37cf6f9d5703599a..a6f8a3164a7c57ac9d9ea9850f037410 && this.enderman.getRandom().nextInt(reducedTickDelay(2000)) == 0; } -@@ -661,7 +661,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -657,7 +657,7 @@ public class EnderMan extends Monster implements NeutralMob { public boolean canUse() { if (!enderman.level().purpurConfig.endermanAllowGriefing) return false; // Purpur - Add enderman and creeper griefing controls return this.enderman.getCarriedBlock() == null @@ -179,10 +179,10 @@ index b8094cd018e7b6cf165c92bd37cf6f9d5703599a..a6f8a3164a7c57ac9d9ea9850f037410 } diff --git a/net/minecraft/world/entity/monster/Evoker.java b/net/minecraft/world/entity/monster/Evoker.java -index 5773dd99ad2b014dde6666f4b32a1e6ee024a9fc..6cba6b164749987c161790bccb5d842047fbf53c 100644 +index e8aac93cffa3a9d4105c03c1aeb4d571ee0eba6c..4d1d746e39d136243dc620c89b29daf80dc62230 100644 --- a/net/minecraft/world/entity/monster/Evoker.java +++ b/net/minecraft/world/entity/monster/Evoker.java -@@ -323,7 +323,7 @@ public class Evoker extends SpellcasterIllager { +@@ -306,7 +306,7 @@ public class Evoker extends SpellcasterIllager { return false; } else { ServerLevel serverLevel = getServerLevel(Evoker.this.level()); @@ -192,10 +192,10 @@ index 5773dd99ad2b014dde6666f4b32a1e6ee024a9fc..6cba6b164749987c161790bccb5d8420 } else { List nearbyEntities = serverLevel.getNearbyEntities( diff --git a/net/minecraft/world/entity/monster/Ravager.java b/net/minecraft/world/entity/monster/Ravager.java -index 3adf0ec66db61b556a06ffe0fe835b57f8520948..007b35d1411aeda9cce3f8be431815367fab957c 100644 +index 9e7b07f353fb8f0650b8805014c371368eaabcd5..23b6d3c9746e1ee641d8b19ec50805cb271a9cc9 100644 --- a/net/minecraft/world/entity/monster/Ravager.java +++ b/net/minecraft/world/entity/monster/Ravager.java -@@ -178,7 +178,7 @@ public class Ravager extends Raider { +@@ -179,7 +179,7 @@ public class Ravager extends Raider { if (this.level() instanceof ServerLevel serverLevel && this.horizontalCollision @@ -227,10 +227,10 @@ index c200d57841304ba0d7a76fdd9a440fe9f2b25136..6f4aaeb645d9638764c3516d2f150166 continue; } diff --git a/net/minecraft/world/entity/monster/piglin/Piglin.java b/net/minecraft/world/entity/monster/piglin/Piglin.java -index b37038568b83db1602dca06aa06d72c4c4978cdd..6b404571f2086c280b16d253e218c750bf085c37 100644 +index a86cd2da7d0467e5b7d79ec2daceb65c86750445..c600c9b1ea4fe08abdce0aed30f61ef073039c7c 100644 --- a/net/minecraft/world/entity/monster/piglin/Piglin.java +++ b/net/minecraft/world/entity/monster/piglin/Piglin.java -@@ -449,7 +449,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento +@@ -450,7 +450,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento @Override public boolean wantsToPickUp(ServerLevel level, ItemStack stack) { @@ -240,10 +240,10 @@ index b37038568b83db1602dca06aa06d72c4c4978cdd..6b404571f2086c280b16d253e218c750 protected boolean canReplaceCurrentItem(ItemStack candidate) { diff --git a/net/minecraft/world/entity/projectile/LargeFireball.java b/net/minecraft/world/entity/projectile/LargeFireball.java -index db1b5bce212a5147be82504469f1fa9660812ebc..9e994953a8a8757496892441c155fba5a511c19b 100644 +index dd0ec97ea4561d2dccf735580faf0d65d6ac4b0d..779879f8d678a5e45e2752e6e033cc350acac89b 100644 --- a/net/minecraft/world/entity/projectile/LargeFireball.java +++ b/net/minecraft/world/entity/projectile/LargeFireball.java -@@ -19,20 +19,20 @@ public class LargeFireball extends Fireball { +@@ -20,20 +20,20 @@ public class LargeFireball extends Fireball { public LargeFireball(EntityType entityType, Level level) { super(entityType, level); @@ -268,10 +268,10 @@ index db1b5bce212a5147be82504469f1fa9660812ebc..9e994953a8a8757496892441c155fba5 org.bukkit.event.entity.ExplosionPrimeEvent event = new org.bukkit.event.entity.ExplosionPrimeEvent((org.bukkit.entity.Explosive) this.getBukkitEntity()); if (event.callEvent()) { diff --git a/net/minecraft/world/entity/projectile/Projectile.java b/net/minecraft/world/entity/projectile/Projectile.java -index 4487c03183d20a187d391dd124abb7b926508b5b..0a1cee73ee7d895dba55745647daa4870038515c 100644 +index ee16a05b8b2747ce95fcae1616c96143a5dec74e..f8bc051167c0266824edb816060999e6d7db6639 100644 --- a/net/minecraft/world/entity/projectile/Projectile.java +++ b/net/minecraft/world/entity/projectile/Projectile.java -@@ -466,7 +466,7 @@ public abstract class Projectile extends Entity implements TraceableEntity { +@@ -436,7 +436,7 @@ public abstract class Projectile extends Entity implements TraceableEntity { @Override public boolean mayInteract(ServerLevel level, BlockPos pos) { Entity owner = this.getOwner(); @@ -294,10 +294,10 @@ index 8c84cea43fc0e42a576004663670977eac99f1a6..6a0ec832226894687b28f35e1a8a190b // CraftBukkit end } diff --git a/net/minecraft/world/entity/raid/Raider.java b/net/minecraft/world/entity/raid/Raider.java -index e81ae747fe95c22321fc69791a6509d601826fd6..76ebbab40f5bac6d5f588410d3c5e6716cbe0679 100644 +index df0753c89b7c613f2abac9c50ce7f897ba280803..3baba21d106ab09ae476238f2636169c371f43cf 100644 --- a/net/minecraft/world/entity/raid/Raider.java +++ b/net/minecraft/world/entity/raid/Raider.java -@@ -400,7 +400,7 @@ public abstract class Raider extends PatrollingMonster { +@@ -401,7 +401,7 @@ public abstract class Raider extends PatrollingMonster { } private boolean cannotPickUpBanner() { @@ -307,10 +307,10 @@ index e81ae747fe95c22321fc69791a6509d601826fd6..76ebbab40f5bac6d5f588410d3c5e671 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 02bc5d83b92a594ec519f0a02b0517fdb4b9e954..92fe6acbd530e985da23f50e615817309915122c 100644 +index d5536dd40a1e9a2e05967652f690abbbca287852..d510503a8ad272255aeba20a916642828023fd19 100644 --- a/net/minecraft/world/level/GameRules.java +++ b/net/minecraft/world/level/GameRules.java -@@ -343,6 +343,13 @@ public class GameRules { +@@ -354,6 +354,13 @@ public class GameRules { this.getRule(key).setFrom(rule, level); // CraftBukkit - per-world } diff --git a/purpur-server/minecraft-patches/unapplied-features/0016-Add-EntityTeleportHinderedEvent.patch b/purpur-server/minecraft-patches/features/0016-Add-EntityTeleportHinderedEvent.patch similarity index 94% rename from purpur-server/minecraft-patches/unapplied-features/0016-Add-EntityTeleportHinderedEvent.patch rename to purpur-server/minecraft-patches/features/0016-Add-EntityTeleportHinderedEvent.patch index b550e197f..38ee57b2c 100644 --- a/purpur-server/minecraft-patches/unapplied-features/0016-Add-EntityTeleportHinderedEvent.patch +++ b/purpur-server/minecraft-patches/features/0016-Add-EntityTeleportHinderedEvent.patch @@ -35,10 +35,10 @@ index 68914268ca9350a6c1d794e011e1f9a8aecd609c..8e53b45dbf740de6c6fe499ef424d11b TheEndGatewayBlockEntity.triggerCooldown(level, pos, state, theEndGatewayBlockEntity); } diff --git a/net/minecraft/world/level/block/EndPortalBlock.java b/net/minecraft/world/level/block/EndPortalBlock.java -index cf2b105c98a3b22b9bea59cbafcd598657dc92b5..65d3477ed32c3f0db58aab6ab87d8f1721cbe876 100644 +index f6c64277c3d6e16250e2bf963b6427404e27aa9b..997831c2b916899da8518c1415233812e6ec16b8 100644 --- a/net/minecraft/world/level/block/EndPortalBlock.java +++ b/net/minecraft/world/level/block/EndPortalBlock.java -@@ -59,6 +59,13 @@ public class EndPortalBlock extends BaseEntityBlock implements Portal { +@@ -60,6 +60,13 @@ public class EndPortalBlock extends BaseEntityBlock implements Portal { protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity, InsideBlockEffectApplier effectApplier) { if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(level, pos)).callEvent()) { return; } // Paper - Add EntityInsideBlockEvent if (entity.canUsePortal(false)) { @@ -53,10 +53,10 @@ index cf2b105c98a3b22b9bea59cbafcd598657dc92b5..65d3477ed32c3f0db58aab6ab87d8f17 org.bukkit.event.entity.EntityPortalEnterEvent event = new org.bukkit.event.entity.EntityPortalEnterEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.util.CraftLocation.toBukkit(pos, level), org.bukkit.PortalType.ENDER); // Paper - add portal type level.getCraftServer().getPluginManager().callEvent(event); diff --git a/net/minecraft/world/level/block/NetherPortalBlock.java b/net/minecraft/world/level/block/NetherPortalBlock.java -index fa0d6baa40c6052c993d870d124af911e8621f0a..1c58af94050b75cd8f405a201448c822792e594a 100644 +index f408bdd8083210b2ef660e6194610462a3e113b6..44707c0bf2c11f7bf7e30f747357ca2a1c6057d6 100644 --- a/net/minecraft/world/level/block/NetherPortalBlock.java +++ b/net/minecraft/world/level/block/NetherPortalBlock.java -@@ -118,6 +118,13 @@ public class NetherPortalBlock extends Block implements Portal { +@@ -113,6 +113,13 @@ public class NetherPortalBlock extends Block implements Portal { protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity, InsideBlockEffectApplier effectApplier) { if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(level, pos)).callEvent()) { return; } // Paper - Add EntityInsideBlockEvent if (entity.canUsePortal(false)) { diff --git a/purpur-server/minecraft-patches/unapplied-features/0017-Toggle-for-water-sensitive-mob-damage.patch b/purpur-server/minecraft-patches/features/0017-Toggle-for-water-sensitive-mob-damage.patch similarity index 85% rename from purpur-server/minecraft-patches/unapplied-features/0017-Toggle-for-water-sensitive-mob-damage.patch rename to purpur-server/minecraft-patches/features/0017-Toggle-for-water-sensitive-mob-damage.patch index 87dee44cb..3b1ee9b98 100644 --- a/purpur-server/minecraft-patches/unapplied-features/0017-Toggle-for-water-sensitive-mob-damage.patch +++ b/purpur-server/minecraft-patches/features/0017-Toggle-for-water-sensitive-mob-damage.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Toggle for water sensitive mob damage diff --git a/net/minecraft/world/entity/GlowSquid.java b/net/minecraft/world/entity/GlowSquid.java -index b6f52326f52ce2885ece346944a321d7c924a470..fe6f29c5e663daea017b19aaafaddda40b4c22bb 100644 +index 1896f91e10a5e17332836d5354813a18a4dfe6dc..1c446cec71aa163374ab9832c961a6b4c3fc534b 100644 --- a/net/minecraft/world/entity/GlowSquid.java +++ b/net/minecraft/world/entity/GlowSquid.java -@@ -53,6 +53,13 @@ public class GlowSquid extends Squid { +@@ -54,6 +54,13 @@ public class GlowSquid extends Squid { } // Purpur end - Configurable entity base attributes @@ -23,10 +23,10 @@ index b6f52326f52ce2885ece346944a321d7c924a470..fe6f29c5e663daea017b19aaafaddda4 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 581894f58df1df4b50aa537252cb4be6bbcebf80..4d44b35ee34eb256b9aff9d74b1cb9ae1ac9503f 100644 +index d25da9a9560ce171df3ada22756e4c54a91ff378..2d2b44f2617732bcdfd969454f80b9ad4af470a1 100644 --- a/net/minecraft/world/entity/ambient/Bat.java +++ b/net/minecraft/world/entity/ambient/Bat.java -@@ -110,6 +110,13 @@ public class Bat extends AmbientCreature { +@@ -111,6 +111,13 @@ public class Bat extends AmbientCreature { } // Purpur end - Configurable entity base attributes @@ -41,10 +41,10 @@ index 581894f58df1df4b50aa537252cb4be6bbcebf80..4d44b35ee34eb256b9aff9d74b1cb9ae 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 68acacdf30834fe318862d1900cb18800caa0e13..9a9b0d1ca7b30916e1ac3938924ced8d77dafdaf 100644 +index 11a7cbb1781e396ecb2b9fdbad7af2c55ea2606a..31a9451417272ec5bb6a6cbc3ec308f6c5cd057f 100644 --- a/net/minecraft/world/entity/animal/Bee.java +++ b/net/minecraft/world/entity/animal/Bee.java -@@ -181,7 +181,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -182,7 +182,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 68acacdf30834fe318862d1900cb18800caa0e13..9a9b0d1ca7b30916e1ac3938924ced8d this.setPathfindingMalus(PathType.WATER_BORDER, 16.0F); this.setPathfindingMalus(PathType.COCOA, -1.0F); this.setPathfindingMalus(PathType.FENCE, -1.0F); -@@ -487,6 +487,13 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -488,6 +488,13 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { } // Purpur end - Make entity breeding times configurable @@ -68,10 +68,10 @@ index 68acacdf30834fe318862d1900cb18800caa0e13..9a9b0d1ca7b30916e1ac3938924ced8d 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 75a63c8e8917f20b389f8194ae3089ff41e9d0ff..1d758dd3ee0834fcf9ebf737bc7a016b881145e5 100644 +index 5e6a66c1a3532d39dae82eaeb2428605536e2155..41f303078b2e1f0460215fbfe27ff06fd5783c35 100644 --- a/net/minecraft/world/entity/animal/Cat.java +++ b/net/minecraft/world/entity/animal/Cat.java -@@ -131,6 +131,13 @@ public class Cat extends TamableAnimal { +@@ -132,6 +132,13 @@ public class Cat extends TamableAnimal { } // Purpur end - Make entity breeding times configurable @@ -86,10 +86,10 @@ index 75a63c8e8917f20b389f8194ae3089ff41e9d0ff..1d758dd3ee0834fcf9ebf737bc7a016b protected void registerGoals() { this.temptGoal = new Cat.CatTemptGoal(this, 0.6, stack -> stack.is(ItemTags.CAT_FOOD), true); diff --git a/net/minecraft/world/entity/animal/Chicken.java b/net/minecraft/world/entity/animal/Chicken.java -index ef808c4462387bb73466b33d1c3156796fea251b..3faa8ac614b6d2f8f90c7092900aa24aa976c0ac 100644 +index e4702a5a89147bd83fa73a969fab7077ddd623f6..58f7690a05febac5c57ba7ea2aff93b7d94a4291 100644 --- a/net/minecraft/world/entity/animal/Chicken.java +++ b/net/minecraft/world/entity/animal/Chicken.java -@@ -108,6 +108,13 @@ public class Chicken extends Animal { +@@ -109,6 +109,13 @@ public class Chicken extends Animal { } // Purpur end - Make entity breeding times configurable @@ -122,10 +122,10 @@ index ed52fbbf93e7a238d0f45981f8629ba8613bf3d4..6128ed595cb97cc11c1a0e1e1673b3af public ItemStack getBucketItemStack() { return new ItemStack(Items.COD_BUCKET); diff --git a/net/minecraft/world/entity/animal/Cow.java b/net/minecraft/world/entity/animal/Cow.java -index 0f4f732d9501df42e0d42fe978692c4b0e3d8f0b..4bc6d0eb56b4674e2ac0f13010521314a95e0096 100644 +index 753ed26cc6bfc8276d4405091b78b0e50182b84a..d584ffe3cc8dfb5fd4ce352b1da18af6a143d575 100644 --- a/net/minecraft/world/entity/animal/Cow.java +++ b/net/minecraft/world/entity/animal/Cow.java -@@ -60,6 +60,13 @@ public class Cow extends AbstractCow { +@@ -61,6 +61,13 @@ public class Cow extends AbstractCow { } // Purpur end - Make entity breeding times configurable @@ -140,10 +140,10 @@ index 0f4f732d9501df42e0d42fe978692c4b0e3d8f0b..4bc6d0eb56b4674e2ac0f13010521314 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 932ec7ed4ec102f64fa977835d2c7ebe23afa6e3..4f3777ee9cf7a67d5e2f489dbcf40ec2a1ed13cd 100644 +index c8ed91c1902261d6b15744e1fbe1bf7f861b51a8..cff87e0047167751d9b4672a0caae642f15426a9 100644 --- a/net/minecraft/world/entity/animal/Dolphin.java +++ b/net/minecraft/world/entity/animal/Dolphin.java -@@ -158,6 +158,13 @@ public class Dolphin extends AgeableWaterCreature { +@@ -159,6 +159,13 @@ public class Dolphin extends AgeableWaterCreature { } // Purpur end - Configurable entity base attributes @@ -158,10 +158,10 @@ index 932ec7ed4ec102f64fa977835d2c7ebe23afa6e3..4f3777ee9cf7a67d5e2f489dbcf40ec2 @Override public SpawnGroupData finalizeSpawn( diff --git a/net/minecraft/world/entity/animal/Fox.java b/net/minecraft/world/entity/animal/Fox.java -index e3631adee6ef690807768c90045c28570982b315..98cb5c75bb4397914271f81aeace045105a9572e 100644 +index 07767c9d649e7ef2b8fd8e3ac62d99ce13271fe4..23e119ce82c3a0541b40249b20f133e39fac6858 100644 --- a/net/minecraft/world/entity/animal/Fox.java +++ b/net/minecraft/world/entity/animal/Fox.java -@@ -194,6 +194,13 @@ public class Fox extends Animal { +@@ -195,6 +195,13 @@ public class Fox extends Animal { } // Purpur end - Make entity breeding times configurable @@ -176,10 +176,10 @@ index e3631adee6ef690807768c90045c28570982b315..98cb5c75bb4397914271f81aeace0451 protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); diff --git a/net/minecraft/world/entity/animal/IronGolem.java b/net/minecraft/world/entity/animal/IronGolem.java -index fd0d1abcb34862fc7a812f1e3d96969a5c917352..498302a20b783f2208417b56716f4fc4f18bc333 100644 +index 1cb7e0985a59e83f118d4656e94a79f4d81836ff..006df1758bdaeb55a7db938afd9e00c575a62e60 100644 --- a/net/minecraft/world/entity/animal/IronGolem.java +++ b/net/minecraft/world/entity/animal/IronGolem.java -@@ -99,6 +99,13 @@ public class IronGolem extends AbstractGolem implements NeutralMob { +@@ -100,6 +100,13 @@ public class IronGolem extends AbstractGolem implements NeutralMob { } // Purpur end - Configurable entity base attributes @@ -194,10 +194,10 @@ index fd0d1abcb34862fc7a812f1e3d96969a5c917352..498302a20b783f2208417b56716f4fc4 protected void registerGoals() { if (this.level().purpurConfig.ironGolemPoppyCalm) this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.ReceiveFlower(this)); // Purpur - Iron golem calm anger options diff --git a/net/minecraft/world/entity/animal/MushroomCow.java b/net/minecraft/world/entity/animal/MushroomCow.java -index 24313a5dd5f5be39677ac8080ecf56703c751923..114d893f74dfb4422380cad649b7f3708c29c1c3 100644 +index 3e4cb7680e6082ebab95e2b8307eedb0d3fcfbcd..298cd49b28b5efb0f6401c19fc083a3714cb9aeb 100644 --- a/net/minecraft/world/entity/animal/MushroomCow.java +++ b/net/minecraft/world/entity/animal/MushroomCow.java -@@ -92,6 +92,13 @@ public class MushroomCow extends AbstractCow implements Shearable { +@@ -93,6 +93,13 @@ public class MushroomCow extends AbstractCow implements Shearable { } // Purpur end - Make entity breeding times configurable @@ -212,10 +212,10 @@ index 24313a5dd5f5be39677ac8080ecf56703c751923..114d893f74dfb4422380cad649b7f370 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 56b9fa9b24a9b5cf510dc6610a1b1bedf3a32d72..47429374bee47c98216a0eb6dbe65df5fcc0e117 100644 +index c4ed3f906d4b47c07915afd07db7a731e99b7215..d92af280d85856d57f3031dfaf7c644cbfc18f15 100644 --- a/net/minecraft/world/entity/animal/Ocelot.java +++ b/net/minecraft/world/entity/animal/Ocelot.java -@@ -95,6 +95,13 @@ public class Ocelot extends Animal { +@@ -96,6 +96,13 @@ public class Ocelot extends Animal { } // Purpur end - Make entity breeding times configurable @@ -230,10 +230,10 @@ index 56b9fa9b24a9b5cf510dc6610a1b1bedf3a32d72..47429374bee47c98216a0eb6dbe65df5 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 cc1144d44526caa7fc7549ecaf405813b4bad1de..85929b3f4503033d17ec7fd42746c5f071a3fd6f 100644 +index c7686698a9615a51c653658cf6a46ccfb9c4d168..4678f432b6a8f74bbd121aee41f1b093888946f7 100644 --- a/net/minecraft/world/entity/animal/Panda.java +++ b/net/minecraft/world/entity/animal/Panda.java -@@ -148,6 +148,13 @@ public class Panda extends Animal { +@@ -149,6 +149,13 @@ public class Panda extends Animal { } // Purpur end - Make entity breeding times configurable @@ -248,10 +248,10 @@ index cc1144d44526caa7fc7549ecaf405813b4bad1de..85929b3f4503033d17ec7fd42746c5f0 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 d69992a1f729ba99f3992920cd2372a04ff60996..c1d4bcbc3bad5f2fcaecd4007db7318a07a63324 100644 +index 6019406d7c7e51c53d8822e44070e626091495af..92f43418e5b21eb2a323a12649a96e0f62764618 100644 --- a/net/minecraft/world/entity/animal/Parrot.java +++ b/net/minecraft/world/entity/animal/Parrot.java -@@ -206,6 +206,13 @@ public class Parrot extends ShoulderRidingEntity implements FlyingAnimal { +@@ -208,6 +208,13 @@ public class Parrot extends ShoulderRidingEntity implements FlyingAnimal { } // Purpur end - Make entity breeding times configurable @@ -266,10 +266,10 @@ index d69992a1f729ba99f3992920cd2372a04ff60996..c1d4bcbc3bad5f2fcaecd4007db7318a @Override public SpawnGroupData finalizeSpawn( diff --git a/net/minecraft/world/entity/animal/Pig.java b/net/minecraft/world/entity/animal/Pig.java -index f81a448a522fa7551ead16a5ac2b41460235f4b6..c2718006f6a47dda0655818181881bcdcfef34dc 100644 +index 885135fb301eeb6149aa53d581b4073d3724264d..6f318222011e3bc57c4f0b92c0fba1f410a1d65e 100644 --- a/net/minecraft/world/entity/animal/Pig.java +++ b/net/minecraft/world/entity/animal/Pig.java -@@ -97,6 +97,13 @@ public class Pig extends Animal implements ItemSteerable { +@@ -98,6 +98,13 @@ public class Pig extends Animal implements ItemSteerable { } // Purpur end - Make entity breeding times configurable @@ -284,10 +284,10 @@ index f81a448a522fa7551ead16a5ac2b41460235f4b6..c2718006f6a47dda0655818181881bcd protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/animal/PolarBear.java b/net/minecraft/world/entity/animal/PolarBear.java -index 329115fcd70531c48b352008faef92e10ddc84de..f9d34a8242043ba61dcebb669754d9da0480eb13 100644 +index e39ca22a871c911defdbfe1cb0f1b15cde8d4612..a800acb671a18287f1407bd293a433f1fe039ce5 100644 --- a/net/minecraft/world/entity/animal/PolarBear.java +++ b/net/minecraft/world/entity/animal/PolarBear.java -@@ -131,6 +131,13 @@ public class PolarBear extends Animal implements NeutralMob { +@@ -132,6 +132,13 @@ public class PolarBear extends Animal implements NeutralMob { } // Purpur end - Make entity breeding times configurable @@ -302,10 +302,10 @@ index 329115fcd70531c48b352008faef92e10ddc84de..f9d34a8242043ba61dcebb669754d9da @Override public AgeableMob getBreedOffspring(ServerLevel level, AgeableMob otherParent) { diff --git a/net/minecraft/world/entity/animal/Pufferfish.java b/net/minecraft/world/entity/animal/Pufferfish.java -index bed7d937f02d1fbc8fdd277a2d0524e79b19f707..09977f4ce3545f076be26d173f40fc261fe3c515 100644 +index dbdb7f71464ccd06a04a47ace24a86e6854409fc..a9219906038a24831b3d1e6851af4225b60616c3 100644 --- a/net/minecraft/world/entity/animal/Pufferfish.java +++ b/net/minecraft/world/entity/animal/Pufferfish.java -@@ -65,6 +65,13 @@ public class Pufferfish extends AbstractFish { +@@ -66,6 +66,13 @@ public class Pufferfish extends AbstractFish { } // Purpur end - Configurable entity base attributes @@ -320,10 +320,10 @@ index bed7d937f02d1fbc8fdd277a2d0524e79b19f707..09977f4ce3545f076be26d173f40fc26 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 1c88e12d743325a429cad27928ea1ac43a696e8a..de2ffef11b50f3bde03785f6cb13c97c437288e5 100644 +index 39154b01e23c626cc29b587ae96c611062e5b791..dcbbe3406cf481e2e1d5c4cc6baaa5ac564b1ad1 100644 --- a/net/minecraft/world/entity/animal/Rabbit.java +++ b/net/minecraft/world/entity/animal/Rabbit.java -@@ -159,6 +159,13 @@ public class Rabbit extends Animal { +@@ -160,6 +160,13 @@ public class Rabbit extends Animal { } // Purpur end - Make entity breeding times configurable @@ -338,10 +338,10 @@ index 1c88e12d743325a429cad27928ea1ac43a696e8a..de2ffef11b50f3bde03785f6cb13c97c public void registerGoals() { this.goalSelector.addGoal(1, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/animal/Salmon.java b/net/minecraft/world/entity/animal/Salmon.java -index 8559e7e8c5163eb55b997521dca2e96b5ae3c9bc..78f83edd809a72bf5a2f908d8d5e3b1755541a29 100644 +index e426b3280b519a3cd727b200794324361c62b67e..3c517936aee31fcf246787c033688870a2349e55 100644 --- a/net/minecraft/world/entity/animal/Salmon.java +++ b/net/minecraft/world/entity/animal/Salmon.java -@@ -57,6 +57,13 @@ public class Salmon extends AbstractSchoolingFish { +@@ -58,6 +58,13 @@ public class Salmon extends AbstractSchoolingFish { } // Purpur end - Configurable entity base attributes @@ -356,10 +356,10 @@ index 8559e7e8c5163eb55b997521dca2e96b5ae3c9bc..78f83edd809a72bf5a2f908d8d5e3b17 public int getMaxSchoolSize() { return 5; diff --git a/net/minecraft/world/entity/animal/SnowGolem.java b/net/minecraft/world/entity/animal/SnowGolem.java -index 1bf6fdc0149975fefbb73563e0d4861b178459b8..2af4ba00c9f48d3ab9063eda8abb3d15c1bb0929 100644 +index a747c4bd3a41025c6dc225e5d809ba03f57069f8..8917b3d2d75dc1a0ddf1b6dd64267f69506e80dc 100644 --- a/net/minecraft/world/entity/animal/SnowGolem.java +++ b/net/minecraft/world/entity/animal/SnowGolem.java -@@ -124,7 +124,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM +@@ -125,7 +125,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM @Override public boolean isSensitiveToWater() { @@ -387,10 +387,10 @@ index 2a0dc779ec2a53a4feb4d2d665cf9d820113ba04..2108cbddc9a880347ff36fc4ce8b56e8 protected void registerGoals() { this.goalSelector.addGoal(0, new Squid.SquidRandomMovementGoal(this)); diff --git a/net/minecraft/world/entity/animal/TropicalFish.java b/net/minecraft/world/entity/animal/TropicalFish.java -index 946874b3146bd7b226b4cb07110eec57c2968bb7..70afdcbd9d12f323ababde628e1422d1a1b82210 100644 +index c102db5ffdfc7dcb0ec7e59fb031fe6afcdd8237..4510798913f94474b16ab6cbfa32dc0fdf0a226a 100644 --- a/net/minecraft/world/entity/animal/TropicalFish.java +++ b/net/minecraft/world/entity/animal/TropicalFish.java -@@ -95,6 +95,13 @@ public class TropicalFish extends AbstractSchoolingFish { +@@ -96,6 +96,13 @@ public class TropicalFish extends AbstractSchoolingFish { } // Purpur end - Configurable entity base attributes @@ -405,10 +405,10 @@ index 946874b3146bd7b226b4cb07110eec57c2968bb7..70afdcbd9d12f323ababde628e1422d1 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 57e4cb66fbf29b992a144ca923f2e22983cc1db5..f99c135a1b99a52c72388cdcc6c46933eb7ba75b 100644 +index f5735e5bcc34b78db544aa8971234bc86e0ddfa9..3c2ded73af16360474fb0410456e94746393ca0e 100644 --- a/net/minecraft/world/entity/animal/Turtle.java +++ b/net/minecraft/world/entity/animal/Turtle.java -@@ -117,6 +117,13 @@ public class Turtle extends Animal { +@@ -118,6 +118,13 @@ public class Turtle extends Animal { } // Purpur end - Make entity breeding times configurable @@ -423,10 +423,10 @@ index 57e4cb66fbf29b992a144ca923f2e22983cc1db5..f99c135a1b99a52c72388cdcc6c46933 this.homePos = homePos; } diff --git a/net/minecraft/world/entity/animal/axolotl/Axolotl.java b/net/minecraft/world/entity/animal/axolotl/Axolotl.java -index 8cf67fe3807ccbe8c9cdebf9d79f1fc5e4f1a817..da48db578931eb04ba7f2f1fbf26b6fb5bea617a 100644 +index e32a78cb9574505d78f3e298a38a28a2422d34b3..f364117decd00f00ae0dc729addb5a35008b6ca5 100644 --- a/net/minecraft/world/entity/animal/axolotl/Axolotl.java +++ b/net/minecraft/world/entity/animal/axolotl/Axolotl.java -@@ -152,6 +152,13 @@ public class Axolotl extends Animal implements Bucketable { +@@ -154,6 +154,13 @@ public class Axolotl extends Animal implements Bucketable { } // Purpur end - Make entity breeding times configurable @@ -441,10 +441,10 @@ index 8cf67fe3807ccbe8c9cdebf9d79f1fc5e4f1a817..da48db578931eb04ba7f2f1fbf26b6fb public float getWalkTargetValue(BlockPos pos, LevelReader level) { return 0.0F; diff --git a/net/minecraft/world/entity/animal/goat/Goat.java b/net/minecraft/world/entity/animal/goat/Goat.java -index a04892dce1f904fad3312499352ad56853ea658e..47de7e4710234676358378fb5fa9a6b034662e42 100644 +index 8da2cdf5a308b4c1359f94127934ee90e9cef558..952d9f5c2bb2e869df475a78b04be10e7541829e 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 @@ -477,10 +477,10 @@ index 9e1100d672bfb712854d23203d0b730b8cc78a3d..9b17b1acf63fddb5f5b6cdf95283ae8f public SoundEvent getAmbientSound() { return SoundEvents.DONKEY_AMBIENT; diff --git a/net/minecraft/world/entity/animal/horse/Horse.java b/net/minecraft/world/entity/animal/horse/Horse.java -index 6c1897fadaf93e9a71f0e361a602e6d9475a4f50..8754c3d6fd06bd2c834fe06e238afa330b24e547 100644 +index 3678c767818abb9e4180c2ade378ca09761ad784..2928159447a87ea8cc945e73e2e81ad1dbe13680 100644 --- a/net/minecraft/world/entity/animal/horse/Horse.java +++ b/net/minecraft/world/entity/animal/horse/Horse.java -@@ -77,6 +77,13 @@ public class Horse extends AbstractHorse { +@@ -78,6 +78,13 @@ public class Horse extends AbstractHorse { } // Purpur end - Make entity breeding times configurable @@ -495,10 +495,10 @@ index 6c1897fadaf93e9a71f0e361a602e6d9475a4f50..8754c3d6fd06bd2c834fe06e238afa33 protected void randomizeAttributes(RandomSource random) { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(generateMaxHealth(random::nextInt)); diff --git a/net/minecraft/world/entity/animal/horse/Llama.java b/net/minecraft/world/entity/animal/horse/Llama.java -index db73d8821b3374341fa77fbbb3308a21abb60db6..2e776404e65c5dc6040d00a1ed8b5ce0df7badc0 100644 +index 9cfc31b9acca44c56b78ba6d935bcb6c1d6c5697..017482c8818a854b23237e27e3304498d800569d 100644 --- a/net/minecraft/world/entity/animal/horse/Llama.java +++ b/net/minecraft/world/entity/animal/horse/Llama.java -@@ -153,6 +153,13 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob { +@@ -154,6 +154,13 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob { } // Purpur end - Make entity breeding times configurable @@ -531,10 +531,10 @@ index fe2570ceb96d39ff6598a67a4ac4b4707eb28656..14a17d4b33b276f28e45ce06de06793a public SoundEvent getAmbientSound() { return SoundEvents.MULE_AMBIENT; diff --git a/net/minecraft/world/entity/animal/horse/SkeletonHorse.java b/net/minecraft/world/entity/animal/horse/SkeletonHorse.java -index 39b8b10b950359952c7b149e4fca08d68f1ad8eb..f1a131b9fe4fce78cf34e04eefc886a844a50e72 100644 +index 042b73f0807438327ebf4a2fd3a9d54d52159511..cff709a28830a842a499f7dfe3b8bc0b703c9af4 100644 --- a/net/minecraft/world/entity/animal/horse/SkeletonHorse.java +++ b/net/minecraft/world/entity/animal/horse/SkeletonHorse.java -@@ -72,6 +72,13 @@ public class SkeletonHorse extends AbstractHorse { +@@ -73,6 +73,13 @@ public class SkeletonHorse extends AbstractHorse { } // Purpur end - Make entity breeding times configurable @@ -549,10 +549,10 @@ index 39b8b10b950359952c7b149e4fca08d68f1ad8eb..f1a131b9fe4fce78cf34e04eefc886a8 return createBaseHorseAttributes().add(Attributes.MAX_HEALTH, 15.0).add(Attributes.MOVEMENT_SPEED, 0.2F); } diff --git a/net/minecraft/world/entity/animal/horse/TraderLlama.java b/net/minecraft/world/entity/animal/horse/TraderLlama.java -index c67f82654897bec94dce1226d5ef2ce10d53e077..4cd4bfd57285808f4bda7e7dd2ddeda36dd13af0 100644 +index b36064e58ecc1512fed2d53c20bde333a405e8b0..81e902ba31b55722f4d257e918b56fa654083916 100644 --- a/net/minecraft/world/entity/animal/horse/TraderLlama.java +++ b/net/minecraft/world/entity/animal/horse/TraderLlama.java -@@ -76,6 +76,13 @@ public class TraderLlama extends Llama { +@@ -77,6 +77,13 @@ public class TraderLlama extends Llama { } // Purpur end - Make entity breeding times configurable @@ -585,10 +585,10 @@ index 69b9ae449e58f13bf0950fdfe3f89742af89956e..e78fac0a5e37d53afbc200f015adab60 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 625f9b7bb027ccc4495d83349909be59e7a19061..1ecfda9a5222d7c175108edbbff552ea036e0321 100644 +index 1fee6d36abe42ff9998287c47d0f498bbba910e3..8394453415a0d098de6176662f97df2174a83697 100644 --- a/net/minecraft/world/entity/animal/sheep/Sheep.java +++ b/net/minecraft/world/entity/animal/sheep/Sheep.java -@@ -116,6 +116,13 @@ public class Sheep extends Animal implements Shearable { +@@ -94,6 +94,13 @@ public class Sheep extends Animal implements Shearable { } // Purpur end - Make entity breeding times configurable @@ -603,10 +603,10 @@ index 625f9b7bb027ccc4495d83349909be59e7a19061..1ecfda9a5222d7c175108edbbff552ea 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 99050a33a170b685c2fe3645b80c21b6069ab48a..243e848a6f4eaa2a72f02a1f056f20d9de23058f 100644 +index 372360baedbe4f8b59e94c261bc60346ba3cfbbe..d492c6bcbc45e312a5ee2d3567a26853b514d027 100644 --- a/net/minecraft/world/entity/animal/wolf/Wolf.java +++ b/net/minecraft/world/entity/animal/wolf/Wolf.java -@@ -224,6 +224,13 @@ public class Wolf extends TamableAnimal implements NeutralMob { +@@ -223,6 +223,13 @@ public class Wolf extends TamableAnimal implements NeutralMob { } // Purpur end - Make entity breeding times configurable @@ -621,10 +621,10 @@ index 99050a33a170b685c2fe3645b80c21b6069ab48a..243e848a6f4eaa2a72f02a1f056f20d9 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 f014b4ca2baf97edf472ce4d8af1209eaf4d53d1..b782ddd14d68717c387754300fc1be69d05df66f 100644 +index 6191a58d09fd0ca4625ecb90be78cce2049e4696..de09a91b89661118e460842453e33f383ea08a94 100644 --- a/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java +++ b/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -@@ -171,6 +171,13 @@ public class EnderDragon extends Mob implements Enemy { +@@ -172,6 +172,13 @@ public class EnderDragon extends Mob implements Enemy { } // Purpur end - Configurable entity base attributes @@ -636,13 +636,13 @@ index f014b4ca2baf97edf472ce4d8af1209eaf4d53d1..b782ddd14d68717c387754300fc1be69 + // Purpur end - Toggle for water sensitive mob damage + public static AttributeSupplier.Builder createAttributes() { - return Mob.createMobAttributes().add(Attributes.MAX_HEALTH, 200.0); + 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 951de2194f8e669e454edd8678cd254e94d18ab7..5862384e096d0a97a9a92a921f704e441243e38a 100644 +index 72a7fde24a132f986318c9730aad9e4cefc70fdb..d4e4aa98e2259aa7f5dbce1585257a4e24b4782f 100644 --- a/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/net/minecraft/world/entity/boss/wither/WitherBoss.java -@@ -220,6 +220,13 @@ public class WitherBoss extends Monster implements RangedAttackMob { +@@ -221,6 +221,13 @@ public class WitherBoss extends Monster implements RangedAttackMob { } // Purpur end - Configurable entity base attributes @@ -697,10 +697,10 @@ index 64eecd8d1acd318743800c1daa77cd97097a0f7c..420fe0d01d0b173a6a541f77e1aaca3f public boolean doHurtTarget(ServerLevel level, Entity source) { if (super.doHurtTarget(level, source)) { diff --git a/net/minecraft/world/entity/monster/Creeper.java b/net/minecraft/world/entity/monster/Creeper.java -index 53a7390c61b9ada8784eae0c9b4e78ee85c68317..67f99138834011d12f429cf7ff6fdb7c6bd06262 100644 +index 60e420d79b73dd844bdae6c3846c6f4838fe2ca2..7ebce241a4195326bbecd158952f2ec559196ad3 100644 --- a/net/minecraft/world/entity/monster/Creeper.java +++ b/net/minecraft/world/entity/monster/Creeper.java -@@ -264,6 +264,13 @@ public class Creeper extends Monster { +@@ -265,6 +265,13 @@ public class Creeper extends Monster { } // Purpur end - Config to make Creepers explode on death @@ -715,10 +715,10 @@ index 53a7390c61b9ada8784eae0c9b4e78ee85c68317..67f99138834011d12f429cf7ff6fdb7c public SoundEvent getHurtSound(DamageSource damageSource) { return SoundEvents.CREEPER_HURT; diff --git a/net/minecraft/world/entity/monster/Drowned.java b/net/minecraft/world/entity/monster/Drowned.java -index 2004595c51564d863aee65fc47541014ea184e10..3dae0020a506527e1e556945da5334de54bdabee 100644 +index ffd9e34b4d57bdafc597b2208f754c7454afd48a..6e8ae9aa0b5051b7fb303476e52ba2cc76c29c84 100644 --- a/net/minecraft/world/entity/monster/Drowned.java +++ b/net/minecraft/world/entity/monster/Drowned.java -@@ -122,6 +122,13 @@ public class Drowned extends Zombie implements RangedAttackMob { +@@ -123,6 +123,13 @@ public class Drowned extends Zombie implements RangedAttackMob { } // Purpur end - Configurable jockey options @@ -733,7 +733,7 @@ index 2004595c51564d863aee65fc47541014ea184e10..3dae0020a506527e1e556945da5334de protected void addBehaviourGoals() { this.goalSelector.addGoal(1, new Drowned.DrownedGoToWaterGoal(this, 1.0)); diff --git a/net/minecraft/world/entity/monster/ElderGuardian.java b/net/minecraft/world/entity/monster/ElderGuardian.java -index 15f037dbd9bafc8a978911dfa04c42f3c19dc7fd..27dd75a64af375ce498224bfd7ed4799ed586d9c 100644 +index 7ebc7224d3db38cc5137112d5a74999f6e23b8d5..287b6fea404d4f1f121219f92918dc2d1c0ac780 100644 --- a/net/minecraft/world/entity/monster/ElderGuardian.java +++ b/net/minecraft/world/entity/monster/ElderGuardian.java @@ -51,6 +51,13 @@ public class ElderGuardian extends Guardian { @@ -751,10 +751,10 @@ index 15f037dbd9bafc8a978911dfa04c42f3c19dc7fd..27dd75a64af375ce498224bfd7ed4799 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 0cae67d67af733b0bc6558f8cc1056b45554e3ce..10b505712791d10e9b36cc6cfffeb590c74284e5 100644 +index 002fef87101e2c98c8a091d416cb4729bd092455..73d66dffa57b31e4d772438f6d2f23cfbbcfb281 100644 --- a/net/minecraft/world/entity/monster/EnderMan.java +++ b/net/minecraft/world/entity/monster/EnderMan.java -@@ -88,7 +88,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -86,7 +86,7 @@ public class EnderMan extends Monster implements NeutralMob { public EnderMan(EntityType entityType, Level level) { super(entityType, level); @@ -763,7 +763,7 @@ index 0cae67d67af733b0bc6558f8cc1056b45554e3ce..10b505712791d10e9b36cc6cfffeb590 } // Purpur start - Ridables -@@ -285,7 +285,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -281,7 +281,7 @@ public class EnderMan extends Monster implements NeutralMob { @Override public boolean isSensitiveToWater() { @@ -773,10 +773,10 @@ index 0cae67d67af733b0bc6558f8cc1056b45554e3ce..10b505712791d10e9b36cc6cfffeb590 @Override diff --git a/net/minecraft/world/entity/monster/Endermite.java b/net/minecraft/world/entity/monster/Endermite.java -index a3095f2a5ff162d502502ad2ed0a485daba86962..c4bfd0fb0fbee4fa72e4cf17931c95831daaf73f 100644 +index 2c3e44b82b396dd8e870f548f1d18d8f4b91ad1d..4565a592face29a077d96fc0cd52bceaed52f755 100644 --- a/net/minecraft/world/entity/monster/Endermite.java +++ b/net/minecraft/world/entity/monster/Endermite.java -@@ -71,6 +71,13 @@ public class Endermite extends Monster { +@@ -72,6 +72,13 @@ public class Endermite extends Monster { } // Purpur end - Configurable entity base attributes @@ -791,10 +791,10 @@ index a3095f2a5ff162d502502ad2ed0a485daba86962..c4bfd0fb0fbee4fa72e4cf17931c9583 protected void registerGoals() { this.goalSelector.addGoal(1, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/monster/Evoker.java b/net/minecraft/world/entity/monster/Evoker.java -index b14b72f7bbf6cb65b1515c12bae47187fe1371b5..e1debcc5d859961a9d9893fa5ffbe67deea35f6d 100644 +index 4d1d746e39d136243dc620c89b29daf80dc62230..d77e3b0f36ec4a262ff375d9e2da912553a344f8 100644 --- a/net/minecraft/world/entity/monster/Evoker.java +++ b/net/minecraft/world/entity/monster/Evoker.java -@@ -75,6 +75,13 @@ public class Evoker extends SpellcasterIllager { +@@ -73,6 +73,13 @@ public class Evoker extends SpellcasterIllager { } // Purpur end - Configurable entity base attributes @@ -809,10 +809,10 @@ index b14b72f7bbf6cb65b1515c12bae47187fe1371b5..e1debcc5d859961a9d9893fa5ffbe67d protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/Ghast.java b/net/minecraft/world/entity/monster/Ghast.java -index a55d588709bbf04d4267bd991fb3be0daaba34d4..4864009a9e531d37f9c3747a042d8ea1ed6ccbf7 100644 +index 5e2ae3ada994b5fa7758a61cdf1c0e9f26c23a79..92a9ce3d7db83a631281a6ac11ccc4441e04efdc 100644 --- a/net/minecraft/world/entity/monster/Ghast.java +++ b/net/minecraft/world/entity/monster/Ghast.java -@@ -85,6 +85,13 @@ public class Ghast extends FlyingMob implements Enemy { +@@ -94,6 +94,13 @@ public class Ghast extends Mob implements Enemy { } // Purpur end - Configurable entity base attributes @@ -827,7 +827,7 @@ index a55d588709bbf04d4267bd991fb3be0daaba34d4..4864009a9e531d37f9c3747a042d8ea1 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/Giant.java b/net/minecraft/world/entity/monster/Giant.java -index 73da18c4b54e250c434fd75971ef0a8f7c8cf6a3..009b8a8b1b9aabc0aef1c12a0c0f65f9ccfcd306 100644 +index f5565d314ded2145219debc446c7ddcb93b660e9..ccc2f7906c322a5406467986565074cbddf6cbe0 100644 --- a/net/minecraft/world/entity/monster/Giant.java +++ b/net/minecraft/world/entity/monster/Giant.java @@ -62,6 +62,13 @@ public class Giant extends Monster { @@ -842,8 +842,8 @@ index 73da18c4b54e250c434fd75971ef0a8f7c8cf6a3..009b8a8b1b9aabc0aef1c12a0c0f65f9 + // Purpur end - Toggle for water sensitive mob damage + public static AttributeSupplier.Builder createAttributes() { - return Monster.createMonsterAttributes().add(Attributes.MAX_HEALTH, 100.0).add(Attributes.MOVEMENT_SPEED, 0.5).add(Attributes.ATTACK_DAMAGE, 50.0); - } + 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 2b03af6e0f378d855c42fa688d0cd2bc8480102b..9868117ecf0a3b36f81086297c639f6f274e0055 100644 --- a/net/minecraft/world/entity/monster/Guardian.java @@ -881,7 +881,7 @@ index 75cb1db5584c04e442583ab2f50a26132ed48bfb..9baec22561093d64157d93449e84c23b EntityType entityType, ServerLevelAccessor level, EntitySpawnReason spawnReason, BlockPos pos, RandomSource random ) { diff --git a/net/minecraft/world/entity/monster/Illusioner.java b/net/minecraft/world/entity/monster/Illusioner.java -index 09804a8c789bff4f40277c2697c3f9aed00c4d15..553a8f0f5b895f3d8528f10efdc918466e4f4d87 100644 +index c45786fa6b9c7834b73fa0266ad4f37dfdfb8937..b2e59058c71eb0b05670be8dcddfff073ae2d0db 100644 --- a/net/minecraft/world/entity/monster/Illusioner.java +++ b/net/minecraft/world/entity/monster/Illusioner.java @@ -84,6 +84,13 @@ public class Illusioner extends SpellcasterIllager implements RangedAttackMob { @@ -917,10 +917,10 @@ index bb1364c4a220cc93f7ac01cbaa617561de4cd2e3..da90b7dc79aa6d01e88c1250fff662ba 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 eaa5f2db1bc6b01ef6a508cc5a60ff1e252c2360..409e98d0981aa8be0d35bc5c93f7130a9ce16860 100644 +index f0351975340dec2b2bd51670f193baf44a62ae16..3e66363e0677d98b5c406fbaac2d4eaa533c6eb2 100644 --- a/net/minecraft/world/entity/monster/Phantom.java +++ b/net/minecraft/world/entity/monster/Phantom.java -@@ -140,6 +140,13 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -141,6 +141,13 @@ public class Phantom extends Mob implements Enemy { } // Purpur end - Phantoms attracted to crystals and crystals shoot phantoms @@ -935,10 +935,10 @@ index eaa5f2db1bc6b01ef6a508cc5a60ff1e252c2360..409e98d0981aa8be0d35bc5c93f7130a public boolean isFlapping() { return (this.getUniqueFlapTickOffset() + this.tickCount) % TICKS_PER_FLAP == 0; diff --git a/net/minecraft/world/entity/monster/Pillager.java b/net/minecraft/world/entity/monster/Pillager.java -index eb4fcf0e78c39a4b94b7edb733694a87e3103552..4c41e7e0a164779bf1d6765fdb750dcd60acd104 100644 +index bcc20f9642e9d20cf18bb5f8e63daa277154be1a..faaf42a029b1a0423c5e10ee3e17e4ba0e70be02 100644 --- a/net/minecraft/world/entity/monster/Pillager.java +++ b/net/minecraft/world/entity/monster/Pillager.java -@@ -88,6 +88,13 @@ public class Pillager extends AbstractIllager implements CrossbowAttackMob, Inve +@@ -89,6 +89,13 @@ public class Pillager extends AbstractIllager implements CrossbowAttackMob, Inve } // Purpur end - Configurable entity base attributes @@ -953,10 +953,10 @@ index eb4fcf0e78c39a4b94b7edb733694a87e3103552..4c41e7e0a164779bf1d6765fdb750dcd protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/Ravager.java b/net/minecraft/world/entity/monster/Ravager.java -index 568a0d17600a82109263de715f3d54fc24039452..0b6550c3abad0eb00af4f303725045a8aa3dc4b1 100644 +index 23b6d3c9746e1ee641d8b19ec50805cb271a9cc9..d75df6de50f9830efeea826d0ebdac17f56d4c4b 100644 --- a/net/minecraft/world/entity/monster/Ravager.java +++ b/net/minecraft/world/entity/monster/Ravager.java -@@ -100,6 +100,13 @@ public class Ravager extends Raider { +@@ -101,6 +101,13 @@ public class Ravager extends Raider { } // Purpur end - Configurable entity base attributes @@ -971,10 +971,10 @@ index 568a0d17600a82109263de715f3d54fc24039452..0b6550c3abad0eb00af4f303725045a8 protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/Shulker.java b/net/minecraft/world/entity/monster/Shulker.java -index 2b19edafe00be425427f47cac045bf301e3caa39..c9dab7d6b1afe8749022d99aa988782c75270561 100644 +index 069dacf455e597a4cb2efae03553479cac2a5fec..d38c6025833079a435971c66cfbb90486721ca14 100644 --- a/net/minecraft/world/entity/monster/Shulker.java +++ b/net/minecraft/world/entity/monster/Shulker.java -@@ -134,6 +134,13 @@ public class Shulker extends AbstractGolem implements Enemy { +@@ -135,6 +135,13 @@ public class Shulker extends AbstractGolem implements Enemy { } // Purpur end - Configurable entity base attributes @@ -989,7 +989,7 @@ index 2b19edafe00be425427f47cac045bf301e3caa39..c9dab7d6b1afe8749022d99aa988782c 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 ff3761507f2025fd1e652afee03a18de3508676a..af33bd8c472f7e7bfdab52558bac379166ff2253 100644 +index 6f4aaeb645d9638764c3516d2f1501661ac56170..51714029d4ea5033014dcefd25f74cc0c9a72dbd 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 { @@ -1007,10 +1007,10 @@ index ff3761507f2025fd1e652afee03a18de3508676a..af33bd8c472f7e7bfdab52558bac3791 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 ee7f885c0c33ef434107788d0c91ac1c0a355f15..fbf8818e0fd80705648f038647b718ec2a2cd1b6 100644 +index c19b76a1a0572cb52ee83769384cdb44e4cdf700..555ada78c81ce912bf8d57a9a094102804b372ef 100644 --- a/net/minecraft/world/entity/monster/Skeleton.java +++ b/net/minecraft/world/entity/monster/Skeleton.java -@@ -50,6 +50,13 @@ public class Skeleton extends AbstractSkeleton { +@@ -51,6 +51,13 @@ public class Skeleton extends AbstractSkeleton { } // Purpur end - Configurable entity base attributes @@ -1025,10 +1025,10 @@ index ee7f885c0c33ef434107788d0c91ac1c0a355f15..fbf8818e0fd80705648f038647b718ec 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 015af82ab82c3676a7b80c01b83eaf61ee28b61b..f44e9f04e083d48e4a90d8d8e8b5cc199bf9f351 100644 +index 38cdc67bd683b653eb76b1c70e5b493f08245fe6..29b500eb4c010ff83d8474f8ee5602c479243e19 100644 --- a/net/minecraft/world/entity/monster/Slime.java +++ b/net/minecraft/world/entity/monster/Slime.java -@@ -133,6 +133,13 @@ public class Slime extends Mob implements Enemy { +@@ -134,6 +134,13 @@ public class Slime extends Mob implements Enemy { } // Purpur end - Configurable entity base attributes @@ -1101,10 +1101,10 @@ index 4e300141b0c7fa967e3d0b9ef952097efeb2bef6..533801988cb4f8a916ef002a179990ca @Override diff --git a/net/minecraft/world/entity/monster/Vex.java b/net/minecraft/world/entity/monster/Vex.java -index 5378db94e633ee87864685be56c64a18ec481543..0808520f39d5ce96baad25180ead7a69922950f5 100644 +index b5e0f1a2c3ca138cfa1cc4138cf1c5e76dcb9436..193994476a78d68d2ef45f7a354648ce347b0f55 100644 --- a/net/minecraft/world/entity/monster/Vex.java +++ b/net/minecraft/world/entity/monster/Vex.java -@@ -110,6 +110,13 @@ public class Vex extends Monster implements TraceableEntity { +@@ -112,6 +112,13 @@ public class Vex extends Monster implements TraceableEntity { } // Purpur end - Configurable entity base attributes @@ -1119,10 +1119,10 @@ index 5378db94e633ee87864685be56c64a18ec481543..0808520f39d5ce96baad25180ead7a69 public boolean isFlapping() { return this.tickCount % TICKS_PER_FLAP == 0; diff --git a/net/minecraft/world/entity/monster/Vindicator.java b/net/minecraft/world/entity/monster/Vindicator.java -index 01a5357d5359394b61f2456fdee8bf3aadf0ca32..50da0e9246f50be6073e26c8fa042fe2b4eabb32 100644 +index 0abc1da5154bef4c7aa03d44f651af39b289c187..9f4d93308adc49d7ae83796a8dc43db16e7992b6 100644 --- a/net/minecraft/world/entity/monster/Vindicator.java +++ b/net/minecraft/world/entity/monster/Vindicator.java -@@ -81,6 +81,13 @@ public class Vindicator extends AbstractIllager { +@@ -82,6 +82,13 @@ public class Vindicator extends AbstractIllager { } // Purpur end - Configurable entity base attributes @@ -1173,10 +1173,10 @@ index 213530a2378411db2bc597ba7e0bb68cfdb3ebc9..ef2a7fdc8abe05b7718b71e23556258a 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 9f5db385dabb01bda033aecaebd1d9b7c9e2ed0b..7cb2bc8b126a0027216ec4afd7f6e54fe328b8be 100644 +index 5333aea53ff61eb6143138c4e44ad85977e524d5..ddc8de9a111395aa77025b809f176425be7bb30c 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 @@ -1191,10 +1191,10 @@ index 9f5db385dabb01bda033aecaebd1d9b7c9e2ed0b..7cb2bc8b126a0027216ec4afd7f6e54f 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 02073d4374580278829e680b875d596844213e78..7f9ee637f443f55ae901d1a0aebedd8f7411996d 100644 +index ede9101c44ba53c5bd67254bea6fcff7f00b5b47..51cd12a8173d9f95c6a7c2503c3e0e4d40c427c5 100644 --- a/net/minecraft/world/entity/monster/Zombie.java +++ b/net/minecraft/world/entity/monster/Zombie.java -@@ -143,6 +143,13 @@ public class Zombie extends Monster { +@@ -142,6 +142,13 @@ public class Zombie extends Monster { } // Purpur end - Configurable jockey options @@ -1209,10 +1209,10 @@ index 02073d4374580278829e680b875d596844213e78..7f9ee637f443f55ae901d1a0aebedd8f 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 6bd633390df582e0b1999f5c67cd76e2b23a04eb..c6e460c21af6145321cad527112adc15e9f30d8d 100644 +index 02b503453fb8b64cbf0b9db1e498566289c6bbe3..606fe4bd9c3359e42a025a866873e147ee16a40e 100644 --- a/net/minecraft/world/entity/monster/ZombieVillager.java +++ b/net/minecraft/world/entity/monster/ZombieVillager.java -@@ -123,6 +123,13 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { +@@ -122,6 +122,13 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { } // Purpur end - Configurable jockey options @@ -1227,10 +1227,10 @@ index 6bd633390df582e0b1999f5c67cd76e2b23a04eb..c6e460c21af6145321cad527112adc15 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 a8916a8fe5bed57e7b1f755a20e15bed544567fb..34e259b95abfc514e07584a699ecc80de0014250 100644 +index 2adee917a4275742968a2e1e8b65bce4b9ac3cc3..7406f1f589509769aed260197f7cfabc081ce37b 100644 --- a/net/minecraft/world/entity/monster/ZombifiedPiglin.java +++ b/net/minecraft/world/entity/monster/ZombifiedPiglin.java -@@ -105,6 +105,13 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { +@@ -106,6 +106,13 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { } // Purpur end - Configurable jockey options @@ -1245,10 +1245,10 @@ index a8916a8fe5bed57e7b1f755a20e15bed544567fb..34e259b95abfc514e07584a699ecc80d 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 df763444e9935b8f43ea65b3695c715993903fb8..ee2cd8bfb74dead58f77f9755f306aa7166285fd 100644 +index 298246318f5103ff416f076467d3b6bfec297c5e..ddb7532d83b46dae22798937e097a8876fcd6106 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 @@ -1263,10 +1263,10 @@ index df763444e9935b8f43ea65b3695c715993903fb8..ee2cd8bfb74dead58f77f9755f306aa7 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 8d37820522b12f2e513ca38c6ccdbb6ef3c2fc71..0059e926f09317e056f3f722c4ca775c43bc0b86 100644 +index c600c9b1ea4fe08abdce0aed30f61ef073039c7c..76d572959b3422d1691e34fec3bbeb8d5b50d715 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 +@@ -162,6 +162,13 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento } // Purpur end - Configurable entity base attributes @@ -1278,8 +1278,8 @@ index 8d37820522b12f2e513ca38c6ccdbb6ef3c2fc71..0059e926f09317e056f3f722c4ca775c + // Purpur end - Toggle for water sensitive mob damage + @Override - public void addAdditionalSaveData(CompoundTag compound) { - super.addAdditionalSaveData(compound); + protected void addAdditionalSaveData(ValueOutput output) { + super.addAdditionalSaveData(output); diff --git a/net/minecraft/world/entity/monster/piglin/PiglinBrute.java b/net/minecraft/world/entity/monster/piglin/PiglinBrute.java index f52aba35ee7e202074cda8fb4dfd6a7d9ded1f09..f4893cc54d7f144025da0057beedb3a974c80dc1 100644 --- a/net/minecraft/world/entity/monster/piglin/PiglinBrute.java @@ -1299,10 +1299,10 @@ index f52aba35ee7e202074cda8fb4dfd6a7d9ded1f09..f4893cc54d7f144025da0057beedb3a9 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 2846aca7bad55b56430738baeee9554e34da316c..654935f2994c588c8545c21d6de839711c55cdfc 100644 +index 3b78e25de462a6fc393175f7992b9a1d4d08c64b..6490b3791648f0680d44d6ca1e0d3b67df180997 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 @@ -1317,10 +1317,10 @@ index 2846aca7bad55b56430738baeee9554e34da316c..654935f2994c588c8545c21d6de83971 public Brain getBrain() { return (Brain)super.getBrain(); diff --git a/net/minecraft/world/entity/npc/WanderingTrader.java b/net/minecraft/world/entity/npc/WanderingTrader.java -index e726893a3ddf49bdfd2d190477bccf6e33de1847..7ad6a8479a0bdda570ac286220eacd0ba8642111 100644 +index 2917820bf01b1a2ca7301a7099b7b3dcd6c3ee67..f2b59a4490226168dd69ace94022cf6398d48615 100644 --- a/net/minecraft/world/entity/npc/WanderingTrader.java +++ b/net/minecraft/world/entity/npc/WanderingTrader.java -@@ -97,6 +97,13 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill +@@ -98,6 +98,13 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill } // Purpur end - Villagers follow emerald blocks diff --git a/purpur-server/minecraft-patches/unapplied-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 similarity index 72% rename from purpur-server/minecraft-patches/unapplied-features/0018-API-for-any-mob-to-burn-daylight.patch rename to purpur-server/minecraft-patches/features/0018-API-for-any-mob-to-burn-daylight.patch index 09ee6ceb8..452e113f5 100644 --- a/purpur-server/minecraft-patches/unapplied-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,10 +6,10 @@ 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 1edca56b4bf880460148d00b98225fc34bd15f17..5b0a4ef4ae5a762432dbb0def005f7505197445e 100644 +index bce2b06cd7c0b9928a6538ddcd370f2c4d84a9ae..5a6db2d02204cf98de02c30b63666692ed03c000 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java -@@ -521,6 +521,24 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -435,6 +435,24 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } // Purpur end - Add canSaveToDisk to Entity @@ -35,10 +35,10 @@ index 1edca56b4bf880460148d00b98225fc34bd15f17..5b0a4ef4ae5a762432dbb0def005f750 this.type = entityType; this.level = level; diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java -index 13a1b5dd8b1a07a584f71b1f24da28965f5e2a5d..fb42e31e812f99bf7b74c376ed47fcaee3213238 100644 +index a70fddd19b24bb25edde63e4fda4685ee6997eba..eabee40979ab8a1611b2d4eff04414f303b672f1 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java -@@ -273,6 +273,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -286,6 +286,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin 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 public int shieldBlockingDelay = this.level().paperConfig().misc.shieldBlockingDelay; // Paper - Make shield blocking delay configurable @@ -46,23 +46,23 @@ index 13a1b5dd8b1a07a584f71b1f24da28965f5e2a5d..fb42e31e812f99bf7b74c376ed47fcae // CraftBukkit end protected LivingEntity(EntityType entityType, Level level) { -@@ -768,6 +769,7 @@ public abstract class LivingEntity extends Entity implements Attackable { - this.getSleepingPos().ifPresent(pos -> compound.store("sleeping_pos", BlockPos.CODEC, pos)); - DataResult dataResult = this.brain.serializeStart(NbtOps.INSTANCE); - dataResult.resultOrPartial(LOGGER::error).ifPresent(tag -> compound.put("Brain", tag)); -+ compound.putBoolean("Purpur.ShouldBurnInDay", this.shouldBurnInDay); // Purpur - API for any mob to burn daylight +@@ -789,6 +790,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)); ++ output.putBoolean("Purpur.ShouldBurnInDay", this.shouldBurnInDay); // Purpur - API for any mob to burn daylight if (this.lastHurtByPlayer != null) { - this.lastHurtByPlayer.store(compound, "last_hurt_by_player"); - compound.putInt("last_hurt_by_player_memory_time", this.lastHurtByPlayerMemoryTime); -@@ -891,6 +893,7 @@ public abstract class LivingEntity extends Entity implements Attackable { + this.lastHurtByPlayer.store(output, "last_hurt_by_player"); + output.putInt("last_hurt_by_player_memory_time", this.lastHurtByPlayerMemoryTime); +@@ -915,6 +917,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); - compound.getCompound("Brain").ifPresent(compoundTag -> this.brain = this.makeBrain(new Dynamic<>(NbtOps.INSTANCE, compoundTag))); -+ this.shouldBurnInDay = compound.getBooleanOr("Purpur.ShouldBurnInDay", false); // Purpur - API for any mob to burn daylight - this.lastHurtByPlayer = EntityReference.read(compound, "last_hurt_by_player"); - this.lastHurtByPlayerMemoryTime = compound.getIntOr("last_hurt_by_player_memory_time", 0); - this.lastHurtByMob = EntityReference.read(compound, "last_hurt_by_mob"); -@@ -3614,6 +3617,32 @@ public abstract class LivingEntity extends Entity implements Attackable { + input.read("Brain", Codec.PASSTHROUGH).ifPresent(dynamic -> this.brain = this.makeBrain((Dynamic)dynamic)); ++ this.shouldBurnInDay = input.getBooleanOr("Purpur.ShouldBurnInDay", false); // Purpur - API for any mob to burn daylight + 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"); +@@ -3666,6 +3669,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,10 +96,10 @@ index 13a1b5dd8b1a07a584f71b1f24da28965f5e2a5d..fb42e31e812f99bf7b74c376ed47fcae protected void applyInput() { diff --git a/net/minecraft/world/entity/Mob.java b/net/minecraft/world/entity/Mob.java -index b828524d62a940f89f0c0fa926ef0423019ec212..e9344f61a943d610dfabe4918c227ddba166f17f 100644 +index e05cf29c630d43c66614012c50b9dd4ece4c44f6..b0a5f79eb2c3ea84fd37eaa653a4f2c83caeab5d 100644 --- a/net/minecraft/world/entity/Mob.java +++ b/net/minecraft/world/entity/Mob.java -@@ -1531,19 +1531,8 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -1557,19 +1557,8 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab } public boolean isSunBurnTick() { @@ -122,7 +122,7 @@ index b828524d62a940f89f0c0fa926ef0423019ec212..e9344f61a943d610dfabe4918c227ddb @Override diff --git a/net/minecraft/world/entity/monster/AbstractSkeleton.java b/net/minecraft/world/entity/monster/AbstractSkeleton.java -index 0a5de00d41c59528e9f85a7cf82363c45e24d2bc..185edd9878f5193c44b75a126e8182caade7e943 100644 +index caa018d1dd0b6e97ec9d3fa70bbffe9eb3b1edec..d69d5b575e93b4ae9a0e2b311352fd3790d464c6 100644 --- a/net/minecraft/world/entity/monster/AbstractSkeleton.java +++ b/net/minecraft/world/entity/monster/AbstractSkeleton.java @@ -64,11 +64,12 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo @@ -169,19 +169,19 @@ index 0a5de00d41c59528e9f85a7cf82363c45e24d2bc..185edd9878f5193c44b75a126e8182ca } @@ -242,14 +223,14 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo - public void readAdditionalSaveData(CompoundTag compound) { - super.readAdditionalSaveData(compound); + protected void readAdditionalSaveData(ValueInput input) { + super.readAdditionalSaveData(input); this.reassessWeaponGoal(); -- this.shouldBurnInDay = compound.getBooleanOr("Paper.ShouldBurnInDay", true); // Paper - shouldBurnInDay API -+ //this.shouldBurnInDay = compound.getBooleanOr("Paper.ShouldBurnInDay", true); // Paper - shouldBurnInDay API // Purpur - implemented in LivingEntity - API for any mob to burn daylight +- this.shouldBurnInDay = input.getBooleanOr("Paper.ShouldBurnInDay", true); // Paper - shouldBurnInDay API ++ //this.shouldBurnInDay = input.getBooleanOr("Paper.ShouldBurnInDay", true); // Paper - shouldBurnInDay API // Purpur - implemented in LivingEntity - API for any mob to burn daylight } // Paper start - shouldBurnInDay API @Override - public void addAdditionalSaveData(final net.minecraft.nbt.CompoundTag nbt) { - super.addAdditionalSaveData(nbt); -- nbt.putBoolean("Paper.ShouldBurnInDay", this.shouldBurnInDay); -+ //nbt.putBoolean("Paper.ShouldBurnInDay", this.shouldBurnInDay); // Purpur - implemented in LivingEntity - API for any mob to burn daylight + protected void addAdditionalSaveData(final net.minecraft.world.level.storage.ValueOutput output) { + super.addAdditionalSaveData(output); +- output.putBoolean("Paper.ShouldBurnInDay", this.shouldBurnInDay); ++ //output.putBoolean("Paper.ShouldBurnInDay", this.shouldBurnInDay); // Purpur - implemented in LivingEntity - API for any mob to burn daylight } // Paper end - shouldBurnInDay API @@ -207,10 +207,10 @@ index 9baec22561093d64157d93449e84c23b3f238b39..3f331215ef49c52fa3a53bcf744159d2 @Override diff --git a/net/minecraft/world/entity/monster/Phantom.java b/net/minecraft/world/entity/monster/Phantom.java -index 409e98d0981aa8be0d35bc5c93f7130a9ce16860..c2bc638b0029ac46cf388187ca74545060a54914 100644 +index 3e66363e0677d98b5c406fbaac2d4eaa533c6eb2..bfd4d7eef537c0d3688159d6db99236d6ed2f810 100644 --- a/net/minecraft/world/entity/monster/Phantom.java +++ b/net/minecraft/world/entity/monster/Phantom.java -@@ -61,6 +61,7 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -62,6 +62,7 @@ public class Phantom extends Mob implements Enemy { this.xpReward = 5; this.moveControl = new Phantom.PhantomMoveControl(this); this.lookControl = new Phantom.PhantomLookControl(this); @@ -218,7 +218,7 @@ index 409e98d0981aa8be0d35bc5c93f7130a9ce16860..c2bc638b0029ac46cf388187ca745450 } // Purpur start - Ridables -@@ -147,6 +148,16 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -148,6 +149,16 @@ public class Phantom extends Mob implements Enemy { } // Purpur end - Toggle for water sensitive mob damage @@ -235,7 +235,7 @@ index 409e98d0981aa8be0d35bc5c93f7130a9ce16860..c2bc638b0029ac46cf388187ca745450 @Override public boolean isFlapping() { return (this.getUniqueFlapTickOffset() + this.tickCount) % TICKS_PER_FLAP == 0; -@@ -262,15 +273,7 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -263,15 +274,7 @@ public class Phantom extends Mob implements Enemy { @Override public void aiStep() { @@ -252,29 +252,29 @@ index 409e98d0981aa8be0d35bc5c93f7130a9ce16860..c2bc638b0029ac46cf388187ca745450 super.aiStep(); } -@@ -294,7 +297,7 @@ public class Phantom extends FlyingMob implements Enemy { - this.setPhantomSize(compound.getIntOr("size", 0)); +@@ -309,7 +312,7 @@ public class Phantom extends Mob implements Enemy { + this.setPhantomSize(input.getIntOr("size", 0)); // Paper start - this.spawningEntity = compound.read("Paper.SpawningEntity", net.minecraft.core.UUIDUtil.CODEC).orElse(null); -- this.shouldBurnInDay = compound.getBooleanOr("Paper.ShouldBurnInDay", true); -+ //this.shouldBurnInDay = compound.getBooleanOr("Paper.ShouldBurnInDay", true); // Purpur - implemented in LivingEntity - API for any mob to burn daylight + this.spawningEntity = input.read("Paper.SpawningEntity", net.minecraft.core.UUIDUtil.CODEC).orElse(null); +- this.shouldBurnInDay = input.getBooleanOr("Paper.ShouldBurnInDay", true); ++ //this.shouldBurnInDay = input.getBooleanOr("Paper.ShouldBurnInDay", true); // Purpur - implemented in LivingEntity - API for any mob to burn daylight // Paper end } -@@ -305,7 +308,7 @@ public class Phantom extends FlyingMob implements Enemy { - compound.putInt("size", this.getPhantomSize()); +@@ -320,7 +323,7 @@ public class Phantom extends Mob implements Enemy { + output.putInt("size", this.getPhantomSize()); // Paper start - compound.storeNullable("Paper.SpawningEntity", net.minecraft.core.UUIDUtil.CODEC, this.spawningEntity); -- compound.putBoolean("Paper.ShouldBurnInDay", this.shouldBurnInDay); -+ //compound.putBoolean("Paper.ShouldBurnInDay", this.shouldBurnInDay); // Purpur - implemented in LivingEntity - API for any mob to burn daylight + output.storeNullable("Paper.SpawningEntity", net.minecraft.core.UUIDUtil.CODEC, this.spawningEntity); +- output.putBoolean("Paper.ShouldBurnInDay", this.shouldBurnInDay); ++ output.putBoolean("Paper.ShouldBurnInDay", this.shouldBurnInDay); // Purpur - implemented in LivingEntity - API for any mob to burn daylight // Paper end } diff --git a/net/minecraft/world/entity/monster/Zombie.java b/net/minecraft/world/entity/monster/Zombie.java -index 7f9ee637f443f55ae901d1a0aebedd8f7411996d..aed6db357f5b4550407a424a5b83c590044568ee 100644 +index 51cd12a8173d9f95c6a7c2503c3e0e4d40c427c5..147c030a2f8fd0d430070a36946fa42af177ea68 100644 --- a/net/minecraft/world/entity/monster/Zombie.java +++ b/net/minecraft/world/entity/monster/Zombie.java -@@ -93,11 +93,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; @@ -288,7 +288,7 @@ index 7f9ee637f443f55ae901d1a0aebedd8f7411996d..aed6db357f5b4550407a424a5b83c590 } public Zombie(Level level) { -@@ -294,29 +295,7 @@ public class Zombie extends Monster { +@@ -293,29 +294,7 @@ public class Zombie extends Monster { @Override public void aiStep() { @@ -319,7 +319,7 @@ index 7f9ee637f443f55ae901d1a0aebedd8f7411996d..aed6db357f5b4550407a424a5b83c590 super.aiStep(); } -@@ -375,6 +354,7 @@ public class Zombie extends Monster { +@@ -374,6 +353,7 @@ public class Zombie extends Monster { // CraftBukkit end } @@ -327,21 +327,21 @@ index 7f9ee637f443f55ae901d1a0aebedd8f7411996d..aed6db357f5b4550407a424a5b83c590 public boolean isSunSensitive() { return this.shouldBurnInDay; // Paper - Add more Zombie API } -@@ -512,7 +492,7 @@ public class Zombie extends Monster { - compound.putBoolean("CanBreakDoors", this.canBreakDoors()); - compound.putInt("InWaterTime", this.isInWater() ? this.inWaterTime : -1); - compound.putInt("DrownedConversionTime", this.isUnderWaterConverting() ? this.conversionTime : -1); -- compound.putBoolean("Paper.ShouldBurnInDay", this.shouldBurnInDay); // Paper - Add more Zombie API -+ //compound.putBoolean("Paper.ShouldBurnInDay", this.shouldBurnInDay); // Paper - Add more Zombie API // Purpur - implemented in LivingEntity - API for any mob to burn daylight +@@ -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); +- output.putBoolean("Paper.ShouldBurnInDay", this.shouldBurnInDay); // Paper - Add more Zombie API ++ //output.putBoolean("Paper.ShouldBurnInDay", this.shouldBurnInDay); // Paper - Add more Zombie API // Purpur - implemented in LivingEntity - API for any mob to burn daylight } @Override -@@ -527,7 +507,7 @@ public class Zombie extends Monster { +@@ -526,7 +506,7 @@ public class Zombie extends Monster { } else { this.getEntityData().set(DATA_DROWNED_CONVERSION_ID, false); } -- this.shouldBurnInDay = compound.getBooleanOr("Paper.ShouldBurnInDay", true); // Paper - Add more Zombie API -+ //this.shouldBurnInDay = compound.getBooleanOr("Paper.ShouldBurnInDay", true); // Paper - Add more Zombie API // Purpur - implemented in LivingEntity - API for any mob to burn daylight +- this.shouldBurnInDay = input.getBooleanOr("Paper.ShouldBurnInDay", true); // Paper - Add more Zombie API ++ //this.shouldBurnInDay = input.getBooleanOr("Paper.ShouldBurnInDay", true); // Paper - Add more Zombie API // Purpur - implemented in LivingEntity - API for any mob to burn daylight } @Override diff --git a/purpur-server/minecraft-patches/unapplied-features/0019-Cows-naturally-aggressive-to-players-chance.patch b/purpur-server/minecraft-patches/features/0019-Cows-naturally-aggressive-to-players-chance.patch similarity index 82% rename from purpur-server/minecraft-patches/unapplied-features/0019-Cows-naturally-aggressive-to-players-chance.patch rename to purpur-server/minecraft-patches/features/0019-Cows-naturally-aggressive-to-players-chance.patch index 80aac9d45..b22e0ee04 100644 --- a/purpur-server/minecraft-patches/unapplied-features/0019-Cows-naturally-aggressive-to-players-chance.patch +++ b/purpur-server/minecraft-patches/features/0019-Cows-naturally-aggressive-to-players-chance.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Cows naturally aggressive to players chance diff --git a/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java b/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java -index 46022a0aabc9c319deeb75913d356eeb74f1a12c..9952eed6a8ac31c757d5c27e043b85d7a949b481 100644 +index bead2f6800bdc404228500c12caf326559fa47de..e6ef56d94e29a6629c9b672ed4ac4ef29ad6a286 100644 --- a/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java +++ b/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java -@@ -126,7 +126,7 @@ public class DefaultAttributes { +@@ -128,7 +128,7 @@ public class DefaultAttributes { .put(EntityType.IRON_GOLEM, IronGolem.createAttributes().build()) .put(EntityType.LLAMA, Llama.createAttributes().build()) .put(EntityType.MAGMA_CUBE, MagmaCube.createAttributes().build()) @@ -18,11 +18,11 @@ index 46022a0aabc9c319deeb75913d356eeb74f1a12c..9952eed6a8ac31c757d5c27e043b85d7 .put(EntityType.OCELOT, Ocelot.createAttributes().build()) .put(EntityType.PANDA, Panda.createAttributes().build()) diff --git a/net/minecraft/world/entity/animal/Cow.java b/net/minecraft/world/entity/animal/Cow.java -index 4bc6d0eb56b4674e2ac0f13010521314a95e0096..731f27cf8687ffa95c0df5601a4465b5174fe248 100644 +index d584ffe3cc8dfb5fd4ce352b1da18af6a143d575..09ee10a17e15431a2937cf753e670dc000a2e36f 100644 --- a/net/minecraft/world/entity/animal/Cow.java +++ b/net/minecraft/world/entity/animal/Cow.java -@@ -22,6 +22,8 @@ import net.minecraft.world.level.Level; - import net.minecraft.world.level.ServerLevelAccessor; +@@ -23,6 +23,8 @@ import net.minecraft.world.level.storage.ValueInput; + import net.minecraft.world.level.storage.ValueOutput; public class Cow extends AbstractCow { + private boolean isNaturallyAggressiveToPlayers; // Purpur - Cows naturally aggressive to players chance @@ -30,7 +30,7 @@ index 4bc6d0eb56b4674e2ac0f13010521314a95e0096..731f27cf8687ffa95c0df5601a4465b5 private static final EntityDataAccessor> DATA_VARIANT_ID = SynchedEntityData.defineId(Cow.class, EntityDataSerializers.COW_VARIANT); public Cow(EntityType entityType, Level level) { -@@ -48,8 +50,9 @@ public class Cow extends AbstractCow { +@@ -49,8 +51,9 @@ public class Cow extends AbstractCow { // Purpur start - Configurable entity base attributes @Override public void initAttributes() { @@ -42,7 +42,7 @@ index 4bc6d0eb56b4674e2ac0f13010521314a95e0096..731f27cf8687ffa95c0df5601a4465b5 } // Purpur end - Configurable entity base attributes -@@ -67,6 +70,13 @@ public class Cow extends AbstractCow { +@@ -68,6 +71,13 @@ public class Cow extends AbstractCow { } // Purpur end - Toggle for water sensitive mob damage @@ -56,8 +56,8 @@ index 4bc6d0eb56b4674e2ac0f13010521314a95e0096..731f27cf8687ffa95c0df5601a4465b5 @Override protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); -@@ -79,6 +89,12 @@ public class Cow extends AbstractCow { - VariantUtils.writeVariant(compound, this.getVariant()); +@@ -80,6 +90,12 @@ public class Cow extends AbstractCow { + VariantUtils.writeVariant(output, this.getVariant()); } + // Purpur start - Cows naturally aggressive to players chance @@ -67,13 +67,13 @@ index 4bc6d0eb56b4674e2ac0f13010521314a95e0096..731f27cf8687ffa95c0df5601a4465b5 + // Purpur end - Cows naturally aggressive to players chance + @Override - public void readAdditionalSaveData(CompoundTag compound) { - super.readAdditionalSaveData(compound); -@@ -100,6 +116,7 @@ public class Cow extends AbstractCow { + protected void readAdditionalSaveData(ValueInput input) { + super.readAdditionalSaveData(input); +@@ -101,6 +117,7 @@ public class Cow extends AbstractCow { public SpawnGroupData finalizeSpawn( ServerLevelAccessor level, DifficultyInstance difficulty, EntitySpawnReason spawnReason, @Nullable SpawnGroupData spawnGroupData ) { + this.isNaturallyAggressiveToPlayers = level.getLevel().purpurConfig.cowNaturallyAggressiveToPlayersChance > 0.0D && random.nextDouble() <= level.getLevel().purpurConfig.cowNaturallyAggressiveToPlayersChance; // Purpur - Cows naturally aggressive to players chance - CowVariants.selectVariantToSpawn(this.random, this.registryAccess(), SpawnContext.create(level, this.blockPosition())).ifPresent(this::setVariant); + VariantUtils.selectVariantToSpawn(SpawnContext.create(level, this.blockPosition()), Registries.COW_VARIANT).ifPresent(this::setVariant); return super.finalizeSpawn(level, difficulty, spawnReason, spawnGroupData); } diff --git a/purpur-server/minecraft-patches/unapplied-features/0020-Mobs-always-drop-experience.patch b/purpur-server/minecraft-patches/features/0020-Mobs-always-drop-experience.patch similarity index 85% rename from purpur-server/minecraft-patches/unapplied-features/0020-Mobs-always-drop-experience.patch rename to purpur-server/minecraft-patches/features/0020-Mobs-always-drop-experience.patch index cae877335..59641be0f 100644 --- a/purpur-server/minecraft-patches/unapplied-features/0020-Mobs-always-drop-experience.patch +++ b/purpur-server/minecraft-patches/features/0020-Mobs-always-drop-experience.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Mobs always drop experience diff --git a/net/minecraft/world/entity/GlowSquid.java b/net/minecraft/world/entity/GlowSquid.java -index fe6f29c5e663daea017b19aaafaddda40b4c22bb..745f73e1f80d9c433630e31769b404eeeb63cb88 100644 +index 1c446cec71aa163374ab9832c961a6b4c3fc534b..86a694b94045b47f6e98c480645f75738b8a052c 100644 --- a/net/minecraft/world/entity/GlowSquid.java +++ b/net/minecraft/world/entity/GlowSquid.java -@@ -60,6 +60,13 @@ public class GlowSquid extends Squid { +@@ -61,6 +61,13 @@ public class GlowSquid extends Squid { } // Purpur end - Toggle for water sensitive mob damage @@ -23,10 +23,10 @@ index fe6f29c5e663daea017b19aaafaddda40b4c22bb..745f73e1f80d9c433630e31769b404ee 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 4d44b35ee34eb256b9aff9d74b1cb9ae1ac9503f..46aaba94e7b6bde26ad3b61fcf5e0aa07fed7987 100644 +index 2d2b44f2617732bcdfd969454f80b9ad4af470a1..4e046158a0782a1fd08c6b4d8d332b6eb5bce7aa 100644 --- a/net/minecraft/world/entity/ambient/Bat.java +++ b/net/minecraft/world/entity/ambient/Bat.java -@@ -117,6 +117,13 @@ public class Bat extends AmbientCreature { +@@ -118,6 +118,13 @@ public class Bat extends AmbientCreature { } // Purpur end - Toggle for water sensitive mob damage @@ -41,10 +41,10 @@ index 4d44b35ee34eb256b9aff9d74b1cb9ae1ac9503f..46aaba94e7b6bde26ad3b61fcf5e0aa0 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 9a9b0d1ca7b30916e1ac3938924ced8d77dafdaf..e9dfff7e3726cd2229f89bb39fa1ca4815d99a6d 100644 +index 31a9451417272ec5bb6a6cbc3ec308f6c5cd057f..ca5651f15552f91fba650747d28a75c00fa11442 100644 --- a/net/minecraft/world/entity/animal/Bee.java +++ b/net/minecraft/world/entity/animal/Bee.java -@@ -494,6 +494,13 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -495,6 +495,13 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { } // Purpur end - Toggle for water sensitive mob damage @@ -59,10 +59,10 @@ index 9a9b0d1ca7b30916e1ac3938924ced8d77dafdaf..e9dfff7e3726cd2229f89bb39fa1ca48 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 1d758dd3ee0834fcf9ebf737bc7a016b881145e5..db536a60f3f370d163e4429865634b449f4c0cfb 100644 +index 41f303078b2e1f0460215fbfe27ff06fd5783c35..09d518a59fe93afbeacb2d41a0c9d287f4a74443 100644 --- a/net/minecraft/world/entity/animal/Cat.java +++ b/net/minecraft/world/entity/animal/Cat.java -@@ -138,6 +138,13 @@ public class Cat extends TamableAnimal { +@@ -139,6 +139,13 @@ public class Cat extends TamableAnimal { } // Purpur end - Toggle for water sensitive mob damage @@ -77,10 +77,10 @@ index 1d758dd3ee0834fcf9ebf737bc7a016b881145e5..db536a60f3f370d163e4429865634b44 protected void registerGoals() { this.temptGoal = new Cat.CatTemptGoal(this, 0.6, stack -> stack.is(ItemTags.CAT_FOOD), true); diff --git a/net/minecraft/world/entity/animal/Chicken.java b/net/minecraft/world/entity/animal/Chicken.java -index 3faa8ac614b6d2f8f90c7092900aa24aa976c0ac..75cccc11019c5c6587d441e2c759d351dcb56153 100644 +index 58f7690a05febac5c57ba7ea2aff93b7d94a4291..eaf913805195a580e3aa816dc28053abb9bdc246 100644 --- a/net/minecraft/world/entity/animal/Chicken.java +++ b/net/minecraft/world/entity/animal/Chicken.java -@@ -115,6 +115,13 @@ public class Chicken extends Animal { +@@ -116,6 +116,13 @@ public class Chicken extends Animal { } // Purpur end - Toggle for water sensitive mob damage @@ -113,10 +113,10 @@ index 6128ed595cb97cc11c1a0e1e1673b3af8e428fb8..7e08573cba6efcd78fcce37bccc2923f public ItemStack getBucketItemStack() { return new ItemStack(Items.COD_BUCKET); diff --git a/net/minecraft/world/entity/animal/Cow.java b/net/minecraft/world/entity/animal/Cow.java -index 731f27cf8687ffa95c0df5601a4465b5174fe248..6b504c2fdde020e086b0d01139cb56d65b7f9ad1 100644 +index 09ee10a17e15431a2937cf753e670dc000a2e36f..b2fa170b14bc3037e5c143d320d0a1ef24738f1c 100644 --- a/net/minecraft/world/entity/animal/Cow.java +++ b/net/minecraft/world/entity/animal/Cow.java -@@ -70,6 +70,13 @@ public class Cow extends AbstractCow { +@@ -71,6 +71,13 @@ public class Cow extends AbstractCow { } // Purpur end - Toggle for water sensitive mob damage @@ -131,10 +131,10 @@ index 731f27cf8687ffa95c0df5601a4465b5174fe248..6b504c2fdde020e086b0d01139cb56d6 protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/animal/Dolphin.java b/net/minecraft/world/entity/animal/Dolphin.java -index 4f3777ee9cf7a67d5e2f489dbcf40ec2a1ed13cd..87ba416479df56bad5d13c01e96e92e45b7802a3 100644 +index cff87e0047167751d9b4672a0caae642f15426a9..23696a5e2871ea07f34d4b4f6a20e2896ac3f5bd 100644 --- a/net/minecraft/world/entity/animal/Dolphin.java +++ b/net/minecraft/world/entity/animal/Dolphin.java -@@ -165,6 +165,13 @@ public class Dolphin extends AgeableWaterCreature { +@@ -166,6 +166,13 @@ public class Dolphin extends AgeableWaterCreature { } // Purpur end - Toggle for water sensitive mob damage @@ -149,10 +149,10 @@ index 4f3777ee9cf7a67d5e2f489dbcf40ec2a1ed13cd..87ba416479df56bad5d13c01e96e92e4 @Override public SpawnGroupData finalizeSpawn( diff --git a/net/minecraft/world/entity/animal/Fox.java b/net/minecraft/world/entity/animal/Fox.java -index 98cb5c75bb4397914271f81aeace045105a9572e..fcda990a5575288b39f6aa16b0ec48d2a57542e9 100644 +index 23e119ce82c3a0541b40249b20f133e39fac6858..8964bb5098c0dc36741af3656af6bc0b5b463abe 100644 --- a/net/minecraft/world/entity/animal/Fox.java +++ b/net/minecraft/world/entity/animal/Fox.java -@@ -201,6 +201,13 @@ public class Fox extends Animal { +@@ -202,6 +202,13 @@ public class Fox extends Animal { } // Purpur end - Toggle for water sensitive mob damage @@ -167,10 +167,10 @@ index 98cb5c75bb4397914271f81aeace045105a9572e..fcda990a5575288b39f6aa16b0ec48d2 protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); diff --git a/net/minecraft/world/entity/animal/IronGolem.java b/net/minecraft/world/entity/animal/IronGolem.java -index 498302a20b783f2208417b56716f4fc4f18bc333..21ed6bfcba6ea58663dc8e932814c1ac084d0402 100644 +index 006df1758bdaeb55a7db938afd9e00c575a62e60..8885ab56eb72c0106ef57359ca11f70c012fc348 100644 --- a/net/minecraft/world/entity/animal/IronGolem.java +++ b/net/minecraft/world/entity/animal/IronGolem.java -@@ -106,6 +106,13 @@ public class IronGolem extends AbstractGolem implements NeutralMob { +@@ -107,6 +107,13 @@ public class IronGolem extends AbstractGolem implements NeutralMob { } // Purpur end - Toggle for water sensitive mob damage @@ -185,10 +185,10 @@ index 498302a20b783f2208417b56716f4fc4f18bc333..21ed6bfcba6ea58663dc8e932814c1ac protected void registerGoals() { if (this.level().purpurConfig.ironGolemPoppyCalm) this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.ReceiveFlower(this)); // Purpur - Iron golem calm anger options diff --git a/net/minecraft/world/entity/animal/MushroomCow.java b/net/minecraft/world/entity/animal/MushroomCow.java -index 114d893f74dfb4422380cad649b7f3708c29c1c3..07c89507b13d44dfc7903570e0d8c834e91866b7 100644 +index 298cd49b28b5efb0f6401c19fc083a3714cb9aeb..5750f87944ea84d59674d1df7f5d48121d987a54 100644 --- a/net/minecraft/world/entity/animal/MushroomCow.java +++ b/net/minecraft/world/entity/animal/MushroomCow.java -@@ -99,6 +99,13 @@ public class MushroomCow extends AbstractCow implements Shearable { +@@ -100,6 +100,13 @@ public class MushroomCow extends AbstractCow implements Shearable { } // Purpur end - Toggle for water sensitive mob damage @@ -203,10 +203,10 @@ index 114d893f74dfb4422380cad649b7f3708c29c1c3..07c89507b13d44dfc7903570e0d8c834 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 47429374bee47c98216a0eb6dbe65df5fcc0e117..dcfa57bc691e997969bc9fef1983088322e4e4e4 100644 +index d92af280d85856d57f3031dfaf7c644cbfc18f15..4c20569ec5c504c582575851ab1d74248289b1c0 100644 --- a/net/minecraft/world/entity/animal/Ocelot.java +++ b/net/minecraft/world/entity/animal/Ocelot.java -@@ -102,6 +102,13 @@ public class Ocelot extends Animal { +@@ -103,6 +103,13 @@ public class Ocelot extends Animal { } // Purpur end - Toggle for water sensitive mob damage @@ -221,10 +221,10 @@ index 47429374bee47c98216a0eb6dbe65df5fcc0e117..dcfa57bc691e997969bc9fef19830883 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 85929b3f4503033d17ec7fd42746c5f071a3fd6f..99d99d59ec0eb13dc40bc88bd70ad884bb9e2859 100644 +index 4678f432b6a8f74bbd121aee41f1b093888946f7..02bfa88568e635770675ea9173f2cf3ca21457fa 100644 --- a/net/minecraft/world/entity/animal/Panda.java +++ b/net/minecraft/world/entity/animal/Panda.java -@@ -155,6 +155,13 @@ public class Panda extends Animal { +@@ -156,6 +156,13 @@ public class Panda extends Animal { } // Purpur end - Toggle for water sensitive mob damage @@ -239,10 +239,10 @@ index 85929b3f4503033d17ec7fd42746c5f071a3fd6f..99d99d59ec0eb13dc40bc88bd70ad884 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 c1d4bcbc3bad5f2fcaecd4007db7318a07a63324..1b8350a09a9f2a708c8cd1b0669828912f1e4214 100644 +index 92f43418e5b21eb2a323a12649a96e0f62764618..dddf3a2e372bd0d483c1da01d36fe59b17b3d4e2 100644 --- a/net/minecraft/world/entity/animal/Parrot.java +++ b/net/minecraft/world/entity/animal/Parrot.java -@@ -213,6 +213,13 @@ public class Parrot extends ShoulderRidingEntity implements FlyingAnimal { +@@ -215,6 +215,13 @@ public class Parrot extends ShoulderRidingEntity implements FlyingAnimal { } // Purpur end - Toggle for water sensitive mob damage @@ -257,10 +257,10 @@ index c1d4bcbc3bad5f2fcaecd4007db7318a07a63324..1b8350a09a9f2a708c8cd1b066982891 @Override public SpawnGroupData finalizeSpawn( diff --git a/net/minecraft/world/entity/animal/Pig.java b/net/minecraft/world/entity/animal/Pig.java -index c2718006f6a47dda0655818181881bcdcfef34dc..5bc370d45fc6e0a37cc77ac1b36e0caad959741c 100644 +index 6f318222011e3bc57c4f0b92c0fba1f410a1d65e..adbbe938c14d14a628d9963acec57c32661957cd 100644 --- a/net/minecraft/world/entity/animal/Pig.java +++ b/net/minecraft/world/entity/animal/Pig.java -@@ -104,6 +104,13 @@ public class Pig extends Animal implements ItemSteerable { +@@ -105,6 +105,13 @@ public class Pig extends Animal implements ItemSteerable { } // Purpur end - Toggle for water sensitive mob damage @@ -275,10 +275,10 @@ index c2718006f6a47dda0655818181881bcdcfef34dc..5bc370d45fc6e0a37cc77ac1b36e0caa protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/animal/PolarBear.java b/net/minecraft/world/entity/animal/PolarBear.java -index f9d34a8242043ba61dcebb669754d9da0480eb13..ab08e5e589dac3341c006876378903f7cf1db25f 100644 +index a800acb671a18287f1407bd293a433f1fe039ce5..e0b51b482607ec5a9f5b4d13d918d79b2f52f9c0 100644 --- a/net/minecraft/world/entity/animal/PolarBear.java +++ b/net/minecraft/world/entity/animal/PolarBear.java -@@ -138,6 +138,13 @@ public class PolarBear extends Animal implements NeutralMob { +@@ -139,6 +139,13 @@ public class PolarBear extends Animal implements NeutralMob { } // Purpur end - Toggle for water sensitive mob damage @@ -293,10 +293,10 @@ index f9d34a8242043ba61dcebb669754d9da0480eb13..ab08e5e589dac3341c006876378903f7 @Override public AgeableMob getBreedOffspring(ServerLevel level, AgeableMob otherParent) { diff --git a/net/minecraft/world/entity/animal/Pufferfish.java b/net/minecraft/world/entity/animal/Pufferfish.java -index 09977f4ce3545f076be26d173f40fc261fe3c515..3b815f3ad9068eb2bdf93eac1c1aff38dffdb850 100644 +index a9219906038a24831b3d1e6851af4225b60616c3..685176ce37538cbbc614401db568acdb0ad264bb 100644 --- a/net/minecraft/world/entity/animal/Pufferfish.java +++ b/net/minecraft/world/entity/animal/Pufferfish.java -@@ -72,6 +72,13 @@ public class Pufferfish extends AbstractFish { +@@ -73,6 +73,13 @@ public class Pufferfish extends AbstractFish { } // Purpur end - Toggle for water sensitive mob damage @@ -311,10 +311,10 @@ index 09977f4ce3545f076be26d173f40fc261fe3c515..3b815f3ad9068eb2bdf93eac1c1aff38 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 de2ffef11b50f3bde03785f6cb13c97c437288e5..38e2698c5084f0c14c7fde5de542ed61a7cb7f1d 100644 +index dcbbe3406cf481e2e1d5c4cc6baaa5ac564b1ad1..1af1b33702296f9aa74c33436ea2904c5e5ae43d 100644 --- a/net/minecraft/world/entity/animal/Rabbit.java +++ b/net/minecraft/world/entity/animal/Rabbit.java -@@ -166,6 +166,13 @@ public class Rabbit extends Animal { +@@ -167,6 +167,13 @@ public class Rabbit extends Animal { } // Purpur end - Toggle for water sensitive mob damage @@ -329,10 +329,10 @@ index de2ffef11b50f3bde03785f6cb13c97c437288e5..38e2698c5084f0c14c7fde5de542ed61 public void registerGoals() { this.goalSelector.addGoal(1, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/animal/Salmon.java b/net/minecraft/world/entity/animal/Salmon.java -index 78f83edd809a72bf5a2f908d8d5e3b1755541a29..25811130990e680174a0e930a6d066ad2d580f60 100644 +index 3c517936aee31fcf246787c033688870a2349e55..d2679beaa3be6de36227c5b66609e0df393c4376 100644 --- a/net/minecraft/world/entity/animal/Salmon.java +++ b/net/minecraft/world/entity/animal/Salmon.java -@@ -64,6 +64,13 @@ public class Salmon extends AbstractSchoolingFish { +@@ -65,6 +65,13 @@ public class Salmon extends AbstractSchoolingFish { } // Purpur end - Toggle for water sensitive mob damage @@ -347,10 +347,10 @@ index 78f83edd809a72bf5a2f908d8d5e3b1755541a29..25811130990e680174a0e930a6d066ad public int getMaxSchoolSize() { return 5; diff --git a/net/minecraft/world/entity/animal/SnowGolem.java b/net/minecraft/world/entity/animal/SnowGolem.java -index 2af4ba00c9f48d3ab9063eda8abb3d15c1bb0929..ed7492af66a2ad678fe7a19f779ab7c4fb3dd8ae 100644 +index 8917b3d2d75dc1a0ddf1b6dd64267f69506e80dc..8984a4fc0aae9fd72bc3f7222003c7593810ab77 100644 --- a/net/minecraft/world/entity/animal/SnowGolem.java +++ b/net/minecraft/world/entity/animal/SnowGolem.java -@@ -87,6 +87,13 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM +@@ -88,6 +88,13 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM } // Purpur end - Configurable entity base attributes @@ -383,10 +383,10 @@ index 2108cbddc9a880347ff36fc4ce8b56e8215b9eac..8371f3892e50150db018f0b265986ffa protected void registerGoals() { this.goalSelector.addGoal(0, new Squid.SquidRandomMovementGoal(this)); diff --git a/net/minecraft/world/entity/animal/TropicalFish.java b/net/minecraft/world/entity/animal/TropicalFish.java -index 70afdcbd9d12f323ababde628e1422d1a1b82210..f3c7e8b244eb7ba3d99cc0d29e388bab8e743351 100644 +index 4510798913f94474b16ab6cbfa32dc0fdf0a226a..8d1fa86c6f4881c05f11fa80018b8de7f4920006 100644 --- a/net/minecraft/world/entity/animal/TropicalFish.java +++ b/net/minecraft/world/entity/animal/TropicalFish.java -@@ -102,6 +102,13 @@ public class TropicalFish extends AbstractSchoolingFish { +@@ -103,6 +103,13 @@ public class TropicalFish extends AbstractSchoolingFish { } // Purpur end - Toggle for water sensitive mob damage @@ -401,10 +401,10 @@ index 70afdcbd9d12f323ababde628e1422d1a1b82210..f3c7e8b244eb7ba3d99cc0d29e388bab 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 f99c135a1b99a52c72388cdcc6c46933eb7ba75b..c84f63f064a7769761f75cdedaceacde858b9b4e 100644 +index 3c2ded73af16360474fb0410456e94746393ca0e..9bdc1f10e3b40672449ad166f130ecabdacc75d3 100644 --- a/net/minecraft/world/entity/animal/Turtle.java +++ b/net/minecraft/world/entity/animal/Turtle.java -@@ -124,6 +124,13 @@ public class Turtle extends Animal { +@@ -125,6 +125,13 @@ public class Turtle extends Animal { } // Purpur end - Toggle for water sensitive mob damage @@ -419,10 +419,10 @@ index f99c135a1b99a52c72388cdcc6c46933eb7ba75b..c84f63f064a7769761f75cdedaceacde this.homePos = homePos; } diff --git a/net/minecraft/world/entity/animal/axolotl/Axolotl.java b/net/minecraft/world/entity/animal/axolotl/Axolotl.java -index da48db578931eb04ba7f2f1fbf26b6fb5bea617a..c5aac98efa518696381b4018b3504ebb323bb6b4 100644 +index f364117decd00f00ae0dc729addb5a35008b6ca5..05070562ee7ea23d4e2fa602466f097827ffa35b 100644 --- a/net/minecraft/world/entity/animal/axolotl/Axolotl.java +++ b/net/minecraft/world/entity/animal/axolotl/Axolotl.java -@@ -159,6 +159,13 @@ public class Axolotl extends Animal implements Bucketable { +@@ -161,6 +161,13 @@ public class Axolotl extends Animal implements Bucketable { } // Purpur end - Toggle for water sensitive mob damage @@ -437,10 +437,10 @@ index da48db578931eb04ba7f2f1fbf26b6fb5bea617a..c5aac98efa518696381b4018b3504ebb public float getWalkTargetValue(BlockPos pos, LevelReader level) { return 0.0F; diff --git a/net/minecraft/world/entity/animal/goat/Goat.java b/net/minecraft/world/entity/animal/goat/Goat.java -index 47de7e4710234676358378fb5fa9a6b034662e42..5eb656a33cb6ca8a93125c27cd7db175d35b80c3 100644 +index 952d9f5c2bb2e869df475a78b04be10e7541829e..386591ff45c45146b75d44071f54c2789db15a21 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 @@ -473,10 +473,10 @@ index 9b17b1acf63fddb5f5b6cdf95283ae8f619a8120..0783d41a6c4622b03d9d368c1af949af public SoundEvent getAmbientSound() { return SoundEvents.DONKEY_AMBIENT; diff --git a/net/minecraft/world/entity/animal/horse/Horse.java b/net/minecraft/world/entity/animal/horse/Horse.java -index 8754c3d6fd06bd2c834fe06e238afa330b24e547..206f911d1184a22f401d217f713495e6e85263be 100644 +index 2928159447a87ea8cc945e73e2e81ad1dbe13680..f1080a40f759b30b921b88b4f6edd35f4795406f 100644 --- a/net/minecraft/world/entity/animal/horse/Horse.java +++ b/net/minecraft/world/entity/animal/horse/Horse.java -@@ -84,6 +84,13 @@ public class Horse extends AbstractHorse { +@@ -85,6 +85,13 @@ public class Horse extends AbstractHorse { } // Purpur end - Toggle for water sensitive mob damage @@ -491,10 +491,10 @@ index 8754c3d6fd06bd2c834fe06e238afa330b24e547..206f911d1184a22f401d217f713495e6 protected void randomizeAttributes(RandomSource random) { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(generateMaxHealth(random::nextInt)); diff --git a/net/minecraft/world/entity/animal/horse/Llama.java b/net/minecraft/world/entity/animal/horse/Llama.java -index 2e776404e65c5dc6040d00a1ed8b5ce0df7badc0..e300a1284fd98791871ba1780bb7352cd848766a 100644 +index 017482c8818a854b23237e27e3304498d800569d..1bef43f42aee02a0a00556318607072ce9814860 100644 --- a/net/minecraft/world/entity/animal/horse/Llama.java +++ b/net/minecraft/world/entity/animal/horse/Llama.java -@@ -160,6 +160,13 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob { +@@ -161,6 +161,13 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob { } // Purpur end - Toggle for water sensitive mob damage @@ -527,10 +527,10 @@ index 14a17d4b33b276f28e45ce06de06793a73a50916..6e0b1c83a6a03d12296e0e3b2c805b64 public SoundEvent getAmbientSound() { return SoundEvents.MULE_AMBIENT; diff --git a/net/minecraft/world/entity/animal/horse/SkeletonHorse.java b/net/minecraft/world/entity/animal/horse/SkeletonHorse.java -index f1a131b9fe4fce78cf34e04eefc886a844a50e72..b02ca00ff18484947aa2f4ff90ab9dda2196a679 100644 +index cff709a28830a842a499f7dfe3b8bc0b703c9af4..f6ab6ecc10486694d77905239a82bda4dec94936 100644 --- a/net/minecraft/world/entity/animal/horse/SkeletonHorse.java +++ b/net/minecraft/world/entity/animal/horse/SkeletonHorse.java -@@ -79,6 +79,13 @@ public class SkeletonHorse extends AbstractHorse { +@@ -80,6 +80,13 @@ public class SkeletonHorse extends AbstractHorse { } // Purpur end - Toggle for water sensitive mob damage @@ -545,10 +545,10 @@ index f1a131b9fe4fce78cf34e04eefc886a844a50e72..b02ca00ff18484947aa2f4ff90ab9dda return createBaseHorseAttributes().add(Attributes.MAX_HEALTH, 15.0).add(Attributes.MOVEMENT_SPEED, 0.2F); } diff --git a/net/minecraft/world/entity/animal/horse/TraderLlama.java b/net/minecraft/world/entity/animal/horse/TraderLlama.java -index 4cd4bfd57285808f4bda7e7dd2ddeda36dd13af0..6c6cc0261123ba6a78c8f509715c738d629de253 100644 +index 81e902ba31b55722f4d257e918b56fa654083916..a8540e491161d82a6b72262e4414f8bb16705d47 100644 --- a/net/minecraft/world/entity/animal/horse/TraderLlama.java +++ b/net/minecraft/world/entity/animal/horse/TraderLlama.java -@@ -83,6 +83,13 @@ public class TraderLlama extends Llama { +@@ -84,6 +84,13 @@ public class TraderLlama extends Llama { } // Purpur end - Toggle for water sensitive mob damage @@ -581,10 +581,10 @@ index e78fac0a5e37d53afbc200f015adab60b3bfc9da..e59172ea2fafbab673dc3e9bdc25055f 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 1ecfda9a5222d7c175108edbbff552ea036e0321..c53ab665a0c87d342adbe395c87e15a3f5f49708 100644 +index 8394453415a0d098de6176662f97df2174a83697..500c87f5f7b2eda637103125d6e541f7c9fb385f 100644 --- a/net/minecraft/world/entity/animal/sheep/Sheep.java +++ b/net/minecraft/world/entity/animal/sheep/Sheep.java -@@ -123,6 +123,13 @@ public class Sheep extends Animal implements Shearable { +@@ -101,6 +101,13 @@ public class Sheep extends Animal implements Shearable { } // Purpur end - Toggle for water sensitive mob damage @@ -599,10 +599,10 @@ index 1ecfda9a5222d7c175108edbbff552ea036e0321..c53ab665a0c87d342adbe395c87e15a3 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 243e848a6f4eaa2a72f02a1f056f20d9de23058f..936ee9e80239ad965be75ceeb38d5248243e9c4e 100644 +index d492c6bcbc45e312a5ee2d3567a26853b514d027..7e7cb9db1c84bdb173b444bec90663a93fb3b549 100644 --- a/net/minecraft/world/entity/animal/wolf/Wolf.java +++ b/net/minecraft/world/entity/animal/wolf/Wolf.java -@@ -231,6 +231,13 @@ public class Wolf extends TamableAnimal implements NeutralMob { +@@ -230,6 +230,13 @@ public class Wolf extends TamableAnimal implements NeutralMob { } // Purpur end - Toggle for water sensitive mob damage @@ -617,10 +617,10 @@ index 243e848a6f4eaa2a72f02a1f056f20d9de23058f..936ee9e80239ad965be75ceeb38d5248 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 5862384e096d0a97a9a92a921f704e441243e38a..bbcb03548052b28bd622d7d8ce161ccaed1ed386 100644 +index d4e4aa98e2259aa7f5dbce1585257a4e24b4782f..0613d80561f50e32dc4d1c471521f001659d017d 100644 --- a/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/net/minecraft/world/entity/boss/wither/WitherBoss.java -@@ -227,6 +227,13 @@ public class WitherBoss extends Monster implements RangedAttackMob { +@@ -228,6 +228,13 @@ public class WitherBoss extends Monster implements RangedAttackMob { } // Purpur end - Toggle for water sensitive mob damage @@ -671,10 +671,10 @@ index 420fe0d01d0b173a6a541f77e1aaca3f3bb565e7..7eca4b751d900c6d6ee34993c3e23681 public boolean doHurtTarget(ServerLevel level, Entity source) { if (super.doHurtTarget(level, source)) { diff --git a/net/minecraft/world/entity/monster/Creeper.java b/net/minecraft/world/entity/monster/Creeper.java -index 67f99138834011d12f429cf7ff6fdb7c6bd06262..567e1bc0bb2e96f831206e70612dfe8bcb825b74 100644 +index 7ebce241a4195326bbecd158952f2ec559196ad3..2839c755e5ca58896bc14f95ce4889d48ec415b3 100644 --- a/net/minecraft/world/entity/monster/Creeper.java +++ b/net/minecraft/world/entity/monster/Creeper.java -@@ -271,6 +271,13 @@ public class Creeper extends Monster { +@@ -272,6 +272,13 @@ public class Creeper extends Monster { } // Purpur end - Toggle for water sensitive mob damage @@ -689,10 +689,10 @@ index 67f99138834011d12f429cf7ff6fdb7c6bd06262..567e1bc0bb2e96f831206e70612dfe8b public SoundEvent getHurtSound(DamageSource damageSource) { return SoundEvents.CREEPER_HURT; diff --git a/net/minecraft/world/entity/monster/Drowned.java b/net/minecraft/world/entity/monster/Drowned.java -index 3dae0020a506527e1e556945da5334de54bdabee..b85d1e196d2bf61ac4896205afb08eba89c4397e 100644 +index 6e8ae9aa0b5051b7fb303476e52ba2cc76c29c84..2e6d0f035a01277aa28bbe912d5df8dc4cf04547 100644 --- a/net/minecraft/world/entity/monster/Drowned.java +++ b/net/minecraft/world/entity/monster/Drowned.java -@@ -129,6 +129,13 @@ public class Drowned extends Zombie implements RangedAttackMob { +@@ -130,6 +130,13 @@ public class Drowned extends Zombie implements RangedAttackMob { } // Purpur end - Toggle for water sensitive mob damage @@ -707,7 +707,7 @@ index 3dae0020a506527e1e556945da5334de54bdabee..b85d1e196d2bf61ac4896205afb08eba protected void addBehaviourGoals() { this.goalSelector.addGoal(1, new Drowned.DrownedGoToWaterGoal(this, 1.0)); diff --git a/net/minecraft/world/entity/monster/ElderGuardian.java b/net/minecraft/world/entity/monster/ElderGuardian.java -index 27dd75a64af375ce498224bfd7ed4799ed586d9c..a708692a71014aabc1fc842837e1c0a82fd3a343 100644 +index 287b6fea404d4f1f121219f92918dc2d1c0ac780..ab1c050ff326a072e817a05958b8f4ec803af063 100644 --- a/net/minecraft/world/entity/monster/ElderGuardian.java +++ b/net/minecraft/world/entity/monster/ElderGuardian.java @@ -58,6 +58,13 @@ public class ElderGuardian extends Guardian { @@ -725,10 +725,10 @@ index 27dd75a64af375ce498224bfd7ed4799ed586d9c..a708692a71014aabc1fc842837e1c0a8 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 10b505712791d10e9b36cc6cfffeb590c74284e5..46e4440a4e0d6a6ff4fdd56687fe40324641ef49 100644 +index 73d66dffa57b31e4d772438f6d2f23cfbbcfb281..fcdb3ee493e65bf002e78862f00061336e731ede 100644 --- a/net/minecraft/world/entity/monster/EnderMan.java +++ b/net/minecraft/world/entity/monster/EnderMan.java -@@ -116,6 +116,13 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -114,6 +114,13 @@ public class EnderMan extends Monster implements NeutralMob { } // Purpur end - Configurable entity base attributes @@ -743,10 +743,10 @@ index 10b505712791d10e9b36cc6cfffeb590c74284e5..46e4440a4e0d6a6ff4fdd56687fe4032 protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/monster/Endermite.java b/net/minecraft/world/entity/monster/Endermite.java -index c4bfd0fb0fbee4fa72e4cf17931c95831daaf73f..7d3932dcb263500357e9aad28881229418a0d458 100644 +index 4565a592face29a077d96fc0cd52bceaed52f755..4ea0e5f24664a1c8f2c8bdae559784434374adf6 100644 --- a/net/minecraft/world/entity/monster/Endermite.java +++ b/net/minecraft/world/entity/monster/Endermite.java -@@ -78,6 +78,13 @@ public class Endermite extends Monster { +@@ -79,6 +79,13 @@ public class Endermite extends Monster { } // Purpur end - Toggle for water sensitive mob damage @@ -761,10 +761,10 @@ index c4bfd0fb0fbee4fa72e4cf17931c95831daaf73f..7d3932dcb263500357e9aad288812294 protected void registerGoals() { this.goalSelector.addGoal(1, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/monster/Evoker.java b/net/minecraft/world/entity/monster/Evoker.java -index e1debcc5d859961a9d9893fa5ffbe67deea35f6d..f32fa187ba6b16f1e8b1f308dc9073f808d52d86 100644 +index d77e3b0f36ec4a262ff375d9e2da912553a344f8..5c1992a7fd5d7c5fe23ebfad35a828263d0ff93c 100644 --- a/net/minecraft/world/entity/monster/Evoker.java +++ b/net/minecraft/world/entity/monster/Evoker.java -@@ -82,6 +82,13 @@ public class Evoker extends SpellcasterIllager { +@@ -80,6 +80,13 @@ public class Evoker extends SpellcasterIllager { } // Purpur end - Toggle for water sensitive mob damage @@ -779,10 +779,10 @@ index e1debcc5d859961a9d9893fa5ffbe67deea35f6d..f32fa187ba6b16f1e8b1f308dc9073f8 protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/Ghast.java b/net/minecraft/world/entity/monster/Ghast.java -index 4864009a9e531d37f9c3747a042d8ea1ed6ccbf7..c2e6e2f4a2c1e72521f0afd1664d9ba02ef08d7d 100644 +index 92a9ce3d7db83a631281a6ac11ccc4441e04efdc..f11b9f5ff3087ee2b53c1614b63f29ef33072f73 100644 --- a/net/minecraft/world/entity/monster/Ghast.java +++ b/net/minecraft/world/entity/monster/Ghast.java -@@ -92,6 +92,13 @@ public class Ghast extends FlyingMob implements Enemy { +@@ -101,6 +101,13 @@ public class Ghast extends Mob implements Enemy { } // Purpur end - Toggle for water sensitive mob damage @@ -797,7 +797,7 @@ index 4864009a9e531d37f9c3747a042d8ea1ed6ccbf7..c2e6e2f4a2c1e72521f0afd1664d9ba0 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/Giant.java b/net/minecraft/world/entity/monster/Giant.java -index 009b8a8b1b9aabc0aef1c12a0c0f65f9ccfcd306..3f575abee4c8933d1642400d134b0fc915215a1a 100644 +index ccc2f7906c322a5406467986565074cbddf6cbe0..f4ec41a74b13be98f3ac78521fdd357842bc9ebd 100644 --- a/net/minecraft/world/entity/monster/Giant.java +++ b/net/minecraft/world/entity/monster/Giant.java @@ -69,6 +69,13 @@ public class Giant extends Monster { @@ -812,8 +812,8 @@ index 009b8a8b1b9aabc0aef1c12a0c0f65f9ccfcd306..3f575abee4c8933d1642400d134b0fc9 + // Purpur end - Mobs always drop experience + public static AttributeSupplier.Builder createAttributes() { - return Monster.createMonsterAttributes().add(Attributes.MAX_HEALTH, 100.0).add(Attributes.MOVEMENT_SPEED, 0.5).add(Attributes.ATTACK_DAMAGE, 50.0); - } + 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 9868117ecf0a3b36f81086297c639f6f274e0055..3ba8da3bd04774fb3131fdbd2aa0bd6c9f31c817 100644 --- a/net/minecraft/world/entity/monster/Guardian.java @@ -851,7 +851,7 @@ index 3f331215ef49c52fa3a53bcf744159d2221111f5..a4ce65911a5d778f60bcedb3acd9fe59 EntityType entityType, ServerLevelAccessor level, EntitySpawnReason spawnReason, BlockPos pos, RandomSource random ) { diff --git a/net/minecraft/world/entity/monster/Illusioner.java b/net/minecraft/world/entity/monster/Illusioner.java -index 553a8f0f5b895f3d8528f10efdc918466e4f4d87..b8ada9ebd0d8d4ca0e8eb7e6084a0057f4758ea4 100644 +index b2e59058c71eb0b05670be8dcddfff073ae2d0db..93eaafe260312f26840a2afee8375b8a95d97ba2 100644 --- a/net/minecraft/world/entity/monster/Illusioner.java +++ b/net/minecraft/world/entity/monster/Illusioner.java @@ -91,6 +91,13 @@ public class Illusioner extends SpellcasterIllager implements RangedAttackMob { @@ -887,10 +887,10 @@ index da90b7dc79aa6d01e88c1250fff662ba1b001dc3..7ef0f84d4c449a8991683ca66d7b16ca 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 c2bc638b0029ac46cf388187ca74545060a54914..2e1e7cf0fe1bc25437cf2f429ff33b4263b1a6f1 100644 +index bfd4d7eef537c0d3688159d6db99236d6ed2f810..82fe0c14f22e8492766553a93b24cb506b09afd9 100644 --- a/net/minecraft/world/entity/monster/Phantom.java +++ b/net/minecraft/world/entity/monster/Phantom.java -@@ -158,6 +158,13 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -159,6 +159,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 @@ -905,10 +905,10 @@ index c2bc638b0029ac46cf388187ca74545060a54914..2e1e7cf0fe1bc25437cf2f429ff33b42 public boolean isFlapping() { return (this.getUniqueFlapTickOffset() + this.tickCount) % TICKS_PER_FLAP == 0; diff --git a/net/minecraft/world/entity/monster/Pillager.java b/net/minecraft/world/entity/monster/Pillager.java -index 4c41e7e0a164779bf1d6765fdb750dcd60acd104..3d12b509a9b57f0326ec48eed93b2962f6f0e493 100644 +index faaf42a029b1a0423c5e10ee3e17e4ba0e70be02..2ed473468032bb6edbd03882b5f5405b90a2f0f4 100644 --- a/net/minecraft/world/entity/monster/Pillager.java +++ b/net/minecraft/world/entity/monster/Pillager.java -@@ -95,6 +95,13 @@ public class Pillager extends AbstractIllager implements CrossbowAttackMob, Inve +@@ -96,6 +96,13 @@ public class Pillager extends AbstractIllager implements CrossbowAttackMob, Inve } // Purpur end - Toggle for water sensitive mob damage @@ -923,10 +923,10 @@ index 4c41e7e0a164779bf1d6765fdb750dcd60acd104..3d12b509a9b57f0326ec48eed93b2962 protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/Ravager.java b/net/minecraft/world/entity/monster/Ravager.java -index 0b6550c3abad0eb00af4f303725045a8aa3dc4b1..56b844a8252c7f7ece12db98775230134e1898d6 100644 +index d75df6de50f9830efeea826d0ebdac17f56d4c4b..2b85cedf235e673d6030c2a649abf60b5792b242 100644 --- a/net/minecraft/world/entity/monster/Ravager.java +++ b/net/minecraft/world/entity/monster/Ravager.java -@@ -107,6 +107,13 @@ public class Ravager extends Raider { +@@ -108,6 +108,13 @@ public class Ravager extends Raider { } // Purpur end - Toggle for water sensitive mob damage @@ -941,10 +941,10 @@ index 0b6550c3abad0eb00af4f303725045a8aa3dc4b1..56b844a8252c7f7ece12db9877523013 protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/Shulker.java b/net/minecraft/world/entity/monster/Shulker.java -index c9dab7d6b1afe8749022d99aa988782c75270561..56401c993d9a4c41b0782831a8b857646bf18f88 100644 +index d38c6025833079a435971c66cfbb90486721ca14..768da16864cbb925e4988f3bcfb7dc86a9b1846d 100644 --- a/net/minecraft/world/entity/monster/Shulker.java +++ b/net/minecraft/world/entity/monster/Shulker.java -@@ -141,6 +141,13 @@ public class Shulker extends AbstractGolem implements Enemy { +@@ -142,6 +142,13 @@ public class Shulker extends AbstractGolem implements Enemy { } // Purpur end - Toggle for water sensitive mob damage @@ -959,7 +959,7 @@ index c9dab7d6b1afe8749022d99aa988782c75270561..56401c993d9a4c41b0782831a8b85764 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 af33bd8c472f7e7bfdab52558bac379166ff2253..a6d6cb3e122488328ff980ed5902caff5490671b 100644 +index 51714029d4ea5033014dcefd25f74cc0c9a72dbd..bcae390578519fef362a126fbcf2b5cfd18c3dc4 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 { @@ -977,10 +977,10 @@ index af33bd8c472f7e7bfdab52558bac379166ff2253..a6d6cb3e122488328ff980ed5902caff 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 fbf8818e0fd80705648f038647b718ec2a2cd1b6..48cbc3cb983da08cfec78828b15f148459a22b44 100644 +index 555ada78c81ce912bf8d57a9a094102804b372ef..c6ab31fa5204220f4c89dd48dd0966036a4975cf 100644 --- a/net/minecraft/world/entity/monster/Skeleton.java +++ b/net/minecraft/world/entity/monster/Skeleton.java -@@ -57,6 +57,13 @@ public class Skeleton extends AbstractSkeleton { +@@ -58,6 +58,13 @@ public class Skeleton extends AbstractSkeleton { } // Purpur end - Toggle for water sensitive mob damage @@ -995,10 +995,10 @@ index fbf8818e0fd80705648f038647b718ec2a2cd1b6..48cbc3cb983da08cfec78828b15f1484 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 f44e9f04e083d48e4a90d8d8e8b5cc199bf9f351..7b6db084a483b4a9c2f292c5ed6e4c7550344c50 100644 +index 29b500eb4c010ff83d8474f8ee5602c479243e19..b299fc08fe900b4d48ce3e6986bcea000253053e 100644 --- a/net/minecraft/world/entity/monster/Slime.java +++ b/net/minecraft/world/entity/monster/Slime.java -@@ -140,6 +140,13 @@ public class Slime extends Mob implements Enemy { +@@ -141,6 +141,13 @@ public class Slime extends Mob implements Enemy { } // Purpur end - Toggle for water sensitive mob damage @@ -1067,10 +1067,10 @@ index 533801988cb4f8a916ef002a179990ca913b2f32..fe31c4a45afd61be8b74efe9d0858ccd 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 0808520f39d5ce96baad25180ead7a69922950f5..488e0605e9769d52faffecbc86c28c779d0ff25b 100644 +index 193994476a78d68d2ef45f7a354648ce347b0f55..7502f447610cd43dde465d3dc94d3a9682133a14 100644 --- a/net/minecraft/world/entity/monster/Vex.java +++ b/net/minecraft/world/entity/monster/Vex.java -@@ -117,6 +117,13 @@ public class Vex extends Monster implements TraceableEntity { +@@ -119,6 +119,13 @@ public class Vex extends Monster implements TraceableEntity { } // Purpur end - Toggle for water sensitive mob damage @@ -1085,10 +1085,10 @@ index 0808520f39d5ce96baad25180ead7a69922950f5..488e0605e9769d52faffecbc86c28c77 public boolean isFlapping() { return this.tickCount % TICKS_PER_FLAP == 0; diff --git a/net/minecraft/world/entity/monster/Vindicator.java b/net/minecraft/world/entity/monster/Vindicator.java -index 50da0e9246f50be6073e26c8fa042fe2b4eabb32..8ba772d9f5f53dc0dea269c5089e742f20dbc308 100644 +index 9f4d93308adc49d7ae83796a8dc43db16e7992b6..df95c6be4469eeefa248e5ef18cfaba3d4cdeea6 100644 --- a/net/minecraft/world/entity/monster/Vindicator.java +++ b/net/minecraft/world/entity/monster/Vindicator.java -@@ -88,6 +88,13 @@ public class Vindicator extends AbstractIllager { +@@ -89,6 +89,13 @@ public class Vindicator extends AbstractIllager { } // Purpur end - Toggle for water sensitive mob damage @@ -1139,10 +1139,10 @@ index ef2a7fdc8abe05b7718b71e23556258aba392c75..b3f5b2e3e2cfc378de948c0e186727d5 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 7cb2bc8b126a0027216ec4afd7f6e54fe328b8be..bdf52bfe661d4c0ad6c5a28254302f8f0021c09b 100644 +index ddc8de9a111395aa77025b809f176425be7bb30c..e37c6dcbe62cba2cb7f33ac1792d539f9b07aa24 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 @@ -1157,10 +1157,10 @@ index 7cb2bc8b126a0027216ec4afd7f6e54fe328b8be..bdf52bfe661d4c0ad6c5a28254302f8f 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 aed6db357f5b4550407a424a5b83c590044568ee..783f8b9a05939b9f42fc77065f6347e3c6ddf8f5 100644 +index 147c030a2f8fd0d430070a36946fa42af177ea68..ab4dc7b3a7593d255dbd7d1df667fce3504af3ed 100644 --- a/net/minecraft/world/entity/monster/Zombie.java +++ b/net/minecraft/world/entity/monster/Zombie.java -@@ -151,6 +151,13 @@ public class Zombie extends Monster { +@@ -150,6 +150,13 @@ public class Zombie extends Monster { } // Purpur end - Toggle for water sensitive mob damage @@ -1175,10 +1175,10 @@ index aed6db357f5b4550407a424a5b83c590044568ee..783f8b9a05939b9f42fc77065f6347e3 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 c6e460c21af6145321cad527112adc15e9f30d8d..ae5939c940bdd93977fa882360fc31e46479554f 100644 +index 606fe4bd9c3359e42a025a866873e147ee16a40e..e218e5d5f146ec996a6f5ce7e76b1d6506ac1cb9 100644 --- a/net/minecraft/world/entity/monster/ZombieVillager.java +++ b/net/minecraft/world/entity/monster/ZombieVillager.java -@@ -130,6 +130,13 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { +@@ -129,6 +129,13 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { } // Purpur end - Toggle for water sensitive mob damage @@ -1193,10 +1193,10 @@ index c6e460c21af6145321cad527112adc15e9f30d8d..ae5939c940bdd93977fa882360fc31e4 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 34e259b95abfc514e07584a699ecc80de0014250..39489c8a347031fb4f73faca46039786e35762ac 100644 +index 7406f1f589509769aed260197f7cfabc081ce37b..f58c48d9de85fda3d13079f3e56b31af75b3c725 100644 --- a/net/minecraft/world/entity/monster/ZombifiedPiglin.java +++ b/net/minecraft/world/entity/monster/ZombifiedPiglin.java -@@ -112,6 +112,13 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { +@@ -113,6 +113,13 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { } // Purpur end - Toggle for water sensitive mob damage @@ -1211,10 +1211,10 @@ index 34e259b95abfc514e07584a699ecc80de0014250..39489c8a347031fb4f73faca46039786 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 ee2cd8bfb74dead58f77f9755f306aa7166285fd..252a6469cab202bcc612b4d52a5027c615029a21 100644 +index ddb7532d83b46dae22798937e097a8876fcd6106..994f6e5cb0960d43de00d9ef6d25e81107e0774a 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 @@ -1229,10 +1229,10 @@ index ee2cd8bfb74dead58f77f9755f306aa7166285fd..252a6469cab202bcc612b4d52a5027c6 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 0059e926f09317e056f3f722c4ca775c43bc0b86..54ab9593b39051d47f1dd8bddf210064768382be 100644 +index 76d572959b3422d1691e34fec3bbeb8d5b50d715..c48044ff1fd5b587935d11747d93598d0bc0c7a3 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 +@@ -169,6 +169,13 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento } // Purpur end - Toggle for water sensitive mob damage @@ -1244,8 +1244,8 @@ index 0059e926f09317e056f3f722c4ca775c43bc0b86..54ab9593b39051d47f1dd8bddf210064 + // Purpur end - Mobs always drop experience + @Override - public void addAdditionalSaveData(CompoundTag compound) { - super.addAdditionalSaveData(compound); + protected void addAdditionalSaveData(ValueOutput output) { + super.addAdditionalSaveData(output); diff --git a/net/minecraft/world/entity/monster/piglin/PiglinBrute.java b/net/minecraft/world/entity/monster/piglin/PiglinBrute.java index f4893cc54d7f144025da0057beedb3a974c80dc1..70ee15527fa6f30783d6a58bb767b18124f25c53 100644 --- a/net/minecraft/world/entity/monster/piglin/PiglinBrute.java @@ -1265,10 +1265,10 @@ index f4893cc54d7f144025da0057beedb3a974c80dc1..70ee15527fa6f30783d6a58bb767b181 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 654935f2994c588c8545c21d6de839711c55cdfc..5b52bbac242a7fbb8eaea7e41b7265a1a859ff7c 100644 +index 6490b3791648f0680d44d6ca1e0d3b67df180997..baf72d0e5701cd234752988284e7fefba4c56380 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 @@ -1283,10 +1283,10 @@ index 654935f2994c588c8545c21d6de839711c55cdfc..5b52bbac242a7fbb8eaea7e41b7265a1 public Brain getBrain() { return (Brain)super.getBrain(); diff --git a/net/minecraft/world/entity/npc/WanderingTrader.java b/net/minecraft/world/entity/npc/WanderingTrader.java -index 7ad6a8479a0bdda570ac286220eacd0ba8642111..776e4d001bc6e6d419eb4392dc85bf4594e57058 100644 +index f2b59a4490226168dd69ace94022cf6398d48615..dc6b30518270486cf3b2eaab4db13a507917f37d 100644 --- a/net/minecraft/world/entity/npc/WanderingTrader.java +++ b/net/minecraft/world/entity/npc/WanderingTrader.java -@@ -104,6 +104,13 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill +@@ -105,6 +105,13 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill } // Purpur end - Toggle for water sensitive mob damage