From 9dc9fd34cdec6083268bc0e7addedd1178ec0a01 Mon Sep 17 00:00:00 2001 From: granny Date: Tue, 25 Mar 2025 21:54:45 -0700 Subject: [PATCH] apply feature patches --- .../features/0001-Ridables.patch | 832 +++++++++--------- ...-Configurable-entity-base-attributes.patch | 368 ++++---- .../0003-Barrels-and-enderchests-6-rows.patch | 24 +- .../0005-Chickens-can-retaliate.patch | 8 +- ...-Minecart-settings-and-WASD-controls.patch | 16 +- ...0007-Villagers-follow-emerald-blocks.patch | 29 +- ...urable-void-damage-height-and-damage.patch | 8 +- .../0009-Implement-elytra-settings.patch | 20 +- .../0010-Configurable-jockey-options.patch | 20 +- ...ed-to-crystals-and-crystals-shoot-ph.patch | 18 +- .../0012-Phantoms-burn-in-light.patch | 10 +- ...e-entity-breeding-times-configurable.patch | 202 ++--- ...mes-from-item-forms-of-entities-to-e.patch | 31 +- ...Villager-Clerics-to-farm-Nether-Wart.patch | 66 +- ...iefing-bypass-to-everything-affected.patch | 106 +-- ...0017-Add-EntityTeleportHinderedEvent.patch | 22 +- ...oggle-for-water-sensitive-mob-damage.patch | 320 +++---- ...019-API-for-any-mob-to-burn-daylight.patch | 146 ++- ...turally-aggressive-to-players-chance.patch | 65 +- .../0021-Mobs-always-drop-experience.patch | 308 +++---- 20 files changed, 1316 insertions(+), 1303 deletions(-) diff --git a/purpur-server/minecraft-patches/features/0001-Ridables.patch b/purpur-server/minecraft-patches/features/0001-Ridables.patch index 7a56507e8..4632523eb 100644 --- a/purpur-server/minecraft-patches/features/0001-Ridables.patch +++ b/purpur-server/minecraft-patches/features/0001-Ridables.patch @@ -5,50 +5,50 @@ Subject: [PATCH] Ridables diff --git a/net/minecraft/gametest/framework/GameTestHelper.java b/net/minecraft/gametest/framework/GameTestHelper.java -index 29d402620d2e1cbed94f941f933ae8eb5d786e7f..ec0998369158286fccb38c8e10c3cfa2a653a8aa 100644 +index fa7a2a85adf7758a753c54a7cf75cc667922d3d7..b0a86aac9603e72062f59dbe67c88ed8f07023e3 100644 --- a/net/minecraft/gametest/framework/GameTestHelper.java +++ b/net/minecraft/gametest/framework/GameTestHelper.java -@@ -281,6 +281,8 @@ public class GameTestHelper { +@@ -294,6 +294,8 @@ public class GameTestHelper { public void setAfk(final boolean afk) {} // Purpur - AFK API + public void resetLastActionTime() {} // Purpur - Ridables + @Override - public boolean isLocalPlayer() { - return true; + public boolean isClientAuthoritative() { + return false; diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index 121b57c7f5345f5d8884eaa1d36dac79fb7d42ef..9afbfe9bf493e09ca1963e8956ab7573964479b4 100644 +index f34bc75f324454bf48f0ebf79111706bb027a54b..6ad266592c16bdeccfb689fb2ef2ee37e79a7b41 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java -@@ -1745,6 +1745,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 63b1b2f920d5f2beb23433a373233aa2f1f95dbb..3c3e8e58cd2761ab2f0652e63f944a5c9a95dca8 100644 +index 1ee82020ba335946a54db380d2c3f8d71ce2371b..200c33de28100e42b91dee40e7a531e38d459c7d 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java -@@ -217,6 +217,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -212,6 +212,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 - public LevelChunk getChunkIfLoaded(int x, int z) { - return this.chunkSource.getChunkAtIfLoadedImmediately(x, z); // Paper - Use getChunkIfLoadedImmediately + @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 6275078467313fe95ae2ae22740135a4b4f39511..7ebecee1de098c218304868b1223b914941cae8a 100644 +index 6dc490bf9d032b5ed2d7bd458bffd3471f54ff06..cf26a10e4ccf0f28817ce53b3c5bf1df02259273 100644 --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java -@@ -855,6 +855,15 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -764,6 +764,15 @@ public class ServerPlayer extends Player { this.trackEnteredOrExitedLavaOnVehicle(); this.updatePlayerAttributes(); - this.advancements.flushDirty(this); + this.advancements.flushDirty(this, true); + + // Purpur start - Ridables + if (this.level().purpurConfig.useNightVisionWhenRiding && this.getVehicle() != null && this.getVehicle().getRider() == this && this.level().getGameTime() % 100 == 0) { // 5 seconds @@ -62,23 +62,23 @@ index 6275078467313fe95ae2ae22740135a4b4f39511..7ebecee1de098c218304868b1223b914 private void updatePlayerAttributes() { diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 7b938c0d28af3f15106666e13642e88aa398db4d..9e8fdd28a2b2031e4db011663b67582fce5b3b0f 100644 +index ab2e6655e07a667d8ac413c85aaf3743a38db2e0..96b61192d9ab70857427cea65d4ddd0a4fe9b4aa 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -2845,6 +2845,8 @@ public class ServerGamePacketListenerImpl +@@ -2766,6 +2766,8 @@ public class ServerGamePacketListenerImpl ServerGamePacketListenerImpl.this.cserver.getPluginManager().callEvent(event); + player.processClick(hand); // Purpur - Ridables + // Entity in bucket - SPIGOT-4048 and SPIGOT-6859a - if ((target instanceof Bucketable && target instanceof LivingEntity && origItem != null && origItem.asItem() == Items.WATER_BUCKET) && (event.isCancelled() || ServerGamePacketListenerImpl.this.player.getInventory().getSelected() == null || ServerGamePacketListenerImpl.this.player.getInventory().getSelected().getItem() != origItem)) { + 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 56448eeb61f71dce04524e5f9dfe9dd3740154a7..680a7b609db5de96742a8042d0f9ab5e0a8a8e7f 100644 +index 4dd9ab13f97e14425d792ed23a81477016ddc56c..d4e989889ed21e3900062eed142f26a9bdaaa8d9 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java -@@ -3152,6 +3152,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -2861,6 +2861,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess this.passengers = ImmutableList.copyOf(list); } @@ -92,7 +92,7 @@ index 56448eeb61f71dce04524e5f9dfe9dd3740154a7..680a7b609db5de96742a8042d0f9ab5e this.gameEvent(GameEvent.ENTITY_MOUNT, passenger); } } -@@ -3193,6 +3200,14 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -2902,6 +2909,14 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return false; } // CraftBukkit end @@ -107,8 +107,8 @@ index 56448eeb61f71dce04524e5f9dfe9dd3740154a7..680a7b609db5de96742a8042d0f9ab5e if (this.passengers.size() == 1 && this.passengers.get(0) == passenger) { this.passengers = ImmutableList.of(); } else { -@@ -5116,4 +5131,44 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess - return ((ServerLevel) this.level).isPositionEntityTicking(this.blockPosition()); +@@ -4828,4 +4843,44 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess + return ((ServerLevel) this.level()).isPositionEntityTicking(this.blockPosition()); } // Paper end - Expose entity id counter + // Purpur start - Ridables @@ -153,10 +153,10 @@ index 56448eeb61f71dce04524e5f9dfe9dd3740154a7..680a7b609db5de96742a8042d0f9ab5e + // Purpur end - Ridables } diff --git a/net/minecraft/world/entity/GlowSquid.java b/net/minecraft/world/entity/GlowSquid.java -index 95d78dcdb6777df73898694367ee17b1cb76d7a2..d0313fd5368baa53ec511c8c07fc78a1f1ecec4e 100644 +index bda521cca91f070139f5e9bdef6a50e1497f53ff..351f92e1627f465a9a292d4a5e5c256a8e323ab3 100644 --- a/net/minecraft/world/entity/GlowSquid.java +++ b/net/minecraft/world/entity/GlowSquid.java -@@ -32,6 +32,19 @@ public class GlowSquid extends Squid { +@@ -33,6 +33,19 @@ public class GlowSquid extends Squid { } // Purpur end - Flying squids! Oh my! @@ -177,11 +177,11 @@ index 95d78dcdb6777df73898694367ee17b1cb76d7a2..d0313fd5368baa53ec511c8c07fc78a1 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 73e4cfc0c92ab47dd299ca98c03c69d11f75d36a..5f5f031c9d5b738a29cbabf5bed9452907c97df1 100644 +index 0caf3cc4c38426dd08d4ec78c00b51a3a880718a..a6739650bfee639925a63f345ac39c6e0c5c3209 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java -@@ -250,9 +250,9 @@ public abstract class LivingEntity extends Entity implements Attackable { - protected float rotOffs; +@@ -226,9 +226,9 @@ public abstract class LivingEntity extends Entity implements Attackable { + protected int noActionTime; public float lastHurt; public boolean jumping; - public float xxa; @@ -190,19 +190,19 @@ index 73e4cfc0c92ab47dd299ca98c03c69d11f75d36a..5f5f031c9d5b738a29cbabf5bed94529 + public float xxa; public float getStrafeMot() { return xxa; } public void setStrafeMot(float strafe) { xxa = strafe; } // Purpur - OBFHELPER + public float yya; public float getVerticalMot() { return yya; } public void setVerticalMot(float vertical) { yya = vertical; } // Purpur - OBFHELPER + public float zza; public float getForwardMot() { return zza; } public void setForwardMot(float forward) { zza = forward; } // Purpur - OBFHELPER - protected int lerpSteps; - protected double lerpX; - protected double lerpY; -@@ -310,7 +310,7 @@ public abstract class LivingEntity extends Entity implements Attackable { + protected InterpolationHandler interpolation = new InterpolationHandler(this); + protected double lerpYHeadRot; + protected int lerpHeadSteps; +@@ -277,7 +277,7 @@ public abstract class LivingEntity extends Entity implements Attackable { protected LivingEntity(EntityType entityType, Level level) { super(entityType, level); - this.attributes = new AttributeMap(DefaultAttributes.getSupplier(entityType)); + this.attributes = new AttributeMap(DefaultAttributes.getSupplier(entityType), this); // Purpur - Ridables - this.craftAttributes = new CraftAttributeMap(this.attributes); // CraftBukkit + 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()); -@@ -377,6 +377,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -350,6 +350,7 @@ public abstract class LivingEntity extends Entity implements Attackable { .add(Attributes.MOVEMENT_EFFICIENCY) .add(Attributes.ATTACK_KNOCKBACK); } @@ -210,7 +210,7 @@ index 73e4cfc0c92ab47dd299ca98c03c69d11f75d36a..5f5f031c9d5b738a29cbabf5bed94529 @Override protected void checkFallDamage(double y, boolean onGround, BlockState state, BlockPos pos) { -@@ -3562,8 +3563,10 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3578,8 +3579,10 @@ public abstract class LivingEntity extends Entity implements Attackable { this.pushEntities(); profilerFiller.pop(); // Paper start - Add EntityMoveEvent @@ -223,8 +223,8 @@ index 73e4cfc0c92ab47dd299ca98c03c69d11f75d36a..5f5f031c9d5b738a29cbabf5bed94529 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()); -@@ -3573,6 +3576,21 @@ public abstract class LivingEntity extends Entity implements Attackable { - this.absMoveTo(event.getTo().getX(), event.getTo().getY(), event.getTo().getZ(), event.getTo().getYaw(), event.getTo().getPitch()); +@@ -3589,6 +3592,21 @@ public abstract class LivingEntity extends Entity implements Attackable { + this.absSnapTo(event.getTo().getX(), event.getTo().getY(), event.getTo().getZ(), event.getTo().getYaw(), event.getTo().getPitch()); } } + // Purpur start - Ridables @@ -244,12 +244,12 @@ index 73e4cfc0c92ab47dd299ca98c03c69d11f75d36a..5f5f031c9d5b738a29cbabf5bed94529 + // Purpur end - Ridables } // Paper end - Add EntityMoveEvent - if (this.level() instanceof ServerLevel serverLevel && this.isSensitiveToWater() && this.isInWaterRainOrBubble()) { + 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 def2c797b9c0f3f97c37fcfa0fc44a351dfe3422..487a436e3d9a5a7a4551ea808c8ace306ce6c2fc 100644 +index e3b804f2d612ed7971db450aeea6768109b63470..ca1d0164c90e695731f05de39c1d2fff947ecfc1 100644 --- a/net/minecraft/world/entity/Mob.java +++ b/net/minecraft/world/entity/Mob.java -@@ -151,8 +151,8 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -142,8 +142,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 def2c797b9c0f3f97c37fcfa0fc44a351dfe3422..487a436e3d9a5a7a4551ea808c8ace30 this.jumpControl = new JumpControl(this); this.bodyRotationControl = this.createBodyControl(); this.navigation = this.createNavigation(level); -@@ -1407,7 +1407,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -1279,7 +1279,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab } protected InteractionResult mobInteract(Player player, InteractionHand hand) { @@ -269,9 +269,9 @@ index def2c797b9c0f3f97c37fcfa0fc44a351dfe3422..487a436e3d9a5a7a4551ea808c8ace30 } public boolean isWithinRestriction() { -@@ -1725,4 +1725,58 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab - public float[] getArmorDropChances() { - return this.armorDropChances; +@@ -1591,4 +1591,58 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab + this.getNavigation().updatePathfinderMaxVisitedNodes(); + } } + + // Purpur start - Ridables @@ -329,10 +329,10 @@ index def2c797b9c0f3f97c37fcfa0fc44a351dfe3422..487a436e3d9a5a7a4551ea808c8ace30 + // Purpur end - Ridables } diff --git a/net/minecraft/world/entity/ai/attributes/AttributeMap.java b/net/minecraft/world/entity/ai/attributes/AttributeMap.java -index 4c808c7ef336de74048f40bd1cc8b14131a9325d..a25d74592e89e3d6339479c6dc2b6f45d1932cfc 100644 +index bed9b564c493cd84bf53fc49368fda736f3fbc2b..23576e631ad4a12ec3ff3630be253738534588f3 100644 --- a/net/minecraft/world/entity/ai/attributes/AttributeMap.java +++ b/net/minecraft/world/entity/ai/attributes/AttributeMap.java -@@ -23,14 +23,21 @@ public class AttributeMap { +@@ -18,14 +18,21 @@ public class AttributeMap { private final Set attributesToSync = new ObjectOpenHashSet<>(); private final Set attributesToUpdate = new ObjectOpenHashSet<>(); private final AttributeSupplier supplier; @@ -356,7 +356,7 @@ index 4c808c7ef336de74048f40bd1cc8b14131a9325d..a25d74592e89e3d6339479c6dc2b6f45 this.attributesToSync.add(instance); } } -@@ -44,7 +51,7 @@ public class AttributeMap { +@@ -39,7 +46,7 @@ public class AttributeMap { } public Collection getSyncableAttributes() { @@ -366,7 +366,7 @@ index 4c808c7ef336de74048f40bd1cc8b14131a9325d..a25d74592e89e3d6339479c6dc2b6f45 @Nullable diff --git a/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java b/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java -index 33527a1825119f3667fb3c7ccec318f2c7328ec9..61ed4d687120fcbb7b91863e400f3657ebcde687 100644 +index e6fd15c3172a951d6551cf3fb42f92f39f1cf7b8..75d8fe03558ba38caf46c826dfea5208f88bde52 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 { @@ -379,7 +379,7 @@ index 33527a1825119f3667fb3c7ccec318f2c7328ec9..61ed4d687120fcbb7b91863e400f3657 .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 0f9bf0cb0655a6ed449a86e99b17f89b4e3264df..1860b4ab2314f5da017313977c6423e735a4f96b 100644 +index cdd85c11a214db4829305eb54e0de9670a9241ac..88adfbb7998515f1f64b2d4121549179dc719375 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 4d715a29f1ad31e87977562bd0e2aeddb54ee082..e7ea944e77175ee4051b8e7361c502d0cc2115d5 100644 +index ed8920bb6d29ce49626bc716aa2c2ce938f6d92b..99845dde0c633714acefb0bb482d8422d946dd46 100644 --- a/net/minecraft/world/entity/ambient/Bat.java +++ b/net/minecraft/world/entity/ambient/Bat.java -@@ -42,11 +42,58 @@ public class Bat extends AmbientCreature { +@@ -43,11 +43,58 @@ public class Bat extends AmbientCreature { public Bat(EntityType entityType, Level level) { super(entityType, level); @@ -488,7 +488,7 @@ index 4d715a29f1ad31e87977562bd0e2aeddb54ee082..e7ea944e77175ee4051b8e7361c502d0 @Override public boolean isFlapping() { return !this.isResting() && this.tickCount % 10.0F == 0.0F; -@@ -98,7 +145,7 @@ public class Bat extends AmbientCreature { +@@ -99,7 +146,7 @@ public class Bat extends AmbientCreature { } public static AttributeSupplier.Builder createAttributes() { @@ -497,7 +497,7 @@ index 4d715a29f1ad31e87977562bd0e2aeddb54ee082..e7ea944e77175ee4051b8e7361c502d0 } public boolean isResting() { -@@ -129,6 +176,14 @@ public class Bat extends AmbientCreature { +@@ -130,6 +177,14 @@ public class Bat extends AmbientCreature { @Override protected void customServerAiStep(ServerLevel level) { @@ -512,11 +512,39 @@ index 4d715a29f1ad31e87977562bd0e2aeddb54ee082..e7ea944e77175ee4051b8e7361c502d0 super.customServerAiStep(level); BlockPos blockPos = this.blockPosition(); BlockPos blockPos1 = blockPos.above(); +diff --git a/net/minecraft/world/entity/animal/AbstractCow.java b/net/minecraft/world/entity/animal/AbstractCow.java +index 4e81bc7215c845b316bcd46ce29f49af7f986088..61e7300bbf272398b2faebf5e537d9c2ddedc6d6 100644 +--- a/net/minecraft/world/entity/animal/AbstractCow.java ++++ b/net/minecraft/world/entity/animal/AbstractCow.java +@@ -37,6 +37,7 @@ public abstract class AbstractCow extends Animal { + @Override + protected void registerGoals() { + this.goalSelector.addGoal(0, new FloatGoal(this)); ++ this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables + this.goalSelector.addGoal(1, new PanicGoal(this, 2.0)); + this.goalSelector.addGoal(2, new BreedGoal(this, 1.0)); + this.goalSelector.addGoal(3, new TemptGoal(this, 1.25, itemStack -> level().purpurConfig.cowFeedMushrooms > 0 && (itemStack.is(net.minecraft.world.level.block.Blocks.RED_MUSHROOM.asItem()) || itemStack.is(net.minecraft.world.level.block.Blocks.BROWN_MUSHROOM.asItem())) || itemStack.is(ItemTags.COW_FOOD), false)); // Purpur - Cows eat mushrooms +@@ -82,13 +83,14 @@ public abstract class AbstractCow extends Animal { + + @Override + public InteractionResult mobInteract(Player player, InteractionHand hand) { ++ if (getRider() != null) return InteractionResult.PASS; // Purpur - Ridables + ItemStack itemInHand = player.getItemInHand(hand); + if (itemInHand.is(Items.BUCKET) && !this.isBaby()) { + // CraftBukkit start - Got milk? + org.bukkit.event.player.PlayerBucketFillEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerBucketFillEvent(player.level(), player, this.blockPosition(), this.blockPosition(), null, itemInHand, Items.MILK_BUCKET, hand); + if (event.isCancelled()) { + player.containerMenu.sendAllDataToRemote(); // Paper - Fix inventory desync +- return InteractionResult.PASS; ++ return tryRide(player, hand); // Purpur - Ridables + } + // 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 c0997c8c0f8ee4474d3acdd5938b1879c4e589a2..28ae152125ed83d8917674b6068f227f87890f30 100644 +index 363582056339f64dbe7e686b61451c095c538c00..2cf95769ec3a1662443ea31e1bc2ba01cb7b523e 100644 --- a/net/minecraft/world/entity/animal/AbstractFish.java +++ b/net/minecraft/world/entity/animal/AbstractFish.java -@@ -87,6 +87,7 @@ public abstract class AbstractFish extends WaterAnimal implements Bucketable { +@@ -88,6 +88,7 @@ public abstract class AbstractFish extends WaterAnimal implements Bucketable { @Override protected void registerGoals() { super.registerGoals(); @@ -524,16 +552,16 @@ index c0997c8c0f8ee4474d3acdd5938b1879c4e589a2..28ae152125ed83d8917674b6068f227f 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)); -@@ -100,7 +101,7 @@ public abstract class AbstractFish extends WaterAnimal implements Bucketable { +@@ -101,7 +102,7 @@ public abstract class AbstractFish extends WaterAnimal implements Bucketable { @Override public void travel(Vec3 travelVector) { - if (this.isControlledByLocalInstance() && this.isInWater()) { + if (this.isInWater()) { - this.moveRelative(0.01F, travelVector); + this.moveRelative(getRider() != null ? getSpeed() : 0.01F, travelVector); // Purpur - Ridables this.move(MoverType.SELF, this.getDeltaMovement()); this.setDeltaMovement(this.getDeltaMovement().scale(0.9)); if (this.getTarget() == null) { -@@ -160,7 +161,7 @@ public abstract class AbstractFish extends WaterAnimal implements Bucketable { +@@ -161,7 +162,7 @@ public abstract class AbstractFish extends WaterAnimal implements Bucketable { protected void playStepSound(BlockPos pos, BlockState block) { } @@ -542,7 +570,7 @@ index c0997c8c0f8ee4474d3acdd5938b1879c4e589a2..28ae152125ed83d8917674b6068f227f private final AbstractFish fish; FishMoveControl(AbstractFish mob) { -@@ -168,14 +169,22 @@ public abstract class AbstractFish extends WaterAnimal implements Bucketable { +@@ -169,14 +170,22 @@ public abstract class AbstractFish extends WaterAnimal implements Bucketable { this.fish = mob; } @@ -568,10 +596,10 @@ index c0997c8c0f8ee4474d3acdd5938b1879c4e589a2..28ae152125ed83d8917674b6068f227f 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 646bdd1c5d5a8b6459ee8b94e887d3d19442ea05..1c27e44ca6744150e8a107a00bb00fb4784acf3b 100644 +index a6fd3a16e7a9e34ad582601f9ef22d98346fc31c..e55507fa09001b431519ef9c76bf444d7df3f7ea 100644 --- a/net/minecraft/world/entity/animal/Bee.java +++ b/net/minecraft/world/entity/animal/Bee.java -@@ -145,6 +145,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -149,6 +149,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { public Bee(EntityType entityType, Level level) { super(entityType, level); @@ -579,7 +607,7 @@ index 646bdd1c5d5a8b6459ee8b94e887d3d19442ea05..1c27e44ca6744150e8a107a00bb00fb4 // Paper start - Fix MC-167279 class BeeFlyingMoveControl extends FlyingMoveControl { public BeeFlyingMoveControl(final Mob entity, final int maxPitchChange, final boolean noGravity) { -@@ -153,11 +154,24 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -157,11 +158,24 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { @Override public void tick() { @@ -604,7 +632,7 @@ index 646bdd1c5d5a8b6459ee8b94e887d3d19442ea05..1c27e44ca6744150e8a107a00bb00fb4 } this.moveControl = new BeeFlyingMoveControl(this, 20, true); // Paper end - Fix MC-167279 -@@ -169,6 +183,40 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -173,6 +187,40 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { this.setPathfindingMalus(PathType.FENCE, -1.0F); } @@ -645,7 +673,7 @@ index 646bdd1c5d5a8b6459ee8b94e887d3d19442ea05..1c27e44ca6744150e8a107a00bb00fb4 @Override protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); -@@ -183,6 +231,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -187,6 +235,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { @Override protected void registerGoals() { @@ -653,7 +681,7 @@ index 646bdd1c5d5a8b6459ee8b94e887d3d19442ea05..1c27e44ca6744150e8a107a00bb00fb4 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)); -@@ -200,6 +249,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -204,6 +253,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)); @@ -661,7 +689,7 @@ index 646bdd1c5d5a8b6459ee8b94e887d3d19442ea05..1c27e44ca6744150e8a107a00bb00fb4 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)); -@@ -1084,15 +1134,15 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -1083,15 +1133,15 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { } } @@ -681,10 +709,10 @@ index 646bdd1c5d5a8b6459ee8b94e887d3d19442ea05..1c27e44ca6744150e8a107a00bb00fb4 } diff --git a/net/minecraft/world/entity/animal/Cat.java b/net/minecraft/world/entity/animal/Cat.java -index de97fb5a70a3a966db3f1136ac60fbb5fe63e2e1..2723f04de1156f8e396f5bee2afdc044626f4dcb 100644 +index 7894db23663c4647742f543195b610bd7e1f3360..74a44f97dcf4fabeac28a2f8b31e9b717d47ea49 100644 --- a/net/minecraft/world/entity/animal/Cat.java +++ b/net/minecraft/world/entity/animal/Cat.java -@@ -93,10 +93,36 @@ public class Cat extends TamableAnimal implements VariantHolder itemStack.is(ItemTags.CAT_FOOD), true); + this.temptGoal = new Cat.CatTemptGoal(this, 0.6, stack -> stack.is(ItemTags.CAT_FOOD), true); this.goalSelector.addGoal(1, new FloatGoal(this)); + this.goalSelector.addGoal(1, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables this.goalSelector.addGoal(1, new TamableAnimal.TamableAnimalPanicGoal(1.5)); this.goalSelector.addGoal(2, new SitWhenOrderedToGoal(this)); this.goalSelector.addGoal(3, new Cat.CatRelaxOnOwnerGoal(this)); -@@ -109,6 +135,7 @@ public class Cat extends TamableAnimal implements VariantHolder(this, Rabbit.class, false, null)); this.targetSelector.addGoal(1, new NonTameRandomTargetGoal<>(this, Turtle.class, false, Turtle.BABY_ON_LAND_SELECTOR)); } -@@ -360,6 +387,7 @@ public class Cat extends TamableAnimal implements VariantHolder itemStack.is(ItemTags.CHICKEN_FOOD), false)); diff --git a/net/minecraft/world/entity/animal/Cod.java b/net/minecraft/world/entity/animal/Cod.java -index 708bcc39e7242292d5d5bfcaf599e3738628df9b..6a19086e272363701260801f3c6db9b5c91b8ef5 100644 +index 75509be5b9162c1f7f91f2290ef2d80171ae61df..651c9243902e3c48fb438913974e996d67d6f746 100644 --- a/net/minecraft/world/entity/animal/Cod.java +++ b/net/minecraft/world/entity/animal/Cod.java @@ -13,6 +13,18 @@ public class Cod extends AbstractSchoolingFish { @@ -793,10 +821,10 @@ index 708bcc39e7242292d5d5bfcaf599e3738628df9b..6a19086e272363701260801f3c6db9b5 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 8c1f74c6be53cbf48bd6b5641511359578801c08..656babc0c8810a85eb9f78ced1f3ad9551fdc286 100644 +index 42c79a88679d2100528150d490554a75589e1ad8..ff1b8c93baccf1d417ef0f9338a6f8d66716dafc 100644 --- a/net/minecraft/world/entity/animal/Cow.java +++ b/net/minecraft/world/entity/animal/Cow.java -@@ -38,9 +38,27 @@ public class Cow extends Animal { +@@ -28,6 +28,23 @@ public class Cow extends AbstractCow { super(entityType, level); } @@ -818,35 +846,15 @@ index 8c1f74c6be53cbf48bd6b5641511359578801c08..656babc0c8810a85eb9f78ced1f3ad95 + // Purpur end - Ridables + @Override - protected void registerGoals() { - this.goalSelector.addGoal(0, new FloatGoal(this)); -+ this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables - this.goalSelector.addGoal(1, new PanicGoal(this, 2.0)); - this.goalSelector.addGoal(2, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(3, new TemptGoal(this, 1.25, itemStack -> level().purpurConfig.cowFeedMushrooms > 0 && (itemStack.is(net.minecraft.world.level.block.Blocks.RED_MUSHROOM.asItem()) || itemStack.is(net.minecraft.world.level.block.Blocks.BROWN_MUSHROOM.asItem())) || itemStack.is(ItemTags.COW_FOOD), false)); // Purpur - Cows eat mushrooms -@@ -86,13 +104,14 @@ public class Cow extends Animal { - - @Override - public InteractionResult mobInteract(Player player, InteractionHand hand) { -+ if (getRider() != null) return InteractionResult.PASS; // Purpur - Ridables - ItemStack itemInHand = player.getItemInHand(hand); - if (itemInHand.is(Items.BUCKET) && !this.isBaby()) { - // CraftBukkit start - Got milk? - org.bukkit.event.player.PlayerBucketFillEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerBucketFillEvent((ServerLevel) player.level(), player, this.blockPosition(), this.blockPosition(), null, itemInHand, Items.MILK_BUCKET, hand); - if (event.isCancelled()) { - player.containerMenu.sendAllDataToRemote(); // Paper - Fix inventory desync -- return InteractionResult.PASS; -+ return tryRide(player, hand); // Purpur - Ridables - } - // CraftBukkit end - player.playSound(SoundEvents.COW_MILK, 1.0F, 1.0F); + 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 8be0dd148d88dfdfb9efab91124c829e60b5dea5..35bce598bb5857356823594d2a001006ce19f835 100644 +index bca2e4659f4afdd7106f77e32af1943e4d276f5e..144b163a4a82997ca88e906bbadcf5835636aece 100644 --- a/net/minecraft/world/entity/animal/Dolphin.java +++ b/net/minecraft/world/entity/animal/Dolphin.java -@@ -72,14 +72,82 @@ public class Dolphin extends AgeableWaterCreature { - public static final Predicate ALLOWED_ITEMS = itemEntity -> !itemEntity.hasPickUpDelay() && itemEntity.isAlive() && itemEntity.isInWater(); - public static final float BABY_SCALE = 0.65F; +@@ -74,14 +74,82 @@ public class Dolphin extends AgeableWaterCreature { + @Nullable + public BlockPos treasurePos; private boolean isNaturallyAggressiveToPlayers; // Purpur - Dolphins naturally aggressive to players chance + private int spitCooldown; // Purpur - Ridables @@ -928,7 +936,7 @@ index 8be0dd148d88dfdfb9efab91124c829e60b5dea5..35bce598bb5857356823594d2a001006 @Nullable @Override public SpawnGroupData finalizeSpawn( -@@ -172,6 +240,7 @@ public class Dolphin extends AgeableWaterCreature { +@@ -158,6 +226,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 @@ -936,7 +944,7 @@ index 8be0dd148d88dfdfb9efab91124c829e60b5dea5..35bce598bb5857356823594d2a001006 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)); -@@ -182,6 +251,7 @@ public class Dolphin extends AgeableWaterCreature { +@@ -168,6 +237,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)); @@ -944,7 +952,7 @@ index 8be0dd148d88dfdfb9efab91124c829e60b5dea5..35bce598bb5857356823594d2a001006 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 } -@@ -227,7 +297,7 @@ public class Dolphin extends AgeableWaterCreature { +@@ -213,7 +283,7 @@ public class Dolphin extends AgeableWaterCreature { @Override protected boolean canRide(Entity entity) { @@ -953,7 +961,7 @@ index 8be0dd148d88dfdfb9efab91124c829e60b5dea5..35bce598bb5857356823594d2a001006 } @Override -@@ -256,6 +326,11 @@ public class Dolphin extends AgeableWaterCreature { +@@ -242,6 +312,11 @@ public class Dolphin extends AgeableWaterCreature { @Override public void tick() { super.tick(); @@ -966,10 +974,10 @@ index 8be0dd148d88dfdfb9efab91124c829e60b5dea5..35bce598bb5857356823594d2a001006 this.setAirSupply(this.getMaxAirSupply()); } else { diff --git a/net/minecraft/world/entity/animal/Fox.java b/net/minecraft/world/entity/animal/Fox.java -index 2455324b49e28c57e1b154fd6d9a4d82ee289234..d31ffaba61098568c3134d0a10e1513b10dc8728 100644 +index 4aae42396bd3abb131efe336d7b774384897671d..eb25d655140e425208ee9eeae24ebb756f1b7306 100644 --- a/net/minecraft/world/entity/animal/Fox.java +++ b/net/minecraft/world/entity/animal/Fox.java -@@ -129,6 +129,44 @@ public class Fox extends Animal implements VariantHolder { +@@ -141,6 +141,44 @@ public class Fox extends Animal { this.getNavigation().setRequiredPathLength(32.0F); } @@ -1014,7 +1022,7 @@ index 2455324b49e28c57e1b154fd6d9a4d82ee289234..d31ffaba61098568c3134d0a10e1513b @Override protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); -@@ -148,6 +186,7 @@ public class Fox extends Animal implements VariantHolder { +@@ -160,6 +198,7 @@ public class Fox extends Animal { this, AbstractFish.class, 20, false, false, (entity, level) -> entity instanceof AbstractSchoolingFish ); this.goalSelector.addGoal(0, new Fox.FoxFloatGoal()); @@ -1022,7 +1030,7 @@ index 2455324b49e28c57e1b154fd6d9a4d82ee289234..d31ffaba61098568c3134d0a10e1513b 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)); -@@ -175,6 +214,7 @@ public class Fox extends Animal implements VariantHolder { +@@ -185,6 +224,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()); @@ -1030,7 +1038,7 @@ index 2455324b49e28c57e1b154fd6d9a4d82ee289234..d31ffaba61098568c3134d0a10e1513b this.targetSelector .addGoal( 3, -@@ -1095,15 +1135,15 @@ public class Fox extends Animal implements VariantHolder { +@@ -1118,15 +1158,15 @@ public class Fox extends Animal { } } @@ -1049,7 +1057,7 @@ index 2455324b49e28c57e1b154fd6d9a4d82ee289234..d31ffaba61098568c3134d0a10e1513b } } -@@ -1139,15 +1179,15 @@ public class Fox extends Animal implements VariantHolder { +@@ -1162,15 +1202,15 @@ public class Fox extends Animal { } } @@ -1069,10 +1077,10 @@ index 2455324b49e28c57e1b154fd6d9a4d82ee289234..d31ffaba61098568c3134d0a10e1513b } } diff --git a/net/minecraft/world/entity/animal/IronGolem.java b/net/minecraft/world/entity/animal/IronGolem.java -index 46921562c9c5caf7e04ee180325a638273d6bad2..223c4796f659a24062a719045e484a22d31ab2f0 100644 +index 91897447d7ef35af3300443e8eb96340081fed48..3a78342a9ce9b5393a280530b50a8c843e201845 100644 --- a/net/minecraft/world/entity/animal/IronGolem.java +++ b/net/minecraft/world/entity/animal/IronGolem.java -@@ -73,9 +73,28 @@ public class IronGolem extends AbstractGolem implements NeutralMob { +@@ -74,9 +74,28 @@ public class IronGolem extends AbstractGolem implements NeutralMob { } // Purpur end - Summoner API @@ -1101,7 +1109,7 @@ index 46921562c9c5caf7e04ee180325a638273d6bad2..223c4796f659a24062a719045e484a22 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)); -@@ -83,6 +102,7 @@ public class IronGolem extends AbstractGolem implements NeutralMob { +@@ -84,6 +103,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)); @@ -1109,7 +1117,7 @@ index 46921562c9c5caf7e04ee180325a638273d6bad2..223c4796f659a24062a719045e484a22 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)); -@@ -271,12 +291,12 @@ public class IronGolem extends AbstractGolem implements NeutralMob { +@@ -272,12 +292,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)) { @@ -1125,10 +1133,10 @@ index 46921562c9c5caf7e04ee180325a638273d6bad2..223c4796f659a24062a719045e484a22 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 a8aeb79b1c1413d74a5d18a57bd4ba4beca6039c..1292146341022483f78a9128ef9d7a88089274a0 100644 +index 0931bab3f52ccc4e405be22559323df90bcc065e..f04342dd4addb2be47533f12a2a475f12c1869f1 100644 --- a/net/minecraft/world/entity/animal/MushroomCow.java +++ b/net/minecraft/world/entity/animal/MushroomCow.java -@@ -55,6 +55,23 @@ public class MushroomCow extends Cow implements Shearable, VariantHolder 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) { @@ -1162,10 +1170,10 @@ index a8aeb79b1c1413d74a5d18a57bd4ba4beca6039c..1292146341022483f78a9128ef9d7a88 // Paper end - custom shear drops } diff --git a/net/minecraft/world/entity/animal/Ocelot.java b/net/minecraft/world/entity/animal/Ocelot.java -index e193696b2e3eb1c1c689c05592ab4318a98772ad..d26a8658c8c56c3b0df4e5908de1ac23ac2dd351 100644 +index 48c8fdfea8687f37187b6092c285275c12963ea0..b8780911350ac5f4f10acdbed2b13523c8692344 100644 --- a/net/minecraft/world/entity/animal/Ocelot.java +++ b/net/minecraft/world/entity/animal/Ocelot.java -@@ -62,6 +62,23 @@ public class Ocelot extends Animal { +@@ -63,6 +63,23 @@ public class Ocelot extends Animal { this.reassessTrustingGoals(); } @@ -1189,7 +1197,7 @@ index e193696b2e3eb1c1c689c05592ab4318a98772ad..d26a8658c8c56c3b0df4e5908de1ac23 public boolean isTrusting() { return this.entityData.get(DATA_TRUSTING); } -@@ -93,12 +110,14 @@ public class Ocelot extends Animal { +@@ -94,12 +111,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)); @@ -1205,10 +1213,10 @@ index e193696b2e3eb1c1c689c05592ab4318a98772ad..d26a8658c8c56c3b0df4e5908de1ac23 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 283ddf7d13a17c0a6df5a52b7fd26ed7b7a4826b..19aa39af6685a03eb584820853239a3f4fa1a515 100644 +index ecd85f3e33f80084b9ee06c9ff1f57b73399be50..44af6a2bcb1ba60a487555c5240b38798798b769 100644 --- a/net/minecraft/world/entity/animal/Panda.java +++ b/net/minecraft/world/entity/animal/Panda.java -@@ -105,6 +105,32 @@ public class Panda extends Animal { +@@ -106,6 +106,32 @@ public class Panda extends Animal { } } @@ -1241,7 +1249,7 @@ index 283ddf7d13a17c0a6df5a52b7fd26ed7b7a4826b..19aa39af6685a03eb584820853239a3f @Override protected boolean canDispenserEquipIntoSlot(EquipmentSlot slot) { return slot == EquipmentSlot.MAINHAND && this.canPickUpLoot(); -@@ -258,6 +284,7 @@ public class Panda extends Animal { +@@ -259,6 +285,7 @@ public class Panda extends Animal { @Override protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); @@ -1249,7 +1257,7 @@ index 283ddf7d13a17c0a6df5a52b7fd26ed7b7a4826b..19aa39af6685a03eb584820853239a3f 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)); -@@ -273,6 +300,7 @@ public class Panda extends Animal { +@@ -274,6 +301,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)); @@ -1257,7 +1265,7 @@ index 283ddf7d13a17c0a6df5a52b7fd26ed7b7a4826b..19aa39af6685a03eb584820853239a3f this.targetSelector.addGoal(1, new Panda.PandaHurtByTargetGoal(this).setAlertOthers(new Class[0])); } -@@ -616,7 +644,7 @@ public class Panda extends Animal { +@@ -617,7 +645,7 @@ public class Panda extends Animal { public InteractionResult mobInteract(Player player, InteractionHand hand) { ItemStack itemInHand = player.getItemInHand(hand); if (this.isScared()) { @@ -1266,7 +1274,7 @@ index 283ddf7d13a17c0a6df5a52b7fd26ed7b7a4826b..19aa39af6685a03eb584820853239a3f } else if (this.isOnBack()) { this.setOnBack(false); return InteractionResult.SUCCESS; -@@ -652,7 +680,7 @@ public class Panda extends Animal { +@@ -653,7 +681,7 @@ public class Panda extends Animal { return InteractionResult.SUCCESS_SERVER; } else { @@ -1275,7 +1283,7 @@ index 283ddf7d13a17c0a6df5a52b7fd26ed7b7a4826b..19aa39af6685a03eb584820853239a3f } } -@@ -964,7 +992,7 @@ public class Panda extends Animal { +@@ -961,7 +989,7 @@ public class Panda extends Animal { } } @@ -1284,7 +1292,7 @@ index 283ddf7d13a17c0a6df5a52b7fd26ed7b7a4826b..19aa39af6685a03eb584820853239a3f private final Panda panda; public PandaMoveControl(Panda mob) { -@@ -973,9 +1001,9 @@ public class Panda extends Animal { +@@ -970,9 +998,9 @@ public class Panda extends Animal { } @Override @@ -1297,10 +1305,10 @@ index 283ddf7d13a17c0a6df5a52b7fd26ed7b7a4826b..19aa39af6685a03eb584820853239a3f } } diff --git a/net/minecraft/world/entity/animal/Parrot.java b/net/minecraft/world/entity/animal/Parrot.java -index 2a1f4dd963f7c2d5b34eb6ab67142347c5eae0e7..907cb50c58f067f1e0ca15583d39924fd76f1ed0 100644 +index ca661c215d2eb719392a30c7b917bd622524c4dc..573efbc5f5f4ad0be30868c7faa058e68bf2fd67 100644 --- a/net/minecraft/world/entity/animal/Parrot.java +++ b/net/minecraft/world/entity/animal/Parrot.java -@@ -124,12 +124,68 @@ public class Parrot extends ShoulderRidingEntity implements VariantHolder entityType, Level level) { super(entityType, level); @@ -1370,7 +1378,7 @@ index 2a1f4dd963f7c2d5b34eb6ab67142347c5eae0e7..907cb50c58f067f1e0ca15583d39924f @Nullable @Override public SpawnGroupData finalizeSpawn( -@@ -150,9 +206,11 @@ public class Parrot extends ShoulderRidingEntity implements VariantHolder 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 fbd35f074a3045d483aabd9bc7e1c9c4f10a3167..711ed0d753494a92a003fc683146f289505ed7f6 100644 +index d018b1a967557cfae0d3227d8f43d281a78a22bc..4561b590b0068bfbcfd990bbf8b6640c0bd1493c 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 { @@ -1500,10 +1508,10 @@ index fbd35f074a3045d483aabd9bc7e1c9c4f10a3167..711ed0d753494a92a003fc683146f289 public float getStandingAnimationScale(float partialTick) { diff --git a/net/minecraft/world/entity/animal/Pufferfish.java b/net/minecraft/world/entity/animal/Pufferfish.java -index d94a7cfcd0f7a15ce97d3b12daa8b2c71acf997a..f7e9abf778186ad1c78dbe411980a83c5e68792e 100644 +index 4a7201fe9e946fc20ed04e729d00f7986a748bad..c35973498b0abae2dafa63f30ed5e6ca87f6baa5 100644 --- a/net/minecraft/world/entity/animal/Pufferfish.java +++ b/net/minecraft/world/entity/animal/Pufferfish.java -@@ -45,6 +45,18 @@ public class Pufferfish extends AbstractFish { +@@ -46,6 +46,18 @@ public class Pufferfish extends AbstractFish { this.refreshDimensions(); } @@ -1523,18 +1531,18 @@ index d94a7cfcd0f7a15ce97d3b12daa8b2c71acf997a..f7e9abf778186ad1c78dbe411980a83c 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 b2cbe9f7a771dbfc381effa0821d44421c98b33e..8cac46951938c80fae3499e8b53709c25d86e9bd 100644 +index e9445749c5264bd0ce7c426845cb342d34dea713..338a1d3f1352f49ba5b53c55a49abce3ded2b0c0 100644 --- a/net/minecraft/world/entity/animal/Rabbit.java +++ b/net/minecraft/world/entity/animal/Rabbit.java -@@ -83,6 +83,7 @@ public class Rabbit extends Animal implements VariantHolder { +@@ -90,6 +90,7 @@ public class Rabbit extends Animal { private boolean wasOnGround; private int jumpDelayTicks; - public int moreCarrotTicks; + public int moreCarrotTicks = 0; + private boolean actualJump; // Purpur - Ridables public Rabbit(EntityType entityType, Level level) { super(entityType, level); -@@ -91,9 +92,55 @@ public class Rabbit extends Animal implements VariantHolder { +@@ -98,9 +99,55 @@ public class Rabbit extends Animal { //this.setSpeedModifier(0.0); // CraftBukkit } @@ -1590,7 +1598,7 @@ index b2cbe9f7a771dbfc381effa0821d44421c98b33e..8cac46951938c80fae3499e8b53709c2 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)); -@@ -108,6 +155,14 @@ public class Rabbit extends Animal implements VariantHolder { +@@ -115,6 +162,14 @@ public class Rabbit extends Animal { @Override protected float getJumpPower() { @@ -1605,7 +1613,7 @@ index b2cbe9f7a771dbfc381effa0821d44421c98b33e..8cac46951938c80fae3499e8b53709c2 float f = 0.3F; if (this.moveControl.getSpeedModifier() <= 0.6) { f = 0.2F; -@@ -175,6 +230,12 @@ public class Rabbit extends Animal implements VariantHolder { +@@ -182,6 +237,12 @@ public class Rabbit extends Animal { @Override public void customServerAiStep(ServerLevel level) { @@ -1618,7 +1626,7 @@ index b2cbe9f7a771dbfc381effa0821d44421c98b33e..8cac46951938c80fae3499e8b53709c2 if (this.jumpDelayTicks > 0) { this.jumpDelayTicks--; } -@@ -483,7 +544,7 @@ public class Rabbit extends Animal implements VariantHolder { +@@ -510,7 +571,7 @@ public class Rabbit extends Animal { } } @@ -1627,7 +1635,7 @@ index b2cbe9f7a771dbfc381effa0821d44421c98b33e..8cac46951938c80fae3499e8b53709c2 private final Rabbit rabbit; private double nextJumpSpeed; -@@ -493,14 +554,14 @@ public class Rabbit extends Animal implements VariantHolder { +@@ -520,14 +581,14 @@ public class Rabbit extends Animal { } @Override @@ -1645,10 +1653,10 @@ index b2cbe9f7a771dbfc381effa0821d44421c98b33e..8cac46951938c80fae3499e8b53709c2 @Override diff --git a/net/minecraft/world/entity/animal/Salmon.java b/net/minecraft/world/entity/animal/Salmon.java -index 41366f7b9af176a33b20ea26dd53d50994d2c600..ebbd6d39c3f5d6c66445c2c743785ed369408389 100644 +index 1786205346bb02835b10676155b65d2f11f0c221..2b60d92eec3192416b0c39ddaa1fa490d15a6137 100644 --- a/net/minecraft/world/entity/animal/Salmon.java +++ b/net/minecraft/world/entity/animal/Salmon.java -@@ -35,6 +35,18 @@ public class Salmon extends AbstractSchoolingFish implements VariantHolder stack.is(ItemTags.SHEEP_FOOD), false)); diff --git a/net/minecraft/world/entity/animal/SnowGolem.java b/net/minecraft/world/entity/animal/SnowGolem.java -index a26d57a16d06adb7fbf7abf1baeda2ab1824853d..6a4a43b86d4b3812bba7b7d8bdb95eb06d234355 100644 +index 67c8f1e82c775818f906eeaa639e55d7c02834c6..aca62391131333d604d21c9aaf2bcea620dc51b3 100644 --- a/net/minecraft/world/entity/animal/SnowGolem.java +++ b/net/minecraft/world/entity/animal/SnowGolem.java -@@ -61,12 +61,31 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM +@@ -62,12 +62,31 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM } // Purpur end - Summoner API @@ -1736,7 +1711,7 @@ index a26d57a16d06adb7fbf7abf1baeda2ab1824853d..6a4a43b86d4b3812bba7b7d8bdb95eb0 this.targetSelector.addGoal(1, new NearestAttackableTargetGoal<>(this, Mob.class, 10, true, false, (entity, level) -> entity instanceof Enemy)); } -@@ -113,6 +132,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM +@@ -112,6 +131,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM return; } @@ -1744,7 +1719,7 @@ index a26d57a16d06adb7fbf7abf1baeda2ab1824853d..6a4a43b86d4b3812bba7b7d8bdb95eb0 BlockState blockState = Blocks.SNOW.defaultBlockState(); for (int i = 0; i < 4; i++) { -@@ -155,7 +175,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM +@@ -154,7 +174,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()) { @@ -1753,7 +1728,7 @@ index a26d57a16d06adb7fbf7abf1baeda2ab1824853d..6a4a43b86d4b3812bba7b7d8bdb95eb0 } drops = org.bukkit.craftbukkit.inventory.CraftItemStack.asNMSCopy(event.getDrops()); // Paper end - custom shear drops -@@ -176,7 +196,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM +@@ -175,7 +195,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM return InteractionResult.SUCCESS; // Purpur end - Snowman drop and put back pumpkin } else { @@ -1763,7 +1738,7 @@ index a26d57a16d06adb7fbf7abf1baeda2ab1824853d..6a4a43b86d4b3812bba7b7d8bdb95eb0 } diff --git a/net/minecraft/world/entity/animal/Squid.java b/net/minecraft/world/entity/animal/Squid.java -index c776d40896a6514ab9c66df206c93469ec682b23..e3f43e8c6ddbae289a82157cab4beb18f682dd75 100644 +index 2e51e64991d326fc055520b6fefc76e80f7c2d97..21ff0b49a1df9b8a95cb2fdf7b43d9a676a497a6 100644 --- a/net/minecraft/world/entity/animal/Squid.java +++ b/net/minecraft/world/entity/animal/Squid.java @@ -69,9 +69,32 @@ public class Squid extends AgeableWaterCreature { @@ -1799,7 +1774,7 @@ index c776d40896a6514ab9c66df206c93469ec682b23..e3f43e8c6ddbae289a82157cab4beb18 this.goalSelector.addGoal(1, new Squid.SquidFleeGoal()); } -@@ -327,6 +350,37 @@ public class Squid extends AgeableWaterCreature { +@@ -325,6 +348,37 @@ public class Squid extends AgeableWaterCreature { @Override public void tick() { @@ -1838,10 +1813,10 @@ index c776d40896a6514ab9c66df206c93469ec682b23..e3f43e8c6ddbae289a82157cab4beb18 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 fa5f7f7d54083f9ea2095dd44362069d00e0b9a5..1e31a39b276e1c5ae767da7af0b536007c87189e 100644 +index 89e14f04328995e6491c01321789be0bf9ddd438..d7bea58644dd707b835e0c728b2c89c697c7e554 100644 --- a/net/minecraft/world/entity/animal/TropicalFish.java +++ b/net/minecraft/world/entity/animal/TropicalFish.java -@@ -67,6 +67,18 @@ public class TropicalFish extends AbstractSchoolingFish implements VariantHolder +@@ -76,6 +76,18 @@ public class TropicalFish extends AbstractSchoolingFish { super(entityType, level); } @@ -1861,10 +1836,10 @@ index fa5f7f7d54083f9ea2095dd44362069d00e0b9a5..1e31a39b276e1c5ae767da7af0b53600 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 0e2d2dd3f2ef2783f3773a9a05c4f718991f7784..cf8daa9897b978ffb89e01d63257a9ea35dcc8a4 100644 +index d24ddf8a585395c0f7b1cd5a61aaea0516636d93..7c97f917b0cc5652c20abdd26428cccad10b8757 100644 --- a/net/minecraft/world/entity/animal/Turtle.java +++ b/net/minecraft/world/entity/animal/Turtle.java -@@ -84,6 +84,23 @@ public class Turtle extends Animal { +@@ -85,6 +85,23 @@ public class Turtle extends Animal { this.moveControl = new Turtle.TurtleMoveControl(this); } @@ -1886,9 +1861,9 @@ index 0e2d2dd3f2ef2783f3773a9a05c4f718991f7784..cf8daa9897b978ffb89e01d63257a9ea + // Purpur end - Ridables + public void setHomePos(BlockPos homePos) { - this.entityData.set(HOME_POS, homePos); + this.homePos = homePos; } -@@ -188,6 +205,7 @@ public class Turtle extends Animal { +@@ -144,6 +161,7 @@ public class Turtle extends Animal { @Override protected void registerGoals() { @@ -1896,7 +1871,7 @@ index 0e2d2dd3f2ef2783f3773a9a05c4f718991f7784..cf8daa9897b978ffb89e01d63257a9ea 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)); -@@ -539,12 +557,14 @@ public class Turtle extends Animal { +@@ -492,12 +510,14 @@ public class Turtle extends Animal { } } @@ -1912,7 +1887,7 @@ index 0e2d2dd3f2ef2783f3773a9a05c4f718991f7784..cf8daa9897b978ffb89e01d63257a9ea } private void updateSpeed() { -@@ -563,7 +583,7 @@ public class Turtle extends Animal { +@@ -516,7 +536,7 @@ public class Turtle extends Animal { } @Override @@ -1921,7 +1896,7 @@ index 0e2d2dd3f2ef2783f3773a9a05c4f718991f7784..cf8daa9897b978ffb89e01d63257a9ea this.updateSpeed(); if (this.operation == MoveControl.Operation.MOVE_TO && !this.turtle.getNavigation().isDone()) { double d = this.wantedX - this.turtle.getX(); -@@ -577,7 +597,7 @@ public class Turtle extends Animal { +@@ -530,7 +550,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(); @@ -1930,56 +1905,11 @@ index 0e2d2dd3f2ef2783f3773a9a05c4f718991f7784..cf8daa9897b978ffb89e01d63257a9ea this.turtle.setSpeed(Mth.lerp(0.125F, this.turtle.getSpeed(), f1)); 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/Wolf.java b/net/minecraft/world/entity/animal/Wolf.java -index 3b09dd88f843843be62a75776c4d8ebdf9195ae7..75f592f6d7d2cf2faf8989de4c4f4b0fd125d53a 100644 ---- a/net/minecraft/world/entity/animal/Wolf.java -+++ b/net/minecraft/world/entity/animal/Wolf.java -@@ -180,9 +180,32 @@ public class Wolf extends TamableAnimal implements NeutralMob, VariantHolder(this, Llama.class, 24.0F, 1.5, 1.5)); -@@ -195,6 +218,7 @@ public class Wolf extends TamableAnimal implements NeutralMob, VariantHolder brainProvider() { return Brain.provider(MEMORY_TYPES, SENSOR_TYPES); -@@ -247,6 +282,7 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS +@@ -243,6 +278,7 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS protected void customServerAiStep(ServerLevel level) { ProfilerFiller profilerFiller = Profiler.get(); profilerFiller.push("allayBrain"); @@ -2042,10 +1972,10 @@ index aafb32295d4ce239609bb62e6bdf2261739f7aa0..b399a1220496d38cef252fd2d43b31b2 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 dfdbcb31458095a71c187efc2774ecc4945dd11b..87a190d8646d8bbed8c182f9f0f7d8c398e63d26 100644 +index b72e07ad954efa7f26f876a59f428086b40d9bb2..2b38e942492b3324683e05d36ed906462da92ac4 100644 --- a/net/minecraft/world/entity/animal/armadillo/Armadillo.java +++ b/net/minecraft/world/entity/animal/armadillo/Armadillo.java -@@ -80,6 +80,23 @@ public class Armadillo extends Animal { +@@ -81,6 +81,23 @@ public class Armadillo extends Animal { return Animal.createAnimalAttributes().add(Attributes.MAX_HEALTH, 12.0).add(Attributes.MOVEMENT_SPEED, 0.14); } @@ -2070,10 +2000,10 @@ index dfdbcb31458095a71c187efc2774ecc4945dd11b..87a190d8646d8bbed8c182f9f0f7d8c3 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 9faa929734035c167e54569ce34d841291856589..2054e4624da0c9b04ea69b9bf39443c4574d48be 100644 +index 233025bc1d4ba2590223def9b206140c68ea5f26..f3f0f5d7fe79e87b893aa52113f02a774ccc057a 100644 --- a/net/minecraft/world/entity/animal/axolotl/Axolotl.java +++ b/net/minecraft/world/entity/animal/axolotl/Axolotl.java -@@ -115,6 +115,23 @@ public class Axolotl extends Animal implements VariantHolder, B +@@ -120,6 +120,23 @@ public class Axolotl extends Animal implements Bucketable { this.lookControl = new Axolotl.AxolotlLookControl(this, 20); } @@ -2097,7 +2027,7 @@ index 9faa929734035c167e54569ce34d841291856589..2054e4624da0c9b04ea69b9bf39443c4 @Override public float getWalkTargetValue(BlockPos pos, LevelReader level) { return 0.0F; -@@ -304,6 +321,7 @@ public class Axolotl extends Animal implements VariantHolder, B +@@ -329,6 +346,7 @@ public class Axolotl extends Animal implements Bucketable { protected void customServerAiStep(ServerLevel level) { ProfilerFiller profilerFiller = Profiler.get(); profilerFiller.push("axolotlBrain"); @@ -2105,7 +2035,7 @@ index 9faa929734035c167e54569ce34d841291856589..2054e4624da0c9b04ea69b9bf39443c4 this.getBrain().tick(level, this); profilerFiller.pop(); profilerFiller.push("axolotlActivityUpdate"); -@@ -555,23 +573,31 @@ public class Axolotl extends Animal implements VariantHolder, B +@@ -578,23 +596,31 @@ public class Axolotl extends Animal implements Bucketable { } @Override @@ -2140,10 +2070,10 @@ index 9faa929734035c167e54569ce34d841291856589..2054e4624da0c9b04ea69b9bf39443c4 super.tick(); } diff --git a/net/minecraft/world/entity/animal/camel/Camel.java b/net/minecraft/world/entity/animal/camel/Camel.java -index 3ac169f83c5619b5c00c866354a2e066a0a738cc..11311d2ec37d825e73e2218e60e2606dd3a25a1d 100644 +index 6336fb58f4314be2fe987d7e3de258d977369417..3d4efc2918fd10a63065a052d9e460b49489cf00 100644 --- a/net/minecraft/world/entity/animal/camel/Camel.java +++ b/net/minecraft/world/entity/animal/camel/Camel.java -@@ -83,6 +83,13 @@ public class Camel extends AbstractHorse { +@@ -89,6 +89,13 @@ public class Camel extends AbstractHorse { groundPathNavigation.setCanWalkOverFences(true); } @@ -2158,10 +2088,10 @@ index 3ac169f83c5619b5c00c866354a2e066a0a738cc..11311d2ec37d825e73e2218e60e2606d public void addAdditionalSaveData(CompoundTag compound) { super.addAdditionalSaveData(compound); diff --git a/net/minecraft/world/entity/animal/frog/Frog.java b/net/minecraft/world/entity/animal/frog/Frog.java -index 12c655b60087a2f6122ffa508b3224159d8777b0..9a400c8bf2b54aa5fbcbe65b61670cac5fbebf05 100644 +index 8ffbe420528cd63f30f9b41d4fb0a6519042eadc..054811d807c56018617dc4a8e10af87ed15ad00c 100644 --- a/net/minecraft/world/entity/animal/frog/Frog.java +++ b/net/minecraft/world/entity/animal/frog/Frog.java -@@ -106,6 +106,8 @@ public class Frog extends Animal implements VariantHolder> { +@@ -105,6 +105,8 @@ public class Frog extends Animal { public final AnimationState croakAnimationState = new AnimationState(); public final AnimationState tongueAnimationState = new AnimationState(); public final AnimationState swimIdleAnimationState = new AnimationState(); @@ -2170,7 +2100,7 @@ index 12c655b60087a2f6122ffa508b3224159d8777b0..9a400c8bf2b54aa5fbcbe65b61670cac public Frog(EntityType entityType, Level level) { super(entityType, level); -@@ -113,7 +115,55 @@ public class Frog extends Animal implements VariantHolder> { +@@ -112,7 +114,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); @@ -2226,7 +2156,7 @@ index 12c655b60087a2f6122ffa508b3224159d8777b0..9a400c8bf2b54aa5fbcbe65b61670cac @Override protected Brain.Provider brainProvider() { -@@ -188,6 +238,7 @@ public class Frog extends Animal implements VariantHolder> { +@@ -205,6 +255,7 @@ public class Frog extends Animal { protected void customServerAiStep(ServerLevel level) { ProfilerFiller profilerFiller = Profiler.get(); profilerFiller.push("frogBrain"); @@ -2234,7 +2164,7 @@ index 12c655b60087a2f6122ffa508b3224159d8777b0..9a400c8bf2b54aa5fbcbe65b61670cac this.getBrain().tick(level, this); profilerFiller.pop(); profilerFiller.push("frogActivityUpdate"); -@@ -380,7 +431,7 @@ public class Frog extends Animal implements VariantHolder> { +@@ -389,7 +440,7 @@ public class Frog extends Animal { return level.getBlockState(pos.below()).is(BlockTags.FROGS_SPAWNABLE_ON) && isBrightEnoughToSpawn(level, pos); } @@ -2244,10 +2174,10 @@ index 12c655b60087a2f6122ffa508b3224159d8777b0..9a400c8bf2b54aa5fbcbe65b61670cac super(mob); } diff --git a/net/minecraft/world/entity/animal/frog/Tadpole.java b/net/minecraft/world/entity/animal/frog/Tadpole.java -index 97adf8142cdd322c4873c420ed760e9dee34da23..e888e606b4b14fa6485de7426bc146b6005962af 100644 +index ebdfd3fb6c0de48982d392bb2aa415f3676c6056..4db2d63fbc021f28b8ad8d20cc1cc1bb257b057f 100644 --- a/net/minecraft/world/entity/animal/frog/Tadpole.java +++ b/net/minecraft/world/entity/animal/frog/Tadpole.java -@@ -63,13 +63,50 @@ public class Tadpole extends AbstractFish { +@@ -64,13 +64,50 @@ public class Tadpole extends AbstractFish { MemoryModuleType.IS_PANICKING ); public boolean ageLocked; // Paper @@ -2299,7 +2229,7 @@ index 97adf8142cdd322c4873c420ed760e9dee34da23..e888e606b4b14fa6485de7426bc146b6 @Override protected PathNavigation createNavigation(Level level) { return new WaterBoundPathNavigation(this, level); -@@ -99,6 +136,7 @@ public class Tadpole extends AbstractFish { +@@ -100,6 +137,7 @@ public class Tadpole extends AbstractFish { protected void customServerAiStep(ServerLevel level) { ProfilerFiller profilerFiller = Profiler.get(); profilerFiller.push("tadpoleBrain"); @@ -2308,10 +2238,10 @@ index 97adf8142cdd322c4873c420ed760e9dee34da23..e888e606b4b14fa6485de7426bc146b6 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 7b73d4134d30ba8edb69785a2e2eb2d89b2341a7..302208b566038a3a352ca867dd70a61887bac104 100644 +index c399192687e01bd4a05e4a85d71493d4c3c3e9a8..b922d8c37b89a5762c8ed29e6a5fa545f408511e 100644 --- a/net/minecraft/world/entity/animal/goat/Goat.java +++ b/net/minecraft/world/entity/animal/goat/Goat.java -@@ -111,6 +111,23 @@ public class Goat extends Animal { +@@ -114,6 +114,23 @@ public class Goat extends Animal { .orElseGet(() -> new ItemStack(Items.GOAT_HORN)); } @@ -2335,7 +2265,7 @@ index 7b73d4134d30ba8edb69785a2e2eb2d89b2341a7..302208b566038a3a352ca867dd70a618 @Override protected Brain.Provider brainProvider() { return Brain.provider(MEMORY_TYPES, SENSOR_TYPES); -@@ -188,6 +205,7 @@ public class Goat extends Animal { +@@ -191,6 +208,7 @@ public class Goat extends Animal { protected void customServerAiStep(ServerLevel level) { ProfilerFiller profilerFiller = Profiler.get(); profilerFiller.push("goatBrain"); @@ -2344,10 +2274,10 @@ index 7b73d4134d30ba8edb69785a2e2eb2d89b2341a7..302208b566038a3a352ca867dd70a618 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 d52a8315f1e6876c26c732f4c4caa47bc6bebf6e..828406060e50ff62586929371aafb46ef7d81f92 100644 +index 7c473eea481f5e055cc70512027726f41f0c6f67..8bd9fd0a017b9822129119d7e16e872f0bdc8c2d 100644 --- a/net/minecraft/world/entity/animal/horse/AbstractHorse.java +++ b/net/minecraft/world/entity/animal/horse/AbstractHorse.java -@@ -206,11 +206,21 @@ public abstract class AbstractHorse extends Animal implements ContainerListener, +@@ -126,11 +126,21 @@ public abstract class AbstractHorse extends Animal implements HasCustomInventory protected AbstractHorse(EntityType entityType, Level level) { super(entityType, level); @@ -2369,7 +2299,7 @@ index d52a8315f1e6876c26c732f4c4caa47bc6bebf6e..828406060e50ff62586929371aafb46e 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)); -@@ -221,6 +231,7 @@ public abstract class AbstractHorse extends Animal implements ContainerListener, +@@ -141,6 +151,7 @@ public abstract class AbstractHorse extends Animal implements HasCustomInventory if (this.canPerformRearing()) { this.goalSelector.addGoal(9, new RandomStandGoal(this)); } @@ -2378,7 +2308,7 @@ index d52a8315f1e6876c26c732f4c4caa47bc6bebf6e..828406060e50ff62586929371aafb46e this.addBehaviourGoals(); } diff --git a/net/minecraft/world/entity/animal/horse/Donkey.java b/net/minecraft/world/entity/animal/horse/Donkey.java -index 9b97f3d3675f5051b18a68ff7fa056d859a283e9..ee3fa710e95f2e84f7f9bdce1159d1136815172d 100644 +index 5dff98b5b2e4bba5f874d6a99d034a3905775c9b..66dda36aeb668488076f0c93dc83ab6cc4ec1a31 100644 --- a/net/minecraft/world/entity/animal/horse/Donkey.java +++ b/net/minecraft/world/entity/animal/horse/Donkey.java @@ -16,6 +16,13 @@ public class Donkey extends AbstractChestedHorse { @@ -2393,13 +2323,13 @@ index 9b97f3d3675f5051b18a68ff7fa056d859a283e9..ee3fa710e95f2e84f7f9bdce1159d113 + // Purpur end - Ridables + @Override - protected SoundEvent getAmbientSound() { + 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 c6d0700f29d6c8123e96efe225faf2d99202ac81..361bf346153912bcbfcf962d7f716dfe12ae2a7b 100644 +index a0d85cd6c5306385b074a636166ff8eee2b320ce..5b2d1fedf61880990ca29b51b3d83a19e79047d1 100644 --- a/net/minecraft/world/entity/animal/horse/Horse.java +++ b/net/minecraft/world/entity/animal/horse/Horse.java -@@ -43,6 +43,13 @@ public class Horse extends AbstractHorse implements VariantHolder { +@@ -46,6 +46,13 @@ public class Horse extends AbstractHorse { super(entityType, level); } @@ -2414,10 +2344,10 @@ index c6d0700f29d6c8123e96efe225faf2d99202ac81..361bf346153912bcbfcf962d7f716dfe 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 7d4aad3c45d710488aba540ee5a535098ddd27ee..164a429d432badcb315e8ece406e29e576a11265 100644 +index d4467235e8dc9d10c61dfb6fd9dc32386903dd09..b60fa4cb07d8dc6b52e76b5e9f596bafc815ba2d 100644 --- a/net/minecraft/world/entity/animal/horse/Llama.java +++ b/net/minecraft/world/entity/animal/horse/Llama.java -@@ -78,7 +78,51 @@ public class Llama extends AbstractChestedHorse implements VariantHolder 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 62ca7871d1e5d0fe611948ad43e44c23fdc2d3f8..151c2435810798708544f9cf20bcf77f5e384962 100644 +index d34dcbbdeae41d23d6fb497e0e8da038580b6d01..6c252b8021dbeb2a9ffee8a3744ac0165fd032e8 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 { @@ -2621,6 +2584,51 @@ index 62ca7871d1e5d0fe611948ad43e44c23fdc2d3f8..151c2435810798708544f9cf20bcf77f @Override 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 e94f7b29befd2176fbbc784cd9d08c2d1cd4a94d..cff9bc3d8c9ef1935c25c4001dfd638855062573 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 { + } + // Purpur end - Configurable default collar color + ++ // Purpur start - Ridables ++ @Override ++ public boolean isRidable() { ++ return level().purpurConfig.wolfRidable; ++ } ++ ++ @Override ++ public boolean dismountsUnderwater() { ++ return level().purpurConfig.useDismountsUnderwaterTag ? super.dismountsUnderwater() : !level().purpurConfig.wolfRidableInWater; ++ } ++ ++ public void onMount(Player rider) { ++ super.onMount(rider); ++ setInSittingPose(false); ++ } ++ ++ @Override ++ public boolean isControllable() { ++ return level().purpurConfig.wolfControllable; ++ } ++ // Purpur end - Ridables ++ + @Override + protected void registerGoals() { + this.goalSelector.addGoal(1, new FloatGoal(this)); ++ this.goalSelector.addGoal(1, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables + 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 { + 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)); ++ this.targetSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables + this.targetSelector.addGoal(1, new OwnerHurtByTargetGoal(this)); + 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 --- a/net/minecraft/world/entity/boss/EnderDragonPart.java @@ -2640,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 f7e6866404af629ae0b20425202f592d76df4f3d..bc9564ee22ff9d7f6d819da9601c2d8162d304e1 100644 +index ea9d27a3205b3699b9577f42bb04254bd76e700e..a414934ae4332cc6cf622d4bb19c5937713f92a2 100644 --- a/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java +++ b/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -@@ -90,6 +90,7 @@ public class EnderDragon extends Mob implements Enemy { +@@ -91,6 +91,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 @@ -2651,7 +2659,7 @@ index f7e6866404af629ae0b20425202f592d76df4f3d..bc9564ee22ff9d7f6d819da9601c2d81 public EnderDragon(EntityType entityType, Level level) { super(EntityType.ENDER_DRAGON, level); -@@ -106,6 +107,37 @@ public class EnderDragon extends Mob implements Enemy { +@@ -107,6 +108,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 @@ -2689,7 +2697,7 @@ index f7e6866404af629ae0b20425202f592d76df4f3d..bc9564ee22ff9d7f6d819da9601c2d81 } public void setDragonFight(EndDragonFight dragonFight) { -@@ -120,6 +152,17 @@ public class EnderDragon extends Mob implements Enemy { +@@ -121,6 +153,17 @@ public class EnderDragon extends Mob implements Enemy { return this.fightOrigin; } @@ -2707,7 +2715,7 @@ index f7e6866404af629ae0b20425202f592d76df4f3d..bc9564ee22ff9d7f6d819da9601c2d81 public static AttributeSupplier.Builder createAttributes() { return Mob.createMobAttributes().add(Attributes.MAX_HEALTH, 200.0); } -@@ -169,6 +212,37 @@ public class EnderDragon extends Mob implements Enemy { +@@ -170,6 +213,37 @@ public class EnderDragon extends Mob implements Enemy { @Override public void aiStep() { @@ -2745,7 +2753,7 @@ index f7e6866404af629ae0b20425202f592d76df4f3d..bc9564ee22ff9d7f6d819da9601c2d81 this.processFlappingMovement(); if (this.level().isClientSide) { this.setHealth(this.getHealth()); -@@ -197,6 +271,8 @@ public class EnderDragon extends Mob implements Enemy { +@@ -198,6 +272,8 @@ public class EnderDragon extends Mob implements Enemy { this.oFlapTime = this.flapTime; if (this.isDeadOrDying()) { @@ -2754,7 +2762,7 @@ index f7e6866404af629ae0b20425202f592d76df4f3d..bc9564ee22ff9d7f6d819da9601c2d81 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; -@@ -206,9 +282,9 @@ public class EnderDragon extends Mob implements Enemy { +@@ -207,9 +283,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); @@ -2766,7 +2774,7 @@ index f7e6866404af629ae0b20425202f592d76df4f3d..bc9564ee22ff9d7f6d819da9601c2d81 this.flapTime += f1 * 0.5F; } else { this.flapTime += f1; -@@ -219,7 +295,7 @@ public class EnderDragon extends Mob implements Enemy { +@@ -220,7 +296,7 @@ public class EnderDragon extends Mob implements Enemy { this.flapTime = 0.5F; } else { this.flightHistory.record(this.getY(), this.getYRot()); @@ -2775,7 +2783,7 @@ index f7e6866404af629ae0b20425202f592d76df4f3d..bc9564ee22ff9d7f6d819da9601c2d81 DragonPhaseInstance currentPhase = this.phaseManager.getCurrentPhase(); currentPhase.doServerTick(serverLevel1); if (this.phaseManager.getCurrentPhase() != currentPhase) { -@@ -298,7 +374,7 @@ public class EnderDragon extends Mob implements Enemy { +@@ -295,7 +371,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); @@ -2784,7 +2792,7 @@ index f7e6866404af629ae0b20425202f592d76df4f3d..bc9564ee22ff9d7f6d819da9601c2d81 this.knockBack( serverLevel2, serverLevel2.getEntities( -@@ -348,9 +424,9 @@ public class EnderDragon extends Mob implements Enemy { +@@ -345,9 +421,9 @@ public class EnderDragon extends Mob implements Enemy { } if (this.level() instanceof ServerLevel serverLevel3) { @@ -2797,10 +2805,10 @@ index f7e6866404af629ae0b20425202f592d76df4f3d..bc9564ee22ff9d7f6d819da9601c2d81 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 95cf215e8804cc2d7b681723dfebd1dcb8cbaeee..5d97ae09292fb3209e7362df778e88dc508815a3 100644 +index 2f7da367b58fd9c06c4e012e8eb7f59e5a7f9b6d..15e2c0d566256c4ba175e991d6d7fd4fdcd49c8e 100644 --- a/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/net/minecraft/world/entity/boss/wither/WitherBoss.java -@@ -69,6 +69,7 @@ public class WitherBoss extends Monster implements RangedAttackMob { +@@ -70,6 +70,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; @@ -2808,7 +2816,7 @@ index 95cf215e8804cc2d7b681723dfebd1dcb8cbaeee..5d97ae09292fb3209e7362df778e88dc private boolean canPortal = false; // Paper public final ServerBossEvent bossEvent = (ServerBossEvent)new ServerBossEvent( this.getDisplayName(), BossEvent.BossBarColor.PURPLE, BossEvent.BossBarOverlay.PROGRESS -@@ -78,9 +79,23 @@ public class WitherBoss extends Monster implements RangedAttackMob { +@@ -79,9 +80,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 @@ -2832,7 +2840,7 @@ index 95cf215e8804cc2d7b681723dfebd1dcb8cbaeee..5d97ae09292fb3209e7362df778e88dc this.moveControl = new FlyingMoveControl(this, 10, false); this.setHealth(this.getMaxHealth()); this.xpReward = 50; -@@ -97,6 +112,105 @@ public class WitherBoss extends Monster implements RangedAttackMob { +@@ -98,6 +113,105 @@ public class WitherBoss extends Monster implements RangedAttackMob { } // Purpur end - Summoner API @@ -2938,7 +2946,7 @@ index 95cf215e8804cc2d7b681723dfebd1dcb8cbaeee..5d97ae09292fb3209e7362df778e88dc @Override protected PathNavigation createNavigation(Level level) { FlyingPathNavigation flyingPathNavigation = new FlyingPathNavigation(this, level); -@@ -107,11 +221,13 @@ public class WitherBoss extends Monster implements RangedAttackMob { +@@ -108,11 +222,13 @@ public class WitherBoss extends Monster implements RangedAttackMob { @Override protected void registerGoals() { @@ -2952,7 +2960,7 @@ index 95cf215e8804cc2d7b681723dfebd1dcb8cbaeee..5d97ae09292fb3209e7362df778e88dc this.targetSelector.addGoal(1, new HurtByTargetGoal(this)); this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, LivingEntity.class, 0, false, false, LIVING_ENTITY_SELECTOR)); } -@@ -271,6 +387,15 @@ public class WitherBoss extends Monster implements RangedAttackMob { +@@ -272,6 +388,15 @@ public class WitherBoss extends Monster implements RangedAttackMob { @Override protected void customServerAiStep(ServerLevel level) { @@ -2968,7 +2976,7 @@ index 95cf215e8804cc2d7b681723dfebd1dcb8cbaeee..5d97ae09292fb3209e7362df778e88dc if (this.getInvulnerableTicks() > 0) { int i = this.getInvulnerableTicks() - 1; this.bossEvent.setProgress(1.0F - i / 220.0F); -@@ -577,11 +702,11 @@ public class WitherBoss extends Monster implements RangedAttackMob { +@@ -578,11 +703,11 @@ public class WitherBoss extends Monster implements RangedAttackMob { } public int getAlternativeTarget(int head) { @@ -2983,7 +2991,7 @@ index 95cf215e8804cc2d7b681723dfebd1dcb8cbaeee..5d97ae09292fb3209e7362df778e88dc public boolean isPowered() { diff --git a/net/minecraft/world/entity/monster/AbstractSkeleton.java b/net/minecraft/world/entity/monster/AbstractSkeleton.java -index 1e97cb34aa22ad3150b598232dd339213b236f5c..e186aee80b052b7fc4bfe02763010bfb2d55ea35 100644 +index 96d5750cde19254866beac0c3a69eebef6de5188..0a5de00d41c59528e9f85a7cf82363c45e24d2bc 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 @@ -3002,7 +3010,7 @@ index 1e97cb34aa22ad3150b598232dd339213b236f5c..e186aee80b052b7fc4bfe02763010bfb this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, IronGolem.class, true)); diff --git a/net/minecraft/world/entity/monster/Blaze.java b/net/minecraft/world/entity/monster/Blaze.java -index 419c729502ee708bba9e750f1b951450eca82695..201b08a75c42d90e657c3d56fc6691839e87199c 100644 +index 4ab7072b4290db7fbe72f81b89d3c428b05f737c..971b974c6717a544f7f96c441cd76e9dc8d0cc2c 100644 --- a/net/minecraft/world/entity/monster/Blaze.java +++ b/net/minecraft/world/entity/monster/Blaze.java @@ -33,6 +33,7 @@ public class Blaze extends Monster { @@ -3085,10 +3093,10 @@ index 419c729502ee708bba9e750f1b951450eca82695..201b08a75c42d90e657c3d56fc669183 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 f01670f7106a39957c9b37839fcca0d9f29208f0..2b603c1242aac307f28bae5a85bcaad309f929f5 100644 +index c279d38ed8d5d0fef6dea4afdc3ab308456f31a7..f572ee0a8edd6c4adb17c06083e165d4d8ed8550 100644 --- a/net/minecraft/world/entity/monster/Bogged.java +++ b/net/minecraft/world/entity/monster/Bogged.java -@@ -41,6 +41,23 @@ public class Bogged extends AbstractSkeleton implements Shearable { +@@ -42,6 +42,23 @@ public class Bogged extends AbstractSkeleton implements Shearable { super(entityType, level); } @@ -3141,12 +3149,12 @@ 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 9aff3c911a56885ab3c34bb34bb05e7b1c00d3bd..cdcee233ed0c272e4a68a2a709fe92b21bc6c22c 100644 +index c2327306f093c834da9574f9466236fbec572aec..562641cdb76e7a50706459bee8a2dcdf441588cd 100644 --- a/net/minecraft/world/entity/monster/Creeper.java +++ b/net/minecraft/world/entity/monster/Creeper.java -@@ -51,21 +51,98 @@ public class Creeper extends Monster { +@@ -55,21 +55,98 @@ public class Creeper extends Monster { private int droppedSkulls; - public Entity entityIgniter; // CraftBukkit + public @Nullable Entity entityIgniter; // CraftBukkit private boolean exploding = false; // Purpur - Config to make Creepers explode on death + // Purpur start - Ridables + private int spacebarCharge = 0; @@ -3243,7 +3251,7 @@ index 9aff3c911a56885ab3c34bb34bb05e7b1c00d3bd..cdcee233ed0c272e4a68a2a709fe92b2 this.targetSelector.addGoal(1, new NearestAttackableTargetGoal<>(this, Player.class, true)); this.targetSelector.addGoal(2, new HurtByTargetGoal(this)); } -@@ -312,6 +389,7 @@ public class Creeper extends Monster { +@@ -310,6 +387,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()); @@ -3252,7 +3260,7 @@ index 9aff3c911a56885ab3c34bb34bb05e7b1c00d3bd..cdcee233ed0c272e4a68a2a709fe92b2 } } diff --git a/net/minecraft/world/entity/monster/Drowned.java b/net/minecraft/world/entity/monster/Drowned.java -index 6c1e816356243686f7d0bfa031badc75b54b215d..c1da9ebee7e870a9143e6224be9e9f4e62232459 100644 +index c0afb6f85cecf26bb1a08669ac3fcec8fea6cbfc..be7b7eb8328277dc790b9953161c3603d3bbe873 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 { @@ -3279,7 +3287,7 @@ index 6c1e816356243686f7d0bfa031badc75b54b215d..c1da9ebee7e870a9143e6224be9e9f4e @Override protected void addBehaviourGoals() { this.goalSelector.addGoal(1, new Drowned.DrownedGoToWaterGoal(this, 1.0)); -@@ -408,7 +425,7 @@ public class Drowned extends Zombie implements RangedAttackMob { +@@ -411,7 +428,7 @@ public class Drowned extends Zombie implements RangedAttackMob { } } @@ -3288,7 +3296,7 @@ index 6c1e816356243686f7d0bfa031badc75b54b215d..c1da9ebee7e870a9143e6224be9e9f4e private final Drowned drowned; public DrownedMoveControl(Drowned mob) { -@@ -417,7 +434,7 @@ public class Drowned extends Zombie implements RangedAttackMob { +@@ -420,7 +437,7 @@ public class Drowned extends Zombie implements RangedAttackMob { } @Override @@ -3297,7 +3305,7 @@ index 6c1e816356243686f7d0bfa031badc75b54b215d..c1da9ebee7e870a9143e6224be9e9f4e LivingEntity target = this.drowned.getTarget(); if (this.drowned.wantsToSwim() && this.drowned.isInWater()) { if (target != null && target.getY() > this.drowned.getY() || this.drowned.searchingForLand) { -@@ -437,7 +454,7 @@ public class Drowned extends Zombie implements RangedAttackMob { +@@ -440,7 +457,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(); @@ -3306,7 +3314,7 @@ index 6c1e816356243686f7d0bfa031badc75b54b215d..c1da9ebee7e870a9143e6224be9e9f4e 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)); -@@ -446,7 +463,7 @@ public class Drowned extends Zombie implements RangedAttackMob { +@@ -449,7 +466,7 @@ public class Drowned extends Zombie implements RangedAttackMob { this.drowned.setDeltaMovement(this.drowned.getDeltaMovement().add(0.0, -0.008, 0.0)); } @@ -3316,7 +3324,7 @@ index 6c1e816356243686f7d0bfa031badc75b54b215d..c1da9ebee7e870a9143e6224be9e9f4e } } diff --git a/net/minecraft/world/entity/monster/ElderGuardian.java b/net/minecraft/world/entity/monster/ElderGuardian.java -index 4585b7c867685f8419c4d2b5b90af5946d337f90..c6eeaf7b460408acfdf89d988b47b08eab7df4c5 100644 +index fd33a8b59f40299ab644a4c52921b66a9b6552ca..eccbb27aa7efa6e24e04db114b06c7dbf54f9938 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 { @@ -3339,10 +3347,10 @@ index 4585b7c867685f8419c4d2b5b90af5946d337f90..c6eeaf7b460408acfdf89d988b47b08e 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 8709588083fd5ca6a31d9a8d4096475d117915a1..cf511c78638e0d7aa652d1c880b3cd8172d5b3cf 100644 +index 19a047c99c3afc6f8b23d7279491b156785a2c28..f991e59e896fc39da8f318871168b4c9bb0d8328 100644 --- a/net/minecraft/world/entity/monster/EnderMan.java +++ b/net/minecraft/world/entity/monster/EnderMan.java -@@ -90,9 +90,27 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -91,9 +91,27 @@ public class EnderMan extends Monster implements NeutralMob { this.setPathfindingMalus(PathType.WATER, -1.0F); } @@ -3370,7 +3378,7 @@ index 8709588083fd5ca6a31d9a8d4096475d117915a1..cf511c78638e0d7aa652d1c880b3cd81 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)); -@@ -100,6 +118,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -101,6 +119,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)); @@ -3378,28 +3386,28 @@ index 8709588083fd5ca6a31d9a8d4096475d117915a1..cf511c78638e0d7aa652d1c880b3cd81 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 -@@ -272,7 +291,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -263,7 +282,7 @@ public class EnderMan extends Monster implements NeutralMob { @Override protected void customServerAiStep(ServerLevel level) { -- if (level.isDay() && this.tickCount >= this.targetChangeTime + 600) { -+ if ((getRider() == null || !this.isControllable()) && level.isDay() && this.tickCount >= this.targetChangeTime + 600) { // Purpur - Ridables - no random teleporting +- if (level.isBrightOutside() && this.tickCount >= this.targetChangeTime + 600) { ++ if ((getRider() == null || !this.isControllable()) && level.isBrightOutside() && this.tickCount >= this.targetChangeTime + 600) { // Purpur - Ridables - no random teleporting float lightLevelDependentMagicValue = this.getLightLevelDependentMagicValue(); if (lightLevelDependentMagicValue > 0.5F && level.canSeeSky(this.blockPosition()) -@@ -385,6 +404,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -376,6 +395,7 @@ public class EnderMan extends Monster implements NeutralMob { public boolean hurtServer(ServerLevel level, DamageSource damageSource, float amount) { if (this.isInvulnerableTo(level, damageSource)) { return false; + } else if (getRider() != null && this.isControllable()) { return super.hurtServer(level, damageSource, amount); // Purpur - no teleporting on damage } else if (org.purpurmc.purpur.PurpurConfig.endermanShortHeight && damageSource.is(net.minecraft.world.damagesource.DamageTypes.IN_WALL)) { return false; // Purpur - no suffocation damage if short height - Short enderman height } else { - boolean flag = damageSource.getDirectEntity() instanceof ThrownPotion; + 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 4e00daa6ece386f70502c074084b7b1b64caac2f..f4ab2e984dd87d2372aa10d2cbfd03a3f6fb1249 100644 +index 37eaed1455f34011c24170ca0b05f606bd03fac0..ddb40c13cee7db16fc9b094828356e743e9507f2 100644 --- a/net/minecraft/world/entity/monster/Endermite.java +++ b/net/minecraft/world/entity/monster/Endermite.java -@@ -45,14 +45,33 @@ public class Endermite extends Monster { +@@ -46,14 +46,33 @@ public class Endermite extends Monster { } // Purpur end - Add back player spawned endermite API @@ -3434,7 +3442,7 @@ index 4e00daa6ece386f70502c074084b7b1b64caac2f..f4ab2e984dd87d2372aa10d2cbfd03a3 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 b70ea1af39cada6bb17001c6b65502510e34c4b2..2eaeb0c0c0cb917506443ed1380b81f317961d53 100644 +index cf9f0c60efc4f7cbc275ed9b154c979e82b4d50c..889f6be331b3b7b80de60c414b77d68947477f9e 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 { @@ -3475,10 +3483,10 @@ index b70ea1af39cada6bb17001c6b65502510e34c4b2..2eaeb0c0c0cb917506443ed1380b81f3 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 b97bbfbbc8c1a4f38b4b858ef4915b637cc8a627..00c05fb5736c90c94f6fe51793acf8b65b1d0505 100644 +index 97b4352671910d2deedc6d280f3ce6e645597f3c..e087a2348dee66e0374246e992ed66bb8f18dce0 100644 --- a/net/minecraft/world/entity/monster/Ghast.java +++ b/net/minecraft/world/entity/monster/Ghast.java -@@ -42,11 +42,47 @@ public class Ghast extends FlyingMob implements Enemy { +@@ -43,11 +43,47 @@ public class Ghast extends FlyingMob implements Enemy { this.moveControl = new Ghast.GhastMoveControl(this); } @@ -3526,7 +3534,7 @@ index b97bbfbbc8c1a4f38b4b858ef4915b637cc8a627..00c05fb5736c90c94f6fe51793acf8b6 this.targetSelector .addGoal(1, new NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, (entity, level) -> Math.abs(entity.getY() - this.getY()) <= 4.0)); } -@@ -101,7 +137,7 @@ public class Ghast extends FlyingMob implements Enemy { +@@ -102,7 +138,7 @@ public class Ghast extends FlyingMob implements Enemy { } public static AttributeSupplier.Builder createAttributes() { @@ -3535,7 +3543,7 @@ index b97bbfbbc8c1a4f38b4b858ef4915b637cc8a627..00c05fb5736c90c94f6fe51793acf8b6 } @Override -@@ -191,7 +227,7 @@ public class Ghast extends FlyingMob implements Enemy { +@@ -190,7 +226,7 @@ public class Ghast extends FlyingMob implements Enemy { } } @@ -3544,7 +3552,7 @@ index b97bbfbbc8c1a4f38b4b858ef4915b637cc8a627..00c05fb5736c90c94f6fe51793acf8b6 private final Ghast ghast; private int floatDuration; -@@ -201,7 +237,7 @@ public class Ghast extends FlyingMob implements Enemy { +@@ -200,7 +236,7 @@ public class Ghast extends FlyingMob implements Enemy { } @Override @@ -3588,7 +3596,7 @@ index 969eb604851d1cce50f0f99ed479189061d5de0c..135f83484ac31db7dcc225ba6f94e2e4 return Monster.createMonsterAttributes().add(Attributes.MAX_HEALTH, 100.0).add(Attributes.MOVEMENT_SPEED, 0.5).add(Attributes.ATTACK_DAMAGE, 50.0); } diff --git a/net/minecraft/world/entity/monster/Guardian.java b/net/minecraft/world/entity/monster/Guardian.java -index c8e249b8f7ee8e9c075169ec988f5a0d459a3767..c20c744522459d938c772077e542ba433bc4c80e 100644 +index a36f0181e1aa24538d6c868a8675da89427bdeae..26fb38b9741304f4fe461c929ead0f392255a3de 100644 --- a/net/minecraft/world/entity/monster/Guardian.java +++ b/net/minecraft/world/entity/monster/Guardian.java @@ -66,14 +66,35 @@ public class Guardian extends Monster { @@ -3638,7 +3646,7 @@ index c8e249b8f7ee8e9c075169ec988f5a0d459a3767..c20c744522459d938c772077e542ba43 @@ -344,7 +366,7 @@ public class Guardian extends Monster { @Override public void travel(Vec3 travelVector) { - if (this.isControlledByLocalInstance() && this.isInWater()) { + if (this.isInWater()) { - this.moveRelative(0.1F, travelVector); + this.moveRelative(getRider() != null && this.isControllable() ? getSpeed() : 0.1F, travelVector); // Purpur - Ridables this.move(MoverType.SELF, this.getDeltaMovement()); @@ -3682,7 +3690,7 @@ index c8e249b8f7ee8e9c075169ec988f5a0d459a3767..c20c744522459d938c772077e542ba43 this.guardian.setSpeed(f2); double d3 = Math.sin((this.guardian.tickCount + this.guardian.getId()) * 0.5) * 0.05; diff --git a/net/minecraft/world/entity/monster/Husk.java b/net/minecraft/world/entity/monster/Husk.java -index 6155c544ad2722a49c5e41dd7d7b02fedc56474e..23936305045299352561e866b6a28aa515cd614a 100644 +index 8d6def85583a111841b28f20f58ddb8b8cbd7bc1..0335e85f196363c06597812149e9a93cba57fa9e 100644 --- a/net/minecraft/world/entity/monster/Husk.java +++ b/net/minecraft/world/entity/monster/Husk.java @@ -21,6 +21,23 @@ public class Husk extends Zombie { @@ -3710,7 +3718,7 @@ index 6155c544ad2722a49c5e41dd7d7b02fedc56474e..23936305045299352561e866b6a28aa5 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 40ca12e391b2adac6b132f1832b1427acb3748bc..bd0f4d77260f5b123856fc7e72d5f8e74bb45321 100644 +index 264ec7acfc03eca4a8f5758ad8d3e11714e934b4..d75eb765f271fb7e33d0332079aea024788dc227 100644 --- a/net/minecraft/world/entity/monster/Illusioner.java +++ b/net/minecraft/world/entity/monster/Illusioner.java @@ -57,10 +57,28 @@ public class Illusioner extends SpellcasterIllager implements RangedAttackMob { @@ -3751,7 +3759,7 @@ index 40ca12e391b2adac6b132f1832b1427acb3748bc..bd0f4d77260f5b123856fc7e72d5f8e7 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/MagmaCube.java b/net/minecraft/world/entity/monster/MagmaCube.java -index 905ecbd8b22c785ee4ea18004ac50eb1b7005d3f..f10b204c18b88e9110cebf050b60c23367ea3aa0 100644 +index 889c31cc9257fbbd5df8325ccee9ce39b026ec4b..4a1299d6cee2807522de0c2d0d4745c5810e4121 100644 --- a/net/minecraft/world/entity/monster/MagmaCube.java +++ b/net/minecraft/world/entity/monster/MagmaCube.java @@ -24,6 +24,28 @@ public class MagmaCube extends Slime { @@ -3792,10 +3800,10 @@ index 905ecbd8b22c785ee4ea18004ac50eb1b7005d3f..f10b204c18b88e9110cebf050b60c233 @Override diff --git a/net/minecraft/world/entity/monster/Phantom.java b/net/minecraft/world/entity/monster/Phantom.java -index 9ea3acd5ff3d7751875d61861aa5f6c717d0b5e2..75c6a43a3ab4851a47990402bee49f7e8305cd60 100644 +index 73edb1a4e5daee16fa518c05de24e413847ab65d..2653cf2c353d7ae360201e74c4860a4745dd4948 100644 --- a/net/minecraft/world/entity/monster/Phantom.java +++ b/net/minecraft/world/entity/monster/Phantom.java -@@ -60,6 +60,64 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -61,6 +61,64 @@ public class Phantom extends FlyingMob implements Enemy { this.lookControl = new Phantom.PhantomLookControl(this); } @@ -3860,7 +3868,7 @@ index 9ea3acd5ff3d7751875d61861aa5f6c717d0b5e2..75c6a43a3ab4851a47990402bee49f7e @Override public boolean isFlapping() { return (this.getUniqueFlapTickOffset() + this.tickCount) % TICKS_PER_FLAP == 0; -@@ -72,9 +130,11 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -73,9 +131,11 @@ public class Phantom extends FlyingMob implements Enemy { @Override protected void registerGoals() { @@ -3872,7 +3880,7 @@ index 9ea3acd5ff3d7751875d61861aa5f6c717d0b5e2..75c6a43a3ab4851a47990402bee49f7e this.targetSelector.addGoal(1, new Phantom.PhantomAttackPlayerTargetGoal()); } -@@ -90,6 +150,7 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -91,6 +151,7 @@ public class Phantom extends FlyingMob implements Enemy { private void updatePhantomSizeInfo() { this.refreshDimensions(); @@ -3880,7 +3888,7 @@ index 9ea3acd5ff3d7751875d61861aa5f6c717d0b5e2..75c6a43a3ab4851a47990402bee49f7e this.getAttribute(Attributes.ATTACK_DAMAGE).setBaseValue(6 + this.getPhantomSize()); } -@@ -147,6 +208,7 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -148,6 +209,7 @@ public class Phantom extends FlyingMob implements Enemy { @Override public void aiStep() { if (this.isAlive() && this.shouldBurnInDay && this.isSunBurnTick()) { // Paper - shouldBurnInDay API @@ -3888,7 +3896,7 @@ index 9ea3acd5ff3d7751875d61861aa5f6c717d0b5e2..75c6a43a3ab4851a47990402bee49f7e this.igniteForSeconds(8.0F); } -@@ -411,25 +473,42 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -404,25 +466,42 @@ public class Phantom extends FlyingMob implements Enemy { } } @@ -3936,7 +3944,7 @@ index 9ea3acd5ff3d7751875d61861aa5f6c717d0b5e2..75c6a43a3ab4851a47990402bee49f7e 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 e855ebc5be2cef3b96e2c01a8c1d388e433c0d52..4e799981f04cd17a34f043dda82869adcf16ea98 100644 +index d7b05fed206cfb63a75fab94f687d69fb230de9c..852316c9a9d0860a538eae32001e60f05dc6938f 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 @@ -3976,10 +3984,10 @@ index e855ebc5be2cef3b96e2c01a8c1d388e433c0d52..4e799981f04cd17a34f043dda82869ad 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 6f0fad37a05e9cd53b6e15c119127da492737c95..fb4e91c4f37619ce273ada0909932b32ba3b53f5 100644 +index 85018a01b5d803a91228e2fa02717c2c518a3004..382ef8b0f8d5c5ef6a7698097e9b41b7adc04353 100644 --- a/net/minecraft/world/entity/monster/Ravager.java +++ b/net/minecraft/world/entity/monster/Ravager.java -@@ -66,15 +66,40 @@ public class Ravager extends Raider { +@@ -69,15 +69,40 @@ public class Ravager extends Raider { this.setPathfindingMalus(PathType.LEAVES, 0.0F); } @@ -4020,7 +4028,7 @@ index 6f0fad37a05e9cd53b6e15c119127da492737c95..fb4e91c4f37619ce273ada0909932b32 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())); -@@ -131,7 +156,7 @@ public class Ravager extends Raider { +@@ -134,7 +159,7 @@ public class Ravager extends Raider { @Override public void aiStep() { super.aiStep(); @@ -4030,10 +4038,10 @@ index 6f0fad37a05e9cd53b6e15c119127da492737c95..fb4e91c4f37619ce273ada0909932b32 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 3f2668c79dd3d9e7973c1bba3e424b8220749682..e0a496a0c584e1f90967a8528a73536fd991e774 100644 +index a8c5c2ad80afd03b3fc53127b519b5c2b73bff85..14cddb216b32990c2ce2381a4d6bf6f76c686f95 100644 --- a/net/minecraft/world/entity/monster/Shulker.java +++ b/net/minecraft/world/entity/monster/Shulker.java -@@ -104,12 +104,31 @@ public class Shulker extends AbstractGolem implements VariantHolder(this, Player.class, true)); } diff --git a/net/minecraft/world/entity/monster/Skeleton.java b/net/minecraft/world/entity/monster/Skeleton.java -index f0022458e3e01f6d01df0f8d69b2db73c77fb914..d4426daf3b8079a7e769013d43f44c72b0fce697 100644 +index d1853db754065a79a04e1c4cfa2b54c10b041157..9a197c2be40e0a69f4a68ff045c2395802f0a5f3 100644 --- a/net/minecraft/world/entity/monster/Skeleton.java +++ b/net/minecraft/world/entity/monster/Skeleton.java -@@ -25,6 +25,23 @@ public class Skeleton extends AbstractSkeleton { +@@ -26,6 +26,23 @@ public class Skeleton extends AbstractSkeleton { super(entityType, level); } @@ -4141,18 +4149,18 @@ index f0022458e3e01f6d01df0f8d69b2db73c77fb914..d4426daf3b8079a7e769013d43f44c72 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 8db4cba1be6d7a5538295ba8da1fdaf7a77a16d0..7d31d68ac0fce102af480a47db73409926611428 100644 +index 6a8a5a76400beeaf69a17d53105a7a522ec5791e..9127e99d632bcd01c2f042c33dc87dd49736b96f 100644 --- a/net/minecraft/world/entity/monster/Slime.java +++ b/net/minecraft/world/entity/monster/Slime.java -@@ -57,6 +57,7 @@ public class Slime extends Mob implements Enemy { +@@ -58,6 +58,7 @@ public class Slime extends Mob implements Enemy { public float oSquish; - private boolean wasOnGround; + private boolean wasOnGround = false; private boolean canWander = true; // Paper - Slime pathfinder events + protected boolean actualJump; // Purpur - Ridables public Slime(EntityType entityType, Level level) { super(entityType, level); -@@ -64,12 +65,48 @@ public class Slime extends Mob implements Enemy { +@@ -65,12 +66,48 @@ public class Slime extends Mob implements Enemy { this.moveControl = new Slime.SlimeMoveControl(this); } @@ -4201,7 +4209,7 @@ index 8db4cba1be6d7a5538295ba8da1fdaf7a77a16d0..7d31d68ac0fce102af480a47db734099 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)); -@@ -371,6 +408,7 @@ public class Slime extends Mob implements Enemy { +@@ -359,6 +396,7 @@ public class Slime extends Mob implements Enemy { Vec3 deltaMovement = this.getDeltaMovement(); this.setDeltaMovement(deltaMovement.x, this.getJumpPower(), deltaMovement.z); this.hasImpulse = true; @@ -4209,7 +4217,7 @@ index 8db4cba1be6d7a5538295ba8da1fdaf7a77a16d0..7d31d68ac0fce102af480a47db734099 } @Nullable -@@ -535,7 +573,7 @@ public class Slime extends Mob implements Enemy { +@@ -523,7 +561,7 @@ public class Slime extends Mob implements Enemy { } } @@ -4218,7 +4226,7 @@ index 8db4cba1be6d7a5538295ba8da1fdaf7a77a16d0..7d31d68ac0fce102af480a47db734099 private float yRot; private int jumpDelay; private final Slime slime; -@@ -553,21 +591,33 @@ public class Slime extends Mob implements Enemy { +@@ -541,21 +579,33 @@ public class Slime extends Mob implements Enemy { } public void setWantedMovement(double speed) { @@ -4255,7 +4263,7 @@ index 8db4cba1be6d7a5538295ba8da1fdaf7a77a16d0..7d31d68ac0fce102af480a47db734099 if (this.jumpDelay-- <= 0) { this.jumpDelay = this.slime.getJumpDelay(); if (this.isAggressive) { -@@ -584,7 +634,7 @@ public class Slime extends Mob implements Enemy { +@@ -572,7 +622,7 @@ public class Slime extends Mob implements Enemy { this.mob.setSpeed(0.0F); } } else { @@ -4265,7 +4273,7 @@ index 8db4cba1be6d7a5538295ba8da1fdaf7a77a16d0..7d31d68ac0fce102af480a47db734099 } } diff --git a/net/minecraft/world/entity/monster/Spider.java b/net/minecraft/world/entity/monster/Spider.java -index af0305079a367899708ee2bbac82aefaa9129d2f..ea83335dd0d128b32d2fe513eab82e642b533b4c 100644 +index 60c4ac37bb491af13f9f9bf730b85bbe544cf81d..5721a690859a1232234c9f6a4385f7185d9800ec 100644 --- a/net/minecraft/world/entity/monster/Spider.java +++ b/net/minecraft/world/entity/monster/Spider.java @@ -50,15 +50,34 @@ public class Spider extends Monster { @@ -4304,7 +4312,7 @@ index af0305079a367899708ee2bbac82aefaa9129d2f..ea83335dd0d128b32d2fe513eab82e64 this.targetSelector.addGoal(2, new Spider.SpiderTargetGoal<>(this, Player.class)); this.targetSelector.addGoal(3, new Spider.SpiderTargetGoal<>(this, IronGolem.class)); diff --git a/net/minecraft/world/entity/monster/Stray.java b/net/minecraft/world/entity/monster/Stray.java -index 5fa2b7920a233afb3659b02cbd7ab82307ea9aaf..ed7ba19870a09ac78c1f069040a25e47c4b19d3a 100644 +index f3de370ee4bafc2cca033293d0d8e5c9c2a6737b..4a7dbd1e4d927240433882a95822e9edfc83b827 100644 --- a/net/minecraft/world/entity/monster/Stray.java +++ b/net/minecraft/world/entity/monster/Stray.java @@ -22,6 +22,23 @@ public class Stray extends AbstractSkeleton { @@ -4332,10 +4340,10 @@ index 5fa2b7920a233afb3659b02cbd7ab82307ea9aaf..ed7ba19870a09ac78c1f069040a25e47 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 ce690b564ea8ee055823928169fe605893498f3d..78671f02ef28f4a3b796b357d21fb4c9b64c153e 100644 +index 9d27f55b1a3aa3b51a3b5079d5dd199eefa7d759..bb46a6ec3ad6a7d0943bf61028d5f9abf76bbeb7 100644 --- a/net/minecraft/world/entity/monster/Strider.java +++ b/net/minecraft/world/entity/monster/Strider.java -@@ -94,6 +94,23 @@ public class Strider extends Animal implements ItemSteerable, Saddleable { +@@ -92,6 +92,23 @@ public class Strider extends Animal implements ItemSteerable { this.setPathfindingMalus(PathType.DAMAGE_FIRE, 0.0F); } @@ -4359,7 +4367,7 @@ index ce690b564ea8ee055823928169fe605893498f3d..78671f02ef28f4a3b796b357d21fb4c9 public static boolean checkStriderSpawnRules( EntityType entityType, LevelAccessor level, EntitySpawnReason spawnReason, BlockPos pos, RandomSource random ) { -@@ -156,6 +173,7 @@ public class Strider extends Animal implements ItemSteerable, Saddleable { +@@ -138,6 +155,7 @@ public class Strider extends Animal implements ItemSteerable { @Override protected void registerGoals() { this.goalSelector.addGoal(1, new PanicGoal(this, 1.65)); @@ -4367,17 +4375,17 @@ index ce690b564ea8ee055823928169fe605893498f3d..78671f02ef28f4a3b796b357d21fb4c9 this.goalSelector.addGoal(2, new BreedGoal(this, 1.0)); this.temptGoal = new TemptGoal(this, 1.4, itemStack -> itemStack.is(ItemTags.STRIDER_TEMPT_ITEMS), false); this.goalSelector.addGoal(3, this.temptGoal); -@@ -437,7 +455,7 @@ public class Strider extends Animal implements ItemSteerable, Saddleable { - InteractionResult interactionResult = super.mobInteract(player, hand); - if (!interactionResult.consumesAction()) { +@@ -417,7 +435,7 @@ public class Strider extends Animal implements ItemSteerable { ItemStack itemInHand = player.getItemInHand(hand); -- return (InteractionResult)(itemInHand.is(Items.SADDLE) ? itemInHand.interactLivingEntity(player, this, hand) : InteractionResult.PASS); -+ return (InteractionResult)(itemInHand.is(Items.SADDLE) ? itemInHand.interactLivingEntity(player, this, hand) : tryRide(player, hand)); // Purpur - Ridables + return (InteractionResult)(this.isEquippableInSlot(itemInHand, EquipmentSlot.SADDLE) + ? itemInHand.interactLivingEntity(player, this, hand) +- : InteractionResult.PASS); ++ : tryRide(player, hand)); // Purpur - Ridables } else { 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 af3fef70998cff4e4832adfa2071832324ebd91c..f5d3b8e3a84ffb2fe1c0620edd8857362cf696f5 100644 +index bc74bdc3e13f1d51ed6d31470f3ac6f9855778c9..129c712f767fbbdcc7d0df83f838194102efcd15 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 { @@ -4461,7 +4469,7 @@ index af3fef70998cff4e4832adfa2071832324ebd91c..f5d3b8e3a84ffb2fe1c0620edd885736 } @Override -@@ -301,13 +347,13 @@ public class Vex extends Monster implements TraceableEntity { +@@ -291,13 +337,13 @@ public class Vex extends Monster implements TraceableEntity { } } @@ -4477,7 +4485,7 @@ index af3fef70998cff4e4832adfa2071832324ebd91c..f5d3b8e3a84ffb2fe1c0620edd885736 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(); -@@ -315,7 +361,7 @@ public class Vex extends Monster implements TraceableEntity { +@@ -305,7 +351,7 @@ public class Vex extends Monster implements TraceableEntity { this.operation = MoveControl.Operation.WAIT; Vex.this.setDeltaMovement(Vex.this.getDeltaMovement().scale(0.5)); } else { @@ -4487,10 +4495,10 @@ index af3fef70998cff4e4832adfa2071832324ebd91c..f5d3b8e3a84ffb2fe1c0620edd885736 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 5e7506f64159ac4838eee8594c995387e2fceed0..c1a1bb0be8bc77a1c0f771924f3bb8b4936d367b 100644 +index 79c2248b0dce457fed6d61d4b38eeb92bbc3927e..922c5ce69fc2a3cb53dc230f4efe96bde91cd96a 100644 --- a/net/minecraft/world/entity/monster/Vindicator.java +++ b/net/minecraft/world/entity/monster/Vindicator.java -@@ -55,15 +55,34 @@ public class Vindicator extends AbstractIllager { +@@ -56,15 +56,34 @@ public class Vindicator extends AbstractIllager { super(entityType, level); } @@ -4526,7 +4534,7 @@ index 5e7506f64159ac4838eee8594c995387e2fceed0..c1a1bb0be8bc77a1c0f771924f3bb8b4 this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractVillager.class, true)); diff --git a/net/minecraft/world/entity/monster/Witch.java b/net/minecraft/world/entity/monster/Witch.java -index 9f5676b5fa0f369adb8643391738c5ae33911df7..0b3c78e646d68ef57a7cf5d7eb77a07c497bd216 100644 +index cc156f6d98f193bc98eae75bd5aaf8abe69ace4c..4c5372be4bfc68184a88825214d36477f83edf73 100644 --- a/net/minecraft/world/entity/monster/Witch.java +++ b/net/minecraft/world/entity/monster/Witch.java @@ -56,6 +56,23 @@ public class Witch extends Raider implements RangedAttackMob { @@ -4567,7 +4575,7 @@ index 9f5676b5fa0f369adb8643391738c5ae33911df7..0b3c78e646d68ef57a7cf5d7eb77a07c this.targetSelector.addGoal(2, this.healRaidersGoal); this.targetSelector.addGoal(3, this.attackPlayersGoal); diff --git a/net/minecraft/world/entity/monster/WitherSkeleton.java b/net/minecraft/world/entity/monster/WitherSkeleton.java -index eed8dbefd4d04082dc4e091c858e50309ed5c49b..b0f155564b11ff5fd2430694b937b7826df104ea 100644 +index 3ff71ba1bd29faa4d8380dad9397ab34ef930234..d8c10f5f93e3ca92a49e1df3216256450c62f219 100644 --- a/net/minecraft/world/entity/monster/WitherSkeleton.java +++ b/net/minecraft/world/entity/monster/WitherSkeleton.java @@ -34,6 +34,23 @@ public class WitherSkeleton extends AbstractSkeleton { @@ -4595,10 +4603,10 @@ index eed8dbefd4d04082dc4e091c858e50309ed5c49b..b0f155564b11ff5fd2430694b937b782 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 9b94e74f6317f835500225b087fe93487a7a0b22..b279e33bb14dfea4813bba770daf950f5343419d 100644 +index 4405f465ad5b136390c4204b177967c6e47738dd..636b1e88f6d76a4c0110fa34e89634eee3fbdcdf 100644 --- a/net/minecraft/world/entity/monster/Zoglin.java +++ b/net/minecraft/world/entity/monster/Zoglin.java -@@ -85,6 +85,23 @@ public class Zoglin extends Monster implements HoglinBase { +@@ -86,6 +86,23 @@ public class Zoglin extends Monster implements HoglinBase { this.xpReward = 5; } @@ -4622,7 +4630,7 @@ index 9b94e74f6317f835500225b087fe93487a7a0b22..b279e33bb14dfea4813bba770daf950f @Override protected Brain.Provider brainProvider() { return Brain.provider(MEMORY_TYPES, SENSOR_TYPES); -@@ -250,6 +267,7 @@ public class Zoglin extends Monster implements HoglinBase { +@@ -251,6 +268,7 @@ public class Zoglin extends Monster implements HoglinBase { protected void customServerAiStep(ServerLevel level) { ProfilerFiller profilerFiller = Profiler.get(); profilerFiller.push("zoglinBrain"); @@ -4631,10 +4639,10 @@ index 9b94e74f6317f835500225b087fe93487a7a0b22..b279e33bb14dfea4813bba770daf950f profilerFiller.pop(); this.updateActivity(); diff --git a/net/minecraft/world/entity/monster/Zombie.java b/net/minecraft/world/entity/monster/Zombie.java -index a60c7b828332fc214caea10be9bc1505e2b5d0a9..6c6806fd7204e3610142f0365d158aee33ef8b2c 100644 +index e15df574282e0f5ba5791435020bc6ac96860d15..f9233f0689b26a8c65d60ab9421c1216d436bae7 100644 --- a/net/minecraft/world/entity/monster/Zombie.java +++ b/net/minecraft/world/entity/monster/Zombie.java -@@ -100,11 +100,30 @@ public class Zombie extends Monster { +@@ -104,11 +104,30 @@ public class Zombie extends Monster { this(EntityType.ZOMBIE, level); } @@ -4666,11 +4674,11 @@ index a60c7b828332fc214caea10be9bc1505e2b5d0a9..6c6806fd7204e3610142f0365d158aee } diff --git a/net/minecraft/world/entity/monster/ZombieVillager.java b/net/minecraft/world/entity/monster/ZombieVillager.java -index 9d428724f3564289f262d8c1ca11692d133a61c5..26eebc3a37890e7e79d9cf737f2853623a14015c 100644 +index 6b0bbcf99941d768d235b9f96c3e112a4dfea2fc..2d3636697a544e78113fc1e6902dd216acee070b 100644 --- a/net/minecraft/world/entity/monster/ZombieVillager.java +++ b/net/minecraft/world/entity/monster/ZombieVillager.java -@@ -78,6 +78,23 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { - .ifPresent(profession -> this.setVillagerData(this.getVillagerData().setProfession(profession.value()))); +@@ -77,6 +77,23 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { + .ifPresent(profession -> this.setVillagerData(this.getVillagerData().withProfession(profession))); } + // Purpur start - Ridables @@ -4694,7 +4702,7 @@ index 9d428724f3564289f262d8c1ca11692d133a61c5..26eebc3a37890e7e79d9cf737f285362 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 f1e25786ef687b4680db1cca96a5ae6068e93946..369f1224ea787ae034d86d0e92696882304cb271 100644 +index eff0dec6efe043ad0cb0126061583bc5b67ba0e2..f16aa79ba5137cd6132452c21b0dc81cbf4fac8b 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 { @@ -4722,7 +4730,7 @@ index f1e25786ef687b4680db1cca96a5ae6068e93946..369f1224ea787ae034d86d0e92696882 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 eba1e78352f956618b2796ce7cbe5d6f7e6591b6..57ac66c2de97c9b5940c1f0af663a1a26d2c8b73 100644 +index bdefd070cfebe7f3f792c998f2f53be720cbfbcd..a23d624abb0622d362af0dc816425283e25c479a 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 { @@ -4755,7 +4763,7 @@ index eba1e78352f956618b2796ce7cbe5d6f7e6591b6..57ac66c2de97c9b5940c1f0af663a1a2 @Override protected BodyRotationControl createBodyControl() { return new Creaking.CreakingBodyRotationControl(this); -@@ -580,28 +603,28 @@ public class Creaking extends Monster { +@@ -571,28 +594,28 @@ public class Creaking extends Monster { } } @@ -4791,10 +4799,10 @@ index eba1e78352f956618b2796ce7cbe5d6f7e6591b6..57ac66c2de97c9b5940c1f0af663a1a2 } } diff --git a/net/minecraft/world/entity/monster/hoglin/Hoglin.java b/net/minecraft/world/entity/monster/hoglin/Hoglin.java -index 0ddc0fe06a1b701f88ed8f8041ecd68f7da6c86d..028e09e1d8a14d989b2c19ca62e6544a93e1f1c4 100644 +index 0d05d21158a59dc3aa648c1d6541121c5bb547e6..7c83e0612b8b0d48966aa3808d86daac79753584 100644 --- a/net/minecraft/world/entity/monster/hoglin/Hoglin.java +++ b/net/minecraft/world/entity/monster/hoglin/Hoglin.java -@@ -92,6 +92,23 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { +@@ -95,6 +95,23 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { this.xpReward = 5; } @@ -4818,7 +4826,7 @@ index 0ddc0fe06a1b701f88ed8f8041ecd68f7da6c86d..028e09e1d8a14d989b2c19ca62e6544a @VisibleForTesting public void setTimeInOverworld(int timeInOverworld) { this.timeInOverworld = timeInOverworld; -@@ -160,6 +177,7 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { +@@ -163,6 +180,7 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { protected void customServerAiStep(ServerLevel level) { ProfilerFiller profilerFiller = Profiler.get(); profilerFiller.push("hoglinBrain"); @@ -4827,10 +4835,10 @@ index 0ddc0fe06a1b701f88ed8f8041ecd68f7da6c86d..028e09e1d8a14d989b2c19ca62e6544a 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 0257eada48b35ea024520afe30596beae8a7ef1e..02d748ecb10c3e20aafc0c449b99ca5b6cd80e04 100644 +index e200e974e46de6166d56e051806c00a69aefc9bb..589e3014fb86448456c249c0255186644abb13c2 100644 --- a/net/minecraft/world/entity/monster/piglin/Piglin.java +++ b/net/minecraft/world/entity/monster/piglin/Piglin.java -@@ -151,6 +151,23 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento +@@ -136,6 +136,23 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento this.xpReward = 5; } @@ -4854,7 +4862,7 @@ index 0257eada48b35ea024520afe30596beae8a7ef1e..02d748ecb10c3e20aafc0c449b99ca5b @Override public void addAdditionalSaveData(CompoundTag compound) { super.addAdditionalSaveData(compound); -@@ -346,6 +363,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento +@@ -321,6 +338,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento protected void customServerAiStep(ServerLevel level) { ProfilerFiller profilerFiller = Profiler.get(); profilerFiller.push("piglinBrain"); @@ -4863,7 +4871,7 @@ index 0257eada48b35ea024520afe30596beae8a7ef1e..02d748ecb10c3e20aafc0c449b99ca5b profilerFiller.pop(); PiglinAi.updateActivity(this); diff --git a/net/minecraft/world/entity/monster/piglin/PiglinBrute.java b/net/minecraft/world/entity/monster/piglin/PiglinBrute.java -index 0964b138e87357b7601ddfe937a2b9132afd5478..97241682311797faa93927e0477a7646ce53b2c8 100644 +index 219978cb0341b2d691f44c1146707d875788881e..4c8e49ba064241ec7ac505fa6f5df6d7f9c009b6 100644 --- a/net/minecraft/world/entity/monster/piglin/PiglinBrute.java +++ b/net/minecraft/world/entity/monster/piglin/PiglinBrute.java @@ -65,6 +65,23 @@ public class PiglinBrute extends AbstractPiglin { @@ -4899,10 +4907,10 @@ index 0964b138e87357b7601ddfe937a2b9132afd5478..97241682311797faa93927e0477a7646 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 9f476e587d7df797129e49738f101cccca7e10b7..f968e5c99bdb23b268bc34ea1ba5d54ae9ad0ff9 100644 +index cd28ca290c081d9f5e4498f59d7b87a566f81544..8d61d5347896481f250a18d04d17fd4d2088f633 100644 --- a/net/minecraft/world/entity/monster/warden/Warden.java +++ b/net/minecraft/world/entity/monster/warden/Warden.java -@@ -129,8 +129,32 @@ public class Warden extends Monster implements VibrationSystem { +@@ -126,8 +126,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); @@ -4935,7 +4943,7 @@ index 9f476e587d7df797129e49738f101cccca7e10b7..f968e5c99bdb23b268bc34ea1ba5d54a @Override public Packet getAddEntityPacket(ServerEntity entity) { return new ClientboundAddEntityPacket(this, entity, this.hasPose(Pose.EMERGING) ? 1 : 0); -@@ -394,6 +418,7 @@ public class Warden extends Monster implements VibrationSystem { +@@ -391,6 +415,7 @@ public class Warden extends Monster implements VibrationSystem { @Contract("null->false") public boolean canTargetEntity(@Nullable Entity entity) { @@ -4944,10 +4952,10 @@ index 9f476e587d7df797129e49738f101cccca7e10b7..f968e5c99bdb23b268bc34ea1ba5d54a && 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 7eb291323dfc71189ac4a160d3cb43506957aa9e..a7424ad414b72d2adaf0863bf1055f3eff5e2989 100644 +index 49d43837b88d8f278baa5062aed83a297fe20ed8..15669f9157dc3d3d5e3fb76a668c7e3b43ee8a52 100644 --- a/net/minecraft/world/entity/npc/Villager.java +++ b/net/minecraft/world/entity/npc/Villager.java -@@ -246,6 +246,28 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -249,6 +249,28 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } // Purpur end - Lobotomize stuck villagers @@ -4976,7 +4984,7 @@ index 7eb291323dfc71189ac4a160d3cb43506957aa9e..a7424ad414b72d2adaf0863bf1055f3e @Override public Brain getBrain() { return (Brain)super.getBrain(); -@@ -355,7 +377,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -358,7 +380,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } // Purpur end - Lobotomize stuck villagers // Pufferfish start @@ -4985,7 +4993,7 @@ index 7eb291323dfc71189ac4a160d3cb43506957aa9e..a7424ad414b72d2adaf0863bf1055f3e this.getBrain().tick(level, this); // Paper - EAR 2 } else if (this.isLobotomized && shouldRestock()) restock(); // Purpur - Lobotomize stuck villagers -@@ -415,7 +437,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -418,7 +440,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler return super.mobInteract(player, hand); } else if (this.isBaby()) { this.setUnhappy(); @@ -4994,7 +5002,7 @@ index 7eb291323dfc71189ac4a160d3cb43506957aa9e..a7424ad414b72d2adaf0863bf1055f3e } else { if (!this.level().isClientSide) { boolean isEmpty = this.getOffers().isEmpty(); -@@ -428,9 +450,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -431,9 +453,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } if (isEmpty) { @@ -5008,10 +5016,10 @@ index 7eb291323dfc71189ac4a160d3cb43506957aa9e..a7424ad414b72d2adaf0863bf1055f3e this.startTrading(player); } diff --git a/net/minecraft/world/entity/npc/WanderingTrader.java b/net/minecraft/world/entity/npc/WanderingTrader.java -index fab309dc34eb88f2b9c844078f167885121675c1..0f8ec3abead11c46205cd21290c65ec2b859efdc 100644 +index b0eec451b68a6a2697b1620410f07b25c4d2fda7..21ab5911d52e49ec2de99071cb85ff2daa090dc4 100644 --- a/net/minecraft/world/entity/npc/WanderingTrader.java +++ b/net/minecraft/world/entity/npc/WanderingTrader.java -@@ -76,6 +76,23 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill +@@ -66,6 +66,23 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill } // Purpur end - Allow leashing villagers @@ -5035,7 +5043,7 @@ index fab309dc34eb88f2b9c844078f167885121675c1..0f8ec3abead11c46205cd21290c65ec2 @Override protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); -@@ -137,8 +154,9 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill +@@ -127,8 +144,9 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill if (!this.level().isClientSide) { if (this.getOffers().isEmpty()) { @@ -5047,10 +5055,10 @@ index fab309dc34eb88f2b9c844078f167885121675c1..0f8ec3abead11c46205cd21290c65ec2 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 87aabf903e64a9ab241917967616cf78938658f4..d972774332836c91a2cc31bfd89a21889cb9954b 100644 +index bd4d3a920e015db49436336cc180bc0b937750a0..2417c26a03decf756ad93cd54265277c95c653ca 100644 --- a/net/minecraft/world/entity/player/Player.java +++ b/net/minecraft/world/entity/player/Player.java -@@ -220,6 +220,19 @@ public abstract class Player extends LivingEntity { +@@ -230,6 +230,19 @@ public abstract class Player extends LivingEntity { } // CraftBukkit end @@ -5071,7 +5079,7 @@ index 87aabf903e64a9ab241917967616cf78938658f4..d972774332836c91a2cc31bfd89a2188 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 -index 4880db97135d54fa72f64c108b2bd4ded096438b..bc102b049047d6e2a1d29e10f92cdf5ae2c140bd 100644 +index f736f72b8e76dd82236badcdd2756f0d4da89aa4..0dbfbadcabcf1b719addb034e676cb51b74199d7 100644 --- a/net/minecraft/world/entity/projectile/LlamaSpit.java +++ b/net/minecraft/world/entity/projectile/LlamaSpit.java @@ -33,6 +33,12 @@ public class LlamaSpit extends Projectile { @@ -5088,10 +5096,10 @@ index 4880db97135d54fa72f64c108b2bd4ded096438b..bc102b049047d6e2a1d29e10f92cdf5a 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 70a6f4f8aaebf4e3fc40676480a9e8cbb115c107..a0b909c745ea60cae73def06f9d947345911c5e4 100644 +index c96dc62b9f890335892a8075ed9b1285f98c9e8a..8e95577de28fc4834dcfc3d4fed747d9d14b1618 100644 --- a/net/minecraft/world/entity/projectile/WitherSkull.java +++ b/net/minecraft/world/entity/projectile/WitherSkull.java -@@ -110,6 +110,14 @@ public class WitherSkull extends AbstractHurtingProjectile { +@@ -109,6 +109,14 @@ public class WitherSkull extends AbstractHurtingProjectile { } // Purpur end - Add canSaveToDisk to Entity diff --git a/purpur-server/minecraft-patches/features/0002-Configurable-entity-base-attributes.patch b/purpur-server/minecraft-patches/features/0002-Configurable-entity-base-attributes.patch index 0e68624d5..8f2f93849 100644 --- a/purpur-server/minecraft-patches/features/0002-Configurable-entity-base-attributes.patch +++ b/purpur-server/minecraft-patches/features/0002-Configurable-entity-base-attributes.patch @@ -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 d0313fd5368baa53ec511c8c07fc78a1f1ecec4e..898b1e01026ec1f44cfe60e9f18a997c86e30594 100644 +index 351f92e1627f465a9a292d4a5e5c256a8e323ab3..b6f52326f52ce2885ece346944a321d7c924a470 100644 --- a/net/minecraft/world/entity/GlowSquid.java +++ b/net/minecraft/world/entity/GlowSquid.java -@@ -45,6 +45,13 @@ public class GlowSquid extends Squid { +@@ -46,6 +46,13 @@ public class GlowSquid extends Squid { } // Purpur end - Ridables @@ -23,19 +23,19 @@ index d0313fd5368baa53ec511c8c07fc78a1f1ecec4e..898b1e01026ec1f44cfe60e9f18a997c 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 2de776d7570f97f763033392ceeb8ffdbc0fafcd..b96fc67d28809f66181b1d36b475a8f85d596ea7 100644 +index a6739650bfee639925a63f345ac39c6e0c5c3209..5208518ad9fe86e25b07aeffa9633407aa6f2f1c 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java -@@ -311,6 +311,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -278,6 +278,7 @@ public abstract class LivingEntity extends Entity implements Attackable { protected LivingEntity(EntityType entityType, Level level) { super(entityType, level); this.attributes = new AttributeMap(DefaultAttributes.getSupplier(entityType), this); // Purpur - Ridables + this.initAttributes(); // Purpur - Configurable entity base attributes - this.craftAttributes = new CraftAttributeMap(this.attributes); // CraftBukkit + 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()); -@@ -324,6 +325,8 @@ public abstract class LivingEntity extends Entity implements Attackable { - this.brain = this.makeBrain(new Dynamic<>(nbtOps, nbtOps.createMap(ImmutableMap.of(nbtOps.createString("memories"), nbtOps.emptyMap())))); +@@ -297,6 +298,8 @@ public abstract class LivingEntity extends Entity implements Attackable { + return new EntityEquipment(); } + protected void initAttributes() {}// Purpur - Configurable entity base attributes @@ -44,10 +44,10 @@ index 2de776d7570f97f763033392ceeb8ffdbc0fafcd..b96fc67d28809f66181b1d36b475a8f8 return this.brain; } diff --git a/net/minecraft/world/entity/ambient/Bat.java b/net/minecraft/world/entity/ambient/Bat.java -index e7ea944e77175ee4051b8e7361c502d0cc2115d5..ecbec552e5cd1935f57872d2fb502d3e9743e3d8 100644 +index 99845dde0c633714acefb0bb482d8422d946dd46..581894f58df1df4b50aa537252cb4be6bbcebf80 100644 --- a/net/minecraft/world/entity/ambient/Bat.java +++ b/net/minecraft/world/entity/ambient/Bat.java -@@ -94,6 +94,21 @@ public class Bat extends AmbientCreature { +@@ -95,6 +95,21 @@ public class Bat extends AmbientCreature { } // Purpur end - Ridables @@ -70,7 +70,7 @@ index e7ea944e77175ee4051b8e7361c502d0cc2115d5..ecbec552e5cd1935f57872d2fb502d3e 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 b9bf40c389460d65d2566786ddd6f6740243e9a4..c150ba5f706b3dd51925533300c0432ccf5e2b81 100644 +index e55507fa09001b431519ef9c76bf444d7df3f7ea..d07a708f06ba738369882ddaa968c2de9c6c560e 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 { @@ -89,10 +89,10 @@ index b9bf40c389460d65d2566786ddd6f6740243e9a4..c150ba5f706b3dd51925533300c0432c 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 f066b0acfa0e954f6d71e62962c76afa1f05a4a5..98ce277c5b27591e22daa3c85241be1b8689bfae 100644 +index 74a44f97dcf4fabeac28a2f8b31e9b717d47ea49..d2813c68df511a2702f2b57c31f828730a9a21c8 100644 --- a/net/minecraft/world/entity/animal/Cat.java +++ b/net/minecraft/world/entity/animal/Cat.java -@@ -118,6 +118,14 @@ public class Cat extends TamableAnimal implements VariantHolder itemStack.is(ItemTags.CAT_FOOD), true); + 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 aba1bf732bb78a24dba1f063d65894fde92789ef..509163f409a5b8988a484aedb2f3ddf042d5eb13 100644 +index 8708a6e5a493b6150671b7bdd6b9971371ef309c..40fc57f1c298e1c70fddf8b6eb2f3e8e9e41e60c 100644 --- a/net/minecraft/world/entity/animal/Chicken.java +++ b/net/minecraft/world/entity/animal/Chicken.java -@@ -68,6 +68,14 @@ public class Chicken extends Animal { +@@ -88,6 +88,14 @@ public class Chicken extends Animal { } // Purpur end - Ridables @@ -127,7 +127,7 @@ index aba1bf732bb78a24dba1f063d65894fde92789ef..509163f409a5b8988a484aedb2f3ddf0 protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/animal/Cod.java b/net/minecraft/world/entity/animal/Cod.java -index 6a19086e272363701260801f3c6db9b5c91b8ef5..434e1fabf2e360a8f5f4eefed96e3883aa786d10 100644 +index 651c9243902e3c48fb438913974e996d67d6f746..ed52fbbf93e7a238d0f45981f8629ba8613bf3d4 100644 --- a/net/minecraft/world/entity/animal/Cod.java +++ b/net/minecraft/world/entity/animal/Cod.java @@ -25,6 +25,13 @@ public class Cod extends AbstractSchoolingFish { @@ -145,10 +145,10 @@ index 6a19086e272363701260801f3c6db9b5c91b8ef5..434e1fabf2e360a8f5f4eefed96e3883 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 656babc0c8810a85eb9f78ced1f3ad9551fdc286..d2a4bfa5334f7361067e4adac36ba5a4a4fa6ad8 100644 +index ff1b8c93baccf1d417ef0f9338a6f8d66716dafc..7c4f1eadcbc13010f6b4b5748b8e0d5c822458e1 100644 --- a/net/minecraft/world/entity/animal/Cow.java +++ b/net/minecraft/world/entity/animal/Cow.java -@@ -55,6 +55,14 @@ public class Cow extends Animal { +@@ -45,6 +45,14 @@ public class Cow extends AbstractCow { } // Purpur end - Ridables @@ -161,13 +161,13 @@ index 656babc0c8810a85eb9f78ced1f3ad9551fdc286..d2a4bfa5334f7361067e4adac36ba5a4 + // Purpur end - Configurable entity base attributes + @Override - protected void registerGoals() { - this.goalSelector.addGoal(0, new FloatGoal(this)); + 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 35bce598bb5857356823594d2a001006ce19f835..5b764c686e8759a7b04a7b50708c69629be02c04 100644 +index 144b163a4a82997ca88e906bbadcf5835636aece..932ec7ed4ec102f64fa977835d2c7ebe23afa6e3 100644 --- a/net/minecraft/world/entity/animal/Dolphin.java +++ b/net/minecraft/world/entity/animal/Dolphin.java -@@ -148,6 +148,14 @@ public class Dolphin extends AgeableWaterCreature { +@@ -150,6 +150,14 @@ public class Dolphin extends AgeableWaterCreature { } // Purpur end - Ridables @@ -183,10 +183,10 @@ index 35bce598bb5857356823594d2a001006ce19f835..5b764c686e8759a7b04a7b50708c6962 @Override public SpawnGroupData finalizeSpawn( diff --git a/net/minecraft/world/entity/animal/Fox.java b/net/minecraft/world/entity/animal/Fox.java -index 8b0a813f9dd001c6dd108ba7aac04d134a20fbc1..8bf893837586ae2a9b4ef7564d242e16e4863b5d 100644 +index eb25d655140e425208ee9eeae24ebb756f1b7306..8d69b6bb1d5efd0b47595a12acdd2088cddd5ace 100644 --- a/net/minecraft/world/entity/animal/Fox.java +++ b/net/minecraft/world/entity/animal/Fox.java -@@ -167,6 +167,14 @@ public class Fox extends Animal implements VariantHolder { +@@ -179,6 +179,14 @@ public class Fox extends Animal { } // Purpur end - Ridables @@ -202,10 +202,10 @@ index 8b0a813f9dd001c6dd108ba7aac04d134a20fbc1..8bf893837586ae2a9b4ef7564d242e16 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 223c4796f659a24062a719045e484a22d31ab2f0..37a353cbb0e9b16e0fc92bd1bc8194cb4cd3c13a 100644 +index 3a78342a9ce9b5393a280530b50a8c843e201845..fd0d1abcb34862fc7a812f1e3d96969a5c917352 100644 --- a/net/minecraft/world/entity/animal/IronGolem.java +++ b/net/minecraft/world/entity/animal/IronGolem.java -@@ -90,6 +90,14 @@ public class IronGolem extends AbstractGolem implements NeutralMob { +@@ -91,6 +91,14 @@ public class IronGolem extends AbstractGolem implements NeutralMob { } // Purpur end - Ridables @@ -221,10 +221,10 @@ index 223c4796f659a24062a719045e484a22d31ab2f0..37a353cbb0e9b16e0fc92bd1bc8194cb 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 1292146341022483f78a9128ef9d7a88089274a0..990723c31aa1040a4e45b9857a18d86287ef91b4 100644 +index f04342dd4addb2be47533f12a2a475f12c1869f1..af035af33db993cf7c573b87df576529e98a842e 100644 --- a/net/minecraft/world/entity/animal/MushroomCow.java +++ b/net/minecraft/world/entity/animal/MushroomCow.java -@@ -72,6 +72,13 @@ public class MushroomCow extends Cow implements Shearable, VariantHolder { +@@ -144,6 +144,14 @@ public class Rabbit extends Animal { } // Purpur end - Ridables @@ -385,10 +385,10 @@ index 8cac46951938c80fae3499e8b53709c25d86e9bd..e71161ecc9d4ee3fe29fa3a27d11d63e 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 ebbd6d39c3f5d6c66445c2c743785ed369408389..93eb3cc3605f694337c1604e2db63fed04693617 100644 +index 2b60d92eec3192416b0c39ddaa1fa490d15a6137..8559e7e8c5163eb55b997521dca2e96b5ae3c9bc 100644 --- a/net/minecraft/world/entity/animal/Salmon.java +++ b/net/minecraft/world/entity/animal/Salmon.java -@@ -47,6 +47,13 @@ public class Salmon extends AbstractSchoolingFish implements VariantHolder 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 87a190d8646d8bbed8c182f9f0f7d8c398e63d26..c10ebb66dec26b6ccc223e98effa0b9a68363626 100644 +index 2b38e942492b3324683e05d36ed906462da92ac4..67a93960b3c6fe5725783ebf9f1c5b57e931f58c 100644 --- a/net/minecraft/world/entity/animal/armadillo/Armadillo.java +++ b/net/minecraft/world/entity/animal/armadillo/Armadillo.java -@@ -97,6 +97,14 @@ public class Armadillo extends Animal { +@@ -98,6 +98,14 @@ public class Armadillo extends Animal { } // Purpur end - Ridables @@ -554,10 +516,10 @@ index 87a190d8646d8bbed8c182f9f0f7d8c398e63d26..c10ebb66dec26b6ccc223e98effa0b9a 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 2054e4624da0c9b04ea69b9bf39443c4574d48be..f2f09a529e9db88784ff4299fdf3966046c736ab 100644 +index f3f0f5d7fe79e87b893aa52113f02a774ccc057a..83b1080765eb49a8a606258bb2db8b1a7daea081 100644 --- a/net/minecraft/world/entity/animal/axolotl/Axolotl.java +++ b/net/minecraft/world/entity/animal/axolotl/Axolotl.java -@@ -132,6 +132,14 @@ public class Axolotl extends Animal implements VariantHolder, B +@@ -137,6 +137,14 @@ public class Axolotl extends Animal implements Bucketable { } // Purpur end - Ridables @@ -573,10 +535,10 @@ index 2054e4624da0c9b04ea69b9bf39443c4574d48be..f2f09a529e9db88784ff4299fdf39660 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 11311d2ec37d825e73e2218e60e2606dd3a25a1d..1d7e2358bac193af48dc4b7f5b0295e3bffa152b 100644 +index 3d4efc2918fd10a63065a052d9e460b49489cf00..6c6ef89aacbc328a2cb2dc05022998dbd79cfaf8 100644 --- a/net/minecraft/world/entity/animal/camel/Camel.java +++ b/net/minecraft/world/entity/animal/camel/Camel.java -@@ -322,6 +322,23 @@ public class Camel extends AbstractHorse { +@@ -334,6 +334,23 @@ public class Camel extends AbstractHorse { return this.dashCooldown; } @@ -598,13 +560,13 @@ index 11311d2ec37d825e73e2218e60e2606dd3a25a1d..1d7e2358bac193af48dc4b7f5b0295e3 + // Purpur end - Configurable entity base attributes + @Override - protected SoundEvent getAmbientSound() { + 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 828406060e50ff62586929371aafb46ef7d81f92..56dc7011ed07f0bd5870fbadde2b5c0c630c5edd 100644 +index 8bd9fd0a017b9822129119d7e16e872f0bdc8c2d..601e2912790759487c8d2f270f30a82689c52236 100644 --- a/net/minecraft/world/entity/animal/horse/AbstractHorse.java +++ b/net/minecraft/world/entity/animal/horse/AbstractHorse.java -@@ -218,6 +218,46 @@ public abstract class AbstractHorse extends Animal implements ContainerListener, +@@ -138,6 +138,46 @@ public abstract class AbstractHorse extends Animal implements HasCustomInventory } // Purpur end - Ridables @@ -651,7 +613,7 @@ index 828406060e50ff62586929371aafb46ef7d81f92..56dc7011ed07f0bd5870fbadde2b5c0c @Override protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HorseHasRider(this)); // Purpur - Ridables -@@ -1218,7 +1258,7 @@ public abstract class AbstractHorse extends Animal implements ContainerListener, +@@ -1054,7 +1094,7 @@ public abstract class AbstractHorse extends Animal implements HasCustomInventory spawnGroupData = new AgeableMob.AgeableMobGroupData(0.2F); } @@ -661,7 +623,7 @@ index 828406060e50ff62586929371aafb46ef7d81f92..56dc7011ed07f0bd5870fbadde2b5c0c } diff --git a/net/minecraft/world/entity/animal/horse/Donkey.java b/net/minecraft/world/entity/animal/horse/Donkey.java -index ee3fa710e95f2e84f7f9bdce1159d1136815172d..223f1d109680e3643ab2c8343be22713e89755fd 100644 +index 66dda36aeb668488076f0c93dc83ab6cc4ec1a31..3aa12702cd1f4ef160180bc6ba64a6566cbddc9d 100644 --- a/net/minecraft/world/entity/animal/horse/Donkey.java +++ b/net/minecraft/world/entity/animal/horse/Donkey.java @@ -23,6 +23,23 @@ public class Donkey extends AbstractChestedHorse { @@ -686,13 +648,13 @@ index ee3fa710e95f2e84f7f9bdce1159d1136815172d..223f1d109680e3643ab2c8343be22713 + // Purpur end - Configurable entity base attributes + @Override - protected SoundEvent getAmbientSound() { + 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 361bf346153912bcbfcf962d7f716dfe12ae2a7b..8bd118e82da9e4d4153de0a3efaf6d69e3c4c540 100644 +index 5b2d1fedf61880990ca29b51b3d83a19e79047d1..e0346014de51958976459eeb6677d886e7f261ab 100644 --- a/net/minecraft/world/entity/animal/horse/Horse.java +++ b/net/minecraft/world/entity/animal/horse/Horse.java -@@ -50,6 +50,23 @@ public class Horse extends AbstractHorse implements VariantHolder { +@@ -53,6 +53,23 @@ public class Horse extends AbstractHorse { } // Purpur end - Ridables @@ -717,10 +679,10 @@ index 361bf346153912bcbfcf962d7f716dfe12ae2a7b..8bd118e82da9e4d4153de0a3efaf6d69 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 164a429d432badcb315e8ece406e29e576a11265..58e726dd33f572a31b4910b9ff666c4252fb03a9 100644 +index b60fa4cb07d8dc6b52e76b5e9f596bafc815ba2d..10e7724d424cd39c96b91cf3de4bc4524d9311a4 100644 --- a/net/minecraft/world/entity/animal/horse/Llama.java +++ b/net/minecraft/world/entity/animal/horse/Llama.java -@@ -124,6 +124,23 @@ public class Llama extends AbstractChestedHorse implements VariantHolder 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 bd0f4d77260f5b123856fc7e72d5f8e74bb45321..1d1cf8748e3fba2e2963ad2fa153fbfe990f5087 100644 +index d75eb765f271fb7e33d0332079aea024788dc227..09804a8c789bff4f40277c2697c3f9aed00c4d15 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 { @@ -1210,7 +1210,7 @@ index bd0f4d77260f5b123856fc7e72d5f8e74bb45321..1d1cf8748e3fba2e2963ad2fa153fbfe protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/MagmaCube.java b/net/minecraft/world/entity/monster/MagmaCube.java -index f10b204c18b88e9110cebf050b60c23367ea3aa0..2c6b0fd46d9ed6a8d1ca7e90ebf596dd3f310f0e 100644 +index 4a1299d6cee2807522de0c2d0d4745c5810e4121..bb1364c4a220cc93f7ac01cbaa617561de4cd2e3 100644 --- a/net/minecraft/world/entity/monster/MagmaCube.java +++ b/net/minecraft/world/entity/monster/MagmaCube.java @@ -46,6 +46,28 @@ public class MagmaCube extends Slime { @@ -1243,10 +1243,10 @@ index f10b204c18b88e9110cebf050b60c23367ea3aa0..2c6b0fd46d9ed6a8d1ca7e90ebf596dd 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 75c6a43a3ab4851a47990402bee49f7e8305cd60..08fc2dc0fecfa370c99e877d502149a8ea147e5f 100644 +index 2653cf2c353d7ae360201e74c4860a4745dd4948..2f14561a3722f8175a234ad656ef64d4c58e3b96 100644 --- a/net/minecraft/world/entity/monster/Phantom.java +++ b/net/minecraft/world/entity/monster/Phantom.java -@@ -151,7 +151,10 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -152,7 +152,10 @@ public class Phantom extends FlyingMob 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 75c6a43a3ab4851a47990402bee49f7e8305cd60..08fc2dc0fecfa370c99e877d502149a8 } public int getPhantomSize() { -@@ -176,6 +179,23 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -177,6 +180,23 @@ public class Phantom extends FlyingMob implements Enemy { return true; } @@ -1283,7 +1283,7 @@ index 75c6a43a3ab4851a47990402bee49f7e8305cd60..08fc2dc0fecfa370c99e877d502149a8 public void tick() { super.tick(); diff --git a/net/minecraft/world/entity/monster/Pillager.java b/net/minecraft/world/entity/monster/Pillager.java -index 4e799981f04cd17a34f043dda82869adcf16ea98..9586aa3f3eb61fb0c1224df9d0104da69d7fa6bb 100644 +index 852316c9a9d0860a538eae32001e60f05dc6938f..eb4fcf0e78c39a4b94b7edb733694a87e3103552 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 @@ -1302,10 +1302,10 @@ index 4e799981f04cd17a34f043dda82869adcf16ea98..9586aa3f3eb61fb0c1224df9d0104da6 protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/Ravager.java b/net/minecraft/world/entity/monster/Ravager.java -index 09910d526cdf3484474463ee4ea1ca8501280e45..55ddffbea1b86fa0fd5c5f435a5f7633702c3e5b 100644 +index 382ef8b0f8d5c5ef6a7698097e9b41b7adc04353..3adf0ec66db61b556a06ffe0fe835b57f8520948 100644 --- a/net/minecraft/world/entity/monster/Ravager.java +++ b/net/minecraft/world/entity/monster/Ravager.java -@@ -89,6 +89,14 @@ public class Ravager extends Raider { +@@ -92,6 +92,14 @@ public class Ravager extends Raider { } // Purpur end - Ridables @@ -1321,10 +1321,10 @@ index 09910d526cdf3484474463ee4ea1ca8501280e45..55ddffbea1b86fa0fd5c5f435a5f7633 protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/Shulker.java b/net/minecraft/world/entity/monster/Shulker.java -index e0a496a0c584e1f90967a8528a73536fd991e774..03db684c122a07176aa1365550da935cdb66a1b9 100644 +index 14cddb216b32990c2ce2381a4d6bf6f76c686f95..2b19edafe00be425427f47cac045bf301e3caa39 100644 --- a/net/minecraft/world/entity/monster/Shulker.java +++ b/net/minecraft/world/entity/monster/Shulker.java -@@ -121,6 +121,14 @@ public class Shulker extends AbstractGolem implements VariantHolder variant) { diff --git a/net/minecraft/world/entity/monster/Silverfish.java b/net/minecraft/world/entity/monster/Silverfish.java -index 2e96d3de312c49fafc173e6d0c69ada1b11ae4ef..d3befe91bc65bbc2bc0d8651b78e8c9576cd0f75 100644 +index 19dcc657fd2a995638d5e23c2b043d012d978e79..c200d57841304ba0d7a76fdd9a440fe9f2b25136 100644 --- a/net/minecraft/world/entity/monster/Silverfish.java +++ b/net/minecraft/world/entity/monster/Silverfish.java @@ -56,6 +56,16 @@ public class Silverfish extends Monster { @@ -1370,10 +1370,10 @@ index 2e96d3de312c49fafc173e6d0c69ada1b11ae4ef..d3befe91bc65bbc2bc0d8651b78e8c95 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 4fa5495893ddaa3e4df1b44c16476948b7419370..e33c998233dbe366dfab3d7571e6ae879cd30ed0 100644 +index 9a197c2be40e0a69f4a68ff045c2395802f0a5f3..54941e5f93579db512472d324a48a9b272787b91 100644 --- a/net/minecraft/world/entity/monster/Skeleton.java +++ b/net/minecraft/world/entity/monster/Skeleton.java -@@ -42,6 +42,13 @@ public class Skeleton extends AbstractSkeleton { +@@ -43,6 +43,13 @@ public class Skeleton extends AbstractSkeleton { } // Purpur end - Ridables @@ -1388,10 +1388,10 @@ index 4fa5495893ddaa3e4df1b44c16476948b7419370..e33c998233dbe366dfab3d7571e6ae87 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 7d31d68ac0fce102af480a47db73409926611428..a6613f006521cbe93fee2eff3c348913b5939969 100644 +index 9127e99d632bcd01c2f042c33dc87dd49736b96f..015af82ab82c3676a7b80c01b83eaf61ee28b61b 100644 --- a/net/minecraft/world/entity/monster/Slime.java +++ b/net/minecraft/world/entity/monster/Slime.java -@@ -99,6 +99,39 @@ public class Slime extends Mob implements Enemy { +@@ -100,6 +100,39 @@ public class Slime extends Mob implements Enemy { } // Purpur end - Ridables @@ -1431,7 +1431,7 @@ index 7d31d68ac0fce102af480a47db73409926611428..a6613f006521cbe93fee2eff3c348913 @Override protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables -@@ -129,9 +162,9 @@ public class Slime extends Mob implements Enemy { +@@ -130,9 +163,9 @@ public class Slime extends Mob implements Enemy { this.entityData.set(ID_SIZE, i); this.reapplyPosition(); this.refreshDimensions(); @@ -1444,7 +1444,7 @@ index 7d31d68ac0fce102af480a47db73409926611428..a6613f006521cbe93fee2eff3c348913 this.setHealth(this.getMaxHealth()); } diff --git a/net/minecraft/world/entity/monster/Spider.java b/net/minecraft/world/entity/monster/Spider.java -index ea83335dd0d128b32d2fe513eab82e642b533b4c..38d75a0a024fa1e7b12bfc5e3ab0ec8bb98cb17a 100644 +index 5721a690859a1232234c9f6a4385f7185d9800ec..c2bcf769a85a28616472b050cd09d3d6cc60e81f 100644 --- a/net/minecraft/world/entity/monster/Spider.java +++ b/net/minecraft/world/entity/monster/Spider.java @@ -67,6 +67,14 @@ public class Spider extends Monster { @@ -1463,7 +1463,7 @@ index ea83335dd0d128b32d2fe513eab82e642b533b4c..38d75a0a024fa1e7b12bfc5e3ab0ec8b protected void registerGoals() { this.goalSelector.addGoal(1, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/monster/Stray.java b/net/minecraft/world/entity/monster/Stray.java -index ed7ba19870a09ac78c1f069040a25e47c4b19d3a..0323456fca18450c22bf3999df97ff148a89e4c5 100644 +index 4a7dbd1e4d927240433882a95822e9edfc83b827..b5465b552c5aea7603a54cfdeafe451bfaf38bf2 100644 --- a/net/minecraft/world/entity/monster/Stray.java +++ b/net/minecraft/world/entity/monster/Stray.java @@ -39,6 +39,13 @@ public class Stray extends AbstractSkeleton { @@ -1481,10 +1481,10 @@ index ed7ba19870a09ac78c1f069040a25e47c4b19d3a..0323456fca18450c22bf3999df97ff14 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 78671f02ef28f4a3b796b357d21fb4c9b64c153e..be0dc92bf5ae3da1368a649e9c4e7ff5dbb1c67c 100644 +index bb46a6ec3ad6a7d0943bf61028d5f9abf76bbeb7..4ea92637677997ab4c98da437394f5682ba2389a 100644 --- a/net/minecraft/world/entity/monster/Strider.java +++ b/net/minecraft/world/entity/monster/Strider.java -@@ -111,6 +111,14 @@ public class Strider extends Animal implements ItemSteerable, Saddleable { +@@ -109,6 +109,14 @@ public class Strider extends Animal implements ItemSteerable { } // Purpur end - Ridables @@ -1500,7 +1500,7 @@ index 78671f02ef28f4a3b796b357d21fb4c9b64c153e..be0dc92bf5ae3da1368a649e9c4e7ff5 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 26528bc9a9cffb68f82917a3e70900cfb65304d7..8356906b2c0707e21021bb05f9ca01a95682880a 100644 +index 129c712f767fbbdcc7d0df83f838194102efcd15..43de5ca497f5e3ac3d64345cb998f392852e6e3b 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 { @@ -1519,10 +1519,10 @@ index 26528bc9a9cffb68f82917a3e70900cfb65304d7..8356906b2c0707e21021bb05f9ca01a9 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 c1a1bb0be8bc77a1c0f771924f3bb8b4936d367b..0fc1b458101ba9d98d25c9637337caf0949bb893 100644 +index 922c5ce69fc2a3cb53dc230f4efe96bde91cd96a..01a5357d5359394b61f2456fdee8bf3aadf0ca32 100644 --- a/net/minecraft/world/entity/monster/Vindicator.java +++ b/net/minecraft/world/entity/monster/Vindicator.java -@@ -72,6 +72,14 @@ public class Vindicator extends AbstractIllager { +@@ -73,6 +73,14 @@ public class Vindicator extends AbstractIllager { } // Purpur end - Ridables @@ -1538,7 +1538,7 @@ index c1a1bb0be8bc77a1c0f771924f3bb8b4936d367b..0fc1b458101ba9d98d25c9637337caf0 protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/Witch.java b/net/minecraft/world/entity/monster/Witch.java -index 0b3c78e646d68ef57a7cf5d7eb77a07c497bd216..ff8380246f6c6c805b222a91ac6a1eb0d130558d 100644 +index 4c5372be4bfc68184a88825214d36477f83edf73..2ff6ae7e1c809fa6607cf4d8685ba9b8ac46064c 100644 --- a/net/minecraft/world/entity/monster/Witch.java +++ b/net/minecraft/world/entity/monster/Witch.java @@ -73,6 +73,14 @@ public class Witch extends Raider implements RangedAttackMob { @@ -1557,7 +1557,7 @@ index 0b3c78e646d68ef57a7cf5d7eb77a07c497bd216..ff8380246f6c6c805b222a91ac6a1eb0 protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/WitherSkeleton.java b/net/minecraft/world/entity/monster/WitherSkeleton.java -index b0f155564b11ff5fd2430694b937b7826df104ea..3342f2d92830049837636ff10b5e52f0d85fbd2c 100644 +index d8c10f5f93e3ca92a49e1df3216256450c62f219..213530a2378411db2bc597ba7e0bb68cfdb3ebc9 100644 --- a/net/minecraft/world/entity/monster/WitherSkeleton.java +++ b/net/minecraft/world/entity/monster/WitherSkeleton.java @@ -51,6 +51,14 @@ public class WitherSkeleton extends AbstractSkeleton { @@ -1576,10 +1576,10 @@ index b0f155564b11ff5fd2430694b937b7826df104ea..3342f2d92830049837636ff10b5e52f0 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 b279e33bb14dfea4813bba770daf950f5343419d..132b38d717ac3c5acc64a5ec519f345ac57021d8 100644 +index 636b1e88f6d76a4c0110fa34e89634eee3fbdcdf..9f5db385dabb01bda033aecaebd1d9b7c9e2ed0b 100644 --- a/net/minecraft/world/entity/monster/Zoglin.java +++ b/net/minecraft/world/entity/monster/Zoglin.java -@@ -102,6 +102,14 @@ public class Zoglin extends Monster implements HoglinBase { +@@ -103,6 +103,14 @@ public class Zoglin extends Monster implements HoglinBase { } // Purpur end - Ridables @@ -1595,10 +1595,10 @@ index b279e33bb14dfea4813bba770daf950f5343419d..132b38d717ac3c5acc64a5ec519f345a 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 9f476680247f50ca9381a4919dadc15f210a543c..73dfc60d9d30ce53a75eaac2630cdd9a8c508ccc 100644 +index f9233f0689b26a8c65d60ab9421c1216d436bae7..126c5982c1b274cad67649b8e26391c7c4011bab 100644 --- a/net/minecraft/world/entity/monster/Zombie.java +++ b/net/minecraft/world/entity/monster/Zombie.java -@@ -117,6 +117,14 @@ public class Zombie extends Monster { +@@ -121,6 +121,14 @@ public class Zombie extends Monster { } // Purpur end - Ridables @@ -1613,7 +1613,7 @@ index 9f476680247f50ca9381a4919dadc15f210a543c..73dfc60d9d30ce53a75eaac2630cdd9a @Override protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables -@@ -631,7 +639,7 @@ public class Zombie extends Monster { +@@ -633,7 +641,7 @@ public class Zombie extends Monster { } protected void randomizeReinforcementsChance() { @@ -1623,10 +1623,10 @@ index 9f476680247f50ca9381a4919dadc15f210a543c..73dfc60d9d30ce53a75eaac2630cdd9a @Override diff --git a/net/minecraft/world/entity/monster/ZombieVillager.java b/net/minecraft/world/entity/monster/ZombieVillager.java -index 33bb29bc03bce90750b3b9376a6ed848208a569d..578cfc33a493b5ebc2ed42733577129a8953a461 100644 +index 2d3636697a544e78113fc1e6902dd216acee070b..239e78203dec09653ef8e001aef3e4b95b0f7a7c 100644 --- a/net/minecraft/world/entity/monster/ZombieVillager.java +++ b/net/minecraft/world/entity/monster/ZombieVillager.java -@@ -95,6 +95,18 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { +@@ -94,6 +94,18 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { } // Purpur end - Ridables @@ -1646,7 +1646,7 @@ index 33bb29bc03bce90750b3b9376a6ed848208a569d..578cfc33a493b5ebc2ed42733577129a 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 369f1224ea787ae034d86d0e92696882304cb271..1424954f5b4cf0fbe821425cd741b4b5c1bfed50 100644 +index f16aa79ba5137cd6132452c21b0dc81cbf4fac8b..ada982eb4dca7c75a5fd3576d3793f1f12819e51 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 { @@ -1664,7 +1664,7 @@ index 369f1224ea787ae034d86d0e92696882304cb271..1424954f5b4cf0fbe821425cd741b4b5 @Override public void setPersistentAngerTarget(@Nullable UUID target) { this.persistentAngerTarget = target; -@@ -262,7 +270,7 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { +@@ -265,7 +273,7 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { @Override protected void randomizeReinforcementsChance() { @@ -1674,7 +1674,7 @@ index 369f1224ea787ae034d86d0e92696882304cb271..1424954f5b4cf0fbe821425cd741b4b5 @Nullable diff --git a/net/minecraft/world/entity/monster/creaking/Creaking.java b/net/minecraft/world/entity/monster/creaking/Creaking.java -index 57ac66c2de97c9b5940c1f0af663a1a26d2c8b73..887a81ea82b86edceaa46eb2032f53fccb84e158 100644 +index a23d624abb0622d362af0dc816425283e25c479a..d19f34616942177e736ba507c27ec93ba1e1e903 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 { @@ -1693,10 +1693,10 @@ index 57ac66c2de97c9b5940c1f0af663a1a26d2c8b73..887a81ea82b86edceaa46eb2032f53fc 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 028e09e1d8a14d989b2c19ca62e6544a93e1f1c4..54924cd7c84cbcd22ffc0bd37fc24f24e73c18bc 100644 +index 7c83e0612b8b0d48966aa3808d86daac79753584..6b0eb12e9d879f22098eb2294d0d73db6ca266ed 100644 --- a/net/minecraft/world/entity/monster/hoglin/Hoglin.java +++ b/net/minecraft/world/entity/monster/hoglin/Hoglin.java -@@ -109,6 +109,14 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { +@@ -112,6 +112,14 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { } // Purpur end - Ridables @@ -1712,10 +1712,10 @@ index 028e09e1d8a14d989b2c19ca62e6544a93e1f1c4..54924cd7c84cbcd22ffc0bd37fc24f24 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 02d748ecb10c3e20aafc0c449b99ca5b6cd80e04..897c57263ab7347987b289016a71d11f693bc8b2 100644 +index 589e3014fb86448456c249c0255186644abb13c2..b37038568b83db1602dca06aa06d72c4c4978cdd 100644 --- a/net/minecraft/world/entity/monster/piglin/Piglin.java +++ b/net/minecraft/world/entity/monster/piglin/Piglin.java -@@ -168,6 +168,14 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento +@@ -153,6 +153,14 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento } // Purpur end - Ridables @@ -1731,7 +1731,7 @@ index 02d748ecb10c3e20aafc0c449b99ca5b6cd80e04..897c57263ab7347987b289016a71d11f public void addAdditionalSaveData(CompoundTag compound) { super.addAdditionalSaveData(compound); diff --git a/net/minecraft/world/entity/monster/piglin/PiglinBrute.java b/net/minecraft/world/entity/monster/piglin/PiglinBrute.java -index 97241682311797faa93927e0477a7646ce53b2c8..eb82252cd87797927e153974b9280b5eaa251080 100644 +index 4c8e49ba064241ec7ac505fa6f5df6d7f9c009b6..f52aba35ee7e202074cda8fb4dfd6a7d9ded1f09 100644 --- a/net/minecraft/world/entity/monster/piglin/PiglinBrute.java +++ b/net/minecraft/world/entity/monster/piglin/PiglinBrute.java @@ -82,6 +82,14 @@ public class PiglinBrute extends AbstractPiglin { @@ -1750,10 +1750,10 @@ index 97241682311797faa93927e0477a7646ce53b2c8..eb82252cd87797927e153974b9280b5e 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 52b54c59efd68a955a6e7cc49b01f614043c505d..c71d0f8efacb60e49395567fdc0c1c1e6e6f5aa8 100644 +index 15669f9157dc3d3d5e3fb76a668c7e3b43ee8a52..b2687ee9494d491971fa4124382b214d7c3ba9be 100644 --- a/net/minecraft/world/entity/npc/Villager.java +++ b/net/minecraft/world/entity/npc/Villager.java -@@ -268,6 +268,14 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -271,6 +271,14 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } // Purpur end - Ridables @@ -1769,10 +1769,10 @@ index 52b54c59efd68a955a6e7cc49b01f614043c505d..c71d0f8efacb60e49395567fdc0c1c1e 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 7e4d14d30eb3f06c0c7426e09084355ab4f3857d..b5af32a431b5ffe20b32bd82ccfae9b8343d0592 100644 +index 21ab5911d52e49ec2de99071cb85ff2daa090dc4..4abc4037a059b9c1dc58bf7a776e6269c5188868 100644 --- a/net/minecraft/world/entity/npc/WanderingTrader.java +++ b/net/minecraft/world/entity/npc/WanderingTrader.java -@@ -93,6 +93,13 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill +@@ -83,6 +83,13 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill } // Purpur end - Ridables diff --git a/purpur-server/minecraft-patches/features/0003-Barrels-and-enderchests-6-rows.patch b/purpur-server/minecraft-patches/features/0003-Barrels-and-enderchests-6-rows.patch index c44228c21..3650fe2a9 100644 --- a/purpur-server/minecraft-patches/features/0003-Barrels-and-enderchests-6-rows.patch +++ b/purpur-server/minecraft-patches/features/0003-Barrels-and-enderchests-6-rows.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Barrels and enderchests 6 rows diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java -index 2d09f2a2c97f29ac0d941b7a3fb941102a5d545e..94abb9d8f6381aee000dbd0720477db8b7ca279c 100644 +index ccea424d813a4c137fa15612b7bcf4fdb5c9a811..a1304bc3b1ebb9fa246004ae418481d48c46975c 100644 --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java -@@ -1027,6 +1027,27 @@ public abstract class PlayerList { +@@ -1029,6 +1029,27 @@ public abstract class PlayerList { player.getBukkitEntity().recalculatePermissions(); // CraftBukkit this.server.getCommands().sendCommands(player); } // Paper - Add sendOpLevel API @@ -37,10 +37,10 @@ index 2d09f2a2c97f29ac0d941b7a3fb941102a5d545e..94abb9d8f6381aee000dbd0720477db8 public boolean isWhiteListed(GameProfile profile) { diff --git a/net/minecraft/world/entity/player/Player.java b/net/minecraft/world/entity/player/Player.java -index d0321875d2a2b612b438cc7973a7e9f172a61778..15308ff3ed5835e3b8f41e7ddc2045f424e14660 100644 +index 2417c26a03decf756ad93cd54265277c95c653ca..87c8bc6f9128d2fcb19628bc3ef354e517b632bb 100644 --- a/net/minecraft/world/entity/player/Player.java +++ b/net/minecraft/world/entity/player/Player.java -@@ -202,6 +202,7 @@ public abstract class Player extends LivingEntity { +@@ -212,6 +212,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 @@ -49,7 +49,7 @@ index d0321875d2a2b612b438cc7973a7e9f172a61778..15308ff3ed5835e3b8f41e7ddc2045f4 // CraftBukkit start public boolean fauxSleeping; diff --git a/net/minecraft/world/inventory/ChestMenu.java b/net/minecraft/world/inventory/ChestMenu.java -index 280169afbd637eeb67ddf7eaeb4eecd464a128d5..ba7730a24831efa33de4c5ffce57bfa7177f89d6 100644 +index 0fffa384f928ab84451331380968fb4650eafe26..0399092c9f7a43ac100c11505176ade6d95a39da 100644 --- a/net/minecraft/world/inventory/ChestMenu.java +++ b/net/minecraft/world/inventory/ChestMenu.java @@ -66,10 +66,30 @@ public class ChestMenu extends AbstractContainerMenu { @@ -84,7 +84,7 @@ index 280169afbd637eeb67ddf7eaeb4eecd464a128d5..ba7730a24831efa33de4c5ffce57bfa7 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 a6a359bab2a727f4631b633a8bb370dd40decc75..d2d75e5c34c97300ce5da8c7ea70958aba31fa4a 100644 +index bc2b95973192069fc64581b59583b19df876f55d..b68d57eee9605dba8ecd31f82185ec3ea81d60c1 100644 --- a/net/minecraft/world/inventory/PlayerEnderChestContainer.java +++ b/net/minecraft/world/inventory/PlayerEnderChestContainer.java @@ -25,11 +25,18 @@ public class PlayerEnderChestContainer extends SimpleContainer { @@ -108,7 +108,7 @@ index a6a359bab2a727f4631b633a8bb370dd40decc75..d2d75e5c34c97300ce5da8c7ea70958a this.activeChest = enderChestBlockEntity; } diff --git a/net/minecraft/world/level/block/EnderChestBlock.java b/net/minecraft/world/level/block/EnderChestBlock.java -index f5533960708bdbaf2eacefbc7c7c3123b7d26502..17aa27885b4431bf7b98799e02d080b5a0ecbbf1 100644 +index 5077a9ff7b78801bdc53536a37aee07b8d86ee4d..72794e204f7fcc31ece94913b7fd9f36ae022b10 100644 --- a/net/minecraft/world/level/block/EnderChestBlock.java +++ b/net/minecraft/world/level/block/EnderChestBlock.java @@ -85,8 +85,8 @@ public class EnderChestBlock extends AbstractChestBlock i @@ -159,13 +159,13 @@ index f5533960708bdbaf2eacefbc7c7c3123b7d26502..17aa27885b4431bf7b98799e02d080b5 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 0f808855f58281578c2758513787f0f7330c9291..9f6063089f0aa3a68d26ae7cfe39379123ab2f47 100644 +index 027502d0af5512c31878978c4d05c52fa3029cca..f5216355ef13593bc7333d50a003012e25b3d7ea 100644 --- a/net/minecraft/world/level/block/entity/BarrelBlockEntity.java +++ b/net/minecraft/world/level/block/entity/BarrelBlockEntity.java -@@ -55,7 +55,17 @@ public class BarrelBlockEntity extends RandomizableContainerBlockEntity { - this.maxStack = i; +@@ -56,7 +56,17 @@ public class BarrelBlockEntity extends RandomizableContainerBlockEntity { } // CraftBukkit end + - private NonNullList items = NonNullList.withSize(27, ItemStack.EMPTY); + // Purpur start - Barrels and enderchests 6 rows + private NonNullList items = NonNullList.withSize(switch (org.purpurmc.purpur.PurpurConfig.barrelRows) { @@ -181,7 +181,7 @@ index 0f808855f58281578c2758513787f0f7330c9291..9f6063089f0aa3a68d26ae7cfe393791 public final ContainerOpenersCounter openersCounter = new ContainerOpenersCounter() { @Override protected void onOpen(Level level, BlockPos pos, BlockState state) { -@@ -107,7 +117,16 @@ public class BarrelBlockEntity extends RandomizableContainerBlockEntity { +@@ -108,7 +118,16 @@ public class BarrelBlockEntity extends RandomizableContainerBlockEntity { @Override public int getContainerSize() { @@ -199,7 +199,7 @@ index 0f808855f58281578c2758513787f0f7330c9291..9f6063089f0aa3a68d26ae7cfe393791 } @Override -@@ -127,7 +146,16 @@ public class BarrelBlockEntity extends RandomizableContainerBlockEntity { +@@ -128,7 +147,16 @@ public class BarrelBlockEntity extends RandomizableContainerBlockEntity { @Override protected AbstractContainerMenu createMenu(int id, Inventory player) { diff --git a/purpur-server/minecraft-patches/features/0005-Chickens-can-retaliate.patch b/purpur-server/minecraft-patches/features/0005-Chickens-can-retaliate.patch index 9156be5d5..eb8fb9cec 100644 --- a/purpur-server/minecraft-patches/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 509163f409a5b8988a484aedb2f3ddf042d5eb13..d718f0ed362c49803260dceed64bd93e2b6744fc 100644 +index 40fc57f1c298e1c70fddf8b6eb2f3e8e9e41e60c..fc3291b5e1a2c3956802b268abb58189b24a7a16 100644 --- a/net/minecraft/world/entity/animal/Chicken.java +++ b/net/minecraft/world/entity/animal/Chicken.java -@@ -73,6 +73,11 @@ public class Chicken extends Animal { +@@ -93,6 +93,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 509163f409a5b8988a484aedb2f3ddf042d5eb13..d718f0ed362c49803260dceed64bd93e } // Purpur end - Configurable entity base attributes -@@ -80,13 +85,21 @@ public class Chicken extends Animal { +@@ -100,13 +105,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 509163f409a5b8988a484aedb2f3ddf042d5eb13..d718f0ed362c49803260dceed64bd93e } @Override -@@ -95,7 +108,7 @@ public class Chicken extends Animal { +@@ -115,7 +128,7 @@ public class Chicken extends Animal { } public static AttributeSupplier.Builder createAttributes() { diff --git a/purpur-server/minecraft-patches/features/0006-Minecart-settings-and-WASD-controls.patch b/purpur-server/minecraft-patches/features/0006-Minecart-settings-and-WASD-controls.patch index 51ac344e0..c4cf26cfb 100644 --- a/purpur-server/minecraft-patches/features/0006-Minecart-settings-and-WASD-controls.patch +++ b/purpur-server/minecraft-patches/features/0006-Minecart-settings-and-WASD-controls.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Minecart settings and WASD controls diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java -index 7ebecee1de098c218304868b1223b914941cae8a..561ee18dfd063f1853a1389f245e8b29bc0b68a7 100644 +index cf26a10e4ccf0f28817ce53b3c5bf1df02259273..580e79d19a728deed4719a8d2e5d70b532397781 100644 --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java -@@ -1247,6 +1247,11 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -1149,6 +1149,11 @@ public class ServerPlayer extends Player { } else { // Purpur start - Add boat fall damage config if (damageSource.is(net.minecraft.tags.DamageTypeTags.IS_FALL)) { @@ -21,13 +21,13 @@ index 7ebecee1de098c218304868b1223b914941cae8a..561ee18dfd063f1853a1389f245e8b29 return false; } diff --git a/net/minecraft/world/entity/vehicle/AbstractMinecart.java b/net/minecraft/world/entity/vehicle/AbstractMinecart.java -index 9e15e7159cf98b3928110df9eae6de93793bf44e..6df4d736d94b9e49a3eb3d59a329e37127aa64cd 100644 +index 99617c08cbd989092ba357d8df928786fd04c89a..9d88b260528c3cea2c5fe8e2760094b0a8a35667 100644 --- a/net/minecraft/world/entity/vehicle/AbstractMinecart.java +++ b/net/minecraft/world/entity/vehicle/AbstractMinecart.java -@@ -83,6 +83,10 @@ public abstract class AbstractMinecart extends VehicleEntity { +@@ -103,6 +103,10 @@ public abstract class AbstractMinecart extends VehicleEntity { private double flyingY = 0.95; private double flyingZ = 0.95; - public Double maxSpeed; + public @Nullable Double maxSpeed; + // Purpur start - Minecart settings and WASD controls + public double storedMaxSpeed; + public boolean isNewBehavior; @@ -35,7 +35,7 @@ index 9e15e7159cf98b3928110df9eae6de93793bf44e..6df4d736d94b9e49a3eb3d59a329e371 public net.kyori.adventure.util.TriState frictionState = net.kyori.adventure.util.TriState.NOT_SET; // Paper - Friction API // CraftBukkit end -@@ -91,8 +95,13 @@ public abstract class AbstractMinecart extends VehicleEntity { +@@ -111,8 +115,13 @@ public abstract class AbstractMinecart extends VehicleEntity { this.blocksBuilding = true; if (useExperimentalMovement(level)) { this.behavior = new NewMinecartBehavior(this); @@ -49,7 +49,7 @@ index 9e15e7159cf98b3928110df9eae6de93793bf44e..6df4d736d94b9e49a3eb3d59a329e371 } } -@@ -258,6 +267,14 @@ public abstract class AbstractMinecart extends VehicleEntity { +@@ -277,6 +286,14 @@ public abstract class AbstractMinecart extends VehicleEntity { @Override public void tick() { @@ -64,7 +64,7 @@ index 9e15e7159cf98b3928110df9eae6de93793bf44e..6df4d736d94b9e49a3eb3d59a329e371 // CraftBukkit start double prevX = this.getX(); double prevY = this.getY(); -@@ -394,15 +411,61 @@ public abstract class AbstractMinecart extends VehicleEntity { +@@ -384,15 +401,61 @@ public abstract class AbstractMinecart extends VehicleEntity { this.behavior.moveAlongTrack(level); } diff --git a/purpur-server/minecraft-patches/features/0007-Villagers-follow-emerald-blocks.patch b/purpur-server/minecraft-patches/features/0007-Villagers-follow-emerald-blocks.patch index 64b658e5b..fc5022641 100644 --- a/purpur-server/minecraft-patches/features/0007-Villagers-follow-emerald-blocks.patch +++ b/purpur-server/minecraft-patches/features/0007-Villagers-follow-emerald-blocks.patch @@ -5,7 +5,7 @@ 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 61ed4d687120fcbb7b91863e400f3657ebcde687..e773c426567964fc8269237d71c3434a5473985c 100644 +index 75d8fe03558ba38caf46c826dfea5208f88bde52..46022a0aabc9c319deeb75913d356eeb74f1a12c 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 { @@ -31,23 +31,22 @@ index 438d6347778a94b4fe430320b268a2d67afa209a..f88f618d34fb343b31de3af1a875d663 @Override diff --git a/net/minecraft/world/entity/npc/AbstractVillager.java b/net/minecraft/world/entity/npc/AbstractVillager.java -index a71d16d968bb90fd7aca6f01a3dd56df4f9a7ce6..b4e79cac5611942240ce85120f7bbee329ae2fb8 100644 +index 1d3381f1481bb2b192bb78462c85c2a185d94ad5..e574c38e1c1c13fc2f96340138f784697cef8c48 100644 --- a/net/minecraft/world/entity/npc/AbstractVillager.java +++ b/net/minecraft/world/entity/npc/AbstractVillager.java -@@ -45,6 +45,8 @@ import org.bukkit.event.entity.VillagerAcquireTradeEvent; - // CraftBukkit end +@@ -35,6 +35,7 @@ import net.minecraft.world.level.portal.TeleportTransition; + import net.minecraft.world.phys.Vec3; public abstract class AbstractVillager extends AgeableMob implements InventoryCarrier, Npc, Merchant { + static final net.minecraft.world.item.crafting.Ingredient TEMPT_ITEMS = net.minecraft.world.item.crafting.Ingredient.of(net.minecraft.world.level.block.Blocks.EMERALD_BLOCK.asItem()); // Purpur - Villagers follow emerald blocks -+ - // CraftBukkit start - @Override - public CraftMerchant getCraftMerchant() { + private static final EntityDataAccessor DATA_UNHAPPY_COUNTER = SynchedEntityData.defineId(AbstractVillager.class, EntityDataSerializers.INT); + 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 c71d0f8efacb60e49395567fdc0c1c1e6e6f5aa8..2f685a186b2dc27e70cddd5c4951c27e7ee3ef53 100644 +index b2687ee9494d491971fa4124382b214d7c3ba9be..005af720a6385056f09f939813e97c10a7414a91 100644 --- a/net/minecraft/world/entity/npc/Villager.java +++ b/net/minecraft/world/entity/npc/Villager.java -@@ -265,6 +265,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -268,6 +268,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler @Override protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); @@ -55,7 +54,7 @@ index c71d0f8efacb60e49395567fdc0c1c1e6e6f5aa8..2f685a186b2dc27e70cddd5c4951c27e } // Purpur end - Ridables -@@ -273,6 +274,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -276,6 +277,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); @@ -63,7 +62,7 @@ index c71d0f8efacb60e49395567fdc0c1c1e6e6f5aa8..2f685a186b2dc27e70cddd5c4951c27e } // Purpur end - Configurable entity base attributes -@@ -341,7 +343,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -344,7 +346,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } public static AttributeSupplier.Builder createAttributes() { @@ -73,10 +72,10 @@ index c71d0f8efacb60e49395567fdc0c1c1e6e6f5aa8..2f685a186b2dc27e70cddd5c4951c27e public boolean assignProfessionWhenSpawned() { diff --git a/net/minecraft/world/entity/npc/WanderingTrader.java b/net/minecraft/world/entity/npc/WanderingTrader.java -index b5af32a431b5ffe20b32bd82ccfae9b8343d0592..f9755f36f7863b9742fe5b840a8130891ddff7c7 100644 +index 4abc4037a059b9c1dc58bf7a776e6269c5188868..e726893a3ddf49bdfd2d190477bccf6e33de1847 100644 --- a/net/minecraft/world/entity/npc/WanderingTrader.java +++ b/net/minecraft/world/entity/npc/WanderingTrader.java -@@ -97,9 +97,16 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill +@@ -87,9 +87,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); @@ -93,7 +92,7 @@ index b5af32a431b5ffe20b32bd82ccfae9b8343d0592..f9755f36f7863b9742fe5b840a813089 @Override protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); -@@ -134,6 +141,7 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill +@@ -124,6 +131,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/features/0008-Configurable-void-damage-height-and-damage.patch b/purpur-server/minecraft-patches/features/0008-Configurable-void-damage-height-and-damage.patch index 839f90b9e..a4f3ae80d 100644 --- a/purpur-server/minecraft-patches/features/0008-Configurable-void-damage-height-and-damage.patch +++ b/purpur-server/minecraft-patches/features/0008-Configurable-void-damage-height-and-damage.patch @@ -7,10 +7,10 @@ temporarily migrate to paper's config drop patch on the next minecraft release diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index 2bd5a295be2500f198230a62f48900b51038d22b..96253bf49a6895524f6f606a9c434cb1b78948a6 100644 +index 6ad266592c16bdeccfb689fb2ef2ee37e79a7b41..e950e74d7c14d2e180e5ca879eb1048866d85051 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java -@@ -1222,6 +1222,16 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop list = EquipmentSlot.VALUES.stream().filter(slot -> canGlideUsing(this.getItemBySlot(slot), slot)).toList(); +@@ -3644,7 +3644,18 @@ public abstract class LivingEntity extends Entity implements Attackable { + .filter(equipmentSlot1 -> canGlideUsing(this.getItemBySlot(equipmentSlot1), equipmentSlot1)) + .toList(); EquipmentSlot equipmentSlot = Util.getRandom(list, this.random); - this.getItemBySlot(equipmentSlot).hurtAndBreak(1, this, equipmentSlot); + @@ -29,10 +29,10 @@ index 631ac66e7bad8c0b789cf762b54db3b8ffe4b44a..ea8ef5c1b2ad9be827ea35a2858cbe8d this.gameEvent(GameEvent.ELYTRA_GLIDE); diff --git a/net/minecraft/world/item/FireworkRocketItem.java b/net/minecraft/world/item/FireworkRocketItem.java -index 75a9bd205f32b77c5d242cb9fac0f571ce36045a..b03f182c62c699cc222e67c1ae6eadf99c45d48d 100644 +index 18d63d2da49451a2d5e1da7bf0c00e05e2f192bc..ab35b0db023f48854476497d0dbdb0dffbeddb43 100644 --- a/net/minecraft/world/item/FireworkRocketItem.java +++ b/net/minecraft/world/item/FireworkRocketItem.java -@@ -66,6 +66,19 @@ public class FireworkRocketItem extends Item implements ProjectileItem { +@@ -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 @@ -53,10 +53,10 @@ index 75a9bd205f32b77c5d242cb9fac0f571ce36045a..b03f182c62c699cc222e67c1ae6eadf9 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 c5426585f53a3139dc9d188a73e3a7ff4cb2e492..264b713e8b7c3d5f7d8e1facc90a60349f2cf414 100644 +index 8c9f64140f016edfadeeb75463655cc2f3fafc0c..84e7f1b119ccfdabf48ccac51278e19743840da7 100644 --- a/net/minecraft/world/item/ItemStack.java +++ b/net/minecraft/world/item/ItemStack.java -@@ -733,6 +733,14 @@ public final class ItemStack implements DataComponentHolder { +@@ -725,6 +725,14 @@ public final class ItemStack implements DataComponentHolder { org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerItemBreakEvent(serverPlayer, this); // Paper - Add EntityDamageItemEvent } // CraftBukkit end @@ -72,10 +72,10 @@ index c5426585f53a3139dc9d188a73e3a7ff4cb2e492..264b713e8b7c3d5f7d8e1facc90a6034 onBreak.accept(item); } diff --git a/net/minecraft/world/item/TridentItem.java b/net/minecraft/world/item/TridentItem.java -index 07f8c7644a112bb1ba283d1eadd8661010e888a4..7ea7db834e7b627a1d7d37ca87cd43eb61408565 100644 +index 5ed862c4eeb9995b25f6a0ee1b57b2fdafb92551..59b1a455895d2842e45d916dcf53dead32e1c72a 100644 --- a/net/minecraft/world/item/TridentItem.java +++ b/net/minecraft/world/item/TridentItem.java -@@ -133,6 +133,18 @@ public class TridentItem extends Item implements ProjectileItem { +@@ -127,6 +127,18 @@ public class TridentItem extends Item implements ProjectileItem { f1 *= tridentSpinAttackStrength / squareRoot; f2 *= tridentSpinAttackStrength / squareRoot; org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerRiptideEvent(player, stack, f, f1, f2); // CraftBukkit diff --git a/purpur-server/minecraft-patches/features/0010-Configurable-jockey-options.patch b/purpur-server/minecraft-patches/features/0010-Configurable-jockey-options.patch index b97e69bbc..8b865c59d 100644 --- a/purpur-server/minecraft-patches/features/0010-Configurable-jockey-options.patch +++ b/purpur-server/minecraft-patches/features/0010-Configurable-jockey-options.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Configurable jockey options diff --git a/net/minecraft/world/entity/monster/Drowned.java b/net/minecraft/world/entity/monster/Drowned.java -index 3b0b5eadb80490b98b24aa632ab956e6403e2df2..173c0f13202e1ab3491ffde72ece95e2b4a46fd6 100644 +index 526de34154d873d1479f9276981e181be959ebef..2004595c51564d863aee65fc47541014ea184e10 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 { @@ -33,7 +33,7 @@ index 3b0b5eadb80490b98b24aa632ab956e6403e2df2..173c0f13202e1ab3491ffde72ece95e2 protected void addBehaviourGoals() { this.goalSelector.addGoal(1, new Drowned.DrownedGoToWaterGoal(this, 1.0)); diff --git a/net/minecraft/world/entity/monster/Husk.java b/net/minecraft/world/entity/monster/Husk.java -index c2365ae1cf6f98e262f302a117c4647c383dfbb5..7a8951f93e65c6df145e30d44b9d928dd0c39189 100644 +index 5b0794bd87423715cada1f860b4141fdacd9ede6..75cb1db5584c04e442583ab2f50a26132ed48bfb 100644 --- a/net/minecraft/world/entity/monster/Husk.java +++ b/net/minecraft/world/entity/monster/Husk.java @@ -50,6 +50,23 @@ public class Husk extends Zombie { @@ -61,10 +61,10 @@ index c2365ae1cf6f98e262f302a117c4647c383dfbb5..7a8951f93e65c6df145e30d44b9d928d 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 4b0f04c861397af694c477a8d3dc0de707e36874..b600fc46ed96d46769b7b289997a6e3cd422417b 100644 +index 126c5982c1b274cad67649b8e26391c7c4011bab..02073d4374580278829e680b875d596844213e78 100644 --- a/net/minecraft/world/entity/monster/Zombie.java +++ b/net/minecraft/world/entity/monster/Zombie.java -@@ -125,6 +125,20 @@ public class Zombie extends Monster { +@@ -129,6 +129,20 @@ public class Zombie extends Monster { } // Purpur end - Configurable entity base attributes @@ -85,7 +85,7 @@ index 4b0f04c861397af694c477a8d3dc0de707e36874..b600fc46ed96d46769b7b289997a6e3c @Override protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables -@@ -556,19 +570,18 @@ public class Zombie extends Monster { +@@ -558,19 +572,18 @@ public class Zombie extends Monster { } if (spawnGroupData instanceof Zombie.ZombieGroupData zombieGroupData) { @@ -110,8 +110,8 @@ index 4b0f04c861397af694c477a8d3dc0de707e36874..b600fc46ed96d46769b7b289997a6e3c + } else { // Purpur - Configurable jockey options Chicken chicken1 = EntityType.CHICKEN.create(this.level(), EntitySpawnReason.JOCKEY); if (chicken1 != null) { - chicken1.moveTo(this.getX(), this.getY(), this.getZ(), this.getYRot(), 0.0F); -@@ -577,6 +590,7 @@ public class Zombie extends Monster { + chicken1.snapTo(this.getX(), this.getY(), this.getZ(), this.getYRot(), 0.0F); +@@ -579,6 +592,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 4b0f04c861397af694c477a8d3dc0de707e36874..b600fc46ed96d46769b7b289997a6e3c } } diff --git a/net/minecraft/world/entity/monster/ZombieVillager.java b/net/minecraft/world/entity/monster/ZombieVillager.java -index 610e5e5330462646034c5667c15245fdb2af77a0..54df75681a89df93f59a589189c7e96b4acc4c77 100644 +index 239e78203dec09653ef8e001aef3e4b95b0f7a7c..6bd633390df582e0b1999f5c67cd76e2b23a04eb 100644 --- a/net/minecraft/world/entity/monster/ZombieVillager.java +++ b/net/minecraft/world/entity/monster/ZombieVillager.java -@@ -107,6 +107,23 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { +@@ -106,6 +106,23 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { } // Purpur end - Configurable entity base attributes @@ -148,7 +148,7 @@ index 610e5e5330462646034c5667c15245fdb2af77a0..54df75681a89df93f59a589189c7e96b 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 486906b860b3ccbeb1702d9bd7a5d9f11f534b1a..eaa2682de228cf5e9aff22b15f045c9ecbeec77b 100644 +index ada982eb4dca7c75a5fd3576d3793f1f12819e51..a8916a8fe5bed57e7b1f755a20e15bed544567fb 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 { diff --git a/purpur-server/minecraft-patches/features/0011-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch b/purpur-server/minecraft-patches/features/0011-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch index beeba7f4c..203e0f291 100644 --- a/purpur-server/minecraft-patches/features/0011-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch +++ b/purpur-server/minecraft-patches/features/0011-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch @@ -5,11 +5,11 @@ 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 67711964552a8e32d3590a64aff78e1db768b026..d58829c88b86358a0c06a982b302fc9a31c15853 100644 +index 57f9f705c62706902efe9a7873f0e3866820f7d9..90ac1e4bdca5b6233eeae9bc84549770bed383da 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 { - private static final EntityDataAccessor DATA_SHOW_BOTTOM = SynchedEntityData.defineId(EndCrystal.class, EntityDataSerializers.BOOLEAN); + private static final boolean DEFAULT_SHOW_BOTTOM = true; public int time; public boolean generatedByDragonFight = false; // Paper - Fix invulnerable end crystals + // Purpur start - Phantoms attracted to crystals and crystals shoot phantoms @@ -72,18 +72,18 @@ index 67711964552a8e32d3590a64aff78e1db768b026..d58829c88b86358a0c06a982b302fc9a @Override diff --git a/net/minecraft/world/entity/monster/Phantom.java b/net/minecraft/world/entity/monster/Phantom.java -index 08fc2dc0fecfa370c99e877d502149a8ea147e5f..aea7b608d88d243113f67665844841ac879c3f88 100644 +index 2f14561a3722f8175a234ad656ef64d4c58e3b96..6c41a2cc9a772c216abfc2b241429ec712119bb4 100644 --- a/net/minecraft/world/entity/monster/Phantom.java +++ b/net/minecraft/world/entity/monster/Phantom.java -@@ -47,6 +47,7 @@ public class Phantom extends FlyingMob implements Enemy { - Vec3 moveTargetPoint = Vec3.ZERO; - public BlockPos anchorPoint = BlockPos.ZERO; +@@ -48,6 +48,7 @@ public class Phantom extends FlyingMob implements Enemy { + @Nullable + public BlockPos anchorPoint; Phantom.AttackPhase attackPhase = Phantom.AttackPhase.CIRCLE; + Vec3 crystalPosition; // Purpur - Phantoms attracted to crystals and crystals shoot phantoms // Paper start @Nullable public java.util.UUID spawningEntity; -@@ -118,6 +119,25 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -119,6 +120,25 @@ public class Phantom extends FlyingMob implements Enemy { } // Purpur end - Ridables @@ -109,7 +109,7 @@ index 08fc2dc0fecfa370c99e877d502149a8ea147e5f..aea7b608d88d243113f67665844841ac @Override public boolean isFlapping() { return (this.getUniqueFlapTickOffset() + this.tickCount) % TICKS_PER_FLAP == 0; -@@ -131,9 +151,15 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -132,9 +152,15 @@ public class Phantom extends FlyingMob 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 08fc2dc0fecfa370c99e877d502149a8ea147e5f..aea7b608d88d243113f67665844841ac this.targetSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables this.targetSelector.addGoal(1, new Phantom.PhantomAttackPlayerTargetGoal()); } -@@ -509,6 +535,124 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -502,6 +528,124 @@ public class Phantom extends FlyingMob implements Enemy { } } diff --git a/purpur-server/minecraft-patches/features/0012-Phantoms-burn-in-light.patch b/purpur-server/minecraft-patches/features/0012-Phantoms-burn-in-light.patch index 34631ae4b..2b429096d 100644 --- a/purpur-server/minecraft-patches/features/0012-Phantoms-burn-in-light.patch +++ b/purpur-server/minecraft-patches/features/0012-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 aea7b608d88d243113f67665844841ac879c3f88..4cc1c8d8967b1e9ee5b0b1c50d887f3de3e8a882 100644 +index 6c41a2cc9a772c216abfc2b241429ec712119bb4..eaa5f2db1bc6b01ef6a508cc5a60ff1e252c2360 100644 --- a/net/minecraft/world/entity/monster/Phantom.java +++ b/net/minecraft/world/entity/monster/Phantom.java -@@ -53,6 +53,7 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -54,6 +54,7 @@ public class Phantom extends FlyingMob implements Enemy { public java.util.UUID spawningEntity; public boolean shouldBurnInDay = true; // Paper end @@ -16,7 +16,7 @@ index aea7b608d88d243113f67665844841ac879c3f88..4cc1c8d8967b1e9ee5b0b1c50d887f3d public Phantom(EntityType entityType, Level level) { super(entityType, level); -@@ -253,7 +254,11 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -254,7 +255,11 @@ public class Phantom extends FlyingMob implements Enemy { @Override public void aiStep() { @@ -29,7 +29,7 @@ index aea7b608d88d243113f67665844841ac879c3f88..4cc1c8d8967b1e9ee5b0b1c50d887f3d if (getRider() == null || !this.isControllable()) // Purpur - Ridables this.igniteForSeconds(8.0F); } -@@ -374,6 +379,7 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -363,6 +368,7 @@ public class Phantom extends FlyingMob 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 aea7b608d88d243113f67665844841ac879c3f88..4cc1c8d8967b1e9ee5b0b1c50d887f3d if (!nearbyPlayers.isEmpty()) { nearbyPlayers.sort(Comparator.comparing(Entity::getY).reversed()); -@@ -739,6 +745,12 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -732,6 +738,12 @@ public class Phantom extends FlyingMob implements Enemy { return false; } else if (!target.isAlive()) { return false; diff --git a/purpur-server/minecraft-patches/features/0013-Make-entity-breeding-times-configurable.patch b/purpur-server/minecraft-patches/features/0013-Make-entity-breeding-times-configurable.patch index 415f95334..234b1ac10 100644 --- a/purpur-server/minecraft-patches/features/0013-Make-entity-breeding-times-configurable.patch +++ b/purpur-server/minecraft-patches/features/0013-Make-entity-breeding-times-configurable.patch @@ -5,13 +5,13 @@ Subject: [PATCH] Make entity breeding times configurable diff --git a/net/minecraft/world/entity/ai/behavior/VillagerMakeLove.java b/net/minecraft/world/entity/ai/behavior/VillagerMakeLove.java -index 8fe5bd54b5a4848da1f08ea65fe2bc3514bed8c8..54eeb72b638127b180470887a3b59d55773f3bc9 100644 +index 2591e4bbd234e51ff2c6b00db888d3b158f5a07d..e3d48c7c6615185f8a14bc96476a665bdadc275b 100644 --- a/net/minecraft/world/entity/ai/behavior/VillagerMakeLove.java +++ b/net/minecraft/world/entity/ai/behavior/VillagerMakeLove.java @@ -118,8 +118,10 @@ public class VillagerMakeLove extends Behavior { + if (org.bukkit.craftbukkit.event.CraftEventFactory.callEntityBreedEvent(breedOffspring, parent, partner, null, null, 0).isCancelled()) { return Optional.empty(); } - // Move age setting down - parent.setAge(6000); - partner.setAge(6000); + // Purpur start - Make entity breeding times configurable @@ -22,21 +22,21 @@ index 8fe5bd54b5a4848da1f08ea65fe2bc3514bed8c8..54eeb72b638127b180470887a3b59d55 // 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 da1f5dcc213b9a5f8d26a546e7575b063fb0473c..452270f7f1c54ca98c34dcf9a9d29acae77737c8 100644 +index 2ce0099460c14a6dd8b128f268ee915ea4be5183..1cae770340e969ec4f037b9121142878894102d3 100644 --- a/net/minecraft/world/entity/animal/Animal.java +++ b/net/minecraft/world/entity/animal/Animal.java -@@ -40,6 +40,7 @@ public abstract class Animal extends AgeableMob { +@@ -42,6 +42,7 @@ public abstract class Animal extends AgeableMob { @Nullable public UUID loveCause; - public ItemStack breedItem; // CraftBukkit - Add breedItem variable + 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); -@@ -282,8 +283,10 @@ public abstract class Animal extends AgeableMob { +@@ -283,8 +284,10 @@ public abstract class Animal extends AgeableMob { player.awardStat(Stats.ANIMALS_BRED); CriteriaTriggers.BRED_ANIMALS.trigger(player, this, animal, baby); - } // Paper - call EntityBreedEvent + } // Paper - Call EntityBreedEvent - this.setAge(6000); - animal.setAge(6000); + // Purpur start - Make entity breeding times configurable @@ -47,7 +47,7 @@ index da1f5dcc213b9a5f8d26a546e7575b063fb0473c..452270f7f1c54ca98c34dcf9a9d29aca 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 a6dfd2013312d7542cb597a6e3976c68e9971148..31854506641874bed3306b9688d71e5c47fd9e35 100644 +index d07a708f06ba738369882ddaa968c2de9c6c560e..afe7fd92348e6a2a26f8f258373b0c57bb5f4f3f 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 { @@ -65,10 +65,10 @@ index a6dfd2013312d7542cb597a6e3976c68e9971148..31854506641874bed3306b9688d71e5c 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 98ce277c5b27591e22daa3c85241be1b8689bfae..584568cef949cee24aa7850d2ff99d47cd089a6e 100644 +index d2813c68df511a2702f2b57c31f828730a9a21c8..75a63c8e8917f20b389f8194ae3089ff41e9d0ff 100644 --- a/net/minecraft/world/entity/animal/Cat.java +++ b/net/minecraft/world/entity/animal/Cat.java -@@ -126,6 +126,13 @@ public class Cat extends TamableAnimal implements VariantHolder itemStack.is(ItemTags.CAT_FOOD), true); + 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 d718f0ed362c49803260dceed64bd93e2b6744fc..39ad1729ef03fc35a6365ee215be214eccfd959a 100644 +index fc3291b5e1a2c3956802b268abb58189b24a7a16..ef808c4462387bb73466b33d1c3156796fea251b 100644 --- a/net/minecraft/world/entity/animal/Chicken.java +++ b/net/minecraft/world/entity/animal/Chicken.java -@@ -81,6 +81,13 @@ public class Chicken extends Animal { +@@ -101,6 +101,13 @@ public class Chicken extends Animal { } // Purpur end - Configurable entity base attributes @@ -101,10 +101,10 @@ index d718f0ed362c49803260dceed64bd93e2b6744fc..39ad1729ef03fc35a6365ee215be214e 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 d2a4bfa5334f7361067e4adac36ba5a4a4fa6ad8..e4965300eb41512d03a0b111422c98627cf29a54 100644 +index 7c4f1eadcbc13010f6b4b5748b8e0d5c822458e1..0f4f732d9501df42e0d42fe978692c4b0e3d8f0b 100644 --- a/net/minecraft/world/entity/animal/Cow.java +++ b/net/minecraft/world/entity/animal/Cow.java -@@ -63,6 +63,13 @@ public class Cow extends Animal { +@@ -53,6 +53,13 @@ public class Cow extends AbstractCow { } // Purpur end - Configurable entity base attributes @@ -116,13 +116,13 @@ index d2a4bfa5334f7361067e4adac36ba5a4a4fa6ad8..e4965300eb41512d03a0b111422c9862 + // Purpur end - Make entity breeding times configurable + @Override - protected void registerGoals() { - this.goalSelector.addGoal(0, new FloatGoal(this)); + 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 9b8f5049b7a73b6b51ea76ed92228ff0d53b1cfb..7bc31391b0bd696ce73223d639a96278994010ca 100644 +index 8d69b6bb1d5efd0b47595a12acdd2088cddd5ace..6a531e5d93d42d3dca7a5e49fb2ba14063665d2e 100644 --- a/net/minecraft/world/entity/animal/Fox.java +++ b/net/minecraft/world/entity/animal/Fox.java -@@ -175,6 +175,13 @@ public class Fox extends Animal implements VariantHolder { +@@ -187,6 +187,13 @@ public class Fox extends Animal { } // Purpur end - Configurable entity base attributes @@ -136,7 +136,7 @@ index 9b8f5049b7a73b6b51ea76ed92228ff0d53b1cfb..7bc31391b0bd696ce73223d639a96278 @Override protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); -@@ -973,8 +980,10 @@ public class Fox extends Animal implements VariantHolder { +@@ -996,8 +1003,10 @@ public class Fox extends Animal { CriteriaTriggers.BRED_ANIMALS.trigger(serverPlayer, this.animal, this.partner, fox); } @@ -150,10 +150,10 @@ index 9b8f5049b7a73b6b51ea76ed92228ff0d53b1cfb..7bc31391b0bd696ce73223d639a96278 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 990723c31aa1040a4e45b9857a18d86287ef91b4..a64b609bf5ce38a252bfa1bcff869f88e14389b5 100644 +index af035af33db993cf7c573b87df576529e98a842e..24313a5dd5f5be39677ac8080ecf56703c751923 100644 --- a/net/minecraft/world/entity/animal/MushroomCow.java +++ b/net/minecraft/world/entity/animal/MushroomCow.java -@@ -79,6 +79,13 @@ public class MushroomCow extends Cow implements Shearable, VariantHolder { +@@ -152,6 +152,13 @@ public class Rabbit extends Animal { } // Purpur end - Configurable entity base attributes @@ -275,29 +275,11 @@ index e71161ecc9d4ee3fe29fa3a27d11d63e1a28d1a0..bbdd06002b07699fffebdf6ed8148abd @Override public void registerGoals() { this.goalSelector.addGoal(1, new FloatGoal(this)); -diff --git a/net/minecraft/world/entity/animal/Sheep.java b/net/minecraft/world/entity/animal/Sheep.java -index b66440f5cfbd714c6d2f5b7f66b4e755602b4521..882c799cb66a2acada33ff24f3adb7eb611f89c1 100644 ---- a/net/minecraft/world/entity/animal/Sheep.java -+++ b/net/minecraft/world/entity/animal/Sheep.java -@@ -106,6 +106,13 @@ public class Sheep extends Animal implements Shearable { - } - // Purpur end - Configurable entity base attributes - -+ // Purpur start - Make entity breeding times configurable -+ @Override -+ public int getPurpurBreedTime() { -+ return this.level().purpurConfig.sheepBreedingTicks; -+ } -+ // Purpur end - Make entity breeding times configurable -+ - @Override - protected void registerGoals() { - this.eatBlockGoal = new EatBlockGoal(this); diff --git a/net/minecraft/world/entity/animal/Turtle.java b/net/minecraft/world/entity/animal/Turtle.java -index 4f0fbbb2caeda6d1477d3297fd68f802e4f3a9ca..030414049c6af6f6a6324d56aa7b2f1cf7afdc61 100644 +index 11772e81d932fae6542a0cb2d283ef91b5bbbd76..57e4cb66fbf29b992a144ca923f2e22983cc1db5 100644 --- a/net/minecraft/world/entity/animal/Turtle.java +++ b/net/minecraft/world/entity/animal/Turtle.java -@@ -109,6 +109,13 @@ public class Turtle extends Animal { +@@ -110,6 +110,13 @@ public class Turtle extends Animal { } // Purpur end - Configurable entity base attributes @@ -309,9 +291,9 @@ index 4f0fbbb2caeda6d1477d3297fd68f802e4f3a9ca..030414049c6af6f6a6324d56aa7b2f1c + // Purpur end - Make entity breeding times configurable + public void setHomePos(BlockPos homePos) { - this.entityData.set(HOME_POS, homePos); + this.homePos = homePos; } -@@ -394,8 +401,10 @@ public class Turtle extends Animal { +@@ -350,8 +357,10 @@ public class Turtle extends Animal { } this.turtle.setHasEgg(true); @@ -324,29 +306,11 @@ index 4f0fbbb2caeda6d1477d3297fd68f802e4f3a9ca..030414049c6af6f6a6324d56aa7b2f1c this.animal.resetLove(); this.partner.resetLove(); RandomSource random = this.animal.getRandom(); -diff --git a/net/minecraft/world/entity/animal/Wolf.java b/net/minecraft/world/entity/animal/Wolf.java -index afc12968313a408e8a71a20c2c0defde52605c4e..9d79946497cfc92ff11160b86d5064d86916af36 100644 ---- a/net/minecraft/world/entity/animal/Wolf.java -+++ b/net/minecraft/world/entity/animal/Wolf.java -@@ -210,6 +210,13 @@ public class Wolf extends TamableAnimal implements NeutralMob, VariantHolder, B +@@ -145,6 +145,13 @@ public class Axolotl extends Animal implements Bucketable { } // Purpur end - Configurable entity base attributes @@ -379,10 +343,10 @@ index f2f09a529e9db88784ff4299fdf3966046c736ab..07eee1f82331a2172aede02219a7eae8 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 1d7e2358bac193af48dc4b7f5b0295e3bffa152b..1d7ae2a08968860636918e7c66b60139a9d761b4 100644 +index 6c6ef89aacbc328a2cb2dc05022998dbd79cfaf8..344edef98e13831d1238e5ae155d81b13126a696 100644 --- a/net/minecraft/world/entity/animal/camel/Camel.java +++ b/net/minecraft/world/entity/animal/camel/Camel.java -@@ -90,6 +90,13 @@ public class Camel extends AbstractHorse { +@@ -96,6 +96,13 @@ public class Camel extends AbstractHorse { } // Purpur end - Ridables @@ -397,10 +361,10 @@ index 1d7e2358bac193af48dc4b7f5b0295e3bffa152b..1d7ae2a08968860636918e7c66b60139 public void addAdditionalSaveData(CompoundTag compound) { super.addAdditionalSaveData(compound); diff --git a/net/minecraft/world/entity/animal/frog/Frog.java b/net/minecraft/world/entity/animal/frog/Frog.java -index 9a400c8bf2b54aa5fbcbe65b61670cac5fbebf05..143a740ce2e7f9d384b71b4d64e8b8218f60cba7 100644 +index 054811d807c56018617dc4a8e10af87ed15ad00c..71c09b9b8cc66d1a6f557a685539f9f4c93c0b8b 100644 --- a/net/minecraft/world/entity/animal/frog/Frog.java +++ b/net/minecraft/world/entity/animal/frog/Frog.java -@@ -165,6 +165,13 @@ public class Frog extends Animal implements VariantHolder> { +@@ -164,6 +164,13 @@ public class Frog extends Animal { } // Purpur end - Ridables @@ -415,10 +379,10 @@ index 9a400c8bf2b54aa5fbcbe65b61670cac5fbebf05..143a740ce2e7f9d384b71b4d64e8b821 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 302208b566038a3a352ca867dd70a61887bac104..0a018dbfe3750cf91892d8cfb5c0eac18e83d587 100644 +index b922d8c37b89a5762c8ed29e6a5fa545f408511e..a04892dce1f904fad3312499352ad56853ea658e 100644 --- a/net/minecraft/world/entity/animal/goat/Goat.java +++ b/net/minecraft/world/entity/animal/goat/Goat.java -@@ -128,6 +128,13 @@ public class Goat extends Animal { +@@ -131,6 +131,13 @@ public class Goat extends Animal { } // Purpur end - Ridables @@ -433,7 +397,7 @@ index 302208b566038a3a352ca867dd70a61887bac104..0a018dbfe3750cf91892d8cfb5c0eac1 protected Brain.Provider brainProvider() { return Brain.provider(MEMORY_TYPES, SENSOR_TYPES); diff --git a/net/minecraft/world/entity/animal/horse/Donkey.java b/net/minecraft/world/entity/animal/horse/Donkey.java -index 223f1d109680e3643ab2c8343be22713e89755fd..b977597785df5665176ab2f330633ec61b7c9feb 100644 +index 3aa12702cd1f4ef160180bc6ba64a6566cbddc9d..9e1100d672bfb712854d23203d0b730b8cc78a3d 100644 --- a/net/minecraft/world/entity/animal/horse/Donkey.java +++ b/net/minecraft/world/entity/animal/horse/Donkey.java @@ -40,6 +40,13 @@ public class Donkey extends AbstractChestedHorse { @@ -448,13 +412,13 @@ index 223f1d109680e3643ab2c8343be22713e89755fd..b977597785df5665176ab2f330633ec6 + // Purpur end - Make entity breeding times configurable + @Override - protected SoundEvent getAmbientSound() { + 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 8bd118e82da9e4d4153de0a3efaf6d69e3c4c540..0339ab08b3029a9ffc102c5b865e411aca2a863c 100644 +index e0346014de51958976459eeb6677d886e7f261ab..6c1897fadaf93e9a71f0e361a602e6d9475a4f50 100644 --- a/net/minecraft/world/entity/animal/horse/Horse.java +++ b/net/minecraft/world/entity/animal/horse/Horse.java -@@ -67,6 +67,13 @@ public class Horse extends AbstractHorse implements VariantHolder { +@@ -70,6 +70,13 @@ public class Horse extends AbstractHorse { } // Purpur end - Configurable entity base attributes @@ -469,10 +433,10 @@ index 8bd118e82da9e4d4153de0a3efaf6d69e3c4c540..0339ab08b3029a9ffc102c5b865e411a 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 58e726dd33f572a31b4910b9ff666c4252fb03a9..6efe52edb6909ed2b38210ce6a0334eddc55f261 100644 +index 10e7724d424cd39c96b91cf3de4bc4524d9311a4..db73d8821b3374341fa77fbbb3308a21abb60db6 100644 --- a/net/minecraft/world/entity/animal/horse/Llama.java +++ b/net/minecraft/world/entity/animal/horse/Llama.java -@@ -141,6 +141,13 @@ public class Llama extends AbstractChestedHorse implements VariantHolder 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 54924cd7c84cbcd22ffc0bd37fc24f24e73c18bc..5af04c4d58d59b795c3f43eeb30232ab07a4e8c7 100644 +index 6b0eb12e9d879f22098eb2294d0d73db6ca266ed..df763444e9935b8f43ea65b3695c715993903fb8 100644 --- a/net/minecraft/world/entity/monster/hoglin/Hoglin.java +++ b/net/minecraft/world/entity/monster/hoglin/Hoglin.java -@@ -117,6 +117,13 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { +@@ -120,6 +120,13 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { } // Purpur end - Configurable entity base attributes diff --git a/purpur-server/minecraft-patches/features/0014-Apply-display-names-from-item-forms-of-entities-to-e.patch b/purpur-server/minecraft-patches/features/0014-Apply-display-names-from-item-forms-of-entities-to-e.patch index 15d244724..8b4a0c168 100644 --- a/purpur-server/minecraft-patches/features/0014-Apply-display-names-from-item-forms-of-entities-to-e.patch +++ b/purpur-server/minecraft-patches/features/0014-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 d368b1971b270c44efc849464a100832bc29a679..8c0ab32487c56e2caf42404184f86c9bcf5f8b41 100644 +index fb3b4e57e98b45adb3a908ddbc2d4ac066e22034..e0489ff30373c214927f34d78787fb85192318b3 100644 --- a/net/minecraft/world/entity/decoration/ArmorStand.java +++ b/net/minecraft/world/entity/decoration/ArmorStand.java -@@ -564,6 +564,7 @@ public class ArmorStand extends LivingEntity { +@@ -492,6 +492,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 d368b1971b270c44efc849464a100832bc29a679..8c0ab32487c56e2caf42404184f86c9b 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 65e1d7c5ac94b1cfb921fa009be59d3e5872f0b5..3ee1d8798db666ee8d83556047e40ff217cda732 100644 +index f9a97000b75db7999b1cbe1f72d680d4d7b803b7..9dfadb5639e840e69274b35f3366322141527104 100644 --- a/net/minecraft/world/entity/decoration/ItemFrame.java +++ b/net/minecraft/world/entity/decoration/ItemFrame.java -@@ -223,7 +223,11 @@ public class ItemFrame extends HangingEntity { +@@ -232,7 +232,11 @@ public class ItemFrame extends HangingEntity { this.removeFramedMap(item); } else { if (dropItem) { @@ -35,10 +35,10 @@ index 65e1d7c5ac94b1cfb921fa009be59d3e5872f0b5..3ee1d8798db666ee8d83556047e40ff2 if (!item.isEmpty()) { diff --git a/net/minecraft/world/entity/decoration/Painting.java b/net/minecraft/world/entity/decoration/Painting.java -index 5b905a4d49c44b04d5795c2bf297f3c69d183d7c..b6429a2bbb6fc1e08610ab20e50f8f0414f0ad26 100644 +index 3f13bb1ad260d250efe2622297e432dc300e73a0..b1ee059501532cc2df5f0824e5becbd2bc6727b2 100644 --- a/net/minecraft/world/entity/decoration/Painting.java +++ b/net/minecraft/world/entity/decoration/Painting.java -@@ -162,7 +162,11 @@ public class Painting extends HangingEntity implements VariantHoldercreateDefaultStackConfig(level, itemInHand, player).accept(hangingEntity); ++ EntityType.appendDefaultStackConfig(entity -> {if (!level.purpurConfig.persistentDroppableEntityDisplayNames) entity.setCustomName(null);}, level, itemInHand, player).accept(hangingEntity); // Purpur - Apply display names from item forms of entities to entities and vice versa if (hangingEntity.survives()) { + if (!level.isClientSide) { + // CraftBukkit start - fire HangingPlaceEvent diff --git a/purpur-server/minecraft-patches/features/0015-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch b/purpur-server/minecraft-patches/features/0015-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch index f196a03cf..fc69100b5 100644 --- a/purpur-server/minecraft-patches/features/0015-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch +++ b/purpur-server/minecraft-patches/features/0015-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch @@ -8,7 +8,7 @@ farm Nether Wart. Reimplemented based on a feature of the carpet-extra mod. diff --git a/net/minecraft/world/entity/ai/behavior/HarvestFarmland.java b/net/minecraft/world/entity/ai/behavior/HarvestFarmland.java -index 4106549bd4dec1cc47d8765be8f5d119fe33bf56..e98fac58b29f78cb63bd868811cca41e1644e9ac 100644 +index de89e45ecd4ac4c6db8b74bbe3dd6b4a7cf21671..f15e4cfd8c0ac5e08779dbe6b9aa40bfe9ce4d8f 100644 --- a/net/minecraft/world/entity/ai/behavior/HarvestFarmland.java +++ b/net/minecraft/world/entity/ai/behavior/HarvestFarmland.java @@ -32,6 +32,7 @@ public class HarvestFarmland extends Behavior { @@ -23,11 +23,11 @@ index 4106549bd4dec1cc47d8765be8f5d119fe33bf56..e98fac58b29f78cb63bd868811cca41e protected boolean checkExtraStartConditions(ServerLevel level, Villager owner) { if (!level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) { return false; -- } else if (owner.getVillagerData().getProfession() != VillagerProfession.FARMER) { -+ } else if (owner.getVillagerData().getProfession() != VillagerProfession.FARMER && !(level.purpurConfig.villagerClericsFarmWarts && owner.getVillagerData().getProfession() == VillagerProfession.CLERIC)) { // Purpur - Option for Villager Clerics to farm Nether Wart +- } else if (!owner.getVillagerData().profession().is(VillagerProfession.FARMER)) { ++ } else if (!owner.getVillagerData().profession().is(VillagerProfession.FARMER) && !(level.purpurConfig.villagerClericsFarmWarts && owner.getVillagerData().profession().is(VillagerProfession.CLERIC))) { // Purpur - Option for Villager Clerics to farm Nether Wart return false; } else { -+ if (!this.clericWartFarmer && owner.getVillagerData().getProfession() == VillagerProfession.CLERIC) this.clericWartFarmer = true; // Purpur - Option for Villager Clerics to farm Nether Wart ++ if (!this.clericWartFarmer && owner.getVillagerData().profession().is(VillagerProfession.CLERIC)) this.clericWartFarmer = true; // Purpur - Option for Villager Clerics to farm Nether Wart BlockPos.MutableBlockPos mutableBlockPos = owner.blockPosition().mutable(); this.validFarmlandAroundVillager.clear(); @@ -72,7 +72,7 @@ index 4106549bd4dec1cc47d8765be8f5d119fe33bf56..e98fac58b29f78cb63bd868811cca41e 1.0F, 1.0F diff --git a/net/minecraft/world/entity/ai/behavior/TradeWithVillager.java b/net/minecraft/world/entity/ai/behavior/TradeWithVillager.java -index 243ac036f95794e7766aefb4630b635681ae5a5f..4d8523a43d60cd6b4fd5546ffb3a61417b2c475b 100644 +index 623dd33a85cb67ecb835de18e9aac29f3394ce28..72cca4897f9697573fd6987a5f0d2df52761b8c3 100644 --- a/net/minecraft/world/entity/ai/behavior/TradeWithVillager.java +++ b/net/minecraft/world/entity/ai/behavior/TradeWithVillager.java @@ -59,6 +59,12 @@ public class TradeWithVillager extends Behavior { @@ -80,7 +80,7 @@ index 243ac036f95794e7766aefb4630b635681ae5a5f..4d8523a43d60cd6b4fd5546ffb3a6141 } + // Purpur start - Option for Villager Clerics to farm Nether Wart -+ if (level.purpurConfig.villagerClericsFarmWarts && level.purpurConfig.villagerClericFarmersThrowWarts && owner.getVillagerData().getProfession() == VillagerProfession.CLERIC && owner.getInventory().countItem(Items.NETHER_WART) > Items.NETHER_WART.getDefaultMaxStackSize() / 2) { ++ if (level.purpurConfig.villagerClericsFarmWarts && level.purpurConfig.villagerClericFarmersThrowWarts && owner.getVillagerData().profession().is(VillagerProfession.CLERIC) && owner.getInventory().countItem(Items.NETHER_WART) > Items.NETHER_WART.getDefaultMaxStackSize() / 2) { + throwHalfStack(owner, ImmutableSet.of(Items.NETHER_WART), villager); + } + // Purpur end - Option for Villager Clerics to farm Nether Wart @@ -89,26 +89,26 @@ index 243ac036f95794e7766aefb4630b635681ae5a5f..4d8523a43d60cd6b4fd5546ffb3a6141 throwHalfStack(owner, this.trades, villager); } diff --git a/net/minecraft/world/entity/ai/behavior/VillagerGoalPackages.java b/net/minecraft/world/entity/ai/behavior/VillagerGoalPackages.java -index 84afd8646b05409c582f29d73f9fea4b09feb603..32779b121322688a4b14e460b1f902ef67770b32 100644 +index c65f80aadeb27685653f6a4731888c612d4a59d6..bb07aa944ce60ec7db96e2b57bd6c2c862e2f787 100644 --- a/net/minecraft/world/entity/ai/behavior/VillagerGoalPackages.java +++ b/net/minecraft/world/entity/ai/behavior/VillagerGoalPackages.java -@@ -74,8 +74,13 @@ public class VillagerGoalPackages { - } - - public static ImmutableList>> getWorkPackage(VillagerProfession profession, float speedModifier) { +@@ -79,8 +79,13 @@ public class VillagerGoalPackages { + public static ImmutableList>> getWorkPackage( + Holder profession, float speedModifier + ) { + // Purpur start - Option for Villager Clerics to farm Nether Wart + return getWorkPackage(profession, speedModifier, false); + } -+ public static ImmutableList>> getWorkPackage(VillagerProfession profession, float speedModifier, boolean clericsFarmWarts) { ++ public static ImmutableList>> getWorkPackage(Holder profession, float speedModifier, boolean clericsFarmWarts) { + // Purpur end - Option for Villager Clerics to farm Nether Wart WorkAtPoi workAtPoi; -- if (profession == VillagerProfession.FARMER) { -+ if (profession == VillagerProfession.FARMER || (clericsFarmWarts && profession == VillagerProfession.CLERIC)) { // Purpur - Option for Villager Clerics to farm Nether Wart +- if (profession.is(VillagerProfession.FARMER)) { ++ if (profession.is(VillagerProfession.FARMER) || (clericsFarmWarts && profession.is(VillagerProfession.CLERIC))) { // Purpur - Option for Villager Clerics to farm Nether Wart workAtPoi = new WorkAtComposter(); } else { workAtPoi = new WorkAtPoi(); diff --git a/net/minecraft/world/entity/ai/sensing/SecondaryPoiSensor.java b/net/minecraft/world/entity/ai/sensing/SecondaryPoiSensor.java -index 6b99afb4f237b5d6def98f3e03492975b795bc95..234e9d4aca14bc2a2e138918be1430516d710060 100644 +index f0583076ef62189508a392a76c3fb6b741bbdde9..dc4a9ddb8479e9d0c4895b19d7d677cdd8ad3faa 100644 --- a/net/minecraft/world/entity/ai/sensing/SecondaryPoiSensor.java +++ b/net/minecraft/world/entity/ai/sensing/SecondaryPoiSensor.java @@ -22,6 +22,13 @@ public class SecondaryPoiSensor extends Sensor { @@ -117,7 +117,7 @@ index 6b99afb4f237b5d6def98f3e03492975b795bc95..234e9d4aca14bc2a2e138918be143051 protected void doTick(ServerLevel level, Villager entity) { + // Purpur start - Option for Villager Clerics to farm Nether Wart - make sure clerics don't wander to soul sand when the option is off + Brain brain = entity.getBrain(); -+ if (!level.purpurConfig.villagerClericsFarmWarts && entity.getVillagerData().getProfession() == net.minecraft.world.entity.npc.VillagerProfession.CLERIC) { ++ if (!level.purpurConfig.villagerClericsFarmWarts && entity.getVillagerData().profession().is(net.minecraft.world.entity.npc.VillagerProfession.CLERIC)) { + brain.eraseMemory(MemoryModuleType.SECONDARY_JOB_SITE); + return; + } @@ -135,37 +135,37 @@ index 6b99afb4f237b5d6def98f3e03492975b795bc95..234e9d4aca14bc2a2e138918be143051 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 ff07cfe07200be23f17310522d737fca3251a580..017b54e0b8dec8996c90a3c6651867277dd516df 100644 +index 005af720a6385056f09f939813e97c10a7414a91..2846aca7bad55b56430738baeee9554e34da316c 100644 --- a/net/minecraft/world/entity/npc/Villager.java +++ b/net/minecraft/world/entity/npc/Villager.java -@@ -311,7 +311,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -314,7 +314,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler villagerBrain.setSchedule(Schedule.VILLAGER_DEFAULT); villagerBrain.addActivityWithConditions( Activity.WORK, -- VillagerGoalPackages.getWorkPackage(profession, 0.5F), -+ VillagerGoalPackages.getWorkPackage(profession, 0.5F, this.level().purpurConfig.villagerClericsFarmWarts), // Purpur - Option for Villager Clerics to farm Nether Wart +- VillagerGoalPackages.getWorkPackage(holder, 0.5F), ++ VillagerGoalPackages.getWorkPackage(holder, 0.5F, this.level().purpurConfig.villagerClericsFarmWarts), // Purpur - Option for Villager Clerics to farm Nether Wart ImmutableSet.of(Pair.of(MemoryModuleType.JOB_SITE, MemoryStatus.VALUE_PRESENT)) ); } -@@ -977,7 +977,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -965,7 +965,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } public boolean hasFarmSeeds() { -- return this.getInventory().hasAnyMatching(itemStack -> itemStack.is(ItemTags.VILLAGER_PLANTABLE_SEEDS)); -+ return this.getInventory().hasAnyMatching(itemStack -> this.level().purpurConfig.villagerClericsFarmWarts && this.getVillagerData().getProfession() == VillagerProfession.CLERIC ? itemStack.is(Items.NETHER_WART) : itemStack.is(ItemTags.VILLAGER_PLANTABLE_SEEDS)); // Purpur - Option for Villager Clerics to farm Nether Wart +- return this.getInventory().hasAnyMatching(stack -> stack.is(ItemTags.VILLAGER_PLANTABLE_SEEDS)); ++ return this.getInventory().hasAnyMatching(stack -> this.level().purpurConfig.villagerClericsFarmWarts && this.getVillagerData().profession().is(VillagerProfession.CLERIC) ? stack.is(Items.NETHER_WART) : stack.is(ItemTags.VILLAGER_PLANTABLE_SEEDS)); // Purpur - Option for Villager Clerics to farm Nether Wart } @Override diff --git a/net/minecraft/world/entity/npc/VillagerProfession.java b/net/minecraft/world/entity/npc/VillagerProfession.java -index 1ec8ad124c76483d11057eb97fcfb9aebee0c301..f783d058a080408d572938d36ba031f33a08e9af 100644 +index 0b7fdbc19f8a977be8168bca198c157fbe90044b..abfc2542a486d5a64bf88eac69f7d9587869d3cf 100644 --- a/net/minecraft/world/entity/npc/VillagerProfession.java +++ b/net/minecraft/world/entity/npc/VillagerProfession.java -@@ -31,7 +31,7 @@ public record VillagerProfession( - public static final VillagerProfession ARMORER = register("armorer", PoiTypes.ARMORER, SoundEvents.VILLAGER_WORK_ARMORER); - public static final VillagerProfession BUTCHER = register("butcher", PoiTypes.BUTCHER, SoundEvents.VILLAGER_WORK_BUTCHER); - public static final VillagerProfession CARTOGRAPHER = register("cartographer", PoiTypes.CARTOGRAPHER, SoundEvents.VILLAGER_WORK_CARTOGRAPHER); -- public static final VillagerProfession CLERIC = register("cleric", PoiTypes.CLERIC, SoundEvents.VILLAGER_WORK_CLERIC); -+ public static final VillagerProfession CLERIC = register("cleric", PoiTypes.CLERIC, ImmutableSet.of(Items.NETHER_WART), ImmutableSet.of(Blocks.SOUL_SAND), SoundEvents.VILLAGER_WORK_CLERIC); // Purpur - Option for Villager Clerics to farm Nether Wart - public static final VillagerProfession FARMER = register( - "farmer", - PoiTypes.FARMER, +@@ -103,7 +103,7 @@ public record VillagerProfession( + register(registry, ARMORER, PoiTypes.ARMORER, SoundEvents.VILLAGER_WORK_ARMORER); + register(registry, BUTCHER, PoiTypes.BUTCHER, SoundEvents.VILLAGER_WORK_BUTCHER); + register(registry, CARTOGRAPHER, PoiTypes.CARTOGRAPHER, SoundEvents.VILLAGER_WORK_CARTOGRAPHER); +- register(registry, CLERIC, PoiTypes.CLERIC, SoundEvents.VILLAGER_WORK_CLERIC); ++ register(registry, CLERIC, PoiTypes.CLERIC, ImmutableSet.of(Items.NETHER_WART), ImmutableSet.of(Blocks.SOUL_SAND), SoundEvents.VILLAGER_WORK_CLERIC); // Purpur - Option for Villager Clerics to farm Nether Wart + register( + registry, + FARMER, diff --git a/purpur-server/minecraft-patches/features/0016-Add-mobGriefing-bypass-to-everything-affected.patch b/purpur-server/minecraft-patches/features/0016-Add-mobGriefing-bypass-to-everything-affected.patch index f2c255a34..6f765ea9a 100644 --- a/purpur-server/minecraft-patches/features/0016-Add-mobGriefing-bypass-to-everything-affected.patch +++ b/purpur-server/minecraft-patches/features/0016-Add-mobGriefing-bypass-to-everything-affected.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add mobGriefing bypass to everything affected diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java -index 4388a1e3d409a55cffd66fc32cae8753c39dd064..611732d56e5bb71973cb33a41507f61195c4cd2d 100644 +index 7b635a3f047a7f645322bdd8ce5bfa8350d7a739..2a7434872472b950fe09bfe8f5f334d9964b51d6 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java -@@ -1818,7 +1818,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1905,7 +1905,7 @@ public abstract class LivingEntity extends Entity implements Attackable { if (this.level() instanceof ServerLevel serverLevel) { boolean var6 = false; if (this.dead && entitySource instanceof WitherBoss) { // Paper @@ -18,10 +18,10 @@ index 4388a1e3d409a55cffd66fc32cae8753c39dd064..611732d56e5bb71973cb33a41507f611 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 c431f28c3f4f6cec946048f5752c364429af5ba1..d93584c6793818463e8883ffe399bf16b03263a9 100644 +index ca1d0164c90e695731f05de39c1d2fff947ecfc1..b828524d62a940f89f0c0fa926ef0423019ec212 100644 --- a/net/minecraft/world/entity/Mob.java +++ b/net/minecraft/world/entity/Mob.java -@@ -648,7 +648,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -519,7 +519,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab && this.canPickUpLoot() && this.isAlive() && !this.dead @@ -31,7 +31,7 @@ index c431f28c3f4f6cec946048f5752c364429af5ba1..d93584c6793818463e8883ffe399bf16 for (ItemEntity itemEntity : this.level() diff --git a/net/minecraft/world/entity/ai/behavior/HarvestFarmland.java b/net/minecraft/world/entity/ai/behavior/HarvestFarmland.java -index e98fac58b29f78cb63bd868811cca41e1644e9ac..56d49bc71cb0cb0a08ff771991fd77ab774b4b59 100644 +index f15e4cfd8c0ac5e08779dbe6b9aa40bfe9ce4d8f..d90a616eca474ae940d46cda94e816bddda70183 100644 --- a/net/minecraft/world/entity/ai/behavior/HarvestFarmland.java +++ b/net/minecraft/world/entity/ai/behavior/HarvestFarmland.java @@ -49,7 +49,7 @@ public class HarvestFarmland extends Behavior { @@ -41,7 +41,7 @@ index e98fac58b29f78cb63bd868811cca41e1644e9ac..56d49bc71cb0cb0a08ff771991fd77ab - if (!level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) { + if (!level.purpurConfig.villagerBypassMobGriefing == !level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) { // Purpur - Add mobGriefing bypass to everything affected return false; - } else if (owner.getVillagerData().getProfession() != VillagerProfession.FARMER && !(level.purpurConfig.villagerClericsFarmWarts && owner.getVillagerData().getProfession() == VillagerProfession.CLERIC)) { // Purpur - Option for Villager Clerics to farm Nether Wart + } else if (!owner.getVillagerData().profession().is(VillagerProfession.FARMER) && !(level.purpurConfig.villagerClericsFarmWarts && owner.getVillagerData().profession().is(VillagerProfession.CLERIC))) { // Purpur - Option for Villager Clerics to farm Nether Wart return false; diff --git a/net/minecraft/world/entity/ai/goal/BreakDoorGoal.java b/net/minecraft/world/entity/ai/goal/BreakDoorGoal.java index e026e07ca86700c864a3dceda6817fb7b6cb11e9..f1dfe0bf047e7d331b2379a672ff7b8eae4c9c90 100644 @@ -57,13 +57,13 @@ index e026e07ca86700c864a3dceda6817fb7b6cb11e9..f1dfe0bf047e7d331b2379a672ff7b8e && !this.isOpen(); } diff --git a/net/minecraft/world/entity/ai/goal/EatBlockGoal.java b/net/minecraft/world/entity/ai/goal/EatBlockGoal.java -index e84893780b533b1ecb3675606b5c2daf7339b861..65eb4d8001b07cb3f7cda17565eea10a88a9c47c 100644 +index 7a75415a469bc99f45a5cfaab038181717903f1d..fc244a1fbd401f6ea92e7428b9738939e0cb2b1e 100644 --- a/net/minecraft/world/entity/ai/goal/EatBlockGoal.java +++ b/net/minecraft/world/entity/ai/goal/EatBlockGoal.java @@ -67,7 +67,7 @@ public class EatBlockGoal extends Goal { BlockPos blockPos = this.mob.blockPosition(); final BlockState blockState = this.level.getBlockState(blockPos); // Paper - fix wrong block state - if (IS_TALL_GRASS.test(blockState)) { // Paper - fix wrong block state + if (IS_EDIBLE.test(blockState)) { // Paper - fix wrong block state - if (org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(this.mob, blockPos, blockState.getFluidState().createLegacyBlock(), !getServerLevel(this.level).getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING))) { // CraftBukkit // Paper - fix wrong block state + if (org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(this.mob, blockPos, blockState.getFluidState().createLegacyBlock(), !getServerLevel(this.level).purpurConfig.sheepBypassMobGriefing == !getServerLevel(this.level).getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING))) { // CraftBukkit // Paper - fix wrong block state // Purpur - Add mobGriefing bypass to everything affected this.level.destroyBlock(blockPos, false); @@ -79,7 +79,7 @@ index e84893780b533b1ecb3675606b5c2daf7339b861..65eb4d8001b07cb3f7cda17565eea10a this.level.setBlock(blockPos1, Blocks.DIRT.defaultBlockState(), 2); } diff --git a/net/minecraft/world/entity/ai/goal/RemoveBlockGoal.java b/net/minecraft/world/entity/ai/goal/RemoveBlockGoal.java -index 579ca031d461ed4327fe4fb45c5289565322e64e..95fa516910a3834bbd4db6d11279e13a1f0dac41 100644 +index 3d40911970caf6f1de2a1ebee1df4c077703226a..9b29c0c676a45de2abdc76e0502ac06ac1e53097 100644 --- a/net/minecraft/world/entity/ai/goal/RemoveBlockGoal.java +++ b/net/minecraft/world/entity/ai/goal/RemoveBlockGoal.java @@ -35,7 +35,7 @@ public class RemoveBlockGoal extends MoveToBlockGoal { @@ -92,10 +92,10 @@ index 579ca031d461ed4327fe4fb45c5289565322e64e..95fa516910a3834bbd4db6d11279e13a } 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 7bc31391b0bd696ce73223d639a96278994010ca..950bf1c834111e00a3f3eda1390da7ede177ae15 100644 +index 6a531e5d93d42d3dca7a5e49fb2ba14063665d2e..e3631adee6ef690807768c90045c28570982b315 100644 --- a/net/minecraft/world/entity/animal/Fox.java +++ b/net/minecraft/world/entity/animal/Fox.java -@@ -1038,7 +1038,7 @@ public class Fox extends Animal implements VariantHolder { +@@ -1061,7 +1061,7 @@ public class Fox extends Animal { } protected void onReachedTarget() { @@ -105,10 +105,10 @@ index 7bc31391b0bd696ce73223d639a96278994010ca..950bf1c834111e00a3f3eda1390da7ed 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 bbdd06002b07699fffebdf6ed8148abdb69c24cc..7379def14f3f700fb8a746dc89d89e249e93b7b9 100644 +index 6c1e23e96352aa777c4e0c7d00f7620aa3f29a32..1c88e12d743325a429cad27928ea1ac43a696e8a 100644 --- a/net/minecraft/world/entity/animal/Rabbit.java +++ b/net/minecraft/world/entity/animal/Rabbit.java -@@ -620,7 +620,7 @@ public class Rabbit extends Animal implements VariantHolder { +@@ -647,7 +647,7 @@ public class Rabbit extends Animal { @Override public boolean canUse() { if (this.nextStartTick <= 0) { @@ -118,10 +118,10 @@ index bbdd06002b07699fffebdf6ed8148abdb69c24cc..7379def14f3f700fb8a746dc89d89e24 } diff --git a/net/minecraft/world/entity/animal/SnowGolem.java b/net/minecraft/world/entity/animal/SnowGolem.java -index 495284016f0141d34fcda3c1a1799233a5f708cf..0faa2d786a1162f125c531d93a5d1f215f310dfe 100644 +index 764429b9d20ac105c9ae3b050adf5d3defbd6038..1bf6fdc0149975fefbb73563e0d4861b178459b8 100644 --- a/net/minecraft/world/entity/animal/SnowGolem.java +++ b/net/minecraft/world/entity/animal/SnowGolem.java -@@ -136,7 +136,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM +@@ -135,7 +135,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 495284016f0141d34fcda3c1a1799233a5f708cf..0faa2d786a1162f125c531d93a5d1f21 } diff --git a/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -index ca900bb646e16c7b4342f23c3ffae786eab28145..724d259d4b793f2043e63dda9022bdfddc4dca38 100644 +index 793567170b33ba21016b8767598d294fca4acec4..f014b4ca2baf97edf472ce4d8af1209eaf4d53d1 100644 --- a/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java +++ b/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -@@ -547,7 +547,7 @@ public class EnderDragon extends Mob implements Enemy { +@@ -543,7 +543,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 ca900bb646e16c7b4342f23c3ffae786eab28145..724d259d4b793f2043e63dda9022bdfd //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 60e666aa8afe14b519010b6d137a89e3d22f6c81..a325fa87e149e7f354ed4cf3dbb30a002c4ce32a 100644 +index f0ec9334d9e6bf879568a085db691c46f7c652b6..951de2194f8e669e454edd8678cd254e94d18ab7 100644 --- a/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/net/minecraft/world/entity/boss/wither/WitherBoss.java -@@ -493,7 +493,7 @@ public class WitherBoss extends Monster implements RangedAttackMob { +@@ -494,7 +494,7 @@ public class WitherBoss extends Monster implements RangedAttackMob { if (this.destroyBlocksTick > 0) { this.destroyBlocksTick--; @@ -157,10 +157,10 @@ index 60e666aa8afe14b519010b6d137a89e3d22f6c81..a325fa87e149e7f354ed4cf3dbb30a00 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 f8d6935439b4e672ed655b2a458451d4b1fa8ffd..7b74322aef3d7d45a322abccc71d9168b3c0911b 100644 +index c01c91db94136700f9501624763e3bd735986a9f..0cae67d67af733b0bc6558f8cc1056b45554e3ce 100644 --- a/net/minecraft/world/entity/monster/EnderMan.java +++ b/net/minecraft/world/entity/monster/EnderMan.java -@@ -516,7 +516,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -509,7 +509,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 f8d6935439b4e672ed655b2a458451d4b1fa8ffd..7b74322aef3d7d45a322abccc71d9168 && this.enderman.getRandom().nextInt(reducedTickDelay(2000)) == 0; } -@@ -666,7 +666,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -659,7 +659,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,7 +179,7 @@ index f8d6935439b4e672ed655b2a458451d4b1fa8ffd..7b74322aef3d7d45a322abccc71d9168 } diff --git a/net/minecraft/world/entity/monster/Evoker.java b/net/minecraft/world/entity/monster/Evoker.java -index d3d7e11a12af404d83e81888a9a633dfb93412ec..91574baf7ca095eae909e8e7225ad500bde15af2 100644 +index 5773dd99ad2b014dde6666f4b32a1e6ee024a9fc..b14b72f7bbf6cb65b1515c12bae47187fe1371b5 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 { @@ -192,10 +192,10 @@ index d3d7e11a12af404d83e81888a9a633dfb93412ec..91574baf7ca095eae909e8e7225ad500 } else { List nearbyEntities = serverLevel.getNearbyEntities( diff --git a/net/minecraft/world/entity/monster/Ravager.java b/net/minecraft/world/entity/monster/Ravager.java -index 36ebfc1102a18e4050eb9a2441d75bafcf3784b8..3449628fb87fd760abd730d84699c3a09c6ec761 100644 +index 3adf0ec66db61b556a06ffe0fe835b57f8520948..568a0d17600a82109263de715f3d54fc24039452 100644 --- a/net/minecraft/world/entity/monster/Ravager.java +++ b/net/minecraft/world/entity/monster/Ravager.java -@@ -175,7 +175,7 @@ public class Ravager extends Raider { +@@ -178,7 +178,7 @@ public class Ravager extends Raider { if (this.level() instanceof ServerLevel serverLevel && this.horizontalCollision @@ -205,7 +205,7 @@ index 36ebfc1102a18e4050eb9a2441d75bafcf3784b8..3449628fb87fd760abd730d84699c3a0 AABB aabb = this.getBoundingBox().inflate(0.2); diff --git a/net/minecraft/world/entity/monster/Silverfish.java b/net/minecraft/world/entity/monster/Silverfish.java -index d3befe91bc65bbc2bc0d8651b78e8c9576cd0f75..0d3b8b64a23a19d67a1a4a01faaf6649a59f54ad 100644 +index c200d57841304ba0d7a76fdd9a440fe9f2b25136..ff3761507f2025fd1e652afee03a18de3508676a 100644 --- a/net/minecraft/world/entity/monster/Silverfish.java +++ b/net/minecraft/world/entity/monster/Silverfish.java @@ -170,7 +170,7 @@ public class Silverfish extends Monster { @@ -227,10 +227,10 @@ index d3befe91bc65bbc2bc0d8651b78e8c9576cd0f75..0d3b8b64a23a19d67a1a4a01faaf6649 continue; } diff --git a/net/minecraft/world/entity/monster/piglin/Piglin.java b/net/minecraft/world/entity/monster/piglin/Piglin.java -index 897c57263ab7347987b289016a71d11f693bc8b2..d923a424e2b33b7d4e9e4ecdce8e0a8c825038de 100644 +index b37038568b83db1602dca06aa06d72c4c4978cdd..8d37820522b12f2e513ca38c6ccdbb6ef3c2fc71 100644 --- a/net/minecraft/world/entity/monster/piglin/Piglin.java +++ b/net/minecraft/world/entity/monster/piglin/Piglin.java -@@ -473,7 +473,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento +@@ -449,7 +449,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento @Override public boolean wantsToPickUp(ServerLevel level, ItemStack stack) { @@ -240,10 +240,10 @@ index 897c57263ab7347987b289016a71d11f693bc8b2..d923a424e2b33b7d4e9e4ecdce8e0a8c protected boolean canReplaceCurrentItem(ItemStack candidate) { diff --git a/net/minecraft/world/entity/projectile/LargeFireball.java b/net/minecraft/world/entity/projectile/LargeFireball.java -index 4a752ace041228f095af7b1b4878a03c5ed2381f..3e8b5d042eddb817dee2504ff9aa263f6195b1c7 100644 +index db1b5bce212a5147be82504469f1fa9660812ebc..b97ea6fea26182945b6360644f17d172166574d3 100644 --- a/net/minecraft/world/entity/projectile/LargeFireball.java +++ b/net/minecraft/world/entity/projectile/LargeFireball.java -@@ -18,20 +18,20 @@ public class LargeFireball extends Fireball { +@@ -19,20 +19,20 @@ public class LargeFireball extends Fireball { public LargeFireball(EntityType entityType, Level level) { super(entityType, level); @@ -266,12 +266,12 @@ index 4a752ace041228f095af7b1b4878a03c5ed2381f..3e8b5d042eddb817dee2504ff9aa263f + boolean _boolean = serverLevel.purpurConfig.fireballsBypassMobGriefing ^ serverLevel.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); // Purpur - Add mobGriefing bypass to everything affected // CraftBukkit start - fire ExplosionPrimeEvent org.bukkit.event.entity.ExplosionPrimeEvent event = new org.bukkit.event.entity.ExplosionPrimeEvent((org.bukkit.entity.Explosive) this.getBukkitEntity()); - this.level().getCraftServer().getPluginManager().callEvent(event); + if (event.callEvent()) { diff --git a/net/minecraft/world/entity/projectile/Projectile.java b/net/minecraft/world/entity/projectile/Projectile.java -index ad0bb896d6ea669ce88bfe6490319e8ba7a29001..843f1396a6567672e5e8002d7e48fb18cf39d5de 100644 +index 4487c03183d20a187d391dd124abb7b926508b5b..3f0fe1190f5ec11efb148d481e0ed5d97f177969 100644 --- a/net/minecraft/world/entity/projectile/Projectile.java +++ b/net/minecraft/world/entity/projectile/Projectile.java -@@ -454,7 +454,7 @@ public abstract class Projectile extends Entity implements TraceableEntity { +@@ -466,7 +466,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..808aa5dcb27c87b6ba5c1eee63948606 // CraftBukkit end } diff --git a/net/minecraft/world/entity/raid/Raider.java b/net/minecraft/world/entity/raid/Raider.java -index 8270d76a753bfd26a4c8ef6610bee5c24ee59cfe..c06b589e669b055a26f662df60070d5908256220 100644 +index e81ae747fe95c22321fc69791a6509d601826fd6..77bb3aa7ff042aab6464aac55c846cb9082e5b97 100644 --- a/net/minecraft/world/entity/raid/Raider.java +++ b/net/minecraft/world/entity/raid/Raider.java -@@ -399,7 +399,7 @@ public abstract class Raider extends PatrollingMonster { +@@ -400,7 +400,7 @@ public abstract class Raider extends PatrollingMonster { } private boolean cannotPickUpBanner() { @@ -307,12 +307,12 @@ index 8270d76a753bfd26a4c8ef6610bee5c24ee59cfe..c06b589e669b055a26f662df60070d59 return true; } else if (this.mob.getCurrentRaid().isOver()) { diff --git a/net/minecraft/world/level/block/CropBlock.java b/net/minecraft/world/level/block/CropBlock.java -index b43f16297ac4441d78d0dc1fadb555698b0c3f6d..27f0c5c886a3f8b14ef9a00e2aaaabf4bf09c7db 100644 +index b370b955ac8636275dfada4f38a7ca10297f7dac..275eabf64977cdf262de55124c3e5f88d8667213 100644 --- a/net/minecraft/world/level/block/CropBlock.java +++ b/net/minecraft/world/level/block/CropBlock.java -@@ -182,7 +182,7 @@ public class CropBlock extends BushBlock implements BonemealableBlock { +@@ -169,7 +169,7 @@ public class CropBlock extends VegetationBlock implements BonemealableBlock { @Override - protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity) { + 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 (level instanceof ServerLevel serverLevel && entity instanceof Ravager && serverLevel.purpurConfig.ravagerGriefableBlocks.contains(serverLevel.getBlockState(pos).getBlock()) && org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(entity, pos, Blocks.AIR.defaultBlockState(), !serverLevel.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING))) { // CraftBukkit // Purpur - Configurable ravager griefable blocks list + if (level instanceof ServerLevel serverLevel && entity instanceof Ravager && serverLevel.purpurConfig.ravagerGriefableBlocks.contains(serverLevel.getBlockState(pos).getBlock()) && org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(entity, pos, Blocks.AIR.defaultBlockState(), !serverLevel.purpurConfig.ravagerBypassMobGriefing == !serverLevel.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING))) { // CraftBukkit // Purpur - Configurable ravager griefable blocks list // Purpur - Add mobGriefing bypass to everything affected @@ -320,36 +320,36 @@ index b43f16297ac4441d78d0dc1fadb555698b0c3f6d..27f0c5c886a3f8b14ef9a00e2aaaabf4 } diff --git a/net/minecraft/world/level/block/FarmBlock.java b/net/minecraft/world/level/block/FarmBlock.java -index 6ab9a1188ce60e114ef35e393d9f2f46d490af83..9a7ca836e54cc3f58001c85f0079747f4d4941ad 100644 +index ba3b8b1e0c646c09e0b3566d632f2735c1ed9051..35c9a20116b971d184181d0dcb1e52c84f480383 100644 --- a/net/minecraft/world/level/block/FarmBlock.java +++ b/net/minecraft/world/level/block/FarmBlock.java @@ -114,7 +114,7 @@ public class FarmBlock extends Block { if (level instanceof ServerLevel serverLevel - && (serverLevel.purpurConfig.farmlandTrampleHeight >= 0D ? fallDistance >= serverLevel.purpurConfig.farmlandTrampleHeight : level.random.nextFloat() < fallDistance - 0.5F) // // Purpur - Configurable farmland trample height + && (serverLevel.purpurConfig.farmlandTrampleHeight >= 0D ? fallDistance >= serverLevel.purpurConfig.farmlandTrampleHeight : level.random.nextFloat() < fallDistance - 0.5) // Purpur - Configurable farmland trample height && entity instanceof LivingEntity - && (entity instanceof Player || serverLevel.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) -+ && (entity instanceof Player || serverLevel.purpurConfig.farmlandBypassMobGriefing ^ serverLevel.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) ++ && (entity instanceof Player || serverLevel.purpurConfig.farmlandBypassMobGriefing ^ serverLevel.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) // Purpur - Add mobGriefing bypass to everything affected && entity.getBbWidth() * entity.getBbWidth() * entity.getBbHeight() > 0.512F) { // CraftBukkit start - Interact soil org.bukkit.event.Cancellable cancellable; diff --git a/net/minecraft/world/level/block/PowderSnowBlock.java b/net/minecraft/world/level/block/PowderSnowBlock.java -index 9c0ded7ae7e3a520704033a866f80743ae85d772..4f3646961beb877520e257e11224c3045467d351 100644 +index 248ac9bc820a96fc7653471308b18834fc735a77..5c6ebde129289f2f7feb44dc1083aa030f55fbff 100644 --- a/net/minecraft/world/level/block/PowderSnowBlock.java +++ b/net/minecraft/world/level/block/PowderSnowBlock.java -@@ -84,7 +84,7 @@ public class PowderSnowBlock extends Block implements BucketPickup { - // CraftBukkit - move down - && entity.mayInteract(serverLevel, pos)) { - // CraftBukkit start -- if (!org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(entity, pos, Blocks.AIR.defaultBlockState(), !(serverLevel.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING) || entity instanceof Player))) { -+ if (!org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(entity, pos, Blocks.AIR.defaultBlockState(), !(serverLevel.purpurConfig.powderSnowBypassMobGriefing ^ serverLevel.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING) || entity instanceof Player))) { - return; - } - // CraftBukkit end +@@ -89,7 +89,7 @@ public class PowderSnowBlock extends Block implements BucketPickup { + // CraftBukkit - move down + && entity1.mayInteract(serverLevel, blockPos)) { + // CraftBukkit start +- if (!org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(entity1, pos, Blocks.AIR.defaultBlockState(), !(serverLevel.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING) || entity1 instanceof Player))) { ++ if (!org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(entity1, pos, Blocks.AIR.defaultBlockState(), !(serverLevel.purpurConfig.powderSnowBypassMobGriefing ^ serverLevel.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING) || entity1 instanceof Player))) { // Purpur - Add mobGriefing bypass to everything affected + return; + } + // CraftBukkit end diff --git a/net/minecraft/world/level/block/TurtleEggBlock.java b/net/minecraft/world/level/block/TurtleEggBlock.java -index c97d5bd7b4c1b6f8eccbe2d123292e913a285ef2..a3a093d95306baac22e5cf720f5b14f733b548d4 100644 +index 31851c5404ba3e60c8e8063c6bd0fa94acac6375..4cafcf185dcc0f6c1a380c40d3b654055b492a9a 100644 --- a/net/minecraft/world/level/block/TurtleEggBlock.java +++ b/net/minecraft/world/level/block/TurtleEggBlock.java -@@ -216,7 +216,7 @@ public class TurtleEggBlock extends Block { +@@ -213,7 +213,7 @@ public class TurtleEggBlock extends Block { // Purpur end - Option to disable turtle egg trampling with feather falling if (entity instanceof Player) return true; diff --git a/purpur-server/minecraft-patches/features/0017-Add-EntityTeleportHinderedEvent.patch b/purpur-server/minecraft-patches/features/0017-Add-EntityTeleportHinderedEvent.patch index 3947801b1..b550e197f 100644 --- a/purpur-server/minecraft-patches/features/0017-Add-EntityTeleportHinderedEvent.patch +++ b/purpur-server/minecraft-patches/features/0017-Add-EntityTeleportHinderedEvent.patch @@ -17,11 +17,11 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . diff --git a/net/minecraft/world/level/block/EndGatewayBlock.java b/net/minecraft/world/level/block/EndGatewayBlock.java -index 84a1bd5e40e635962d795506861447851e443eee..54abeb142e119edd1c1d1c263821b95b1f05c388 100644 +index 68914268ca9350a6c1d794e011e1f9a8aecd609c..8e53b45dbf740de6c6fe499ef424d11b2b15f9d8 100644 --- a/net/minecraft/world/level/block/EndGatewayBlock.java +++ b/net/minecraft/world/level/block/EndGatewayBlock.java -@@ -98,6 +98,13 @@ public class EndGatewayBlock extends BaseEntityBlock implements Portal { - org.bukkit.event.entity.EntityPortalEnterEvent event = new org.bukkit.event.entity.EntityPortalEnterEvent(entity.getBukkitEntity(), new org.bukkit.Location(level.getWorld(), pos.getX(), pos.getY(), pos.getZ()), org.bukkit.PortalType.END_GATEWAY); // Paper - add portal type +@@ -99,6 +99,13 @@ public class EndGatewayBlock extends BaseEntityBlock implements Portal { + 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.END_GATEWAY); // Paper - add portal type if (!event.callEvent()) return; // Paper end - call EntityPortalEnterEvent + // Purpur start - Add EntityTeleportHinderedEvent @@ -35,11 +35,11 @@ index 84a1bd5e40e635962d795506861447851e443eee..54abeb142e119edd1c1d1c263821b95b 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 01cddd7001b4a7f99c1b1d147fac904d3064d733..7e60bcadd2d343e00fc554dba0b85c9191f7efb6 100644 +index cf2b105c98a3b22b9bea59cbafcd598657dc92b5..65d3477ed32c3f0db58aab6ab87d8f1721cbe876 100644 --- a/net/minecraft/world/level/block/EndPortalBlock.java +++ b/net/minecraft/world/level/block/EndPortalBlock.java -@@ -58,6 +58,13 @@ public class EndPortalBlock extends BaseEntityBlock implements Portal { - protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity) { +@@ -59,6 +59,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)) { + // Purpur start - Add EntityTeleportHinderedEvent @@ -50,14 +50,14 @@ index 01cddd7001b4a7f99c1b1d147fac904d3064d733..7e60bcadd2d343e00fc554dba0b85c91 + } + // Purpur end - Add EntityTeleportHinderedEvent // CraftBukkit start - Entity in portal - org.bukkit.event.entity.EntityPortalEnterEvent event = new org.bukkit.event.entity.EntityPortalEnterEvent(entity.getBukkitEntity(), new org.bukkit.Location(level.getWorld(), pos.getX(), pos.getY(), pos.getZ()), org.bukkit.PortalType.ENDER); // Paper - add portal type + 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 006444811c00a8820bddaf75950e794271efdd82..eb659209008209c0930770e5f9671a3d7a4abae6 100644 +index fa0d6baa40c6052c993d870d124af911e8621f0a..1c58af94050b75cd8f405a201448c822792e594a 100644 --- a/net/minecraft/world/level/block/NetherPortalBlock.java +++ b/net/minecraft/world/level/block/NetherPortalBlock.java -@@ -117,6 +117,13 @@ public class NetherPortalBlock extends Block implements Portal { - protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity) { +@@ -118,6 +118,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)) { + // Purpur start - Add EntityTeleportHinderedEvent @@ -68,5 +68,5 @@ index 006444811c00a8820bddaf75950e794271efdd82..eb659209008209c0930770e5f9671a3d + } + // Purpur end - Add EntityTeleportHinderedEvent // CraftBukkit start - Entity in portal - org.bukkit.event.entity.EntityPortalEnterEvent event = new org.bukkit.event.entity.EntityPortalEnterEvent(entity.getBukkitEntity(), new org.bukkit.Location(level.getWorld(), pos.getX(), pos.getY(), pos.getZ()), org.bukkit.PortalType.NETHER); // Paper - add portal type + 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.NETHER); // Paper - add portal type level.getCraftServer().getPluginManager().callEvent(event); diff --git a/purpur-server/minecraft-patches/features/0018-Toggle-for-water-sensitive-mob-damage.patch b/purpur-server/minecraft-patches/features/0018-Toggle-for-water-sensitive-mob-damage.patch index 426f0ac07..8abe2c0c0 100644 --- a/purpur-server/minecraft-patches/features/0018-Toggle-for-water-sensitive-mob-damage.patch +++ b/purpur-server/minecraft-patches/features/0018-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 898b1e01026ec1f44cfe60e9f18a997c86e30594..e717c063c8f9623b8c4b4ea3843d05fd79af3653 100644 +index b6f52326f52ce2885ece346944a321d7c924a470..fe6f29c5e663daea017b19aaafaddda40b4c22bb 100644 --- a/net/minecraft/world/entity/GlowSquid.java +++ b/net/minecraft/world/entity/GlowSquid.java -@@ -52,6 +52,13 @@ public class GlowSquid extends Squid { +@@ -53,6 +53,13 @@ public class GlowSquid extends Squid { } // Purpur end - Configurable entity base attributes @@ -23,10 +23,10 @@ index 898b1e01026ec1f44cfe60e9f18a997c86e30594..e717c063c8f9623b8c4b4ea3843d05fd 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 ecbec552e5cd1935f57872d2fb502d3e9743e3d8..4fa526496265a85b637136f0fd0692ef4f570ad6 100644 +index 581894f58df1df4b50aa537252cb4be6bbcebf80..4d44b35ee34eb256b9aff9d74b1cb9ae1ac9503f 100644 --- a/net/minecraft/world/entity/ambient/Bat.java +++ b/net/minecraft/world/entity/ambient/Bat.java -@@ -109,6 +109,13 @@ public class Bat extends AmbientCreature { +@@ -110,6 +110,13 @@ public class Bat extends AmbientCreature { } // Purpur end - Configurable entity base attributes @@ -41,10 +41,10 @@ index ecbec552e5cd1935f57872d2fb502d3e9743e3d8..4fa526496265a85b637136f0fd0692ef 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 31854506641874bed3306b9688d71e5c47fd9e35..950988bf89f36e8555605d370bb039fe89c66fc7 100644 +index afe7fd92348e6a2a26f8f258373b0c57bb5f4f3f..8da974e98f2207d76e8962eda54c75d0356ecc6f 100644 --- a/net/minecraft/world/entity/animal/Bee.java +++ b/net/minecraft/world/entity/animal/Bee.java -@@ -177,7 +177,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -181,7 +181,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); @@ -68,10 +68,10 @@ index 31854506641874bed3306b9688d71e5c47fd9e35..950988bf89f36e8555605d370bb039fe 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 584568cef949cee24aa7850d2ff99d47cd089a6e..b41ca04043e65f107edaebc49d398650898e35fb 100644 +index 75a63c8e8917f20b389f8194ae3089ff41e9d0ff..1d758dd3ee0834fcf9ebf737bc7a016b881145e5 100644 --- a/net/minecraft/world/entity/animal/Cat.java +++ b/net/minecraft/world/entity/animal/Cat.java -@@ -133,6 +133,13 @@ public class Cat extends TamableAnimal implements VariantHolder itemStack.is(ItemTags.CAT_FOOD), true); + 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 39ad1729ef03fc35a6365ee215be214eccfd959a..2364596156c21e82879f5bf4fd873b9d90b1c308 100644 +index ef808c4462387bb73466b33d1c3156796fea251b..3faa8ac614b6d2f8f90c7092900aa24aa976c0ac 100644 --- a/net/minecraft/world/entity/animal/Chicken.java +++ b/net/minecraft/world/entity/animal/Chicken.java -@@ -88,6 +88,13 @@ public class Chicken extends Animal { +@@ -108,6 +108,13 @@ public class Chicken extends Animal { } // Purpur end - Make entity breeding times configurable @@ -104,7 +104,7 @@ index 39ad1729ef03fc35a6365ee215be214eccfd959a..2364596156c21e82879f5bf4fd873b9d protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/animal/Cod.java b/net/minecraft/world/entity/animal/Cod.java -index 434e1fabf2e360a8f5f4eefed96e3883aa786d10..ac7259cfc8428131f90956d7f76f2227049ffae3 100644 +index ed52fbbf93e7a238d0f45981f8629ba8613bf3d4..6128ed595cb97cc11c1a0e1e1673b3af8e428fb8 100644 --- a/net/minecraft/world/entity/animal/Cod.java +++ b/net/minecraft/world/entity/animal/Cod.java @@ -32,6 +32,13 @@ public class Cod extends AbstractSchoolingFish { @@ -122,10 +122,10 @@ index 434e1fabf2e360a8f5f4eefed96e3883aa786d10..ac7259cfc8428131f90956d7f76f2227 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 e4965300eb41512d03a0b111422c98627cf29a54..a8c76fcbbaa4afd2d0bd568874995b91d8d67c03 100644 +index 0f4f732d9501df42e0d42fe978692c4b0e3d8f0b..4bc6d0eb56b4674e2ac0f13010521314a95e0096 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 Animal { +@@ -60,6 +60,13 @@ public class Cow extends AbstractCow { } // Purpur end - Make entity breeding times configurable @@ -137,13 +137,13 @@ index e4965300eb41512d03a0b111422c98627cf29a54..a8c76fcbbaa4afd2d0bd568874995b91 + // Purpur end - Toggle for water sensitive mob damage + @Override - protected void registerGoals() { - this.goalSelector.addGoal(0, new FloatGoal(this)); + 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 5b764c686e8759a7b04a7b50708c69629be02c04..e104058b3c01bea4cc8a77de2ad4378465903b34 100644 +index 932ec7ed4ec102f64fa977835d2c7ebe23afa6e3..4f3777ee9cf7a67d5e2f489dbcf40ec2a1ed13cd 100644 --- a/net/minecraft/world/entity/animal/Dolphin.java +++ b/net/minecraft/world/entity/animal/Dolphin.java -@@ -156,6 +156,13 @@ public class Dolphin extends AgeableWaterCreature { +@@ -158,6 +158,13 @@ public class Dolphin extends AgeableWaterCreature { } // Purpur end - Configurable entity base attributes @@ -158,10 +158,10 @@ index 5b764c686e8759a7b04a7b50708c69629be02c04..e104058b3c01bea4cc8a77de2ad43784 @Override public SpawnGroupData finalizeSpawn( diff --git a/net/minecraft/world/entity/animal/Fox.java b/net/minecraft/world/entity/animal/Fox.java -index 950bf1c834111e00a3f3eda1390da7ede177ae15..59695ebc6758cbbc444f23ffdf2f7d66cff54430 100644 +index e3631adee6ef690807768c90045c28570982b315..98cb5c75bb4397914271f81aeace045105a9572e 100644 --- a/net/minecraft/world/entity/animal/Fox.java +++ b/net/minecraft/world/entity/animal/Fox.java -@@ -182,6 +182,13 @@ public class Fox extends Animal implements VariantHolder { +@@ -194,6 +194,13 @@ public class Fox extends Animal { } // Purpur end - Make entity breeding times configurable @@ -176,10 +176,10 @@ index 950bf1c834111e00a3f3eda1390da7ede177ae15..59695ebc6758cbbc444f23ffdf2f7d66 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 37a353cbb0e9b16e0fc92bd1bc8194cb4cd3c13a..23108729ce65ef8b7b215b82f29347513cfd4ebf 100644 +index fd0d1abcb34862fc7a812f1e3d96969a5c917352..498302a20b783f2208417b56716f4fc4f18bc333 100644 --- a/net/minecraft/world/entity/animal/IronGolem.java +++ b/net/minecraft/world/entity/animal/IronGolem.java -@@ -98,6 +98,13 @@ public class IronGolem extends AbstractGolem implements NeutralMob { +@@ -99,6 +99,13 @@ public class IronGolem extends AbstractGolem implements NeutralMob { } // Purpur end - Configurable entity base attributes @@ -194,10 +194,10 @@ index 37a353cbb0e9b16e0fc92bd1bc8194cb4cd3c13a..23108729ce65ef8b7b215b82f2934751 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 a64b609bf5ce38a252bfa1bcff869f88e14389b5..5e9795f447e88a42909730d383eaa36acfaf18f5 100644 +index 24313a5dd5f5be39677ac8080ecf56703c751923..114d893f74dfb4422380cad649b7f3708c29c1c3 100644 --- a/net/minecraft/world/entity/animal/MushroomCow.java +++ b/net/minecraft/world/entity/animal/MushroomCow.java -@@ -86,6 +86,13 @@ public class MushroomCow extends Cow implements Shearable, VariantHolder { +@@ -159,6 +159,13 @@ public class Rabbit extends Animal { } // Purpur end - Make entity breeding times configurable @@ -338,10 +338,10 @@ index 7379def14f3f700fb8a746dc89d89e249e93b7b9..9c0ff4d4af5db81973c36c278ae32bf7 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 93eb3cc3605f694337c1604e2db63fed04693617..8bd4b2b29438bff65ed00a42bbc9639111af181f 100644 +index 8559e7e8c5163eb55b997521dca2e96b5ae3c9bc..78f83edd809a72bf5a2f908d8d5e3b1755541a29 100644 --- a/net/minecraft/world/entity/animal/Salmon.java +++ b/net/minecraft/world/entity/animal/Salmon.java -@@ -54,6 +54,13 @@ public class Salmon extends AbstractSchoolingFish implements VariantHolder, B +@@ -152,6 +152,13 @@ public class Axolotl extends Animal implements Bucketable { } // Purpur end - Make entity breeding times configurable @@ -477,10 +441,10 @@ index 07eee1f82331a2172aede02219a7eae8e82c7b59..ee426f8a52c9ff5519641ace0f36a38a 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 0a018dbfe3750cf91892d8cfb5c0eac18e83d587..0c357ffacfe4dd982a58e6cf2338c7e6b24610f5 100644 +index a04892dce1f904fad3312499352ad56853ea658e..47de7e4710234676358378fb5fa9a6b034662e42 100644 --- a/net/minecraft/world/entity/animal/goat/Goat.java +++ b/net/minecraft/world/entity/animal/goat/Goat.java -@@ -135,6 +135,13 @@ public class Goat extends Animal { +@@ -138,6 +138,13 @@ public class Goat extends Animal { } // Purpur end - Make entity breeding times configurable @@ -495,7 +459,7 @@ index 0a018dbfe3750cf91892d8cfb5c0eac18e83d587..0c357ffacfe4dd982a58e6cf2338c7e6 protected Brain.Provider brainProvider() { return Brain.provider(MEMORY_TYPES, SENSOR_TYPES); diff --git a/net/minecraft/world/entity/animal/horse/Donkey.java b/net/minecraft/world/entity/animal/horse/Donkey.java -index b977597785df5665176ab2f330633ec61b7c9feb..1db6ccdc6c83c704aa84a46ee2751a17125bf457 100644 +index 9e1100d672bfb712854d23203d0b730b8cc78a3d..9b17b1acf63fddb5f5b6cdf95283ae8f619a8120 100644 --- a/net/minecraft/world/entity/animal/horse/Donkey.java +++ b/net/minecraft/world/entity/animal/horse/Donkey.java @@ -47,6 +47,13 @@ public class Donkey extends AbstractChestedHorse { @@ -510,13 +474,13 @@ index b977597785df5665176ab2f330633ec61b7c9feb..1db6ccdc6c83c704aa84a46ee2751a17 + // Purpur end - Toggle for water sensitive mob damage + @Override - protected SoundEvent getAmbientSound() { + 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 0339ab08b3029a9ffc102c5b865e411aca2a863c..f257d549570918381925cef98734fc0aa605f8f2 100644 +index 6c1897fadaf93e9a71f0e361a602e6d9475a4f50..8754c3d6fd06bd2c834fe06e238afa330b24e547 100644 --- a/net/minecraft/world/entity/animal/horse/Horse.java +++ b/net/minecraft/world/entity/animal/horse/Horse.java -@@ -74,6 +74,13 @@ public class Horse extends AbstractHorse implements VariantHolder { +@@ -77,6 +77,13 @@ public class Horse extends AbstractHorse { } // Purpur end - Make entity breeding times configurable @@ -531,10 +495,10 @@ index 0339ab08b3029a9ffc102c5b865e411aca2a863c..f257d549570918381925cef98734fc0a 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 6efe52edb6909ed2b38210ce6a0334eddc55f261..872a54186a20fd855fe7981f3ff1c867f4c64d19 100644 +index db73d8821b3374341fa77fbbb3308a21abb60db6..2e776404e65c5dc6040d00a1ed8b5ce0df7badc0 100644 --- a/net/minecraft/world/entity/animal/horse/Llama.java +++ b/net/minecraft/world/entity/animal/horse/Llama.java -@@ -148,6 +148,13 @@ public class Llama extends AbstractChestedHorse implements VariantHolder entityType, Level level) { super(entityType, level); @@ -763,7 +763,7 @@ index 7b74322aef3d7d45a322abccc71d9168b3c0911b..6fccfb243c26c27b665df57e5e19eb33 } // Purpur start - Ridables -@@ -294,7 +294,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -285,7 +285,7 @@ public class EnderMan extends Monster implements NeutralMob { @Override public boolean isSensitiveToWater() { @@ -773,10 +773,10 @@ index 7b74322aef3d7d45a322abccc71d9168b3c0911b..6fccfb243c26c27b665df57e5e19eb33 @Override diff --git a/net/minecraft/world/entity/monster/Endermite.java b/net/minecraft/world/entity/monster/Endermite.java -index 2ea45eba13d0b0ea2d3c1d1a3666d6e2e027a3ef..38e3b3ed2c003fe7bbb476f7bf9a882ea2de792a 100644 +index a3095f2a5ff162d502502ad2ed0a485daba86962..c4bfd0fb0fbee4fa72e4cf17931c95831daaf73f 100644 --- a/net/minecraft/world/entity/monster/Endermite.java +++ b/net/minecraft/world/entity/monster/Endermite.java -@@ -70,6 +70,13 @@ public class Endermite extends Monster { +@@ -71,6 +71,13 @@ public class Endermite extends Monster { } // Purpur end - Configurable entity base attributes @@ -791,7 +791,7 @@ index 2ea45eba13d0b0ea2d3c1d1a3666d6e2e027a3ef..38e3b3ed2c003fe7bbb476f7bf9a882e 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 91574baf7ca095eae909e8e7225ad500bde15af2..61ed6606948cc5f8af543eb9ae05f9aeb4e73b89 100644 +index b14b72f7bbf6cb65b1515c12bae47187fe1371b5..e1debcc5d859961a9d9893fa5ffbe67deea35f6d 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 { @@ -809,10 +809,10 @@ index 91574baf7ca095eae909e8e7225ad500bde15af2..61ed6606948cc5f8af543eb9ae05f9ae protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/Ghast.java b/net/minecraft/world/entity/monster/Ghast.java -index c5987f50b343ded580b3d3f264498d3893433f92..68debfa8c6d0fc3ff536d2b4d89c131fd6aca935 100644 +index a55d588709bbf04d4267bd991fb3be0daaba34d4..4864009a9e531d37f9c3747a042d8ea1ed6ccbf7 100644 --- a/net/minecraft/world/entity/monster/Ghast.java +++ b/net/minecraft/world/entity/monster/Ghast.java -@@ -84,6 +84,13 @@ public class Ghast extends FlyingMob implements Enemy { +@@ -85,6 +85,13 @@ public class Ghast extends FlyingMob implements Enemy { } // Purpur end - Configurable entity base attributes @@ -845,7 +845,7 @@ index 73da18c4b54e250c434fd75971ef0a8f7c8cf6a3..009b8a8b1b9aabc0aef1c12a0c0f65f9 return Monster.createMonsterAttributes().add(Attributes.MAX_HEALTH, 100.0).add(Attributes.MOVEMENT_SPEED, 0.5).add(Attributes.ATTACK_DAMAGE, 50.0); } diff --git a/net/minecraft/world/entity/monster/Guardian.java b/net/minecraft/world/entity/monster/Guardian.java -index 546a4fe6d038d04c0be500e76ff4aebb02c3681a..819679a224ffe33e03d8e6b429c8e31b67c769fa 100644 +index 2b03af6e0f378d855c42fa688d0cd2bc8480102b..9868117ecf0a3b36f81086297c639f6f274e0055 100644 --- a/net/minecraft/world/entity/monster/Guardian.java +++ b/net/minecraft/world/entity/monster/Guardian.java @@ -98,6 +98,13 @@ public class Guardian extends Monster { @@ -863,7 +863,7 @@ index 546a4fe6d038d04c0be500e76ff4aebb02c3681a..819679a224ffe33e03d8e6b429c8e31b protected void registerGoals() { MoveTowardsRestrictionGoal moveTowardsRestrictionGoal = new MoveTowardsRestrictionGoal(this, 1.0); diff --git a/net/minecraft/world/entity/monster/Husk.java b/net/minecraft/world/entity/monster/Husk.java -index 7a8951f93e65c6df145e30d44b9d928dd0c39189..31eef2869945d9de565d627cac3fc1a5db380a2a 100644 +index 75cb1db5584c04e442583ab2f50a26132ed48bfb..9baec22561093d64157d93449e84c23b3f238b39 100644 --- a/net/minecraft/world/entity/monster/Husk.java +++ b/net/minecraft/world/entity/monster/Husk.java @@ -67,6 +67,13 @@ public class Husk extends Zombie { @@ -881,7 +881,7 @@ index 7a8951f93e65c6df145e30d44b9d928dd0c39189..31eef2869945d9de565d627cac3fc1a5 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 1d1cf8748e3fba2e2963ad2fa153fbfe990f5087..ad661f2bf8957644605b52a469d6a7cf8e064398 100644 +index 09804a8c789bff4f40277c2697c3f9aed00c4d15..553a8f0f5b895f3d8528f10efdc918466e4f4d87 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 { @@ -899,7 +899,7 @@ index 1d1cf8748e3fba2e2963ad2fa153fbfe990f5087..ad661f2bf8957644605b52a469d6a7cf protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/MagmaCube.java b/net/minecraft/world/entity/monster/MagmaCube.java -index 2c6b0fd46d9ed6a8d1ca7e90ebf596dd3f310f0e..bf26f5f6017c60d5991d5f6c87da2acbd95ef5bb 100644 +index bb1364c4a220cc93f7ac01cbaa617561de4cd2e3..da90b7dc79aa6d01e88c1250fff662ba1b001dc3 100644 --- a/net/minecraft/world/entity/monster/MagmaCube.java +++ b/net/minecraft/world/entity/monster/MagmaCube.java @@ -68,6 +68,13 @@ public class MagmaCube extends Slime { @@ -917,10 +917,10 @@ index 2c6b0fd46d9ed6a8d1ca7e90ebf596dd3f310f0e..bf26f5f6017c60d5991d5f6c87da2acb 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 4cc1c8d8967b1e9ee5b0b1c50d887f3de3e8a882..32b7c34d3c68dcfa936b628b2d038524204129a3 100644 +index eaa5f2db1bc6b01ef6a508cc5a60ff1e252c2360..409e98d0981aa8be0d35bc5c93f7130a9ce16860 100644 --- a/net/minecraft/world/entity/monster/Phantom.java +++ b/net/minecraft/world/entity/monster/Phantom.java -@@ -139,6 +139,13 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -140,6 +140,13 @@ public class Phantom extends FlyingMob implements Enemy { } // Purpur end - Phantoms attracted to crystals and crystals shoot phantoms @@ -935,7 +935,7 @@ index 4cc1c8d8967b1e9ee5b0b1c50d887f3de3e8a882..32b7c34d3c68dcfa936b628b2d038524 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 9586aa3f3eb61fb0c1224df9d0104da69d7fa6bb..869a1007de13f3f5d757968d0f84cbf43786c870 100644 +index eb4fcf0e78c39a4b94b7edb733694a87e3103552..4c41e7e0a164779bf1d6765fdb750dcd60acd104 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 @@ -953,10 +953,10 @@ index 9586aa3f3eb61fb0c1224df9d0104da69d7fa6bb..869a1007de13f3f5d757968d0f84cbf4 protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/Ravager.java b/net/minecraft/world/entity/monster/Ravager.java -index 3449628fb87fd760abd730d84699c3a09c6ec761..3d9eae0403875a99c25ccb47888dc591f051e744 100644 +index 568a0d17600a82109263de715f3d54fc24039452..0b6550c3abad0eb00af4f303725045a8aa3dc4b1 100644 --- a/net/minecraft/world/entity/monster/Ravager.java +++ b/net/minecraft/world/entity/monster/Ravager.java -@@ -97,6 +97,13 @@ public class Ravager extends Raider { +@@ -100,6 +100,13 @@ public class Ravager extends Raider { } // Purpur end - Configurable entity base attributes @@ -971,10 +971,10 @@ index 3449628fb87fd760abd730d84699c3a09c6ec761..3d9eae0403875a99c25ccb47888dc591 protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/Shulker.java b/net/minecraft/world/entity/monster/Shulker.java -index 03db684c122a07176aa1365550da935cdb66a1b9..c26e4858a14571d58e439cabd5f2593da4ee2634 100644 +index 2b19edafe00be425427f47cac045bf301e3caa39..c9dab7d6b1afe8749022d99aa988782c75270561 100644 --- a/net/minecraft/world/entity/monster/Shulker.java +++ b/net/minecraft/world/entity/monster/Shulker.java -@@ -129,6 +129,13 @@ public class Shulker extends AbstractGolem implements VariantHolder 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 f36e94437b4e21961532ac9ab91767617f9c3c32..d01bc46d77340b10b23d0c0d50bddc37657028c8 100644 +index 309cdc88d98eaf61691bc1594275250f55b4f30c..7b19d64d6b1d61922a2368e38f2b31a42ea29a1a 100644 --- a/net/minecraft/world/entity/monster/Strider.java +++ b/net/minecraft/world/entity/monster/Strider.java -@@ -88,7 +88,7 @@ public class Strider extends Animal implements ItemSteerable, Saddleable { +@@ -86,7 +86,7 @@ public class Strider extends Animal implements ItemSteerable { public Strider(EntityType entityType, Level level) { super(entityType, level); this.blocksBuilding = true; @@ -1091,7 +1091,7 @@ index f36e94437b4e21961532ac9ab91767617f9c3c32..d01bc46d77340b10b23d0c0d50bddc37 this.setPathfindingMalus(PathType.LAVA, 0.0F); this.setPathfindingMalus(PathType.DANGER_FIRE, 0.0F); this.setPathfindingMalus(PathType.DAMAGE_FIRE, 0.0F); -@@ -403,7 +403,7 @@ public class Strider extends Animal implements ItemSteerable, Saddleable { +@@ -389,7 +389,7 @@ public class Strider extends Animal implements ItemSteerable { @Override public boolean isSensitiveToWater() { @@ -1101,7 +1101,7 @@ index f36e94437b4e21961532ac9ab91767617f9c3c32..d01bc46d77340b10b23d0c0d50bddc37 @Override diff --git a/net/minecraft/world/entity/monster/Vex.java b/net/minecraft/world/entity/monster/Vex.java -index f0fe810d4ee2387b6b37c391e0c2feaa52b05c05..20f78e3a37f4c7257b32f2279a6404415aa00e2c 100644 +index 43de5ca497f5e3ac3d64345cb998f392852e6e3b..bc8727a4ae3f1f30f4de5ab81a79c15a8153e34a 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 { @@ -1119,10 +1119,10 @@ index f0fe810d4ee2387b6b37c391e0c2feaa52b05c05..20f78e3a37f4c7257b32f2279a640441 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 0fc1b458101ba9d98d25c9637337caf0949bb893..5f68d73460adfac2ead57d168156a2784af979ae 100644 +index 01a5357d5359394b61f2456fdee8bf3aadf0ca32..50da0e9246f50be6073e26c8fa042fe2b4eabb32 100644 --- a/net/minecraft/world/entity/monster/Vindicator.java +++ b/net/minecraft/world/entity/monster/Vindicator.java -@@ -80,6 +80,13 @@ public class Vindicator extends AbstractIllager { +@@ -81,6 +81,13 @@ public class Vindicator extends AbstractIllager { } // Purpur end - Configurable entity base attributes @@ -1137,7 +1137,7 @@ index 0fc1b458101ba9d98d25c9637337caf0949bb893..5f68d73460adfac2ead57d168156a278 protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/Witch.java b/net/minecraft/world/entity/monster/Witch.java -index ff8380246f6c6c805b222a91ac6a1eb0d130558d..96ba35f3530ab405a960c79955699666deb6b845 100644 +index 2ff6ae7e1c809fa6607cf4d8685ba9b8ac46064c..e90ac2c977555793ee8c25f04ec3c33b0332d312 100644 --- a/net/minecraft/world/entity/monster/Witch.java +++ b/net/minecraft/world/entity/monster/Witch.java @@ -81,6 +81,13 @@ public class Witch extends Raider implements RangedAttackMob { @@ -1155,7 +1155,7 @@ index ff8380246f6c6c805b222a91ac6a1eb0d130558d..96ba35f3530ab405a960c79955699666 protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/WitherSkeleton.java b/net/minecraft/world/entity/monster/WitherSkeleton.java -index 3342f2d92830049837636ff10b5e52f0d85fbd2c..a4dc9b7fbde19b08eb389dc42df21aa5df94e703 100644 +index 213530a2378411db2bc597ba7e0bb68cfdb3ebc9..ef2a7fdc8abe05b7718b71e23556258aba392c75 100644 --- a/net/minecraft/world/entity/monster/WitherSkeleton.java +++ b/net/minecraft/world/entity/monster/WitherSkeleton.java @@ -59,6 +59,13 @@ public class WitherSkeleton extends AbstractSkeleton { @@ -1173,10 +1173,10 @@ index 3342f2d92830049837636ff10b5e52f0d85fbd2c..a4dc9b7fbde19b08eb389dc42df21aa5 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 132b38d717ac3c5acc64a5ec519f345ac57021d8..79a4a3f4e10e1f9c1a6100060a95636075fc8236 100644 +index 9f5db385dabb01bda033aecaebd1d9b7c9e2ed0b..7cb2bc8b126a0027216ec4afd7f6e54fe328b8be 100644 --- a/net/minecraft/world/entity/monster/Zoglin.java +++ b/net/minecraft/world/entity/monster/Zoglin.java -@@ -110,6 +110,13 @@ public class Zoglin extends Monster implements HoglinBase { +@@ -111,6 +111,13 @@ public class Zoglin extends Monster implements HoglinBase { } // Purpur end - Configurable entity base attributes @@ -1191,10 +1191,10 @@ index 132b38d717ac3c5acc64a5ec519f345ac57021d8..79a4a3f4e10e1f9c1a6100060a956360 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 63446c874e7153dcfb99133145c8b5311d7d86cd..bb8c37c8348172947efe14d48ed9ae203409affa 100644 +index 02073d4374580278829e680b875d596844213e78..7f9ee637f443f55ae901d1a0aebedd8f7411996d 100644 --- a/net/minecraft/world/entity/monster/Zombie.java +++ b/net/minecraft/world/entity/monster/Zombie.java -@@ -139,6 +139,13 @@ public class Zombie extends Monster { +@@ -143,6 +143,13 @@ public class Zombie extends Monster { } // Purpur end - Configurable jockey options @@ -1209,10 +1209,10 @@ index 63446c874e7153dcfb99133145c8b5311d7d86cd..bb8c37c8348172947efe14d48ed9ae20 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 f1e9bf75c50f353bd377051be82a391f97d952fd..94b9abc765b78a40a7ecbf4cbd775b778d49c815 100644 +index 6bd633390df582e0b1999f5c67cd76e2b23a04eb..c6e460c21af6145321cad527112adc15e9f30d8d 100644 --- a/net/minecraft/world/entity/monster/ZombieVillager.java +++ b/net/minecraft/world/entity/monster/ZombieVillager.java -@@ -124,6 +124,13 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { +@@ -123,6 +123,13 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { } // Purpur end - Configurable jockey options @@ -1227,7 +1227,7 @@ index f1e9bf75c50f353bd377051be82a391f97d952fd..94b9abc765b78a40a7ecbf4cbd775b77 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 9603589e0501feee900cd21b04eb84b02bb45de2..09c991d8e344f11bc84dea453042ee35c39e580e 100644 +index a8916a8fe5bed57e7b1f755a20e15bed544567fb..34e259b95abfc514e07584a699ecc80de0014250 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 { @@ -1245,10 +1245,10 @@ index 9603589e0501feee900cd21b04eb84b02bb45de2..09c991d8e344f11bc84dea453042ee35 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 5af04c4d58d59b795c3f43eeb30232ab07a4e8c7..9b82be9ec52fd4bc3b85e8289e7e8f9b79b74b9a 100644 +index df763444e9935b8f43ea65b3695c715993903fb8..ee2cd8bfb74dead58f77f9755f306aa7166285fd 100644 --- a/net/minecraft/world/entity/monster/hoglin/Hoglin.java +++ b/net/minecraft/world/entity/monster/hoglin/Hoglin.java -@@ -124,6 +124,13 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { +@@ -127,6 +127,13 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { } // Purpur end - Make entity breeding times configurable @@ -1263,10 +1263,10 @@ index 5af04c4d58d59b795c3f43eeb30232ab07a4e8c7..9b82be9ec52fd4bc3b85e8289e7e8f9b 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 d923a424e2b33b7d4e9e4ecdce8e0a8c825038de..55ebfa5df06a59203248514d10dced9660ebf215 100644 +index 8d37820522b12f2e513ca38c6ccdbb6ef3c2fc71..0059e926f09317e056f3f722c4ca775c43bc0b86 100644 --- a/net/minecraft/world/entity/monster/piglin/Piglin.java +++ b/net/minecraft/world/entity/monster/piglin/Piglin.java -@@ -176,6 +176,13 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento +@@ -161,6 +161,13 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento } // Purpur end - Configurable entity base attributes @@ -1281,7 +1281,7 @@ index d923a424e2b33b7d4e9e4ecdce8e0a8c825038de..55ebfa5df06a59203248514d10dced96 public void addAdditionalSaveData(CompoundTag compound) { super.addAdditionalSaveData(compound); diff --git a/net/minecraft/world/entity/monster/piglin/PiglinBrute.java b/net/minecraft/world/entity/monster/piglin/PiglinBrute.java -index eb82252cd87797927e153974b9280b5eaa251080..2237681f298113bda0556699e19e880f4b04a853 100644 +index f52aba35ee7e202074cda8fb4dfd6a7d9ded1f09..f4893cc54d7f144025da0057beedb3a974c80dc1 100644 --- a/net/minecraft/world/entity/monster/piglin/PiglinBrute.java +++ b/net/minecraft/world/entity/monster/piglin/PiglinBrute.java @@ -90,6 +90,13 @@ public class PiglinBrute extends AbstractPiglin { @@ -1299,10 +1299,10 @@ index eb82252cd87797927e153974b9280b5eaa251080..2237681f298113bda0556699e19e880f 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 017b54e0b8dec8996c90a3c6651867277dd516df..97e5bb0cc335b23211e78044919282bfabad26a5 100644 +index 2846aca7bad55b56430738baeee9554e34da316c..654935f2994c588c8545c21d6de839711c55cdfc 100644 --- a/net/minecraft/world/entity/npc/Villager.java +++ b/net/minecraft/world/entity/npc/Villager.java -@@ -278,6 +278,13 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -281,6 +281,13 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } // Purpur end - Configurable entity base attributes @@ -1317,10 +1317,10 @@ index 017b54e0b8dec8996c90a3c6651867277dd516df..97e5bb0cc335b23211e78044919282bf 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 4ba2921dd99f674344fe3371332c9b23365d3aa2..8046a2d640e7c4d59cb5b9c6dff3bf5f026c7153 100644 +index e726893a3ddf49bdfd2d190477bccf6e33de1847..7ad6a8479a0bdda570ac286220eacd0ba8642111 100644 --- a/net/minecraft/world/entity/npc/WanderingTrader.java +++ b/net/minecraft/world/entity/npc/WanderingTrader.java -@@ -107,6 +107,13 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill +@@ -97,6 +97,13 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill } // Purpur end - Villagers follow emerald blocks diff --git a/purpur-server/minecraft-patches/features/0019-API-for-any-mob-to-burn-daylight.patch b/purpur-server/minecraft-patches/features/0019-API-for-any-mob-to-burn-daylight.patch index c15868c7d..3780d764e 100644 --- a/purpur-server/minecraft-patches/features/0019-API-for-any-mob-to-burn-daylight.patch +++ b/purpur-server/minecraft-patches/features/0019-API-for-any-mob-to-burn-daylight.patch @@ -6,19 +6,19 @@ 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 680a7b609db5de96742a8042d0f9ab5e0a8a8e7f..3709efe15b30e4140ba677ffdcd4634b06e34d7d 100644 +index d4e989889ed21e3900062eed142f26a9bdaaa8d9..66c4047a35be22803b38a9249b74ae32dcb98748 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java -@@ -531,6 +531,24 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -414,6 +414,24 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } // Purpur end - Add canSaveToDisk to Entity + // Purpur start - copied from Mob - API for any mob to burn daylight + public boolean isSunBurnTick() { -+ if (this.level().isDay() && !this.level().isClientSide) { ++ if (this.level().isBrightOutside() && !this.level().isClientSide) { + float lightLevelDependentMagicValue = this.getLightLevelDependentMagicValue(); + BlockPos blockPos = BlockPos.containing(this.getX(), this.getEyeY(), this.getZ()); -+ boolean flag = this.isInWaterRainOrBubble() || this.isInPowderSnow || this.wasInPowderSnow; ++ boolean flag = this.isInWaterOrRain() || this.isInPowderSnow || this.wasInPowderSnow; + if (lightLevelDependentMagicValue > 0.5F + && this.random.nextFloat() * 30.0F < (lightLevelDependentMagicValue - 0.4F) * 2.0F + && !flag @@ -35,40 +35,35 @@ index 680a7b609db5de96742a8042d0f9ab5e0a8a8e7f..3709efe15b30e4140ba677ffdcd4634b this.type = entityType; this.level = level; diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java -index cef0c2bd5c010e9ca6a8f42f2def832c244eae31..c5a5bd367478c32672fbf5ec237bef432814e553 100644 +index 2a7434872472b950fe09bfe8f5f334d9964b51d6..a92ef9269b59305334ed1a8f1b253493e2223306 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java -@@ -301,6 +301,7 @@ public abstract class LivingEntity extends Entity implements Attackable { - public org.bukkit.craftbukkit.entity.CraftLivingEntity getBukkitLivingEntity() { return (org.bukkit.craftbukkit.entity.CraftLivingEntity) super.getBukkitEntity(); } // Paper +@@ -273,6 +273,7 @@ public abstract class LivingEntity extends Entity implements Attackable { 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 + protected boolean shouldBurnInDay = false; public boolean shouldBurnInDay() { return this.shouldBurnInDay; } public void setShouldBurnInDay(boolean shouldBurnInDay) { this.shouldBurnInDay = shouldBurnInDay; } // Purpur - API for any mob to burn daylight + // CraftBukkit end - @Override - public float getBukkitYaw() { -@@ -809,6 +810,7 @@ public abstract class LivingEntity extends Entity implements Attackable { - }); + 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(brain -> compound.put("Brain", brain)); + dataResult.resultOrPartial(LOGGER::error).ifPresent(tag -> compound.put("Brain", tag)); + compound.putBoolean("Purpur.ShouldBurnInDay", this.shouldBurnInDay); // Purpur - API for any mob to burn daylight - } - - @Override -@@ -892,6 +894,12 @@ public abstract class LivingEntity extends Entity implements Attackable { - if (compound.contains("Brain", 10)) { - this.brain = this.makeBrain(new Dynamic<>(NbtOps.INSTANCE, compound.get("Brain"))); - } -+ -+ // Purpur start - API for any mob to burn daylight -+ if (compound.contains("Purpur.ShouldBurnInDay")) { -+ this.shouldBurnInDay = compound.getBoolean("Purpur.ShouldBurnInDay"); -+ } -+ // Purpur end - API for any mob to burn daylight - } - - // CraftBukkit start -@@ -3599,6 +3607,32 @@ public abstract class LivingEntity extends Entity implements Attackable { - if (this.level() instanceof ServerLevel serverLevel && this.isSensitiveToWater() && this.isInWaterRainOrBubble()) { + 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 { + } // 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"); +@@ -3615,6 +3618,32 @@ public abstract class LivingEntity extends Entity implements Attackable { + if (this.level() instanceof ServerLevel serverLevel && this.isSensitiveToWater() && this.isInWaterOrRain()) { this.hurtServer(serverLevel, this.damageSources().drown(), 1.0F); } + @@ -99,19 +94,19 @@ index cef0c2bd5c010e9ca6a8f42f2def832c244eae31..c5a5bd367478c32672fbf5ec237bef43 + // Purpur end - copied from Zombie - API for any mob to burn daylight } - public boolean isSensitiveToWater() { + protected void applyInput() { diff --git a/net/minecraft/world/entity/Mob.java b/net/minecraft/world/entity/Mob.java -index 0b14919c8d7c153d2715abb286e1b466945e86fc..bc22d67bba9b1ebb6bef84f5326375100d24461d 100644 +index b828524d62a940f89f0c0fa926ef0423019ec212..e9344f61a943d610dfabe4918c227ddba166f17f 100644 --- a/net/minecraft/world/entity/Mob.java +++ b/net/minecraft/world/entity/Mob.java -@@ -1657,19 +1657,8 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -1531,19 +1531,8 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab } public boolean isSunBurnTick() { -- if (this.level().isDay() && !this.level().isClientSide) { +- if (this.level().isBrightOutside() && !this.level().isClientSide) { - float lightLevelDependentMagicValue = this.getLightLevelDependentMagicValue(); - BlockPos blockPos = BlockPos.containing(this.getX(), this.getEyeY(), this.getZ()); -- boolean flag = this.isInWaterRainOrBubble() || this.isInPowderSnow || this.wasInPowderSnow; +- boolean flag = this.isInWaterOrRain() || this.isInPowderSnow || this.wasInPowderSnow; - if (lightLevelDependentMagicValue > 0.5F - && this.random.nextFloat() * 30.0F < (lightLevelDependentMagicValue - 0.4F) * 2.0F - && !flag @@ -127,7 +122,7 @@ index 0b14919c8d7c153d2715abb286e1b466945e86fc..bc22d67bba9b1ebb6bef84f532637510 @Override diff --git a/net/minecraft/world/entity/monster/AbstractSkeleton.java b/net/minecraft/world/entity/monster/AbstractSkeleton.java -index e186aee80b052b7fc4bfe02763010bfb2d55ea35..223739818e9ac6c9fe396b82bce53a3ab029610a 100644 +index 0a5de00d41c59528e9f85a7cf82363c45e24d2bc..185edd9878f5193c44b75a126e8182caade7e943 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 @@ -173,16 +168,15 @@ index e186aee80b052b7fc4bfe02763010bfb2d55ea35..223739818e9ac6c9fe396b82bce53a3a super.aiStep(); } -@@ -243,7 +224,7 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo +@@ -242,14 +223,14 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo + public void readAdditionalSaveData(CompoundTag compound) { super.readAdditionalSaveData(compound); this.reassessWeaponGoal(); - // Paper start - shouldBurnInDay API -- if (compound.contains("Paper.ShouldBurnInDay")) { -+ if (false && compound.contains("Paper.ShouldBurnInDay")) { // Purpur - implemented in LivingEntity - API for any mob to burn daylight - this.shouldBurnInDay = compound.getBoolean("Paper.ShouldBurnInDay"); - } - // Paper end - shouldBurnInDay API -@@ -252,7 +233,7 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo +- 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 + } + + // Paper start - shouldBurnInDay API @Override public void addAdditionalSaveData(final net.minecraft.nbt.CompoundTag nbt) { super.addAdditionalSaveData(nbt); @@ -192,7 +186,7 @@ index e186aee80b052b7fc4bfe02763010bfb2d55ea35..223739818e9ac6c9fe396b82bce53a3a // Paper end - shouldBurnInDay API diff --git a/net/minecraft/world/entity/monster/Husk.java b/net/minecraft/world/entity/monster/Husk.java -index 31eef2869945d9de565d627cac3fc1a5db380a2a..e618e716cb5ff3a3c5d284e985455694cc0edde0 100644 +index 9baec22561093d64157d93449e84c23b3f238b39..3f331215ef49c52fa3a53bcf744159d2221111f5 100644 --- a/net/minecraft/world/entity/monster/Husk.java +++ b/net/minecraft/world/entity/monster/Husk.java @@ -19,6 +19,7 @@ import net.minecraft.world.level.ServerLevelAccessor; @@ -213,10 +207,10 @@ index 31eef2869945d9de565d627cac3fc1a5db380a2a..e618e716cb5ff3a3c5d284e985455694 @Override diff --git a/net/minecraft/world/entity/monster/Phantom.java b/net/minecraft/world/entity/monster/Phantom.java -index 32b7c34d3c68dcfa936b628b2d038524204129a3..41ae39349c6f7e6c5d0187257a72782c5dc4c8eb 100644 +index 409e98d0981aa8be0d35bc5c93f7130a9ce16860..c2bc638b0029ac46cf388187ca74545060a54914 100644 --- a/net/minecraft/world/entity/monster/Phantom.java +++ b/net/minecraft/world/entity/monster/Phantom.java -@@ -60,6 +60,7 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -61,6 +61,7 @@ public class Phantom extends FlyingMob implements Enemy { this.xpReward = 5; this.moveControl = new Phantom.PhantomMoveControl(this); this.lookControl = new Phantom.PhantomLookControl(this); @@ -224,7 +218,7 @@ index 32b7c34d3c68dcfa936b628b2d038524204129a3..41ae39349c6f7e6c5d0187257a72782c } // Purpur start - Ridables -@@ -146,6 +147,16 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -147,6 +148,16 @@ public class Phantom extends FlyingMob implements Enemy { } // Purpur end - Toggle for water sensitive mob damage @@ -241,7 +235,7 @@ index 32b7c34d3c68dcfa936b628b2d038524204129a3..41ae39349c6f7e6c5d0187257a72782c @Override public boolean isFlapping() { return (this.getUniqueFlapTickOffset() + this.tickCount) % TICKS_PER_FLAP == 0; -@@ -261,15 +272,7 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -262,15 +273,7 @@ public class Phantom extends FlyingMob implements Enemy { @Override public void aiStep() { @@ -258,31 +252,31 @@ index 32b7c34d3c68dcfa936b628b2d038524204129a3..41ae39349c6f7e6c5d0187257a72782c super.aiStep(); } -@@ -299,7 +302,7 @@ public class Phantom extends FlyingMob implements Enemy { - if (compound.hasUUID("Paper.SpawningEntity")) { - this.spawningEntity = compound.getUUID("Paper.SpawningEntity"); - } -- if (compound.contains("Paper.ShouldBurnInDay")) { -+ if (false && compound.contains("Paper.ShouldBurnInDay")) { // Purpur - implemented in LivingEntity - API for any mob to burn daylight - this.shouldBurnInDay = compound.getBoolean("Paper.ShouldBurnInDay"); - } +@@ -294,7 +297,7 @@ public class Phantom extends FlyingMob implements Enemy { + this.setPhantomSize(compound.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 // Paper end -@@ -316,7 +319,7 @@ public class Phantom extends FlyingMob implements Enemy { - if (this.spawningEntity != null) { - compound.putUUID("Paper.SpawningEntity", this.spawningEntity); - } + } + +@@ -305,7 +308,7 @@ public class Phantom extends FlyingMob implements Enemy { + compound.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 // Paper end } diff --git a/net/minecraft/world/entity/monster/Zombie.java b/net/minecraft/world/entity/monster/Zombie.java -index bb8c37c8348172947efe14d48ed9ae203409affa..b1da45df27f02395d793e7eafe576f5f92aa3a7b 100644 +index 7f9ee637f443f55ae901d1a0aebedd8f7411996d..aed6db357f5b4550407a424a5b83c590044568ee 100644 --- a/net/minecraft/world/entity/monster/Zombie.java +++ b/net/minecraft/world/entity/monster/Zombie.java -@@ -89,11 +89,12 @@ public class Zombie extends Monster { - private boolean canBreakDoors; - private int inWaterTime; +@@ -93,11 +93,12 @@ public class Zombie extends Monster { + private boolean canBreakDoors = false; + private int inWaterTime = 0; public int conversionTime; - private boolean shouldBurnInDay = true; // Paper - Add more Zombie API + //private boolean shouldBurnInDay = true; // Paper - Add more Zombie API // Purpur - implemented in LivingEntity - API for any mob to burn daylight @@ -294,7 +288,7 @@ index bb8c37c8348172947efe14d48ed9ae203409affa..b1da45df27f02395d793e7eafe576f5f } public Zombie(Level level) { -@@ -290,29 +291,7 @@ public class Zombie extends Monster { +@@ -294,29 +295,7 @@ public class Zombie extends Monster { @Override public void aiStep() { @@ -325,7 +319,7 @@ index bb8c37c8348172947efe14d48ed9ae203409affa..b1da45df27f02395d793e7eafe576f5f super.aiStep(); } -@@ -371,6 +350,7 @@ public class Zombie extends Monster { +@@ -375,6 +354,7 @@ public class Zombie extends Monster { // CraftBukkit end } @@ -333,7 +327,7 @@ index bb8c37c8348172947efe14d48ed9ae203409affa..b1da45df27f02395d793e7eafe576f5f public boolean isSunSensitive() { return this.shouldBurnInDay; // Paper - Add more Zombie API } -@@ -509,7 +489,7 @@ public class Zombie extends Monster { +@@ -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); @@ -342,12 +336,12 @@ index bb8c37c8348172947efe14d48ed9ae203409affa..b1da45df27f02395d793e7eafe576f5f } @Override -@@ -522,7 +502,7 @@ public class Zombie extends Monster { - this.startUnderWaterConversion(compound.getInt("DrownedConversionTime")); +@@ -527,7 +507,7 @@ public class Zombie extends Monster { + } else { + this.getEntityData().set(DATA_DROWNED_CONVERSION_ID, false); } - // Paper start - Add more Zombie API -- if (compound.contains("Paper.ShouldBurnInDay")) { -+ if (false && compound.contains("Paper.ShouldBurnInDay")) { // Purpur - implemented in LivingEntity - API for any mob to burn daylight - this.shouldBurnInDay = compound.getBoolean("Paper.ShouldBurnInDay"); - } - // Paper end - Add more Zombie API +- 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 + } + + @Override diff --git a/purpur-server/minecraft-patches/features/0020-Cows-naturally-aggressive-to-players-chance.patch b/purpur-server/minecraft-patches/features/0020-Cows-naturally-aggressive-to-players-chance.patch index 9df4054e7..44ab17c07 100644 --- a/purpur-server/minecraft-patches/features/0020-Cows-naturally-aggressive-to-players-chance.patch +++ b/purpur-server/minecraft-patches/features/0020-Cows-naturally-aggressive-to-players-chance.patch @@ -4,20 +4,33 @@ Date: Mon, 30 Aug 2021 22:49:53 -0500 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 +--- 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 { + .put(EntityType.IRON_GOLEM, IronGolem.createAttributes().build()) + .put(EntityType.LLAMA, Llama.createAttributes().build()) + .put(EntityType.MAGMA_CUBE, MagmaCube.createAttributes().build()) +- .put(EntityType.MOOSHROOM, Cow.createAttributes().build()) ++ .put(EntityType.MOOSHROOM, net.minecraft.world.entity.animal.AbstractCow.createAttributes().build()) // Purpur - Cows naturally aggressive to players chance + .put(EntityType.MULE, AbstractChestedHorse.createBaseChestedHorseAttributes().build()) + .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 a8c76fcbbaa4afd2d0bd568874995b91d8d67c03..b62c4449047da36d8b4d4b87d03c77906d12dc31 100644 +index 4bc6d0eb56b4674e2ac0f13010521314a95e0096..34700b4e599efa6fb9ea8c1d0da26bd7fe8fb9eb 100644 --- a/net/minecraft/world/entity/animal/Cow.java +++ b/net/minecraft/world/entity/animal/Cow.java -@@ -32,6 +32,8 @@ import net.minecraft.world.level.Level; - import net.minecraft.world.level.block.state.BlockState; +@@ -22,6 +22,8 @@ import net.minecraft.world.level.Level; + import net.minecraft.world.level.ServerLevelAccessor; - public class Cow extends Animal { + public class Cow extends AbstractCow { + private boolean isNaturallyAggressiveToPlayers; // Purpur - Cows naturally aggressive to players chance + - private static final EntityDimensions BABY_DIMENSIONS = EntityType.COW.getDimensions().scale(0.5F).withEyeHeight(0.665F); + private static final EntityDataAccessor> DATA_VARIANT_ID = SynchedEntityData.defineId(Cow.class, EntityDataSerializers.COW_VARIANT); public Cow(EntityType entityType, Level level) { -@@ -60,6 +62,7 @@ public class Cow extends Animal { +@@ -50,6 +52,7 @@ public class Cow extends AbstractCow { public void initAttributes() { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.cowMaxHealth); this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.cowScale); @@ -25,7 +38,7 @@ index a8c76fcbbaa4afd2d0bd568874995b91d8d67c03..b62c4449047da36d8b4d4b87d03c7790 } // Purpur end - Configurable entity base attributes -@@ -77,17 +80,27 @@ public class Cow extends Animal { +@@ -67,6 +70,21 @@ public class Cow extends AbstractCow { } // Purpur end - Toggle for water sensitive mob damage @@ -37,28 +50,26 @@ index a8c76fcbbaa4afd2d0bd568874995b91d8d67c03..b62c4449047da36d8b4d4b87d03c7790 + } + // Purpur end - Cows naturally aggressive to players chance + - @Override - protected void registerGoals() { - this.goalSelector.addGoal(0, new FloatGoal(this)); - this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables - this.goalSelector.addGoal(1, new PanicGoal(this, 2.0)); ++ @Override ++ protected void registerGoals() { ++ super.registerGoals(); + this.goalSelector.addGoal(1, new net.minecraft.world.entity.ai.goal.MeleeAttackGoal(this, 1.2000000476837158D, true)); // Purpur - Cows naturally aggressive to players chance - this.goalSelector.addGoal(2, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(3, new TemptGoal(this, 1.25, itemStack -> level().purpurConfig.cowFeedMushrooms > 0 && (itemStack.is(net.minecraft.world.level.block.Blocks.RED_MUSHROOM.asItem()) || itemStack.is(net.minecraft.world.level.block.Blocks.BROWN_MUSHROOM.asItem())) || itemStack.is(ItemTags.COW_FOOD), false)); // Purpur - Cows eat mushrooms - this.goalSelector.addGoal(4, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(5, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(7, new RandomLookAroundGoal(this)); -+ this.targetSelector.addGoal(0, new net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, (ignored, ignored2) -> isNaturallyAggressiveToPlayers)); // Purpur - Cows naturally aggressive to players chance - } - ++ this.targetSelector.addGoal(0, new net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal<>(this, net.minecraft.world.entity.player.Player.class, 10, true, false, (ignored, ignored2) -> isNaturallyAggressiveToPlayers)); // Purpur - Cows naturally aggressive to players chance ++ } ++ @Override -@@ -96,7 +109,7 @@ public class Cow extends Animal { - } - - public static AttributeSupplier.Builder createAttributes() { -- return Animal.createAnimalAttributes().add(Attributes.MAX_HEALTH, 10.0).add(Attributes.MOVEMENT_SPEED, 0.2F); -+ return Animal.createAnimalAttributes().add(Attributes.MAX_HEALTH, 10.0).add(Attributes.MOVEMENT_SPEED, 0.2F).add(Attributes.ATTACK_DAMAGE, 0.0D); // Purpur - Cows naturally aggressive to players chance + protected void defineSynchedData(SynchedEntityData.Builder builder) { + super.defineSynchedData(builder); +@@ -79,6 +97,12 @@ public class Cow extends AbstractCow { + VariantUtils.writeVariant(compound, this.getVariant()); } ++ // Purpur start - Cows naturally aggressive to players chance ++ public static net.minecraft.world.entity.ai.attributes.AttributeSupplier.Builder createAttributes() { ++ return AbstractCow.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 0.0D); ++ } ++ // Purpur end - Cows naturally aggressive to players chance ++ @Override + public void readAdditionalSaveData(CompoundTag compound) { + super.readAdditionalSaveData(compound); diff --git a/purpur-server/minecraft-patches/features/0021-Mobs-always-drop-experience.patch b/purpur-server/minecraft-patches/features/0021-Mobs-always-drop-experience.patch index e9f4d0ddd..87182c064 100644 --- a/purpur-server/minecraft-patches/features/0021-Mobs-always-drop-experience.patch +++ b/purpur-server/minecraft-patches/features/0021-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 e717c063c8f9623b8c4b4ea3843d05fd79af3653..b982d4b7bdf39fcaf5f22cc889467d7b953e3a8e 100644 +index fe6f29c5e663daea017b19aaafaddda40b4c22bb..745f73e1f80d9c433630e31769b404eeeb63cb88 100644 --- a/net/minecraft/world/entity/GlowSquid.java +++ b/net/minecraft/world/entity/GlowSquid.java -@@ -59,6 +59,13 @@ public class GlowSquid extends Squid { +@@ -60,6 +60,13 @@ public class GlowSquid extends Squid { } // Purpur end - Toggle for water sensitive mob damage @@ -23,10 +23,10 @@ index e717c063c8f9623b8c4b4ea3843d05fd79af3653..b982d4b7bdf39fcaf5f22cc889467d7b 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 4fa526496265a85b637136f0fd0692ef4f570ad6..4ac052a78841939a53dac2afb575cb115581e249 100644 +index 4d44b35ee34eb256b9aff9d74b1cb9ae1ac9503f..46aaba94e7b6bde26ad3b61fcf5e0aa07fed7987 100644 --- a/net/minecraft/world/entity/ambient/Bat.java +++ b/net/minecraft/world/entity/ambient/Bat.java -@@ -116,6 +116,13 @@ public class Bat extends AmbientCreature { +@@ -117,6 +117,13 @@ public class Bat extends AmbientCreature { } // Purpur end - Toggle for water sensitive mob damage @@ -41,7 +41,7 @@ index 4fa526496265a85b637136f0fd0692ef4f570ad6..4ac052a78841939a53dac2afb575cb11 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 950988bf89f36e8555605d370bb039fe89c66fc7..d5727999eb67ff30dbf47865d59452483338e170 100644 +index 8da974e98f2207d76e8962eda54c75d0356ecc6f..531d18c5a47eb4676c3dd9b5353f8f9d49b17b54 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 { @@ -59,10 +59,10 @@ index 950988bf89f36e8555605d370bb039fe89c66fc7..d5727999eb67ff30dbf47865d5945248 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 b41ca04043e65f107edaebc49d398650898e35fb..edd796fd34e43d66a48104201d885756fdd968c3 100644 +index 1d758dd3ee0834fcf9ebf737bc7a016b881145e5..db536a60f3f370d163e4429865634b449f4c0cfb 100644 --- a/net/minecraft/world/entity/animal/Cat.java +++ b/net/minecraft/world/entity/animal/Cat.java -@@ -140,6 +140,13 @@ public class Cat extends TamableAnimal implements VariantHolder itemStack.is(ItemTags.CAT_FOOD), true); + 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 2364596156c21e82879f5bf4fd873b9d90b1c308..4d0b172a9d54b1524c8052051859c7178774bef7 100644 +index 3faa8ac614b6d2f8f90c7092900aa24aa976c0ac..75cccc11019c5c6587d441e2c759d351dcb56153 100644 --- a/net/minecraft/world/entity/animal/Chicken.java +++ b/net/minecraft/world/entity/animal/Chicken.java -@@ -95,6 +95,13 @@ public class Chicken extends Animal { +@@ -115,6 +115,13 @@ public class Chicken extends Animal { } // Purpur end - Toggle for water sensitive mob damage @@ -95,7 +95,7 @@ index 2364596156c21e82879f5bf4fd873b9d90b1c308..4d0b172a9d54b1524c8052051859c717 protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/animal/Cod.java b/net/minecraft/world/entity/animal/Cod.java -index ac7259cfc8428131f90956d7f76f2227049ffae3..b259de78198e0e3df9e5901019283ad246c8e044 100644 +index 6128ed595cb97cc11c1a0e1e1673b3af8e428fb8..7e08573cba6efcd78fcce37bccc2923f374f3c44 100644 --- a/net/minecraft/world/entity/animal/Cod.java +++ b/net/minecraft/world/entity/animal/Cod.java @@ -39,6 +39,13 @@ public class Cod extends AbstractSchoolingFish { @@ -113,10 +113,10 @@ index ac7259cfc8428131f90956d7f76f2227049ffae3..b259de78198e0e3df9e5901019283ad2 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 b62c4449047da36d8b4d4b87d03c77906d12dc31..a0297ac3ba520122ed2095d6008c057d749b731e 100644 +index 34700b4e599efa6fb9ea8c1d0da26bd7fe8fb9eb..4a68181d200c26485f290216f9e52b79965215eb 100644 --- a/net/minecraft/world/entity/animal/Cow.java +++ b/net/minecraft/world/entity/animal/Cow.java -@@ -88,6 +88,13 @@ public class Cow extends Animal { +@@ -78,6 +78,13 @@ public class Cow extends AbstractCow { } // Purpur end - Cows naturally aggressive to players chance @@ -129,12 +129,12 @@ index b62c4449047da36d8b4d4b87d03c77906d12dc31..a0297ac3ba520122ed2095d6008c057d + @Override protected void registerGoals() { - this.goalSelector.addGoal(0, new FloatGoal(this)); + super.registerGoals(); diff --git a/net/minecraft/world/entity/animal/Dolphin.java b/net/minecraft/world/entity/animal/Dolphin.java -index e104058b3c01bea4cc8a77de2ad4378465903b34..7003b532182737a745491e397a967b72e6b308aa 100644 +index 4f3777ee9cf7a67d5e2f489dbcf40ec2a1ed13cd..87ba416479df56bad5d13c01e96e92e45b7802a3 100644 --- a/net/minecraft/world/entity/animal/Dolphin.java +++ b/net/minecraft/world/entity/animal/Dolphin.java -@@ -163,6 +163,13 @@ public class Dolphin extends AgeableWaterCreature { +@@ -165,6 +165,13 @@ public class Dolphin extends AgeableWaterCreature { } // Purpur end - Toggle for water sensitive mob damage @@ -149,10 +149,10 @@ index e104058b3c01bea4cc8a77de2ad4378465903b34..7003b532182737a745491e397a967b72 @Override public SpawnGroupData finalizeSpawn( diff --git a/net/minecraft/world/entity/animal/Fox.java b/net/minecraft/world/entity/animal/Fox.java -index 59695ebc6758cbbc444f23ffdf2f7d66cff54430..90452f0945e761077608692877677f522d38bccd 100644 +index 98cb5c75bb4397914271f81aeace045105a9572e..fcda990a5575288b39f6aa16b0ec48d2a57542e9 100644 --- a/net/minecraft/world/entity/animal/Fox.java +++ b/net/minecraft/world/entity/animal/Fox.java -@@ -189,6 +189,13 @@ public class Fox extends Animal implements VariantHolder { +@@ -201,6 +201,13 @@ public class Fox extends Animal { } // Purpur end - Toggle for water sensitive mob damage @@ -167,10 +167,10 @@ index 59695ebc6758cbbc444f23ffdf2f7d66cff54430..90452f0945e761077608692877677f52 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 23108729ce65ef8b7b215b82f29347513cfd4ebf..ccadc9a151e258ff2c74c65c374b1f09d56d10ec 100644 +index 498302a20b783f2208417b56716f4fc4f18bc333..21ed6bfcba6ea58663dc8e932814c1ac084d0402 100644 --- a/net/minecraft/world/entity/animal/IronGolem.java +++ b/net/minecraft/world/entity/animal/IronGolem.java -@@ -105,6 +105,13 @@ public class IronGolem extends AbstractGolem implements NeutralMob { +@@ -106,6 +106,13 @@ public class IronGolem extends AbstractGolem implements NeutralMob { } // Purpur end - Toggle for water sensitive mob damage @@ -185,10 +185,10 @@ index 23108729ce65ef8b7b215b82f29347513cfd4ebf..ccadc9a151e258ff2c74c65c374b1f09 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 5e9795f447e88a42909730d383eaa36acfaf18f5..3bcd119757dfc579df790fcc8919a3636bafa7fe 100644 +index 114d893f74dfb4422380cad649b7f3708c29c1c3..07c89507b13d44dfc7903570e0d8c834e91866b7 100644 --- a/net/minecraft/world/entity/animal/MushroomCow.java +++ b/net/minecraft/world/entity/animal/MushroomCow.java -@@ -93,6 +93,13 @@ public class MushroomCow extends Cow implements Shearable, VariantHolder { +@@ -166,6 +166,13 @@ public class Rabbit extends Animal { } // Purpur end - Toggle for water sensitive mob damage @@ -329,10 +329,10 @@ index 9c0ff4d4af5db81973c36c278ae32bf76ef5d558..da5b32a17283e540615373097acc511d 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 8bd4b2b29438bff65ed00a42bbc9639111af181f..5da2f14770aebb2286c3e8cbd9622a89a33e0e20 100644 +index 78f83edd809a72bf5a2f908d8d5e3b1755541a29..25811130990e680174a0e930a6d066ad2d580f60 100644 --- a/net/minecraft/world/entity/animal/Salmon.java +++ b/net/minecraft/world/entity/animal/Salmon.java -@@ -61,6 +61,13 @@ public class Salmon extends AbstractSchoolingFish implements VariantHolder, B +@@ -159,6 +159,13 @@ public class Axolotl extends Animal implements Bucketable { } // Purpur end - Toggle for water sensitive mob damage @@ -473,10 +437,10 @@ index ee426f8a52c9ff5519641ace0f36a38a36ecd24b..eb74d8313fd3cc15a33330fe7bafaca4 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 0c357ffacfe4dd982a58e6cf2338c7e6b24610f5..6f106f10466440f8e65e04511f67d48f082d703f 100644 +index 47de7e4710234676358378fb5fa9a6b034662e42..5eb656a33cb6ca8a93125c27cd7db175d35b80c3 100644 --- a/net/minecraft/world/entity/animal/goat/Goat.java +++ b/net/minecraft/world/entity/animal/goat/Goat.java -@@ -142,6 +142,13 @@ public class Goat extends Animal { +@@ -145,6 +145,13 @@ public class Goat extends Animal { } // Purpur end - Toggle for water sensitive mob damage @@ -491,7 +455,7 @@ index 0c357ffacfe4dd982a58e6cf2338c7e6b24610f5..6f106f10466440f8e65e04511f67d48f protected Brain.Provider brainProvider() { return Brain.provider(MEMORY_TYPES, SENSOR_TYPES); diff --git a/net/minecraft/world/entity/animal/horse/Donkey.java b/net/minecraft/world/entity/animal/horse/Donkey.java -index 1db6ccdc6c83c704aa84a46ee2751a17125bf457..3e0181578a6f2d22d1da3776abf30bf97d124620 100644 +index 9b17b1acf63fddb5f5b6cdf95283ae8f619a8120..0783d41a6c4622b03d9d368c1af949af1292dcb7 100644 --- a/net/minecraft/world/entity/animal/horse/Donkey.java +++ b/net/minecraft/world/entity/animal/horse/Donkey.java @@ -54,6 +54,13 @@ public class Donkey extends AbstractChestedHorse { @@ -506,13 +470,13 @@ index 1db6ccdc6c83c704aa84a46ee2751a17125bf457..3e0181578a6f2d22d1da3776abf30bf9 + // Purpur end - Mobs always drop experience + @Override - protected SoundEvent getAmbientSound() { + 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 f257d549570918381925cef98734fc0aa605f8f2..be0d636ca894c5995f28f59c196cd8e56dd228c4 100644 +index 8754c3d6fd06bd2c834fe06e238afa330b24e547..206f911d1184a22f401d217f713495e6e85263be 100644 --- a/net/minecraft/world/entity/animal/horse/Horse.java +++ b/net/minecraft/world/entity/animal/horse/Horse.java -@@ -81,6 +81,13 @@ public class Horse extends AbstractHorse implements VariantHolder { +@@ -84,6 +84,13 @@ public class Horse extends AbstractHorse { } // Purpur end - Toggle for water sensitive mob damage @@ -527,10 +491,10 @@ index f257d549570918381925cef98734fc0aa605f8f2..be0d636ca894c5995f28f59c196cd8e5 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 872a54186a20fd855fe7981f3ff1c867f4c64d19..c21d558a6a3a61d6c54b8163f8cb4963846b2c26 100644 +index 2e776404e65c5dc6040d00a1ed8b5ce0df7badc0..e300a1284fd98791871ba1780bb7352cd848766a 100644 --- a/net/minecraft/world/entity/animal/horse/Llama.java +++ b/net/minecraft/world/entity/animal/horse/Llama.java -@@ -155,6 +155,13 @@ public class Llama extends AbstractChestedHorse implements VariantHolder 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 ad661f2bf8957644605b52a469d6a7cf8e064398..9686658b90e886d6236f553d7406771814d18672 100644 +index 553a8f0f5b895f3d8528f10efdc918466e4f4d87..b8ada9ebd0d8d4ca0e8eb7e6084a0057f4758ea4 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 { @@ -869,7 +869,7 @@ index ad661f2bf8957644605b52a469d6a7cf8e064398..9686658b90e886d6236f553d74067718 protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/MagmaCube.java b/net/minecraft/world/entity/monster/MagmaCube.java -index bf26f5f6017c60d5991d5f6c87da2acbd95ef5bb..312d4a3d312b5c326d6ca13ccfc48171e18f4370 100644 +index da90b7dc79aa6d01e88c1250fff662ba1b001dc3..7ef0f84d4c449a8991683ca66d7b16ca21ef4cdf 100644 --- a/net/minecraft/world/entity/monster/MagmaCube.java +++ b/net/minecraft/world/entity/monster/MagmaCube.java @@ -75,6 +75,13 @@ public class MagmaCube extends Slime { @@ -887,10 +887,10 @@ index bf26f5f6017c60d5991d5f6c87da2acbd95ef5bb..312d4a3d312b5c326d6ca13ccfc48171 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 41ae39349c6f7e6c5d0187257a72782c5dc4c8eb..3c105d164acd9e45de2335ef28ddecf3fa48d267 100644 +index c2bc638b0029ac46cf388187ca74545060a54914..2e1e7cf0fe1bc25437cf2f429ff33b4263b1a6f1 100644 --- a/net/minecraft/world/entity/monster/Phantom.java +++ b/net/minecraft/world/entity/monster/Phantom.java -@@ -157,6 +157,13 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -158,6 +158,13 @@ public class Phantom extends FlyingMob implements Enemy { public void setShouldBurnInDay(boolean shouldBurnInDay) { this.shouldBurnInDay = shouldBurnInDay; } // Purpur end - API for any mob to burn daylight @@ -905,7 +905,7 @@ index 41ae39349c6f7e6c5d0187257a72782c5dc4c8eb..3c105d164acd9e45de2335ef28ddecf3 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 869a1007de13f3f5d757968d0f84cbf43786c870..a57d869cdc6a05124237933437aa2d26ff72cab3 100644 +index 4c41e7e0a164779bf1d6765fdb750dcd60acd104..3d12b509a9b57f0326ec48eed93b2962f6f0e493 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 @@ -923,10 +923,10 @@ index 869a1007de13f3f5d757968d0f84cbf43786c870..a57d869cdc6a05124237933437aa2d26 protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/Ravager.java b/net/minecraft/world/entity/monster/Ravager.java -index 3d9eae0403875a99c25ccb47888dc591f051e744..ce5cd032203839887a29008c2a1420c6bb6f4fee 100644 +index 0b6550c3abad0eb00af4f303725045a8aa3dc4b1..56b844a8252c7f7ece12db98775230134e1898d6 100644 --- a/net/minecraft/world/entity/monster/Ravager.java +++ b/net/minecraft/world/entity/monster/Ravager.java -@@ -104,6 +104,13 @@ public class Ravager extends Raider { +@@ -107,6 +107,13 @@ public class Ravager extends Raider { } // Purpur end - Toggle for water sensitive mob damage @@ -941,10 +941,10 @@ index 3d9eae0403875a99c25ccb47888dc591f051e744..ce5cd032203839887a29008c2a1420c6 protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/Shulker.java b/net/minecraft/world/entity/monster/Shulker.java -index c26e4858a14571d58e439cabd5f2593da4ee2634..a006300aea2cbb05400550f1c79e872d095384f8 100644 +index c9dab7d6b1afe8749022d99aa988782c75270561..56401c993d9a4c41b0782831a8b857646bf18f88 100644 --- a/net/minecraft/world/entity/monster/Shulker.java +++ b/net/minecraft/world/entity/monster/Shulker.java -@@ -136,6 +136,13 @@ public class Shulker extends AbstractGolem implements VariantHolder 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 d01bc46d77340b10b23d0c0d50bddc37657028c8..241526239bdbd5d9276f85e7fca46a7051f46a25 100644 +index 7b19d64d6b1d61922a2368e38f2b31a42ea29a1a..69b3cd61d49e41ab5fdb861043b012b1f60f8995 100644 --- a/net/minecraft/world/entity/monster/Strider.java +++ b/net/minecraft/world/entity/monster/Strider.java -@@ -126,6 +126,13 @@ public class Strider extends Animal implements ItemSteerable, Saddleable { +@@ -124,6 +124,13 @@ public class Strider extends Animal implements ItemSteerable { } // Purpur end - Make entity breeding times configurable @@ -1067,7 +1067,7 @@ index d01bc46d77340b10b23d0c0d50bddc37657028c8..241526239bdbd5d9276f85e7fca46a70 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 20f78e3a37f4c7257b32f2279a6404415aa00e2c..0d9dd9919b2b9902137df861bcac8057e4b741de 100644 +index bc8727a4ae3f1f30f4de5ab81a79c15a8153e34a..96069c066f6f8fd822e05b264741205ce1077b03 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 { @@ -1085,10 +1085,10 @@ index 20f78e3a37f4c7257b32f2279a6404415aa00e2c..0d9dd9919b2b9902137df861bcac8057 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 5f68d73460adfac2ead57d168156a2784af979ae..b584f71440a81ac09d24e59763a21e857f290e5a 100644 +index 50da0e9246f50be6073e26c8fa042fe2b4eabb32..8ba772d9f5f53dc0dea269c5089e742f20dbc308 100644 --- a/net/minecraft/world/entity/monster/Vindicator.java +++ b/net/minecraft/world/entity/monster/Vindicator.java -@@ -87,6 +87,13 @@ public class Vindicator extends AbstractIllager { +@@ -88,6 +88,13 @@ public class Vindicator extends AbstractIllager { } // Purpur end - Toggle for water sensitive mob damage @@ -1103,7 +1103,7 @@ index 5f68d73460adfac2ead57d168156a2784af979ae..b584f71440a81ac09d24e59763a21e85 protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/Witch.java b/net/minecraft/world/entity/monster/Witch.java -index 96ba35f3530ab405a960c79955699666deb6b845..e4353c64732067198f082cdd266c1f1ee1fe4f4e 100644 +index e90ac2c977555793ee8c25f04ec3c33b0332d312..4b253ae8149f5d9505c5140a00a96d8c8850b1c4 100644 --- a/net/minecraft/world/entity/monster/Witch.java +++ b/net/minecraft/world/entity/monster/Witch.java @@ -88,6 +88,13 @@ public class Witch extends Raider implements RangedAttackMob { @@ -1121,7 +1121,7 @@ index 96ba35f3530ab405a960c79955699666deb6b845..e4353c64732067198f082cdd266c1f1e protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/WitherSkeleton.java b/net/minecraft/world/entity/monster/WitherSkeleton.java -index a4dc9b7fbde19b08eb389dc42df21aa5df94e703..ff2596f69d00b36c65872ab2e27e5d44a6ffa3e1 100644 +index ef2a7fdc8abe05b7718b71e23556258aba392c75..b3f5b2e3e2cfc378de948c0e186727d5687c0e98 100644 --- a/net/minecraft/world/entity/monster/WitherSkeleton.java +++ b/net/minecraft/world/entity/monster/WitherSkeleton.java @@ -66,6 +66,13 @@ public class WitherSkeleton extends AbstractSkeleton { @@ -1139,10 +1139,10 @@ index a4dc9b7fbde19b08eb389dc42df21aa5df94e703..ff2596f69d00b36c65872ab2e27e5d44 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 79a4a3f4e10e1f9c1a6100060a95636075fc8236..d2a67f3e1c971f737e58567dae23fa70e9d942ea 100644 +index 7cb2bc8b126a0027216ec4afd7f6e54fe328b8be..bdf52bfe661d4c0ad6c5a28254302f8f0021c09b 100644 --- a/net/minecraft/world/entity/monster/Zoglin.java +++ b/net/minecraft/world/entity/monster/Zoglin.java -@@ -117,6 +117,13 @@ public class Zoglin extends Monster implements HoglinBase { +@@ -118,6 +118,13 @@ public class Zoglin extends Monster implements HoglinBase { } // Purpur end - Toggle for water sensitive mob damage @@ -1157,10 +1157,10 @@ index 79a4a3f4e10e1f9c1a6100060a95636075fc8236..d2a67f3e1c971f737e58567dae23fa70 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 b1da45df27f02395d793e7eafe576f5f92aa3a7b..7af71c777dca26cd94b1807a2a77ea0d30e92976 100644 +index aed6db357f5b4550407a424a5b83c590044568ee..783f8b9a05939b9f42fc77065f6347e3c6ddf8f5 100644 --- a/net/minecraft/world/entity/monster/Zombie.java +++ b/net/minecraft/world/entity/monster/Zombie.java -@@ -147,6 +147,13 @@ public class Zombie extends Monster { +@@ -151,6 +151,13 @@ public class Zombie extends Monster { } // Purpur end - Toggle for water sensitive mob damage @@ -1175,10 +1175,10 @@ index b1da45df27f02395d793e7eafe576f5f92aa3a7b..7af71c777dca26cd94b1807a2a77ea0d 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 94b9abc765b78a40a7ecbf4cbd775b778d49c815..1ca0514732916d325c4a76d73120aaf613c3f780 100644 +index c6e460c21af6145321cad527112adc15e9f30d8d..ae5939c940bdd93977fa882360fc31e46479554f 100644 --- a/net/minecraft/world/entity/monster/ZombieVillager.java +++ b/net/minecraft/world/entity/monster/ZombieVillager.java -@@ -131,6 +131,13 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { +@@ -130,6 +130,13 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { } // Purpur end - Toggle for water sensitive mob damage @@ -1193,7 +1193,7 @@ index 94b9abc765b78a40a7ecbf4cbd775b778d49c815..1ca0514732916d325c4a76d73120aaf6 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 09c991d8e344f11bc84dea453042ee35c39e580e..fddbbffafea275dad187b7908386cf4c05c86743 100644 +index 34e259b95abfc514e07584a699ecc80de0014250..39489c8a347031fb4f73faca46039786e35762ac 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 { @@ -1211,10 +1211,10 @@ index 09c991d8e344f11bc84dea453042ee35c39e580e..fddbbffafea275dad187b7908386cf4c 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 9b82be9ec52fd4bc3b85e8289e7e8f9b79b74b9a..28f3bc31b4c093e426ae141edeee61a12a444ba1 100644 +index ee2cd8bfb74dead58f77f9755f306aa7166285fd..252a6469cab202bcc612b4d52a5027c615029a21 100644 --- a/net/minecraft/world/entity/monster/hoglin/Hoglin.java +++ b/net/minecraft/world/entity/monster/hoglin/Hoglin.java -@@ -131,6 +131,13 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { +@@ -134,6 +134,13 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { } // Purpur end - Toggle for water sensitive mob damage @@ -1229,10 +1229,10 @@ index 9b82be9ec52fd4bc3b85e8289e7e8f9b79b74b9a..28f3bc31b4c093e426ae141edeee61a1 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 55ebfa5df06a59203248514d10dced9660ebf215..f0d78cf5fe2c39add9a673471103c352cce72a45 100644 +index 0059e926f09317e056f3f722c4ca775c43bc0b86..54ab9593b39051d47f1dd8bddf210064768382be 100644 --- a/net/minecraft/world/entity/monster/piglin/Piglin.java +++ b/net/minecraft/world/entity/monster/piglin/Piglin.java -@@ -183,6 +183,13 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento +@@ -168,6 +168,13 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento } // Purpur end - Toggle for water sensitive mob damage @@ -1247,7 +1247,7 @@ index 55ebfa5df06a59203248514d10dced9660ebf215..f0d78cf5fe2c39add9a673471103c352 public void addAdditionalSaveData(CompoundTag compound) { super.addAdditionalSaveData(compound); diff --git a/net/minecraft/world/entity/monster/piglin/PiglinBrute.java b/net/minecraft/world/entity/monster/piglin/PiglinBrute.java -index 2237681f298113bda0556699e19e880f4b04a853..4984b9864b63f92bc939b530253e871ca94a3277 100644 +index f4893cc54d7f144025da0057beedb3a974c80dc1..70ee15527fa6f30783d6a58bb767b18124f25c53 100644 --- a/net/minecraft/world/entity/monster/piglin/PiglinBrute.java +++ b/net/minecraft/world/entity/monster/piglin/PiglinBrute.java @@ -97,6 +97,13 @@ public class PiglinBrute extends AbstractPiglin { @@ -1265,10 +1265,10 @@ index 2237681f298113bda0556699e19e880f4b04a853..4984b9864b63f92bc939b530253e871c 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 97e5bb0cc335b23211e78044919282bfabad26a5..16fbe4e6521cd4f6baa8f5dd590da0fc749f6585 100644 +index 654935f2994c588c8545c21d6de839711c55cdfc..5b52bbac242a7fbb8eaea7e41b7265a1a859ff7c 100644 --- a/net/minecraft/world/entity/npc/Villager.java +++ b/net/minecraft/world/entity/npc/Villager.java -@@ -285,6 +285,13 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -288,6 +288,13 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } // Purpur end - Toggle for water sensitive mob damage @@ -1283,10 +1283,10 @@ index 97e5bb0cc335b23211e78044919282bfabad26a5..16fbe4e6521cd4f6baa8f5dd590da0fc 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 8046a2d640e7c4d59cb5b9c6dff3bf5f026c7153..c3fbcc7956a64d49466874776f257ba27f55f2a4 100644 +index 7ad6a8479a0bdda570ac286220eacd0ba8642111..776e4d001bc6e6d419eb4392dc85bf4594e57058 100644 --- a/net/minecraft/world/entity/npc/WanderingTrader.java +++ b/net/minecraft/world/entity/npc/WanderingTrader.java -@@ -114,6 +114,13 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill +@@ -104,6 +104,13 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill } // Purpur end - Toggle for water sensitive mob damage