From 3779c2abe846a58d3fee466037d2858e768e752f Mon Sep 17 00:00:00 2001 From: Ben Kerllenevich Date: Wed, 24 Nov 2021 21:50:44 -0500 Subject: [PATCH] that was far to easy... --- .../server/0006-Ridables.patch | 555 +++++++++--------- 1 file changed, 272 insertions(+), 283 deletions(-) rename patches/{unapplied => }/server/0006-Ridables.patch (92%) diff --git a/patches/unapplied/server/0006-Ridables.patch b/patches/server/0006-Ridables.patch similarity index 92% rename from patches/unapplied/server/0006-Ridables.patch rename to patches/server/0006-Ridables.patch index 050586b52..ee596b4c4 100644 --- a/patches/unapplied/server/0006-Ridables.patch +++ b/patches/server/0006-Ridables.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Ridables diff --git a/src/main/java/net/minecraft/core/BlockPos.java b/src/main/java/net/minecraft/core/BlockPos.java -index 0cc0242d981586413bcc349df6e6fd3bc09710f1..ae394b3d8b8a157d345e102f5997058da03abfaf 100644 +index 0dcf75c5c792650d7a5b9354222df16bcd1cfbd2..d3d8fa34f89534c057f4e5c7f93da956c349a369 100644 --- a/src/main/java/net/minecraft/core/BlockPos.java +++ b/src/main/java/net/minecraft/core/BlockPos.java @@ -41,6 +41,12 @@ public class BlockPos extends Vec3i { @@ -22,10 +22,10 @@ index 0cc0242d981586413bcc349df6e6fd3bc09710f1..ae394b3d8b8a157d345e102f5997058d super(x, y, z); } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index c97387afe3dec66eec436f5e109f17acf024f988..2965c79daf2126b691307442ad4a41ce3420ed34 100644 +index 3a17733fc6d6cf7e9a792a65e8d9565209640b87..3ab79c0a12d0e6e91578e8649c7157122086bf25 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1607,6 +1607,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0; // Paper worldserver.hasEntityMoveEvent = io.papermc.paper.event.entity.EntityMoveEvent.getHandlerList().getRegisteredListeners().length > 0; // Paper @@ -34,10 +34,10 @@ index c97387afe3dec66eec436f5e109f17acf024f988..2965c79daf2126b691307442ad4a41ce this.profiler.push(() -> { diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index d40a367670ccea01978cabf7d45f3c1a690662fc..ab4424acd2ef444da0dee575c5ce270a21a00532 100644 +index b8e7f70f4ee1b28635537e04f7bd0d0cd6afb4b3..e0d8702b0e758367955813b92b6a72572f23ea86 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -200,6 +200,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -206,6 +206,7 @@ public class ServerLevel extends Level implements WorldGenLevel { public final UUID uuid; public boolean hasPhysicsEvent = true; // Paper public boolean hasEntityMoveEvent = false; // Paper @@ -46,12 +46,12 @@ index d40a367670ccea01978cabf7d45f3c1a690662fc..ab4424acd2ef444da0dee575c5ce270a return new Throwable(entity + " Added to world at " + new java.util.Date()); } diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 6c241da9f2711aeade0f3863e4e2bab1f6b242af..6c7628bb6f7f46555650195b19318c7f338825ae 100644 +index ba31b14bf27fe43eeacf067755ecf45dd50d3ff5..bd0363b1c2d0604841c7d8161733281d7898110a 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -664,6 +664,15 @@ public class ServerPlayer extends Player { - } - +@@ -644,6 +644,15 @@ public class ServerPlayer extends Player { + this.trackStartFallingPosition(); + this.trackEnteredOrExitedLavaOnVehicle(); this.advancements.flushDirty(this); + + // Purpur start @@ -65,7 +65,7 @@ index 6c241da9f2711aeade0f3863e4e2bab1f6b242af..6c7628bb6f7f46555650195b19318c7f } public void doTick() { -@@ -2439,4 +2448,6 @@ public class ServerPlayer extends Player { +@@ -2428,4 +2437,6 @@ public class ServerPlayer extends Player { return (CraftPlayer) super.getBukkitEntity(); } // CraftBukkit end @@ -73,10 +73,10 @@ index 6c241da9f2711aeade0f3863e4e2bab1f6b242af..6c7628bb6f7f46555650195b19318c7f + } diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 96c15c334f299cc289e55bc4b3286c498ca3334d..6a71bbd96f3720321bb840d94bbd8942378fa695 100644 +index 0d4315c4a2a9703f63bbebacd10209a904833749..9f1bba2736648ea323390fd0442826fc3e561b68 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -2426,6 +2426,8 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser +@@ -2364,6 +2364,8 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser ServerGamePacketListenerImpl.this.cserver.getPluginManager().callEvent(event); @@ -86,10 +86,10 @@ index 96c15c334f299cc289e55bc4b3286c498ca3334d..6a71bbd96f3720321bb840d94bbd8942 if ((entity instanceof AbstractFish && origItem != null && origItem.asItem() == Items.WATER_BUCKET) && (event.isCancelled() || ServerGamePacketListenerImpl.this.player.getInventory().getSelected() == null || ServerGamePacketListenerImpl.this.player.getInventory().getSelected().getItem() != origItem)) { ServerGamePacketListenerImpl.this.send(new ClientboundAddMobPacket((AbstractFish) entity)); diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 33a0272b35c8823fe125b8dcb0b1616656672925..df7f06f8c7a1d986435bc49219c77fb349f7d1e1 100644 +index 30f11e94e18222bb69c4c69f688923ef62877a8e..e1a0efe5437aa3709a8fb93cf1f97b262a2ad3ee 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -230,7 +230,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n +@@ -229,7 +229,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, i public float yRotO; public float xRotO; private AABB bb; @@ -97,8 +97,8 @@ index 33a0272b35c8823fe125b8dcb0b1616656672925..df7f06f8c7a1d986435bc49219c77fb3 + public boolean onGround; // Purpur - protected -> public public boolean horizontalCollision; public boolean verticalCollision; - public boolean hurtMarked; -@@ -291,7 +291,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n + public boolean minorHorizontalCollision; +@@ -291,7 +291,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, i private final Set tags; private final double[] pistonDeltas; private long pistonDeltasGameTime; @@ -107,7 +107,7 @@ index 33a0272b35c8823fe125b8dcb0b1616656672925..df7f06f8c7a1d986435bc49219c77fb3 private float eyeHeight; public boolean isInPowderSnow; public boolean wasInPowderSnow; -@@ -2619,6 +2619,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n +@@ -2393,6 +2393,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, i this.passengers = ImmutableList.copyOf(list); } @@ -120,7 +120,7 @@ index 33a0272b35c8823fe125b8dcb0b1616656672925..df7f06f8c7a1d986435bc49219c77fb3 } return true; // CraftBukkit } -@@ -2659,6 +2665,14 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n +@@ -2433,6 +2439,14 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, i return false; } // Spigot end @@ -135,7 +135,7 @@ index 33a0272b35c8823fe125b8dcb0b1616656672925..df7f06f8c7a1d986435bc49219c77fb3 if (this.passengers.size() == 1 && this.passengers.get(0) == entity) { this.passengers = ImmutableList.of(); } else { -@@ -4265,4 +4279,41 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n +@@ -4049,4 +4063,41 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, i return ((ServerChunkCache) level.getChunkSource()).isPositionTicking(this); } // Paper end @@ -178,10 +178,10 @@ index 33a0272b35c8823fe125b8dcb0b1616656672925..df7f06f8c7a1d986435bc49219c77fb3 + // Purpur end } diff --git a/src/main/java/net/minecraft/world/entity/GlowSquid.java b/src/main/java/net/minecraft/world/entity/GlowSquid.java -index 94f7f8238c01d203d28640c56e35deab2bf17bbc..f0c30ab5e32e78850d402aa4bc7d42667610dbf0 100644 +index 645c1dc9bd09b135a641759c76ce8d957b9bd488..03adc3b746e05bb4b0514ba4a66c101b9742ceed 100644 --- a/src/main/java/net/minecraft/world/entity/GlowSquid.java +++ b/src/main/java/net/minecraft/world/entity/GlowSquid.java -@@ -19,6 +19,18 @@ public class GlowSquid extends Squid { +@@ -23,6 +23,18 @@ public class GlowSquid extends Squid { super(type, world); } @@ -201,10 +201,10 @@ index 94f7f8238c01d203d28640c56e35deab2bf17bbc..f0c30ab5e32e78850d402aa4bc7d4266 protected ParticleOptions getInkParticle() { return ParticleTypes.GLOW_SQUID_INK; diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 465dab588e770bf4d1e645e1f451a066f388014a..9b0333774621b0566a59ba53ccff88fb20e6c265 100644 +index beebd31d7a82a4edae0e2e7c5890cd13fbb6c4df..0ec390a471441c094ce543c4590d3d7fa8b989a1 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -220,9 +220,9 @@ public abstract class LivingEntity extends Entity { +@@ -217,9 +217,9 @@ public abstract class LivingEntity extends Entity { protected int deathScore; public float lastHurt; public boolean jumping; @@ -217,7 +217,7 @@ index 465dab588e770bf4d1e645e1f451a066f388014a..9b0333774621b0566a59ba53ccff88fb protected int lerpSteps; protected double lerpX; protected double lerpY; -@@ -2572,7 +2572,7 @@ public abstract class LivingEntity extends Entity { +@@ -2571,7 +2571,7 @@ public abstract class LivingEntity extends Entity { } protected long lastJumpTime = 0L; // Paper - add critical damage API @@ -226,7 +226,7 @@ index 465dab588e770bf4d1e645e1f451a066f388014a..9b0333774621b0566a59ba53ccff88fb double d0 = (double) this.getJumpPower() + this.getJumpBoostPower(); Vec3 vec3d = this.getDeltaMovement(); // Paper start - add critical damage API -@@ -3237,8 +3237,10 @@ public abstract class LivingEntity extends Entity { +@@ -3236,8 +3236,10 @@ public abstract class LivingEntity extends Entity { this.pushEntities(); this.level.getProfiler().pop(); // Paper start @@ -239,7 +239,7 @@ index 465dab588e770bf4d1e645e1f451a066f388014a..9b0333774621b0566a59ba53ccff88fb 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()); -@@ -3248,6 +3250,21 @@ public abstract class LivingEntity extends Entity { +@@ -3247,6 +3249,21 @@ public abstract class LivingEntity extends Entity { absMoveTo(event.getTo().getX(), event.getTo().getY(), event.getTo().getZ(), event.getTo().getYaw(), event.getTo().getPitch()); } } @@ -262,10 +262,10 @@ index 465dab588e770bf4d1e645e1f451a066f388014a..9b0333774621b0566a59ba53ccff88fb // Paper end if (!this.level.isClientSide && this.isSensitiveToWater() && this.isInWaterRainOrBubble()) { diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index 55d07e70a67e08bab3a7a66076c980986736e5b8..8bb0634e249b1ffc5b692719738b05281cf26a87 100644 +index 697c2663c4deeb8f2ad603c979ab0884ac027930..eef0785745914d5ba4787c17b6f0c2c4415dc970 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java -@@ -140,6 +140,8 @@ public abstract class Mob extends LivingEntity { +@@ -143,6 +143,8 @@ public abstract class Mob extends LivingEntity { this.targetSelector = new GoalSelector(world.getProfilerSupplier()); this.lookControl = new LookControl(this); this.moveControl = new MoveControl(this); @@ -274,7 +274,7 @@ index 55d07e70a67e08bab3a7a66076c980986736e5b8..8bb0634e249b1ffc5b692719738b0528 this.jumpControl = new JumpControl(this); this.bodyRotationControl = this.createBodyControl(); this.navigation = this.createNavigation(world); -@@ -1283,7 +1285,7 @@ public abstract class Mob extends LivingEntity { +@@ -1293,7 +1295,7 @@ public abstract class Mob extends LivingEntity { protected void onOffspringSpawnedFromEgg(Player player, Mob child) {} protected InteractionResult mobInteract(Player player, InteractionHand hand) { @@ -283,7 +283,7 @@ index 55d07e70a67e08bab3a7a66076c980986736e5b8..8bb0634e249b1ffc5b692719738b0528 } public boolean isWithinRestriction() { -@@ -1644,4 +1646,52 @@ public abstract class Mob extends LivingEntity { +@@ -1654,4 +1656,52 @@ public abstract class Mob extends LivingEntity { return itemmonsteregg == null ? null : new ItemStack(itemmonsteregg); } @@ -337,7 +337,7 @@ index 55d07e70a67e08bab3a7a66076c980986736e5b8..8bb0634e249b1ffc5b692719738b0528 + // Purpur end } diff --git a/src/main/java/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java b/src/main/java/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java -index b1e00093ad2b42a1e0a399d261539e06f2a505b9..53d43442ddc711d39ede5f33c3754e0a2097c2bc 100644 +index 6a4a0ba0f8f96dd8566b3164bbbceeaa37b548f1..65d0b0e7856eaa61e26b0af750bb7959f5a225f7 100644 --- a/src/main/java/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java +++ b/src/main/java/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java @@ -74,7 +74,86 @@ import org.apache.logging.log4j.Logger; @@ -429,7 +429,7 @@ index b1e00093ad2b42a1e0a399d261539e06f2a505b9..53d43442ddc711d39ede5f33c3754e0a public static AttributeSupplier getSupplier(EntityType type) { return SUPPLIERS.get(type); diff --git a/src/main/java/net/minecraft/world/entity/ai/control/MoveControl.java b/src/main/java/net/minecraft/world/entity/ai/control/MoveControl.java -index fcdebde11f622d0e35d922286b34c8666f9f6861..43e5efd136937fe215db0e88907f3176e06197d1 100644 +index e3028cf5f88da6ab6d6d762e8011d45fd1d8eff8..5af8786692d3e978b3cb939d0a24bf7e24b149b5 100644 --- a/src/main/java/net/minecraft/world/entity/ai/control/MoveControl.java +++ b/src/main/java/net/minecraft/world/entity/ai/control/MoveControl.java @@ -29,6 +29,20 @@ public class MoveControl implements Control { @@ -454,7 +454,7 @@ index fcdebde11f622d0e35d922286b34c8666f9f6861..43e5efd136937fe215db0e88907f3176 return this.operation == MoveControl.Operation.MOVE_TO; } diff --git a/src/main/java/net/minecraft/world/entity/ai/control/SmoothSwimmingLookControl.java b/src/main/java/net/minecraft/world/entity/ai/control/SmoothSwimmingLookControl.java -index ffc87d14cdc7edc22a7e2ac642d0e37037c52487..f2957d7f4c377a67ee486a9d0f7ae173add20aed 100644 +index 7df56705a4a0de2dc4ff7ab133fc26612c219162..ed113e646108e591652d2f5fd88a08bf842bd0a0 100644 --- a/src/main/java/net/minecraft/world/entity/ai/control/SmoothSwimmingLookControl.java +++ b/src/main/java/net/minecraft/world/entity/ai/control/SmoothSwimmingLookControl.java @@ -3,7 +3,7 @@ package net.minecraft.world.entity.ai.control; @@ -472,9 +472,9 @@ index ffc87d14cdc7edc22a7e2ac642d0e37037c52487..f2957d7f4c377a67ee486a9d0f7ae173 @Override - public void tick() { + public void vanillaTick() { // Purpur - if (this.hasWanted) { - this.hasWanted = false; - this.getYRotD().ifPresent((float_) -> { + if (this.lookAtCooldown > 0) { + --this.lookAtCooldown; + this.getYRotD().ifPresent((yaw) -> { @@ -32,9 +32,9 @@ public class SmoothSwimmingLookControl extends LookControl { } @@ -488,11 +488,11 @@ index ffc87d14cdc7edc22a7e2ac642d0e37037c52487..f2957d7f4c377a67ee486a9d0f7ae173 } diff --git a/src/main/java/net/minecraft/world/entity/ambient/Bat.java b/src/main/java/net/minecraft/world/entity/ambient/Bat.java -index 9ed2f8f2843c634fd14dda4459f85b7140dd447a..16444d3a9f033f1a7b0de819a977b5d4c5c7bb11 100644 +index 29dfbcecfbb2560e6ecde997abd5224a16c08c94..4a534357889892b57cff818f4dbd000795e74e34 100644 --- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java +++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java -@@ -20,6 +20,7 @@ import net.minecraft.world.entity.EntityType; - import net.minecraft.world.entity.LivingEntity; +@@ -19,6 +19,7 @@ import net.minecraft.world.entity.EntityDimensions; + import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.Mob; import net.minecraft.world.entity.MobSpawnType; +import net.minecraft.world.entity.MoverType; @@ -573,10 +573,10 @@ index 9ed2f8f2843c634fd14dda4459f85b7140dd447a..16444d3a9f033f1a7b0de819a977b5d4 BlockPos blockposition = this.blockPosition(); BlockPos blockposition1 = blockposition.above(); diff --git a/src/main/java/net/minecraft/world/entity/animal/AbstractFish.java b/src/main/java/net/minecraft/world/entity/animal/AbstractFish.java -index 0701adf77a04a82df4fe1dceee196fee5d820961..d5ae347e33ca354cae36db09dbc4ada78341e13e 100644 +index 58428eebf24e328b3faf32ca473be8f19d4f6cca..f54bca7ad5b6e70f0080a6db061b88b5eaee6f53 100644 --- a/src/main/java/net/minecraft/world/entity/animal/AbstractFish.java +++ b/src/main/java/net/minecraft/world/entity/animal/AbstractFish.java -@@ -108,12 +108,9 @@ public abstract class AbstractFish extends WaterAnimal implements Bucketable { +@@ -99,12 +99,9 @@ public abstract class AbstractFish extends WaterAnimal implements Bucketable { @Override protected void registerGoals() { super.registerGoals(); @@ -591,7 +591,7 @@ index 0701adf77a04a82df4fe1dceee196fee5d820961..d5ae347e33ca354cae36db09dbc4ada7 this.goalSelector.addGoal(4, new AbstractFish.FishSwimGoal(this)); } -@@ -125,7 +122,7 @@ public abstract class AbstractFish extends WaterAnimal implements Bucketable { +@@ -116,7 +113,7 @@ public abstract class AbstractFish extends WaterAnimal implements Bucketable { @Override public void travel(Vec3 movementInput) { if (this.isEffectiveAi() && this.isInWater()) { @@ -600,7 +600,7 @@ index 0701adf77a04a82df4fe1dceee196fee5d820961..d5ae347e33ca354cae36db09dbc4ada7 this.move(MoverType.SELF, this.getDeltaMovement()); this.setDeltaMovement(this.getDeltaMovement().scale(0.9D)); if (this.getTarget() == null) { -@@ -183,7 +180,7 @@ public abstract class AbstractFish extends WaterAnimal implements Bucketable { +@@ -174,7 +171,7 @@ public abstract class AbstractFish extends WaterAnimal implements Bucketable { @Override protected void playStepSound(BlockPos pos, BlockState state) {} @@ -609,7 +609,7 @@ index 0701adf77a04a82df4fe1dceee196fee5d820961..d5ae347e33ca354cae36db09dbc4ada7 private final AbstractFish fish; -@@ -192,14 +189,22 @@ public abstract class AbstractFish extends WaterAnimal implements Bucketable { +@@ -183,14 +180,22 @@ public abstract class AbstractFish extends WaterAnimal implements Bucketable { this.fish = owner; } @@ -624,7 +624,7 @@ index 0701adf77a04a82df4fe1dceee196fee5d820961..d5ae347e33ca354cae36db09dbc4ada7 @Override - public void tick() { + public void vanillaTick() { // Purpur - if (this.fish.isEyeInFluid((Tag) FluidTags.WATER)) { + if (this.fish.isEyeInFluid(FluidTags.WATER)) { this.fish.setDeltaMovement(this.fish.getDeltaMovement().add(0.0D, 0.005D, 0.0D)); } @@ -635,7 +635,7 @@ index 0701adf77a04a82df4fe1dceee196fee5d820961..d5ae347e33ca354cae36db09dbc4ada7 this.fish.setSpeed(Mth.lerp(0.125F, this.fish.getSpeed(), f)); double d0 = this.wantedX - this.fish.getX(); diff --git a/src/main/java/net/minecraft/world/entity/animal/Bee.java b/src/main/java/net/minecraft/world/entity/animal/Bee.java -index 083640b7e4aee75db9b884aebd640c9410e669ca..55ab3d403d3b01ea923923ab985c730726754e8a 100644 +index 5a9d9926fb6fc356ee250d4e38f3bc303e280d45..1163bb36350097557851eaa95b0cf53da79b6a6d 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Bee.java +++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java @@ -44,6 +44,7 @@ import net.minecraft.world.entity.EntityType; @@ -646,7 +646,7 @@ index 083640b7e4aee75db9b884aebd640c9410e669ca..55ab3d403d3b01ea923923ab985c7307 import net.minecraft.world.entity.NeutralMob; import net.minecraft.world.entity.PathfinderMob; import net.minecraft.world.entity.Pose; -@@ -143,6 +144,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -144,6 +145,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { public Bee(EntityType type, Level world) { super(type, world); this.remainingCooldownBeforeLocatingNewFlower = Mth.nextInt(this.random, 20, 60); @@ -654,7 +654,7 @@ index 083640b7e4aee75db9b884aebd640c9410e669ca..55ab3d403d3b01ea923923ab985c7307 // Paper start - apply gravity to bees when they get stuck in the void, fixes MC-167279 class BeeFlyingMoveControl extends FlyingMoveControl { public BeeFlyingMoveControl(final Mob entity, final int maxPitchChange, final boolean noGravity) { -@@ -151,11 +153,24 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -152,11 +154,24 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { @Override public void tick() { @@ -679,7 +679,7 @@ index 083640b7e4aee75db9b884aebd640c9410e669ca..55ab3d403d3b01ea923923ab985c7307 } this.moveControl = new BeeFlyingMoveControl(this, 20, true); // Paper end -@@ -167,6 +182,35 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -168,6 +183,35 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { this.setPathfindingMalus(BlockPathTypes.FENCE, -1.0F); } @@ -715,7 +715,7 @@ index 083640b7e4aee75db9b884aebd640c9410e669ca..55ab3d403d3b01ea923923ab985c7307 @Override protected void defineSynchedData() { super.defineSynchedData(); -@@ -181,6 +225,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -182,6 +226,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { @Override protected void registerGoals() { @@ -723,7 +723,7 @@ index 083640b7e4aee75db9b884aebd640c9410e669ca..55ab3d403d3b01ea923923ab985c7307 this.goalSelector.addGoal(0, new Bee.BeeAttackGoal(this, 1.399999976158142D, true)); this.goalSelector.addGoal(1, new Bee.BeeEnterHiveGoal()); this.goalSelector.addGoal(2, new BreedGoal(this, 1.0D)); -@@ -196,6 +241,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -197,6 +242,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)); @@ -731,7 +731,7 @@ index 083640b7e4aee75db9b884aebd640c9410e669ca..55ab3d403d3b01ea923923ab985c7307 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)); -@@ -871,16 +917,16 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -879,16 +925,16 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { } } @@ -752,10 +752,10 @@ index 083640b7e4aee75db9b884aebd640c9410e669ca..55ab3d403d3b01ea923923ab985c7307 } diff --git a/src/main/java/net/minecraft/world/entity/animal/Cat.java b/src/main/java/net/minecraft/world/entity/animal/Cat.java -index a945ed6867e2f6de5c3aa4355d405bec66f48032..48e85481372d8e6edf0460423ae488fae21ecdbf 100644 +index b0d3444c721765e10217474ca57f703531e69260..88362a02776f481fc8c17cf8a20805e5c28fca5e 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cat.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cat.java -@@ -121,6 +121,26 @@ public class Cat extends TamableAnimal { +@@ -122,6 +122,26 @@ public class Cat extends TamableAnimal { super(type, world); } @@ -782,7 +782,7 @@ index a945ed6867e2f6de5c3aa4355d405bec66f48032..48e85481372d8e6edf0460423ae488fa public ResourceLocation getResourceLocation() { return (ResourceLocation) Cat.TEXTURE_BY_TYPE.getOrDefault(this.getCatType(), (ResourceLocation) Cat.TEXTURE_BY_TYPE.get(0)); } -@@ -129,6 +149,7 @@ public class Cat extends TamableAnimal { +@@ -130,6 +150,7 @@ public class Cat extends TamableAnimal { protected void registerGoals() { this.temptGoal = new Cat.CatTemptGoal(this, 0.6D, Cat.TEMPT_INGREDIENT, true); this.goalSelector.addGoal(1, new FloatGoal(this)); @@ -790,7 +790,7 @@ index a945ed6867e2f6de5c3aa4355d405bec66f48032..48e85481372d8e6edf0460423ae488fa this.goalSelector.addGoal(1, new SitWhenOrderedToGoal(this)); this.goalSelector.addGoal(2, new Cat.CatRelaxOnOwnerGoal(this)); this.goalSelector.addGoal(3, this.temptGoal); -@@ -140,6 +161,7 @@ public class Cat extends TamableAnimal { +@@ -141,6 +162,7 @@ public class Cat extends TamableAnimal { this.goalSelector.addGoal(10, new BreedGoal(this, 0.8D)); this.goalSelector.addGoal(11, new WaterAvoidingRandomStrollGoal(this, 0.8D, 1.0000001E-5F)); this.goalSelector.addGoal(12, new LookAtPlayerGoal(this, Player.class, 10.0F)); @@ -798,7 +798,7 @@ index a945ed6867e2f6de5c3aa4355d405bec66f48032..48e85481372d8e6edf0460423ae488fa this.targetSelector.addGoal(1, new NonTameRandomTargetGoal<>(this, Rabbit.class, false, (Predicate) null)); this.targetSelector.addGoal(1, new NonTameRandomTargetGoal<>(this, Turtle.class, false, Turtle.BABY_ON_LAND_SELECTOR)); } -@@ -394,6 +416,7 @@ public class Cat extends TamableAnimal { +@@ -395,6 +417,7 @@ public class Cat extends TamableAnimal { @Override public InteractionResult mobInteract(Player player, InteractionHand hand) { @@ -807,7 +807,7 @@ index a945ed6867e2f6de5c3aa4355d405bec66f48032..48e85481372d8e6edf0460423ae488fa Item item = itemstack.getItem(); diff --git a/src/main/java/net/minecraft/world/entity/animal/Chicken.java b/src/main/java/net/minecraft/world/entity/animal/Chicken.java -index 9fe34da92c26185af241e6d5be90e695b03cfa99..0b6cbbb6117bcd61081e3b136cc432058e0c5102 100644 +index aa373560120684a037ac02d8df196b97b791bd85..cdb6e71f62294e48aa20a1ac0a38e208ce8e7e4c 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Chicken.java +++ b/src/main/java/net/minecraft/world/entity/animal/Chicken.java @@ -52,9 +52,22 @@ public class Chicken extends Animal { @@ -857,7 +857,7 @@ index 824e5e4fe7619ae46061c3c978c9a044db8c84ab..ea7227ade90a713242290cadb13692f3 public ItemStack getBucketItemStack() { return new ItemStack(Items.COD_BUCKET); diff --git a/src/main/java/net/minecraft/world/entity/animal/Cow.java b/src/main/java/net/minecraft/world/entity/animal/Cow.java -index a43349c47292154dfc56c72c58ba9f29f6765d83..5939cb25e5ce5fa5c18eb9feddf30816aac6d4c6 100644 +index 425c6da0de40983b0870c9fd1b53f16b6a11c34c..ec20c082f545f350927d980c7e0b0d0b742ed791 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cow.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cow.java @@ -40,9 +40,22 @@ public class Cow extends Animal { @@ -901,10 +901,10 @@ index a43349c47292154dfc56c72c58ba9f29f6765d83..5939cb25e5ce5fa5c18eb9feddf30816 // CraftBukkit end diff --git a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java -index a2cdc036ee0981495d309eb6b18d0c297ad65eb4..87e128e67a147b1ff772f12317eee1ebfc91d83e 100644 +index 7283a4f216d5d915f21c481bbe43f2598915ca6d..827872f57914b3d8d8b8ba388a05f4c5ea49aa0e 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java +++ b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java -@@ -84,14 +84,82 @@ public class Dolphin extends WaterAnimal { +@@ -74,14 +74,82 @@ public class Dolphin extends WaterAnimal { public static final Predicate ALLOWED_ITEMS = (entityitem) -> { return !entityitem.hasPickUpDelay() && entityitem.isAlive() && entityitem.isInWater(); }; @@ -988,7 +988,7 @@ index a2cdc036ee0981495d309eb6b18d0c297ad65eb4..87e128e67a147b1ff772f12317eee1eb @Nullable @Override public SpawnGroupData finalizeSpawn(ServerLevelAccessor world, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData entityData, @Nullable CompoundTag entityNbt) { -@@ -166,6 +234,7 @@ public class Dolphin extends WaterAnimal { +@@ -156,6 +224,7 @@ public class Dolphin extends WaterAnimal { protected void registerGoals() { this.goalSelector.addGoal(0, new BreathAirGoal(this)); this.goalSelector.addGoal(0, new TryFindWaterGoal(this)); @@ -996,15 +996,15 @@ index a2cdc036ee0981495d309eb6b18d0c297ad65eb4..87e128e67a147b1ff772f12317eee1eb this.goalSelector.addGoal(1, new Dolphin.DolphinSwimToTreasureGoal(this)); this.goalSelector.addGoal(2, new Dolphin.DolphinSwimWithPlayerGoal(this, 4.0D)); this.goalSelector.addGoal(4, new RandomSwimmingGoal(this, 1.0D, 10)); -@@ -176,6 +245,7 @@ public class Dolphin extends WaterAnimal { +@@ -166,6 +235,7 @@ public class Dolphin extends WaterAnimal { 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.0D, 1.0D)); + this.targetSelector.addGoal(0, new net.pl3x.purpur.entity.ai.HasRider(this)); // Purpur - this.targetSelector.addGoal(1, (new HurtByTargetGoal(this, new Class[]{Guardian.class})).setAlertOthers(new Class[0])); // CraftBukkit - decompile error + this.targetSelector.addGoal(1, (new HurtByTargetGoal(this, new Class[]{Guardian.class})).setAlertOthers()); } -@@ -227,7 +297,7 @@ public class Dolphin extends WaterAnimal { +@@ -217,7 +287,7 @@ public class Dolphin extends WaterAnimal { @Override protected boolean canRide(Entity entity) { @@ -1013,7 +1013,7 @@ index a2cdc036ee0981495d309eb6b18d0c297ad65eb4..87e128e67a147b1ff772f12317eee1eb } @Override -@@ -262,6 +332,11 @@ public class Dolphin extends WaterAnimal { +@@ -252,6 +322,11 @@ public class Dolphin extends WaterAnimal { @Override public void tick() { super.tick(); @@ -1026,10 +1026,10 @@ index a2cdc036ee0981495d309eb6b18d0c297ad65eb4..87e128e67a147b1ff772f12317eee1eb this.setAirSupply(this.getMaxAirSupply()); } else { diff --git a/src/main/java/net/minecraft/world/entity/animal/Fox.java b/src/main/java/net/minecraft/world/entity/animal/Fox.java -index bfb042f4828e1cd47124939ca3b9caadc7fe1b39..56395fc555d05a2ff9bf551affa62521bad4893e 100644 +index 63f0ed4c80b7afa091c4a835eefd6d709428f984..61fd332a91625cc1101fde5b66c759f5e44522fc 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Fox.java +++ b/src/main/java/net/minecraft/world/entity/animal/Fox.java -@@ -138,6 +138,39 @@ public class Fox extends Animal { +@@ -139,6 +139,39 @@ public class Fox extends Animal { this.setCanPickUpLoot(true); } @@ -1069,7 +1069,7 @@ index bfb042f4828e1cd47124939ca3b9caadc7fe1b39..56395fc555d05a2ff9bf551affa62521 @Override protected void defineSynchedData() { super.defineSynchedData(); -@@ -157,6 +190,7 @@ public class Fox extends Animal { +@@ -158,6 +191,7 @@ public class Fox extends Animal { return entityliving instanceof AbstractSchoolingFish; }); this.goalSelector.addGoal(0, new Fox.FoxFloatGoal()); @@ -1077,7 +1077,7 @@ index bfb042f4828e1cd47124939ca3b9caadc7fe1b39..56395fc555d05a2ff9bf551affa62521 this.goalSelector.addGoal(1, new Fox.FaceplantGoal()); this.goalSelector.addGoal(2, new Fox.FoxPanicGoal(2.2D)); this.goalSelector.addGoal(3, new Fox.FoxBreedGoal(1.0D)); -@@ -182,6 +216,7 @@ public class Fox extends Animal { +@@ -183,6 +217,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()); @@ -1085,7 +1085,7 @@ index bfb042f4828e1cd47124939ca3b9caadc7fe1b39..56395fc555d05a2ff9bf551affa62521 this.targetSelector.addGoal(3, new Fox.DefendTrustedTargetGoal(LivingEntity.class, false, false, (entityliving) -> { return Fox.TRUSTED_TARGET_SELECTOR.test(entityliving) && !this.trusts(entityliving.getUUID()); })); -@@ -737,16 +772,16 @@ public class Fox extends Animal { +@@ -742,16 +777,16 @@ public class Fox extends Animal { return new Vec3(0.0D, (double) (0.55F * this.getEyeHeight()), (double) (this.getBbWidth() * 0.4F)); } @@ -1105,7 +1105,7 @@ index bfb042f4828e1cd47124939ca3b9caadc7fe1b39..56395fc555d05a2ff9bf551affa62521 } } -@@ -757,16 +792,16 @@ public class Fox extends Animal { +@@ -762,16 +797,16 @@ public class Fox extends Animal { } } @@ -1126,7 +1126,7 @@ index bfb042f4828e1cd47124939ca3b9caadc7fe1b39..56395fc555d05a2ff9bf551affa62521 } diff --git a/src/main/java/net/minecraft/world/entity/animal/IronGolem.java b/src/main/java/net/minecraft/world/entity/animal/IronGolem.java -index bf731a227944875320857e5838d50f15af13b0c1..a5e19967b4488fb662ee2767cef5a1851da96468 100644 +index d6bff18a60e1b0b507a3797742bfafff2fad10d2..1e8d4985998cfbe862028228bc1f5c411899ff3f 100644 --- a/src/main/java/net/minecraft/world/entity/animal/IronGolem.java +++ b/src/main/java/net/minecraft/world/entity/animal/IronGolem.java @@ -70,8 +70,22 @@ public class IronGolem extends AbstractGolem implements NeutralMob { @@ -1160,7 +1160,7 @@ index bf731a227944875320857e5838d50f15af13b0c1..a5e19967b4488fb662ee2767cef5a185 this.targetSelector.addGoal(1, new DefendVillageTargetGoal(this)); this.targetSelector.addGoal(2, new HurtByTargetGoal(this, new Class[0])); this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, this::isAngryAt)); -@@ -266,13 +281,13 @@ public class IronGolem extends AbstractGolem implements NeutralMob { +@@ -267,13 +282,13 @@ public class IronGolem extends AbstractGolem implements NeutralMob { ItemStack itemstack = player.getItemInHand(hand); if (!itemstack.is(Items.IRON_INGOT)) { @@ -1177,10 +1177,10 @@ index bf731a227944875320857e5838d50f15af13b0c1..a5e19967b4488fb662ee2767cef5a185 float f1 = 1.0F + (this.random.nextFloat() - this.random.nextFloat()) * 0.2F; diff --git a/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java b/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java -index b2765fba362e5f6d641abcc9ee7ccc177db08eb5..81a393f29643a0cf3478ca8ff640c21153d1514b 100644 +index a91c8d37b818161fb7e2dc0def82a56d7db04fc1..66e146b92348b48fd53cc2aabd5335da66f50edc 100644 --- a/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java +++ b/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java -@@ -61,6 +61,18 @@ public class MushroomCow extends Cow implements Shearable { +@@ -65,6 +65,18 @@ public class MushroomCow extends Cow implements Shearable { super(type, world); } @@ -1199,7 +1199,7 @@ index b2765fba362e5f6d641abcc9ee7ccc177db08eb5..81a393f29643a0cf3478ca8ff640c211 @Override public float getWalkTargetValue(BlockPos pos, LevelReader world) { return world.getBlockState(pos.below()).is(Blocks.MYCELIUM) ? 10.0F : world.getBrightness(pos) - 0.5F; -@@ -122,7 +134,7 @@ public class MushroomCow extends Cow implements Shearable { +@@ -126,7 +138,7 @@ public class MushroomCow extends Cow implements Shearable { } else if (itemstack.is(Items.SHEARS) && this.readyForShearing()) { // CraftBukkit start if (!CraftEventFactory.handlePlayerShearEntityEvent(player, this, itemstack, hand)) { @@ -1208,7 +1208,7 @@ index b2765fba362e5f6d641abcc9ee7ccc177db08eb5..81a393f29643a0cf3478ca8ff640c211 } // CraftBukkit end this.shear(SoundSource.PLAYERS); -@@ -143,7 +155,7 @@ public class MushroomCow extends Cow implements Shearable { +@@ -147,7 +159,7 @@ public class MushroomCow extends Cow implements Shearable { Optional> optional = this.getEffectFromItemStack(itemstack); if (!optional.isPresent()) { @@ -1218,10 +1218,10 @@ index b2765fba362e5f6d641abcc9ee7ccc177db08eb5..81a393f29643a0cf3478ca8ff640c211 Pair pair = (Pair) optional.get(); diff --git a/src/main/java/net/minecraft/world/entity/animal/Ocelot.java b/src/main/java/net/minecraft/world/entity/animal/Ocelot.java -index 49122e7baa5c0cd3691bcb48176fdefbdb79026b..20797bc9e53d5061396ddb6a89e46b46dd2081ae 100644 +index a781048b0c43e63e441e6afecec125d7f838c342..152cd9e2169d25e475f36a618c63aad10e878ee9 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Ocelot.java +++ b/src/main/java/net/minecraft/world/entity/animal/Ocelot.java -@@ -68,6 +68,18 @@ public class Ocelot extends Animal { +@@ -69,6 +69,18 @@ public class Ocelot extends Animal { this.reassessTrustingGoals(); } @@ -1240,7 +1240,7 @@ index 49122e7baa5c0cd3691bcb48176fdefbdb79026b..20797bc9e53d5061396ddb6a89e46b46 public boolean isTrusting() { return (Boolean) this.entityData.get(Ocelot.DATA_TRUSTING); } -@@ -99,12 +111,14 @@ public class Ocelot extends Animal { +@@ -100,12 +112,14 @@ public class Ocelot extends Animal { protected void registerGoals() { this.temptGoal = new Ocelot.OcelotTemptGoal(this, 0.6D, Ocelot.TEMPT_INGREDIENT, true); this.goalSelector.addGoal(1, new FloatGoal(this)); @@ -1256,10 +1256,10 @@ index 49122e7baa5c0cd3691bcb48176fdefbdb79026b..20797bc9e53d5061396ddb6a89e46b46 this.targetSelector.addGoal(1, new NearestAttackableTargetGoal<>(this, Turtle.class, 10, false, false, Turtle.BABY_ON_LAND_SELECTOR)); } diff --git a/src/main/java/net/minecraft/world/entity/animal/Panda.java b/src/main/java/net/minecraft/world/entity/animal/Panda.java -index 8a2c49b7ded2165e383cd9b8744f752754aabdf4..7ab0b39091910c492a4f860237a33996dbb08b97 100644 +index f9be50049325a1139d67ccf590caeeceadb2fd23..ce63fcbe48d3bab8a8a9e4b283fc561b30399e21 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Panda.java +++ b/src/main/java/net/minecraft/world/entity/animal/Panda.java -@@ -108,6 +108,27 @@ public class Panda extends Animal { +@@ -107,6 +107,27 @@ public class Panda extends Animal { } @@ -1287,7 +1287,7 @@ index 8a2c49b7ded2165e383cd9b8744f752754aabdf4..7ab0b39091910c492a4f860237a33996 @Override public boolean canTakeItem(ItemStack stack) { EquipmentSlot enumitemslot = Mob.getEquipmentSlotForItem(stack); -@@ -263,6 +284,7 @@ public class Panda extends Animal { +@@ -262,6 +283,7 @@ public class Panda extends Animal { @Override protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); @@ -1295,7 +1295,7 @@ index 8a2c49b7ded2165e383cd9b8744f752754aabdf4..7ab0b39091910c492a4f860237a33996 this.goalSelector.addGoal(2, new Panda.PandaPanicGoal(this, 2.0D)); this.goalSelector.addGoal(2, new Panda.PandaBreedGoal(this, 1.0D)); this.goalSelector.addGoal(3, new Panda.PandaAttackGoal(this, 1.2000000476837158D, true)); -@@ -278,6 +300,7 @@ public class Panda extends Animal { +@@ -277,6 +299,7 @@ public class Panda extends Animal { this.goalSelector.addGoal(12, new Panda.PandaRollGoal(this)); this.goalSelector.addGoal(13, new FollowParentGoal(this, 1.25D)); this.goalSelector.addGoal(14, new WaterAvoidingRandomStrollGoal(this, 1.0D)); @@ -1303,7 +1303,7 @@ index 8a2c49b7ded2165e383cd9b8744f752754aabdf4..7ab0b39091910c492a4f860237a33996 this.targetSelector.addGoal(1, (new Panda.PandaHurtByTargetGoal(this, new Class[0])).setAlertOthers(new Class[0])); } -@@ -617,7 +640,7 @@ public class Panda extends Animal { +@@ -618,7 +641,7 @@ public class Panda extends Animal { ItemStack itemstack = player.getItemInHand(hand); if (this.isScared()) { @@ -1312,7 +1312,7 @@ index 8a2c49b7ded2165e383cd9b8744f752754aabdf4..7ab0b39091910c492a4f860237a33996 } else if (this.isOnBack()) { this.setOnBack(false); return InteractionResult.sidedSuccess(this.level.isClientSide); -@@ -636,7 +659,7 @@ public class Panda extends Animal { +@@ -637,7 +660,7 @@ public class Panda extends Animal { this.gameEvent(GameEvent.MOB_INTERACT, this.eyeBlockPosition()); } else { if (this.level.isClientSide || this.isSitting() || this.isInWater()) { @@ -1321,7 +1321,7 @@ index 8a2c49b7ded2165e383cd9b8744f752754aabdf4..7ab0b39091910c492a4f860237a33996 } this.tryToSit(); -@@ -653,7 +676,7 @@ public class Panda extends Animal { +@@ -654,7 +677,7 @@ public class Panda extends Animal { return InteractionResult.SUCCESS; } else { @@ -1330,7 +1330,7 @@ index 8a2c49b7ded2165e383cd9b8744f752754aabdf4..7ab0b39091910c492a4f860237a33996 } } -@@ -693,7 +716,7 @@ public class Panda extends Animal { +@@ -694,7 +717,7 @@ public class Panda extends Animal { return !this.isOnBack() && !this.isScared() && !this.isEating() && !this.isRolling() && !this.isSitting(); } @@ -1339,7 +1339,7 @@ index 8a2c49b7ded2165e383cd9b8744f752754aabdf4..7ab0b39091910c492a4f860237a33996 private final Panda panda; -@@ -703,9 +726,9 @@ public class Panda extends Animal { +@@ -704,9 +727,9 @@ public class Panda extends Animal { } @Override @@ -1352,10 +1352,10 @@ index 8a2c49b7ded2165e383cd9b8744f752754aabdf4..7ab0b39091910c492a4f860237a33996 } } diff --git a/src/main/java/net/minecraft/world/entity/animal/Parrot.java b/src/main/java/net/minecraft/world/entity/animal/Parrot.java -index ae21d260b2d4673eb4aa56a82e1043d20507adb2..3950dd170edee24f4a2effc1946e17b3b5f0c792 100644 +index dd80d9e0614445ba088c295784dc30584dedaa2b..8deca54f90e1ec7baa8caf59cca0c4b3e705e977 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Parrot.java +++ b/src/main/java/net/minecraft/world/entity/animal/Parrot.java -@@ -121,12 +121,63 @@ public class Parrot extends ShoulderRidingEntity implements FlyingAnimal { +@@ -126,12 +126,63 @@ public class Parrot extends ShoulderRidingEntity implements FlyingAnimal { public Parrot(EntityType type, Level world) { super(type, world); @@ -1420,7 +1420,7 @@ index ae21d260b2d4673eb4aa56a82e1043d20507adb2..3950dd170edee24f4a2effc1946e17b3 @Nullable @Override public SpawnGroupData finalizeSpawn(ServerLevelAccessor world, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData entityData, @Nullable CompoundTag entityNbt) { -@@ -145,8 +196,10 @@ public class Parrot extends ShoulderRidingEntity implements FlyingAnimal { +@@ -150,8 +201,10 @@ public class Parrot extends ShoulderRidingEntity implements FlyingAnimal { @Override protected void registerGoals() { @@ -1433,10 +1433,10 @@ index ae21d260b2d4673eb4aa56a82e1043d20507adb2..3950dd170edee24f4a2effc1946e17b3 this.goalSelector.addGoal(2, new SitWhenOrderedToGoal(this)); this.goalSelector.addGoal(2, new FollowOwnerGoal(this, 1.0D, 5.0F, 1.0F, true)); diff --git a/src/main/java/net/minecraft/world/entity/animal/Pig.java b/src/main/java/net/minecraft/world/entity/animal/Pig.java -index e4d811025a000f6d12ab8587de293e929c8fd970..812d188cea9059f0ce5dd25b2649f30a5dfcea85 100644 +index f24b87ff18d4255289c8130f32fd205014ee2747..0d1cfb973efb3fb472a0c57e75bad00dea769357 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Pig.java +++ b/src/main/java/net/minecraft/world/entity/animal/Pig.java -@@ -65,9 +65,22 @@ public class Pig extends Animal implements ItemSteerable, Saddleable { +@@ -64,9 +64,22 @@ public class Pig extends Animal implements ItemSteerable, Saddleable { this.steering = new ItemBasedSteering(this.entityData, Pig.DATA_BOOST_TIME, Pig.DATA_SADDLE_ID); } @@ -1460,12 +1460,12 @@ index e4d811025a000f6d12ab8587de293e929c8fd970..812d188cea9059f0ce5dd25b2649f30a this.goalSelector.addGoal(3, new BreedGoal(this, 1.0D)); this.goalSelector.addGoal(4, new TemptGoal(this, 1.2D, Ingredient.of(Items.CARROT_ON_A_STICK), false)); diff --git a/src/main/java/net/minecraft/world/entity/animal/PolarBear.java b/src/main/java/net/minecraft/world/entity/animal/PolarBear.java -index cc1e4c8f9a44969597610154e05725df9bcc3b8c..d91852b85fc6ca7ea85886db5cad7f8d62de7174 100644 +index 75b8c36f8616cf9f4c751c4a5285cad06be1631d..a2361524dcc9dcffe28a4c30026ac0540146c989 100644 --- a/src/main/java/net/minecraft/world/entity/animal/PolarBear.java +++ b/src/main/java/net/minecraft/world/entity/animal/PolarBear.java -@@ -61,11 +61,35 @@ public class PolarBear extends Animal implements NeutralMob { - private static final UniformInt PERSISTENT_ANGER_TIME = TimeUtil.rangeOfSeconds(20, 39); +@@ -62,11 +62,35 @@ public class PolarBear extends Animal implements NeutralMob { private int remainingPersistentAngerTime; + @Nullable private UUID persistentAngerTarget; + private int standTimer = 0; // Purpur @@ -1499,7 +1499,7 @@ index cc1e4c8f9a44969597610154e05725df9bcc3b8c..d91852b85fc6ca7ea85886db5cad7f8d @Override public AgeableMob getBreedOffspring(ServerLevel world, AgeableMob entity) { return EntityType.POLAR_BEAR.create(world); -@@ -80,12 +104,14 @@ public class PolarBear extends Animal implements NeutralMob { +@@ -81,12 +105,14 @@ public class PolarBear extends Animal implements NeutralMob { protected void registerGoals() { super.registerGoals(); this.goalSelector.addGoal(0, new FloatGoal(this)); @@ -1514,7 +1514,7 @@ index cc1e4c8f9a44969597610154e05725df9bcc3b8c..d91852b85fc6ca7ea85886db5cad7f8d this.targetSelector.addGoal(1, new PolarBear.PolarBearHurtByTargetGoal()); this.targetSelector.addGoal(2, new PolarBear.PolarBearAttackPlayersGoal()); this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, this::isAngryAt)); -@@ -201,6 +227,11 @@ public class PolarBear extends Animal implements NeutralMob { +@@ -203,6 +229,11 @@ public class PolarBear extends Animal implements NeutralMob { this.updatePersistentAnger((ServerLevel)this.level, true); } @@ -1526,7 +1526,7 @@ index cc1e4c8f9a44969597610154e05725df9bcc3b8c..d91852b85fc6ca7ea85886db5cad7f8d } @Override -@@ -230,6 +261,7 @@ public class PolarBear extends Animal implements NeutralMob { +@@ -232,6 +263,7 @@ public class PolarBear extends Animal implements NeutralMob { public void setStanding(boolean warning) { this.entityData.set(DATA_STANDING_ID, warning); @@ -1558,10 +1558,10 @@ index f576e602f2fce87cdebc194b474dced64952178b..bc1cf0e63c9a1df534017246687f6a13 protected void defineSynchedData() { super.defineSynchedData(); diff --git a/src/main/java/net/minecraft/world/entity/animal/Rabbit.java b/src/main/java/net/minecraft/world/entity/animal/Rabbit.java -index 5f8f8b32e29418f23a2ee526313f53a3d9c61473..49dd8633267f7cd40cfd671ac00e627d305be32d 100644 +index 518f48bdd35d1b351c49771b1c98717fb2696685..3d8dfab5c7dfa8a506f40379aa36e6963de4e35a 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Rabbit.java +++ b/src/main/java/net/minecraft/world/entity/animal/Rabbit.java -@@ -81,6 +81,7 @@ public class Rabbit extends Animal { +@@ -83,6 +83,7 @@ public class Rabbit extends Animal { private boolean wasOnGround; private int jumpDelayTicks; int moreCarrotTicks; @@ -1569,7 +1569,7 @@ index 5f8f8b32e29418f23a2ee526313f53a3d9c61473..49dd8633267f7cd40cfd671ac00e627d public Rabbit(EntityType type, Level world) { super(type, world); -@@ -89,6 +90,46 @@ public class Rabbit extends Animal { +@@ -91,6 +92,46 @@ public class Rabbit extends Animal { this.initializePathFinderGoals(); // CraftBukkit - moved code } @@ -1616,7 +1616,7 @@ index 5f8f8b32e29418f23a2ee526313f53a3d9c61473..49dd8633267f7cd40cfd671ac00e627d // CraftBukkit start - code from constructor public void initializePathFinderGoals(){ this.setSpeedModifier(0.0D); -@@ -98,6 +139,7 @@ public class Rabbit extends Animal { +@@ -100,6 +141,7 @@ public class Rabbit extends Animal { @Override public void registerGoals() { this.goalSelector.addGoal(1, new FloatGoal(this)); @@ -1624,7 +1624,7 @@ index 5f8f8b32e29418f23a2ee526313f53a3d9c61473..49dd8633267f7cd40cfd671ac00e627d this.goalSelector.addGoal(1, new Rabbit.RabbitPanicGoal(this, 2.2D)); this.goalSelector.addGoal(2, new BreedGoal(this, 0.8D)); this.goalSelector.addGoal(3, new TemptGoal(this, 1.0D, Ingredient.of(Items.CARROT, Items.GOLDEN_CARROT, Blocks.DANDELION), false)); -@@ -111,6 +153,13 @@ public class Rabbit extends Animal { +@@ -113,6 +155,13 @@ public class Rabbit extends Animal { @Override protected float getJumpPower() { @@ -1638,7 +1638,7 @@ index 5f8f8b32e29418f23a2ee526313f53a3d9c61473..49dd8633267f7cd40cfd671ac00e627d if (!this.horizontalCollision && (!this.moveControl.hasWanted() || this.moveControl.getWantedY() <= this.getY() + 0.5D)) { Path pathentity = this.navigation.getPath(); -@@ -129,7 +178,7 @@ public class Rabbit extends Animal { +@@ -131,7 +180,7 @@ public class Rabbit extends Animal { } @Override @@ -1647,7 +1647,7 @@ index 5f8f8b32e29418f23a2ee526313f53a3d9c61473..49dd8633267f7cd40cfd671ac00e627d super.jumpFromGround(); double d0 = this.moveControl.getSpeedModifier(); -@@ -179,6 +228,13 @@ public class Rabbit extends Animal { +@@ -181,6 +230,13 @@ public class Rabbit extends Animal { @Override public void customServerAiStep() { @@ -1711,7 +1711,7 @@ index 0af79daa357f53a8871e293b57e16c099e5d3f64..cf88c1d95a866853568d4fa5f67850bc public int getMaxSchoolSize() { return 5; diff --git a/src/main/java/net/minecraft/world/entity/animal/Sheep.java b/src/main/java/net/minecraft/world/entity/animal/Sheep.java -index 1f2f556fce77e25028f9f636d9b0cc7fca931a37..db547922585bc8e2aae2d7dc1bbe45a61e8da12c 100644 +index 1d4e504434ba9730101588c0bb0aab8f1ef6a7db..8922ce00b1a4acd42434fa4681c8d56a39cf9348 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Sheep.java +++ b/src/main/java/net/minecraft/world/entity/animal/Sheep.java @@ -116,10 +116,23 @@ public class Sheep extends Animal implements Shearable { @@ -1739,10 +1739,10 @@ index 1f2f556fce77e25028f9f636d9b0cc7fca931a37..db547922585bc8e2aae2d7dc1bbe45a6 this.goalSelector.addGoal(2, new BreedGoal(this, 1.0D)); this.goalSelector.addGoal(3, new TemptGoal(this, 1.1D, Ingredient.of(Items.WHEAT), false)); diff --git a/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java b/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java -index 4a5c6a6345fba919916c4c61dc9cbb8cb880cbca..02efae0969dadc85cdeeea7bcfbd5dd15c8b7f89 100644 +index dbc0ebf7e1d7ae7c89bafad19b0d9f209674b2c9..2ec2d957d5db56ea0067e917e5b445d8619bb87b 100644 --- a/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java +++ b/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java -@@ -53,12 +53,26 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM +@@ -54,12 +54,26 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM super(type, world); } @@ -1769,7 +1769,7 @@ index 4a5c6a6345fba919916c4c61dc9cbb8cb880cbca..02efae0969dadc85cdeeea7bcfbd5dd1 this.targetSelector.addGoal(1, new NearestAttackableTargetGoal<>(this, Mob.class, 10, true, false, (entityliving) -> { return entityliving instanceof Enemy; })); -@@ -110,6 +124,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM +@@ -113,6 +127,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM return; } @@ -1777,7 +1777,7 @@ index 4a5c6a6345fba919916c4c61dc9cbb8cb880cbca..02efae0969dadc85cdeeea7bcfbd5dd1 BlockState iblockdata = Blocks.SNOW.defaultBlockState(); for (int l = 0; l < 4; ++l) { -@@ -152,7 +167,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM +@@ -155,7 +170,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM if (itemstack.is(Items.SHEARS) && this.readyForShearing()) { // CraftBukkit start if (!CraftEventFactory.handlePlayerShearEntityEvent(player, this, itemstack, hand)) { @@ -1786,7 +1786,7 @@ index 4a5c6a6345fba919916c4c61dc9cbb8cb880cbca..02efae0969dadc85cdeeea7bcfbd5dd1 } // CraftBukkit end this.shear(SoundSource.PLAYERS); -@@ -165,7 +180,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM +@@ -168,7 +183,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM return InteractionResult.sidedSuccess(this.level.isClientSide); } else { @@ -1796,10 +1796,10 @@ index 4a5c6a6345fba919916c4c61dc9cbb8cb880cbca..02efae0969dadc85cdeeea7bcfbd5dd1 } diff --git a/src/main/java/net/minecraft/world/entity/animal/Squid.java b/src/main/java/net/minecraft/world/entity/animal/Squid.java -index 4da560f6e4da0750bda78b900b2d916d58adfccb..09066b7e46a414b44f051ad8fdb4c734cc556db5 100644 +index 370513fbc39f178f903ce140ced1a97029dd39db..998f659aeff304dd481fa5e9c4b7e925d3cc019d 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Squid.java +++ b/src/main/java/net/minecraft/world/entity/animal/Squid.java -@@ -54,9 +54,32 @@ public class Squid extends WaterAnimal { +@@ -51,9 +51,32 @@ public class Squid extends WaterAnimal { this.tentacleSpeed = 1.0F / (this.random.nextFloat() + 1.0F) * 0.2F; } @@ -1832,7 +1832,7 @@ index 4da560f6e4da0750bda78b900b2d916d58adfccb..09066b7e46a414b44f051ad8fdb4c734 this.goalSelector.addGoal(1, new Squid.SquidFleeGoal()); } -@@ -250,6 +273,38 @@ public class Squid extends WaterAnimal { +@@ -242,6 +265,38 @@ public class Squid extends WaterAnimal { @Override public void tick() { @@ -1872,10 +1872,10 @@ index 4da560f6e4da0750bda78b900b2d916d58adfccb..09066b7e46a414b44f051ad8fdb4c734 if (i > 100) { diff --git a/src/main/java/net/minecraft/world/entity/animal/TropicalFish.java b/src/main/java/net/minecraft/world/entity/animal/TropicalFish.java -index 642478999b5e6929f4fcaefb09c232e0948c6bc9..0ddc45c8dd098b88f12a5a3af8aaa1f7dd928735 100644 +index 4745086ccacfb9863df1979c2d098cb5d81f1535..d78947aa30e4eebca67b94614ec0e2ac9afca36d 100644 --- a/src/main/java/net/minecraft/world/entity/animal/TropicalFish.java +++ b/src/main/java/net/minecraft/world/entity/animal/TropicalFish.java -@@ -43,6 +43,18 @@ public class TropicalFish extends AbstractSchoolingFish { +@@ -50,6 +50,18 @@ public class TropicalFish extends AbstractSchoolingFish { super(type, world); } @@ -1895,10 +1895,10 @@ index 642478999b5e6929f4fcaefb09c232e0948c6bc9..0ddc45c8dd098b88f12a5a3af8aaa1f7 return "entity.minecraft.tropical_fish.predefined." + variant; } diff --git a/src/main/java/net/minecraft/world/entity/animal/Turtle.java b/src/main/java/net/minecraft/world/entity/animal/Turtle.java -index 7d001f42c448fd328b6384d133dcc4b72aab756c..9395787aa7e406fe9585308d17437bce95f8a5a1 100644 +index 60e1111f3c2c43398f21c541248f38524f41f4fb..a318f1080a5406ec159fb2d1105b2e51ee3a8be5 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Turtle.java +++ b/src/main/java/net/minecraft/world/entity/animal/Turtle.java -@@ -90,6 +90,18 @@ public class Turtle extends Animal { +@@ -86,6 +86,18 @@ public class Turtle extends Animal { this.maxUpStep = 1.0F; } @@ -1915,9 +1915,9 @@ index 7d001f42c448fd328b6384d133dcc4b72aab756c..9395787aa7e406fe9585308d17437bce + // Purpur end + public void setHomePos(BlockPos pos) { - this.entityData.set(Turtle.HOME_POS, pos.immutable()); // Paper - called with mutablepos... + this.entityData.set(Turtle.HOME_POS, pos); } -@@ -192,6 +204,7 @@ public class Turtle extends Animal { +@@ -188,6 +200,7 @@ public class Turtle extends Animal { @Override protected void registerGoals() { @@ -1925,7 +1925,7 @@ index 7d001f42c448fd328b6384d133dcc4b72aab756c..9395787aa7e406fe9585308d17437bce this.goalSelector.addGoal(0, new Turtle.TurtlePanicGoal(this, 1.2D)); this.goalSelector.addGoal(1, new Turtle.TurtleBreedGoal(this, 1.0D)); this.goalSelector.addGoal(1, new Turtle.TurtleLayEggGoal(this, 1.0D)); -@@ -349,13 +362,15 @@ public class Turtle extends Animal { +@@ -345,13 +358,15 @@ public class Turtle extends Animal { org.bukkit.craftbukkit.event.CraftEventFactory.entityDamage = null; // CraftBukkit } @@ -1942,7 +1942,7 @@ index 7d001f42c448fd328b6384d133dcc4b72aab756c..9395787aa7e406fe9585308d17437bce } private void updateSpeed() { -@@ -374,8 +389,18 @@ public class Turtle extends Animal { +@@ -370,8 +385,18 @@ public class Turtle extends Animal { } @@ -1962,7 +1962,7 @@ index 7d001f42c448fd328b6384d133dcc4b72aab756c..9395787aa7e406fe9585308d17437bce this.updateSpeed(); if (this.operation == MoveControl.Operation.MOVE_TO && !this.turtle.getNavigation().isDone()) { double d0 = this.wantedX - this.turtle.getX(); -@@ -388,7 +413,7 @@ public class Turtle extends Animal { +@@ -384,7 +409,7 @@ public class Turtle extends Animal { this.turtle.setYRot(this.rotlerp(this.turtle.getYRot(), f, 90.0F)); this.turtle.yBodyRot = this.turtle.getYRot(); @@ -1972,10 +1972,10 @@ index 7d001f42c448fd328b6384d133dcc4b72aab756c..9395787aa7e406fe9585308d17437bce this.turtle.setSpeed(Mth.lerp(0.125F, this.turtle.getSpeed(), f1)); this.turtle.setDeltaMovement(this.turtle.getDeltaMovement().add(0.0D, (double) this.turtle.getSpeed() * d1 * 0.1D, 0.0D)); diff --git a/src/main/java/net/minecraft/world/entity/animal/Wolf.java b/src/main/java/net/minecraft/world/entity/animal/Wolf.java -index 1050ccdeba51fd33d06c5f46853e42a05c38bd4d..e66c2339633f5230ad992d19bad4f12df970d405 100644 +index 4797c34872f8fa2fba00172357c4f45e45cfe27f..3240a1b0759e4d1f189ff769519b4496af0657be 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Wolf.java +++ b/src/main/java/net/minecraft/world/entity/animal/Wolf.java -@@ -93,9 +93,27 @@ public class Wolf extends TamableAnimal implements NeutralMob { +@@ -99,9 +99,27 @@ public class Wolf extends TamableAnimal implements NeutralMob { this.setTame(false); } @@ -2003,19 +2003,19 @@ index 1050ccdeba51fd33d06c5f46853e42a05c38bd4d..e66c2339633f5230ad992d19bad4f12d this.goalSelector.addGoal(2, new SitWhenOrderedToGoal(this)); this.goalSelector.addGoal(3, new Wolf.WolfAvoidEntityGoal<>(this, Llama.class, 24.0F, 1.5D, 1.5D)); this.goalSelector.addGoal(4, new LeapAtTargetGoal(this, 0.4F)); -@@ -106,6 +124,7 @@ public class Wolf extends TamableAnimal implements NeutralMob { +@@ -112,6 +130,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 net.pl3x.purpur.entity.ai.HasRider(this)); // Purpur this.targetSelector.addGoal(1, new OwnerHurtByTargetGoal(this)); this.targetSelector.addGoal(2, new OwnerHurtTargetGoal(this)); - this.targetSelector.addGoal(3, (new HurtByTargetGoal(this, new Class[0])).setAlertOthers(new Class[0])); // CraftBukkit - decompile error + this.targetSelector.addGoal(3, (new HurtByTargetGoal(this, new Class[0])).setAlertOthers()); diff --git a/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java b/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java -index 2b8725087fd3bfeca7162bda2783fdacd13a8390..b960be4d436ae42f6347f68008aa055482d5c4b2 100644 +index 67bb476693fa16aa391c120f8acae7c7279efc20..fc731dc27a1f3ae61e3fb0b6d76845465eaf8ea9 100644 --- a/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java +++ b/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java -@@ -90,6 +90,23 @@ public class Axolotl extends Animal implements LerpingModel, Bucketable { +@@ -91,6 +91,23 @@ public class Axolotl extends Animal implements LerpingModel, Bucketable { this.maxUpStep = 1.0F; } @@ -2039,7 +2039,7 @@ index 2b8725087fd3bfeca7162bda2783fdacd13a8390..b960be4d436ae42f6347f68008aa0554 @Override public Map getModelRotationValues() { return this.modelRotationValues; -@@ -509,14 +526,22 @@ public class Axolotl extends Animal implements LerpingModel, Bucketable { +@@ -514,14 +531,22 @@ public class Axolotl extends Animal implements LerpingModel, Bucketable { private static class AxolotlMoveControl extends SmoothSwimmingMoveControl { private final Axolotl axolotl; @@ -2062,7 +2062,7 @@ index 2b8725087fd3bfeca7162bda2783fdacd13a8390..b960be4d436ae42f6347f68008aa0554 if (!this.axolotl.isPlayingDead()) { super.tick(); } -@@ -531,9 +556,9 @@ public class Axolotl extends Animal implements LerpingModel, Bucketable { +@@ -536,9 +561,9 @@ public class Axolotl extends Animal implements LerpingModel, Bucketable { } @Override @@ -2075,10 +2075,10 @@ index 2b8725087fd3bfeca7162bda2783fdacd13a8390..b960be4d436ae42f6347f68008aa0554 } diff --git a/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java b/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java -index c7e24da48aaff9fbd1a8272483231744326e3a8e..f2ba82ddb7af62fc68fbcbee0a6ded42999e15b8 100644 +index cc5687f43f8ac99995667fdc53c5c0586f70f367..563ead054aa41c8420d9b3f8c335dce20c229ac6 100644 --- a/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java +++ b/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java -@@ -72,6 +72,18 @@ public class Goat extends Animal { +@@ -74,6 +74,18 @@ public class Goat extends Animal { this.getNavigation().setCanFloat(true); } @@ -2096,20 +2096,20 @@ index c7e24da48aaff9fbd1a8272483231744326e3a8e..f2ba82ddb7af62fc68fbcbee0a6ded42 + @Override protected Brain.Provider brainProvider() { - return Brain.provider((Collection) Goat.MEMORY_TYPES, (Collection) Goat.SENSOR_TYPES); -@@ -147,6 +159,7 @@ public class Goat extends Animal { + return Brain.provider(Goat.MEMORY_TYPES, Goat.SENSOR_TYPES); +@@ -149,6 +161,7 @@ public class Goat extends Animal { @Override protected void customServerAiStep() { this.level.getProfiler().push("goatBrain"); + if (getRider() == null) // Purpur - only use brain if no rider - this.getBrain().tick((ServerLevel) this.level, this); // CraftBukkit - decompile error + this.getBrain().tick((ServerLevel) this.level, this); this.level.getProfiler().pop(); this.level.getProfiler().push("goatActivityUpdate"); diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java b/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java -index bf610ede1232d18239f210d32db88466350c5aca..63875471d3c4455955028594dded33293bcf8b81 100644 +index a726006888bbbdb290bcda3ac4fd45d68ba51b79..5b797d33252488bd242913b862eb599f7c8e7edc 100644 --- a/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java +++ b/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java -@@ -113,12 +113,22 @@ public abstract class AbstractHorse extends Animal implements ContainerListener, +@@ -114,12 +114,22 @@ public abstract class AbstractHorse extends Animal implements ContainerListener, protected AbstractHorse(EntityType type, Level world) { super(type, world); @@ -2132,7 +2132,7 @@ index bf610ede1232d18239f210d32db88466350c5aca..63875471d3c4455955028594dded3329 this.goalSelector.addGoal(1, new PanicGoal(this, 1.2D)); this.goalSelector.addGoal(1, new RunAroundLikeCrazyGoal(this, 1.2D)); this.goalSelector.addGoal(2, new BreedGoal(this, 1.0D, AbstractHorse.class)); -@@ -126,6 +136,7 @@ public abstract class AbstractHorse extends Animal implements ContainerListener, +@@ -127,6 +137,7 @@ public abstract class AbstractHorse extends Animal implements ContainerListener, this.goalSelector.addGoal(6, new WaterAvoidingRandomStrollGoal(this, 0.7D)); this.goalSelector.addGoal(7, new LookAtPlayerGoal(this, Player.class, 6.0F)); this.goalSelector.addGoal(8, new RandomLookAroundGoal(this)); @@ -2177,10 +2177,10 @@ index 7af7ff4accbcc1b28d96c94e9c3301142541f4f0..a91152df3d443d70b1aa9aff97b3746e protected void randomizeAttributes() { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue((double)this.generateRandomMaxHealth()); diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java b/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java -index 1b906d949c0f0233fa55863a36e88d7599256e6d..f5616cfbc9bc39a7d8bac37a92110e58ae82b2a2 100644 +index c4b4adc11179682d19be69d01ebd5f45e5f0e193..b9a7f5e536afe6409f517133db7f0d6f3b481640 100644 --- a/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java +++ b/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java -@@ -68,7 +68,46 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob { +@@ -69,7 +69,46 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob { public Llama(EntityType type, Level world) { super(type, world); @@ -2227,7 +2227,7 @@ index 1b906d949c0f0233fa55863a36e88d7599256e6d..f5616cfbc9bc39a7d8bac37a92110e58 public boolean isTraderLlama() { return false; -@@ -113,6 +152,7 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob { +@@ -114,6 +153,7 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob { @Override protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); @@ -2235,10 +2235,10 @@ index 1b906d949c0f0233fa55863a36e88d7599256e6d..f5616cfbc9bc39a7d8bac37a92110e58 this.goalSelector.addGoal(1, new RunAroundLikeCrazyGoal(this, 1.2D)); this.goalSelector.addGoal(2, new LlamaFollowCaravanGoal(this, (double)2.1F)); this.goalSelector.addGoal(3, new RangedAttackGoal(this, 1.25D, 40, 20.0F)); -@@ -122,6 +162,7 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob { - this.goalSelector.addGoal(6, new WaterAvoidingRandomStrollGoal(this, 0.7D)); - this.goalSelector.addGoal(7, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(8, new RandomLookAroundGoal(this)); +@@ -124,6 +164,7 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob { + this.goalSelector.addGoal(7, new WaterAvoidingRandomStrollGoal(this, 0.7D)); + this.goalSelector.addGoal(8, new LookAtPlayerGoal(this, Player.class, 6.0F)); + this.goalSelector.addGoal(9, new RandomLookAroundGoal(this)); + this.targetSelector.addGoal(0, new net.pl3x.purpur.entity.ai.HorseHasRider(this)); // Purpur this.targetSelector.addGoal(1, new Llama.LlamaHurtByTargetGoal(this)); this.targetSelector.addGoal(2, new Llama.LlamaAttackWolfGoal(this)); @@ -2297,7 +2297,7 @@ index 5f0ccd0181dd1c84580b91fdccdcbce0a619d10d..a693f5ff830662e3a958af28503bd55a @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/TraderLlama.java b/src/main/java/net/minecraft/world/entity/animal/horse/TraderLlama.java -index 885937d7001259d9a8ee8d5bc16629a196a13fe8..ff252d9ca75b90ab7606f63aa5f89b6230e33a36 100644 +index 7dbdb6529350b34c0260ca50dfff2b4583fd9c2a..4bad9092aa5381aa82676671482aa7ec3c091772 100644 --- a/src/main/java/net/minecraft/world/entity/animal/horse/TraderLlama.java +++ b/src/main/java/net/minecraft/world/entity/animal/horse/TraderLlama.java @@ -27,6 +27,23 @@ public class TraderLlama extends Llama { @@ -2373,7 +2373,7 @@ index 305a891e4b51d1031d9e9238ff00e2ea7de8d954..84625d09df800fcfd477fc493fb5f824 protected void defineSynchedData() { } diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -index 29aa428e019681af8d6b0020c12b18660ff6af6c..5df112f87fba042f13f615a22a5c6f850b779bf7 100644 +index e17a3afa41fd628d2c4a3637ae19418e258a99b8..6a39bd861f27d517f8de9fc3f589c7e20b43d706 100644 --- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java +++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java @@ -102,6 +102,7 @@ public class EnderDragon extends Mob implements Enemy { @@ -2504,9 +2504,9 @@ index 29aa428e019681af8d6b0020c12b18660ff6af6c..5df112f87fba042f13f615a22a5c6f85 this.tickPart(this.wing2, (double) (f12 * -4.5F), 2.0D, (double) (f11 * -4.5F)); - if (!this.level.isClientSide && this.hurtTime == 0) { + if (!hasRider && !this.level.isClientSide && this.hurtTime == 0) { // Purpur - this.knockBack(this.level.getEntities(this, this.wing1.getBoundingBox().inflate(4.0D, 2.0D, 4.0D).move(0.0D, -2.0D, 0.0D), EntitySelector.NO_CREATIVE_OR_SPECTATOR)); - this.knockBack(this.level.getEntities(this, this.wing2.getBoundingBox().inflate(4.0D, 2.0D, 4.0D).move(0.0D, -2.0D, 0.0D), EntitySelector.NO_CREATIVE_OR_SPECTATOR)); - this.hurt(this.level.getEntities(this, this.head.getBoundingBox().inflate(1.0D), EntitySelector.NO_CREATIVE_OR_SPECTATOR)); + this.knockBack(this.level.getEntities((Entity) this, this.wing1.getBoundingBox().inflate(4.0D, 2.0D, 4.0D).move(0.0D, -2.0D, 0.0D), EntitySelector.NO_CREATIVE_OR_SPECTATOR)); + this.knockBack(this.level.getEntities((Entity) this, this.wing2.getBoundingBox().inflate(4.0D, 2.0D, 4.0D).move(0.0D, -2.0D, 0.0D), EntitySelector.NO_CREATIVE_OR_SPECTATOR)); + this.hurt(this.level.getEntities((Entity) this, this.head.getBoundingBox().inflate(1.0D), EntitySelector.NO_CREATIVE_OR_SPECTATOR)); @@ -352,7 +423,7 @@ public class EnderDragon extends Mob implements Enemy { } @@ -2517,10 +2517,10 @@ index 29aa428e019681af8d6b0020c12b18660ff6af6c..5df112f87fba042f13f615a22a5c6f85 this.dragonFight.updateDragon(this); } diff --git a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java -index 8c17caf00bd24adca5794774171638f298921ee7..9e9b9996293acd721e183fa752b3742ffc54910f 100644 +index ede0ced64d74d71547d1b8bb6853c5aacc1b486a..318bf2a0feea7b5eb15b56565d4aecc4cd2eb2b4 100644 --- a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java -@@ -83,6 +83,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob +@@ -85,6 +85,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob return entityliving.getMobType() != MobType.UNDEAD && entityliving.attackable(); }; private static final TargetingConditions TARGETING_CONDITIONS = TargetingConditions.forCombat().range(20.0D).selector(WitherBoss.LIVING_ENTITY_SELECTOR); @@ -2528,10 +2528,10 @@ index 8c17caf00bd24adca5794774171638f298921ee7..9e9b9996293acd721e183fa752b3742f // Paper start private boolean canPortal = false; -@@ -95,15 +96,117 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob - this.setHealth(this.getMaxHealth()); - this.getNavigation().setCanFloat(true); - this.xpReward = 50; +@@ -107,15 +108,117 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob + navigationflying.setCanFloat(true); + navigationflying.setCanPassDoors(true); + return navigationflying; + this.moveControl = new net.pl3x.purpur.controller.FlyingWithSpacebarMoveControllerWASD(this, 0.1F); // Purpur } @@ -2639,14 +2639,14 @@ index 8c17caf00bd24adca5794774171638f298921ee7..9e9b9996293acd721e183fa752b3742f + this.goalSelector.addGoal(0, new net.pl3x.purpur.entity.ai.HasRider(this)); // Purpur this.goalSelector.addGoal(0, new WitherBoss.WitherDoNothingGoal()); this.goalSelector.addGoal(2, new RangedAttackGoal(this, 1.0D, 40, 20.0F)); - this.goalSelector.addGoal(5, new WaterAvoidingRandomStrollGoal(this, 1.0D)); + this.goalSelector.addGoal(5, new WaterAvoidingRandomFlyingGoal(this, 1.0D)); this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 8.0F)); this.goalSelector.addGoal(7, new RandomLookAroundGoal(this)); + this.targetSelector.addGoal(0, new net.pl3x.purpur.entity.ai.HasRider(this)); // Purpur this.targetSelector.addGoal(1, new HurtByTargetGoal(this, new Class[0])); - if(this.level.paperConfig.fixWitherTargetingBug) this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, 0, false, false, null)); // Paper - Fix MC-29274 - this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Mob.class, 0, false, false, WitherBoss.LIVING_ENTITY_SELECTOR)); -@@ -246,6 +349,16 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob + this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, LivingEntity.class, 0, false, false, WitherBoss.LIVING_ENTITY_SELECTOR)); + } +@@ -257,6 +360,16 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob @Override protected void customServerAiStep() { @@ -2663,16 +2663,7 @@ index 8c17caf00bd24adca5794774171638f298921ee7..9e9b9996293acd721e183fa752b3742f int i; if (this.getInvulnerableTicks() > 0) { -@@ -553,7 +666,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob - } - - public static AttributeSupplier.Builder createAttributes() { -- return Monster.createMonsterAttributes().add(Attributes.MAX_HEALTH, 300.0D).add(Attributes.MOVEMENT_SPEED, 0.6000000238418579D).add(Attributes.FOLLOW_RANGE, 40.0D).add(Attributes.ARMOR, 4.0D); -+ return Monster.createMonsterAttributes().add(Attributes.MAX_HEALTH, 300.0D).add(Attributes.MOVEMENT_SPEED, 0.6000000238418579D).add(Attributes.FOLLOW_RANGE, 40.0D).add(Attributes.ARMOR, 4.0D).add(Attributes.FLYING_SPEED, 0.6D); // Purpur - } - - public float getHeadYRot(int headIndex) { -@@ -573,11 +686,11 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob +@@ -584,11 +697,11 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob } public int getAlternativeTarget(int headIndex) { @@ -2687,10 +2678,10 @@ index 8c17caf00bd24adca5794774171638f298921ee7..9e9b9996293acd721e183fa752b3742f @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java b/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java -index cd75f895b6818fbb7ed4b0ef3df873f264bb2d1b..74f4f8e1c9faef3b50fa817ca3dfbb6b19b1622d 100644 +index e23fe546291e670f89447398507d08a0a07efa85..8869c32392383028128d6aa3eeaa474b7301cc0c 100644 --- a/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java +++ b/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java -@@ -69,12 +69,14 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo +@@ -68,12 +68,14 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo @Override protected void registerGoals() { @@ -2706,7 +2697,7 @@ index cd75f895b6818fbb7ed4b0ef3df873f264bb2d1b..74f4f8e1c9faef3b50fa817ca3dfbb6b this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, IronGolem.class, true)); diff --git a/src/main/java/net/minecraft/world/entity/monster/Blaze.java b/src/main/java/net/minecraft/world/entity/monster/Blaze.java -index 523a1389b789d57a545e9c199fb2e681230b1a54..5b3eb1ef97b2c0979e28592e0572231e3d92256d 100644 +index 40b387bfa1dbdb8dd2b4d23e9c130645469e1af0..5b49aed3f4998d7f02303da49ec3b960b6b00bd8 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Blaze.java +++ b/src/main/java/net/minecraft/world/entity/monster/Blaze.java @@ -32,6 +32,7 @@ public class Blaze extends Monster { @@ -2808,7 +2799,7 @@ index d980b906d9206560741576fa4153c57212f307a0..dd05c5f35d78d1385f793f4e34333ff2 public boolean doHurtTarget(Entity target) { if (super.doHurtTarget(target)) { diff --git a/src/main/java/net/minecraft/world/entity/monster/Creeper.java b/src/main/java/net/minecraft/world/entity/monster/Creeper.java -index bbca035b89c2334e65abc46dd76234c833ac222d..9f3c6d6a33fa59cad7ffa40d63b140014b92deb2 100644 +index c2dbe53f504327f153efe195c74ad28c1b89791f..65844015acca05df42396822446e8105b4a01287 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Creeper.java +++ b/src/main/java/net/minecraft/world/entity/monster/Creeper.java @@ -60,21 +60,93 @@ public class Creeper extends Monster implements PowerableMob { @@ -2914,7 +2905,7 @@ index bbca035b89c2334e65abc46dd76234c833ac222d..9f3c6d6a33fa59cad7ffa40d63b14001 } // Paper end diff --git a/src/main/java/net/minecraft/world/entity/monster/Drowned.java b/src/main/java/net/minecraft/world/entity/monster/Drowned.java -index 275275f4f167522126dc1dc6128716c87f71a4d9..defcc32e6b16ca7672fc01dea4738af33088c207 100644 +index ccaa50d1ba9151bd94333b6b8fc0e77bc4324990..af235aefbcff818d39297c3fb0a90a8e8f5a5d4b 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Drowned.java +++ b/src/main/java/net/minecraft/world/entity/monster/Drowned.java @@ -69,6 +69,18 @@ public class Drowned extends Zombie implements RangedAttackMob { @@ -2936,7 +2927,7 @@ index 275275f4f167522126dc1dc6128716c87f71a4d9..defcc32e6b16ca7672fc01dea4738af3 @Override protected void addBehaviourGoals() { this.goalSelector.addGoal(1, new Drowned.DrownedGoToWaterGoal(this, 1.0D)); -@@ -378,7 +390,7 @@ public class Drowned extends Zombie implements RangedAttackMob { +@@ -382,7 +394,7 @@ public class Drowned extends Zombie implements RangedAttackMob { } } @@ -2945,7 +2936,7 @@ index 275275f4f167522126dc1dc6128716c87f71a4d9..defcc32e6b16ca7672fc01dea4738af3 private final Drowned drowned; public DrownedMoveControl(Drowned drowned) { -@@ -387,7 +399,7 @@ public class Drowned extends Zombie implements RangedAttackMob { +@@ -391,7 +403,7 @@ public class Drowned extends Zombie implements RangedAttackMob { } @Override @@ -2954,7 +2945,7 @@ index 275275f4f167522126dc1dc6128716c87f71a4d9..defcc32e6b16ca7672fc01dea4738af3 LivingEntity livingEntity = this.drowned.getTarget(); if (this.drowned.wantsToSwim() && this.drowned.isInWater()) { if (livingEntity != null && livingEntity.getY() > this.drowned.getY() || this.drowned.searchingForLand) { -@@ -407,7 +419,7 @@ public class Drowned extends Zombie implements RangedAttackMob { +@@ -411,7 +423,7 @@ public class Drowned extends Zombie implements RangedAttackMob { float h = (float)(Mth.atan2(f, d) * (double)(180F / (float)Math.PI)) - 90.0F; this.drowned.setYRot(this.rotlerp(this.drowned.getYRot(), h, 90.0F)); this.drowned.yBodyRot = this.drowned.getYRot(); @@ -2963,7 +2954,7 @@ index 275275f4f167522126dc1dc6128716c87f71a4d9..defcc32e6b16ca7672fc01dea4738af3 float j = Mth.lerp(0.125F, this.drowned.getSpeed(), i); this.drowned.setSpeed(j); this.drowned.setDeltaMovement(this.drowned.getDeltaMovement().add((double)j * d * 0.005D, (double)j * e * 0.1D, (double)j * f * 0.005D)); -@@ -416,7 +428,7 @@ public class Drowned extends Zombie implements RangedAttackMob { +@@ -420,7 +432,7 @@ public class Drowned extends Zombie implements RangedAttackMob { this.drowned.setDeltaMovement(this.drowned.getDeltaMovement().add(0.0D, -0.008D, 0.0D)); } @@ -2996,10 +2987,10 @@ index ee9194ffb3cc6d660d4f99a3914ede7e4a3643fe..1f789b1d481234cafaa6e75c36a272bb return Guardian.createAttributes().add(Attributes.MOVEMENT_SPEED, 0.30000001192092896D).add(Attributes.ATTACK_DAMAGE, 8.0D).add(Attributes.MAX_HEALTH, 80.0D); } diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -index b27e2e1e2270a7a2f3e36b90a19237e39e4175b8..6722fd54f447b2584e28ef34df9b3877f1b214da 100644 +index cfdb631500962ec19007db55bd4453687b91c2f8..841d6846a7607c787f3ea12bc438023a832e0886 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -@@ -83,9 +83,22 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -88,9 +88,22 @@ public class EnderMan extends Monster implements NeutralMob { this.setPathfindingMalus(BlockPathTypes.WATER, -1.0F); } @@ -3022,7 +3013,7 @@ index b27e2e1e2270a7a2f3e36b90a19237e39e4175b8..6722fd54f447b2584e28ef34df9b3877 this.goalSelector.addGoal(1, new EnderMan.EndermanFreezeWhenLookedAt(this)); this.goalSelector.addGoal(2, new MeleeAttackGoal(this, 1.0D, false)); this.goalSelector.addGoal(7, new WaterAvoidingRandomStrollGoal(this, 1.0D, 0.0F)); -@@ -93,6 +106,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -98,6 +111,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)); @@ -3030,7 +3021,7 @@ index b27e2e1e2270a7a2f3e36b90a19237e39e4175b8..6722fd54f447b2584e28ef34df9b3877 this.targetSelector.addGoal(1, new EnderMan.EndermanLookForPlayerGoal(this, this::isAngryAt)); this.targetSelector.addGoal(2, new HurtByTargetGoal(this, new Class[0])); this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, Endermite.class, true, false)); -@@ -273,7 +287,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -279,7 +293,7 @@ public class EnderMan extends Monster implements NeutralMob { @Override protected void customServerAiStep() { @@ -3039,14 +3030,14 @@ index b27e2e1e2270a7a2f3e36b90a19237e39e4175b8..6722fd54f447b2584e28ef34df9b3877 float f = this.getBrightness(); if (f > 0.5F && this.level.canSeeSky(this.blockPosition()) && this.random.nextFloat() * 30.0F < (f - 0.4F) * 2.0F && this.tryEscape(com.destroystokyo.paper.event.entity.EndermanEscapeEvent.Reason.RUNAWAY)) { // Paper -@@ -373,6 +387,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -379,6 +393,7 @@ public class EnderMan extends Monster implements NeutralMob { public boolean hurt(DamageSource source, float amount) { if (this.isInvulnerableTo(source)) { return false; + } else if (getRider() != null) { return super.hurt(source, amount); // Purpur - no teleporting on damage } else if (source instanceof IndirectEntityDamageSource) { - if (this.tryEscape(com.destroystokyo.paper.event.entity.EndermanEscapeEvent.Reason.INDIRECT)) { // Paper start - for (int i = 0; i < 64; ++i) { + Entity entity = source.getDirectEntity(); + boolean flag; diff --git a/src/main/java/net/minecraft/world/entity/monster/Endermite.java b/src/main/java/net/minecraft/world/entity/monster/Endermite.java index 56d313c2c4a98eac7f4f594d2c29dcd82a4753ac..a7eb3bdb45cfefbe290fdb26bc1444eb46ee8ae6 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Endermite.java @@ -3080,10 +3071,10 @@ index 56d313c2c4a98eac7f4f594d2c29dcd82a4753ac..a7eb3bdb45cfefbe290fdb26bc1444eb this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); } diff --git a/src/main/java/net/minecraft/world/entity/monster/Evoker.java b/src/main/java/net/minecraft/world/entity/monster/Evoker.java -index 5d2f50991b1d9cec500047846bc07a75d8e3cea9..349670deed65a83e4a09e8f71edbb66bd63ff53c 100644 +index 74e6216366afcc4d3e751b911042fcb5a05a283f..01c8ca72ff84f2beab0822247b0c44dc06b45ea0 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Evoker.java +++ b/src/main/java/net/minecraft/world/entity/monster/Evoker.java -@@ -46,10 +46,23 @@ public class Evoker extends SpellcasterIllager { +@@ -47,10 +47,23 @@ public class Evoker extends SpellcasterIllager { this.xpReward = 10; } @@ -3107,7 +3098,7 @@ index 5d2f50991b1d9cec500047846bc07a75d8e3cea9..349670deed65a83e4a09e8f71edbb66b this.goalSelector.addGoal(1, new Evoker.EvokerCastingSpellGoal()); this.goalSelector.addGoal(2, new AvoidEntityGoal<>(this, Player.class, 8.0F, 0.6D, 1.0D)); this.goalSelector.addGoal(4, new Evoker.EvokerSummonSpellGoal()); -@@ -58,6 +71,7 @@ public class Evoker extends SpellcasterIllager { +@@ -59,6 +72,7 @@ public class Evoker extends SpellcasterIllager { this.goalSelector.addGoal(8, new RandomStrollGoal(this, 0.6D)); this.goalSelector.addGoal(9, new LookAtPlayerGoal(this, Player.class, 3.0F, 1.0F)); this.goalSelector.addGoal(10, new LookAtPlayerGoal(this, Mob.class, 8.0F)); @@ -3116,7 +3107,7 @@ index 5d2f50991b1d9cec500047846bc07a75d8e3cea9..349670deed65a83e4a09e8f71edbb66b 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/src/main/java/net/minecraft/world/entity/monster/Ghast.java b/src/main/java/net/minecraft/world/entity/monster/Ghast.java -index ee5faf8389882a63e2f6ba5b86523f2b387ab0b5..8f738130b33b49af84a76f89e1a6b9586adfb420 100644 +index f834e96c48cce6af65a65dafcdeb2cf0ea12763a..31c3ad9c9fa42be535fd80b696c781f961e83ee1 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Ghast.java +++ b/src/main/java/net/minecraft/world/entity/monster/Ghast.java @@ -44,11 +44,42 @@ public class Ghast extends FlyingMob implements Enemy { @@ -3219,10 +3210,10 @@ index 0d578ab12c874bd2daccc4322a3fe1abafa4bc18..d95b110a025d48e7ab18f172e4555937 protected float getStandingEyeHeight(Pose pose, EntityDimensions dimensions) { return 10.440001F; diff --git a/src/main/java/net/minecraft/world/entity/monster/Guardian.java b/src/main/java/net/minecraft/world/entity/monster/Guardian.java -index 9d40dd4261cbdd40d2e7b12717a0e6b4b3082a41..e825e974c8586928dbc18c5d69071e17ccfe01c5 100644 +index 8377fa2f583e88082ac5e908951e1ffc1ff973d3..5023a117483de9c95c861bb075f0d2e689bf6289 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Guardian.java +++ b/src/main/java/net/minecraft/world/entity/monster/Guardian.java -@@ -65,15 +65,36 @@ public class Guardian extends Monster { +@@ -65,14 +65,35 @@ public class Guardian extends Monster { this.xpReward = 10; this.setPathfindingMalus(BlockPathTypes.WATER, 0.0F); this.moveControl = new Guardian.GuardianMoveControl(this); @@ -3252,22 +3243,21 @@ index 9d40dd4261cbdd40d2e7b12717a0e6b4b3082a41..e825e974c8586928dbc18c5d69071e17 + @Override protected void registerGoals() { - MoveTowardsRestrictionGoal pathfindergoalmovetowardsrestriction = new MoveTowardsRestrictionGoal(this, 1.0D); - + MoveTowardsRestrictionGoal moveTowardsRestrictionGoal = new MoveTowardsRestrictionGoal(this, 1.0D); this.randomStrollGoal = new RandomStrollGoal(this, 1.0D, 80); + this.goalSelector.addGoal(0, new net.pl3x.purpur.entity.ai.HasRider(this)); // Purpur this.goalSelector.addGoal(4, new Guardian.GuardianAttackGoal(this)); - this.goalSelector.addGoal(5, pathfindergoalmovetowardsrestriction); + this.goalSelector.addGoal(5, moveTowardsRestrictionGoal); this.goalSelector.addGoal(7, this.randomStrollGoal); -@@ -82,6 +103,7 @@ public class Guardian extends Monster { +@@ -81,6 +102,7 @@ public class Guardian extends Monster { this.goalSelector.addGoal(9, new RandomLookAroundGoal(this)); this.randomStrollGoal.setFlags(EnumSet.of(Goal.Flag.MOVE, Goal.Flag.LOOK)); - pathfindergoalmovetowardsrestriction.setFlags(EnumSet.of(Goal.Flag.MOVE, Goal.Flag.LOOK)); + moveTowardsRestrictionGoal.setFlags(EnumSet.of(Goal.Flag.MOVE, Goal.Flag.LOOK)); + this.targetSelector.addGoal(0, new net.pl3x.purpur.entity.ai.HasRider(this)); // Purpur this.targetSelector.addGoal(1, new NearestAttackableTargetGoal<>(this, LivingEntity.class, 10, true, false, new Guardian.GuardianAttackSelector(this))); } -@@ -337,7 +359,7 @@ public class Guardian extends Monster { +@@ -330,7 +352,7 @@ public class Guardian extends Monster { @Override public void travel(Vec3 movementInput) { if (this.isEffectiveAi() && this.isInWater()) { @@ -3276,17 +3266,16 @@ index 9d40dd4261cbdd40d2e7b12717a0e6b4b3082a41..e825e974c8586928dbc18c5d69071e17 this.move(MoverType.SELF, this.getDeltaMovement()); this.setDeltaMovement(this.getDeltaMovement().scale(0.9D)); if (!this.isMoving() && this.getTarget() == null) { -@@ -349,8 +371,7 @@ public class Guardian extends Monster { - +@@ -437,7 +459,7 @@ public class Guardian extends Monster { + } } -- private static class GuardianMoveControl extends MoveControl { -- -+ private static class GuardianMoveControl extends net.pl3x.purpur.controller.WaterMoveControllerWASD { // Purpur +- static class GuardianMoveControl extends MoveControl { ++ static class GuardianMoveControl extends net.pl3x.purpur.controller.WaterMoveControllerWASD { // Purpur private final Guardian guardian; public GuardianMoveControl(Guardian guardian) { -@@ -358,8 +379,17 @@ public class Guardian extends Monster { +@@ -445,8 +467,17 @@ public class Guardian extends Monster { this.guardian = guardian; } @@ -3303,17 +3292,17 @@ index 9d40dd4261cbdd40d2e7b12717a0e6b4b3082a41..e825e974c8586928dbc18c5d69071e17 + @Override + public void vanillaTick() { // Purpur if (this.operation == MoveControl.Operation.MOVE_TO && !this.guardian.getNavigation().isDone()) { - Vec3 vec3d = new Vec3(this.wantedX - this.guardian.getX(), this.wantedY - this.guardian.getY(), this.wantedZ - this.guardian.getZ()); - double d0 = vec3d.length(); -@@ -370,7 +400,7 @@ public class Guardian extends Monster { - - this.guardian.setYRot(this.rotlerp(this.guardian.getYRot(), f, 90.0F)); + Vec3 vec3 = new Vec3(this.wantedX - this.guardian.getX(), this.wantedY - this.guardian.getY(), this.wantedZ - this.guardian.getZ()); + double d = vec3.length(); +@@ -456,7 +487,7 @@ public class Guardian extends Monster { + float h = (float)(Mth.atan2(vec3.z, vec3.x) * (double)(180F / (float)Math.PI)) - 90.0F; + this.guardian.setYRot(this.rotlerp(this.guardian.getYRot(), h, 90.0F)); this.guardian.yBodyRot = this.guardian.getYRot(); -- float f1 = (float) (this.speedModifier * this.guardian.getAttributeValue(Attributes.MOVEMENT_SPEED)); -+ float f1 = (float) (this.getSpeedModifier() * this.guardian.getAttributeValue(Attributes.MOVEMENT_SPEED)); // Purpur - float f2 = Mth.lerp(0.125F, this.guardian.getSpeed(), f1); - - this.guardian.setSpeed(f2); +- float i = (float)(this.speedModifier * this.guardian.getAttributeValue(Attributes.MOVEMENT_SPEED)); ++ float i = (float)(this.getSpeedModifier() * this.guardian.getAttributeValue(Attributes.MOVEMENT_SPEED)); // Purpur + float j = Mth.lerp(0.125F, this.guardian.getSpeed(), i); + this.guardian.setSpeed(j); + double k = Math.sin((double)(this.guardian.tickCount + this.guardian.getId()) * 0.5D) * 0.05D; diff --git a/src/main/java/net/minecraft/world/entity/monster/Husk.java b/src/main/java/net/minecraft/world/entity/monster/Husk.java index 4f683b4d35b5b07fffe344fab6ae15f5ccb6baf2..82a14d717e8f2ee005c2c410625b811cd016cdc3 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Husk.java @@ -3338,7 +3327,7 @@ index 4f683b4d35b5b07fffe344fab6ae15f5ccb6baf2..82a14d717e8f2ee005c2c410625b811c return checkMonsterSpawnRules(type, world, spawnReason, pos, random) && (spawnReason == MobSpawnType.SPAWNER || world.canSeeSky(pos)); } diff --git a/src/main/java/net/minecraft/world/entity/monster/Illusioner.java b/src/main/java/net/minecraft/world/entity/monster/Illusioner.java -index e1b8d9c0acfc248b9a24efc21aefc88e3caeb605..c03e5836a313876d856c6318b288946c4ebd1af9 100644 +index 86f7fdd42461db151221d2c0d5cff6953392fa80..d879310fddd27374c18dd77dee5b594c1939fce8 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Illusioner.java +++ b/src/main/java/net/minecraft/world/entity/monster/Illusioner.java @@ -59,10 +59,23 @@ public class Illusioner extends SpellcasterIllager implements RangedAttackMob { @@ -3370,7 +3359,7 @@ index e1b8d9c0acfc248b9a24efc21aefc88e3caeb605..c03e5836a313876d856c6318b288946c this.goalSelector.addGoal(9, new LookAtPlayerGoal(this, Player.class, 3.0F, 1.0F)); this.goalSelector.addGoal(10, new LookAtPlayerGoal(this, Mob.class, 8.0F)); + this.targetSelector.addGoal(0, new net.pl3x.purpur.entity.ai.HasRider(this)); // Purpur - this.targetSelector.addGoal(1, (new HurtByTargetGoal(this, new Class[]{Raider.class})).setAlertOthers(new Class[0])); // CraftBukkit - decompile error + this.targetSelector.addGoal(1, (new HurtByTargetGoal(this, new Class[]{Raider.class})).setAlertOthers()); 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/src/main/java/net/minecraft/world/entity/monster/MagmaCube.java b/src/main/java/net/minecraft/world/entity/monster/MagmaCube.java @@ -3424,10 +3413,10 @@ index 2ffe85ee5565bcae56b8a64567c34eeed71e4e4b..95741b63d68bdf815212d718c3cc0fc6 @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/Phantom.java b/src/main/java/net/minecraft/world/entity/monster/Phantom.java -index 253fce256341d20ee58f9b7afa1ffaa8fb820028..fda285444538ae09cef15ecc0f68836902f3c474 100644 +index 5c35b73c13c3826be9705e05154076810a78d147..81104c73dfb9d0a2dd962c5f450e732f27a583d8 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Phantom.java +++ b/src/main/java/net/minecraft/world/entity/monster/Phantom.java -@@ -61,6 +61,59 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -60,6 +60,59 @@ public class Phantom extends FlyingMob implements Enemy { this.lookControl = new Phantom.PhantomLookControl(this); } @@ -3487,7 +3476,7 @@ index 253fce256341d20ee58f9b7afa1ffaa8fb820028..fda285444538ae09cef15ecc0f688369 @Override public boolean isFlapping() { return (this.getUniqueFlapTickOffset() + this.tickCount) % Phantom.TICKS_PER_FLAP == 0; -@@ -73,9 +126,11 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -72,9 +125,11 @@ public class Phantom extends FlyingMob implements Enemy { @Override protected void registerGoals() { @@ -3499,7 +3488,7 @@ index 253fce256341d20ee58f9b7afa1ffaa8fb820028..fda285444538ae09cef15ecc0f688369 this.targetSelector.addGoal(1, new Phantom.PhantomAttackPlayerTargetGoal()); } -@@ -145,7 +200,7 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -144,7 +199,7 @@ public class Phantom extends FlyingMob implements Enemy { @Override public void aiStep() { @@ -3508,7 +3497,7 @@ index 253fce256341d20ee58f9b7afa1ffaa8fb820028..fda285444538ae09cef15ecc0f688369 this.setSecondsOnFire(8); } -@@ -265,7 +320,7 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -264,7 +319,7 @@ public class Phantom extends FlyingMob implements Enemy { private AttackPhase() {} } @@ -3517,7 +3506,7 @@ index 253fce256341d20ee58f9b7afa1ffaa8fb820028..fda285444538ae09cef15ecc0f688369 private float speed = 0.1F; -@@ -273,8 +328,19 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -272,8 +327,19 @@ public class Phantom extends FlyingMob implements Enemy { super(entity); } @@ -3538,7 +3527,7 @@ index 253fce256341d20ee58f9b7afa1ffaa8fb820028..fda285444538ae09cef15ecc0f688369 if (Phantom.this.horizontalCollision) { Phantom.this.setYRot(Phantom.this.getYRot() + 180.0F); this.speed = 0.1F; -@@ -320,14 +386,20 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -319,14 +385,20 @@ public class Phantom extends FlyingMob implements Enemy { } } @@ -3562,10 +3551,10 @@ index 253fce256341d20ee58f9b7afa1ffaa8fb820028..fda285444538ae09cef15ecc0f688369 private class PhantomBodyRotationControl extends BodyRotationControl { diff --git a/src/main/java/net/minecraft/world/entity/monster/Pillager.java b/src/main/java/net/minecraft/world/entity/monster/Pillager.java -index 91bf8051b85d85e8315691089c3219827145ab77..2137f8133f03467667296f94a26a285288e8c352 100644 +index d77e6d1722bbaeaa921d56fbcb2fdf9757fe74fe..472ca632d9d2c9b8d58925792ee99a7dccc1ab4d 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Pillager.java +++ b/src/main/java/net/minecraft/world/entity/monster/Pillager.java -@@ -66,15 +66,29 @@ public class Pillager extends AbstractIllager implements CrossbowAttackMob, Inve +@@ -63,15 +63,29 @@ public class Pillager extends AbstractIllager implements CrossbowAttackMob, Inve super(type, world); } @@ -3592,14 +3581,14 @@ index 91bf8051b85d85e8315691089c3219827145ab77..2137f8133f03467667296f94a26a2852 this.goalSelector.addGoal(9, new LookAtPlayerGoal(this, Player.class, 15.0F, 1.0F)); this.goalSelector.addGoal(10, new LookAtPlayerGoal(this, Mob.class, 15.0F)); + this.targetSelector.addGoal(0, new net.pl3x.purpur.entity.ai.HasRider(this)); // Purpur - this.targetSelector.addGoal(1, (new HurtByTargetGoal(this, new Class[]{Raider.class})).setAlertOthers(new Class[0])); // CraftBukkit - decompile error + this.targetSelector.addGoal(1, (new HurtByTargetGoal(this, Raider.class)).setAlertOthers()); this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractVillager.class, false)); diff --git a/src/main/java/net/minecraft/world/entity/monster/Ravager.java b/src/main/java/net/minecraft/world/entity/monster/Ravager.java -index 240c4ac718f314505f0b88da3cf1f5c297f4b040..23b0fe96aab0234e17c43423817c4f34c694751a 100644 +index 4a7c6277301aacf83ee1ff5678c97d001e0cb2b9..73a13cc8fe730ff88583d9af61ca581bd8aab99b 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Ravager.java +++ b/src/main/java/net/minecraft/world/entity/monster/Ravager.java -@@ -70,14 +70,34 @@ public class Ravager extends Raider { +@@ -69,14 +69,34 @@ public class Ravager extends Raider { this.xpReward = 20; } @@ -3631,10 +3620,10 @@ index 240c4ac718f314505f0b88da3cf1f5c297f4b040..23b0fe96aab0234e17c43423817c4f34 this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 6.0F)); this.goalSelector.addGoal(10, new LookAtPlayerGoal(this, Mob.class, 8.0F)); + this.targetSelector.addGoal(0, new net.pl3x.purpur.entity.ai.HasRider(this)); // Purpur - this.targetSelector.addGoal(2, (new HurtByTargetGoal(this, new Class[]{Raider.class})).setAlertOthers(new Class[0])); // CraftBukkit - decompile error + this.targetSelector.addGoal(2, (new HurtByTargetGoal(this, new Class[]{Raider.class})).setAlertOthers()); this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, Player.class, true)); - this.targetSelector.addGoal(4, new NearestAttackableTargetGoal<>(this, AbstractVillager.class, true)); -@@ -149,7 +169,7 @@ public class Ravager extends Raider { + this.targetSelector.addGoal(4, new NearestAttackableTargetGoal<>(this, AbstractVillager.class, true, (entityliving) -> { +@@ -150,7 +170,7 @@ public class Ravager extends Raider { @Override public void aiStep() { super.aiStep(); @@ -3644,7 +3633,7 @@ index 240c4ac718f314505f0b88da3cf1f5c297f4b040..23b0fe96aab0234e17c43423817c4f34 this.getAttribute(Attributes.MOVEMENT_SPEED).setBaseValue(0.0D); } else { diff --git a/src/main/java/net/minecraft/world/entity/monster/Shulker.java b/src/main/java/net/minecraft/world/entity/monster/Shulker.java -index 1f6693b7d7466bd12b9b137335f0a874d906edcc..ec41c07f2f7d7c4c24b54a2fbf5cd2b73d8d1247 100644 +index a9dfe190f46230077e2e1bf9aacbf5375651f216..65dd85729822e3bfa2344b2d4a37e9de2913ed85 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Shulker.java +++ b/src/main/java/net/minecraft/world/entity/monster/Shulker.java @@ -92,12 +92,26 @@ public class Shulker extends AbstractGolem implements Enemy { @@ -3671,10 +3660,10 @@ index 1f6693b7d7466bd12b9b137335f0a874d906edcc..ec41c07f2f7d7c4c24b54a2fbf5cd2b7 this.goalSelector.addGoal(7, new Shulker.ShulkerPeekGoal()); this.goalSelector.addGoal(8, new RandomLookAroundGoal(this)); + this.targetSelector.addGoal(0, new net.pl3x.purpur.entity.ai.HasRider(this)); // Purpur - this.targetSelector.addGoal(1, (new HurtByTargetGoal(this, new Class[]{this.getClass()})).setAlertOthers(new Class[0])); // CraftBukkit - decompile error + this.targetSelector.addGoal(1, (new HurtByTargetGoal(this, new Class[]{this.getClass()})).setAlertOthers()); this.targetSelector.addGoal(2, new Shulker.ShulkerNearestAttackGoal(this)); this.targetSelector.addGoal(3, new Shulker.ShulkerDefenseAttackGoal(this)); -@@ -597,7 +611,7 @@ public class Shulker extends AbstractGolem implements Enemy { +@@ -598,7 +612,7 @@ public class Shulker extends AbstractGolem implements Enemy { return b0 != 16 && b0 <= 15 ? DyeColor.byId(b0) : null; } @@ -3684,10 +3673,10 @@ index 1f6693b7d7466bd12b9b137335f0a874d906edcc..ec41c07f2f7d7c4c24b54a2fbf5cd2b7 public ShulkerLookControl(Mob entity) { super(entity); diff --git a/src/main/java/net/minecraft/world/entity/monster/Silverfish.java b/src/main/java/net/minecraft/world/entity/monster/Silverfish.java -index aec7dd2df77efeaf65d9fe08adc668030dfe08e2..44d8ef55d47ff63589e6b47210f460a04a146291 100644 +index 195cdae3f3a9fe8ecab2895a6000f6f855e9a9b8..e597b85a6dee0671c00d7481558cdb8419531682 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Silverfish.java +++ b/src/main/java/net/minecraft/world/entity/monster/Silverfish.java -@@ -39,13 +39,27 @@ public class Silverfish extends Monster { +@@ -41,13 +41,27 @@ public class Silverfish extends Monster { super(type, world); } @@ -3712,7 +3701,7 @@ index aec7dd2df77efeaf65d9fe08adc668030dfe08e2..44d8ef55d47ff63589e6b47210f460a0 this.goalSelector.addGoal(4, new MeleeAttackGoal(this, 1.0D, false)); this.goalSelector.addGoal(5, new Silverfish.SilverfishMergeWithStoneGoal(this)); + this.targetSelector.addGoal(0, new net.pl3x.purpur.entity.ai.HasRider(this)); // Purpur - this.targetSelector.addGoal(1, (new HurtByTargetGoal(this, new Class[0])).setAlertOthers(new Class[0])); // CraftBukkit - decompile error + this.targetSelector.addGoal(1, (new HurtByTargetGoal(this, new Class[0])).setAlertOthers()); this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); } diff --git a/src/main/java/net/minecraft/world/entity/monster/Skeleton.java b/src/main/java/net/minecraft/world/entity/monster/Skeleton.java @@ -3739,7 +3728,7 @@ index 1eeaf0cc9b00afd54f38f9cb50404ec9f9ba51f8..909a7bffcd0d7432f0714417c286fb75 protected void defineSynchedData() { super.defineSynchedData(); diff --git a/src/main/java/net/minecraft/world/entity/monster/Slime.java b/src/main/java/net/minecraft/world/entity/monster/Slime.java -index b9df0e2986afd2b238fabd26d83d2cff923a2401..cf5e780a1708c7d72bb07da2565792fa09a87c77 100644 +index 5722d9b30223fb229b80f54d7fb9edf41254a7f7..76546a356d34546099180a9c825d38c7297dec07 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Slime.java +++ b/src/main/java/net/minecraft/world/entity/monster/Slime.java @@ -67,18 +67,50 @@ public class Slime extends Mob implements Enemy { @@ -3863,7 +3852,7 @@ index b9df0e2986afd2b238fabd26d83d2cff923a2401..cf5e780a1708c7d72bb07da2565792fa } diff --git a/src/main/java/net/minecraft/world/entity/monster/Spider.java b/src/main/java/net/minecraft/world/entity/monster/Spider.java -index 64f0ce2981700532cb0d11fbc086bfbd08f2384d..62760822ef8837d20dfa7ed92a64e14574098c23 100644 +index 05b6c07c0705c7d8741c77baa87982e8e278dc97..50c4fc838eba31e5f34e71a6fbafbb366ec17d06 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Spider.java +++ b/src/main/java/net/minecraft/world/entity/monster/Spider.java @@ -51,14 +51,28 @@ public class Spider extends Monster { @@ -3919,7 +3908,7 @@ index baf614d2dbfb54d25fe06b28709ba2b7176c5213..8480687e452b7cad0d3e434cebe17e15 BlockPos blockPos = pos; diff --git a/src/main/java/net/minecraft/world/entity/monster/Strider.java b/src/main/java/net/minecraft/world/entity/monster/Strider.java -index 5681403fa9131c15b8ca0e9d892e36eec3818eb9..dcf31bc288e8371c17574a3dd4b495ea2c7a8dac 100644 +index 0380f8800f87afa3f8ee2b4be508b5f08e35a6ac..f6dd5e7710ad26d843c986ce068d4b30d5586ce4 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Strider.java +++ b/src/main/java/net/minecraft/world/entity/monster/Strider.java @@ -97,6 +97,18 @@ public class Strider extends Animal implements ItemSteerable, Saddleable { @@ -3953,16 +3942,16 @@ index 5681403fa9131c15b8ca0e9d892e36eec3818eb9..dcf31bc288e8371c17574a3dd4b495ea if (!enuminteractionresult.consumesAction()) { ItemStack itemstack = player.getItemInHand(hand); -- return itemstack.is(Items.SADDLE) ? itemstack.interactLivingEntity(player, (LivingEntity) this, hand) : InteractionResult.PASS; -+ return itemstack.is(Items.SADDLE) ? itemstack.interactLivingEntity(player, (LivingEntity) this, hand) : tryRide(player, hand); // Purpur +- return itemstack.is(Items.SADDLE) ? itemstack.interactLivingEntity(player, this, hand) : InteractionResult.PASS; ++ return itemstack.is(Items.SADDLE) ? itemstack.interactLivingEntity(player, this, hand) : tryRide(player, hand); // Purpur } else { if (flag && !this.isSilent()) { this.level.playSound((Player) null, this.getX(), this.getY(), this.getZ(), SoundEvents.STRIDER_EAT, this.getSoundSource(), 1.0F, 1.0F + (this.random.nextFloat() - this.random.nextFloat()) * 0.2F); diff --git a/src/main/java/net/minecraft/world/entity/monster/Vex.java b/src/main/java/net/minecraft/world/entity/monster/Vex.java -index f78f3f2d740f7b4800e17d9bc64b7b4fedda49b9..589a6f8db279c52cc7f19d7c14d08bf46ebffd7c 100644 +index 8ff606567297296e30e7e543890d9971d6c165b0..90963e11e1c75e17a38ef0b3c4918c306b0ed448 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Vex.java +++ b/src/main/java/net/minecraft/world/entity/monster/Vex.java -@@ -57,6 +57,45 @@ public class Vex extends Monster { +@@ -58,6 +58,45 @@ public class Vex extends Monster { this.xpReward = 3; } @@ -4008,7 +3997,7 @@ index f78f3f2d740f7b4800e17d9bc64b7b4fedda49b9..589a6f8db279c52cc7f19d7c14d08bf4 @Override public boolean isFlapping() { return this.tickCount % Vex.TICKS_PER_FLAP == 0; -@@ -70,7 +109,7 @@ public class Vex extends Monster { +@@ -71,7 +110,7 @@ public class Vex extends Monster { @Override public void tick() { @@ -4017,7 +4006,7 @@ index f78f3f2d740f7b4800e17d9bc64b7b4fedda49b9..589a6f8db279c52cc7f19d7c14d08bf4 super.tick(); this.noPhysics = false; this.setNoGravity(true); -@@ -85,17 +124,19 @@ public class Vex extends Monster { +@@ -86,17 +125,19 @@ public class Vex extends Monster { protected void registerGoals() { super.registerGoals(); this.goalSelector.addGoal(0, new FloatGoal(this)); @@ -4027,7 +4016,7 @@ index f78f3f2d740f7b4800e17d9bc64b7b4fedda49b9..589a6f8db279c52cc7f19d7c14d08bf4 this.goalSelector.addGoal(9, new LookAtPlayerGoal(this, Player.class, 3.0F, 1.0F)); this.goalSelector.addGoal(10, new LookAtPlayerGoal(this, Mob.class, 8.0F)); + this.targetSelector.addGoal(0, new net.pl3x.purpur.entity.ai.HasRider(this)); // Purpur - this.targetSelector.addGoal(1, (new HurtByTargetGoal(this, new Class[]{Raider.class})).setAlertOthers(new Class[0])); // CraftBukkit - decompile error + this.targetSelector.addGoal(1, (new HurtByTargetGoal(this, new Class[]{Raider.class})).setAlertOthers()); this.targetSelector.addGoal(2, new Vex.VexCopyOwnerTargetGoal(this)); this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, Player.class, true)); } @@ -4038,7 +4027,7 @@ index f78f3f2d740f7b4800e17d9bc64b7b4fedda49b9..589a6f8db279c52cc7f19d7c14d08bf4 } @Override -@@ -215,14 +256,14 @@ public class Vex extends Monster { +@@ -217,14 +258,14 @@ public class Vex extends Monster { this.setDropChance(EquipmentSlot.MAINHAND, 0.0F); } @@ -4055,7 +4044,7 @@ index f78f3f2d740f7b4800e17d9bc64b7b4fedda49b9..589a6f8db279c52cc7f19d7c14d08bf4 if (this.operation == MoveControl.Operation.MOVE_TO) { Vec3 vec3d = new Vec3(this.wantedX - Vex.this.getX(), this.wantedY - Vex.this.getY(), this.wantedZ - Vex.this.getZ()); double d0 = vec3d.length(); -@@ -231,7 +272,7 @@ public class Vex extends Monster { +@@ -233,7 +274,7 @@ public class Vex extends Monster { this.operation = MoveControl.Operation.WAIT; Vex.this.setDeltaMovement(Vex.this.getDeltaMovement().scale(0.5D)); } else { @@ -4065,7 +4054,7 @@ index f78f3f2d740f7b4800e17d9bc64b7b4fedda49b9..589a6f8db279c52cc7f19d7c14d08bf4 Vec3 vec3d1 = Vex.this.getDeltaMovement(); diff --git a/src/main/java/net/minecraft/world/entity/monster/Vindicator.java b/src/main/java/net/minecraft/world/entity/monster/Vindicator.java -index f7bcd6b8e1fb2e97db7da9bf218be0e9c99d245b..cbd170cec638dfcd19c2d597e2b39bbcf38c570d 100644 +index 85294ab8eaa654be9358f489cec7e1ae665fc34b..6419deb7a712c1b2562259bc2e8e188170afac84 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Vindicator.java +++ b/src/main/java/net/minecraft/world/entity/monster/Vindicator.java @@ -57,14 +57,28 @@ public class Vindicator extends AbstractIllager { @@ -4098,10 +4087,10 @@ index f7bcd6b8e1fb2e97db7da9bf218be0e9c99d245b..cbd170cec638dfcd19c2d597e2b39bbc this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractVillager.class, true)); diff --git a/src/main/java/net/minecraft/world/entity/monster/Witch.java b/src/main/java/net/minecraft/world/entity/monster/Witch.java -index 365354910047631b0a4402f29ad156e6447c2606..0eb8010cc701014d5dd9b6c1ec167e0befcedeb9 100644 +index 43e4562dcb0de8db42ff556134f649b5e0aa4284..32c64dc093f6dcebcb903295fc71a8f95ed752b7 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Witch.java +++ b/src/main/java/net/minecraft/world/entity/monster/Witch.java -@@ -60,6 +60,18 @@ public class Witch extends Raider implements RangedAttackMob { +@@ -59,6 +59,18 @@ public class Witch extends Raider implements RangedAttackMob { super(type, world); } @@ -4120,7 +4109,7 @@ index 365354910047631b0a4402f29ad156e6447c2606..0eb8010cc701014d5dd9b6c1ec167e0b @Override protected void registerGoals() { super.registerGoals(); -@@ -68,10 +80,12 @@ public class Witch extends Raider implements RangedAttackMob { +@@ -67,10 +79,12 @@ public class Witch extends Raider implements RangedAttackMob { }); this.attackPlayersGoal = new NearestAttackableWitchTargetGoal<>(this, Player.class, 10, true, false, (Predicate) null); this.goalSelector.addGoal(1, new FloatGoal(this)); @@ -4157,10 +4146,10 @@ index 6acc46c3a6fe7648d2cc4d0aaef063633c74c20d..570a7f7c63cae90563129dc04aeb76a0 protected void registerGoals() { this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractPiglin.class, true)); diff --git a/src/main/java/net/minecraft/world/entity/monster/Zoglin.java b/src/main/java/net/minecraft/world/entity/monster/Zoglin.java -index 0ee254552dadd40db7b6427df8b5b34caa90379c..175ff8a67b4ac28efef112bd75508a059d6c1f50 100644 +index 056e4c2f7f632dadc0015710c032a0b718d46ff9..54a545836f3c318e7f90d43aca7fea8a6a56851d 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zoglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zoglin.java -@@ -67,6 +67,18 @@ public class Zoglin extends Monster implements Enemy, HoglinBase { +@@ -68,6 +68,18 @@ public class Zoglin extends Monster implements Enemy, HoglinBase { this.xpReward = 5; } @@ -4179,7 +4168,7 @@ index 0ee254552dadd40db7b6427df8b5b34caa90379c..175ff8a67b4ac28efef112bd75508a05 @Override protected Brain.Provider brainProvider() { return Brain.provider(MEMORY_TYPES, SENSOR_TYPES); -@@ -89,11 +101,11 @@ public class Zoglin extends Monster implements Enemy, HoglinBase { +@@ -90,11 +102,11 @@ public class Zoglin extends Monster implements Enemy, HoglinBase { } private static void initIdleActivity(Brain brain) { @@ -4193,7 +4182,7 @@ index 0ee254552dadd40db7b6427df8b5b34caa90379c..175ff8a67b4ac28efef112bd75508a05 } private Optional findNearestValidAttackTarget() { -@@ -182,7 +194,7 @@ public class Zoglin extends Monster implements Enemy, HoglinBase { +@@ -183,7 +195,7 @@ public class Zoglin extends Monster implements Enemy, HoglinBase { @Override public Brain getBrain() { @@ -4202,7 +4191,7 @@ index 0ee254552dadd40db7b6427df8b5b34caa90379c..175ff8a67b4ac28efef112bd75508a05 } protected void updateActivity() { -@@ -199,6 +211,7 @@ public class Zoglin extends Monster implements Enemy, HoglinBase { +@@ -200,6 +212,7 @@ public class Zoglin extends Monster implements Enemy, HoglinBase { @Override protected void customServerAiStep() { this.level.getProfiler().push("zoglinBrain"); @@ -4211,10 +4200,10 @@ index 0ee254552dadd40db7b6427df8b5b34caa90379c..175ff8a67b4ac28efef112bd75508a05 this.level.getProfiler().pop(); this.updateActivity(); diff --git a/src/main/java/net/minecraft/world/entity/monster/Zombie.java b/src/main/java/net/minecraft/world/entity/monster/Zombie.java -index 8da494792786fd80be50efc4cbb56caeae18d004..e752c877bdeef46753aab92f6484c45bc3e31ed4 100644 +index e72e9b748b3f3e34baddf01366c703efba50c67c..a110b65e0bf1f2e1b69343a6ac6bbfabeab22bb4 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java -@@ -107,11 +107,25 @@ public class Zombie extends Monster { +@@ -104,11 +104,25 @@ public class Zombie extends Monster { this(EntityType.ZOMBIE, world); } @@ -4241,10 +4230,10 @@ index 8da494792786fd80be50efc4cbb56caeae18d004..e752c877bdeef46753aab92f6484c45b } diff --git a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java -index 7a2e3d2ec86536c6caa5a0af0013474143566df8..d487b4cb2da18eac12ec3dc71997cdc1217a85f6 100644 +index 415c8a8142867974dfc4722bac933257a28efc1b..a069a923f071991f8215bb5cf0d1c2bb4de3f344 100644 --- a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java +++ b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java -@@ -74,6 +74,18 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { +@@ -75,6 +75,18 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { this.setVillagerData(this.getVillagerData().setProfession((VillagerProfession) Registry.VILLAGER_PROFESSION.getRandom(this.random))); } @@ -4264,10 +4253,10 @@ index 7a2e3d2ec86536c6caa5a0af0013474143566df8..d487b4cb2da18eac12ec3dc71997cdc1 protected void defineSynchedData() { super.defineSynchedData(); diff --git a/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java b/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java -index 6b508fb0850eb29e31ad960458ea2922c5bdd2bf..8e5fb46d3c56a71788d02eb1865b597553c7de8e 100644 +index c1e0cf7d86d7b45cc4ca342d80f0dc3fe43b0bfd..2dec8be9b199e9bcf0970774afbd19a4861d802f 100644 --- a/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java -@@ -58,6 +58,18 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { +@@ -59,6 +59,18 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { this.setPathfindingMalus(BlockPathTypes.LAVA, 8.0F); } @@ -4318,10 +4307,10 @@ index 212e2c5b4b917c0c327d4b0612fecaea81c0ad87..1412ab46fe66773ee8fbb717921e7193 this.level.getProfiler().pop(); HoglinAi.updateActivity(this); diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java -index 37712fe8585ede00569026bba5377ab61ad08ff5..225cb3b489c277448e891400aa9b1ffe821786ee 100644 +index 8a2c2b4bd603aae37055abd058feb7ee759078ce..0edd303a5425af88b34ad6dbee5c39a5f1b73022 100644 --- a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java -@@ -97,6 +97,18 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento +@@ -96,6 +96,18 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento this.xpReward = 5; } @@ -4340,12 +4329,12 @@ index 37712fe8585ede00569026bba5377ab61ad08ff5..225cb3b489c277448e891400aa9b1ffe @Override public void addAdditionalSaveData(CompoundTag nbt) { super.addAdditionalSaveData(nbt); -@@ -292,6 +304,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento +@@ -291,6 +303,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento @Override protected void customServerAiStep() { this.level.getProfiler().push("piglinBrain"); + if (getRider() == null) // Purpur - only use brain if no rider - this.getBrain().tick((ServerLevel) this.level, (Piglin) this); // CraftBukkit - decompile error + this.getBrain().tick((ServerLevel) this.level, this); this.level.getProfiler().pop(); PiglinAi.updateActivity(this); diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinBrute.java b/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinBrute.java @@ -4389,10 +4378,10 @@ index ea0040a3494709efb4819c7530dbcc37aa62e86a..5025d4571a34fe9e0e58ada6b81b0647 this.level.getProfiler().pop(); PiglinBruteAi.updateActivity(this); diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java -index b746453774054dd2db023b7eea265a395cfc7cc9..3773bf0d3acf5362c63b54a148f88908baee0068 100644 +index dbd17107f08c218d88ef075fc04823b83083648b..787d4def6227fa64a8938e5cc291d60eeef7a3bb 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -155,6 +155,23 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -151,6 +151,23 @@ public class Villager extends AbstractVillager implements ReputationEventHandler this.setVillagerData(this.getVillagerData().setType(type).setProfession(VillagerProfession.NONE)); } @@ -4416,7 +4405,7 @@ index b746453774054dd2db023b7eea265a395cfc7cc9..3773bf0d3acf5362c63b54a148f88908 @Override public Brain getBrain() { return (Brain) super.getBrain(); // CraftBukkit - decompile error -@@ -306,7 +323,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -302,7 +319,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler if (!itemstack.is(Items.VILLAGER_SPAWN_EGG) && this.isAlive() && !this.isTrading() && !this.isSleeping()) { if (this.isBaby()) { this.setUnhappy(); @@ -4425,7 +4414,7 @@ index b746453774054dd2db023b7eea265a395cfc7cc9..3773bf0d3acf5362c63b54a148f88908 } else { boolean flag = this.getOffers().isEmpty(); -@@ -319,8 +336,9 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -315,8 +332,9 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } if (flag) { @@ -4471,10 +4460,10 @@ index 642279bb7e15db9f662094ffd6ded2e3c7af3fd6..ab648e7dafd78f414646cef96b422e87 this.setTradingPlayer(player); this.openTradingScreen(player, this.getDisplayName(), 1); diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java -index 94e76e295dbd0f3bac4b30a3e7338cd56a971207..218ad12db29d2201667dc252b0ee55b6d94b89f7 100644 +index b6f8e94df86c174569ccbc69cfd031cc08271dd3..4b574df4bfe3e1f1bfa58439baa01a369365b05c 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -193,6 +193,19 @@ public abstract class Player extends LivingEntity { +@@ -191,6 +191,19 @@ public abstract class Player extends LivingEntity { } // CraftBukkit end @@ -4495,7 +4484,7 @@ index 94e76e295dbd0f3bac4b30a3e7338cd56a971207..218ad12db29d2201667dc252b0ee55b6 super(EntityType.PLAYER, world); this.lastItemInMainHand = ItemStack.EMPTY; diff --git a/src/main/java/net/minecraft/world/entity/projectile/LlamaSpit.java b/src/main/java/net/minecraft/world/entity/projectile/LlamaSpit.java -index 85a509e4fc0e4b9f182585e17b7deab2fea7e6c0..f1a12b147d55e34d4f8374593640a311598cf1a6 100644 +index 4132c1113f5437a776e5e3c1cb306904775aed88..1a945a32c3d3705a318ebca72a365931a8c001b7 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/LlamaSpit.java +++ b/src/main/java/net/minecraft/world/entity/projectile/LlamaSpit.java @@ -27,6 +27,12 @@ public class LlamaSpit extends Projectile { @@ -4512,7 +4501,7 @@ index 85a509e4fc0e4b9f182585e17b7deab2fea7e6c0..f1a12b147d55e34d4f8374593640a311 public void tick() { super.tick(); diff --git a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java -index 6339203bda5e569d5df241dd589eb36e7233704b..a5d31549375c0bf233d2f692679d3cb6a64c9c81 100644 +index 15744949537430d8d8ae71ea72481126c9aff7bd..36417466ae30e9f7f3e953fd4ff98ed3f3b71725 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java +++ b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java @@ -35,7 +35,7 @@ public abstract class Projectile extends Entity { @@ -5717,11 +5706,11 @@ index 0000000000000000000000000000000000000000..8eefb7b7eb33aecf48ac206d3f0139e0 + } +} diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -index 0bd800e1aeda87689a6c56ee6fadda381c74a4ff..ac89af911596955ac87882069b7010b66ed05adf 100644 +index ee50ea695585639d0ff184b675f3fb3b205b9f86..426b5b0dc16e86bcbc113bb3123fde9e841de5d8 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -@@ -1287,4 +1287,27 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { - return !entity.valid && entity.level.addEntity(entity, reason); +@@ -1277,4 +1277,27 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { + return set; } // Paper end +