diff --git a/purpur-server/minecraft-patches/unapplied-features/0001-Ridables.patch b/purpur-server/minecraft-patches/features/0001-Ridables.patch similarity index 85% rename from purpur-server/minecraft-patches/unapplied-features/0001-Ridables.patch rename to purpur-server/minecraft-patches/features/0001-Ridables.patch index 85bc51030..221978793 100644 --- a/purpur-server/minecraft-patches/unapplied-features/0001-Ridables.patch +++ b/purpur-server/minecraft-patches/features/0001-Ridables.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Ridables diff --git a/net/minecraft/gametest/framework/GameTestHelper.java b/net/minecraft/gametest/framework/GameTestHelper.java -index 33bc4b330abf8745a379eff0d79aabd2a1b7cd40..772136351beb00825388f79e66f3e0532794e939 100644 +index ec6dd9de7b82841b1403b1bb851392132be5275b..146c404ac0471ed7df6d3740859663aa962e7a60 100644 --- a/net/minecraft/gametest/framework/GameTestHelper.java +++ b/net/minecraft/gametest/framework/GameTestHelper.java -@@ -354,6 +354,8 @@ public class GameTestHelper { +@@ -363,6 +363,8 @@ public class GameTestHelper { public void setAfk(final boolean afk) {} // Purpur - AFK API @@ -18,22 +18,22 @@ index 33bc4b330abf8745a379eff0d79aabd2a1b7cd40..772136351beb00825388f79e66f3e053 public boolean isClientAuthoritative() { return false; diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index c26dd9cdd6fb0dcecc6a166dd71167c4a88a3d91..838898572cc30207a1b915dcea11f612254ac453 100644 +index b145362e0c12e77eb582f7339363971a904622e7..fcade65785db82fc64eeb9b337900a405f05d196 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java -@@ -1866,6 +1866,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0; // Paper - BlockPhysicsEvent level.hasEntityMoveEvent = io.papermc.paper.event.entity.EntityMoveEvent.getHandlerList().getRegisteredListeners().length > 0; // Paper - Add EntityMoveEvent + level.hasRidableMoveEvent = org.purpurmc.purpur.event.entity.RidableMoveEvent.getHandlerList().getRegisteredListeners().length > 0; // Purpur - Ridables level.updateLagCompensationTick(); // Paper - lag compensation - net.minecraft.world.level.block.entity.HopperBlockEntity.skipHopperEvents = level.paperConfig().hopper.disableMoveEvent || org.bukkit.event.inventory.InventoryMoveItemEvent.getHandlerList().getRegisteredListeners().length == 0; // Paper - Perf: Optimize Hoppers profiler.push(() -> level + " " + level.dimension().identifier()); + profiler.push("tick"); diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index 316fece122a3b71b5c809ed15c46c8cb37d1cdbf..ba1dba4903c8d3c023e9555af67e5d62ac3b3f55 100644 +index f220993206a4ea36d2fdf4f053af2b34ccc3beba..3d328c1871993b5e55eb2892364d66b79db22338 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java -@@ -236,6 +236,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ServerEntityGet +@@ -237,6 +237,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ServerEntityGet public boolean hasPhysicsEvent = true; // Paper - BlockPhysicsEvent public boolean hasEntityMoveEvent; // Paper - Add EntityMoveEvent private final alternate.current.wire.WireHandler wireHandler = new alternate.current.wire.WireHandler(this); // Paper - optimize redstone (Alternate Current) @@ -42,10 +42,10 @@ index 316fece122a3b71b5c809ed15c46c8cb37d1cdbf..ba1dba4903c8d3c023e9555af67e5d62 @Override public @Nullable LevelChunk getChunkIfLoaded(int x, int z) { diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java -index 3b655453f22be6eb65ea8b32f79e9d9b953120ee..228c81791dcc1ea0971e70bcb0cb289106466c67 100644 +index cd3221273750b8d824e49cd472e8f05dffc5f457..119530367e7bd7f99160d8a8b8b6c1f757c3bd01 100644 --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java -@@ -776,6 +776,15 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -749,6 +749,15 @@ public class ServerPlayer extends Player { this.trackEnteredOrExitedLavaOnVehicle(); this.updatePlayerAttributes(); this.advancements.flushDirty(this, true); @@ -62,23 +62,23 @@ index 3b655453f22be6eb65ea8b32f79e9d9b953120ee..228c81791dcc1ea0971e70bcb0cb2891 private void updatePlayerAttributes() { diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index cf05034e3f37508466c61a41533e3f6c3ef2e3a5..3671945aa5d94052629c97dfbf6de581c9b20d04 100644 +index e9364611059653bd4c37cb75571bb53225cf5d94..5a814aa9df95fbbbff5d3c3bda4b76d04440e624 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -3002,6 +3002,8 @@ public class ServerGamePacketListenerImpl +@@ -2940,6 +2940,8 @@ public class ServerGamePacketListenerImpl ServerGamePacketListenerImpl.this.cserver.getPluginManager().callEvent(event); final boolean resendData = event.isCancelled() || !ServerGamePacketListenerImpl.this.player.getItemInHand(hand).is(itemType); + player.processClick(hand); // Purpur - Ridables + // Entity in bucket - SPIGOT-4048 and SPIGOT-6859 - if (itemType == Items.WATER_BUCKET && target instanceof net.minecraft.world.entity.animal.Bucketable && target instanceof LivingEntity && resendData) { + if (itemType == Items.WATER_BUCKET && target instanceof net.minecraft.world.entity.Bucketable && target instanceof LivingEntity && resendData) { target.resendPossiblyDesyncedEntityData(ServerGamePacketListenerImpl.this.player); // Paper - The entire mob gets deleted, so resend it diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index a4a0683c0287da0543a5c869163c925f899b1550..241ff14c2c27204fc8615b19700f946afdcfa2d1 100644 +index 3b558c80ee8ebc03fb68d63c86f4371617057d7f..6b51feb4e41f10dae9e5fcd303d260d5f511ae91 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java -@@ -3400,6 +3400,13 @@ public abstract class Entity +@@ -3223,6 +3223,13 @@ public abstract class Entity this.passengers = ImmutableList.copyOf(newPassengers); } @@ -92,7 +92,7 @@ index a4a0683c0287da0543a5c869163c925f899b1550..241ff14c2c27204fc8615b19700f946a } // Paper start - Force entity dismount during teleportation -@@ -3440,6 +3447,14 @@ public abstract class Entity +@@ -3263,6 +3270,14 @@ public abstract class Entity return false; } // CraftBukkit end @@ -107,10 +107,10 @@ index a4a0683c0287da0543a5c869163c925f899b1550..241ff14c2c27204fc8615b19700f946a if (this.passengers.size() == 1 && this.passengers.get(0) == passenger) { this.passengers = ImmutableList.of(); } else { -@@ -5419,4 +5434,44 @@ public abstract class Entity +@@ -5227,4 +5242,44 @@ public abstract class Entity return ((ServerLevel) this.level()).isPositionEntityTicking(this.blockPosition()); } - // Paper end - Expose entity id counter + // Paper end + // Purpur start - Ridables + @Nullable + private Player rider = null; @@ -153,10 +153,10 @@ index a4a0683c0287da0543a5c869163c925f899b1550..241ff14c2c27204fc8615b19700f946a + // Purpur end - Ridables } diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java -index 93191aa5a24f9390d0d8c7c384c700dbe18d0212..2e620309bedbd08d8791b165c6a60080c55589d8 100644 +index 225cf2d48b15f4787e493d0c2f332cfdb313978f..2d856ba2ce8c6febdc1d5dd2df2718fbe4e1312d 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java -@@ -243,9 +243,9 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -258,9 +258,9 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin protected int noActionTime; public float lastHurt; public boolean jumping; @@ -169,7 +169,7 @@ index 93191aa5a24f9390d0d8c7c384c700dbe18d0212..2e620309bedbd08d8791b165c6a60080 protected final InterpolationHandler interpolation = new InterpolationHandler(this); protected double lerpYHeadRot; protected int lerpHeadSteps; -@@ -295,7 +295,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -309,7 +309,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin protected LivingEntity(final EntityType type, final Level level) { super(type, level); @@ -178,15 +178,15 @@ index 93191aa5a24f9390d0d8c7c384c700dbe18d0212..2e620309bedbd08d8791b165c6a60080 this.craftAttributes = new org.bukkit.craftbukkit.attribute.CraftAttributeMap(this.attributes); // CraftBukkit // CraftBukkit - this.setHealth(this.getMaxHealth()) inlined and simplified to skip the instanceof check for Player, as getBukkitEntity() is not initialized in constructor this.entityData.set(LivingEntity.DATA_HEALTH_ID, this.getMaxHealth()); -@@ -365,6 +365,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin - .add(Attributes.CAMERA_DISTANCE) - .add(Attributes.WAYPOINT_TRANSMIT_RANGE); +@@ -384,6 +384,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin + .add(Attributes.NAME_TAG_DISTANCE) + .add(Attributes.BELOW_NAME_DISTANCE); } + public boolean shouldSendAttribute(Attribute attribute) { return true; } // Purpur - Ridables @Override protected void checkFallDamage(final double ya, final boolean onGround, final BlockState onState, final BlockPos pos) { -@@ -3158,6 +3159,20 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -3202,6 +3203,20 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin this.move(MoverType.SELF, this.getDeltaMovement()); this.setDeltaMovement(this.getDeltaMovement().scale(0.5)); } else { @@ -207,7 +207,7 @@ index 93191aa5a24f9390d0d8c7c384c700dbe18d0212..2e620309bedbd08d8791b165c6a60080 this.moveRelative(airSpeed, input); this.move(MoverType.SELF, this.getDeltaMovement()); this.setDeltaMovement(this.getDeltaMovement().scale(0.91F)); -@@ -3862,8 +3877,10 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -3930,8 +3945,10 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin this.pushEntities(); profiler.pop(); // Paper start - Add EntityMoveEvent @@ -220,7 +220,7 @@ index 93191aa5a24f9390d0d8c7c384c700dbe18d0212..2e620309bedbd08d8791b165c6a60080 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()); -@@ -3873,6 +3890,21 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -3941,6 +3958,21 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin this.absSnapTo(event.getTo().getX(), event.getTo().getY(), event.getTo().getZ(), event.getTo().getYaw(), event.getTo().getPitch()); } } @@ -243,21 +243,21 @@ index 93191aa5a24f9390d0d8c7c384c700dbe18d0212..2e620309bedbd08d8791b165c6a60080 // Paper end - Add EntityMoveEvent if (this.level() instanceof ServerLevel serverLevel && this.isSensitiveToWater() && this.isInWaterOrRain()) { diff --git a/net/minecraft/world/entity/Mob.java b/net/minecraft/world/entity/Mob.java -index 8569908576be0cb8f47ec94d065736f5e0fc114e..31cb7f27dc114f347b1667a3ad7e99d4ccff8d34 100644 +index 85cb2e946f3f2e51b7697af78b9f9939bc5f99c8..c707a18175920b12b4d554d8041c7afe10a0efd1 100644 --- a/net/minecraft/world/entity/Mob.java +++ b/net/minecraft/world/entity/Mob.java -@@ -156,8 +156,8 @@ public abstract class Mob extends LivingEntity implements Targeting, EquipmentUs +@@ -161,8 +161,8 @@ public abstract class Mob extends LivingEntity implements Targeting, EquipmentUs super(type, level); this.goalSelector = new GoalSelector(); this.targetSelector = new GoalSelector(); - this.lookControl = new LookControl(this); -- this.moveControl = new MoveControl(this); +- this.moveControl = new MoveControl<>(this); + this.lookControl = new org.purpurmc.purpur.controller.LookControllerWASD(this); // Purpur - Ridables -+ this.moveControl = new org.purpurmc.purpur.controller.MoveControllerWASD(this); // Purpur - Ridables ++ this.moveControl = new org.purpurmc.purpur.controller.MoveControllerWASD<>(this); // Purpur - Ridables this.jumpControl = new JumpControl(this); this.bodyRotationControl = this.createBodyControl(); this.navigation = this.createNavigation(level); -@@ -609,6 +609,7 @@ public abstract class Mob extends LivingEntity implements Targeting, EquipmentUs +@@ -614,6 +614,7 @@ public abstract class Mob extends LivingEntity implements Targeting, EquipmentUs } } } else { @@ -265,7 +265,7 @@ index 8569908576be0cb8f47ec94d065736f5e0fc114e..31cb7f27dc114f347b1667a3ad7e99d4 this.igniteForSeconds(8.0F); } } -@@ -1368,7 +1369,7 @@ public abstract class Mob extends LivingEntity implements Targeting, EquipmentUs +@@ -1400,7 +1401,7 @@ public abstract class Mob extends LivingEntity implements Targeting, EquipmentUs } protected InteractionResult mobInteract(final Player player, final InteractionHand hand) { @@ -274,7 +274,7 @@ index 8569908576be0cb8f47ec94d065736f5e0fc114e..31cb7f27dc114f347b1667a3ad7e99d4 } protected void usePlayerItem(final Player player, final InteractionHand hand, final ItemStack itemStack) { -@@ -1711,4 +1712,58 @@ public abstract class Mob extends LivingEntity implements Targeting, EquipmentUs +@@ -1749,4 +1750,58 @@ public abstract class Mob extends LivingEntity implements Targeting, EquipmentUs public float chargeSpeedModifier() { return 1.0F; } @@ -371,23 +371,23 @@ index 68bad6752bd313ca3ebde7fd4e3b2c46c5dee3ef..fe5f4f79e5a1b091d15fa3bfd876b831 public @Nullable AttributeInstance getInstance(final Holder attribute) { diff --git a/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java b/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java -index 3b122f0bdfd8490297d173c05c1412c9fcfc886e..6b78ddb4ec40d45634288796a98e34714e0deb68 100644 +index 0dac24960ce1e04a1962def9dc49315998b79e25..b828332b3e5db2722ca2193721da996fb84ce55e 100644 --- a/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java +++ b/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java -@@ -142,7 +142,7 @@ public class DefaultAttributes { - .put(EntityType.PANDA, Panda.createAttributes().build()) - .put(EntityType.PARCHED, Parched.createAttributes().build()) - .put(EntityType.PARROT, Parrot.createAttributes().build()) -- .put(EntityType.PHANTOM, Monster.createMonsterAttributes().build()) -+ .put(EntityType.PHANTOM, net.minecraft.world.entity.monster.Phantom.createAttributes().build()) // Purpur - Ridables - .put(EntityType.PIG, Pig.createAttributes().build()) - .put(EntityType.PIGLIN, Piglin.createAttributes().build()) - .put(EntityType.PIGLIN_BRUTE, PiglinBrute.createAttributes().build()) +@@ -145,7 +145,7 @@ public class DefaultAttributes { + .put(EntityTypes.PANDA, Panda.createAttributes().build()) + .put(EntityTypes.PARCHED, Parched.createAttributes().build()) + .put(EntityTypes.PARROT, Parrot.createAttributes().build()) +- .put(EntityTypes.PHANTOM, Monster.createMonsterAttributes().build()) ++ .put(EntityTypes.PHANTOM, net.minecraft.world.entity.monster.Phantom.createAttributes().build()) // Purpur - Ridables + .put(EntityTypes.PIG, Pig.createAttributes().build()) + .put(EntityTypes.PIGLIN, Piglin.createAttributes().build()) + .put(EntityTypes.PIGLIN_BRUTE, PiglinBrute.createAttributes().build()) diff --git a/net/minecraft/world/entity/ai/control/MoveControl.java b/net/minecraft/world/entity/ai/control/MoveControl.java -index 21b524a24257526f40bd6864a2ac6f5e8fd29d96..a6f3c9ca1235b77bff243120bedeea9cc1293328 100644 +index ca8932589bb59d8d12cc7838a026255fc2914715..f179455b90140a4663c46f19dcb39abfaf3bf4f4 100644 --- a/net/minecraft/world/entity/ai/control/MoveControl.java +++ b/net/minecraft/world/entity/ai/control/MoveControl.java -@@ -29,6 +29,20 @@ public class MoveControl implements Control { +@@ -29,6 +29,20 @@ public class MoveControl implements Control { this.mob = mob; } @@ -517,10 +517,10 @@ index 5dd0c83e44eb68d90cda5743bc24d97044a02f6e..9861837c1d10e5ffe5dada9f4a75fb9a BlockPos pos = this.blockPosition(); BlockPos above = pos.above(); diff --git a/net/minecraft/world/entity/animal/allay/Allay.java b/net/minecraft/world/entity/animal/allay/Allay.java -index 69638b9f5c4631ec056ec8066d091e553d814252..931726ddada92a4b1063dd9dbdc89723f6a283cc 100644 +index 242628d88736ac1401e76ecf94fb3f97837fa67c..ca1f1d18b765db8d197f70977e0e175744b07ee4 100644 --- a/net/minecraft/world/entity/animal/allay/Allay.java +++ b/net/minecraft/world/entity/animal/allay/Allay.java -@@ -100,10 +100,23 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS +@@ -101,10 +101,23 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS private float spinningAnimationTicks; private float spinningAnimationTicks0; public boolean forceDancing = false; // CraftBukkit @@ -528,10 +528,10 @@ index 69638b9f5c4631ec056ec8066d091e553d814252..931726ddada92a4b1063dd9dbdc89723 public Allay(final EntityType type, final Level level) { super(type, level); -- this.moveControl = new FlyingMoveControl(this, 20, true); +- this.moveControl = new FlyingMoveControl<>(this, 20, true); + // Purpur start - Ridables -+ this.purpurController = new org.purpurmc.purpur.controller.FlyingMoveControllerWASD(this, 0.1F, 0.5F); -+ this.moveControl = new FlyingMoveControl(this, 20, true) { ++ this.purpurController = new org.purpurmc.purpur.controller.FlyingMoveControllerWASD<>(this, 0.1F, 0.5F); ++ this.moveControl = new FlyingMoveControl<>(this, 20, true) { + @Override + public void tick() { + if (mob.getRider() != null && mob.isControllable()) { @@ -545,7 +545,7 @@ index 69638b9f5c4631ec056ec8066d091e553d814252..931726ddada92a4b1063dd9dbdc89723 this.setCanPickUpLoot(this.canPickUpLoot()); this.vibrationUser = new Allay.VibrationUser(); this.vibrationData = new VibrationSystem.Data(); -@@ -119,6 +132,28 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS +@@ -120,6 +133,28 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS } // CraftBukkit end @@ -574,7 +574,7 @@ index 69638b9f5c4631ec056ec8066d091e553d814252..931726ddada92a4b1063dd9dbdc89723 @Override protected Brain makeBrain(final Brain.Packed packedBrain) { return BRAIN_PROVIDER.makeBrain(this, packedBrain); -@@ -209,6 +244,7 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS +@@ -210,6 +245,7 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS protected void customServerAiStep(final ServerLevel level) { ProfilerFiller profiler = Profiler.get(); profiler.push("allayBrain"); @@ -583,10 +583,10 @@ index 69638b9f5c4631ec056ec8066d091e553d814252..931726ddada92a4b1063dd9dbdc89723 profiler.pop(); profiler.push("allayActivityUpdate"); diff --git a/net/minecraft/world/entity/animal/armadillo/Armadillo.java b/net/minecraft/world/entity/animal/armadillo/Armadillo.java -index 14491f7136266a738bbc463731d0785bcce2b4cd..d8dcb325325ba2fc6b78ff62c95cb818c5fcf3fc 100644 +index fbf3feec55deeeafa29c296722cf085ead1617db..e417fa354f22e3532d3bfda9c9ebfccfd4906bc6 100644 --- a/net/minecraft/world/entity/animal/armadillo/Armadillo.java +++ b/net/minecraft/world/entity/animal/armadillo/Armadillo.java -@@ -89,6 +89,23 @@ public class Armadillo extends Animal { +@@ -93,6 +93,23 @@ public class Armadillo extends Animal { return Animal.createAnimalAttributes().add(Attributes.MAX_HEALTH, 12.0).add(Attributes.MOVEMENT_SPEED, 0.14); } @@ -611,10 +611,10 @@ index 14491f7136266a738bbc463731d0785bcce2b4cd..d8dcb325325ba2fc6b78ff62c95cb818 protected void defineSynchedData(final SynchedEntityData.Builder entityData) { super.defineSynchedData(entityData); diff --git a/net/minecraft/world/entity/animal/axolotl/Axolotl.java b/net/minecraft/world/entity/animal/axolotl/Axolotl.java -index 317e16e3a78a7d7af71b83cc25f5a00b474bc12a..993f8195bf67d675eccef47314de0ba0f257b855 100644 +index fa774ac8f3eea281c9b684c76dd12d4e66d3ee24..ed0d11c8048c3c6b25a003633684b89376b76be9 100644 --- a/net/minecraft/world/entity/animal/axolotl/Axolotl.java +++ b/net/minecraft/world/entity/animal/axolotl/Axolotl.java -@@ -117,6 +117,23 @@ public class Axolotl extends Animal implements Bucketable { +@@ -122,6 +122,23 @@ public class Axolotl extends Animal implements Bucketable { this.lookControl = new Axolotl.AxolotlLookControl(this, 20); } @@ -638,7 +638,7 @@ index 317e16e3a78a7d7af71b83cc25f5a00b474bc12a..993f8195bf67d675eccef47314de0ba0 @Override public float getWalkTargetValue(final BlockPos pos, final LevelReader level) { return 0.0F; -@@ -365,6 +382,7 @@ public class Axolotl extends Animal implements Bucketable { +@@ -370,6 +387,7 @@ public class Axolotl extends Animal implements Bucketable { protected void customServerAiStep(final ServerLevel level) { ProfilerFiller profiler = Profiler.get(); profiler.push("axolotlBrain"); @@ -646,7 +646,7 @@ index 317e16e3a78a7d7af71b83cc25f5a00b474bc12a..993f8195bf67d675eccef47314de0ba0 this.getBrain().tick(level, this); profiler.pop(); profiler.push("axolotlActivityUpdate"); -@@ -603,23 +621,31 @@ public class Axolotl extends Animal implements Bucketable { +@@ -608,20 +626,28 @@ public class Axolotl extends Animal implements Bucketable { } @Override @@ -659,40 +659,37 @@ index 317e16e3a78a7d7af71b83cc25f5a00b474bc12a..993f8195bf67d675eccef47314de0ba0 } } - private static class AxolotlMoveControl extends SmoothSwimmingMoveControl { - private final Axolotl axolotl; -+ private final org.purpurmc.purpur.controller.WaterMoveControllerWASD waterController; // Purpur - Ridables - - public AxolotlMoveControl(final Axolotl axolotl) { + private static class AxolotlMoveControl extends SmoothSwimmingMoveControl { ++ private final org.purpurmc.purpur.controller.WaterMoveControllerWASD waterController; // Purpur - Ridables + public AxolotlMoveControl(final T axolotl) { super(axolotl, 85, 10, 0.1F, 0.5F, false); - this.axolotl = axolotl; -+ waterController = new org.purpurmc.purpur.controller.WaterMoveControllerWASD(axolotl, 0.5D); // Purpur - Ridables ++ this.waterController = new org.purpurmc.purpur.controller.WaterMoveControllerWASD<>(axolotl, 0.5D); // Purpur - Ridables } @Override public void tick() { + // Purpur start - Ridables -+ if (axolotl.getRider() != null && axolotl.isControllable()) { -+ waterController.purpurTick(axolotl.getRider()); ++ if (this.mob.getRider() != null && this.mob.isControllable()) { ++ this.waterController.purpurTick(this.mob.getRider()); + return; + } + // Purpur end - Ridables - if (!this.axolotl.isPlayingDead()) { + if (!this.mob.isPlayingDead()) { super.tick(); } diff --git a/net/minecraft/world/entity/animal/bee/Bee.java b/net/minecraft/world/entity/animal/bee/Bee.java -index 28cf7f1b7b947639a686b83a5a7d617af9b83e15..67971c3054fd17ee75c69c6168bd74f11dca4c86 100644 +index cadd762e86868adcaafe1ad138b221495c906389..ec110b0dcef5ae0923cdda8aa43720f10b9f826e 100644 --- a/net/minecraft/world/entity/animal/bee/Bee.java +++ b/net/minecraft/world/entity/animal/bee/Bee.java -@@ -153,6 +153,7 @@ public class Bee extends Animal implements FlyingAnimal, NeutralMob { +@@ -151,6 +151,7 @@ public class Bee extends Animal implements NeutralMob { public Bee(final EntityType type, final Level level) { super(type, level); + final org.purpurmc.purpur.controller.FlyingMoveControllerWASD flyingController = new org.purpurmc.purpur.controller.FlyingMoveControllerWASD(this, 0.25F, 1.0F, false); // Purpur - Ridables // Paper start - Fix MC-167279 - class BeeFlyingMoveControl extends FlyingMoveControl { + class BeeFlyingMoveControl extends FlyingMoveControl { public BeeFlyingMoveControl(final Mob mob, final int maxTurn, final boolean hoversInPlace) { -@@ -161,11 +162,24 @@ public class Bee extends Animal implements FlyingAnimal, NeutralMob { +@@ -159,11 +160,24 @@ public class Bee extends Animal implements NeutralMob { @Override public void tick() { @@ -717,7 +714,7 @@ index 28cf7f1b7b947639a686b83a5a7d617af9b83e15..67971c3054fd17ee75c69c6168bd74f1 } this.moveControl = new BeeFlyingMoveControl(this, 20, true); // Paper end - Fix MC-167279 -@@ -177,6 +191,40 @@ public class Bee extends Animal implements FlyingAnimal, NeutralMob { +@@ -175,6 +189,40 @@ public class Bee extends Animal implements NeutralMob { this.setPathfindingMalus(PathType.FENCE, -1.0F); } @@ -758,7 +755,7 @@ index 28cf7f1b7b947639a686b83a5a7d617af9b83e15..67971c3054fd17ee75c69c6168bd74f1 @Override protected void defineSynchedData(final SynchedEntityData.Builder entityData) { super.defineSynchedData(entityData); -@@ -191,6 +239,7 @@ public class Bee extends Animal implements FlyingAnimal, NeutralMob { +@@ -189,6 +237,7 @@ public class Bee extends Animal implements NeutralMob { @Override protected void registerGoals() { @@ -766,7 +763,7 @@ index 28cf7f1b7b947639a686b83a5a7d617af9b83e15..67971c3054fd17ee75c69c6168bd74f1 this.goalSelector.addGoal(0, new Bee.BeeAttackGoal(this, 1.4F, true)); this.goalSelector.addGoal(1, new Bee.BeeEnterHiveGoal()); this.goalSelector.addGoal(2, new BreedGoal(this, 1.0)); -@@ -208,6 +257,7 @@ public class Bee extends Animal implements FlyingAnimal, NeutralMob { +@@ -206,6 +255,7 @@ public class Bee extends Animal implements NeutralMob { this.goalSelector.addGoal(7, new Bee.BeeGrowCropGoal()); this.goalSelector.addGoal(8, new Bee.BeeWanderGoal()); this.goalSelector.addGoal(9, new FloatGoal(this)); @@ -774,13 +771,13 @@ index 28cf7f1b7b947639a686b83a5a7d617af9b83e15..67971c3054fd17ee75c69c6168bd74f1 this.targetSelector.addGoal(1, new Bee.BeeHurtByOtherGoal(this).setAlertOthers()); this.targetSelector.addGoal(2, new Bee.BeeBecomeAngryTargetGoal(this)); this.targetSelector.addGoal(3, new ResetUniversalAngerTargetGoal<>(this, true)); -@@ -1087,15 +1137,15 @@ public class Bee extends Animal implements FlyingAnimal, NeutralMob { +@@ -1083,15 +1133,15 @@ public class Bee extends Animal implements NeutralMob { } } - private class BeeLookControl extends LookControl { + private class BeeLookControl extends org.purpurmc.purpur.controller.LookControllerWASD { // Purpur - Ridables - BeeLookControl(final Mob mob) { + public BeeLookControl(final Mob mob) { super(mob); } @@ -794,10 +791,10 @@ index 28cf7f1b7b947639a686b83a5a7d617af9b83e15..67971c3054fd17ee75c69c6168bd74f1 } diff --git a/net/minecraft/world/entity/animal/camel/Camel.java b/net/minecraft/world/entity/animal/camel/Camel.java -index 7b30263e2064d5d30a68a055bde2ad28582f4620..fcbb743a07b691f11f14febe5a05959326999293 100644 +index 57127335a3c68fbf9ac3d64a8504c6e271a5d532..8296a5a5935a77b01f4d11b102f3159d97fc8a30 100644 --- a/net/minecraft/world/entity/animal/camel/Camel.java +++ b/net/minecraft/world/entity/animal/camel/Camel.java -@@ -95,6 +95,13 @@ public class Camel extends AbstractHorse { +@@ -100,6 +100,13 @@ public class Camel extends AbstractHorse { navigation.setCanWalkOverFences(true); } @@ -812,10 +809,10 @@ index 7b30263e2064d5d30a68a055bde2ad28582f4620..fcbb743a07b691f11f14febe5a059593 protected void addAdditionalSaveData(final ValueOutput output) { super.addAdditionalSaveData(output); diff --git a/net/minecraft/world/entity/animal/chicken/Chicken.java b/net/minecraft/world/entity/animal/chicken/Chicken.java -index 1012283390664fb31bc318864501e14dca5b4208..b0b7398e36a30e5a932ce4a9d531d0c258e64604 100644 +index 36a34232cd48fa8f382d8f9b99308d2661d754b5..4a3d3ab6c9f52fd06107131f2564b196e7b42957 100644 --- a/net/minecraft/world/entity/animal/chicken/Chicken.java +++ b/net/minecraft/world/entity/animal/chicken/Chicken.java -@@ -76,9 +76,27 @@ public class Chicken extends Animal { +@@ -81,9 +81,27 @@ public class Chicken extends Animal { this.setPathfindingMalus(PathType.WATER, 0.0F); } @@ -844,10 +841,10 @@ index 1012283390664fb31bc318864501e14dca5b4208..b0b7398e36a30e5a932ce4a9d531d0c2 this.goalSelector.addGoal(2, new BreedGoal(this, 1.0)); this.goalSelector.addGoal(3, new TemptGoal(this, 1.0, i -> i.is(ItemTags.CHICKEN_FOOD), false)); diff --git a/net/minecraft/world/entity/animal/cow/AbstractCow.java b/net/minecraft/world/entity/animal/cow/AbstractCow.java -index 51e3873470372cbe7ce8b1d484d9235bba1c76a0..d398abfcb198b18fd4e41e3f3ecddb40d069bfb0 100644 +index ff0ddd53fc7ebd870c0522a3c9e967c6be619aea..5325932b1e60dd40014d9043328404266c02e3bf 100644 --- a/net/minecraft/world/entity/animal/cow/AbstractCow.java +++ b/net/minecraft/world/entity/animal/cow/AbstractCow.java -@@ -38,6 +38,7 @@ public abstract class AbstractCow extends Animal { +@@ -39,6 +39,7 @@ public abstract class AbstractCow extends Animal { @Override protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); @@ -855,7 +852,7 @@ index 51e3873470372cbe7ce8b1d484d9235bba1c76a0..d398abfcb198b18fd4e41e3f3ecddb40 this.goalSelector.addGoal(1, new PanicGoal(this, 2.0)); this.goalSelector.addGoal(2, new BreedGoal(this, 1.0)); this.goalSelector.addGoal(3, new TemptGoal(this, 1.25, i -> level().purpurConfig.cowFeedMushrooms > 0 && (i.is(net.minecraft.world.level.block.Blocks.RED_MUSHROOM.asItem()) || i.is(net.minecraft.world.level.block.Blocks.BROWN_MUSHROOM.asItem())) || i.is(ItemTags.COW_FOOD), false)); // Purpur - Cows eat mushrooms -@@ -87,13 +88,14 @@ public abstract class AbstractCow extends Animal { +@@ -88,13 +89,14 @@ public abstract class AbstractCow extends Animal { @Override public InteractionResult mobInteract(final Player player, final InteractionHand hand) { @@ -872,10 +869,10 @@ index 51e3873470372cbe7ce8b1d484d9235bba1c76a0..d398abfcb198b18fd4e41e3f3ecddb40 // CraftBukkit end player.playSound(SoundEvents.COW_MILK, 1.0F, 1.0F); diff --git a/net/minecraft/world/entity/animal/cow/Cow.java b/net/minecraft/world/entity/animal/cow/Cow.java -index 340f3b24842a064044f6bf338f3888af90068eac..e200b9a459c3f410d2e9affbad8ba8e37e1a1ca5 100644 +index f6d3a006218fee82134a40b7a41953b5738a382e..4d408217239cf11ff7c8925ca48c278fc8cfdfce 100644 --- a/net/minecraft/world/entity/animal/cow/Cow.java +++ b/net/minecraft/world/entity/animal/cow/Cow.java -@@ -34,6 +34,23 @@ public class Cow extends AbstractCow { +@@ -42,6 +42,23 @@ public class Cow extends AbstractCow { super(type, level); } @@ -900,10 +897,10 @@ index 340f3b24842a064044f6bf338f3888af90068eac..e200b9a459c3f410d2e9affbad8ba8e3 protected void defineSynchedData(final SynchedEntityData.Builder entityData) { super.defineSynchedData(entityData); diff --git a/net/minecraft/world/entity/animal/cow/MushroomCow.java b/net/minecraft/world/entity/animal/cow/MushroomCow.java -index c299da2b15d270445fab7a84a1d8542dd9b3fee6..7411d6aafa9ec3b5d6305bb8c1b8d03444cf6aa2 100644 +index e5dbbd6ae9de60a8759c791edf60ca5e12b384f4..1e4747e800e1b987862fcb1b7c9dfff9fec0f9a2 100644 --- a/net/minecraft/world/entity/animal/cow/MushroomCow.java +++ b/net/minecraft/world/entity/animal/cow/MushroomCow.java -@@ -61,6 +61,23 @@ public class MushroomCow extends AbstractCow implements Shearable { +@@ -69,6 +69,23 @@ public class MushroomCow extends AbstractCow implements Shearable { super(type, level); } @@ -927,20 +924,20 @@ index c299da2b15d270445fab7a84a1d8542dd9b3fee6..7411d6aafa9ec3b5d6305bb8c1b8d034 @Override public float getWalkTargetValue(final BlockPos pos, final LevelReader level) { return level.getBlockState(pos.below()).is(Blocks.MYCELIUM) ? 10.0F : level.getPathfindingCostFromLightLevels(pos); -@@ -121,7 +138,7 @@ public class MushroomCow extends AbstractCow implements Shearable { +@@ -127,7 +144,7 @@ public class MushroomCow extends AbstractCow implements Shearable { + // Paper start - call PlayerShearEntityEvent java.util.List drops = this.generateDefaultDrops(level, itemStack); org.bukkit.event.player.PlayerShearEntityEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.handlePlayerShearEntityEvent(player, this, itemStack, hand, drops); - if (event != null) { -- if (event.isCancelled()) return InteractionResult.PASS; -+ if (event.isCancelled()) return tryRide(player, hand); // Purpur - Ridables - drops = org.bukkit.craftbukkit.inventory.CraftItemStack.asNMSCopy(event.getDrops()); - // Paper end - custom shear drops - } +- if (event.isCancelled()) return InteractionResult.PASS; ++ if (event.isCancelled()) return tryRide(player, hand); // Purpur - Ridables + drops = org.bukkit.craftbukkit.inventory.CraftItemStack.asNMSCopy(event.getDrops()); + this.shear(level, SoundSource.PLAYERS, itemStack, drops); + // Paper end - call PlayerShearEntityEvent diff --git a/net/minecraft/world/entity/animal/dolphin/Dolphin.java b/net/minecraft/world/entity/animal/dolphin/Dolphin.java -index 7c52d11673b6cd6c4ad6db598da1e03a68fa5a16..82a56ecf76f53e72d1af67228ce7f9c74678b59f 100644 +index f66c8eb6412bc32f7d035f5575135263c2ae8b24..00ec3c3764ec9a16fe67a584fcbf2d80fc59f3e1 100644 --- a/net/minecraft/world/entity/animal/dolphin/Dolphin.java +++ b/net/minecraft/world/entity/animal/dolphin/Dolphin.java -@@ -78,14 +78,82 @@ public class Dolphin extends AgeableWaterCreature { +@@ -87,14 +87,80 @@ public class Dolphin extends AgeableWaterCreature { private static final boolean DEFAULT_GOT_FISH = false; public @Nullable BlockPos treasurePos; private boolean isNaturallyAggressiveToPlayers; // Purpur - Dolphins naturally aggressive to players chance @@ -948,38 +945,36 @@ index 7c52d11673b6cd6c4ad6db598da1e03a68fa5a16..82a56ecf76f53e72d1af67228ce7f9c7 public Dolphin(final EntityType type, final Level level) { super(type, level); -- this.moveControl = new SmoothSwimmingMoveControl(this, 85, 10, 0.02F, 0.1F, true); +- this.moveControl = new SmoothSwimmingMoveControl<>(this, 85, 10, 0.02F, 0.1F, true); + // Purpur start - Ridables -+ class DolphinMoveControl extends SmoothSwimmingMoveControl { -+ private final org.purpurmc.purpur.controller.WaterMoveControllerWASD waterMoveControllerWASD; -+ private final Dolphin dolphin; ++ class DolphinMoveControl extends SmoothSwimmingMoveControl { ++ private final org.purpurmc.purpur.controller.WaterMoveControllerWASD waterMoveControllerWASD; + -+ public DolphinMoveControl(Dolphin dolphin, int pitchChange, int yawChange, float speedInWater, float speedInAir, boolean buoyant) { ++ public DolphinMoveControl(T dolphin, int pitchChange, int yawChange, float speedInWater, float speedInAir, boolean buoyant) { + super(dolphin, pitchChange, yawChange, speedInWater, speedInAir, buoyant); -+ this.dolphin = dolphin; -+ this.waterMoveControllerWASD = new org.purpurmc.purpur.controller.WaterMoveControllerWASD(dolphin); ++ this.waterMoveControllerWASD = new org.purpurmc.purpur.controller.WaterMoveControllerWASD<>(dolphin); + } + + @Override + public void tick() { -+ if (dolphin.getRider() != null && dolphin.isControllable()) { -+ purpurTick(dolphin.getRider()); ++ if (this.mob.getRider() != null && this.mob.isControllable()) { ++ purpurTick(this.mob.getRider()); + } else { + super.tick(); + } + } + + public void purpurTick(Player rider) { -+ if (dolphin.getAirSupply() < 150) { ++ if (this.mob.getAirSupply() < 150) { + // if drowning override player WASD controls to find air + super.tick(); + } else { + waterMoveControllerWASD.purpurTick(rider); -+ dolphin.setDeltaMovement(dolphin.getDeltaMovement().add(0.0D, 0.005D, 0.0D)); ++ this.mob.setDeltaMovement(this.mob.getDeltaMovement().add(0.0D, 0.005D, 0.0D)); + } + } + }; -+ this.moveControl = new DolphinMoveControl(this, 85, 10, 0.02F, 0.1F, true); ++ this.moveControl = new DolphinMoveControl<>(this, 85, 10, 0.02F, 0.1F, true); + // Purpur end - Ridables this.lookControl = new SmoothSwimmingLookControl(this, 10); this.setCanPickUpLoot(true); @@ -1024,7 +1019,7 @@ index 7c52d11673b6cd6c4ad6db598da1e03a68fa5a16..82a56ecf76f53e72d1af67228ce7f9c7 @Override public @Nullable SpawnGroupData finalizeSpawn( final ServerLevelAccessor level, final DifficultyInstance difficulty, final EntitySpawnReason spawnReason, final @Nullable SpawnGroupData groupData -@@ -160,6 +228,7 @@ public class Dolphin extends AgeableWaterCreature { +@@ -169,6 +235,7 @@ public class Dolphin extends AgeableWaterCreature { this.goalSelector.addGoal(0, new BreathAirGoal(this)); this.goalSelector.addGoal(0, new TryFindWaterGoal(this)); this.goalSelector.addGoal(1, new MeleeAttackGoal(this, 1.2000000476837158D, true)); // Purpur - Dolphins naturally aggressive to players chance @@ -1032,7 +1027,7 @@ index 7c52d11673b6cd6c4ad6db598da1e03a68fa5a16..82a56ecf76f53e72d1af67228ce7f9c7 this.goalSelector.addGoal(1, new Dolphin.DolphinSwimToTreasureGoal(this)); this.goalSelector.addGoal(2, new Dolphin.DolphinSwimWithPlayerGoal(this, 4.0)); this.goalSelector.addGoal(4, new RandomSwimmingGoal(this, 1.0, 10)); -@@ -171,6 +240,7 @@ public class Dolphin extends AgeableWaterCreature { +@@ -180,6 +247,7 @@ public class Dolphin extends AgeableWaterCreature { this.goalSelector.addGoal(8, new FollowPlayerRiddenEntityGoal(this, AbstractBoat.class)); this.goalSelector.addGoal(8, new FollowPlayerRiddenEntityGoal(this, AbstractNautilus.class)); this.goalSelector.addGoal(9, new AvoidEntityGoal<>(this, Guardian.class, 8.0F, 1.0, 1.0)); @@ -1040,16 +1035,7 @@ index 7c52d11673b6cd6c4ad6db598da1e03a68fa5a16..82a56ecf76f53e72d1af67228ce7f9c7 this.targetSelector.addGoal(1, new HurtByTargetGoal(this, Guardian.class).setAlertOthers()); this.targetSelector.addGoal(2, new net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, (ignored, ignored2) -> isNaturallyAggressiveToPlayers)); // Purpur - Dolphins naturally aggressive to players chance } -@@ -216,7 +286,7 @@ public class Dolphin extends AgeableWaterCreature { - - @Override - protected boolean canRide(final Entity vehicle) { -- return true; -+ return boardingCooldown <= 0; // Purpur - make dolphin honor ride cooldown like all other non-boss mobs; - } - - @Override -@@ -245,6 +315,11 @@ public class Dolphin extends AgeableWaterCreature { +@@ -249,6 +317,11 @@ public class Dolphin extends AgeableWaterCreature { @Override public void tick() { super.tick(); @@ -1062,7 +1048,7 @@ index 7c52d11673b6cd6c4ad6db598da1e03a68fa5a16..82a56ecf76f53e72d1af67228ce7f9c7 this.setAirSupply(this.getMaxAirSupply()); } else { diff --git a/net/minecraft/world/entity/animal/equine/AbstractHorse.java b/net/minecraft/world/entity/animal/equine/AbstractHorse.java -index 52fc3d9600a7bd256647fbbfc1e460ca2b10a424..59bf0106908fba34500d1e44d6a02bb27b71ffe5 100644 +index 847fcecc4046d9fe880aaa7eb2a3c55c5bc61faf..3e3786a2803eacd3cdbcdc0039a7957256bf5fe9 100644 --- a/net/minecraft/world/entity/animal/equine/AbstractHorse.java +++ b/net/minecraft/world/entity/animal/equine/AbstractHorse.java @@ -128,11 +128,21 @@ public abstract class AbstractHorse extends Animal implements PlayerRideableJump @@ -1096,10 +1082,10 @@ index 52fc3d9600a7bd256647fbbfc1e460ca2b10a424..59bf0106908fba34500d1e44d6a02bb2 this.addBehaviourGoals(); } diff --git a/net/minecraft/world/entity/animal/equine/Donkey.java b/net/minecraft/world/entity/animal/equine/Donkey.java -index 1c171229997aa5c8e586918d9ed003b7f3c6e5f3..980160d37a51b862df3bda18a1bdb92e83badf3c 100644 +index 1403a4f893d32a51c9c8421e869214a9813d1e79..31cd10ab4c499c6b5ccb4be67782340c44b9758c 100644 --- a/net/minecraft/world/entity/animal/equine/Donkey.java +++ b/net/minecraft/world/entity/animal/equine/Donkey.java -@@ -16,6 +16,13 @@ public class Donkey extends AbstractChestedHorse { +@@ -17,6 +17,13 @@ public class Donkey extends AbstractChestedHorse { super(type, level); } @@ -1114,10 +1100,10 @@ index 1c171229997aa5c8e586918d9ed003b7f3c6e5f3..980160d37a51b862df3bda18a1bdb92e public SoundEvent getAmbientSound() { return SoundEvents.DONKEY_AMBIENT; diff --git a/net/minecraft/world/entity/animal/equine/Horse.java b/net/minecraft/world/entity/animal/equine/Horse.java -index 87e34dd94340be58ade945992e26dd81ee19b0a4..d2dc51d7a8d97db64bf87f8337b10442acc5bc47 100644 +index 013ca7a41ac31005f3b60af4ab89efae37144573..663c6aea26a6a619f1d7af7af022abae20c930f9 100644 --- a/net/minecraft/world/entity/animal/equine/Horse.java +++ b/net/minecraft/world/entity/animal/equine/Horse.java -@@ -48,6 +48,13 @@ public class Horse extends AbstractHorse { +@@ -49,6 +49,13 @@ public class Horse extends AbstractHorse { super(type, level); } @@ -1132,10 +1118,10 @@ index 87e34dd94340be58ade945992e26dd81ee19b0a4..d2dc51d7a8d97db64bf87f8337b10442 protected void randomizeAttributes(final RandomSource random) { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(generateMaxHealth(random::nextInt)); diff --git a/net/minecraft/world/entity/animal/equine/Llama.java b/net/minecraft/world/entity/animal/equine/Llama.java -index 22fc7041bd98b54d094ee66cdb62cf983ffa5588..90928f2a840493b16b34bf870fc511e74d1150ea 100644 +index 26143c77ca33da032de237817d8953647e3bdff4..ccb2486027263bb45f250c19a4b870c3494af1b9 100644 --- a/net/minecraft/world/entity/animal/equine/Llama.java +++ b/net/minecraft/world/entity/animal/equine/Llama.java -@@ -81,7 +81,58 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob { +@@ -82,7 +82,58 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob { super(type, level); this.getNavigation().setRequiredPathLength(40.0F); this.maxDomestication = 30; // Paper - Missing entity API; configure max temper instead of a hardcoded value @@ -1194,7 +1180,7 @@ index 22fc7041bd98b54d094ee66cdb62cf983ffa5588..90928f2a840493b16b34bf870fc511e7 public boolean isTraderLlama() { return false; -@@ -119,6 +170,7 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob { +@@ -120,6 +171,7 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob { @Override protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); @@ -1202,7 +1188,7 @@ index 22fc7041bd98b54d094ee66cdb62cf983ffa5588..90928f2a840493b16b34bf870fc511e7 this.goalSelector.addGoal(1, new RunAroundLikeCrazyGoal(this, 1.2)); this.goalSelector.addGoal(2, new LlamaFollowCaravanGoal(this, 2.1F)); this.goalSelector.addGoal(3, new RangedAttackGoal(this, 1.25, 40, 20.0F)); -@@ -129,6 +181,7 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob { +@@ -130,6 +182,7 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob { this.goalSelector.addGoal(7, new WaterAvoidingRandomStrollGoal(this, 0.7)); this.goalSelector.addGoal(8, new LookAtPlayerGoal(this, Player.class, 6.0F)); this.goalSelector.addGoal(9, new RandomLookAroundGoal(this)); @@ -1211,10 +1197,10 @@ index 22fc7041bd98b54d094ee66cdb62cf983ffa5588..90928f2a840493b16b34bf870fc511e7 this.targetSelector.addGoal(2, new Llama.LlamaAttackWolfGoal(this)); } diff --git a/net/minecraft/world/entity/animal/equine/Mule.java b/net/minecraft/world/entity/animal/equine/Mule.java -index 1ebf80bac3e4cc17bbee795b9cb15c656b168396..ce4c2424cd6922c03cf44cc731526775eba25220 100644 +index b565ca64bfe28a8d636dc3829fed44516a6e1af7..4a82af3b1f5d22fc5d4060f56cdab0ec51ef83e3 100644 --- a/net/minecraft/world/entity/animal/equine/Mule.java +++ b/net/minecraft/world/entity/animal/equine/Mule.java -@@ -15,6 +15,13 @@ public class Mule extends AbstractChestedHorse { +@@ -16,6 +16,13 @@ public class Mule extends AbstractChestedHorse { super(type, level); } @@ -1229,10 +1215,10 @@ index 1ebf80bac3e4cc17bbee795b9cb15c656b168396..ce4c2424cd6922c03cf44cc731526775 public SoundEvent getAmbientSound() { return SoundEvents.MULE_AMBIENT; diff --git a/net/minecraft/world/entity/animal/equine/SkeletonHorse.java b/net/minecraft/world/entity/animal/equine/SkeletonHorse.java -index 03d0e52213707fb052d5298000e5cd14c2e25636..8a9f46e45ce077230ec918d46f599092fbe3e851 100644 +index 71da9124581c7f5a7a9cdd35f9629397fba75668..53ddd31255fab4f5f8472dd48407012ea7363264 100644 --- a/net/minecraft/world/entity/animal/equine/SkeletonHorse.java +++ b/net/minecraft/world/entity/animal/equine/SkeletonHorse.java -@@ -43,6 +43,13 @@ public class SkeletonHorse extends AbstractHorse { +@@ -44,6 +44,13 @@ public class SkeletonHorse extends AbstractHorse { super(type, level); } @@ -1246,7 +1232,7 @@ index 03d0e52213707fb052d5298000e5cd14c2e25636..8a9f46e45ce077230ec918d46f599092 public static AttributeSupplier.Builder createAttributes() { return createBaseHorseAttributes().add(Attributes.MAX_HEALTH, 15.0).add(Attributes.MOVEMENT_SPEED, 0.2F); } -@@ -62,6 +69,7 @@ public class SkeletonHorse extends AbstractHorse { +@@ -63,6 +70,7 @@ public class SkeletonHorse extends AbstractHorse { @Override protected void addBehaviourGoals() { @@ -1255,10 +1241,10 @@ index 03d0e52213707fb052d5298000e5cd14c2e25636..8a9f46e45ce077230ec918d46f599092 @Override diff --git a/net/minecraft/world/entity/animal/equine/TraderLlama.java b/net/minecraft/world/entity/animal/equine/TraderLlama.java -index 95f499b7fdbe1620c6eb13b9a2e86bb6091af085..19497883e03603bc0a0f63c3b3734e32f9ed2e1d 100644 +index 7c92c9335997cee76ff360c51f704ee41a180796..ca89823a7951dba970c6bd82a7610eb7ed119a8b 100644 --- a/net/minecraft/world/entity/animal/equine/TraderLlama.java +++ b/net/minecraft/world/entity/animal/equine/TraderLlama.java -@@ -31,6 +31,28 @@ public class TraderLlama extends Llama { +@@ -32,6 +32,28 @@ public class TraderLlama extends Llama { super(type, level); } @@ -1288,10 +1274,10 @@ index 95f499b7fdbe1620c6eb13b9a2e86bb6091af085..19497883e03603bc0a0f63c3b3734e32 public boolean isTraderLlama() { return true; diff --git a/net/minecraft/world/entity/animal/equine/ZombieHorse.java b/net/minecraft/world/entity/animal/equine/ZombieHorse.java -index a279cdff95c37434f44bdda7558286045e606f33..13857de6c4be09b7d0798d2a0fd420c705ac1d5d 100644 +index 09c0ec915408ea35b4644d9c7ab20efd90a705c8..fdc590ca470ffbbac481eb684c105218fb3603e2 100644 --- a/net/minecraft/world/entity/animal/equine/ZombieHorse.java +++ b/net/minecraft/world/entity/animal/equine/ZombieHorse.java -@@ -49,6 +49,18 @@ public class ZombieHorse extends AbstractHorse { +@@ -50,6 +50,18 @@ public class ZombieHorse extends AbstractHorse { super(type, level); } @@ -1311,10 +1297,10 @@ index a279cdff95c37434f44bdda7558286045e606f33..13857de6c4be09b7d0798d2a0fd420c7 return createBaseHorseAttributes().add(Attributes.MAX_HEALTH, 25.0); } diff --git a/net/minecraft/world/entity/animal/feline/Cat.java b/net/minecraft/world/entity/animal/feline/Cat.java -index 0834b837b84c337366e051cec88da2c2789e7bef..36688a571cdf35697d0cd97bee316f5474bcae73 100644 +index 7a6b32188f042d846c4ef7bce46b63fc31ede4d3..5f6cb6f3d0bf8b5df66e16155df91982a5d2eb47 100644 --- a/net/minecraft/world/entity/animal/feline/Cat.java +++ b/net/minecraft/world/entity/animal/feline/Cat.java -@@ -95,10 +95,36 @@ public class Cat extends TamableAnimal { +@@ -102,10 +102,36 @@ public class Cat extends TamableAnimal { this.reassessTameGoals(); } @@ -1351,7 +1337,7 @@ index 0834b837b84c337366e051cec88da2c2789e7bef..36688a571cdf35697d0cd97bee316f54 this.goalSelector.addGoal(1, new TamableAnimal.TamableAnimalPanicGoal(1.5)); this.goalSelector.addGoal(2, new SitWhenOrderedToGoal(this)); this.goalSelector.addGoal(3, new Cat.CatRelaxOnOwnerGoal(this)); -@@ -111,6 +137,7 @@ public class Cat extends TamableAnimal { +@@ -118,6 +144,7 @@ public class Cat extends TamableAnimal { this.goalSelector.addGoal(10, new BreedGoal(this, 0.8)); this.goalSelector.addGoal(11, new WaterAvoidingRandomStrollGoal(this, 0.8, 1.0000001E-5F)); this.goalSelector.addGoal(12, new LookAtPlayerGoal(this, Player.class, 10.0F)); @@ -1359,7 +1345,7 @@ index 0834b837b84c337366e051cec88da2c2789e7bef..36688a571cdf35697d0cd97bee316f54 this.targetSelector.addGoal(1, new NonTameRandomTargetGoal<>(this, Rabbit.class, false, null)); this.targetSelector.addGoal(1, new NonTameRandomTargetGoal<>(this, Turtle.class, false, Turtle.BABY_ON_LAND_SELECTOR)); } -@@ -402,6 +429,7 @@ public class Cat extends TamableAnimal { +@@ -414,6 +441,7 @@ public class Cat extends TamableAnimal { @Override public InteractionResult mobInteract(final Player player, final InteractionHand hand) { @@ -1368,10 +1354,10 @@ index 0834b837b84c337366e051cec88da2c2789e7bef..36688a571cdf35697d0cd97bee316f54 if (this.isTame()) { if (this.isOwnedBy(player)) { diff --git a/net/minecraft/world/entity/animal/feline/Ocelot.java b/net/minecraft/world/entity/animal/feline/Ocelot.java -index 9fb38aaf63588cfe8a6f006a256c54a75ebbef46..93bfc93ae24d483f8a6c856d9ce978e34a064cd4 100644 +index 024266211d2e860f04775266db39e1fd69c01952..086ca07d2a6cba84226367d2410a4e04e1f7a4e8 100644 --- a/net/minecraft/world/entity/animal/feline/Ocelot.java +++ b/net/minecraft/world/entity/animal/feline/Ocelot.java -@@ -66,6 +66,23 @@ public class Ocelot extends Animal { +@@ -73,6 +73,23 @@ public class Ocelot extends Animal { this.reassessTrustingGoals(); } @@ -1395,7 +1381,7 @@ index 9fb38aaf63588cfe8a6f006a256c54a75ebbef46..93bfc93ae24d483f8a6c856d9ce978e3 public boolean isTrusting() { return this.entityData.get(DATA_TRUSTING); } -@@ -97,12 +114,14 @@ public class Ocelot extends Animal { +@@ -104,12 +121,14 @@ public class Ocelot extends Animal { protected void registerGoals() { this.temptGoal = new Ocelot.OcelotTemptGoal(this, 0.6, i -> i.is(ItemTags.OCELOT_FOOD), true); this.goalSelector.addGoal(1, new FloatGoal(this)); @@ -1411,7 +1397,7 @@ index 9fb38aaf63588cfe8a6f006a256c54a75ebbef46..93bfc93ae24d483f8a6c856d9ce978e3 this.targetSelector.addGoal(1, new NearestAttackableTargetGoal<>(this, Turtle.class, 10, false, false, Turtle.BABY_ON_LAND_SELECTOR)); } diff --git a/net/minecraft/world/entity/animal/fish/AbstractFish.java b/net/minecraft/world/entity/animal/fish/AbstractFish.java -index 62303a59d3e0ec28bc3d6bf6fc459527ad80b1f1..5619119cce83a0c2d5efbb0579345510978716f1 100644 +index 16f8d170699b8c1c7fd37a4db91bb89e88903fbf..9a486a9a572916b86631d4ed21abfdcb5ef307af 100644 --- a/net/minecraft/world/entity/animal/fish/AbstractFish.java +++ b/net/minecraft/world/entity/animal/fish/AbstractFish.java @@ -91,6 +91,7 @@ public abstract class AbstractFish extends WaterAnimal implements Bucketable { @@ -1431,17 +1417,14 @@ index 62303a59d3e0ec28bc3d6bf6fc459527ad80b1f1..5619119cce83a0c2d5efbb0579345510 this.move(MoverType.SELF, this.getDeltaMovement()); this.setDeltaMovement(this.getDeltaMovement().scale(0.9)); if (this.getTarget() == null) { -@@ -160,7 +161,7 @@ public abstract class AbstractFish extends WaterAnimal implements Bucketable { +@@ -160,19 +161,27 @@ public abstract class AbstractFish extends WaterAnimal implements Bucketable { protected void playStepSound(final BlockPos pos, final BlockState blockState) { } -- private static class FishMoveControl extends MoveControl { -+ private static class FishMoveControl extends org.purpurmc.purpur.controller.WaterMoveControllerWASD { // Purpur - Ridables - private final AbstractFish fish; - - FishMoveControl(final AbstractFish fish) { -@@ -168,14 +169,22 @@ public abstract class AbstractFish extends WaterAnimal implements Bucketable { - this.fish = fish; +- private static class FishMoveControl extends MoveControl { ++ private static class FishMoveControl extends org.purpurmc.purpur.controller.WaterMoveControllerWASD { // Purpur - Ridables + public FishMoveControl(final T fish) { + super(fish); } + // Purpur start - Ridables @@ -1449,22 +1432,22 @@ index 62303a59d3e0ec28bc3d6bf6fc459527ad80b1f1..5619119cce83a0c2d5efbb0579345510 - public void tick() { + public void purpurTick(Player rider) { + super.purpurTick(rider); -+ fish.setDeltaMovement(fish.getDeltaMovement().add(0.0D, 0.005D, 0.0D)); ++ this.mob.setDeltaMovement(this.mob.getDeltaMovement().add(0.0D, 0.005, 0.0D)); + } + // Purpur end - Ridables + + @Override + public void vanillaTick() { // Purpur - Ridables - if (this.fish.isEyeInFluid(FluidTags.WATER)) { - this.fish.setDeltaMovement(this.fish.getDeltaMovement().add(0.0, 0.005, 0.0)); + if (this.mob.isEyeInFluid(FluidTags.WATER)) { + this.mob.setDeltaMovement(this.mob.getDeltaMovement().add(0.0, 0.005, 0.0)); } - if (this.operation == MoveControl.Operation.MOVE_TO && !this.fish.getNavigation().isDone()) { -- float targetSpeed = (float)(this.speedModifier * this.fish.getAttributeValue(Attributes.MOVEMENT_SPEED)); -+ float targetSpeed = (float)(this.getSpeedModifier() * this.fish.getAttributeValue(Attributes.MOVEMENT_SPEED)); // Purpur - Ridables - this.fish.setSpeed(Mth.lerp(0.125F, this.fish.getSpeed(), targetSpeed)); - double xd = this.wantedX - this.fish.getX(); - double yd = this.wantedY - this.fish.getY(); + if (this.operation == MoveControl.Operation.MOVE_TO && !this.mob.getNavigation().isDone()) { +- float targetSpeed = (float)(this.speedModifier * this.mob.getAttributeValue(Attributes.MOVEMENT_SPEED)); ++ float targetSpeed = (float)(this.getSpeedModifier() * this.mob.getAttributeValue(Attributes.MOVEMENT_SPEED)); // Purpur - Ridables + this.mob.setSpeed(Mth.lerp(0.125F, this.mob.getSpeed(), targetSpeed)); + double xd = this.wantedX - this.mob.getX(); + double yd = this.wantedY - this.mob.getY(); diff --git a/net/minecraft/world/entity/animal/fish/Cod.java b/net/minecraft/world/entity/animal/fish/Cod.java index 1909fefa4af14a9aca43ccb8b93317b12ee4a092..becb5c214adacd36372bbe2b21ab15e341640f7d 100644 --- a/net/minecraft/world/entity/animal/fish/Cod.java @@ -1489,7 +1472,7 @@ index 1909fefa4af14a9aca43ccb8b93317b12ee4a092..becb5c214adacd36372bbe2b21ab15e3 public ItemStack getBucketItemStack() { return new ItemStack(Items.COD_BUCKET); diff --git a/net/minecraft/world/entity/animal/fish/Pufferfish.java b/net/minecraft/world/entity/animal/fish/Pufferfish.java -index 9981452e2dda0675defd279c4460031dae5fd25f..8d3e8575120145f572b2c1834d243bac8eb28586 100644 +index ad7bdb7f21fe80dbf85160ef8b40417d567bfdd6..baca62c789359f02b3ef22cbf8f72ba6008fb51c 100644 --- a/net/minecraft/world/entity/animal/fish/Pufferfish.java +++ b/net/minecraft/world/entity/animal/fish/Pufferfish.java @@ -47,6 +47,18 @@ public class Pufferfish extends AbstractFish { @@ -1512,7 +1495,7 @@ index 9981452e2dda0675defd279c4460031dae5fd25f..8d3e8575120145f572b2c1834d243bac protected void defineSynchedData(final SynchedEntityData.Builder entityData) { super.defineSynchedData(entityData); diff --git a/net/minecraft/world/entity/animal/fish/Salmon.java b/net/minecraft/world/entity/animal/fish/Salmon.java -index a967d067c3e97859a88672a3b9daf1b89d81ed3c..e96062cd57e1866c398418ebbb8f2443a668f480 100644 +index ab27233be7b3d541139aecc090428be6910d1fc0..0b89e3b80ec06345377133c2f954cc65db7e3b9c 100644 --- a/net/minecraft/world/entity/animal/fish/Salmon.java +++ b/net/minecraft/world/entity/animal/fish/Salmon.java @@ -41,6 +41,18 @@ public class Salmon extends AbstractSchoolingFish { @@ -1558,10 +1541,10 @@ index f846e5c736baea99fe5e411e36cf56a074145752..d48f8dc3e806ffe767565158bcfa1763 return "entity.minecraft.tropical_fish.predefined." + index; } diff --git a/net/minecraft/world/entity/animal/fox/Fox.java b/net/minecraft/world/entity/animal/fox/Fox.java -index b3dcc836f5bf756b11194ff534535b69d98490c5..c60343771f5490236212221e7d5f2b73dee4865c 100644 +index 788b32b81fca696ed01d86789846f5043c2d56d4..aecbd2bddf4eeb365ccad8a85799f7fcd8b9f319 100644 --- a/net/minecraft/world/entity/animal/fox/Fox.java +++ b/net/minecraft/world/entity/animal/fox/Fox.java -@@ -154,6 +154,44 @@ public class Fox extends Animal { +@@ -161,6 +161,44 @@ public class Fox extends Animal { this.getNavigation().setRequiredPathLength(32.0F); } @@ -1606,7 +1589,7 @@ index b3dcc836f5bf756b11194ff534535b69d98490c5..c60343771f5490236212221e7d5f2b73 @Override protected void defineSynchedData(final SynchedEntityData.Builder entityData) { super.defineSynchedData(entityData); -@@ -173,6 +211,7 @@ public class Fox extends Animal { +@@ -180,6 +218,7 @@ public class Fox extends Animal { this, AbstractFish.class, 20, false, false, (target, level) -> target instanceof AbstractSchoolingFish ); this.goalSelector.addGoal(0, new Fox.FoxFloatGoal()); @@ -1614,7 +1597,7 @@ index b3dcc836f5bf756b11194ff534535b69d98490c5..c60343771f5490236212221e7d5f2b73 this.goalSelector.addGoal(0, new ClimbOnTopOfPowderSnowGoal(this, this.level())); this.goalSelector.addGoal(1, new Fox.FaceplantGoal()); this.goalSelector.addGoal(2, new Fox.FoxPanicGoal(2.2)); -@@ -197,6 +236,7 @@ public class Fox extends Animal { +@@ -204,6 +243,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()); @@ -1622,7 +1605,7 @@ index b3dcc836f5bf756b11194ff534535b69d98490c5..c60343771f5490236212221e7d5f2b73 this.targetSelector .addGoal( 3, -@@ -1125,15 +1165,15 @@ public class Fox extends Animal { +@@ -1132,15 +1172,15 @@ public class Fox extends Animal { } } @@ -1641,30 +1624,30 @@ index b3dcc836f5bf756b11194ff534535b69d98490c5..c60343771f5490236212221e7d5f2b73 } } -@@ -1169,15 +1209,15 @@ public class Fox extends Animal { +@@ -1176,15 +1216,15 @@ public class Fox extends Animal { } } -- private class FoxMoveControl extends MoveControl { -+ private class FoxMoveControl extends org.purpurmc.purpur.controller.MoveControllerWASD { // Purpur - Ridables - public FoxMoveControl() { - super(Fox.this); +- private static class FoxMoveControl extends MoveControl { ++ private static class FoxMoveControl extends org.purpurmc.purpur.controller.MoveControllerWASD { // Purpur - Ridables + public FoxMoveControl(final T fox) { + super(fox); } @Override - public void tick() { + public void vanillaTick() { // Purpur - Ridables - if (Fox.this.canMove()) { + if (this.mob.canMove()) { - super.tick(); + super.vanillaTick(); // Purpur - Ridables } } } diff --git a/net/minecraft/world/entity/animal/frog/Frog.java b/net/minecraft/world/entity/animal/frog/Frog.java -index ef9f543aea1e88e1f81d888c7b21aeac934f102b..bedbe9adede69efa4c4f2e6def9aeb3e8429fc2e 100644 +index d7d8216524e8e4c66c9e5a8dd4e682f46f335ca1..1d9689489d67098148960d49540db77532d3adeb 100644 --- a/net/minecraft/world/entity/animal/frog/Frog.java +++ b/net/minecraft/world/entity/animal/frog/Frog.java -@@ -82,6 +82,8 @@ public class Frog extends Animal { +@@ -83,14 +83,63 @@ public class Frog extends Animal { public final AnimationState croakAnimationState = new AnimationState(); public final AnimationState tongueAnimationState = new AnimationState(); public final AnimationState swimIdleAnimationState = new AnimationState(); @@ -1673,14 +1656,14 @@ index ef9f543aea1e88e1f81d888c7b21aeac934f102b..bedbe9adede69efa4c4f2e6def9aeb3e public Frog(final EntityType type, final Level level) { super(type, level); -@@ -89,7 +91,55 @@ public class Frog extends Animal { + this.lookControl = new Frog.FrogLookControl(this); this.setPathfindingMalus(PathType.WATER, 4.0F); this.setPathfindingMalus(PathType.TRAPDOOR, -1.0F); - this.moveControl = new SmoothSwimmingMoveControl(this, 85, 10, 0.02F, 0.1F, true); +- this.moveControl = new SmoothSwimmingMoveControl<>(this, 85, 10, 0.02F, 0.1F, true); + // Purpur start - Ridables -+ this.purpurLandController = new org.purpurmc.purpur.controller.MoveControllerWASD(this, 0.2F); -+ this.purpurWaterController = new org.purpurmc.purpur.controller.WaterMoveControllerWASD(this, 0.5F); -+ this.moveControl = new SmoothSwimmingMoveControl(this, 85, 10, 0.02F, 0.1F, true) { ++ this.purpurLandController = new org.purpurmc.purpur.controller.MoveControllerWASD<>(this, 0.2F); ++ this.purpurWaterController = new org.purpurmc.purpur.controller.WaterMoveControllerWASD<>(this, 0.5F); ++ this.moveControl = new SmoothSwimmingMoveControl<>(this, 85, 10, 0.02F, 0.1F, true) { + @Override + public void tick() { + net.minecraft.world.entity.player.Player rider = mob.getRider(); @@ -1729,7 +1712,7 @@ index ef9f543aea1e88e1f81d888c7b21aeac934f102b..bedbe9adede69efa4c4f2e6def9aeb3e @Override protected Brain makeBrain(final Brain.Packed packedBrain) { -@@ -176,6 +226,7 @@ public class Frog extends Animal { +@@ -177,6 +226,7 @@ public class Frog extends Animal { protected void customServerAiStep(final ServerLevel level) { ProfilerFiller profiler = Profiler.get(); profiler.push("frogBrain"); @@ -1737,20 +1720,20 @@ index ef9f543aea1e88e1f81d888c7b21aeac934f102b..bedbe9adede69efa4c4f2e6def9aeb3e this.getBrain().tick(level, this); profiler.pop(); profiler.push("frogActivityUpdate"); -@@ -345,7 +396,7 @@ public class Frog extends Animal { +@@ -342,7 +392,7 @@ public class Frog extends Animal { return level.getBlockState(pos.below()).is(BlockTags.FROGS_SPAWNABLE_ON) && isBrightEnoughToSpawn(level, pos); } - private class FrogLookControl extends LookControl { + private class FrogLookControl extends org.purpurmc.purpur.controller.LookControllerWASD { // Purpur - Ridables - FrogLookControl(final Mob mob) { + public FrogLookControl(final Mob mob) { super(mob); } diff --git a/net/minecraft/world/entity/animal/frog/Tadpole.java b/net/minecraft/world/entity/animal/frog/Tadpole.java -index 3d4bfeae2fddb9ace26e7dea8870704d8309862b..ed8fa3aa3d0bb3c83f46a902dfe603942c4a8f96 100644 +index 296cae1d5f5a3a054949ee03e2a2552bfeae4682..30b538a10497d7808217cdcc161161a0feea505e 100644 --- a/net/minecraft/world/entity/animal/frog/Tadpole.java +++ b/net/minecraft/world/entity/animal/frog/Tadpole.java -@@ -54,13 +54,50 @@ public class Tadpole extends AbstractFish { +@@ -55,13 +55,50 @@ public class Tadpole extends AbstractFish { List.of(SensorType.NEAREST_LIVING_ENTITIES, SensorType.NEAREST_PLAYERS, SensorType.HURT_BY, SensorType.FROG_TEMPTATIONS), var0 -> TadpoleAi.getActivities() ); @@ -1758,10 +1741,10 @@ index 3d4bfeae2fddb9ace26e7dea8870704d8309862b..ed8fa3aa3d0bb3c83f46a902dfe60394 public Tadpole(final EntityType type, final Level level) { super(type, level); -- this.moveControl = new SmoothSwimmingMoveControl(this, 85, 10, 0.02F, 0.1F, true); +- this.moveControl = new SmoothSwimmingMoveControl<>(this, 85, 10, 0.02F, 0.1F, true); + // Purpur start - Ridables -+ this.purpurController = new org.purpurmc.purpur.controller.WaterMoveControllerWASD(this, 0.5F); -+ this.moveControl = new SmoothSwimmingMoveControl(this, 85, 10, 0.02F, 0.1F, true) { ++ this.purpurController = new org.purpurmc.purpur.controller.WaterMoveControllerWASD<>(this, 0.5F); ++ this.moveControl = new SmoothSwimmingMoveControl<>(this, 85, 10, 0.02F, 0.1F, true) { + @Override + public void tick() { + Player rider = mob.getRider(); @@ -1802,7 +1785,7 @@ index 3d4bfeae2fddb9ace26e7dea8870704d8309862b..ed8fa3aa3d0bb3c83f46a902dfe60394 @Override protected PathNavigation createNavigation(final Level level) { return new WaterBoundPathNavigation(this, level); -@@ -85,6 +122,7 @@ public class Tadpole extends AbstractFish { +@@ -86,6 +123,7 @@ public class Tadpole extends AbstractFish { protected void customServerAiStep(final ServerLevel level) { ProfilerFiller profiler = Profiler.get(); profiler.push("tadpoleBrain"); @@ -1811,10 +1794,10 @@ index 3d4bfeae2fddb9ace26e7dea8870704d8309862b..ed8fa3aa3d0bb3c83f46a902dfe60394 profiler.pop(); profiler.push("tadpoleActivityUpdate"); diff --git a/net/minecraft/world/entity/animal/goat/Goat.java b/net/minecraft/world/entity/animal/goat/Goat.java -index 7df6194d8fd844b9cd4aec55bb0f613fdfefaad2..cd0f514fa6deef90efc697d30af9a88797b456f8 100644 +index 0691d05d6ac63cf2dd6d6410ed7dc585bc02fa4b..6d81790bf42f7a580b95644f0f19c3ddfc7d1764 100644 --- a/net/minecraft/world/entity/animal/goat/Goat.java +++ b/net/minecraft/world/entity/animal/goat/Goat.java -@@ -100,6 +100,23 @@ public class Goat extends Animal { +@@ -106,6 +106,23 @@ public class Goat extends Animal { .orElseGet(() -> new ItemStack(Items.GOAT_HORN)); } @@ -1838,7 +1821,7 @@ index 7df6194d8fd844b9cd4aec55bb0f613fdfefaad2..cd0f514fa6deef90efc697d30af9a887 @Override protected Brain makeBrain(final Brain.Packed packedBrain) { return BRAIN_PROVIDER.makeBrain(this, packedBrain); -@@ -170,6 +187,7 @@ public class Goat extends Animal { +@@ -176,6 +193,7 @@ public class Goat extends Animal { protected void customServerAiStep(final ServerLevel level) { ProfilerFiller profiler = Profiler.get(); profiler.push("goatBrain"); @@ -1847,7 +1830,7 @@ index 7df6194d8fd844b9cd4aec55bb0f613fdfefaad2..cd0f514fa6deef90efc697d30af9a887 profiler.pop(); profiler.push("goatActivityUpdate"); diff --git a/net/minecraft/world/entity/animal/golem/CopperGolem.java b/net/minecraft/world/entity/animal/golem/CopperGolem.java -index 61612645df4ece5f3f6abf5f37fd717c99be10e1..d842d79bbd5253a2a701a87221258751aa112c3e 100644 +index 3feb7ed930e1d65e8fdfa761d3ede9104c158f2e..c27319adafa8089f098efde14989425a4715b260 100644 --- a/net/minecraft/world/entity/animal/golem/CopperGolem.java +++ b/net/minecraft/world/entity/animal/golem/CopperGolem.java @@ -112,6 +112,28 @@ public class CopperGolem extends AbstractGolem implements ContainerUser, Shearab @@ -1887,16 +1870,16 @@ index 61612645df4ece5f3f6abf5f37fd717c99be10e1..d842d79bbd5253a2a701a87221258751 this.getBrain().tick(level, this); profiler.pop(); profiler.push("copperGolemActivityUpdate"); -@@ -236,7 +259,7 @@ public class CopperGolem extends AbstractGolem implements ContainerUser, Shearab +@@ -235,7 +258,7 @@ public class CopperGolem extends AbstractGolem implements ContainerUser, Shearab + // Paper start - call PlayerShearEntityEvent java.util.List drops = this.generateDefaultDrops(serverLevel, itemStack); org.bukkit.event.player.PlayerShearEntityEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.handlePlayerShearEntityEvent(player, this, itemStack, hand, drops); - if (event != null) { -- if (event.isCancelled()) return InteractionResult.PASS; -+ if (event.isCancelled()) return tryRide(player, hand); // Purpur - Ridables - drops = org.bukkit.craftbukkit.inventory.CraftItemStack.asNMSCopy(event.getDrops()); - } +- if (event.isCancelled()) return InteractionResult.PASS; ++ if (event.isCancelled()) return tryRide(player, hand); // Purpur - Ridables + drops = org.bukkit.craftbukkit.inventory.CraftItemStack.asNMSCopy(event.getDrops()); this.shear(serverLevel, SoundSource.PLAYERS, itemStack, drops); -@@ -278,6 +301,8 @@ public class CopperGolem extends AbstractGolem implements ContainerUser, Shearab + // Paper end - call PlayerShearEntityEvent +@@ -276,6 +299,8 @@ public class CopperGolem extends AbstractGolem implements ContainerUser, Shearab } } @@ -1906,10 +1889,10 @@ index 61612645df4ece5f3f6abf5f37fd717c99be10e1..d842d79bbd5253a2a701a87221258751 } } diff --git a/net/minecraft/world/entity/animal/golem/IronGolem.java b/net/minecraft/world/entity/animal/golem/IronGolem.java -index cc49b2582073c2dbc19e3c857390b0fa0e8ad2d2..c6e0038cb3314b4db17d307b99de65dde107d5a1 100644 +index ea29222d152ec528a4c649712bf506e9c5176b0f..8c674f2f3a068e92b3975df8137912f4b8327cf2 100644 --- a/net/minecraft/world/entity/animal/golem/IronGolem.java +++ b/net/minecraft/world/entity/animal/golem/IronGolem.java -@@ -74,9 +74,28 @@ public class IronGolem extends AbstractGolem implements NeutralMob { +@@ -75,9 +75,28 @@ public class IronGolem extends AbstractGolem implements NeutralMob { } // Purpur end - Summoner API @@ -1938,7 +1921,7 @@ index cc49b2582073c2dbc19e3c857390b0fa0e8ad2d2..c6e0038cb3314b4db17d307b99de65dd this.goalSelector.addGoal(1, new MeleeAttackGoal(this, 1.0, true)); this.goalSelector.addGoal(2, new MoveTowardsTargetGoal(this, 0.9, 32.0F)); this.goalSelector.addGoal(2, new MoveBackToVillageGoal(this, 0.6, false)); -@@ -84,6 +103,7 @@ public class IronGolem extends AbstractGolem implements NeutralMob { +@@ -85,6 +104,7 @@ public class IronGolem extends AbstractGolem implements NeutralMob { this.goalSelector.addGoal(5, new OfferFlowerGoal(this)); this.goalSelector.addGoal(7, new LookAtPlayerGoal(this, Player.class, 6.0F)); this.goalSelector.addGoal(8, new RandomLookAroundGoal(this)); @@ -1946,7 +1929,7 @@ index cc49b2582073c2dbc19e3c857390b0fa0e8ad2d2..c6e0038cb3314b4db17d307b99de65dd this.targetSelector.addGoal(1, new DefendVillageTargetGoal(this)); this.targetSelector.addGoal(2, new HurtByTargetGoal(this)); this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, this::isAngryAt)); -@@ -271,13 +291,13 @@ public class IronGolem extends AbstractGolem implements NeutralMob { +@@ -272,13 +292,13 @@ public class IronGolem extends AbstractGolem implements NeutralMob { protected InteractionResult mobInteract(final Player player, final InteractionHand hand) { ItemStack itemStack = player.getItemInHand(hand); if (!itemStack.is(Items.IRON_INGOT)) { @@ -1963,7 +1946,7 @@ index cc49b2582073c2dbc19e3c857390b0fa0e8ad2d2..c6e0038cb3314b4db17d307b99de65dd float pitch = 1.0F + (this.random.nextFloat() - this.random.nextFloat()) * 0.2F; diff --git a/net/minecraft/world/entity/animal/golem/SnowGolem.java b/net/minecraft/world/entity/animal/golem/SnowGolem.java -index 0993ec37f58cbc6b201ebc9aeb39aee438bd1cf9..6875e40687bbde6aba25da7d3145eccdccea6f52 100644 +index 1f6507dd9a815ac8b8f57138c96fb4ccba0b64b3..acb61a212f9240ccfa414770868c0fb3835c538a 100644 --- a/net/minecraft/world/entity/animal/golem/SnowGolem.java +++ b/net/minecraft/world/entity/animal/golem/SnowGolem.java @@ -62,12 +62,31 @@ public class SnowGolem extends AbstractGolem implements RangedAttackMob, Shearab @@ -2006,16 +1989,16 @@ index 0993ec37f58cbc6b201ebc9aeb39aee438bd1cf9..6875e40687bbde6aba25da7d3145eccd BlockState snow = Blocks.SNOW.defaultBlockState(); for (int i = 0; i < 4; i++) { -@@ -157,7 +177,7 @@ public class SnowGolem extends AbstractGolem implements RangedAttackMob, Shearab +@@ -155,7 +175,7 @@ public class SnowGolem extends AbstractGolem implements RangedAttackMob, Shearab + java.util.List drops = this.generateDefaultDrops(level, itemStack); org.bukkit.event.player.PlayerShearEntityEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.handlePlayerShearEntityEvent(player, this, itemStack, hand, drops); - if (event != null) { - if (event.isCancelled()) { -- return InteractionResult.PASS; -+ return tryRide(player, hand); // Purpur - Ridables - } - drops = org.bukkit.craftbukkit.inventory.CraftItemStack.asNMSCopy(event.getDrops()); - // Paper end - custom shear drops -@@ -178,7 +198,7 @@ public class SnowGolem extends AbstractGolem implements RangedAttackMob, Shearab + if (event.isCancelled()) { +- return InteractionResult.PASS; ++ return tryRide(player, hand); // Purpur - Ridables + } + drops = org.bukkit.craftbukkit.inventory.CraftItemStack.asNMSCopy(event.getDrops()); + this.shear(level, SoundSource.PLAYERS, itemStack, drops); +@@ -174,7 +194,7 @@ public class SnowGolem extends AbstractGolem implements RangedAttackMob, Shearab return InteractionResult.SUCCESS; // Purpur end - Snowman drop and put back pumpkin } else { @@ -2025,10 +2008,10 @@ index 0993ec37f58cbc6b201ebc9aeb39aee438bd1cf9..6875e40687bbde6aba25da7d3145eccd } diff --git a/net/minecraft/world/entity/animal/happyghast/HappyGhast.java b/net/minecraft/world/entity/animal/happyghast/HappyGhast.java -index 9624a1f4cd829411e46213201200e3af54d57699..0ffa1ed6fe9e8aa01c91dee4cefb8b9a1273770b 100644 +index ee400d1bfd24cc738ca02c1ec50332d7cfc9c266..60c67b49d236fe1ad152b668083b61407f31ea6e 100644 --- a/net/minecraft/world/entity/animal/happyghast/HappyGhast.java +++ b/net/minecraft/world/entity/animal/happyghast/HappyGhast.java -@@ -133,6 +133,13 @@ public class HappyGhast extends Animal { +@@ -137,6 +137,13 @@ public class HappyGhast extends Animal { this.removeAllGoals(goal -> true); } @@ -2043,10 +2026,10 @@ index 9624a1f4cd829411e46213201200e3af54d57699..0ffa1ed6fe9e8aa01c91dee4cefb8b9a protected void ageBoundaryReached() { if (this.isBaby()) { diff --git a/net/minecraft/world/entity/animal/panda/Panda.java b/net/minecraft/world/entity/animal/panda/Panda.java -index 7bb37a2efaec248a51da2b89ecad536d424d5393..e551907cd2721fa330639aa590ef76711e7e21d6 100644 +index 037beb367fd445d18461b84dca790ca579c00c95..f0b23d5f443a8f29ce98e16f0254425147599d8d 100644 --- a/net/minecraft/world/entity/animal/panda/Panda.java +++ b/net/minecraft/world/entity/animal/panda/Panda.java -@@ -110,6 +110,32 @@ public class Panda extends Animal { +@@ -112,6 +112,32 @@ public class Panda extends Animal { } } @@ -2079,7 +2062,7 @@ index 7bb37a2efaec248a51da2b89ecad536d424d5393..e551907cd2721fa330639aa590ef7671 @Override protected boolean canDispenserEquipIntoSlot(final EquipmentSlot slot) { return slot == EquipmentSlot.MAINHAND && this.canPickUpLoot(); -@@ -262,6 +288,7 @@ public class Panda extends Animal { +@@ -264,6 +290,7 @@ public class Panda extends Animal { @Override protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); @@ -2087,7 +2070,7 @@ index 7bb37a2efaec248a51da2b89ecad536d424d5393..e551907cd2721fa330639aa590ef7671 this.goalSelector.addGoal(2, new Panda.PandaPanicGoal(this, 2.0)); this.goalSelector.addGoal(2, new Panda.PandaBreedGoal(this, 1.0)); this.goalSelector.addGoal(3, new Panda.PandaAttackGoal(this, 1.2F, true)); -@@ -277,6 +304,7 @@ public class Panda extends Animal { +@@ -279,6 +306,7 @@ public class Panda extends Animal { this.goalSelector.addGoal(12, new Panda.PandaRollGoal(this)); this.goalSelector.addGoal(13, new FollowParentGoal(this, 1.25)); this.goalSelector.addGoal(14, new WaterAvoidingRandomStrollGoal(this, 1.0)); @@ -2095,7 +2078,7 @@ index 7bb37a2efaec248a51da2b89ecad536d424d5393..e551907cd2721fa330639aa590ef7671 this.targetSelector.addGoal(1, new Panda.PandaHurtByTargetGoal(this).setAlertOthers()); } -@@ -615,7 +643,7 @@ public class Panda extends Animal { +@@ -617,7 +645,7 @@ public class Panda extends Animal { public InteractionResult mobInteract(final Player player, final InteractionHand hand) { ItemStack interactionItemStack = player.getItemInHand(hand); if (this.isScared()) { @@ -2104,7 +2087,7 @@ index 7bb37a2efaec248a51da2b89ecad536d424d5393..e551907cd2721fa330639aa590ef7671 } if (this.isOnBack()) { -@@ -661,7 +689,7 @@ public class Panda extends Animal { +@@ -663,7 +691,7 @@ public class Panda extends Animal { return InteractionResult.SUCCESS_SERVER; } else { @@ -2113,40 +2096,38 @@ index 7bb37a2efaec248a51da2b89ecad536d424d5393..e551907cd2721fa330639aa590ef7671 } } -@@ -968,7 +996,7 @@ public class Panda extends Animal { +@@ -970,15 +998,15 @@ public class Panda extends Animal { } } -- private static class PandaMoveControl extends MoveControl { -+ private static class PandaMoveControl extends org.purpurmc.purpur.controller.MoveControllerWASD { // Purpur - Ridables - private final Panda panda; - - public PandaMoveControl(final Panda mob) { -@@ -977,9 +1005,9 @@ public class Panda extends Animal { +- private static class PandaMoveControl extends MoveControl { ++ private static class PandaMoveControl extends org.purpurmc.purpur.controller.MoveControllerWASD { // Purpur - Ridables + public PandaMoveControl(final T mob) { + super(mob); } @Override - public void tick() { + public void vanillaTick() { // Purpur - Ridables - if (this.panda.canPerformAction()) { + if (this.mob.canPerformAction()) { - super.tick(); + super.vanillaTick(); // Purpur - Ridables } } } diff --git a/net/minecraft/world/entity/animal/parrot/Parrot.java b/net/minecraft/world/entity/animal/parrot/Parrot.java -index 2fb6b134794d232ddb06176a6c3bb69431c7663c..0cc9e9dcdaeaee8db350b4dc4acb1e6c370aa2c3 100644 +index c93170c007dc3e06b8324d5fa6a1710099c3e26c..ace47c04cb0bdb8b44fa80bfad7b01e670839f91 100644 --- a/net/minecraft/world/entity/animal/parrot/Parrot.java +++ b/net/minecraft/world/entity/animal/parrot/Parrot.java -@@ -137,12 +137,68 @@ public class Parrot extends ShoulderRidingEntity implements FlyingAnimal { +@@ -137,12 +137,68 @@ public class Parrot extends ShoulderRidingEntity { public Parrot(final EntityType type, final Level level) { super(type, level); -- this.moveControl = new FlyingMoveControl(this, 10, false); +- this.moveControl = new FlyingMoveControl<>(this, 10, false); + // Purpur start - Ridables -+ final org.purpurmc.purpur.controller.FlyingWithSpacebarMoveControllerWASD flyingController = new org.purpurmc.purpur.controller.FlyingWithSpacebarMoveControllerWASD(this, 0.3F); -+ class ParrotMoveControl extends FlyingMoveControl { -+ public ParrotMoveControl(Mob entity, int maxPitchChange, boolean noGravity) { ++ final org.purpurmc.purpur.controller.FlyingWithSpacebarMoveControllerWASD flyingController = new org.purpurmc.purpur.controller.FlyingWithSpacebarMoveControllerWASD<>(this, 0.3F); ++ class ParrotMoveControl extends FlyingMoveControl { ++ public ParrotMoveControl(T entity, int maxPitchChange, boolean noGravity) { + super(entity, maxPitchChange, noGravity); + } + @@ -2208,7 +2189,7 @@ index 2fb6b134794d232ddb06176a6c3bb69431c7663c..0cc9e9dcdaeaee8db350b4dc4acb1e6c @Override public @Nullable SpawnGroupData finalizeSpawn( final ServerLevelAccessor level, final DifficultyInstance difficulty, final EntitySpawnReason spawnReason, @Nullable SpawnGroupData groupData -@@ -162,9 +218,11 @@ public class Parrot extends ShoulderRidingEntity implements FlyingAnimal { +@@ -162,9 +218,11 @@ public class Parrot extends ShoulderRidingEntity { @Override protected void registerGoals() { @@ -2222,10 +2203,10 @@ index 2fb6b134794d232ddb06176a6c3bb69431c7663c..0cc9e9dcdaeaee8db350b4dc4acb1e6c this.goalSelector.addGoal(2, new SitWhenOrderedToGoal(this)); this.goalSelector.addGoal(2, new FollowOwnerGoal(this, 1.0, 5.0F, 1.0F)); diff --git a/net/minecraft/world/entity/animal/pig/Pig.java b/net/minecraft/world/entity/animal/pig/Pig.java -index ff9c2cd82c89c5c6be00467360dfef84a9ca7a96..ed655afebba29cccb7c15e6f15aee6478ecdaee4 100644 +index 79914b2f63b560338a9747dc75d5c86b27a1275d..b3a24a2e48c0ada66cde1ee7710c2d89d4f221d9 100644 --- a/net/minecraft/world/entity/animal/pig/Pig.java +++ b/net/minecraft/world/entity/animal/pig/Pig.java -@@ -68,9 +68,27 @@ public class Pig extends Animal implements ItemSteerable { +@@ -76,9 +76,27 @@ public class Pig extends Animal implements ItemSteerable { super(type, level); } @@ -2254,18 +2235,18 @@ index ff9c2cd82c89c5c6be00467360dfef84a9ca7a96..ed655afebba29cccb7c15e6f15aee647 this.goalSelector.addGoal(3, new BreedGoal(this, 1.0)); this.goalSelector.addGoal(4, new TemptGoal(this, 1.2, i -> i.is(Items.CARROT_ON_A_STICK), false)); diff --git a/net/minecraft/world/entity/animal/polarbear/PolarBear.java b/net/minecraft/world/entity/animal/polarbear/PolarBear.java -index 8bcfe80e696fe2f0a781a496772b2995f0151ab4..a7a77f9cae2f524ce7abbc694cdae7c95bef3e16 100644 +index 5de97090f68c5a371f0b196c211941d7a5e503b1..250401cef7c93375235ef275165f1e0d9684d42a 100644 --- a/net/minecraft/world/entity/animal/polarbear/PolarBear.java +++ b/net/minecraft/world/entity/animal/polarbear/PolarBear.java -@@ -61,6 +61,7 @@ public class PolarBear extends Animal implements NeutralMob { - private static final UniformInt PERSISTENT_ANGER_TIME = TimeUtil.rangeOfSeconds(20, 39); - private long persistentAngerEndTime; - private @Nullable EntityReference persistentAngerTarget; +@@ -67,6 +67,7 @@ public class PolarBear extends Animal implements NeutralMob { + private static final EntityDimensions BABY_DIMENSIONS = EntityDimensions.scalable(0.7F, 0.7F) + .withEyeHeight(0.34375F) + .withAttachments(EntityAttachments.builder().attach(EntityAttachment.PASSENGER, 0.0F, 0.625F, 0.0F)); + private int standTimer = 0; // Purpur - Ridables public PolarBear(final EntityType type, final Level level) { super(type, level); -@@ -89,6 +90,34 @@ public class PolarBear extends Animal implements NeutralMob { +@@ -95,6 +96,34 @@ public class PolarBear extends Animal implements NeutralMob { } // Purpur end - Breedable Polar Bears @@ -2299,8 +2280,8 @@ index 8bcfe80e696fe2f0a781a496772b2995f0151ab4..a7a77f9cae2f524ce7abbc694cdae7c9 + @Override public @Nullable AgeableMob getBreedOffspring(final ServerLevel level, final AgeableMob partner) { - return EntityType.POLAR_BEAR.create(level, EntitySpawnReason.BREEDING); -@@ -103,6 +132,7 @@ public class PolarBear extends Animal implements NeutralMob { + return EntityTypes.POLAR_BEAR.create(level, EntitySpawnReason.BREEDING); +@@ -109,6 +138,7 @@ public class PolarBear extends Animal implements NeutralMob { protected void registerGoals() { super.registerGoals(); this.goalSelector.addGoal(0, new FloatGoal(this)); @@ -2308,7 +2289,7 @@ index 8bcfe80e696fe2f0a781a496772b2995f0151ab4..a7a77f9cae2f524ce7abbc694cdae7c9 this.goalSelector.addGoal(1, new PolarBear.PolarBearMeleeAttackGoal()); this.goalSelector.addGoal(1, new PanicGoal(this, 2.0, bear -> bear.isBaby() ? DamageTypeTags.PANIC_CAUSES : DamageTypeTags.PANIC_ENVIRONMENTAL_CAUSES)); // Purpur start - Breedable Polar Bears -@@ -115,6 +145,7 @@ public class PolarBear extends Animal implements NeutralMob { +@@ -121,6 +151,7 @@ public class PolarBear extends Animal implements NeutralMob { this.goalSelector.addGoal(5, new RandomStrollGoal(this, 1.0)); this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 6.0F)); this.goalSelector.addGoal(7, new RandomLookAroundGoal(this)); @@ -2316,7 +2297,7 @@ index 8bcfe80e696fe2f0a781a496772b2995f0151ab4..a7a77f9cae2f524ce7abbc694cdae7c9 this.targetSelector.addGoal(1, new PolarBear.PolarBearHurtByTargetGoal()); this.targetSelector.addGoal(2, new PolarBear.PolarBearAttackPlayersGoal()); this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, this::isAngryAt)); -@@ -232,6 +263,12 @@ public class PolarBear extends Animal implements NeutralMob { +@@ -238,6 +269,12 @@ public class PolarBear extends Animal implements NeutralMob { if (!this.level().isClientSide()) { this.updatePersistentAnger((ServerLevel)this.level(), true); } @@ -2329,7 +2310,7 @@ index 8bcfe80e696fe2f0a781a496772b2995f0151ab4..a7a77f9cae2f524ce7abbc694cdae7c9 } @Override -@@ -251,6 +288,7 @@ public class PolarBear extends Animal implements NeutralMob { +@@ -258,6 +295,7 @@ public class PolarBear extends Animal implements NeutralMob { public void setStanding(final boolean value) { this.entityData.set(DATA_STANDING_ID, value); @@ -2338,10 +2319,10 @@ index 8bcfe80e696fe2f0a781a496772b2995f0151ab4..a7a77f9cae2f524ce7abbc694cdae7c9 public float getStandingAnimationScale(final float a) { diff --git a/net/minecraft/world/entity/animal/rabbit/Rabbit.java b/net/minecraft/world/entity/animal/rabbit/Rabbit.java -index 977143e1072b5691f32a0aa11e24a4e8b907476c..0053a1e7ed9b577128241e0c72f59d66eb532726 100644 +index 3c43ae68e2510505773e36bf7b051835986e3df0..2d2078ca3adeb78b6ec2633c35d3c622184cc3b2 100644 --- a/net/minecraft/world/entity/animal/rabbit/Rabbit.java +++ b/net/minecraft/world/entity/animal/rabbit/Rabbit.java -@@ -108,6 +108,7 @@ public class Rabbit extends Animal { +@@ -109,6 +109,7 @@ public class Rabbit extends Animal { private boolean wasOnGround; private int jumpDelayTicks; public int moreCarrotTicks = 0; @@ -2349,7 +2330,7 @@ index 977143e1072b5691f32a0aa11e24a4e8b907476c..0053a1e7ed9b577128241e0c72f59d66 public Rabbit(final EntityType type, final Level level) { super(type, level); -@@ -116,9 +117,55 @@ public class Rabbit extends Animal { +@@ -117,9 +118,55 @@ public class Rabbit extends Animal { // this.setSpeedModifier(0.0); // CraftBukkit } @@ -2405,7 +2386,7 @@ index 977143e1072b5691f32a0aa11e24a4e8b907476c..0053a1e7ed9b577128241e0c72f59d66 this.goalSelector.addGoal(1, new ClimbOnTopOfPowderSnowGoal(this, this.level())); this.goalSelector.addGoal(1, new Rabbit.RabbitPanicGoal(this, 2.2)); this.goalSelector.addGoal(2, new BreedGoal(this, 0.8)); -@@ -138,6 +185,14 @@ public class Rabbit extends Animal { +@@ -139,6 +186,14 @@ public class Rabbit extends Animal { @Override protected float getJumpPower() { @@ -2420,7 +2401,7 @@ index 977143e1072b5691f32a0aa11e24a4e8b907476c..0053a1e7ed9b577128241e0c72f59d66 float baseJumpPower = 0.3F; if (this.moveControl.getSpeedModifier() <= 0.6) { baseJumpPower = 0.2F; -@@ -205,6 +260,12 @@ public class Rabbit extends Animal { +@@ -206,6 +261,12 @@ public class Rabbit extends Animal { @Override public void customServerAiStep(final ServerLevel level) { @@ -2433,7 +2414,7 @@ index 977143e1072b5691f32a0aa11e24a4e8b907476c..0053a1e7ed9b577128241e0c72f59d66 if (this.jumpDelayTicks > 0) { this.jumpDelayTicks--; } -@@ -487,7 +548,7 @@ public class Rabbit extends Animal { +@@ -488,7 +549,7 @@ public class Rabbit extends Animal { } private boolean shouldPlayIdleAnimation() { @@ -2442,25 +2423,25 @@ index 977143e1072b5691f32a0aa11e24a4e8b907476c..0053a1e7ed9b577128241e0c72f59d66 } @Override -@@ -559,7 +620,7 @@ public class Rabbit extends Animal { +@@ -560,7 +621,7 @@ public class Rabbit extends Animal { } } -- private static class RabbitMoveControl extends MoveControl { -+ private static class RabbitMoveControl extends org.purpurmc.purpur.controller.MoveControllerWASD { // Purpur - Ridables - private final Rabbit rabbit; +- private static class RabbitMoveControl extends MoveControl { ++ private static class RabbitMoveControl extends org.purpurmc.purpur.controller.MoveControllerWASD { // Purpur - Ridables private double nextJumpSpeed; -@@ -569,14 +630,14 @@ public class Rabbit extends Animal { + public RabbitMoveControl(final T rabbit) { +@@ -568,14 +629,14 @@ public class Rabbit extends Animal { } @Override - public void tick() { + public void vanillaTick() { // Purpur - Ridables - if (this.rabbit.onGround() && !this.rabbit.jumping && !((Rabbit.RabbitJumpControl)this.rabbit.jumpControl).wantJump()) { - this.rabbit.setSpeedModifier(0.0); + if (this.mob.onGround() && !this.mob.jumping && !((Rabbit.RabbitJumpControl)this.mob.jumpControl).wantJump()) { + this.mob.setSpeedModifier(0.0); } else if (this.hasWanted() || this.operation == MoveControl.Operation.JUMPING) { - this.rabbit.setSpeedModifier(this.nextJumpSpeed); + this.mob.setSpeedModifier(this.nextJumpSpeed); } - super.tick(); @@ -2469,10 +2450,10 @@ index 977143e1072b5691f32a0aa11e24a4e8b907476c..0053a1e7ed9b577128241e0c72f59d66 @Override diff --git a/net/minecraft/world/entity/animal/sheep/Sheep.java b/net/minecraft/world/entity/animal/sheep/Sheep.java -index 87fd91714510638386b13d285db889c075669f3e..08cd6e675107bf622b634c1f0e2cd53e33ef3569 100644 +index 044e31764d4bb5f4bf2b0657d184a62628430b95..ef69bac6181d5f130008629ddb2763f56232345b 100644 --- a/net/minecraft/world/entity/animal/sheep/Sheep.java +++ b/net/minecraft/world/entity/animal/sheep/Sheep.java -@@ -63,10 +63,28 @@ public class Sheep extends Animal implements Shearable { +@@ -71,10 +71,28 @@ public class Sheep extends Animal implements Shearable { super(type, level); } @@ -2502,10 +2483,10 @@ index 87fd91714510638386b13d285db889c075669f3e..08cd6e675107bf622b634c1f0e2cd53e this.goalSelector.addGoal(2, new BreedGoal(this, 1.0)); this.goalSelector.addGoal(3, new TemptGoal(this, 1.1, i -> i.is(ItemTags.SHEEP_FOOD), false)); diff --git a/net/minecraft/world/entity/animal/sniffer/Sniffer.java b/net/minecraft/world/entity/animal/sniffer/Sniffer.java -index 42c6100b82b82e3cebd6d808f644f4fc666037e3..b980ed12f7f20d89c6bd01d2c94cb2cc15f5c561 100644 +index d5394ae7ce56555ad21aeafb2d78c291c62e2988..1e844ec746aa200ed8e70af5dd4389f3bd671112 100644 --- a/net/minecraft/world/entity/animal/sniffer/Sniffer.java +++ b/net/minecraft/world/entity/animal/sniffer/Sniffer.java -@@ -94,6 +94,23 @@ public class Sniffer extends Animal { +@@ -95,6 +95,23 @@ public class Sniffer extends Animal { this.setPathfindingMalus(PathType.DAMAGE_CAUTIOUS, -1.0F); } @@ -2529,7 +2510,7 @@ index 42c6100b82b82e3cebd6d808f644f4fc666037e3..b980ed12f7f20d89c6bd01d2c94cb2cc @Override protected void defineSynchedData(final SynchedEntityData.Builder entityData) { super.defineSynchedData(entityData); -@@ -467,6 +484,7 @@ public class Sniffer extends Animal { +@@ -468,6 +485,7 @@ public class Sniffer extends Animal { protected void customServerAiStep(final ServerLevel level) { ProfilerFiller profiler = Profiler.get(); profiler.push("snifferBrain"); @@ -2538,10 +2519,10 @@ index 42c6100b82b82e3cebd6d808f644f4fc666037e3..b980ed12f7f20d89c6bd01d2c94cb2cc profiler.popPush("snifferActivityUpdate"); SnifferAi.updateActivity(this); diff --git a/net/minecraft/world/entity/animal/squid/GlowSquid.java b/net/minecraft/world/entity/animal/squid/GlowSquid.java -index 7db02196ed1dd9057c9418d3d96164bb5082380b..51a0771819abfdde5043eaeca62b0ce45c40039e 100644 +index ecc3fb073a3e40c590527f0aec8b23a7aee04a71..bde43e42ba7eec863fd0e2cd9b8068e8cefaaa1c 100644 --- a/net/minecraft/world/entity/animal/squid/GlowSquid.java +++ b/net/minecraft/world/entity/animal/squid/GlowSquid.java -@@ -37,6 +37,19 @@ public class GlowSquid extends Squid { +@@ -38,6 +38,19 @@ public class GlowSquid extends Squid { } // Purpur end - Flying squids! Oh my! @@ -2562,7 +2543,7 @@ index 7db02196ed1dd9057c9418d3d96164bb5082380b..51a0771819abfdde5043eaeca62b0ce4 protected ParticleOptions getInkParticle() { return ParticleTypes.GLOW_SQUID_INK; diff --git a/net/minecraft/world/entity/animal/squid/Squid.java b/net/minecraft/world/entity/animal/squid/Squid.java -index 45e170bbcc72206ed0018440c435359084749a7f..76c9c4cb6f7567946bc90e2d59990d5aabd8e4d9 100644 +index e0db02e7f2166e894137190252f28a3f02386207..e2273ce904e2c95491caec67d36d37b4b5e0fe67 100644 --- a/net/minecraft/world/entity/animal/squid/Squid.java +++ b/net/minecraft/world/entity/animal/squid/Squid.java @@ -74,9 +74,32 @@ public class Squid extends AgeableWaterCreature { @@ -2637,11 +2618,11 @@ index 45e170bbcc72206ed0018440c435359084749a7f..76c9c4cb6f7567946bc90e2d59990d5a if (noActionTime > 100) { this.squid.movementVector = Vec3.ZERO; diff --git a/net/minecraft/world/entity/animal/turtle/Turtle.java b/net/minecraft/world/entity/animal/turtle/Turtle.java -index d03a219af35e3c577386b87d553cc53c1e922553..53fc1012d46e20b623246cecae87b3feb1a0fda6 100644 +index 3fec7cfb25ae8798921bca35c076ecb792dccb14..2e147b2276dd8604dc6adb75c7ac90ef42e63955 100644 --- a/net/minecraft/world/entity/animal/turtle/Turtle.java +++ b/net/minecraft/world/entity/animal/turtle/Turtle.java -@@ -87,6 +87,23 @@ public class Turtle extends Animal { - this.moveControl = new Turtle.TurtleMoveControl(this); +@@ -88,6 +88,23 @@ public class Turtle extends Animal { + this.moveControl = new Turtle.TurtleMoveControl<>(this); } + // Purpur start - Ridables @@ -2664,7 +2645,7 @@ index d03a219af35e3c577386b87d553cc53c1e922553..53fc1012d46e20b623246cecae87b3fe public void setHomePos(final BlockPos pos) { this.homePos = pos; } -@@ -145,6 +162,7 @@ public class Turtle extends Animal { +@@ -150,6 +167,7 @@ public class Turtle extends Animal { @Override protected void registerGoals() { @@ -2672,45 +2653,42 @@ index d03a219af35e3c577386b87d553cc53c1e922553..53fc1012d46e20b623246cecae87b3fe this.goalSelector.addGoal(0, new Turtle.TurtlePanicGoal(this, 1.2)); this.goalSelector.addGoal(1, new Turtle.TurtleBreedGoal(this, 1.0)); this.goalSelector.addGoal(1, new Turtle.TurtleLayEggGoal(this, 1.0)); -@@ -485,12 +503,14 @@ public class Turtle extends Animal { +@@ -490,9 +508,11 @@ public class Turtle extends Animal { } } -- private static class TurtleMoveControl extends MoveControl { -+ private static class TurtleMoveControl extends org.purpurmc.purpur.controller.MoveControllerWASD { // Purpur - Ridables - private final Turtle turtle; +- private static class TurtleMoveControl extends MoveControl { ++ private static class TurtleMoveControl extends org.purpurmc.purpur.controller.MoveControllerWASD { // Purpur - Ridables + private final org.purpurmc.purpur.controller.WaterMoveControllerWASD waterController; // Purpur - Ridables - - TurtleMoveControl(final Turtle turtle) { + public TurtleMoveControl(final T turtle) { super(turtle); - this.turtle = turtle; -+ waterController = new org.purpurmc.purpur.controller.WaterMoveControllerWASD(turtle, 0.25D); // Purpur - Ridables ++ waterController = new org.purpurmc.purpur.controller.WaterMoveControllerWASD<>(turtle, 0.25D); // Purpur - Ridables } private void updateSpeed() { -@@ -509,7 +529,7 @@ public class Turtle extends Animal { +@@ -511,7 +531,7 @@ public class Turtle extends Animal { } @Override - public void tick() { + public void vanillaTick() { // Purpur - Ridables this.updateSpeed(); - if (this.operation == MoveControl.Operation.MOVE_TO && !this.turtle.getNavigation().isDone()) { - double xd = this.wantedX - this.turtle.getX(); -@@ -523,7 +543,7 @@ public class Turtle extends Animal { + if (this.operation == MoveControl.Operation.MOVE_TO && !this.mob.getNavigation().isDone()) { + double xd = this.wantedX - this.mob.getX(); +@@ -525,7 +545,7 @@ public class Turtle extends Animal { float yRotD = (float)(Mth.atan2(zd, xd) * 180.0F / (float)Math.PI) - 90.0F; - this.turtle.setYRot(this.rotlerp(this.turtle.getYRot(), yRotD, 90.0F)); - this.turtle.yBodyRot = this.turtle.getYRot(); -- float targetSpeed = (float)(this.speedModifier * this.turtle.getAttributeValue(Attributes.MOVEMENT_SPEED)); -+ float targetSpeed = (float)(this.getSpeedModifier() * this.turtle.getAttributeValue(Attributes.MOVEMENT_SPEED)); // Purpur - Ridables - this.turtle.setSpeed(Mth.lerp(0.125F, this.turtle.getSpeed(), targetSpeed)); - this.turtle.setDeltaMovement(this.turtle.getDeltaMovement().add(0.0, this.turtle.getSpeed() * yd * 0.1, 0.0)); + this.mob.setYRot(this.rotlerp(this.mob.getYRot(), yRotD, 90.0F)); + this.mob.yBodyRot = this.mob.getYRot(); +- float targetSpeed = (float)(this.speedModifier * this.mob.getAttributeValue(Attributes.MOVEMENT_SPEED)); ++ float targetSpeed = (float)(this.getSpeedModifier() * this.mob.getAttributeValue(Attributes.MOVEMENT_SPEED)); // Purpur - Ridables + this.mob.setSpeed(Mth.lerp(0.125F, this.mob.getSpeed(), targetSpeed)); + this.mob.setDeltaMovement(this.mob.getDeltaMovement().add(0.0, this.mob.getSpeed() * yd * 0.1, 0.0)); } diff --git a/net/minecraft/world/entity/animal/wolf/Wolf.java b/net/minecraft/world/entity/animal/wolf/Wolf.java -index 3519e9289f79d89bcaa3ad51fe07657018aa607f..17c3d76f0d606722dbc657250a85de9306838356 100644 +index 5d1e0d44163b9f29dc824b46b7b983456a273419..f54a14a1e434cbfedf709d3b1495f2ae9ae4f11f 100644 --- a/net/minecraft/world/entity/animal/wolf/Wolf.java +++ b/net/minecraft/world/entity/animal/wolf/Wolf.java -@@ -182,9 +182,32 @@ public class Wolf extends TamableAnimal implements NeutralMob { +@@ -190,9 +190,32 @@ public class Wolf extends TamableAnimal implements NeutralMob { } // Purpur end - Configurable default collar color @@ -2743,7 +2721,7 @@ index 3519e9289f79d89bcaa3ad51fe07657018aa607f..17c3d76f0d606722dbc657250a85de93 this.goalSelector.addGoal(1, new TamableAnimal.TamableAnimalPanicGoal(1.5, DamageTypeTags.PANIC_ENVIRONMENTAL_CAUSES)); this.goalSelector.addGoal(2, new SitWhenOrderedToGoal(this)); this.goalSelector.addGoal(3, new Wolf.WolfAvoidEntityGoal<>(this, Llama.class, 24.0F, 1.5, 1.5)); -@@ -197,6 +220,7 @@ public class Wolf extends TamableAnimal implements NeutralMob { +@@ -205,6 +228,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)); @@ -2752,18 +2730,18 @@ index 3519e9289f79d89bcaa3ad51fe07657018aa607f..17c3d76f0d606722dbc657250a85de93 this.targetSelector.addGoal(2, new OwnerHurtTargetGoal(this)); this.targetSelector.addGoal(3, new HurtByTargetGoal(this).setAlertOthers()); diff --git a/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -index 166361e45756b0cfce09502a89bd3a878820df08..bede0e9ce5b7c73d589511b71ad2a5f9e628eebc 100644 +index cabadc98e43f7d45a15512010670ad57d276584b..55a24b960f1372c0fa7edf7c5d439d452f5f3839 100644 --- a/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java +++ b/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -@@ -90,6 +90,7 @@ public class EnderDragon extends Mob implements Enemy { +@@ -91,6 +91,7 @@ public class EnderDragon extends Mob implements Enemy { private final net.minecraft.world.level.Explosion explosionSource; // Paper - reusable source for CraftTNTPrimed.getSource() private @Nullable BlockPos podium; // Paper end + private boolean hadRider; // Purpur - Ridables public EnderDragon(final EntityType type, final Level level) { - super(EntityType.ENDER_DRAGON, level); -@@ -106,6 +107,37 @@ public class EnderDragon extends Mob implements Enemy { + super(EntityTypes.ENDER_DRAGON, level); +@@ -107,6 +108,37 @@ public class EnderDragon extends Mob implements Enemy { this.noPhysics = true; this.phaseManager = new EnderDragonPhaseManager(this); this.explosionSource = new net.minecraft.world.level.ServerExplosion(level.getMinecraftWorld(), this, null, null, new Vec3(Double.NaN, Double.NaN, Double.NaN), Float.NaN, true, net.minecraft.world.level.Explosion.BlockInteraction.DESTROY); // Paper @@ -2801,7 +2779,7 @@ index 166361e45756b0cfce09502a89bd3a878820df08..bede0e9ce5b7c73d589511b71ad2a5f9 } public void setDragonFight(final EnderDragonFight fight) { -@@ -120,6 +152,17 @@ public class EnderDragon extends Mob implements Enemy { +@@ -121,6 +153,17 @@ public class EnderDragon extends Mob implements Enemy { return this.fightOrigin; } @@ -2819,7 +2797,7 @@ index 166361e45756b0cfce09502a89bd3a878820df08..bede0e9ce5b7c73d589511b71ad2a5f9 public static AttributeSupplier.Builder createAttributes() { return Mob.createMobAttributes().add(Attributes.MAX_HEALTH, 200.0).add(Attributes.CAMERA_DISTANCE, 16.0); } -@@ -169,6 +212,37 @@ public class EnderDragon extends Mob implements Enemy { +@@ -170,6 +213,37 @@ public class EnderDragon extends Mob implements Enemy { @Override public void aiStep() { @@ -2857,7 +2835,7 @@ index 166361e45756b0cfce09502a89bd3a878820df08..bede0e9ce5b7c73d589511b71ad2a5f9 this.processFlappingMovement(); if (this.level().isClientSide()) { this.setHealth(this.getHealth()); -@@ -197,6 +271,7 @@ public class EnderDragon extends Mob implements Enemy { +@@ -198,6 +272,7 @@ public class EnderDragon extends Mob implements Enemy { this.oFlapTime = this.flapTime; if (this.isDeadOrDying()) { @@ -2865,7 +2843,7 @@ index 166361e45756b0cfce09502a89bd3a878820df08..bede0e9ce5b7c73d589511b71ad2a5f9 float xo = (this.random.nextFloat() - 0.5F) * 8.0F; float yo = (this.random.nextFloat() - 0.5F) * 4.0F; float zo = (this.random.nextFloat() - 0.5F) * 8.0F; -@@ -206,9 +281,9 @@ public class EnderDragon extends Mob implements Enemy { +@@ -207,9 +282,9 @@ public class EnderDragon extends Mob implements Enemy { Vec3 movement = this.getDeltaMovement(); float flapSpeed = 0.2F / ((float)movement.horizontalDistance() * 10.0F + 1.0F); flapSpeed *= (float)Math.pow(2.0, movement.y); @@ -2877,7 +2855,7 @@ index 166361e45756b0cfce09502a89bd3a878820df08..bede0e9ce5b7c73d589511b71ad2a5f9 this.flapTime += flapSpeed * 0.5F; } else { this.flapTime += flapSpeed; -@@ -219,7 +294,7 @@ public class EnderDragon extends Mob implements Enemy { +@@ -220,7 +295,7 @@ public class EnderDragon extends Mob implements Enemy { this.flapTime = 0.5F; } else { this.flightHistory.record(this.getY(), this.getYRot()); @@ -2886,7 +2864,7 @@ index 166361e45756b0cfce09502a89bd3a878820df08..bede0e9ce5b7c73d589511b71ad2a5f9 DragonPhaseInstance currentPhase = this.phaseManager.getCurrentPhase(); currentPhase.doServerTick(level); if (this.phaseManager.getCurrentPhase() != currentPhase) { -@@ -290,7 +365,7 @@ public class EnderDragon extends Mob implements Enemy { +@@ -291,7 +366,7 @@ public class EnderDragon extends Mob implements Enemy { this.tickPart(this.body, ss1 * 0.5F, 0.0, -cc1 * 0.5F); this.tickPart(this.wing1, cc1 * 4.5F, 2.0, ss1 * 4.5F); this.tickPart(this.wing2, cc1 * -4.5F, 2.0, ss1 * -4.5F); @@ -2895,7 +2873,7 @@ index 166361e45756b0cfce09502a89bd3a878820df08..bede0e9ce5b7c73d589511b71ad2a5f9 this.knockBack( serverLevel, serverLevel.getEntities( -@@ -338,9 +413,9 @@ public class EnderDragon extends Mob implements Enemy { +@@ -339,9 +414,9 @@ public class EnderDragon extends Mob implements Enemy { } if (this.level() instanceof ServerLevel level) { @@ -2926,7 +2904,7 @@ index a8e3df21c27b9c86f9f03ea436ef4099a0805b71..a677aed54e16f3150ea1eabe22935a3d protected void defineSynchedData(final SynchedEntityData.Builder entityData) { } diff --git a/net/minecraft/world/entity/boss/wither/WitherBoss.java b/net/minecraft/world/entity/boss/wither/WitherBoss.java -index 356e7f28786643e9cf2288addc3dac2a1ff4d617..852a604d8c06e9871da4c28d60b44a5869258011 100644 +index 6669dd5ea935cce9d0df89986237aa068b1899ff..1f32d0d87727009a8ca671415159566c10f79f7e 100644 --- a/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/net/minecraft/world/entity/boss/wither/WitherBoss.java @@ -73,6 +73,7 @@ public class WitherBoss extends Monster implements RangedAttackMob { @@ -2945,10 +2923,10 @@ index 356e7f28786643e9cf2288addc3dac2a1ff4d617..852a604d8c06e9871da4c28d60b44a58 public WitherBoss(final EntityType type, final Level level) { super(type, level); -- this.moveControl = new FlyingMoveControl(this, 10, false); +- this.moveControl = new FlyingMoveControl<>(this, 10, false); + // Purpur start - Ridables -+ this.purpurController = new org.purpurmc.purpur.controller.FlyingWithSpacebarMoveControllerWASD(this, 0.1F); -+ this.moveControl = new FlyingMoveControl(this, 10, false) { ++ this.purpurController = new org.purpurmc.purpur.controller.FlyingWithSpacebarMoveControllerWASD<>(this, 0.1F); ++ this.moveControl = new FlyingMoveControl<>(this, 10, false) { + @Override + public void tick() { + if (mob.getRider() != null && mob.isControllable()) { @@ -3307,10 +3285,10 @@ index 4811c0607acbdf0e8f74327542560b96c84f728b..e5f7d276c083cdb78d2f420c03be1b08 } } diff --git a/net/minecraft/world/entity/monster/ElderGuardian.java b/net/minecraft/world/entity/monster/ElderGuardian.java -index ed994bae12ccf0500fb01ca84d40177b067b9ac2..b86f600b1101fe1fc9f7cac5cc47c3f048e0f885 100644 +index b3d0dc020027c626b6e9661a8d54095385c2f8b6..f27035be70e05dddb17944f0b461de8b506490d6 100644 --- a/net/minecraft/world/entity/monster/ElderGuardian.java +++ b/net/minecraft/world/entity/monster/ElderGuardian.java -@@ -31,6 +31,18 @@ public class ElderGuardian extends Guardian { +@@ -32,6 +32,18 @@ public class ElderGuardian extends Guardian { } } @@ -3425,11 +3403,11 @@ index c5957be3e49710ac7d03cf5f1362d8745889fc16..8405358d2221d76bc0949047fcc6f17f this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); } diff --git a/net/minecraft/world/entity/monster/Ghast.java b/net/minecraft/world/entity/monster/Ghast.java -index f5b023651d6c3b21d3925856b5f851d879237381..0d40b789dc426c42aca47c01b4db57fb2b282f0d 100644 +index f526dcb981a929b8917cda926b1d6c8c96f4681a..7e843a144900d8d5c95848ce32904432502a18e6 100644 --- a/net/minecraft/world/entity/monster/Ghast.java +++ b/net/minecraft/world/entity/monster/Ghast.java @@ -53,11 +53,35 @@ public class Ghast extends Mob implements Enemy { - this.moveControl = new Ghast.GhastMoveControl(this, false, () -> false); + this.moveControl = new Ghast.GhastMoveControl<>(this, false, () -> false); } + // Purpur start - Ridables @@ -3484,12 +3462,12 @@ index f5b023651d6c3b21d3925856b5f851d879237381..0d40b789dc426c42aca47c01b4db57fb } } -- public static class GhastMoveControl extends MoveControl { -+ public static class GhastMoveControl extends org.purpurmc.purpur.controller.FlyingMoveControllerWASD { // Purpur - Ridables - private final Mob ghast; +- public static class GhastMoveControl extends MoveControl { ++ public static class GhastMoveControl extends org.purpurmc.purpur.controller.FlyingMoveControllerWASD { // Purpur - Ridables private int floatDuration; private final boolean careful; -@@ -251,7 +284,7 @@ public class Ghast extends Mob implements Enemy { + private final BooleanSupplier shouldBeStopped; +@@ -249,7 +282,7 @@ public class Ghast extends Mob implements Enemy { } @Override @@ -3497,7 +3475,7 @@ index f5b023651d6c3b21d3925856b5f851d879237381..0d40b789dc426c42aca47c01b4db57fb + public void vanillaTick() { // Purpur - Ridables if (this.shouldBeStopped.getAsBoolean()) { this.operation = MoveControl.Operation.WAIT; - this.ghast.stopInPlace(); + this.mob.stopInPlace(); diff --git a/net/minecraft/world/entity/monster/Giant.java b/net/minecraft/world/entity/monster/Giant.java index 5f8074c93d2ad3d163bb416b16711d82edd7dacc..1b7a75a2be45928093382fa2f2da079ffc5d190d 100644 --- a/net/minecraft/world/entity/monster/Giant.java @@ -3533,13 +3511,13 @@ index 5f8074c93d2ad3d163bb416b16711d82edd7dacc..1b7a75a2be45928093382fa2f2da079f return Monster.createMonsterAttributes() .add(Attributes.MAX_HEALTH, 100.0) diff --git a/net/minecraft/world/entity/monster/Guardian.java b/net/minecraft/world/entity/monster/Guardian.java -index 45f972568e2b0aa16ca19f02dff7a790c694985f..6ad546f033919c6f0ba1091222a7af0f365fabb0 100644 +index a22a5b20b4ceb666e09aea74882362cc9c5af758..af865e3a6549f008826ed7469b2ecb4c92598863 100644 --- a/net/minecraft/world/entity/monster/Guardian.java +++ b/net/minecraft/world/entity/monster/Guardian.java @@ -65,14 +65,35 @@ public class Guardian extends Monster { this.xpReward = 10; this.setPathfindingMalus(PathType.WATER, 0.0F); - this.moveControl = new Guardian.GuardianMoveControl(this); + this.moveControl = new Guardian.GuardianMoveControl<>(this); + // Purpur start - Ridables + this.lookControl = new org.purpurmc.purpur.controller.LookControllerWASD(this) { + @Override @@ -3580,7 +3558,7 @@ index 45f972568e2b0aa16ca19f02dff7a790c694985f..6ad546f033919c6f0ba1091222a7af0f this.targetSelector.addGoal(1, new NearestAttackableTargetGoal<>(this, LivingEntity.class, 10, true, false, new Guardian.GuardianAttackSelector(this))); } -@@ -344,7 +366,7 @@ public class Guardian extends Monster { +@@ -341,7 +363,7 @@ public class Guardian extends Monster { @Override protected void travelInWater(final Vec3 input, final double baseGravity, final boolean isFalling, final double oldY) { @@ -3589,17 +3567,14 @@ index 45f972568e2b0aa16ca19f02dff7a790c694985f..6ad546f033919c6f0ba1091222a7af0f this.move(MoverType.SELF, this.getDeltaMovement()); this.setDeltaMovement(this.getDeltaMovement().scale(0.9)); if (!this.isMoving() && this.getTarget() == null) { -@@ -449,7 +471,7 @@ public class Guardian extends Monster { +@@ -446,13 +468,22 @@ public class Guardian extends Monster { } } -- private static class GuardianMoveControl extends MoveControl { -+ private static class GuardianMoveControl extends org.purpurmc.purpur.controller.WaterMoveControllerWASD { // Purpur - Ridables - private final Guardian guardian; - - public GuardianMoveControl(final Guardian guardian) { -@@ -457,8 +479,17 @@ public class Guardian extends Monster { - this.guardian = guardian; +- private static class GuardianMoveControl extends MoveControl { ++ private static class GuardianMoveControl extends org.purpurmc.purpur.controller.WaterMoveControllerWASD { // Purpur - Ridables + public GuardianMoveControl(final T guardian) { + super(guardian); } + // Purpur start - Ridables @@ -3607,68 +3582,27 @@ index 45f972568e2b0aa16ca19f02dff7a790c694985f..6ad546f033919c6f0ba1091222a7af0f - public void tick() { + public void purpurTick(Player rider) { + super.purpurTick(rider); -+ guardian.setDeltaMovement(guardian.getDeltaMovement().add(0.0D, 0.005D, 0.0D)); -+ guardian.setMoving(guardian.getForwardMot() > 0.0F); // control tail speed ++ this.mob.setDeltaMovement(this.mob.getDeltaMovement().add(0.0D, 0.005D, 0.0D)); ++ this.mob.setMoving(this.mob.getForwardMot() > 0.0F); // control tail speed + } + // Purpur end - Ridables + + @Override + public void vanillaTick() { // Purpur - Ridables - if (this.operation == MoveControl.Operation.MOVE_TO && !this.guardian.getNavigation().isDone()) { - Vec3 delta = new Vec3(this.wantedX - this.guardian.getX(), this.wantedY - this.guardian.getY(), this.wantedZ - this.guardian.getZ()); + if (this.operation == MoveControl.Operation.MOVE_TO && !this.mob.getNavigation().isDone()) { + Vec3 delta = new Vec3(this.wantedX - this.mob.getX(), this.wantedY - this.mob.getY(), this.wantedZ - this.mob.getZ()); double length = delta.length(); -@@ -468,7 +499,7 @@ public class Guardian extends Monster { +@@ -462,7 +493,7 @@ public class Guardian extends Monster { float yRotD = (float)(Mth.atan2(delta.z, delta.x) * 180.0F / (float)Math.PI) - 90.0F; - this.guardian.setYRot(this.rotlerp(this.guardian.getYRot(), yRotD, 90.0F)); - this.guardian.yBodyRot = this.guardian.getYRot(); -- float targetSpeed = (float)(this.speedModifier * this.guardian.getAttributeValue(Attributes.MOVEMENT_SPEED)); -+ float targetSpeed = (float)(this.getSpeedModifier() * this.guardian.getAttributeValue(Attributes.MOVEMENT_SPEED)); // Purpur - Ridables - float newSpeed = Mth.lerp(0.125F, this.guardian.getSpeed(), targetSpeed); - this.guardian.setSpeed(newSpeed); - double push = Math.sin((this.guardian.tickCount + this.guardian.getId()) * 0.5) * 0.05; -diff --git a/net/minecraft/world/entity/monster/MagmaCube.java b/net/minecraft/world/entity/monster/MagmaCube.java -index f6021d3e41bcf7c65c708f9937bafafecea34ce3..600da11f46673177a0ff1f56c93a60d94df40025 100644 ---- a/net/minecraft/world/entity/monster/MagmaCube.java -+++ b/net/minecraft/world/entity/monster/MagmaCube.java -@@ -24,6 +24,28 @@ public class MagmaCube extends Slime { - super(type, level); - } - -+ // Purpur start - Ridables -+ @Override -+ public boolean isRidable() { -+ return level().purpurConfig.magmaCubeRidable; -+ } -+ -+ @Override -+ public boolean dismountsUnderwater() { -+ return level().purpurConfig.useDismountsUnderwaterTag ? super.dismountsUnderwater() : !level().purpurConfig.magmaCubeRidableInWater; -+ } -+ -+ @Override -+ public boolean isControllable() { -+ return level().purpurConfig.magmaCubeControllable; -+ } -+ -+ @Override -+ public float getJumpPower() { -+ return 0.42F * this.getBlockJumpFactor(); // from EntityLiving -+ } -+ // Purpur end - Ridables -+ - public static AttributeSupplier.Builder createAttributes() { - return Monster.createMonsterAttributes().add(Attributes.MOVEMENT_SPEED, 0.2F); - } -@@ -76,6 +98,7 @@ public class MagmaCube extends Slime { - float sizeJumpBoostPower = this.getSize() * 0.1F; - this.setDeltaMovement(movement.x, this.getJumpPower() + sizeJumpBoostPower, movement.z); - this.needsSync = true; -+ this.actualJump = false; // Purpur - Ridables - } - - @Override + this.mob.setYRot(this.rotlerp(this.mob.getYRot(), yRotD, 90.0F)); + this.mob.yBodyRot = this.mob.getYRot(); +- float targetSpeed = (float)(this.speedModifier * this.mob.getAttributeValue(Attributes.MOVEMENT_SPEED)); ++ float targetSpeed = (float)(this.getSpeedModifier() * this.mob.getAttributeValue(Attributes.MOVEMENT_SPEED)); // Purpur - Ridables + float newSpeed = Mth.lerp(0.125F, this.mob.getSpeed(), targetSpeed); + this.mob.setSpeed(newSpeed); + double push = Math.sin((this.mob.tickCount + this.mob.getId()) * 0.5) * 0.05; diff --git a/net/minecraft/world/entity/monster/Phantom.java b/net/minecraft/world/entity/monster/Phantom.java -index c3b6aab3eabb4b7efef17979a28246143d71e896..961a874d3eeee40d4c45ae511412ac0167ae54ac 100644 +index 38a2c84a9f7c3e36b48c0992d00fac244600e654..6ad191adcbb9af4610fc86902cacf20977f31d6a 100644 --- a/net/minecraft/world/entity/monster/Phantom.java +++ b/net/minecraft/world/entity/monster/Phantom.java @@ -61,6 +61,52 @@ public class Phantom extends Mob implements Enemy { @@ -3782,11 +3716,11 @@ index c3b6aab3eabb4b7efef17979a28246143d71e896..961a874d3eeee40d4c45ae511412ac01 } } -- private class PhantomMoveControl extends MoveControl { -+ private class PhantomMoveControl extends org.purpurmc.purpur.controller.FlyingMoveControllerWASD { // Purpur - Ridables +- private class PhantomMoveControl extends MoveControl { ++ private class PhantomMoveControl extends org.purpurmc.purpur.controller.FlyingMoveControllerWASD { // Purpur - Ridables private float speed = 0.1F; - public PhantomMoveControl(final Mob mob) { + public PhantomMoveControl(final T mob) { super(mob); } @@ -3808,10 +3742,10 @@ index c3b6aab3eabb4b7efef17979a28246143d71e896..961a874d3eeee40d4c45ae511412ac01 Phantom.this.setYRot(Phantom.this.getYRot() + 180.0F); this.speed = 0.1F; diff --git a/net/minecraft/world/entity/monster/Ravager.java b/net/minecraft/world/entity/monster/Ravager.java -index c88545ac6fc99e5d055126ef39f799f9caef257b..1d02a5a037cb50844419ef41227be2427cdff4ca 100644 +index 8230efa5a42fedf977f065fd4e0b8503edb04a46..99490398f72e91c0d3dc9d2a3dd82fb6f49734d5 100644 --- a/net/minecraft/world/entity/monster/Ravager.java +++ b/net/minecraft/world/entity/monster/Ravager.java -@@ -70,15 +70,40 @@ public class Ravager extends Raider { +@@ -71,15 +71,40 @@ public class Ravager extends Raider { this.setPathfindingMalus(PathType.LEAVES, 0.0F); } @@ -3852,7 +3786,7 @@ index c88545ac6fc99e5d055126ef39f799f9caef257b..1d02a5a037cb50844419ef41227be242 this.targetSelector.addGoal(2, new HurtByTargetGoal(this, Raider.class).setAlertOthers()); this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, Player.class, true)); this.targetSelector.addGoal(4, new NearestAttackableTargetGoal<>(this, AbstractVillager.class, true, (target, level) -> !target.isBaby())); -@@ -135,7 +160,7 @@ public class Ravager extends Raider { +@@ -136,7 +161,7 @@ public class Ravager extends Raider { @Override public void aiStep() { super.aiStep(); @@ -3862,7 +3796,7 @@ index c88545ac6fc99e5d055126ef39f799f9caef257b..1d02a5a037cb50844419ef41227be242 this.getAttribute(Attributes.MOVEMENT_SPEED).setBaseValue(0.0); } else { diff --git a/net/minecraft/world/entity/monster/Shulker.java b/net/minecraft/world/entity/monster/Shulker.java -index 1f7a8b12a37b42fa38cb7136cd9ef5b3bab45d6b..746dfa496dc6cde62ab3c890aa6fbdbe68086ea9 100644 +index abbf4c63e57604e7f1428182c2e48e9aa917bfb0..8ef97a74c5c2d4caa033c93cf553ba885605d052 100644 --- a/net/minecraft/world/entity/monster/Shulker.java +++ b/net/minecraft/world/entity/monster/Shulker.java @@ -109,12 +109,31 @@ public class Shulker extends AbstractGolem implements Enemy { @@ -3897,7 +3831,7 @@ index 1f7a8b12a37b42fa38cb7136cd9ef5b3bab45d6b..746dfa496dc6cde62ab3c890aa6fbdbe this.targetSelector.addGoal(1, new HurtByTargetGoal(this, this.getClass()).setAlertOthers()); this.targetSelector.addGoal(2, new Shulker.ShulkerNearestAttackGoal(this)); this.targetSelector.addGoal(3, new Shulker.ShulkerDefenseAttackGoal(this)); -@@ -709,7 +728,7 @@ public class Shulker extends AbstractGolem implements Enemy { +@@ -721,7 +740,7 @@ public class Shulker extends AbstractGolem implements Enemy { } } @@ -3907,7 +3841,7 @@ index 1f7a8b12a37b42fa38cb7136cd9ef5b3bab45d6b..746dfa496dc6cde62ab3c890aa6fbdbe super(mob); } diff --git a/net/minecraft/world/entity/monster/Silverfish.java b/net/minecraft/world/entity/monster/Silverfish.java -index 95896f9276f3d4afa8141f2beed06974240a1318..4bda4d98e94f906cd86eafd412dd393b534ff8df 100644 +index 773b4b6f0fcf68295bdb63ef84156fe7ae3a105b..6aa67e7857cf205d436b451387083af75e9ece20 100644 --- a/net/minecraft/world/entity/monster/Silverfish.java +++ b/net/minecraft/world/entity/monster/Silverfish.java @@ -38,14 +38,33 @@ public class Silverfish extends Monster { @@ -3944,135 +3878,11 @@ index 95896f9276f3d4afa8141f2beed06974240a1318..4bda4d98e94f906cd86eafd412dd393b this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); } -diff --git a/net/minecraft/world/entity/monster/Slime.java b/net/minecraft/world/entity/monster/Slime.java -index 04f0c15a891c86ab42fe5aa719cb1357f68dd0f6..47c6dfee0254c4ccd62ed4ff584a78234284a815 100644 ---- a/net/minecraft/world/entity/monster/Slime.java -+++ b/net/minecraft/world/entity/monster/Slime.java -@@ -60,6 +60,7 @@ public class Slime extends Mob implements Enemy { - public float oSquish; - private boolean wasOnGround = false; - private boolean canWander = true; // Paper - Slime pathfinder events -+ protected boolean actualJump; // Purpur - Ridables - - public Slime(final EntityType type, final Level level) { - super(type, level); -@@ -67,12 +68,48 @@ public class Slime extends Mob implements Enemy { - this.moveControl = new Slime.SlimeMoveControl(this); - } - -+ // Purpur start - Ridables -+ @Override -+ public boolean isRidable() { -+ return level().purpurConfig.slimeRidable; -+ } -+ -+ @Override -+ public boolean dismountsUnderwater() { -+ return level().purpurConfig.useDismountsUnderwaterTag ? super.dismountsUnderwater() : !level().purpurConfig.slimeRidableInWater; -+ } -+ -+ @Override -+ public boolean isControllable() { -+ return level().purpurConfig.slimeControllable; -+ } -+ -+ @Override -+ public float getJumpPower() { -+ float height = super.getJumpPower(); -+ return getRider() != null && this.isControllable() && actualJump ? height * 1.5F : height; -+ } -+ -+ @Override -+ public boolean onSpacebar() { -+ if (onGround && getRider() != null && this.isControllable()) { -+ actualJump = true; -+ if (getRider().getForwardMot() == 0 || getRider().getStrafeMot() == 0) { -+ jumpFromGround(); // jump() here if not moving -+ } -+ } -+ return true; // do not jump() in wasd controller, let vanilla controller handle -+ } -+ // Purpur end - Ridables -+ - @Override - protected void registerGoals() { -+ this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables - this.goalSelector.addGoal(1, new Slime.SlimeFloatGoal(this)); - this.goalSelector.addGoal(2, new Slime.SlimeAttackGoal(this)); - this.goalSelector.addGoal(3, new Slime.SlimeRandomDirectionGoal(this)); - this.goalSelector.addGoal(5, new Slime.SlimeKeepOnJumpingGoal(this)); -+ this.targetSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables - this.targetSelector - .addGoal(1, new NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, (target, level) -> Math.abs(target.getY() - this.getY()) <= 4.0)); - this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, IronGolem.class, true)); -@@ -356,6 +393,7 @@ public class Slime extends Mob implements Enemy { - Vec3 movement = this.getDeltaMovement(); - this.setDeltaMovement(movement.x, this.getJumpPower(), movement.z); - this.needsSync = true; -+ this.actualJump = false; // Purpur - Ridables - } - - @Override -@@ -519,7 +557,7 @@ public class Slime extends Mob implements Enemy { - } - } - -- private static class SlimeMoveControl extends MoveControl { -+ private static class SlimeMoveControl extends org.purpurmc.purpur.controller.MoveControllerWASD { // Purpur - Ridables - private float yRot; - private int jumpDelay; - private final Slime slime; -@@ -537,21 +575,33 @@ public class Slime extends Mob implements Enemy { - } - - public void setWantedMovement(final double speedModifier) { -- this.speedModifier = speedModifier; -+ this.setSpeedModifier(speedModifier); // Purpur - Ridables - this.operation = MoveControl.Operation.MOVE_TO; - } - - @Override - public void tick() { -+ // Purpur start - Ridables -+ if (slime.getRider() != null && slime.isControllable()) { -+ purpurTick(slime.getRider()); -+ if (slime.getForwardMot() != 0 || slime.getStrafeMot() != 0) { -+ if (jumpDelay > 10) { -+ jumpDelay = 6; -+ } -+ } else { -+ jumpDelay = 20; -+ } -+ } else { -+ // Purpur end - Ridables - this.mob.setYRot(this.rotlerp(this.mob.getYRot(), this.yRot, 90.0F)); - this.mob.yHeadRot = this.mob.getYRot(); - this.mob.yBodyRot = this.mob.getYRot(); -- if (this.operation != MoveControl.Operation.MOVE_TO) { -+ } if ((slime.getRider() == null || !slime.isControllable()) && this.operation != MoveControl.Operation.MOVE_TO) { // Purpur - Ridables - this.mob.setZza(0.0F); - } else { - this.operation = MoveControl.Operation.WAIT; - if (this.mob.onGround()) { -- this.mob.setSpeed((float)(this.speedModifier * this.mob.getAttributeValue(Attributes.MOVEMENT_SPEED))); -+ this.mob.setSpeed((float)(this.getSpeedModifier() * this.mob.getAttributeValue(Attributes.MOVEMENT_SPEED) * (slime.getRider() != null && slime.isControllable() && (slime.getRider().getForwardMot() != 0 || slime.getRider().getStrafeMot() != 0) ? 2.0D : 1.0D))); // Purpur - Ridables - if (this.jumpDelay-- <= 0) { - this.jumpDelay = this.slime.getJumpDelay(); - if (this.isAggressive) { -@@ -568,7 +618,7 @@ public class Slime extends Mob implements Enemy { - this.mob.setSpeed(0.0F); - } - } else { -- this.mob.setSpeed((float)(this.speedModifier * this.mob.getAttributeValue(Attributes.MOVEMENT_SPEED))); -+ this.mob.setSpeed((float)(this.getSpeedModifier() * this.mob.getAttributeValue(Attributes.MOVEMENT_SPEED) * (slime.getRider() != null && slime.isControllable() && (slime.getRider().getForwardMot() != 0 || slime.getRider().getStrafeMot() != 0) ? 2.0D : 1.0D))); // Purpur - Ridables - } - } - } diff --git a/net/minecraft/world/entity/monster/Strider.java b/net/minecraft/world/entity/monster/Strider.java -index 9bf12a67f7175ae7c7dadee84a5ab0de5cae43e8..039b83311bee193038968bf44c0bcbc98c5579df 100644 +index ea4a025b6054fc43d9b5272cac6055c475875d3e..cd35797eff1ec2881e72b0fc44bd9a098d795a74 100644 --- a/net/minecraft/world/entity/monster/Strider.java +++ b/net/minecraft/world/entity/monster/Strider.java -@@ -93,6 +93,23 @@ public class Strider extends Animal implements ItemSteerable { +@@ -99,6 +99,23 @@ public class Strider extends Animal implements ItemSteerable { this.setPathfindingMalus(PathType.FIRE, 0.0F); } @@ -4096,7 +3906,7 @@ index 9bf12a67f7175ae7c7dadee84a5ab0de5cae43e8..039b83311bee193038968bf44c0bcbc9 public static boolean checkStriderSpawnRules( final EntityType ignoredType, final LevelAccessor level, -@@ -143,6 +160,7 @@ public class Strider extends Animal implements ItemSteerable { +@@ -149,6 +166,7 @@ public class Strider extends Animal implements ItemSteerable { @Override protected void registerGoals() { this.goalSelector.addGoal(1, new PanicGoal(this, 1.65)); @@ -4104,7 +3914,7 @@ index 9bf12a67f7175ae7c7dadee84a5ab0de5cae43e8..039b83311bee193038968bf44c0bcbc9 this.goalSelector.addGoal(2, new BreedGoal(this, 1.0)); this.temptGoal = new TemptGoal(this, 1.4, i -> i.is(ItemTags.STRIDER_TEMPT_ITEMS), false); this.goalSelector.addGoal(3, this.temptGoal); -@@ -422,7 +440,7 @@ public class Strider extends Animal implements ItemSteerable { +@@ -433,7 +451,7 @@ public class Strider extends Animal implements ItemSteerable { InteractionResult interactionResult = super.mobInteract(player, hand); if (!interactionResult.consumesAction()) { ItemStack itemStack = player.getItemInHand(hand); @@ -4114,10 +3924,10 @@ index 9bf12a67f7175ae7c7dadee84a5ab0de5cae43e8..039b83311bee193038968bf44c0bcbc9 if (hasFood && !this.isSilent()) { diff --git a/net/minecraft/world/entity/monster/Vex.java b/net/minecraft/world/entity/monster/Vex.java -index e23aa0c86cd4070628f29b51eb4f804bb63a4f27..0621c1a46c392b8fcf5235f7483d0d8a0ac598ed 100644 +index a03067833e27fb5b97b8c77a1ed4386338c16a53..3ddf4ba1d809e62e4a1f7cc54f44738b1c129145 100644 --- a/net/minecraft/world/entity/monster/Vex.java +++ b/net/minecraft/world/entity/monster/Vex.java -@@ -58,6 +58,50 @@ public class Vex extends Monster implements TraceableEntity { +@@ -60,6 +60,50 @@ public class Vex extends Monster implements TraceableEntity, OwnableEntity { this.xpReward = 3; } @@ -4168,7 +3978,7 @@ index e23aa0c86cd4070628f29b51eb4f804bb63a4f27..0621c1a46c392b8fcf5235f7483d0d8a @Override public boolean isFlapping() { return this.tickCount % TICKS_PER_FLAP == 0; -@@ -70,7 +114,7 @@ public class Vex extends Monster implements TraceableEntity { +@@ -72,7 +116,7 @@ public class Vex extends Monster implements TraceableEntity, OwnableEntity { @Override public void tick() { @@ -4177,7 +3987,7 @@ index e23aa0c86cd4070628f29b51eb4f804bb63a4f27..0621c1a46c392b8fcf5235f7483d0d8a super.tick(); this.noPhysics = false; this.setNoGravity(true); -@@ -84,17 +128,19 @@ public class Vex extends Monster implements TraceableEntity { +@@ -86,17 +130,19 @@ public class Vex extends Monster implements TraceableEntity, OwnableEntity { protected void registerGoals() { super.registerGoals(); this.goalSelector.addGoal(0, new FloatGoal(this)); @@ -4198,13 +4008,13 @@ index e23aa0c86cd4070628f29b51eb4f804bb63a4f27..0621c1a46c392b8fcf5235f7483d0d8a } @Override -@@ -293,13 +339,13 @@ public class Vex extends Monster implements TraceableEntity { +@@ -298,13 +344,13 @@ public class Vex extends Monster implements TraceableEntity, OwnableEntity { } } -- private class VexMoveControl extends MoveControl { -+ private class VexMoveControl extends org.purpurmc.purpur.controller.FlyingMoveControllerWASD { // Purpur - Ridables - public VexMoveControl(final Vex vex) { +- private class VexMoveControl extends MoveControl { ++ private class VexMoveControl extends org.purpurmc.purpur.controller.FlyingMoveControllerWASD { // Purpur - Ridables + public VexMoveControl(final T vex) { super(vex); } @@ -4214,7 +4024,7 @@ index e23aa0c86cd4070628f29b51eb4f804bb63a4f27..0621c1a46c392b8fcf5235f7483d0d8a if (this.operation == MoveControl.Operation.MOVE_TO) { Vec3 delta = new Vec3(this.wantedX - Vex.this.getX(), this.wantedY - Vex.this.getY(), this.wantedZ - Vex.this.getZ()); double deltaLength = delta.length(); -@@ -307,7 +353,7 @@ public class Vex extends Monster implements TraceableEntity { +@@ -312,7 +358,7 @@ public class Vex extends Monster implements TraceableEntity, OwnableEntity { this.operation = MoveControl.Operation.WAIT; Vex.this.setDeltaMovement(Vex.this.getDeltaMovement().scale(0.5)); } else { @@ -4224,10 +4034,10 @@ index e23aa0c86cd4070628f29b51eb4f804bb63a4f27..0621c1a46c392b8fcf5235f7483d0d8a Vec3 movement = Vex.this.getDeltaMovement(); Vex.this.setYRot(-((float)Mth.atan2(movement.x, movement.z)) * Mth.RAD_TO_DEG); diff --git a/net/minecraft/world/entity/monster/Witch.java b/net/minecraft/world/entity/monster/Witch.java -index 205b55db821ab81883c23c194cdb12cd57061fb9..7551dcf0bd8d0ff6deffb298211788d5ff91d93b 100644 +index b259b84556f0759dff1e1587b09995cbf80480e3..0d08901296fa2c7acf0b9ad2e0ef217c4b0ab874 100644 --- a/net/minecraft/world/entity/monster/Witch.java +++ b/net/minecraft/world/entity/monster/Witch.java -@@ -57,6 +57,23 @@ public class Witch extends Raider implements RangedAttackMob { +@@ -58,6 +58,23 @@ public class Witch extends Raider implements RangedAttackMob { super(type, level); } @@ -4251,7 +4061,7 @@ index 205b55db821ab81883c23c194cdb12cd57061fb9..7551dcf0bd8d0ff6deffb298211788d5 @Override protected void registerGoals() { super.registerGoals(); -@@ -65,10 +82,12 @@ public class Witch extends Raider implements RangedAttackMob { +@@ -66,10 +83,12 @@ public class Witch extends Raider implements RangedAttackMob { ); this.attackPlayersGoal = new NearestAttackableWitchTargetGoal<>(this, Player.class, 10, true, false, null); this.goalSelector.addGoal(1, new FloatGoal(this)); @@ -4265,10 +4075,10 @@ index 205b55db821ab81883c23c194cdb12cd57061fb9..7551dcf0bd8d0ff6deffb298211788d5 this.targetSelector.addGoal(2, this.healRaidersGoal); this.targetSelector.addGoal(3, this.attackPlayersGoal); diff --git a/net/minecraft/world/entity/monster/Zoglin.java b/net/minecraft/world/entity/monster/Zoglin.java -index 95e5773fe060bdc42847fdf56801eb4fe1494c56..1a5e3a38671602e097e1e7f00d8f80e46b1596a0 100644 +index c9091f9aed31ce23371539cb44695732b2ae4e9b..41cd8cef18309f1dcfdb5c45f6733bad10587303 100644 --- a/net/minecraft/world/entity/monster/Zoglin.java +++ b/net/minecraft/world/entity/monster/Zoglin.java -@@ -76,6 +76,23 @@ public class Zoglin extends Monster implements HoglinBase { +@@ -84,6 +84,23 @@ public class Zoglin extends Monster implements HoglinBase { this.xpReward = 5; } @@ -4292,7 +4102,7 @@ index 95e5773fe060bdc42847fdf56801eb4fe1494c56..1a5e3a38671602e097e1e7f00d8f80e4 @Override protected Brain makeBrain(final Brain.Packed packedBrain) { return BRAIN_PROVIDER.makeBrain(this, packedBrain); -@@ -227,6 +244,7 @@ public class Zoglin extends Monster implements HoglinBase { +@@ -240,6 +257,7 @@ public class Zoglin extends Monster implements HoglinBase { protected void customServerAiStep(final ServerLevel level) { ProfilerFiller profiler = Profiler.get(); profiler.push("zoglinBrain"); @@ -4301,10 +4111,10 @@ index 95e5773fe060bdc42847fdf56801eb4fe1494c56..1a5e3a38671602e097e1e7f00d8f80e4 profiler.pop(); this.updateActivity(); diff --git a/net/minecraft/world/entity/monster/breeze/Breeze.java b/net/minecraft/world/entity/monster/breeze/Breeze.java -index a58ad6176864c299725f5d51b3c239259f3b9c20..ec4d124b6a714d6b57d006ba70d838a35e62df75 100644 +index eaa7eb69bdc819228bbab05b053844f1578294ba..dd1a4c7ee396572269aa3dfec12f6b01018a66c3 100644 --- a/net/minecraft/world/entity/monster/breeze/Breeze.java +++ b/net/minecraft/world/entity/monster/breeze/Breeze.java -@@ -233,6 +233,7 @@ public class Breeze extends Monster { +@@ -234,6 +234,7 @@ public class Breeze extends Monster { protected void customServerAiStep(final ServerLevel level) { ProfilerFiller profiler = Profiler.get(); profiler.push("breezeBrain"); @@ -4313,7 +4123,7 @@ index a58ad6176864c299725f5d51b3c239259f3b9c20..ec4d124b6a714d6b57d006ba70d838a3 profiler.popPush("breezeActivityUpdate"); BreezeAi.updateActivity(this); diff --git a/net/minecraft/world/entity/monster/creaking/Creaking.java b/net/minecraft/world/entity/monster/creaking/Creaking.java -index 7e4910d8492dae511db604e52fe5dfa6373c76ee..fdbf9b64871c5cdb7ed9fa56c669bd77d1a19ac2 100644 +index 22ea080d8c793c8c1bb9163808271c28d48dd302..a63b919b08b2fba048a338fe24ae2a1b90c869bd 100644 --- a/net/minecraft/world/entity/monster/creaking/Creaking.java +++ b/net/minecraft/world/entity/monster/creaking/Creaking.java @@ -106,6 +106,29 @@ public class Creaking extends Monster { @@ -4366,26 +4176,223 @@ index 7e4910d8492dae511db604e52fe5dfa6373c76ee..fdbf9b64871c5cdb7ed9fa56c669bd77 } } -- private class CreakingMoveControl extends MoveControl { -+ private class CreakingMoveControl extends org.purpurmc.purpur.controller.MoveControllerWASD { // Purpur - Ridables - public CreakingMoveControl(final Creaking creaking) { +- private static class CreakingMoveControl extends MoveControl { ++ private static class CreakingMoveControl extends org.purpurmc.purpur.controller.MoveControllerWASD { // Purpur - Ridables + public CreakingMoveControl(final T creaking) { super(creaking); } @Override - public void tick() { + public void vanillaTick() { // Purpur - Ridables - if (Creaking.this.canMove()) { + if (this.mob.canMove()) { - super.tick(); + super.vanillaTick(); // Purpur - Ridables } } } +diff --git a/net/minecraft/world/entity/monster/cubemob/AbstractCubeMob.java b/net/minecraft/world/entity/monster/cubemob/AbstractCubeMob.java +index 0b9bf94d6192235d916b8c335cafed3280286afe..d01d020a562493ba0c429d2c647bf13fe729dbe0 100644 +--- a/net/minecraft/world/entity/monster/cubemob/AbstractCubeMob.java ++++ b/net/minecraft/world/entity/monster/cubemob/AbstractCubeMob.java +@@ -50,6 +50,7 @@ public abstract class AbstractCubeMob extends AgeableMob { + public float oSquish; + private boolean wasOnGround = false; + private boolean canWander = true; // Paper - Slime pathfinder events ++ protected boolean actualJump; // Purpur - Ridables + + protected AbstractCubeMob(final EntityType type, final Level level) { + super(type, level); +@@ -59,6 +60,10 @@ public abstract class AbstractCubeMob extends AgeableMob { + + @Override + protected void registerGoals() { ++ // Purpur start - Ridables ++ this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); ++ this.targetSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); ++ // Purpur end - Ridables + this.goalSelector.addGoal(1, new AbstractCubeMob.CubeMobFloatGoal(this)); + this.goalSelector.addGoal(4, new AbstractCubeMob.CubeMobRandomDirectionGoal(this)); + this.goalSelector.addGoal(5, new AbstractCubeMob.CubeMobKeepOnJumpingGoal(this)); +@@ -486,7 +491,7 @@ public abstract class AbstractCubeMob extends AgeableMob { + } + } + +- protected static class CubeMobMoveControl extends MoveControl { ++ protected static class CubeMobMoveControl extends org.purpurmc.purpur.controller.MoveControllerWASD { // Purpur - Ridables + private float yRot; + private int jumpDelay; + private boolean isAggressive; +@@ -502,21 +507,33 @@ public abstract class AbstractCubeMob extends AgeableMob { + } + + public void setWantedMovement(final double speedModifier) { +- this.speedModifier = speedModifier; ++ this.setSpeedModifier(speedModifier); // Purpur - Ridables + this.operation = MoveControl.Operation.MOVE_TO; + } + + @Override + public void tick() { ++ // Purpur start - Ridables ++ if (this.mob.getRider() != null && this.mob.isControllable()) { ++ purpurTick(this.mob.getRider()); ++ if (this.mob.getForwardMot() != 0 || this.mob.getStrafeMot() != 0) { ++ if (jumpDelay > 10) { ++ jumpDelay = 6; ++ } ++ } else { ++ jumpDelay = 20; ++ } ++ } else { ++ // Purpur end - Ridables + this.mob.setYRot(this.rotlerp(this.mob.getYRot(), this.yRot, 90.0F)); + this.mob.yHeadRot = this.mob.getYRot(); + this.mob.yBodyRot = this.mob.getYRot(); +- if (this.operation != MoveControl.Operation.MOVE_TO) { ++ } if ((this.mob.getRider() == null || !this.mob.isControllable()) && this.operation != MoveControl.Operation.MOVE_TO) { // Purpur - Ridables + this.mob.setZza(0.0F); + } else { + this.operation = MoveControl.Operation.WAIT; + if (this.mob.onGround()) { +- this.mob.setSpeed((float)(this.speedModifier * this.mob.getAttributeValue(Attributes.MOVEMENT_SPEED))); ++ this.mob.setSpeed((float)(this.getSpeedModifier() * this.mob.getAttributeValue(Attributes.MOVEMENT_SPEED) * (this.mob.getRider() != null && this.mob.isControllable() && (this.mob.getRider().getForwardMot() != 0 || this.mob.getRider().getStrafeMot() != 0) ? 2.0D : 1.0D))); // Purpur - Ridables + if (this.jumpDelay-- <= 0) { + this.jumpDelay = this.mob.getJumpDelay(); + if (this.isAggressive) { +@@ -533,7 +550,7 @@ public abstract class AbstractCubeMob extends AgeableMob { + this.mob.setSpeed(0.0F); + } + } else { +- this.mob.setSpeed((float)(this.speedModifier * this.mob.getAttributeValue(Attributes.MOVEMENT_SPEED))); ++ this.mob.setSpeed((float)(this.getSpeedModifier() * this.mob.getAttributeValue(Attributes.MOVEMENT_SPEED) * (this.mob.getRider() != null && this.mob.isControllable() && (this.mob.getRider().getForwardMot() != 0 || this.mob.getRider().getStrafeMot() != 0) ? 2.0D : 1.0D))); // Purpur - Ridables + } + } + } +diff --git a/net/minecraft/world/entity/monster/cubemob/MagmaCube.java b/net/minecraft/world/entity/monster/cubemob/MagmaCube.java +index 547d9304d4c85efefbf7984d0d519307af727edd..bb36ce235aac8d2cf9e4b5dc1328991f65353d20 100644 +--- a/net/minecraft/world/entity/monster/cubemob/MagmaCube.java ++++ b/net/minecraft/world/entity/monster/cubemob/MagmaCube.java +@@ -46,6 +46,28 @@ public class MagmaCube extends AbstractCubeMob implements Enemy { + this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, IronGolem.class, true)); + } + ++ // Purpur start - Ridables ++ @Override ++ public boolean isRidable() { ++ return level().purpurConfig.magmaCubeRidable; ++ } ++ ++ @Override ++ public boolean dismountsUnderwater() { ++ return level().purpurConfig.useDismountsUnderwaterTag ? super.dismountsUnderwater() : !level().purpurConfig.magmaCubeRidableInWater; ++ } ++ ++ @Override ++ public boolean isControllable() { ++ return level().purpurConfig.magmaCubeControllable; ++ } ++ ++ @Override ++ public float getJumpPower() { ++ return 0.42F * this.getBlockJumpFactor(); // from EntityLiving ++ } ++ // Purpur end - Ridables ++ + public static AttributeSupplier.Builder createAttributes() { + return Monster.createMonsterAttributes().add(Attributes.MOVEMENT_SPEED, 0.2F); + } +@@ -101,6 +123,7 @@ public class MagmaCube extends AbstractCubeMob implements Enemy { + float sizeJumpBoostPower = this.getSize() * 0.1F; + this.setDeltaMovement(movement.x, this.getJumpPower() + sizeJumpBoostPower, movement.z); + this.needsSync = true; ++ this.actualJump = false; // Purpur - Ridables + } + + @Override +diff --git a/net/minecraft/world/entity/monster/cubemob/Slime.java b/net/minecraft/world/entity/monster/cubemob/Slime.java +index 96776d23370736da3408e6a86ed89b7f3d686732..0ac7a442a0ea79f190aceb60b771d616b377e613 100644 +--- a/net/minecraft/world/entity/monster/cubemob/Slime.java ++++ b/net/minecraft/world/entity/monster/cubemob/Slime.java +@@ -45,6 +45,40 @@ public class Slime extends AbstractCubeMob implements Enemy { + this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, IronGolem.class, true)); + } + ++ // Purpur start - Ridables ++ @Override ++ public boolean isRidable() { ++ return level().purpurConfig.slimeRidable; ++ } ++ ++ @Override ++ public boolean dismountsUnderwater() { ++ return level().purpurConfig.useDismountsUnderwaterTag ? super.dismountsUnderwater() : !level().purpurConfig.slimeRidableInWater; ++ } ++ ++ @Override ++ public boolean isControllable() { ++ return level().purpurConfig.slimeControllable; ++ } ++ ++ @Override ++ public float getJumpPower() { ++ float height = super.getJumpPower(); ++ return getRider() != null && this.isControllable() && actualJump ? height * 1.5F : height; ++ } ++ ++ @Override ++ public boolean onSpacebar() { ++ if (onGround && getRider() != null && this.isControllable()) { ++ actualJump = true; ++ if (getRider().getForwardMot() == 0 || getRider().getStrafeMot() == 0) { ++ jumpFromGround(); // jump() here if not moving ++ } ++ } ++ return true; // do not jump() in wasd controller, let vanilla controller handle ++ } ++ // Purpur end - Ridables ++ + @Override + public SoundEvent getHurtSound(final DamageSource source) { + return this.isTiny() ? SoundEvents.SLIME_HURT_SMALL : SoundEvents.SLIME_HURT; +diff --git a/net/minecraft/world/entity/monster/cubemob/SulfurCube.java b/net/minecraft/world/entity/monster/cubemob/SulfurCube.java +index 6b89d25aa130c9b7fe7f6d27f1d5f393c2954778..601a54820df95a566cec6079715af166f912df70 100644 +--- a/net/minecraft/world/entity/monster/cubemob/SulfurCube.java ++++ b/net/minecraft/world/entity/monster/cubemob/SulfurCube.java +@@ -129,6 +129,28 @@ public class SulfurCube extends AbstractCubeMob implements Bucketable, Shearable + this.goalSelector.addGoal(3, new SulfurCube.SulfurCubeSearchForItemsGoal(this)); + } + ++ // Purpur start - Ridables ++ @Override ++ public boolean isRidable() { ++ return level().purpurConfig.sulfurCubeRidable; ++ } ++ ++ @Override ++ public boolean dismountsUnderwater() { ++ return level().purpurConfig.useDismountsUnderwaterTag ? super.dismountsUnderwater() : !level().purpurConfig.sulfurCubeRidableInWater; ++ } ++ ++ @Override ++ public boolean isControllable() { ++ return level().purpurConfig.sulfurCubeControllable; ++ } ++ ++ @Override ++ public float getJumpPower() { ++ return 0.42F * this.getBlockJumpFactor(); // from EntityLiving ++ } ++ // Purpur end - Ridables ++ + @Override + public boolean fromBucket() { + return this.entityData.get(FROM_BUCKET); diff --git a/net/minecraft/world/entity/monster/hoglin/Hoglin.java b/net/minecraft/world/entity/monster/hoglin/Hoglin.java -index e3f59999c9592af213b21afb43bcaddb94fd8279..7ba62badc9b832bdedbec5984421abfee242fa16 100644 +index a18738fb6fd94759b41c58db343ed3a0ec105340..0f2b6f8d17fe80cb07b0cc18d3501ae700427eda 100644 --- a/net/minecraft/world/entity/monster/hoglin/Hoglin.java +++ b/net/minecraft/world/entity/monster/hoglin/Hoglin.java -@@ -73,6 +73,23 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { +@@ -81,6 +81,23 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { this.xpReward = 5; } @@ -4409,7 +4416,7 @@ index e3f59999c9592af213b21afb43bcaddb94fd8279..7ba62badc9b832bdedbec5984421abfe @VisibleForTesting public void setTimeInOverworld(final int timeInOverworld) { this.timeInOverworld = timeInOverworld; -@@ -136,6 +153,7 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { +@@ -144,6 +161,7 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { protected void customServerAiStep(final ServerLevel level) { ProfilerFiller profiler = Profiler.get(); profiler.push("hoglinBrain"); @@ -4418,10 +4425,10 @@ index e3f59999c9592af213b21afb43bcaddb94fd8279..7ba62badc9b832bdedbec5984421abfe profiler.pop(); HoglinAi.updateActivity(this); diff --git a/net/minecraft/world/entity/monster/illager/Evoker.java b/net/minecraft/world/entity/monster/illager/Evoker.java -index 442940e8bbcd45271e71d91ecae9adbb0ef6fae2..2d8654f1b16ee3177466dc21aff7c2bdbce310a7 100644 +index 44a3f5a2f5fef29c542e7820acb2b7d36cfc63d4..ba8d47480a1927a28b13025bff6c785121dd13eb 100644 --- a/net/minecraft/world/entity/monster/illager/Evoker.java +++ b/net/minecraft/world/entity/monster/illager/Evoker.java -@@ -49,10 +49,28 @@ public class Evoker extends SpellcasterIllager { +@@ -50,10 +50,28 @@ public class Evoker extends SpellcasterIllager { this.xpReward = 10; } @@ -4450,7 +4457,7 @@ index 442940e8bbcd45271e71d91ecae9adbb0ef6fae2..2d8654f1b16ee3177466dc21aff7c2bd this.goalSelector.addGoal(1, new Evoker.EvokerCastingSpellGoal()); this.goalSelector.addGoal(2, new AvoidEntityGoal<>(this, Player.class, 8.0F, 0.6, 1.0)); this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, Creaking.class, 8.0F, 0.6, 1.0)); -@@ -62,6 +80,7 @@ public class Evoker extends SpellcasterIllager { +@@ -63,6 +81,7 @@ public class Evoker extends SpellcasterIllager { this.goalSelector.addGoal(8, new RandomStrollGoal(this, 0.6)); this.goalSelector.addGoal(9, new LookAtPlayerGoal(this, Player.class, 3.0F, 1.0F)); this.goalSelector.addGoal(10, new LookAtPlayerGoal(this, Mob.class, 8.0F)); @@ -4500,7 +4507,7 @@ index f4b93c3dd12d762f280c7b52af5d3b5f58cb9cef..9ea4745eb0d72c25ac5b89a6bfa5ba28 this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true).setUnseenMemoryTicks(300)); this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractVillager.class, false).setUnseenMemoryTicks(300)); diff --git a/net/minecraft/world/entity/monster/illager/Pillager.java b/net/minecraft/world/entity/monster/illager/Pillager.java -index 0385a6d602d80cb0f19b8ec4c982641c2f7e9f23..510a1d4e1e44bda60ee05f0799a8930403f3eb7e 100644 +index 26e179d146a3b363d0c96a6d113c613bbaf263b2..a0e926bedb5000a8e3d8e37207916cc06ad01090 100644 --- a/net/minecraft/world/entity/monster/illager/Pillager.java +++ b/net/minecraft/world/entity/monster/illager/Pillager.java @@ -65,16 +65,35 @@ public class Pillager extends AbstractIllager implements CrossbowAttackMob, Inve @@ -4540,7 +4547,7 @@ index 0385a6d602d80cb0f19b8ec4c982641c2f7e9f23..510a1d4e1e44bda60ee05f0799a89304 this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractVillager.class, false)); diff --git a/net/minecraft/world/entity/monster/illager/Vindicator.java b/net/minecraft/world/entity/monster/illager/Vindicator.java -index 4404765ba6b971f5525d3fba73a57d17d5f16dec..c3164a33fd8010e1920eead11c482641f17b3a65 100644 +index 061d08fd2451a7bbd020edbd4035b1e793f552ba..7caebb032e03ce54463c1e1050dc2bfe14cb16ee 100644 --- a/net/minecraft/world/entity/monster/illager/Vindicator.java +++ b/net/minecraft/world/entity/monster/illager/Vindicator.java @@ -57,15 +57,34 @@ public class Vindicator extends AbstractIllager { @@ -4579,10 +4586,10 @@ index 4404765ba6b971f5525d3fba73a57d17d5f16dec..c3164a33fd8010e1920eead11c482641 this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractVillager.class, true)); diff --git a/net/minecraft/world/entity/monster/piglin/Piglin.java b/net/minecraft/world/entity/monster/piglin/Piglin.java -index a6623851235d8c6fa6fe7519b5d04674ecd31eb5..f617f3cbd41e9b60faf1489dd32972c6a2467fe1 100644 +index f1c2639637906a8214df967741c84bbe170049c2..f74df436798220d83f62383c523566d0acc2c87a 100644 --- a/net/minecraft/world/entity/monster/piglin/Piglin.java +++ b/net/minecraft/world/entity/monster/piglin/Piglin.java -@@ -108,6 +108,23 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento +@@ -109,6 +109,23 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento this.xpReward = 5; } @@ -4606,7 +4613,7 @@ index a6623851235d8c6fa6fe7519b5d04674ecd31eb5..f617f3cbd41e9b60faf1489dd32972c6 @Override protected void addAdditionalSaveData(final ValueOutput output) { super.addAdditionalSaveData(output); -@@ -287,6 +304,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento +@@ -288,6 +305,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento protected void customServerAiStep(final ServerLevel level) { ProfilerFiller profiler = Profiler.get(); profiler.push("piglinBrain"); @@ -4615,7 +4622,7 @@ index a6623851235d8c6fa6fe7519b5d04674ecd31eb5..f617f3cbd41e9b60faf1489dd32972c6 profiler.pop(); PiglinAi.updateActivity(this); diff --git a/net/minecraft/world/entity/monster/piglin/PiglinBrute.java b/net/minecraft/world/entity/monster/piglin/PiglinBrute.java -index ca543d886dee48a03175d0c96051d4f956d33a9d..75fea76d60b76a81646aa3ae4defa6cc5385d78c 100644 +index 8bba57ee432ab41b47b6dd89a21bf17c4b462d1f..3b8a2fbd8f403c72fe092f8f2a95f95c9f7f930c 100644 --- a/net/minecraft/world/entity/monster/piglin/PiglinBrute.java +++ b/net/minecraft/world/entity/monster/piglin/PiglinBrute.java @@ -50,6 +50,23 @@ public class PiglinBrute extends AbstractPiglin { @@ -4651,7 +4658,7 @@ index ca543d886dee48a03175d0c96051d4f956d33a9d..75fea76d60b76a81646aa3ae4defa6cc profiler.pop(); PiglinBruteAi.updateActivity(this); diff --git a/net/minecraft/world/entity/monster/skeleton/AbstractSkeleton.java b/net/minecraft/world/entity/monster/skeleton/AbstractSkeleton.java -index 297d7ce0e5e38471f22dd61123ccf0348e85b9bf..695dca87fc3ef633290f9abe1089e7a6a0e7feb9 100644 +index 5676e8c076954f3109b263aeedadd21bb960db00..3294aca7cb32d5cf9bbc7c2c99a538eb00fc3dcc 100644 --- a/net/minecraft/world/entity/monster/skeleton/AbstractSkeleton.java +++ b/net/minecraft/world/entity/monster/skeleton/AbstractSkeleton.java @@ -75,12 +75,14 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo @@ -4670,7 +4677,7 @@ index 297d7ce0e5e38471f22dd61123ccf0348e85b9bf..695dca87fc3ef633290f9abe1089e7a6 this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, IronGolem.class, true)); diff --git a/net/minecraft/world/entity/monster/skeleton/Bogged.java b/net/minecraft/world/entity/monster/skeleton/Bogged.java -index f157729acf531c08543d800c824b462dc4e080f0..87b03adc6b8c18e489b3bcdc04d155719ab59e98 100644 +index 8c8e2d8c7d3cdf83053c291bcd05ecc6f840f3ce..faa10efb42f00c8ff0726afcb689501e9c9ae50c 100644 --- a/net/minecraft/world/entity/monster/skeleton/Bogged.java +++ b/net/minecraft/world/entity/monster/skeleton/Bogged.java @@ -41,6 +41,23 @@ public class Bogged extends AbstractSkeleton implements Shearable { @@ -4698,10 +4705,10 @@ index f157729acf531c08543d800c824b462dc4e080f0..87b03adc6b8c18e489b3bcdc04d15571 protected void defineSynchedData(final SynchedEntityData.Builder entityData) { super.defineSynchedData(entityData); diff --git a/net/minecraft/world/entity/monster/skeleton/Skeleton.java b/net/minecraft/world/entity/monster/skeleton/Skeleton.java -index 96da8225680bdc7c6b2c337a931858e383f329e3..06bae8a804bc7ac47dc21c915f386ca1dd07cd7f 100644 +index c920ea3116795a047225506649d10deec5a964a4..ff352802190974eb466213c464b1f74541886c9b 100644 --- a/net/minecraft/world/entity/monster/skeleton/Skeleton.java +++ b/net/minecraft/world/entity/monster/skeleton/Skeleton.java -@@ -26,6 +26,23 @@ public class Skeleton extends AbstractSkeleton { +@@ -27,6 +27,23 @@ public class Skeleton extends AbstractSkeleton { super(type, level); } @@ -4726,7 +4733,7 @@ index 96da8225680bdc7c6b2c337a931858e383f329e3..06bae8a804bc7ac47dc21c915f386ca1 protected void defineSynchedData(final SynchedEntityData.Builder entityData) { super.defineSynchedData(entityData); diff --git a/net/minecraft/world/entity/monster/skeleton/Stray.java b/net/minecraft/world/entity/monster/skeleton/Stray.java -index dd5db995d603cc9c8a263255a16dedb766244499..1d706fe3bca726a4e606232039beeadedf75b499 100644 +index d45556b27a55789bd91c1cb612d7f939fed9aebf..ce8d70886fd84f10400a1bfee857434fe5e4857b 100644 --- a/net/minecraft/world/entity/monster/skeleton/Stray.java +++ b/net/minecraft/world/entity/monster/skeleton/Stray.java @@ -23,6 +23,23 @@ public class Stray extends AbstractSkeleton { @@ -4754,7 +4761,7 @@ index dd5db995d603cc9c8a263255a16dedb766244499..1d706fe3bca726a4e606232039beeade final EntityType type, final ServerLevelAccessor level, final EntitySpawnReason spawnReason, final BlockPos pos, final RandomSource random ) { diff --git a/net/minecraft/world/entity/monster/skeleton/WitherSkeleton.java b/net/minecraft/world/entity/monster/skeleton/WitherSkeleton.java -index de05a15d4609bb76c57101b8c5a3a3600833fd2d..3651c21dc87a76ad4aa268a2de6686016b589e6c 100644 +index a69cda3d70e1698e1750142efd194f98a0805a47..2a094760c7a60a5620c12527b2d69821f8849137 100644 --- a/net/minecraft/world/entity/monster/skeleton/WitherSkeleton.java +++ b/net/minecraft/world/entity/monster/skeleton/WitherSkeleton.java @@ -34,6 +34,23 @@ public class WitherSkeleton extends AbstractSkeleton { @@ -4782,7 +4789,7 @@ index de05a15d4609bb76c57101b8c5a3a3600833fd2d..3651c21dc87a76ad4aa268a2de668601 protected void registerGoals() { this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractPiglin.class, true)); diff --git a/net/minecraft/world/entity/monster/spider/CaveSpider.java b/net/minecraft/world/entity/monster/spider/CaveSpider.java -index fe82f97689305de64caa52ef648308431f4aebb1..59265f8286a32a1fe7de1986df78b441861e9367 100644 +index 5e1f910303895a6ce5332894491a7203769321e2..0ded67c38295e216b8359e58cd6c15025ea1b362 100644 --- a/net/minecraft/world/entity/monster/spider/CaveSpider.java +++ b/net/minecraft/world/entity/monster/spider/CaveSpider.java @@ -26,6 +26,23 @@ public class CaveSpider extends Spider { @@ -4810,10 +4817,10 @@ index fe82f97689305de64caa52ef648308431f4aebb1..59265f8286a32a1fe7de1986df78b441 public boolean doHurtTarget(final ServerLevel level, final Entity target) { if (super.doHurtTarget(level, target)) { diff --git a/net/minecraft/world/entity/monster/spider/Spider.java b/net/minecraft/world/entity/monster/spider/Spider.java -index 1507f340b16fd95985bfe49870e923c626833d18..546561f6b9960de22d84468a317c65f3cf406b29 100644 +index 820a257e3cb43cbda930b5512b63eecfc6e37fa8..76505ffb0e308f866657a0a3af1bea120c26f097 100644 --- a/net/minecraft/world/entity/monster/spider/Spider.java +++ b/net/minecraft/world/entity/monster/spider/Spider.java -@@ -52,15 +52,34 @@ public class Spider extends Monster { +@@ -53,15 +53,34 @@ public class Spider extends Monster { super(type, level); } @@ -4849,10 +4856,10 @@ index 1507f340b16fd95985bfe49870e923c626833d18..546561f6b9960de22d84468a317c65f3 this.targetSelector.addGoal(2, new Spider.SpiderTargetGoal<>(this, Player.class)); this.targetSelector.addGoal(3, new Spider.SpiderTargetGoal<>(this, IronGolem.class)); diff --git a/net/minecraft/world/entity/monster/warden/Warden.java b/net/minecraft/world/entity/monster/warden/Warden.java -index 72332ef3956b0cc1550221dfa6179ea0a6ecc87a..4af25b2afa2cb8a2fec84d9281bd386d1517a644 100644 +index 9eb917bf61a890be013a035d041a728e2514d137..4354b55e4aaca68a3f5be71cbf811255c1d5fc65 100644 --- a/net/minecraft/world/entity/monster/warden/Warden.java +++ b/net/minecraft/world/entity/monster/warden/Warden.java -@@ -132,8 +132,32 @@ public class Warden extends Monster implements VibrationSystem { +@@ -133,8 +133,32 @@ public class Warden extends Monster implements VibrationSystem { this.setPathfindingMalus(PathType.LAVA, 8.0F); this.setPathfindingMalus(PathType.FIRE, 0.0F); this.setPathfindingMalus(PathType.FIRE_IN_NEIGHBOR, 0.0F); @@ -4885,7 +4892,7 @@ index 72332ef3956b0cc1550221dfa6179ea0a6ecc87a..4af25b2afa2cb8a2fec84d9281bd386d @Override public Packet getAddEntityPacket(final ServerEntity serverEntity) { return new ClientboundAddEntityPacket(this, serverEntity, this.hasPose(Pose.EMERGING) ? 1 : 0); -@@ -288,6 +312,7 @@ public class Warden extends Monster implements VibrationSystem { +@@ -290,6 +314,7 @@ public class Warden extends Monster implements VibrationSystem { protected void customServerAiStep(final ServerLevel level) { ProfilerFiller profiler = Profiler.get(); profiler.push("wardenBrain"); @@ -4893,7 +4900,7 @@ index 72332ef3956b0cc1550221dfa6179ea0a6ecc87a..4af25b2afa2cb8a2fec84d9281bd386d this.getBrain().tick(level, this); profiler.pop(); super.customServerAiStep(level); -@@ -390,6 +415,7 @@ public class Warden extends Monster implements VibrationSystem { +@@ -397,6 +422,7 @@ public class Warden extends Monster implements VibrationSystem { @Contract("null->false") public boolean canTargetEntity(final @Nullable Entity entity) { @@ -4902,10 +4909,10 @@ index 72332ef3956b0cc1550221dfa6179ea0a6ecc87a..4af25b2afa2cb8a2fec84d9281bd386d && this.level() == entity.level() && EntitySelector.NO_CREATIVE_OR_SPECTATOR.test(entity) diff --git a/net/minecraft/world/entity/monster/zombie/Drowned.java b/net/minecraft/world/entity/monster/zombie/Drowned.java -index 78cb0e6d7161aaf2da9bc0ef90bc5946e98c8129..643cf630000cd389ff7ae073a1850f2ae3f4a458 100644 +index a94a023731bf61e0de7abfb7803a292d1583eb06..9c725e29cb56a2d03722a988bab79b6729bd898e 100644 --- a/net/minecraft/world/entity/monster/zombie/Drowned.java +++ b/net/minecraft/world/entity/monster/zombie/Drowned.java -@@ -81,6 +81,23 @@ public class Drowned extends Zombie implements RangedAttackMob { +@@ -82,6 +82,23 @@ public class Drowned extends Zombie implements RangedAttackMob { return Zombie.createAttributes().add(Attributes.STEP_HEIGHT, 1.0); } @@ -4929,35 +4936,33 @@ index 78cb0e6d7161aaf2da9bc0ef90bc5946e98c8129..643cf630000cd389ff7ae073a1850f2a @Override protected PathNavigation createNavigation(final Level level) { return new AmphibiousPathNavigation(this, level); -@@ -447,7 +464,7 @@ public class Drowned extends Zombie implements RangedAttackMob { +@@ -452,13 +469,13 @@ public class Drowned extends Zombie implements RangedAttackMob { } } -- private static class DrownedMoveControl extends MoveControl { -+ private static class DrownedMoveControl extends org.purpurmc.purpur.controller.MoveControllerWASD { // Purpur - Ridables - private final Drowned drowned; - - public DrownedMoveControl(final Drowned drowned) { -@@ -456,7 +473,7 @@ public class Drowned extends Zombie implements RangedAttackMob { +- private static class DrownedMoveControl extends MoveControl { ++ private static class DrownedMoveControl extends org.purpurmc.purpur.controller.MoveControllerWASD { // Purpur - Ridables + public DrownedMoveControl(final T drowned) { + super(drowned); } @Override - public void tick() { + public void vanillaTick() { // Purpur - Ridables - LivingEntity target = this.drowned.getTarget(); - if (this.drowned.wantsToSwim() && this.drowned.isInWater()) { - if (target != null && target.getY() > this.drowned.getY() || this.drowned.searchingForLand) { -@@ -476,7 +493,7 @@ public class Drowned extends Zombie implements RangedAttackMob { + LivingEntity target = this.mob.getTarget(); + if (this.mob.wantsToSwim() && this.mob.isInWater()) { + if (target != null && target.getY() > this.mob.getY() || this.mob.isSearchingForLand()) { +@@ -478,7 +495,7 @@ public class Drowned extends Zombie implements RangedAttackMob { float yRotD = (float)(Mth.atan2(zd, xd) * 180.0F / (float)Math.PI) - 90.0F; - this.drowned.setYRot(this.rotlerp(this.drowned.getYRot(), yRotD, 90.0F)); - this.drowned.yBodyRot = this.drowned.getYRot(); -- float targetSpeed = (float)(this.speedModifier * this.drowned.getAttributeValue(Attributes.MOVEMENT_SPEED)); -+ float targetSpeed = (float)(this.getSpeedModifier() * this.drowned.getAttributeValue(Attributes.MOVEMENT_SPEED)); // Purpur - Ridables - float newSpeed = Mth.lerp(0.125F, this.drowned.getSpeed(), targetSpeed); - this.drowned.setSpeed(newSpeed); - this.drowned.setDeltaMovement(this.drowned.getDeltaMovement().add(newSpeed * xd * 0.005, newSpeed * yd * 0.1, newSpeed * zd * 0.005)); -@@ -485,7 +502,7 @@ public class Drowned extends Zombie implements RangedAttackMob { - this.drowned.setDeltaMovement(this.drowned.getDeltaMovement().add(0.0, -0.008, 0.0)); + this.mob.setYRot(this.rotlerp(this.mob.getYRot(), yRotD, 90.0F)); + this.mob.yBodyRot = this.mob.getYRot(); +- float targetSpeed = (float)(this.speedModifier * this.mob.getAttributeValue(Attributes.MOVEMENT_SPEED)); ++ float targetSpeed = (float)(this.getSpeedModifier() * this.mob.getAttributeValue(Attributes.MOVEMENT_SPEED)); // Purpur - Ridables + float newSpeed = Mth.lerp(0.125F, this.mob.getSpeed(), targetSpeed); + this.mob.setSpeed(newSpeed); + this.mob.setDeltaMovement(this.mob.getDeltaMovement().add(newSpeed * xd * 0.005, newSpeed * yd * 0.1, newSpeed * zd * 0.005)); +@@ -487,7 +504,7 @@ public class Drowned extends Zombie implements RangedAttackMob { + this.mob.setDeltaMovement(this.mob.getDeltaMovement().add(0.0, -0.008, 0.0)); } - super.tick(); @@ -4966,10 +4971,10 @@ index 78cb0e6d7161aaf2da9bc0ef90bc5946e98c8129..643cf630000cd389ff7ae073a1850f2a } } diff --git a/net/minecraft/world/entity/monster/zombie/Husk.java b/net/minecraft/world/entity/monster/zombie/Husk.java -index 4e5f6cf6c8ffc965fd3e6b3069998d2b39e4e779..dfb43d27865674f4f13050682eda38afe2731f00 100644 +index b3ba75be06325db01b97a35b0e91bbcb61faa41c..2dc09198f7bc86f5837c30e7e85eeb4c85b8d114 100644 --- a/net/minecraft/world/entity/monster/zombie/Husk.java +++ b/net/minecraft/world/entity/monster/zombie/Husk.java -@@ -37,6 +37,23 @@ public class Husk extends Zombie { +@@ -38,6 +38,23 @@ public class Husk extends Zombie { super(type, level); } @@ -4994,11 +4999,11 @@ index 4e5f6cf6c8ffc965fd3e6b3069998d2b39e4e779..dfb43d27865674f4f13050682eda38af public boolean isSunSensitive() { return false; diff --git a/net/minecraft/world/entity/monster/zombie/Zombie.java b/net/minecraft/world/entity/monster/zombie/Zombie.java -index 6f5bdf9657a8b30d8b9390e02e1660eba31b096a..5d86cfd5c5d679368ddebf1afd7e32702b6e34a9 100644 +index 2b58954cabda006adc0023831af520f4d5eb7275..d231dbf446c4e28df3512918ae50c1fc5e4db402 100644 --- a/net/minecraft/world/entity/monster/zombie/Zombie.java +++ b/net/minecraft/world/entity/monster/zombie/Zombie.java -@@ -112,11 +112,30 @@ public class Zombie extends Monster { - this(EntityType.ZOMBIE, level); +@@ -113,11 +113,30 @@ public class Zombie extends Monster { + this(EntityTypes.ZOMBIE, level); } + // Purpur start - Ridables @@ -5029,10 +5034,10 @@ index 6f5bdf9657a8b30d8b9390e02e1660eba31b096a..5d86cfd5c5d679368ddebf1afd7e3270 } diff --git a/net/minecraft/world/entity/monster/zombie/ZombieVillager.java b/net/minecraft/world/entity/monster/zombie/ZombieVillager.java -index 591df33e1f0c8d49633180c2a10555072e4304e3..b3735610f347cb6275314dc7cd3dab56e26db85a 100644 +index 32cf40d4254bc7be406b3cfea728b01259dbd83f..67031d93d9f59cf616c7ed1a3fcb18182148c6e6 100644 --- a/net/minecraft/world/entity/monster/zombie/ZombieVillager.java +++ b/net/minecraft/world/entity/monster/zombie/ZombieVillager.java -@@ -85,6 +85,23 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { +@@ -87,6 +87,23 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { super(type, level); } @@ -5057,7 +5062,7 @@ index 591df33e1f0c8d49633180c2a10555072e4304e3..b3735610f347cb6275314dc7cd3dab56 protected void defineSynchedData(final SynchedEntityData.Builder entityData) { super.defineSynchedData(entityData); diff --git a/net/minecraft/world/entity/monster/zombie/ZombifiedPiglin.java b/net/minecraft/world/entity/monster/zombie/ZombifiedPiglin.java -index 2d294595b2d9e4daaf221482514329126d59f077..eb3ec4314603f61a041740d5b5e52165dac6ebc6 100644 +index 6002fab2ca888fb1a73f09ce552adc9646c00d32..a9829f453a6ff8d8b844beb75b653799c763fbc1 100644 --- a/net/minecraft/world/entity/monster/zombie/ZombifiedPiglin.java +++ b/net/minecraft/world/entity/monster/zombie/ZombifiedPiglin.java @@ -68,6 +68,23 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { @@ -5085,10 +5090,10 @@ index 2d294595b2d9e4daaf221482514329126d59f077..eb3ec4314603f61a041740d5b5e52165 protected void addBehaviourGoals() { this.goalSelector.addGoal(1, new SpearUseGoal<>(this, 1.0, 1.0, 10.0F, 2.0F)); diff --git a/net/minecraft/world/entity/npc/villager/Villager.java b/net/minecraft/world/entity/npc/villager/Villager.java -index 18e4071adb53edf1e511893dc2a21d955ba55900..627461178e2ab4f59699e04b16d8d0f337a0daba 100644 +index 804cbda3085797cfd58ffb550988f65d6650660b..0aca0978653b3b1cf8ca51596a80fdc91225a9a9 100644 --- a/net/minecraft/world/entity/npc/villager/Villager.java +++ b/net/minecraft/world/entity/npc/villager/Villager.java -@@ -252,6 +252,28 @@ public class Villager extends AbstractVillager implements VillagerDataHolder, Re +@@ -243,6 +243,28 @@ public class Villager extends AbstractVillager implements VillagerDataHolder, Re } // Purpur end - Lobotomize stuck villagers @@ -5116,8 +5121,8 @@ index 18e4071adb53edf1e511893dc2a21d955ba55900..627461178e2ab4f59699e04b16d8d0f3 + @Override public Brain getBrain() { - return (Brain) super.getBrain(); -@@ -332,7 +354,7 @@ public class Villager extends AbstractVillager implements VillagerDataHolder, Re + return (Brain)super.getBrain(); +@@ -323,7 +345,7 @@ public class Villager extends AbstractVillager implements VillagerDataHolder, Re } else { this.isLobotomized = false; } @@ -5126,7 +5131,7 @@ index 18e4071adb53edf1e511893dc2a21d955ba55900..627461178e2ab4f59699e04b16d8d0f3 this.getBrain().tick(level, this); // Paper - EAR 2 } else if (this.isLobotomized && shouldRestock(level)) restock(); -@@ -394,7 +416,7 @@ public class Villager extends AbstractVillager implements VillagerDataHolder, Re +@@ -385,7 +407,7 @@ public class Villager extends AbstractVillager implements VillagerDataHolder, Re if (this.isBaby()) { this.setUnhappy(); @@ -5135,7 +5140,7 @@ index 18e4071adb53edf1e511893dc2a21d955ba55900..627461178e2ab4f59699e04b16d8d0f3 } if (!this.level().isClientSide()) { -@@ -408,9 +430,11 @@ public class Villager extends AbstractVillager implements VillagerDataHolder, Re +@@ -399,9 +421,11 @@ public class Villager extends AbstractVillager implements VillagerDataHolder, Re } if (noOffers) { @@ -5149,7 +5154,7 @@ index 18e4071adb53edf1e511893dc2a21d955ba55900..627461178e2ab4f59699e04b16d8d0f3 this.startTrading(player); } diff --git a/net/minecraft/world/entity/npc/wanderingtrader/WanderingTrader.java b/net/minecraft/world/entity/npc/wanderingtrader/WanderingTrader.java -index f99d5379a83dc9aabe8c8fef52bb2b0cccc40e19..4c35ca3877b88b13a1919d0625e5055b4554057f 100644 +index 0b668baf3fca348d9e3755c114bd109fe7736a80..45279d3473f42dd0f75315961bd178c17c8dac5d 100644 --- a/net/minecraft/world/entity/npc/wanderingtrader/WanderingTrader.java +++ b/net/minecraft/world/entity/npc/wanderingtrader/WanderingTrader.java @@ -67,6 +67,23 @@ public class WanderingTrader extends AbstractVillager implements Consumable.Over @@ -5188,10 +5193,10 @@ index f99d5379a83dc9aabe8c8fef52bb2b0cccc40e19..4c35ca3877b88b13a1919d0625e5055b if (this.level().purpurConfig.wanderingTraderAllowTrading) { // Purpur - Add config for villager trading this.setTradingPlayer(player); diff --git a/net/minecraft/world/entity/player/Player.java b/net/minecraft/world/entity/player/Player.java -index 7c4ae5904081da7b0e4c135c243f2d9cebb161d9..3b0a0525cdca3ea5b91834e04b42696a7cedde10 100644 +index 1cb7700824d608380301e5ff524d17fd7420ec16..def90b5105edb0303eecc4424ff7d6e2cb050791 100644 --- a/net/minecraft/world/entity/player/Player.java +++ b/net/minecraft/world/entity/player/Player.java -@@ -193,6 +193,19 @@ public abstract class Player extends Avatar implements ContainerUser { +@@ -194,6 +194,19 @@ public abstract class Player extends Avatar implements ContainerUser { } // CraftBukkit end @@ -5209,13 +5214,13 @@ index 7c4ae5904081da7b0e4c135c243f2d9cebb161d9..3b0a0525cdca3ea5b91834e04b42696a + // Purpur end - Ridables + public Player(final Level level, final GameProfile gameProfile) { - super(EntityType.PLAYER, level); + super(EntityTypes.PLAYER, level); this.setUUID(gameProfile.id()); diff --git a/net/minecraft/world/entity/projectile/LlamaSpit.java b/net/minecraft/world/entity/projectile/LlamaSpit.java -index aeec4864cc80d4cc470464a01b7cae9b85e6bf9e..83ea958fd688f25d5fa7b1a1718d9932e901fee1 100644 +index 904d52c45c4f337c8c9130139df1d89edcae0e78..a226360ffbb51f5c5059df9c47e05088cbfe5685 100644 --- a/net/minecraft/world/entity/projectile/LlamaSpit.java +++ b/net/minecraft/world/entity/projectile/LlamaSpit.java -@@ -33,6 +33,12 @@ public class LlamaSpit extends Projectile { +@@ -34,6 +34,12 @@ public class LlamaSpit extends Projectile { ); } @@ -5229,10 +5234,10 @@ index aeec4864cc80d4cc470464a01b7cae9b85e6bf9e..83ea958fd688f25d5fa7b1a1718d9932 protected double getDefaultGravity() { return 0.06; diff --git a/net/minecraft/world/entity/projectile/hurtingprojectile/WitherSkull.java b/net/minecraft/world/entity/projectile/hurtingprojectile/WitherSkull.java -index 92ef3b07a79b9a274675f9db54444a8083b15cf5..d713721f92717df7d184d790ff14e6b87ba832de 100644 +index d09f7e6f87318be566d38b5e8569ddaf7223e651..75b896b43a4865970bd68d677d5b9de700bc99d8 100644 --- a/net/minecraft/world/entity/projectile/hurtingprojectile/WitherSkull.java +++ b/net/minecraft/world/entity/projectile/hurtingprojectile/WitherSkull.java -@@ -110,6 +110,14 @@ public class WitherSkull extends AbstractHurtingProjectile { +@@ -111,6 +111,14 @@ public class WitherSkull extends AbstractHurtingProjectile { } // Purpur end - Add canSaveToDisk to Entity diff --git a/purpur-server/minecraft-patches/unapplied-features/0002-Configurable-entity-base-attributes.patch b/purpur-server/minecraft-patches/features/0002-Configurable-entity-base-attributes.patch similarity index 85% rename from purpur-server/minecraft-patches/unapplied-features/0002-Configurable-entity-base-attributes.patch rename to purpur-server/minecraft-patches/features/0002-Configurable-entity-base-attributes.patch index 4029a35ff..eefaeb461 100644 --- a/purpur-server/minecraft-patches/unapplied-features/0002-Configurable-entity-base-attributes.patch +++ b/purpur-server/minecraft-patches/features/0002-Configurable-entity-base-attributes.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configurable entity base attributes diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java -index bb6dc165d393a527564810e0cd2f8137e5272b9e..3bc8a8d26569a3c26e518cd48c52b9b6c9e38294 100644 +index 2d856ba2ce8c6febdc1d5dd2df2718fbe4e1312d..55f7761ad757cc4eebbf1271e0d284bc31db753e 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java -@@ -296,6 +296,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -310,6 +310,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin protected LivingEntity(final EntityType type, final Level level) { super(type, level); this.attributes = new AttributeMap(DefaultAttributes.getSupplier(type), this); // Purpur - Ridables @@ -16,7 +16,7 @@ index bb6dc165d393a527564810e0cd2f8137e5272b9e..3bc8a8d26569a3c26e518cd48c52b9b6 this.craftAttributes = new org.bukkit.craftbukkit.attribute.CraftAttributeMap(this.attributes); // CraftBukkit // CraftBukkit - this.setHealth(this.getMaxHealth()) inlined and simplified to skip the instanceof check for Player, as getBukkitEntity() is not initialized in constructor this.entityData.set(LivingEntity.DATA_HEALTH_ID, this.getMaxHealth()); -@@ -317,6 +318,8 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -331,6 +332,8 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin return new EntityEquipment(); } @@ -52,10 +52,10 @@ index 9861837c1d10e5ffe5dada9f4a75fb9adaccc161..cb242c69be97e0927dd62714f1a9b112 public boolean isFlapping() { return !this.isResting() && this.tickCount % 10.0F == 0.0F; diff --git a/net/minecraft/world/entity/animal/allay/Allay.java b/net/minecraft/world/entity/animal/allay/Allay.java -index 931726ddada92a4b1063dd9dbdc89723f6a283cc..f5bf06a36f4ffd0370a95ef6d18e99d4daedcd65 100644 +index ca1f1d18b765db8d197f70977e0e175744b07ee4..9206c45b9789ff2834f14efb65dc85113c7bd7d7 100644 --- a/net/minecraft/world/entity/animal/allay/Allay.java +++ b/net/minecraft/world/entity/animal/allay/Allay.java -@@ -154,6 +154,14 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS +@@ -155,6 +155,14 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS } // Purpur end - Ridables @@ -71,10 +71,10 @@ index 931726ddada92a4b1063dd9dbdc89723f6a283cc..f5bf06a36f4ffd0370a95ef6d18e99d4 protected Brain makeBrain(final Brain.Packed packedBrain) { return BRAIN_PROVIDER.makeBrain(this, packedBrain); diff --git a/net/minecraft/world/entity/animal/armadillo/Armadillo.java b/net/minecraft/world/entity/animal/armadillo/Armadillo.java -index d8dcb325325ba2fc6b78ff62c95cb818c5fcf3fc..b55d1d5abe06d753063ea7939bd975c055a1cc95 100644 +index e417fa354f22e3532d3bfda9c9ebfccfd4906bc6..9f0e074df58d8b8484aa8be5cb0bc8941cee0f96 100644 --- a/net/minecraft/world/entity/animal/armadillo/Armadillo.java +++ b/net/minecraft/world/entity/animal/armadillo/Armadillo.java -@@ -106,6 +106,14 @@ public class Armadillo extends Animal { +@@ -110,6 +110,14 @@ public class Armadillo extends Animal { } // Purpur end - Ridables @@ -90,10 +90,10 @@ index d8dcb325325ba2fc6b78ff62c95cb818c5fcf3fc..b55d1d5abe06d753063ea7939bd975c0 protected void defineSynchedData(final SynchedEntityData.Builder entityData) { super.defineSynchedData(entityData); diff --git a/net/minecraft/world/entity/animal/axolotl/Axolotl.java b/net/minecraft/world/entity/animal/axolotl/Axolotl.java -index 993f8195bf67d675eccef47314de0ba0f257b855..e0b9b15b2727953deb7850ed57edd7248f88c184 100644 +index ed0d11c8048c3c6b25a003633684b89376b76be9..2752e906f2a98540d6fd33cd5f080f376e6e3f86 100644 --- a/net/minecraft/world/entity/animal/axolotl/Axolotl.java +++ b/net/minecraft/world/entity/animal/axolotl/Axolotl.java -@@ -134,6 +134,14 @@ public class Axolotl extends Animal implements Bucketable { +@@ -139,6 +139,14 @@ public class Axolotl extends Animal implements Bucketable { } // Purpur end - Ridables @@ -109,10 +109,10 @@ index 993f8195bf67d675eccef47314de0ba0f257b855..e0b9b15b2727953deb7850ed57edd724 public float getWalkTargetValue(final BlockPos pos, final LevelReader level) { return 0.0F; diff --git a/net/minecraft/world/entity/animal/bee/Bee.java b/net/minecraft/world/entity/animal/bee/Bee.java -index 67971c3054fd17ee75c69c6168bd74f11dca4c86..24dfd3846abcb0f4f00d9c0e58f1e5389e7db658 100644 +index ec110b0dcef5ae0923cdda8aa43720f10b9f826e..6022df0a91e46b0a7a0102b959a1eb2b18c1de63 100644 --- a/net/minecraft/world/entity/animal/bee/Bee.java +++ b/net/minecraft/world/entity/animal/bee/Bee.java -@@ -479,6 +479,14 @@ public class Bee extends Animal implements FlyingAnimal, NeutralMob { +@@ -477,6 +477,14 @@ public class Bee extends Animal implements NeutralMob { return beehiveBlockEntity != null && beehiveBlockEntity.isFireNearby(); } @@ -128,10 +128,10 @@ index 67971c3054fd17ee75c69c6168bd74f11dca4c86..24dfd3846abcb0f4f00d9c0e58f1e538 public long getPersistentAngerEndTime() { return this.entityData.get(DATA_ANGER_END_TIME); diff --git a/net/minecraft/world/entity/animal/camel/Camel.java b/net/minecraft/world/entity/animal/camel/Camel.java -index fcbb743a07b691f11f14febe5a05959326999293..aee34b1ac868f0f0fc24e3ffe022d51141143c9b 100644 +index 8296a5a5935a77b01f4d11b102f3159d97fc8a30..431f296bf651942cd390b7f383295eae3f4d2bce 100644 --- a/net/minecraft/world/entity/animal/camel/Camel.java +++ b/net/minecraft/world/entity/animal/camel/Camel.java -@@ -348,6 +348,23 @@ public class Camel extends AbstractHorse { +@@ -355,6 +355,23 @@ public class Camel extends AbstractHorse { return this.dashCooldown; } @@ -156,10 +156,10 @@ index fcbb743a07b691f11f14febe5a05959326999293..aee34b1ac868f0f0fc24e3ffe022d511 public SoundEvent getAmbientSound() { return SoundEvents.CAMEL_AMBIENT; diff --git a/net/minecraft/world/entity/animal/chicken/Chicken.java b/net/minecraft/world/entity/animal/chicken/Chicken.java -index b0b7398e36a30e5a932ce4a9d531d0c258e64604..3e1e904d9401bef41271fe8d29a22b6cd944e766 100644 +index 4a3d3ab6c9f52fd06107131f2564b196e7b42957..f5d2a74c81d9ba8aeaf6c3f50069f529dde68e72 100644 --- a/net/minecraft/world/entity/animal/chicken/Chicken.java +++ b/net/minecraft/world/entity/animal/chicken/Chicken.java -@@ -93,6 +93,14 @@ public class Chicken extends Animal { +@@ -98,6 +98,14 @@ public class Chicken extends Animal { } // Purpur end - Ridables @@ -175,10 +175,10 @@ index b0b7398e36a30e5a932ce4a9d531d0c258e64604..3e1e904d9401bef41271fe8d29a22b6c protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/animal/cow/Cow.java b/net/minecraft/world/entity/animal/cow/Cow.java -index e200b9a459c3f410d2e9affbad8ba8e37e1a1ca5..33c0b8f2c43065ea89b3f9c6a519dde27620ed07 100644 +index 4d408217239cf11ff7c8925ca48c278fc8cfdfce..65c41435e06120c875a82ba8d5427e082bbeb9eb 100644 --- a/net/minecraft/world/entity/animal/cow/Cow.java +++ b/net/minecraft/world/entity/animal/cow/Cow.java -@@ -51,6 +51,14 @@ public class Cow extends AbstractCow { +@@ -59,6 +59,14 @@ public class Cow extends AbstractCow { } // Purpur end - Ridables @@ -194,10 +194,10 @@ index e200b9a459c3f410d2e9affbad8ba8e37e1a1ca5..33c0b8f2c43065ea89b3f9c6a519dde2 protected void defineSynchedData(final SynchedEntityData.Builder entityData) { super.defineSynchedData(entityData); diff --git a/net/minecraft/world/entity/animal/cow/MushroomCow.java b/net/minecraft/world/entity/animal/cow/MushroomCow.java -index 7411d6aafa9ec3b5d6305bb8c1b8d03444cf6aa2..58d37bd62fec5071fb4a0c297f6c2ef89a3d79e4 100644 +index 1e4747e800e1b987862fcb1b7c9dfff9fec0f9a2..0c1baeb2fe56099a68043b8366507f29e41792f5 100644 --- a/net/minecraft/world/entity/animal/cow/MushroomCow.java +++ b/net/minecraft/world/entity/animal/cow/MushroomCow.java -@@ -78,6 +78,13 @@ public class MushroomCow extends AbstractCow implements Shearable { +@@ -86,6 +86,13 @@ public class MushroomCow extends AbstractCow implements Shearable { } // Purpur end - Ridables @@ -212,10 +212,10 @@ index 7411d6aafa9ec3b5d6305bb8c1b8d03444cf6aa2..58d37bd62fec5071fb4a0c297f6c2ef8 public float getWalkTargetValue(final BlockPos pos, final LevelReader level) { return level.getBlockState(pos.below()).is(Blocks.MYCELIUM) ? 10.0F : level.getPathfindingCostFromLightLevels(pos); diff --git a/net/minecraft/world/entity/animal/dolphin/Dolphin.java b/net/minecraft/world/entity/animal/dolphin/Dolphin.java -index 82a56ecf76f53e72d1af67228ce7f9c74678b59f..f8e155393b0c2a69018da88556116b4eeb416d83 100644 +index 00ec3c3764ec9a16fe67a584fcbf2d80fc59f3e1..b6d698fbdf1fe5b6b1ffe8d622c83004f1fa693a 100644 --- a/net/minecraft/world/entity/animal/dolphin/Dolphin.java +++ b/net/minecraft/world/entity/animal/dolphin/Dolphin.java -@@ -154,6 +154,14 @@ public class Dolphin extends AgeableWaterCreature { +@@ -161,6 +161,14 @@ public class Dolphin extends AgeableWaterCreature { } // Purpur end - Ridables @@ -231,7 +231,7 @@ index 82a56ecf76f53e72d1af67228ce7f9c74678b59f..f8e155393b0c2a69018da88556116b4e public @Nullable SpawnGroupData finalizeSpawn( final ServerLevelAccessor level, final DifficultyInstance difficulty, final EntitySpawnReason spawnReason, final @Nullable SpawnGroupData groupData diff --git a/net/minecraft/world/entity/animal/equine/AbstractHorse.java b/net/minecraft/world/entity/animal/equine/AbstractHorse.java -index 59bf0106908fba34500d1e44d6a02bb27b71ffe5..8f6d6f4cc72670576e7fb0fb3cfee018fa0857d6 100644 +index 3e3786a2803eacd3cdbcdc0039a7957256bf5fe9..83a8be82c5d2ad75376403a346c2ed06f691d975 100644 --- a/net/minecraft/world/entity/animal/equine/AbstractHorse.java +++ b/net/minecraft/world/entity/animal/equine/AbstractHorse.java @@ -140,6 +140,46 @@ public abstract class AbstractHorse extends Animal implements PlayerRideableJump @@ -291,10 +291,10 @@ index 59bf0106908fba34500d1e44d6a02bb27b71ffe5..8f6d6f4cc72670576e7fb0fb3cfee018 } diff --git a/net/minecraft/world/entity/animal/equine/Donkey.java b/net/minecraft/world/entity/animal/equine/Donkey.java -index 980160d37a51b862df3bda18a1bdb92e83badf3c..1a130fc107315b40b4e34a97beb53f7fe0ced14f 100644 +index 31cd10ab4c499c6b5ccb4be67782340c44b9758c..0a91e245c992c26ac715bcaedd369e96ac6e70cd 100644 --- a/net/minecraft/world/entity/animal/equine/Donkey.java +++ b/net/minecraft/world/entity/animal/equine/Donkey.java -@@ -23,6 +23,23 @@ public class Donkey extends AbstractChestedHorse { +@@ -24,6 +24,23 @@ public class Donkey extends AbstractChestedHorse { } // Purpur end - Ridables @@ -319,10 +319,10 @@ index 980160d37a51b862df3bda18a1bdb92e83badf3c..1a130fc107315b40b4e34a97beb53f7f public SoundEvent getAmbientSound() { return SoundEvents.DONKEY_AMBIENT; diff --git a/net/minecraft/world/entity/animal/equine/Horse.java b/net/minecraft/world/entity/animal/equine/Horse.java -index d2dc51d7a8d97db64bf87f8337b10442acc5bc47..8ba8430f41ce74736f405bfac2ef5de6fffe7d49 100644 +index 663c6aea26a6a619f1d7af7af022abae20c930f9..2a89a4a3123a9645e3c532e51f9811af29867f76 100644 --- a/net/minecraft/world/entity/animal/equine/Horse.java +++ b/net/minecraft/world/entity/animal/equine/Horse.java -@@ -55,6 +55,23 @@ public class Horse extends AbstractHorse { +@@ -56,6 +56,23 @@ public class Horse extends AbstractHorse { } // Purpur end - Ridables @@ -347,10 +347,10 @@ index d2dc51d7a8d97db64bf87f8337b10442acc5bc47..8ba8430f41ce74736f405bfac2ef5de6 protected void randomizeAttributes(final RandomSource random) { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(generateMaxHealth(random::nextInt)); diff --git a/net/minecraft/world/entity/animal/equine/Llama.java b/net/minecraft/world/entity/animal/equine/Llama.java -index 90928f2a840493b16b34bf870fc511e74d1150ea..942f55f750b7ba0cf25429ca888a46bc4c172eb3 100644 +index ccb2486027263bb45f250c19a4b870c3494af1b9..4b607b42f7258da62968cdd3081b207da02cf5e3 100644 --- a/net/minecraft/world/entity/animal/equine/Llama.java +++ b/net/minecraft/world/entity/animal/equine/Llama.java -@@ -134,6 +134,23 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob { +@@ -135,6 +135,23 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob { } // Purpur end - Ridables @@ -375,10 +375,10 @@ index 90928f2a840493b16b34bf870fc511e74d1150ea..942f55f750b7ba0cf25429ca888a46bc return false; } diff --git a/net/minecraft/world/entity/animal/equine/Mule.java b/net/minecraft/world/entity/animal/equine/Mule.java -index ce4c2424cd6922c03cf44cc731526775eba25220..a866b93312391142b030605e2108fe522d3d8ddd 100644 +index 4a82af3b1f5d22fc5d4060f56cdab0ec51ef83e3..226acd03320c235db4051e5274364e7579e584aa 100644 --- a/net/minecraft/world/entity/animal/equine/Mule.java +++ b/net/minecraft/world/entity/animal/equine/Mule.java -@@ -22,6 +22,23 @@ public class Mule extends AbstractChestedHorse { +@@ -23,6 +23,23 @@ public class Mule extends AbstractChestedHorse { } // Purpur end - Ridables @@ -403,10 +403,10 @@ index ce4c2424cd6922c03cf44cc731526775eba25220..a866b93312391142b030605e2108fe52 public SoundEvent getAmbientSound() { return SoundEvents.MULE_AMBIENT; diff --git a/net/minecraft/world/entity/animal/equine/SkeletonHorse.java b/net/minecraft/world/entity/animal/equine/SkeletonHorse.java -index 8a9f46e45ce077230ec918d46f599092fbe3e851..6b12c3a1a99ce66751f8e7d65ee1f6c21ffb0833 100644 +index 53ddd31255fab4f5f8472dd48407012ea7363264..d8a774d65e29e19bb982bc40ff8249882e9ce96d 100644 --- a/net/minecraft/world/entity/animal/equine/SkeletonHorse.java +++ b/net/minecraft/world/entity/animal/equine/SkeletonHorse.java -@@ -50,6 +50,23 @@ public class SkeletonHorse extends AbstractHorse { +@@ -51,6 +51,23 @@ public class SkeletonHorse extends AbstractHorse { } // Purpur end - Ridables @@ -431,10 +431,10 @@ index 8a9f46e45ce077230ec918d46f599092fbe3e851..6b12c3a1a99ce66751f8e7d65ee1f6c2 return createBaseHorseAttributes().add(Attributes.MAX_HEALTH, 15.0).add(Attributes.MOVEMENT_SPEED, 0.2F); } diff --git a/net/minecraft/world/entity/animal/equine/TraderLlama.java b/net/minecraft/world/entity/animal/equine/TraderLlama.java -index 19497883e03603bc0a0f63c3b3734e32f9ed2e1d..bfae12b0a2b094dcd5953058f4d6245077a04fd7 100644 +index ca89823a7951dba970c6bd82a7610eb7ed119a8b..4b92a5345d6ac96551aba8ecdd75aa0e4003dbee 100644 --- a/net/minecraft/world/entity/animal/equine/TraderLlama.java +++ b/net/minecraft/world/entity/animal/equine/TraderLlama.java -@@ -53,6 +53,23 @@ public class TraderLlama extends Llama { +@@ -54,6 +54,23 @@ public class TraderLlama extends Llama { } // Purpur end - Ridables @@ -459,10 +459,10 @@ index 19497883e03603bc0a0f63c3b3734e32f9ed2e1d..bfae12b0a2b094dcd5953058f4d62450 public boolean isTraderLlama() { return true; diff --git a/net/minecraft/world/entity/animal/equine/ZombieHorse.java b/net/minecraft/world/entity/animal/equine/ZombieHorse.java -index 13857de6c4be09b7d0798d2a0fd420c705ac1d5d..ae429aec9be39d9af7da4671db15a4506da135d9 100644 +index fdc590ca470ffbbac481eb684c105218fb3603e2..061b6483beaffe62a901b3ab4665288eaf09950f 100644 --- a/net/minecraft/world/entity/animal/equine/ZombieHorse.java +++ b/net/minecraft/world/entity/animal/equine/ZombieHorse.java -@@ -61,6 +61,23 @@ public class ZombieHorse extends AbstractHorse { +@@ -62,6 +62,23 @@ public class ZombieHorse extends AbstractHorse { } // Purpur end - Ridables @@ -487,10 +487,10 @@ index 13857de6c4be09b7d0798d2a0fd420c705ac1d5d..ae429aec9be39d9af7da4671db15a450 return createBaseHorseAttributes().add(Attributes.MAX_HEALTH, 25.0); } diff --git a/net/minecraft/world/entity/animal/feline/Cat.java b/net/minecraft/world/entity/animal/feline/Cat.java -index 36688a571cdf35697d0cd97bee316f5474bcae73..74c271dd9d55c846ed5440ff0d9c378a06da059d 100644 +index 5f6cb6f3d0bf8b5df66e16155df91982a5d2eb47..026157f6f533e0034ad569593929532fc69729c3 100644 --- a/net/minecraft/world/entity/animal/feline/Cat.java +++ b/net/minecraft/world/entity/animal/feline/Cat.java -@@ -120,6 +120,14 @@ public class Cat extends TamableAnimal { +@@ -127,6 +127,14 @@ public class Cat extends TamableAnimal { } // Purpur end - Ridables @@ -506,10 +506,10 @@ index 36688a571cdf35697d0cd97bee316f5474bcae73..74c271dd9d55c846ed5440ff0d9c378a protected void registerGoals() { this.temptGoal = new Cat.CatTemptGoal(this, 0.6, i -> i.is(ItemTags.CAT_FOOD), true); diff --git a/net/minecraft/world/entity/animal/feline/Ocelot.java b/net/minecraft/world/entity/animal/feline/Ocelot.java -index 93bfc93ae24d483f8a6c856d9ce978e34a064cd4..4bf42db19d0f58338f32af1ab7c802c274a8581c 100644 +index 086ca07d2a6cba84226367d2410a4e04e1f7a4e8..a225a5bc7209cdaf328b252fd712cde2605fb039 100644 --- a/net/minecraft/world/entity/animal/feline/Ocelot.java +++ b/net/minecraft/world/entity/animal/feline/Ocelot.java -@@ -83,6 +83,14 @@ public class Ocelot extends Animal { +@@ -90,6 +90,14 @@ public class Ocelot extends Animal { } // Purpur end - Ridables @@ -543,7 +543,7 @@ index becb5c214adacd36372bbe2b21ab15e341640f7d..948d6a8e3465fd5985e91ca7eaa5f022 public ItemStack getBucketItemStack() { return new ItemStack(Items.COD_BUCKET); diff --git a/net/minecraft/world/entity/animal/fish/Pufferfish.java b/net/minecraft/world/entity/animal/fish/Pufferfish.java -index 8d3e8575120145f572b2c1834d243bac8eb28586..26acbeff80d3a4216b69b9842381f3fa48c9862b 100644 +index baca62c789359f02b3ef22cbf8f72ba6008fb51c..3d68c742dfa6b805f22c647af8b2c4f5ccc5cccf 100644 --- a/net/minecraft/world/entity/animal/fish/Pufferfish.java +++ b/net/minecraft/world/entity/animal/fish/Pufferfish.java @@ -59,6 +59,13 @@ public class Pufferfish extends AbstractFish { @@ -561,7 +561,7 @@ index 8d3e8575120145f572b2c1834d243bac8eb28586..26acbeff80d3a4216b69b9842381f3fa protected void defineSynchedData(final SynchedEntityData.Builder entityData) { super.defineSynchedData(entityData); diff --git a/net/minecraft/world/entity/animal/fish/Salmon.java b/net/minecraft/world/entity/animal/fish/Salmon.java -index e96062cd57e1866c398418ebbb8f2443a668f480..9bce191fbc3b68a051f50e85674b8cfd42832a85 100644 +index 0b89e3b80ec06345377133c2f954cc65db7e3b9c..ecc4e79d43f2fce16c4ee78ea8fb8efba4d0c9e6 100644 --- a/net/minecraft/world/entity/animal/fish/Salmon.java +++ b/net/minecraft/world/entity/animal/fish/Salmon.java @@ -53,6 +53,13 @@ public class Salmon extends AbstractSchoolingFish { @@ -597,10 +597,10 @@ index d48f8dc3e806ffe767565158bcfa17631839a61c..e9692aacca5f32c4280b16b4eabecf87 return "entity.minecraft.tropical_fish.predefined." + index; } diff --git a/net/minecraft/world/entity/animal/fox/Fox.java b/net/minecraft/world/entity/animal/fox/Fox.java -index c60343771f5490236212221e7d5f2b73dee4865c..d218a71c2475240438029ca44e86d7584ff36f73 100644 +index aecbd2bddf4eeb365ccad8a85799f7fcd8b9f319..cf9fc2afb3b2fac97930289411f0a22fdb8ea61d 100644 --- a/net/minecraft/world/entity/animal/fox/Fox.java +++ b/net/minecraft/world/entity/animal/fox/Fox.java -@@ -192,6 +192,14 @@ public class Fox extends Animal { +@@ -199,6 +199,14 @@ public class Fox extends Animal { } // Purpur end - Ridables @@ -616,7 +616,7 @@ index c60343771f5490236212221e7d5f2b73dee4865c..d218a71c2475240438029ca44e86d758 protected void defineSynchedData(final SynchedEntityData.Builder entityData) { super.defineSynchedData(entityData); diff --git a/net/minecraft/world/entity/animal/golem/CopperGolem.java b/net/minecraft/world/entity/animal/golem/CopperGolem.java -index d842d79bbd5253a2a701a87221258751aa112c3e..00877102ad4261ecd7191e402cf4e381dd6e40b3 100644 +index c27319adafa8089f098efde14989425a4715b260..5337c65d317299df2ac0dfd9b7ea12fc7debcdb6 100644 --- a/net/minecraft/world/entity/animal/golem/CopperGolem.java +++ b/net/minecraft/world/entity/animal/golem/CopperGolem.java @@ -134,6 +134,16 @@ public class CopperGolem extends AbstractGolem implements ContainerUser, Shearab @@ -637,10 +637,10 @@ index d842d79bbd5253a2a701a87221258751aa112c3e..00877102ad4261ecd7191e402cf4e381 return Mob.createMobAttributes().add(Attributes.MOVEMENT_SPEED, 0.2F).add(Attributes.STEP_HEIGHT, 1.0).add(Attributes.MAX_HEALTH, 12.0); } diff --git a/net/minecraft/world/entity/animal/golem/IronGolem.java b/net/minecraft/world/entity/animal/golem/IronGolem.java -index c6e0038cb3314b4db17d307b99de65dde107d5a1..cd68a06abb509dbdbcf909d3f3e142c7a1f896cf 100644 +index 8c674f2f3a068e92b3975df8137912f4b8327cf2..9fd7366157c7e6d3d75469c33599560c5045abf7 100644 --- a/net/minecraft/world/entity/animal/golem/IronGolem.java +++ b/net/minecraft/world/entity/animal/golem/IronGolem.java -@@ -91,6 +91,14 @@ public class IronGolem extends AbstractGolem implements NeutralMob { +@@ -92,6 +92,14 @@ public class IronGolem extends AbstractGolem implements NeutralMob { } // Purpur end - Ridables @@ -656,7 +656,7 @@ index c6e0038cb3314b4db17d307b99de65dde107d5a1..cd68a06abb509dbdbcf909d3f3e142c7 protected void registerGoals() { if (this.level().purpurConfig.ironGolemPoppyCalm) this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.ReceiveFlower(this)); // Purpur - Iron golem calm anger options diff --git a/net/minecraft/world/entity/animal/golem/SnowGolem.java b/net/minecraft/world/entity/animal/golem/SnowGolem.java -index 6875e40687bbde6aba25da7d3145eccdccea6f52..bd594838ae25f16e6e16335e06c4d981c5ecdc2a 100644 +index acb61a212f9240ccfa414770868c0fb3835c538a..3fe90a55e0b681c3c689db081abe28e6931e711f 100644 --- a/net/minecraft/world/entity/animal/golem/SnowGolem.java +++ b/net/minecraft/world/entity/animal/golem/SnowGolem.java @@ -79,6 +79,14 @@ public class SnowGolem extends AbstractGolem implements RangedAttackMob, Shearab @@ -675,10 +675,10 @@ index 6875e40687bbde6aba25da7d3145eccdccea6f52..bd594838ae25f16e6e16335e06c4d981 protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables diff --git a/net/minecraft/world/entity/animal/happyghast/HappyGhast.java b/net/minecraft/world/entity/animal/happyghast/HappyGhast.java -index 0ffa1ed6fe9e8aa01c91dee4cefb8b9a1273770b..7991ef3a11c7901d361fef6349aef37737a69b76 100644 +index 60c67b49d236fe1ad152b668083b61407f31ea6e..2a0e5edf26e1b53ed9f6e341a89670fe3cd4dbd3 100644 --- a/net/minecraft/world/entity/animal/happyghast/HappyGhast.java +++ b/net/minecraft/world/entity/animal/happyghast/HappyGhast.java -@@ -140,6 +140,19 @@ public class HappyGhast extends Animal { +@@ -144,6 +144,19 @@ public class HappyGhast extends Animal { } // Purpur end - Ridables @@ -698,7 +698,7 @@ index 0ffa1ed6fe9e8aa01c91dee4cefb8b9a1273770b..7991ef3a11c7901d361fef6349aef377 @Override protected void ageBoundaryReached() { if (this.isBaby()) { -@@ -163,7 +176,7 @@ public class HappyGhast extends Animal { +@@ -167,7 +180,7 @@ public class HappyGhast extends Animal { @Override protected float sanitizeScale(final float scale) { @@ -708,10 +708,10 @@ index 0ffa1ed6fe9e8aa01c91dee4cefb8b9a1273770b..7991ef3a11c7901d361fef6349aef377 @Override diff --git a/net/minecraft/world/entity/animal/nautilus/Nautilus.java b/net/minecraft/world/entity/animal/nautilus/Nautilus.java -index 19e8de70183a159057d542dd057996355df6794d..cc38312d0a59529e7b8f799ffec2f917c9aa0e9b 100644 +index d6ba5f201314148a382ce71e2c570f336c5d7d40..49f3dc14c85a8ed391afdc7355e8c6ac34ab9ae5 100644 --- a/net/minecraft/world/entity/animal/nautilus/Nautilus.java +++ b/net/minecraft/world/entity/animal/nautilus/Nautilus.java -@@ -28,6 +28,17 @@ public class Nautilus extends AbstractNautilus { +@@ -37,6 +37,17 @@ public class Nautilus extends AbstractNautilus { super(type, level); } @@ -730,7 +730,7 @@ index 19e8de70183a159057d542dd057996355df6794d..cc38312d0a59529e7b8f799ffec2f917 protected Brain makeBrain(final Brain.Packed packedBrain) { return BRAIN_PROVIDER.makeBrain(this, packedBrain); diff --git a/net/minecraft/world/entity/animal/nautilus/ZombieNautilus.java b/net/minecraft/world/entity/animal/nautilus/ZombieNautilus.java -index c4661d5d89d1a5f4b106a9a015cdaed1976efce4..087e768c35c2c2af191c75648b278154ce5e593c 100644 +index c9aa882ab43ced1d3d9b84e19feae39d6ed28b78..1ceeaad8411f06de37a0ea5aff8fc48d9211eed2 100644 --- a/net/minecraft/world/entity/animal/nautilus/ZombieNautilus.java +++ b/net/minecraft/world/entity/animal/nautilus/ZombieNautilus.java @@ -48,6 +48,17 @@ public class ZombieNautilus extends AbstractNautilus { @@ -752,10 +752,10 @@ index c4661d5d89d1a5f4b106a9a015cdaed1976efce4..087e768c35c2c2af191c75648b278154 return AbstractNautilus.createAttributes().add(Attributes.MOVEMENT_SPEED, 1.1F); } diff --git a/net/minecraft/world/entity/animal/panda/Panda.java b/net/minecraft/world/entity/animal/panda/Panda.java -index e551907cd2721fa330639aa590ef76711e7e21d6..83ec6995b5fc47872efb5039c3e24cd62da22d10 100644 +index f0b23d5f443a8f29ce98e16f0254425147599d8d..bd8936c6ef9d2285858b784873e85d52812b3f14 100644 --- a/net/minecraft/world/entity/animal/panda/Panda.java +++ b/net/minecraft/world/entity/animal/panda/Panda.java -@@ -136,6 +136,15 @@ public class Panda extends Animal { +@@ -138,6 +138,15 @@ public class Panda extends Animal { } // Purpur end - Ridables @@ -771,7 +771,7 @@ index e551907cd2721fa330639aa590ef76711e7e21d6..83ec6995b5fc47872efb5039c3e24cd6 @Override protected boolean canDispenserEquipIntoSlot(final EquipmentSlot slot) { return slot == EquipmentSlot.MAINHAND && this.canPickUpLoot(); -@@ -623,7 +632,11 @@ public class Panda extends Animal { +@@ -625,7 +634,11 @@ public class Panda extends Animal { public void setAttributes() { if (this.isWeak()) { @@ -785,10 +785,10 @@ index e551907cd2721fa330639aa590ef76711e7e21d6..83ec6995b5fc47872efb5039c3e24cd6 if (this.isLazy()) { diff --git a/net/minecraft/world/entity/animal/parrot/Parrot.java b/net/minecraft/world/entity/animal/parrot/Parrot.java -index 0cc9e9dcdaeaee8db350b4dc4acb1e6c370aa2c3..c11c6fdc96d696a2f8c4aee96f4ddf6c4f9b9676 100644 +index ace47c04cb0bdb8b44fa80bfad7b01e670839f91..441919a0a99c4d87c13611999e1e24e9cfb6e0e9 100644 --- a/net/minecraft/world/entity/animal/parrot/Parrot.java +++ b/net/minecraft/world/entity/animal/parrot/Parrot.java -@@ -199,6 +199,14 @@ public class Parrot extends ShoulderRidingEntity implements FlyingAnimal { +@@ -199,6 +199,14 @@ public class Parrot extends ShoulderRidingEntity { } // Purpur end - Ridables @@ -804,10 +804,10 @@ index 0cc9e9dcdaeaee8db350b4dc4acb1e6c370aa2c3..c11c6fdc96d696a2f8c4aee96f4ddf6c public @Nullable SpawnGroupData finalizeSpawn( final ServerLevelAccessor level, final DifficultyInstance difficulty, final EntitySpawnReason spawnReason, @Nullable SpawnGroupData groupData diff --git a/net/minecraft/world/entity/animal/pig/Pig.java b/net/minecraft/world/entity/animal/pig/Pig.java -index ed655afebba29cccb7c15e6f15aee6478ecdaee4..7246b53d2fba7e547d41fd5db1eb487738e5b51e 100644 +index b3a24a2e48c0ada66cde1ee7710c2d89d4f221d9..376e60ef2125e00432aad380ea7a6087abc76a0c 100644 --- a/net/minecraft/world/entity/animal/pig/Pig.java +++ b/net/minecraft/world/entity/animal/pig/Pig.java -@@ -85,6 +85,14 @@ public class Pig extends Animal implements ItemSteerable { +@@ -93,6 +93,14 @@ public class Pig extends Animal implements ItemSteerable { } // Purpur end - Ridables @@ -823,10 +823,10 @@ index ed655afebba29cccb7c15e6f15aee6478ecdaee4..7246b53d2fba7e547d41fd5db1eb4877 protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/animal/polarbear/PolarBear.java b/net/minecraft/world/entity/animal/polarbear/PolarBear.java -index a7a77f9cae2f524ce7abbc694cdae7c95bef3e16..ddfc7cab1b3864fc523e0837ff4acb8454e83ac9 100644 +index 250401cef7c93375235ef275165f1e0d9684d42a..85c6b17bbf490315b76612c4a8ab50b03e9d14a3 100644 --- a/net/minecraft/world/entity/animal/polarbear/PolarBear.java +++ b/net/minecraft/world/entity/animal/polarbear/PolarBear.java -@@ -118,6 +118,14 @@ public class PolarBear extends Animal implements NeutralMob { +@@ -124,6 +124,14 @@ public class PolarBear extends Animal implements NeutralMob { } // Purpur end - Ridables @@ -840,12 +840,12 @@ index a7a77f9cae2f524ce7abbc694cdae7c95bef3e16..ddfc7cab1b3864fc523e0837ff4acb84 + @Override public @Nullable AgeableMob getBreedOffspring(final ServerLevel level, final AgeableMob partner) { - return EntityType.POLAR_BEAR.create(level, EntitySpawnReason.BREEDING); + return EntityTypes.POLAR_BEAR.create(level, EntitySpawnReason.BREEDING); diff --git a/net/minecraft/world/entity/animal/rabbit/Rabbit.java b/net/minecraft/world/entity/animal/rabbit/Rabbit.java -index 0053a1e7ed9b577128241e0c72f59d66eb532726..4aa18f0ce6f07f479f1d856c9cef9fa5d6329138 100644 +index 2d2078ca3adeb78b6ec2633c35d3c622184cc3b2..38fa1c0b79e3dc11e830af95be4bed1e74910108 100644 --- a/net/minecraft/world/entity/animal/rabbit/Rabbit.java +++ b/net/minecraft/world/entity/animal/rabbit/Rabbit.java -@@ -162,6 +162,14 @@ public class Rabbit extends Animal { +@@ -163,6 +163,14 @@ public class Rabbit extends Animal { } // Purpur end - Ridables @@ -861,10 +861,10 @@ index 0053a1e7ed9b577128241e0c72f59d66eb532726..4aa18f0ce6f07f479f1d856c9cef9fa5 public void registerGoals() { this.goalSelector.addGoal(1, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/animal/sheep/Sheep.java b/net/minecraft/world/entity/animal/sheep/Sheep.java -index 08cd6e675107bf622b634c1f0e2cd53e33ef3569..eb919dc63d950af08448b75559467ec88623d6b8 100644 +index ef69bac6181d5f130008629ddb2763f56232345b..6ba9cd9090ef264660361e28198886f96c95dfba 100644 --- a/net/minecraft/world/entity/animal/sheep/Sheep.java +++ b/net/minecraft/world/entity/animal/sheep/Sheep.java -@@ -80,6 +80,14 @@ public class Sheep extends Animal implements Shearable { +@@ -88,6 +88,14 @@ public class Sheep extends Animal implements Shearable { } // Purpur end - Ridables @@ -880,10 +880,10 @@ index 08cd6e675107bf622b634c1f0e2cd53e33ef3569..eb919dc63d950af08448b75559467ec8 protected void registerGoals() { this.eatBlockGoal = new EatBlockGoal(this); diff --git a/net/minecraft/world/entity/animal/sniffer/Sniffer.java b/net/minecraft/world/entity/animal/sniffer/Sniffer.java -index b980ed12f7f20d89c6bd01d2c94cb2cc15f5c561..73a1ba04a6a3ef0d0aba3301b6c1dfefeacb4df6 100644 +index 1e844ec746aa200ed8e70af5dd4389f3bd671112..9246c76131c02832d96eeb6d3899e0050abce938 100644 --- a/net/minecraft/world/entity/animal/sniffer/Sniffer.java +++ b/net/minecraft/world/entity/animal/sniffer/Sniffer.java -@@ -111,6 +111,14 @@ public class Sniffer extends Animal { +@@ -112,6 +112,14 @@ public class Sniffer extends Animal { } // Purpur end - Ridables @@ -899,10 +899,10 @@ index b980ed12f7f20d89c6bd01d2c94cb2cc15f5c561..73a1ba04a6a3ef0d0aba3301b6c1dfef protected void defineSynchedData(final SynchedEntityData.Builder entityData) { super.defineSynchedData(entityData); diff --git a/net/minecraft/world/entity/animal/squid/GlowSquid.java b/net/minecraft/world/entity/animal/squid/GlowSquid.java -index 51a0771819abfdde5043eaeca62b0ce45c40039e..cb3d0bd838473af87af74c7d1bab38593a6c8f6d 100644 +index bde43e42ba7eec863fd0e2cd9b8068e8cefaaa1c..86b8f30bc9c98423e2e5bbb2a7548ea36c0854b6 100644 --- a/net/minecraft/world/entity/animal/squid/GlowSquid.java +++ b/net/minecraft/world/entity/animal/squid/GlowSquid.java -@@ -50,6 +50,13 @@ public class GlowSquid extends Squid { +@@ -51,6 +51,13 @@ public class GlowSquid extends Squid { } // Purpur end - Ridables @@ -917,7 +917,7 @@ index 51a0771819abfdde5043eaeca62b0ce45c40039e..cb3d0bd838473af87af74c7d1bab3859 protected ParticleOptions getInkParticle() { return ParticleTypes.GLOW_SQUID_INK; diff --git a/net/minecraft/world/entity/animal/squid/Squid.java b/net/minecraft/world/entity/animal/squid/Squid.java -index 76c9c4cb6f7567946bc90e2d59990d5aabd8e4d9..da8e8d817f959ffcbc0a84a40af854ecfc939ef2 100644 +index e2273ce904e2c95491caec67d36d37b4b5e0fe67..66477755d3ee8293a8bd79baa01214954b792898 100644 --- a/net/minecraft/world/entity/animal/squid/Squid.java +++ b/net/minecraft/world/entity/animal/squid/Squid.java @@ -96,6 +96,14 @@ public class Squid extends AgeableWaterCreature { @@ -936,10 +936,10 @@ index 76c9c4cb6f7567946bc90e2d59990d5aabd8e4d9..da8e8d817f959ffcbc0a84a40af854ec protected void registerGoals() { this.goalSelector.addGoal(0, new Squid.SquidRandomMovementGoal(this)); diff --git a/net/minecraft/world/entity/animal/turtle/Turtle.java b/net/minecraft/world/entity/animal/turtle/Turtle.java -index 53fc1012d46e20b623246cecae87b3feb1a0fda6..2dfcf0c9f8eb762d1683d2841a05219c497fddfc 100644 +index 2e147b2276dd8604dc6adb75c7ac90ef42e63955..806da779ee6ea7ab6fe572d2ca6cf35c03d302b3 100644 --- a/net/minecraft/world/entity/animal/turtle/Turtle.java +++ b/net/minecraft/world/entity/animal/turtle/Turtle.java -@@ -104,6 +104,14 @@ public class Turtle extends Animal { +@@ -105,6 +105,14 @@ public class Turtle extends Animal { } // Purpur end - Ridables @@ -955,10 +955,10 @@ index 53fc1012d46e20b623246cecae87b3feb1a0fda6..2dfcf0c9f8eb762d1683d2841a05219c this.homePos = pos; } diff --git a/net/minecraft/world/entity/animal/wolf/Wolf.java b/net/minecraft/world/entity/animal/wolf/Wolf.java -index 17c3d76f0d606722dbc657250a85de9306838356..ab9e4583dd29e692a3632d23c479539a3f19e042 100644 +index f54a14a1e434cbfedf709d3b1495f2ae9ae4f11f..acf623ba0ab1f1d6c98af1a83cddd634443aee58 100644 --- a/net/minecraft/world/entity/animal/wolf/Wolf.java +++ b/net/minecraft/world/entity/animal/wolf/Wolf.java -@@ -204,6 +204,14 @@ public class Wolf extends TamableAnimal implements NeutralMob { +@@ -212,6 +212,14 @@ public class Wolf extends TamableAnimal implements NeutralMob { } // Purpur end - Ridables @@ -974,10 +974,10 @@ index 17c3d76f0d606722dbc657250a85de9306838356..ab9e4583dd29e692a3632d23c479539a protected void registerGoals() { this.goalSelector.addGoal(1, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -index bede0e9ce5b7c73d589511b71ad2a5f9e628eebc..6e2afa71d0d2da4cca868f617d29b3cc9071553d 100644 +index 55a24b960f1372c0fa7edf7c5d439d452f5f3839..6883bd42f9d124c6421d1eb332f04514aa7bc3f8 100644 --- a/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java +++ b/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -@@ -163,6 +163,13 @@ public class EnderDragon extends Mob implements Enemy { +@@ -164,6 +164,13 @@ public class EnderDragon extends Mob implements Enemy { } // Purpur end - Ridables @@ -991,7 +991,7 @@ index bede0e9ce5b7c73d589511b71ad2a5f9e628eebc..6e2afa71d0d2da4cca868f617d29b3cc public static AttributeSupplier.Builder createAttributes() { return Mob.createMobAttributes().add(Attributes.MAX_HEALTH, 200.0).add(Attributes.CAMERA_DISTANCE, 16.0); } -@@ -1061,7 +1068,7 @@ public class EnderDragon extends Mob implements Enemy { +@@ -1065,7 +1072,7 @@ public class EnderDragon extends Mob implements Enemy { @Override protected float sanitizeScale(final float scale) { @@ -1001,7 +1001,7 @@ index bede0e9ce5b7c73d589511b71ad2a5f9e628eebc..6e2afa71d0d2da4cca868f617d29b3cc // CraftBukkit start - SPIGOT-2420: Special case, the ender dragon drops 12000 xp for the first kill and 500 xp for every other kill and this over time. diff --git a/net/minecraft/world/entity/boss/wither/WitherBoss.java b/net/minecraft/world/entity/boss/wither/WitherBoss.java -index 852a604d8c06e9871da4c28d60b44a5869258011..8b2716294b18da6fae981e088b8ddb1f2ffcfb2e 100644 +index 1f32d0d87727009a8ca671415159566c10f79f7e..7a80afbe7d1c5ff2ea0e26eb1c59123705dc1aef 100644 --- a/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/net/minecraft/world/entity/boss/wither/WitherBoss.java @@ -213,6 +213,14 @@ public class WitherBoss extends Monster implements RangedAttackMob { @@ -1067,10 +1067,10 @@ index e5f7d276c083cdb78d2f420c03be1b08115d5597..01c722932aaed2221badaa6231d8a20d protected void registerGoals() { this.goalSelector.addGoal(1, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/monster/ElderGuardian.java b/net/minecraft/world/entity/monster/ElderGuardian.java -index b86f600b1101fe1fc9f7cac5cc47c3f048e0f885..ffcfe02c51f6df1bd238c821a8d6535f4ccf019c 100644 +index f27035be70e05dddb17944f0b461de8b506490d6..a14807226ac6b6786cd1470130819d2d735db16b 100644 --- a/net/minecraft/world/entity/monster/ElderGuardian.java +++ b/net/minecraft/world/entity/monster/ElderGuardian.java -@@ -43,6 +43,14 @@ public class ElderGuardian extends Guardian { +@@ -44,6 +44,14 @@ public class ElderGuardian extends Guardian { } // Purpur end - Ridables @@ -1124,7 +1124,7 @@ index 8405358d2221d76bc0949047fcc6f17fdfc99dfc..c10982945974171e478690d2db508055 protected void registerGoals() { this.goalSelector.addGoal(1, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/monster/Ghast.java b/net/minecraft/world/entity/monster/Ghast.java -index 0d40b789dc426c42aca47c01b4db57fb2b282f0d..5ebb6dc59ee8a845a983de207e763e1df103a4f7 100644 +index 7e843a144900d8d5c95848ce32904432502a18e6..f6cd12c6a36c95dcb338c5aec791707bb971d615 100644 --- a/net/minecraft/world/entity/monster/Ghast.java +++ b/net/minecraft/world/entity/monster/Ghast.java @@ -75,6 +75,14 @@ public class Ghast extends Mob implements Enemy { @@ -1164,7 +1164,7 @@ index 1b7a75a2be45928093382fa2f2da079ffc5d190d..7b6952f13e18548d0e71035d6cd6cfb2 return Monster.createMonsterAttributes() .add(Attributes.MAX_HEALTH, 100.0) diff --git a/net/minecraft/world/entity/monster/Guardian.java b/net/minecraft/world/entity/monster/Guardian.java -index 6ad546f033919c6f0ba1091222a7af0f365fabb0..2616aab01c6c43fcc259c42c9d5c43fc73794caf 100644 +index af865e3a6549f008826ed7469b2ecb4c92598863..a803e9b43758b7bad9bb1f9b577a2c9c7bc040d2 100644 --- a/net/minecraft/world/entity/monster/Guardian.java +++ b/net/minecraft/world/entity/monster/Guardian.java @@ -89,6 +89,14 @@ public class Guardian extends Monster { @@ -1182,41 +1182,8 @@ index 6ad546f033919c6f0ba1091222a7af0f365fabb0..2616aab01c6c43fcc259c42c9d5c43fc @Override protected void registerGoals() { MoveTowardsRestrictionGoal goal = new MoveTowardsRestrictionGoal(this, 1.0); -diff --git a/net/minecraft/world/entity/monster/MagmaCube.java b/net/minecraft/world/entity/monster/MagmaCube.java -index 600da11f46673177a0ff1f56c93a60d94df40025..d40a4daeec1500f2d9865022ee6e3c386ad7533e 100644 ---- a/net/minecraft/world/entity/monster/MagmaCube.java -+++ b/net/minecraft/world/entity/monster/MagmaCube.java -@@ -46,6 +46,28 @@ public class MagmaCube extends Slime { - } - // Purpur end - Ridables - -+ // Purpur start - Configurable entity base attributes -+ @Override -+ protected String getMaxHealthEquation() { -+ return level().purpurConfig.magmaCubeMaxHealth; -+ } -+ -+ @Override -+ protected String getAttackDamageEquation() { -+ return level().purpurConfig.magmaCubeAttackDamage; -+ } -+ -+ @Override -+ protected java.util.Map getMaxHealthCache() { -+ return level().purpurConfig.magmaCubeMaxHealthCache; -+ } -+ -+ @Override -+ protected java.util.Map getAttackDamageCache() { -+ return level().purpurConfig.magmaCubeAttackDamageCache; -+ } -+ // Purpur end - Configurable entity base attributes -+ - public static AttributeSupplier.Builder createAttributes() { - return Monster.createMonsterAttributes().add(Attributes.MOVEMENT_SPEED, 0.2F); - } diff --git a/net/minecraft/world/entity/monster/Phantom.java b/net/minecraft/world/entity/monster/Phantom.java -index 961a874d3eeee40d4c45ae511412ac0167ae54ac..194b398a85550edc752b54636079e16a4de27ba7 100644 +index 6ad191adcbb9af4610fc86902cacf20977f31d6a..b42f67dff1ae0fd9b549f584e789285a15cb690c 100644 --- a/net/minecraft/world/entity/monster/Phantom.java +++ b/net/minecraft/world/entity/monster/Phantom.java @@ -140,7 +140,10 @@ public class Phantom extends Mob implements Enemy { @@ -1256,10 +1223,10 @@ index 961a874d3eeee40d4c45ae511412ac0167ae54ac..194b398a85550edc752b54636079e16a public void tick() { super.tick(); diff --git a/net/minecraft/world/entity/monster/Ravager.java b/net/minecraft/world/entity/monster/Ravager.java -index 1d02a5a037cb50844419ef41227be2427cdff4ca..3e2fa1f4e9c820af76ef5f4354ca66fae182da7b 100644 +index 99490398f72e91c0d3dc9d2a3dd82fb6f49734d5..d8c97a5ec3f121ce92dedfeba4babb564714eca4 100644 --- a/net/minecraft/world/entity/monster/Ravager.java +++ b/net/minecraft/world/entity/monster/Ravager.java -@@ -93,6 +93,14 @@ public class Ravager extends Raider { +@@ -94,6 +94,14 @@ public class Ravager extends Raider { } // Purpur end - Ridables @@ -1275,7 +1242,7 @@ index 1d02a5a037cb50844419ef41227be2427cdff4ca..3e2fa1f4e9c820af76ef5f4354ca66fa protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/Shulker.java b/net/minecraft/world/entity/monster/Shulker.java -index 746dfa496dc6cde62ab3c890aa6fbdbe68086ea9..b07dd45cf3ee07d8e51aa9473ee22fab577809c6 100644 +index 8ef97a74c5c2d4caa033c93cf553ba885605d052..12b32798d890bf430a04781866de140e07f94821 100644 --- a/net/minecraft/world/entity/monster/Shulker.java +++ b/net/minecraft/world/entity/monster/Shulker.java @@ -126,6 +126,14 @@ public class Shulker extends AbstractGolem implements Enemy { @@ -1293,7 +1260,7 @@ index 746dfa496dc6cde62ab3c890aa6fbdbe68086ea9..b07dd45cf3ee07d8e51aa9473ee22fab @Override protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables -@@ -602,7 +610,7 @@ public class Shulker extends AbstractGolem implements Enemy { +@@ -614,7 +622,7 @@ public class Shulker extends AbstractGolem implements Enemy { @Override protected float sanitizeScale(final float scale) { @@ -1303,7 +1270,7 @@ index 746dfa496dc6cde62ab3c890aa6fbdbe68086ea9..b07dd45cf3ee07d8e51aa9473ee22fab private void setVariant(final Optional color) { diff --git a/net/minecraft/world/entity/monster/Silverfish.java b/net/minecraft/world/entity/monster/Silverfish.java -index 4bda4d98e94f906cd86eafd412dd393b534ff8df..6037500c084e709110dfe512f110b505111b6d71 100644 +index 6aa67e7857cf205d436b451387083af75e9ece20..a789aa75d88658236524d83fee02cf303e898809 100644 --- a/net/minecraft/world/entity/monster/Silverfish.java +++ b/net/minecraft/world/entity/monster/Silverfish.java @@ -55,6 +55,16 @@ public class Silverfish extends Monster { @@ -1323,30 +1290,117 @@ index 4bda4d98e94f906cd86eafd412dd393b534ff8df..6037500c084e709110dfe512f110b505 @Override protected void registerGoals() { this.friendsGoal = new Silverfish.SilverfishWakeUpFriendsGoal(this); -diff --git a/net/minecraft/world/entity/monster/Slime.java b/net/minecraft/world/entity/monster/Slime.java -index 47c6dfee0254c4ccd62ed4ff584a78234284a815..f541ccef625ab0d560f4781c28ad7ae3b67196d6 100644 ---- a/net/minecraft/world/entity/monster/Slime.java -+++ b/net/minecraft/world/entity/monster/Slime.java -@@ -102,6 +102,39 @@ public class Slime extends Mob implements Enemy { +diff --git a/net/minecraft/world/entity/monster/Strider.java b/net/minecraft/world/entity/monster/Strider.java +index cd35797eff1ec2881e72b0fc44bd9a098d795a74..4f4f01941e66880113dd80626030a635203365b9 100644 +--- a/net/minecraft/world/entity/monster/Strider.java ++++ b/net/minecraft/world/entity/monster/Strider.java +@@ -116,6 +116,14 @@ public class Strider extends Animal implements ItemSteerable { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes -+ protected String getMaxHealthEquation() { -+ return level().purpurConfig.slimeMaxHealth; ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.striderMaxHealth); ++ this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.striderScale); + } ++ // Purpur end - Configurable entity base attributes + -+ protected String getAttackDamageEquation() { -+ return level().purpurConfig.slimeAttackDamage; + public static boolean checkStriderSpawnRules( + final EntityType ignoredType, + final LevelAccessor level, +diff --git a/net/minecraft/world/entity/monster/Vex.java b/net/minecraft/world/entity/monster/Vex.java +index 3ddf4ba1d809e62e4a1f7cc54f44738b1c129145..854c78d567a446479a704fbf459885f2b164e54d 100644 +--- a/net/minecraft/world/entity/monster/Vex.java ++++ b/net/minecraft/world/entity/monster/Vex.java +@@ -104,6 +104,14 @@ public class Vex extends Monster implements TraceableEntity, OwnableEntity { + } + // Purpur end - Ridables + ++ // Purpur start - Configurable entity base attributes ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.vexMaxHealth); ++ this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.vexScale); + } ++ // Purpur end - Configurable entity base attributes + -+ protected java.util.Map getMaxHealthCache() { -+ return level().purpurConfig.slimeMaxHealthCache; + @Override + public boolean isFlapping() { + return this.tickCount % TICKS_PER_FLAP == 0; +diff --git a/net/minecraft/world/entity/monster/Witch.java b/net/minecraft/world/entity/monster/Witch.java +index 0d08901296fa2c7acf0b9ad2e0ef217c4b0ab874..4b2da14b64476d4b7358c6c764a622d4b0fc6207 100644 +--- a/net/minecraft/world/entity/monster/Witch.java ++++ b/net/minecraft/world/entity/monster/Witch.java +@@ -75,6 +75,14 @@ public class Witch extends Raider implements RangedAttackMob { + } + // Purpur end - Ridables + ++ // Purpur start - Configurable entity base attributes ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.witchMaxHealth); ++ this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.witchScale); + } ++ // Purpur end - Configurable entity base attributes + -+ protected java.util.Map getAttackDamageCache() { -+ return level().purpurConfig.slimeAttackDamageCache; + @Override + protected void registerGoals() { + super.registerGoals(); +diff --git a/net/minecraft/world/entity/monster/Zoglin.java b/net/minecraft/world/entity/monster/Zoglin.java +index 41cd8cef18309f1dcfdb5c45f6733bad10587303..f449875ed2ada648aef7f0cfff52c08e94516d73 100644 +--- a/net/minecraft/world/entity/monster/Zoglin.java ++++ b/net/minecraft/world/entity/monster/Zoglin.java +@@ -101,6 +101,14 @@ public class Zoglin extends Monster implements HoglinBase { + } + // Purpur end - Ridables + ++ // Purpur start - Configurable entity base attributes ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.zoglinMaxHealth); ++ this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.zoglinScale); + } ++ // Purpur end - Configurable entity base attributes ++ + @Override + protected Brain makeBrain(final Brain.Packed packedBrain) { + return BRAIN_PROVIDER.makeBrain(this, packedBrain); +diff --git a/net/minecraft/world/entity/monster/creaking/Creaking.java b/net/minecraft/world/entity/monster/creaking/Creaking.java +index a63b919b08b2fba048a338fe24ae2a1b90c869bd..bb0508e1273ff0ab8db37868b78d16f0c15e854d 100644 +--- a/net/minecraft/world/entity/monster/creaking/Creaking.java ++++ b/net/minecraft/world/entity/monster/creaking/Creaking.java +@@ -129,6 +129,14 @@ public class Creaking extends Monster { + } + // Purpur end - Ridables + ++ // Purpur start - Configurable entity base attributes ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.creakingMaxHealth); ++ this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.creakingScale); ++ } ++ // Purpur end - Configurable entity base attributes ++ + @Override + protected BodyRotationControl createBodyControl() { + return new Creaking.CreakingBodyRotationControl(this); +diff --git a/net/minecraft/world/entity/monster/cubemob/AbstractCubeMob.java b/net/minecraft/world/entity/monster/cubemob/AbstractCubeMob.java +index d01d020a562493ba0c429d2c647bf13fe729dbe0..9d4410c84c0ebb9d9e0a9eead27b235992ed2df8 100644 +--- a/net/minecraft/world/entity/monster/cubemob/AbstractCubeMob.java ++++ b/net/minecraft/world/entity/monster/cubemob/AbstractCubeMob.java +@@ -75,6 +75,31 @@ public abstract class AbstractCubeMob extends AgeableMob { + + protected abstract void addTargetingGoals(); + ++ // Purpur start - Configurable entity base attributes ++ protected abstract String getMaxHealthEquation(); ++ ++ protected abstract String getAttackDamageEquation(); ++ ++ protected abstract java.util.Map getMaxHealthCache(); ++ ++ protected abstract java.util.Map getAttackDamageCache(); + + protected double getFromCache(java.util.function.Supplier equation, java.util.function.Supplier> cache, java.util.function.Supplier defaultValue) { + int size = getSize(); @@ -1365,120 +1419,117 @@ index 47c6dfee0254c4ccd62ed4ff584a78234284a815..f541ccef625ab0d560f4781c28ad7ae3 + // Purpur end - Configurable entity base attributes + @Override - protected void registerGoals() { - this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables -@@ -132,9 +165,9 @@ public class Slime extends Mob implements Enemy { - this.entityData.set(ID_SIZE, actualSize); - this.reapplyPosition(); - this.refreshDimensions(); -- this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(actualSize * actualSize); -+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(getFromCache(this::getMaxHealthEquation, this::getMaxHealthCache, () -> (double) (size * size))); // Purpur - Configurable entity base attributes - this.getAttribute(Attributes.MOVEMENT_SPEED).setBaseValue(0.2F + 0.1F * actualSize); -- this.getAttribute(Attributes.ATTACK_DAMAGE).setBaseValue(actualSize); -+ this.getAttribute(Attributes.ATTACK_DAMAGE).setBaseValue(getFromCache(this::getAttackDamageEquation, this::getAttackDamageCache, () -> (double) actualSize)); // Purpur - Configurable entity base attributes - if (updateHealth) { - this.setHealth(this.getMaxHealth()); - } -diff --git a/net/minecraft/world/entity/monster/Strider.java b/net/minecraft/world/entity/monster/Strider.java -index f2ef42ce208c2bceb01f9a34bd3a58ac29beb6d9..47a5ce453ea7b291e5cca12c7cb86ccba9d55cc8 100644 ---- a/net/minecraft/world/entity/monster/Strider.java -+++ b/net/minecraft/world/entity/monster/Strider.java -@@ -110,6 +110,14 @@ public class Strider extends Animal implements ItemSteerable { + protected void defineSynchedData(final SynchedEntityData.Builder entityData) { + super.defineSynchedData(entityData); +diff --git a/net/minecraft/world/entity/monster/cubemob/MagmaCube.java b/net/minecraft/world/entity/monster/cubemob/MagmaCube.java +index bb36ce235aac8d2cf9e4b5dc1328991f65353d20..54cc2ab970ec854ca44476a5e58b53363c64d1e5 100644 +--- a/net/minecraft/world/entity/monster/cubemob/MagmaCube.java ++++ b/net/minecraft/world/entity/monster/cubemob/MagmaCube.java +@@ -68,6 +68,28 @@ public class MagmaCube extends AbstractCubeMob implements Enemy { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override -+ public void initAttributes() { -+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.striderMaxHealth); -+ this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.striderScale); ++ protected String getMaxHealthEquation() { ++ return level().purpurConfig.magmaCubeMaxHealth; ++ } ++ ++ @Override ++ protected String getAttackDamageEquation() { ++ return level().purpurConfig.magmaCubeAttackDamage; ++ } ++ ++ @Override ++ protected java.util.Map getMaxHealthCache() { ++ return level().purpurConfig.magmaCubeMaxHealthCache; ++ } ++ ++ @Override ++ protected java.util.Map getAttackDamageCache() { ++ return level().purpurConfig.magmaCubeAttackDamageCache; + } + // Purpur end - Configurable entity base attributes + - public static boolean checkStriderSpawnRules( - final EntityType ignoredType, - final LevelAccessor level, -diff --git a/net/minecraft/world/entity/monster/Vex.java b/net/minecraft/world/entity/monster/Vex.java -index 0621c1a46c392b8fcf5235f7483d0d8a0ac598ed..4b5aade3de8ff29943b58741db5e310851a33561 100644 ---- a/net/minecraft/world/entity/monster/Vex.java -+++ b/net/minecraft/world/entity/monster/Vex.java -@@ -102,6 +102,14 @@ public class Vex extends Monster implements TraceableEntity { + public static AttributeSupplier.Builder createAttributes() { + return Monster.createMonsterAttributes().add(Attributes.MOVEMENT_SPEED, 0.2F); + } +diff --git a/net/minecraft/world/entity/monster/cubemob/Slime.java b/net/minecraft/world/entity/monster/cubemob/Slime.java +index 0ac7a442a0ea79f190aceb60b771d616b377e613..22c20e4360473cdbe9cda8bb7b3b30be85f16fe6 100644 +--- a/net/minecraft/world/entity/monster/cubemob/Slime.java ++++ b/net/minecraft/world/entity/monster/cubemob/Slime.java +@@ -79,6 +79,28 @@ public class Slime extends AbstractCubeMob implements Enemy { } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override -+ public void initAttributes() { -+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.vexMaxHealth); -+ this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.vexScale); ++ protected String getMaxHealthEquation() { ++ return level().purpurConfig.slimeMaxHealth; ++ } ++ ++ @Override ++ protected String getAttackDamageEquation() { ++ return level().purpurConfig.slimeAttackDamage; ++ } ++ ++ @Override ++ protected java.util.Map getMaxHealthCache() { ++ return level().purpurConfig.slimeMaxHealthCache; ++ } ++ ++ @Override ++ protected java.util.Map getAttackDamageCache() { ++ return level().purpurConfig.slimeAttackDamageCache; + } + // Purpur end - Configurable entity base attributes + @Override - public boolean isFlapping() { - return this.tickCount % TICKS_PER_FLAP == 0; -diff --git a/net/minecraft/world/entity/monster/Witch.java b/net/minecraft/world/entity/monster/Witch.java -index 7551dcf0bd8d0ff6deffb298211788d5ff91d93b..6b17c2135397f349670a7180e88db4794d3902a8 100644 ---- a/net/minecraft/world/entity/monster/Witch.java -+++ b/net/minecraft/world/entity/monster/Witch.java -@@ -74,6 +74,14 @@ public class Witch extends Raider implements RangedAttackMob { + public SoundEvent getHurtSound(final DamageSource source) { + return this.isTiny() ? SoundEvents.SLIME_HURT_SMALL : SoundEvents.SLIME_HURT; +@@ -168,4 +190,12 @@ public class Slime extends AbstractCubeMob implements Enemy { + this.getAttribute(Attributes.ATTACK_DAMAGE).setBaseValue(actualSize); + this.xpReward = actualSize; + } ++ ++ @Override ++ protected void setcubeMobHealth(final int actualSize) { ++ // Purpur start - Configurable entity base attributes ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(getFromCache(this::getMaxHealthEquation, this::getMaxHealthCache, () -> (double) (actualSize * actualSize))); ++ this.getAttribute(Attributes.ATTACK_DAMAGE).setBaseValue(getFromCache(this::getAttackDamageEquation, this::getAttackDamageCache, () -> (double) actualSize)); ++ // Purpur end - Configurable entity base attributes ++ } + } +diff --git a/net/minecraft/world/entity/monster/cubemob/SulfurCube.java b/net/minecraft/world/entity/monster/cubemob/SulfurCube.java +index 601a54820df95a566cec6079715af166f912df70..8a12c35177a745e94c2a4ced86994114fac933f5 100644 +--- a/net/minecraft/world/entity/monster/cubemob/SulfurCube.java ++++ b/net/minecraft/world/entity/monster/cubemob/SulfurCube.java +@@ -151,6 +151,20 @@ public class SulfurCube extends AbstractCubeMob implements Bucketable, Shearable } // Purpur end - Ridables + // Purpur start - Configurable entity base attributes + @Override -+ public void initAttributes() { -+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.witchMaxHealth); -+ this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.witchScale); -+ } -+ // Purpur end - Configurable entity base attributes ++ protected String getMaxHealthEquation() {return "size";} + - @Override - protected void registerGoals() { - super.registerGoals(); -diff --git a/net/minecraft/world/entity/monster/Zoglin.java b/net/minecraft/world/entity/monster/Zoglin.java -index 1a5e3a38671602e097e1e7f00d8f80e46b1596a0..4d4593f89e20e8e72a979cc2dee54566ef380462 100644 ---- a/net/minecraft/world/entity/monster/Zoglin.java -+++ b/net/minecraft/world/entity/monster/Zoglin.java -@@ -93,6 +93,14 @@ public class Zoglin extends Monster implements HoglinBase { - } - // Purpur end - Ridables - -+ // Purpur start - Configurable entity base attributes + @Override -+ public void initAttributes() { -+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.zoglinMaxHealth); -+ this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.zoglinScale); -+ } -+ // Purpur end - Configurable entity base attributes ++ protected String getAttackDamageEquation() {return "size";} + - @Override - protected Brain makeBrain(final Brain.Packed packedBrain) { - return BRAIN_PROVIDER.makeBrain(this, packedBrain); -diff --git a/net/minecraft/world/entity/monster/creaking/Creaking.java b/net/minecraft/world/entity/monster/creaking/Creaking.java -index fdbf9b64871c5cdb7ed9fa56c669bd77d1a19ac2..ca64ff27b53ba5d3e9b06311757a0ff3baa8ca6b 100644 ---- a/net/minecraft/world/entity/monster/creaking/Creaking.java -+++ b/net/minecraft/world/entity/monster/creaking/Creaking.java -@@ -129,6 +129,14 @@ public class Creaking extends Monster { - } - // Purpur end - Ridables - -+ // Purpur start - Configurable entity base attributes + @Override -+ public void initAttributes() { -+ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.creakingMaxHealth); -+ this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.creakingScale); -+ } -+ // Purpur end - Configurable entity base attributes ++ protected java.util.Map getMaxHealthCache() {return new java.util.HashMap<>();} ++ ++ @Override ++ protected java.util.Map getAttackDamageCache() {return new java.util.HashMap<>();} ++ // Purpur start - Configurable entity base attributes + @Override - protected BodyRotationControl createBodyControl() { - return new Creaking.CreakingBodyRotationControl(this); + public boolean fromBucket() { + return this.entityData.get(FROM_BUCKET); diff --git a/net/minecraft/world/entity/monster/hoglin/Hoglin.java b/net/minecraft/world/entity/monster/hoglin/Hoglin.java -index 7ba62badc9b832bdedbec5984421abfee242fa16..352139672f2cf1a7d624db4cc5bdef3ab0c9b942 100644 +index 0f2b6f8d17fe80cb07b0cc18d3501ae700427eda..2d8023023ae121dd6ad623766c50e0b236e6a25e 100644 --- a/net/minecraft/world/entity/monster/hoglin/Hoglin.java +++ b/net/minecraft/world/entity/monster/hoglin/Hoglin.java -@@ -90,6 +90,14 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { +@@ -98,6 +98,14 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { } // Purpur end - Ridables @@ -1494,10 +1545,10 @@ index 7ba62badc9b832bdedbec5984421abfee242fa16..352139672f2cf1a7d624db4cc5bdef3a public void setTimeInOverworld(final int timeInOverworld) { this.timeInOverworld = timeInOverworld; diff --git a/net/minecraft/world/entity/monster/illager/Evoker.java b/net/minecraft/world/entity/monster/illager/Evoker.java -index 2d8654f1b16ee3177466dc21aff7c2bdbce310a7..d41c3efa257f82981fbbabd527c4e748f448bfa9 100644 +index ba8d47480a1927a28b13025bff6c785121dd13eb..73ebf1ac5d814399887e4e8e717ee8fb41404969 100644 --- a/net/minecraft/world/entity/monster/illager/Evoker.java +++ b/net/minecraft/world/entity/monster/illager/Evoker.java -@@ -66,6 +66,14 @@ public class Evoker extends SpellcasterIllager { +@@ -67,6 +67,14 @@ public class Evoker extends SpellcasterIllager { } // Purpur end - Ridables @@ -1534,7 +1585,7 @@ index 9ea4745eb0d72c25ac5b89a6bfa5ba2846740f07..0150ebdcbb681bcf8128eec34fd6e3fb protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/illager/Pillager.java b/net/minecraft/world/entity/monster/illager/Pillager.java -index 510a1d4e1e44bda60ee05f0799a8930403f3eb7e..134650a5866459881c1dca4b77b47110fd67420a 100644 +index a0e926bedb5000a8e3d8e37207916cc06ad01090..81d956085667b7564588b54b54c1150b8a082c97 100644 --- a/net/minecraft/world/entity/monster/illager/Pillager.java +++ b/net/minecraft/world/entity/monster/illager/Pillager.java @@ -82,6 +82,14 @@ public class Pillager extends AbstractIllager implements CrossbowAttackMob, Inve @@ -1553,7 +1604,7 @@ index 510a1d4e1e44bda60ee05f0799a8930403f3eb7e..134650a5866459881c1dca4b77b47110 protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/illager/Vindicator.java b/net/minecraft/world/entity/monster/illager/Vindicator.java -index c3164a33fd8010e1920eead11c482641f17b3a65..865395b9ceddfaac4fc88701878a1cf349556fe1 100644 +index 7caebb032e03ce54463c1e1050dc2bfe14cb16ee..d06f6bf930277f08756752f7f259a57f456e7c38 100644 --- a/net/minecraft/world/entity/monster/illager/Vindicator.java +++ b/net/minecraft/world/entity/monster/illager/Vindicator.java @@ -74,6 +74,14 @@ public class Vindicator extends AbstractIllager { @@ -1572,10 +1623,10 @@ index c3164a33fd8010e1920eead11c482641f17b3a65..865395b9ceddfaac4fc88701878a1cf3 protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/piglin/Piglin.java b/net/minecraft/world/entity/monster/piglin/Piglin.java -index f617f3cbd41e9b60faf1489dd32972c6a2467fe1..17ce12d23ec9e1e03c02755711dfecb6d207af61 100644 +index f74df436798220d83f62383c523566d0acc2c87a..95751fd884c70ff6a3ff95fb2d442627a7867996 100644 --- a/net/minecraft/world/entity/monster/piglin/Piglin.java +++ b/net/minecraft/world/entity/monster/piglin/Piglin.java -@@ -125,6 +125,14 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento +@@ -126,6 +126,14 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento } // Purpur end - Ridables @@ -1591,7 +1642,7 @@ index f617f3cbd41e9b60faf1489dd32972c6a2467fe1..17ce12d23ec9e1e03c02755711dfecb6 protected void addAdditionalSaveData(final ValueOutput output) { super.addAdditionalSaveData(output); diff --git a/net/minecraft/world/entity/monster/piglin/PiglinBrute.java b/net/minecraft/world/entity/monster/piglin/PiglinBrute.java -index 75fea76d60b76a81646aa3ae4defa6cc5385d78c..4d82bf4283cb3ff26d5a9c367a28b4debed6cb0d 100644 +index 3b8a2fbd8f403c72fe092f8f2a95f95c9f7f930c..3cbb6f2ee343e6d3851e84e53cb1aafa55418b0f 100644 --- a/net/minecraft/world/entity/monster/piglin/PiglinBrute.java +++ b/net/minecraft/world/entity/monster/piglin/PiglinBrute.java @@ -67,6 +67,14 @@ public class PiglinBrute extends AbstractPiglin { @@ -1610,7 +1661,7 @@ index 75fea76d60b76a81646aa3ae4defa6cc5385d78c..4d82bf4283cb3ff26d5a9c367a28b4de return Monster.createMonsterAttributes() .add(Attributes.MAX_HEALTH, 50.0) diff --git a/net/minecraft/world/entity/monster/skeleton/Bogged.java b/net/minecraft/world/entity/monster/skeleton/Bogged.java -index 87b03adc6b8c18e489b3bcdc04d155719ab59e98..50dd01a2092f87fd9015c982f728f14965be5b81 100644 +index faa10efb42f00c8ff0726afcb689501e9c9ae50c..617f61f4f7559a42e27d935ab9837ed99a8e9c1e 100644 --- a/net/minecraft/world/entity/monster/skeleton/Bogged.java +++ b/net/minecraft/world/entity/monster/skeleton/Bogged.java @@ -58,6 +58,14 @@ public class Bogged extends AbstractSkeleton implements Shearable { @@ -1629,10 +1680,10 @@ index 87b03adc6b8c18e489b3bcdc04d155719ab59e98..50dd01a2092f87fd9015c982f728f149 protected void defineSynchedData(final SynchedEntityData.Builder entityData) { super.defineSynchedData(entityData); diff --git a/net/minecraft/world/entity/monster/skeleton/Skeleton.java b/net/minecraft/world/entity/monster/skeleton/Skeleton.java -index 06bae8a804bc7ac47dc21c915f386ca1dd07cd7f..76b16400085d237194ed646b04210c8eca8398d3 100644 +index ff352802190974eb466213c464b1f74541886c9b..12f87667ddeda1f57fe89f137b2df6cebef35c74 100644 --- a/net/minecraft/world/entity/monster/skeleton/Skeleton.java +++ b/net/minecraft/world/entity/monster/skeleton/Skeleton.java -@@ -43,6 +43,13 @@ public class Skeleton extends AbstractSkeleton { +@@ -44,6 +44,13 @@ public class Skeleton extends AbstractSkeleton { } // Purpur end - Ridables @@ -1647,7 +1698,7 @@ index 06bae8a804bc7ac47dc21c915f386ca1dd07cd7f..76b16400085d237194ed646b04210c8e protected void defineSynchedData(final SynchedEntityData.Builder entityData) { super.defineSynchedData(entityData); diff --git a/net/minecraft/world/entity/monster/skeleton/Stray.java b/net/minecraft/world/entity/monster/skeleton/Stray.java -index 1d706fe3bca726a4e606232039beeadedf75b499..ce9364040d6e856fd1fa42baa75b403098e6813f 100644 +index ce8d70886fd84f10400a1bfee857434fe5e4857b..f028e74e34b16cfa4b5c808a8896521d4709d03f 100644 --- a/net/minecraft/world/entity/monster/skeleton/Stray.java +++ b/net/minecraft/world/entity/monster/skeleton/Stray.java @@ -40,6 +40,13 @@ public class Stray extends AbstractSkeleton { @@ -1665,7 +1716,7 @@ index 1d706fe3bca726a4e606232039beeadedf75b499..ce9364040d6e856fd1fa42baa75b4030 final EntityType type, final ServerLevelAccessor level, final EntitySpawnReason spawnReason, final BlockPos pos, final RandomSource random ) { diff --git a/net/minecraft/world/entity/monster/skeleton/WitherSkeleton.java b/net/minecraft/world/entity/monster/skeleton/WitherSkeleton.java -index 3651c21dc87a76ad4aa268a2de6686016b589e6c..0d370f992e5ef601d8032230c927164d760a95e1 100644 +index 2a094760c7a60a5620c12527b2d69821f8849137..7ef07d92c1accc525f331e29406ff89ebe5afd05 100644 --- a/net/minecraft/world/entity/monster/skeleton/WitherSkeleton.java +++ b/net/minecraft/world/entity/monster/skeleton/WitherSkeleton.java @@ -51,6 +51,14 @@ public class WitherSkeleton extends AbstractSkeleton { @@ -1684,7 +1735,7 @@ index 3651c21dc87a76ad4aa268a2de6686016b589e6c..0d370f992e5ef601d8032230c927164d protected void registerGoals() { this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractPiglin.class, true)); diff --git a/net/minecraft/world/entity/monster/spider/CaveSpider.java b/net/minecraft/world/entity/monster/spider/CaveSpider.java -index 59265f8286a32a1fe7de1986df78b441861e9367..beba154f2a76d3d8f7d9b44c1b45b83c9dc3b86c 100644 +index 0ded67c38295e216b8359e58cd6c15025ea1b362..6a34024c8fc6b537d405afddd5bc9afa7a91a7b7 100644 --- a/net/minecraft/world/entity/monster/spider/CaveSpider.java +++ b/net/minecraft/world/entity/monster/spider/CaveSpider.java @@ -43,6 +43,14 @@ public class CaveSpider extends Spider { @@ -1703,10 +1754,10 @@ index 59265f8286a32a1fe7de1986df78b441861e9367..beba154f2a76d3d8f7d9b44c1b45b83c public boolean doHurtTarget(final ServerLevel level, final Entity target) { if (super.doHurtTarget(level, target)) { diff --git a/net/minecraft/world/entity/monster/spider/Spider.java b/net/minecraft/world/entity/monster/spider/Spider.java -index 546561f6b9960de22d84468a317c65f3cf406b29..8834ecb96e3a6ec28f8700b23971d00136f26a4d 100644 +index 76505ffb0e308f866657a0a3af1bea120c26f097..0f87739c64f976f59c5740556d15763b4189a01e 100644 --- a/net/minecraft/world/entity/monster/spider/Spider.java +++ b/net/minecraft/world/entity/monster/spider/Spider.java -@@ -69,6 +69,14 @@ public class Spider extends Monster { +@@ -70,6 +70,14 @@ public class Spider extends Monster { } // Purpur end - Ridables @@ -1722,10 +1773,10 @@ index 546561f6b9960de22d84468a317c65f3cf406b29..8834ecb96e3a6ec28f8700b23971d001 protected void registerGoals() { this.goalSelector.addGoal(1, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/monster/zombie/Drowned.java b/net/minecraft/world/entity/monster/zombie/Drowned.java -index 643cf630000cd389ff7ae073a1850f2ae3f4a458..36184895787abaf54072fbae6ade286076b6f3c8 100644 +index 9c725e29cb56a2d03722a988bab79b6729bd898e..04b31af8a16eeec19c1c26e8794416a0c23b5c10 100644 --- a/net/minecraft/world/entity/monster/zombie/Drowned.java +++ b/net/minecraft/world/entity/monster/zombie/Drowned.java -@@ -103,6 +103,19 @@ public class Drowned extends Zombie implements RangedAttackMob { +@@ -104,6 +104,19 @@ public class Drowned extends Zombie implements RangedAttackMob { return new AmphibiousPathNavigation(this, level); } @@ -1746,10 +1797,10 @@ index 643cf630000cd389ff7ae073a1850f2ae3f4a458..36184895787abaf54072fbae6ade2860 protected void addBehaviourGoals() { this.goalSelector.addGoal(1, new Drowned.DrownedGoToWaterGoal(this, 1.0)); diff --git a/net/minecraft/world/entity/monster/zombie/Husk.java b/net/minecraft/world/entity/monster/zombie/Husk.java -index dfb43d27865674f4f13050682eda38afe2731f00..1c985585a2da43e59bb5b9ebd742e1e31b2cda29 100644 +index 2dc09198f7bc86f5837c30e7e85eeb4c85b8d114..7a3747d67f1ce93e0703965144e32d134adbdee8 100644 --- a/net/minecraft/world/entity/monster/zombie/Husk.java +++ b/net/minecraft/world/entity/monster/zombie/Husk.java -@@ -54,6 +54,18 @@ public class Husk extends Zombie { +@@ -55,6 +55,18 @@ public class Husk extends Zombie { } // Purpur end - Ridables @@ -1769,10 +1820,10 @@ index dfb43d27865674f4f13050682eda38afe2731f00..1c985585a2da43e59bb5b9ebd742e1e3 public boolean isSunSensitive() { return false; diff --git a/net/minecraft/world/entity/monster/zombie/Zombie.java b/net/minecraft/world/entity/monster/zombie/Zombie.java -index 5d86cfd5c5d679368ddebf1afd7e32702b6e34a9..875993036ebd0f8a08d28f0e04f0c82b294e3ff5 100644 +index d231dbf446c4e28df3512918ae50c1fc5e4db402..51e9175cf7f0c487d063247dca4e700012283431 100644 --- a/net/minecraft/world/entity/monster/zombie/Zombie.java +++ b/net/minecraft/world/entity/monster/zombie/Zombie.java -@@ -129,6 +129,14 @@ public class Zombie extends Monster { +@@ -130,6 +130,14 @@ public class Zombie extends Monster { } // Purpur end - Ridables @@ -1787,7 +1838,7 @@ index 5d86cfd5c5d679368ddebf1afd7e32702b6e34a9..875993036ebd0f8a08d28f0e04f0c82b @Override protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables -@@ -634,7 +642,7 @@ public class Zombie extends Monster { +@@ -636,7 +644,7 @@ public class Zombie extends Monster { } protected void randomizeReinforcementsChance() { @@ -1797,10 +1848,10 @@ index 5d86cfd5c5d679368ddebf1afd7e32702b6e34a9..875993036ebd0f8a08d28f0e04f0c82b private class ZombieAttackTurtleEggGoal extends RemoveBlockGoal { diff --git a/net/minecraft/world/entity/monster/zombie/ZombieVillager.java b/net/minecraft/world/entity/monster/zombie/ZombieVillager.java -index b3735610f347cb6275314dc7cd3dab56e26db85a..02cc4228bfc1ee27ffceb39d6406fce89f6d8312 100644 +index 67031d93d9f59cf616c7ed1a3fcb18182148c6e6..2323ef6faec7bc62b28240e6dcc9f350de427c8e 100644 --- a/net/minecraft/world/entity/monster/zombie/ZombieVillager.java +++ b/net/minecraft/world/entity/monster/zombie/ZombieVillager.java -@@ -102,6 +102,18 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { +@@ -104,6 +104,18 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { } // Purpur end - Ridables @@ -1820,7 +1871,7 @@ index b3735610f347cb6275314dc7cd3dab56e26db85a..02cc4228bfc1ee27ffceb39d6406fce8 protected void defineSynchedData(final SynchedEntityData.Builder entityData) { super.defineSynchedData(entityData); diff --git a/net/minecraft/world/entity/monster/zombie/ZombifiedPiglin.java b/net/minecraft/world/entity/monster/zombie/ZombifiedPiglin.java -index eb3ec4314603f61a041740d5b5e52165dac6ebc6..b6c14d7c5fbe7f37d4d5b865aae60d4a05af081b 100644 +index a9829f453a6ff8d8b844beb75b653799c763fbc1..8022a5ce1efedf5b9485c366d0a525077583712c 100644 --- a/net/minecraft/world/entity/monster/zombie/ZombifiedPiglin.java +++ b/net/minecraft/world/entity/monster/zombie/ZombifiedPiglin.java @@ -85,6 +85,14 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { @@ -1848,10 +1899,10 @@ index eb3ec4314603f61a041740d5b5e52165dac6ebc6..b6c14d7c5fbe7f37d4d5b865aae60d4a @Override diff --git a/net/minecraft/world/entity/npc/villager/Villager.java b/net/minecraft/world/entity/npc/villager/Villager.java -index 627461178e2ab4f59699e04b16d8d0f337a0daba..33b219e4422d22bb88aa17841c0380398e9c149b 100644 +index 0aca0978653b3b1cf8ca51596a80fdc91225a9a9..c6dd2c42acb44715018402bbee9ec5742a2c1613 100644 --- a/net/minecraft/world/entity/npc/villager/Villager.java +++ b/net/minecraft/world/entity/npc/villager/Villager.java -@@ -274,6 +274,14 @@ public class Villager extends AbstractVillager implements VillagerDataHolder, Re +@@ -265,6 +265,14 @@ public class Villager extends AbstractVillager implements VillagerDataHolder, Re } // Purpur end - Ridables @@ -1865,9 +1916,9 @@ index 627461178e2ab4f59699e04b16d8d0f337a0daba..33b219e4422d22bb88aa17841c038039 + @Override public Brain getBrain() { - return (Brain) super.getBrain(); + return (Brain)super.getBrain(); diff --git a/net/minecraft/world/entity/npc/wanderingtrader/WanderingTrader.java b/net/minecraft/world/entity/npc/wanderingtrader/WanderingTrader.java -index 4c35ca3877b88b13a1919d0625e5055b4554057f..f93fc5710e6c95b1c7782ff1024e52bee9fb6102 100644 +index 45279d3473f42dd0f75315961bd178c17c8dac5d..9aefc3ecb98cd0333eb2adab82cd5846b76bfd2a 100644 --- a/net/minecraft/world/entity/npc/wanderingtrader/WanderingTrader.java +++ b/net/minecraft/world/entity/npc/wanderingtrader/WanderingTrader.java @@ -84,6 +84,13 @@ public class WanderingTrader extends AbstractVillager implements Consumable.Over diff --git a/purpur-server/minecraft-patches/unapplied-features/0003-Barrels-and-enderchests-6-rows.patch b/purpur-server/minecraft-patches/features/0003-Barrels-and-enderchests-6-rows.patch similarity index 95% rename from purpur-server/minecraft-patches/unapplied-features/0003-Barrels-and-enderchests-6-rows.patch rename to purpur-server/minecraft-patches/features/0003-Barrels-and-enderchests-6-rows.patch index 8572658a8..f2691a7fb 100644 --- a/purpur-server/minecraft-patches/unapplied-features/0003-Barrels-and-enderchests-6-rows.patch +++ b/purpur-server/minecraft-patches/features/0003-Barrels-and-enderchests-6-rows.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Barrels and enderchests 6 rows diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java -index 5da9ae5617568aaadfe2bf90e3a358d271e0c2c2..e33f57caf9640e891b87a0e9bdcd5a44911bec73 100644 +index 3e18c6ca8f5a732a110277f817a3e8dcd742f193..b471145ff65e07c39689e466387715698b55481e 100644 --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java -@@ -885,6 +885,27 @@ public abstract class PlayerList { +@@ -886,6 +886,27 @@ public abstract class PlayerList { player.getBukkitEntity().recalculatePermissions(); // CraftBukkit this.server.getCommands().sendCommands(player); } // Paper - Add sendOpLevel API @@ -37,10 +37,10 @@ index 5da9ae5617568aaadfe2bf90e3a358d271e0c2c2..e33f57caf9640e891b87a0e9bdcd5a44 // Paper start - whitelist verify event / login event diff --git a/net/minecraft/world/entity/player/Player.java b/net/minecraft/world/entity/player/Player.java -index 3b0a0525cdca3ea5b91834e04b42696a7cedde10..4d80fd91a1f610e5af0ad258f94dc16f2f77ef0d 100644 +index def90b5105edb0303eecc4424ff7d6e2cb050791..99db58c431252f87eda5d741b54a5e4e87addae5 100644 --- a/net/minecraft/world/entity/player/Player.java +++ b/net/minecraft/world/entity/player/Player.java -@@ -175,6 +175,7 @@ public abstract class Player extends Avatar implements ContainerUser { +@@ -176,6 +176,7 @@ public abstract class Player extends Avatar implements ContainerUser { public net.kyori.adventure.util.TriState flyingFallDamage = net.kyori.adventure.util.TriState.NOT_SET; // Paper - flying fall damage public int burpDelay = 0; // Purpur - Burp delay public boolean canPortalInstant = false; // Purpur - Add portal permission bypass @@ -137,10 +137,10 @@ index 4df3a32faf85595372f4b250482d852c985ea3ab..33c4c2cc8b488df5276d21e0f4e29cc0 if (!itemStack.isEmpty()) { output.add(new ItemStackWithSlot(i, itemStack)); diff --git a/net/minecraft/world/level/block/EnderChestBlock.java b/net/minecraft/world/level/block/EnderChestBlock.java -index f70a729ab3678fd22d0229bc15d289ddc49b9d01..6a1ea62c737eba6ea30605be89255fb6c221c204 100644 +index f1a5b9670dd04b800a8d755f32364458a16d924a..899f422494396dd0b797c03de209e7a2ec4d274b 100644 --- a/net/minecraft/world/level/block/EnderChestBlock.java +++ b/net/minecraft/world/level/block/EnderChestBlock.java -@@ -89,7 +89,7 @@ public class EnderChestBlock extends AbstractChestBlock i +@@ -90,7 +90,7 @@ public class EnderChestBlock extends AbstractChestBlock i // Paper start - Fix InventoryOpenEvent cancellation - moved up; container.setActiveChest(enderChest); // Needs to happen before ChestMenu.threeRows as it is required for opening animations if (level instanceof ServerLevel serverLevel && player.openMenu( @@ -149,7 +149,7 @@ index f70a729ab3678fd22d0229bc15d289ddc49b9d01..6a1ea62c737eba6ea30605be89255fb6 ).isPresent()) { // Paper end - Fix InventoryOpenEvent cancellation - moved up; player.awardStat(Stats.OPEN_ENDERCHEST); -@@ -102,6 +102,35 @@ public class EnderChestBlock extends AbstractChestBlock i +@@ -103,6 +103,35 @@ public class EnderChestBlock extends AbstractChestBlock i } } @@ -186,7 +186,7 @@ index f70a729ab3678fd22d0229bc15d289ddc49b9d01..6a1ea62c737eba6ea30605be89255fb6 public BlockEntity newBlockEntity(final BlockPos worldPosition, final BlockState blockState) { return new EnderChestBlockEntity(worldPosition, blockState); diff --git a/net/minecraft/world/level/block/entity/BarrelBlockEntity.java b/net/minecraft/world/level/block/entity/BarrelBlockEntity.java -index 5ba46020b47edfc886ecd5c33483ebb0fa57e5dc..b62a024d2ba1d5d09c81c5060e4eb1a04095681f 100644 +index 5bfd25f22808794f5e24d5425ea32e8c1b927182..e489da795bfc3f6fded36608761068ba7f333e4b 100644 --- a/net/minecraft/world/level/block/entity/BarrelBlockEntity.java +++ b/net/minecraft/world/level/block/entity/BarrelBlockEntity.java @@ -59,7 +59,16 @@ public class BarrelBlockEntity extends RandomizableContainerBlockEntity { diff --git a/purpur-server/minecraft-patches/unapplied-features/0004-Giants-AI-settings.patch b/purpur-server/minecraft-patches/features/0004-Giants-AI-settings.patch similarity index 100% rename from purpur-server/minecraft-patches/unapplied-features/0004-Giants-AI-settings.patch rename to purpur-server/minecraft-patches/features/0004-Giants-AI-settings.patch diff --git a/purpur-server/minecraft-patches/unapplied-features/0005-Chickens-can-retaliate.patch b/purpur-server/minecraft-patches/features/0005-Chickens-can-retaliate.patch similarity index 91% rename from purpur-server/minecraft-patches/unapplied-features/0005-Chickens-can-retaliate.patch rename to purpur-server/minecraft-patches/features/0005-Chickens-can-retaliate.patch index e01a967e5..1048c50e6 100644 --- a/purpur-server/minecraft-patches/unapplied-features/0005-Chickens-can-retaliate.patch +++ b/purpur-server/minecraft-patches/features/0005-Chickens-can-retaliate.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Chickens can retaliate diff --git a/net/minecraft/world/entity/animal/chicken/Chicken.java b/net/minecraft/world/entity/animal/chicken/Chicken.java -index 3e1e904d9401bef41271fe8d29a22b6cd944e766..0392c8a94801a1dee735ff610058fbb2180571fa 100644 +index f5d2a74c81d9ba8aeaf6c3f50069f529dde68e72..122ebcf1a7fb7e7856a8f73d4a0355672d5c9655 100644 --- a/net/minecraft/world/entity/animal/chicken/Chicken.java +++ b/net/minecraft/world/entity/animal/chicken/Chicken.java -@@ -98,6 +98,11 @@ public class Chicken extends Animal { +@@ -103,6 +103,11 @@ public class Chicken extends Animal { public void initAttributes() { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.chickenMaxHealth); this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.chickenScale); @@ -20,7 +20,7 @@ index 3e1e904d9401bef41271fe8d29a22b6cd944e766..0392c8a94801a1dee735ff610058fbb2 } // Purpur end - Configurable entity base attributes -@@ -105,13 +110,21 @@ public class Chicken extends Animal { +@@ -110,13 +115,21 @@ public class Chicken extends Animal { protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables @@ -43,7 +43,7 @@ index 3e1e904d9401bef41271fe8d29a22b6cd944e766..0392c8a94801a1dee735ff610058fbb2 } public Holder getSoundVariant() { -@@ -132,7 +145,7 @@ public class Chicken extends Animal { +@@ -137,7 +150,7 @@ public class Chicken extends Animal { } public static AttributeSupplier.Builder createAttributes() { diff --git a/purpur-server/minecraft-patches/unapplied-features/0006-Minecart-settings-and-WASD-controls.patch b/purpur-server/minecraft-patches/features/0006-Minecart-settings-and-WASD-controls.patch similarity index 95% rename from purpur-server/minecraft-patches/unapplied-features/0006-Minecart-settings-and-WASD-controls.patch rename to purpur-server/minecraft-patches/features/0006-Minecart-settings-and-WASD-controls.patch index 248961840..aad328a07 100644 --- a/purpur-server/minecraft-patches/unapplied-features/0006-Minecart-settings-and-WASD-controls.patch +++ b/purpur-server/minecraft-patches/features/0006-Minecart-settings-and-WASD-controls.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Minecart settings and WASD controls diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java -index 228c81791dcc1ea0971e70bcb0cb289106466c67..88aad415396d1e74da8b7544b566844e30761219 100644 +index 119530367e7bd7f99160d8a8b8b6c1f757c3bd01..2ff355757f3637186ed9f9c81323b799a98f3128 100644 --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java -@@ -1309,6 +1309,11 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -1288,6 +1288,11 @@ public class ServerPlayer extends Player { // Purpur start - Add boat fall damage config if (source.is(net.minecraft.tags.DamageTypeTags.IS_FALL)) { @@ -21,12 +21,12 @@ index 228c81791dcc1ea0971e70bcb0cb289106466c67..88aad415396d1e74da8b7544b566844e return false; } diff --git a/net/minecraft/world/entity/vehicle/minecart/AbstractMinecart.java b/net/minecraft/world/entity/vehicle/minecart/AbstractMinecart.java -index 1c043c1136fc42e888125047ed73b1dc32276183..41d82befd5d30a0bc1db083df9012e0b477239b4 100644 +index 5ad77636d0681d1f0341cff4482ba6ad52f3583b..c635999ec8d5e0508cd66e0c4982692450963235 100644 --- a/net/minecraft/world/entity/vehicle/minecart/AbstractMinecart.java +++ b/net/minecraft/world/entity/vehicle/minecart/AbstractMinecart.java @@ -105,6 +105,10 @@ public abstract class AbstractMinecart extends VehicleEntity { - private double flyingY = 0.95; - private double flyingZ = 0.95; + private double flyingY = this.getAirDrag(); + private double flyingZ = this.getAirDrag(); public @Nullable Double maxSpeed; + // Purpur start - Minecart settings and WASD controls + public double storedMaxSpeed; diff --git a/purpur-server/minecraft-patches/unapplied-features/0007-Villagers-follow-emerald-blocks.patch b/purpur-server/minecraft-patches/features/0007-Villagers-follow-emerald-blocks.patch similarity index 81% rename from purpur-server/minecraft-patches/unapplied-features/0007-Villagers-follow-emerald-blocks.patch rename to purpur-server/minecraft-patches/features/0007-Villagers-follow-emerald-blocks.patch index 2aa4da127..6e5414d4b 100644 --- a/purpur-server/minecraft-patches/unapplied-features/0007-Villagers-follow-emerald-blocks.patch +++ b/purpur-server/minecraft-patches/features/0007-Villagers-follow-emerald-blocks.patch @@ -5,18 +5,18 @@ Subject: [PATCH] Villagers follow emerald blocks diff --git a/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java b/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java -index 6b78ddb4ec40d45634288796a98e34714e0deb68..34d2394006a006ea0773a52bb43b5cb3617470e5 100644 +index b828332b3e5db2722ca2193721da996fb84ce55e..f875fdb10d16598f9f5b6fbb597c88ad42e88996 100644 --- a/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java +++ b/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java -@@ -173,7 +173,7 @@ public class DefaultAttributes { - .put(EntityType.VILLAGER, Villager.createAttributes().build()) - .put(EntityType.VINDICATOR, Vindicator.createAttributes().build()) - .put(EntityType.WARDEN, Warden.createAttributes().build()) -- .put(EntityType.WANDERING_TRADER, Mob.createMobAttributes().build()) -+ .put(EntityType.WANDERING_TRADER, net.minecraft.world.entity.npc.wanderingtrader.WanderingTrader.createAttributes().build()) // Purpur - Villagers follow emerald blocks - .put(EntityType.WITCH, Witch.createAttributes().build()) - .put(EntityType.WITHER, WitherBoss.createAttributes().build()) - .put(EntityType.WITHER_SKELETON, AbstractSkeleton.createAttributes().build()) +@@ -176,7 +176,7 @@ public class DefaultAttributes { + .put(EntityTypes.VILLAGER, Villager.createAttributes().build()) + .put(EntityTypes.VINDICATOR, Vindicator.createAttributes().build()) + .put(EntityTypes.WARDEN, Warden.createAttributes().build()) +- .put(EntityTypes.WANDERING_TRADER, Mob.createMobAttributes().build()) ++ .put(EntityTypes.WANDERING_TRADER, net.minecraft.world.entity.npc.wanderingtrader.WanderingTrader.createAttributes().build()) // Purpur - Villagers follow emerald blocks + .put(EntityTypes.WITCH, Witch.createAttributes().build()) + .put(EntityTypes.WITHER, WitherBoss.createAttributes().build()) + .put(EntityTypes.WITHER_SKELETON, AbstractSkeleton.createAttributes().build()) diff --git a/net/minecraft/world/entity/ai/goal/TemptGoal.java b/net/minecraft/world/entity/ai/goal/TemptGoal.java index af2bd8a5cf760792a63dfb9c2370360f288beab6..016167a6ff90dfe5a2e66596eaab2c8f2775c016 100644 --- a/net/minecraft/world/entity/ai/goal/TemptGoal.java @@ -31,10 +31,10 @@ index af2bd8a5cf760792a63dfb9c2370360f288beab6..016167a6ff90dfe5a2e66596eaab2c8f @Override diff --git a/net/minecraft/world/entity/npc/villager/AbstractVillager.java b/net/minecraft/world/entity/npc/villager/AbstractVillager.java -index 9582f694ddbb47be7d820c5fe8791d5ba112ec6b..ac7d5c63d4140b08e4bc63fc42b43036736101aa 100644 +index 07aa7fae79edff4c92b8f153659f16b9769c80ff..8c55eb2cc6f48643d29b50a12a44be19fd29b4bc 100644 --- a/net/minecraft/world/entity/npc/villager/AbstractVillager.java +++ b/net/minecraft/world/entity/npc/villager/AbstractVillager.java -@@ -52,6 +52,7 @@ import org.jspecify.annotations.Nullable; +@@ -53,6 +53,7 @@ import org.jspecify.annotations.Nullable; import org.slf4j.Logger; public abstract class AbstractVillager extends AgeableMob implements Npc, Merchant, InventoryCarrier { @@ -43,10 +43,10 @@ index 9582f694ddbb47be7d820c5fe8791d5ba112ec6b..ac7d5c63d4140b08e4bc63fc42b43036 private static final EntityDataAccessor DATA_UNHAPPY_COUNTER = SynchedEntityData.defineId(AbstractVillager.class, EntityDataSerializers.INT); private @Nullable Player tradingPlayer; diff --git a/net/minecraft/world/entity/npc/villager/Villager.java b/net/minecraft/world/entity/npc/villager/Villager.java -index 33b219e4422d22bb88aa17841c0380398e9c149b..e06be61042e8cb873aed23ebcb94cc688a2668cc 100644 +index c6dd2c42acb44715018402bbee9ec5742a2c1613..f0ebe6f376a13df2fa34f41ecdcc9bded72dc756 100644 --- a/net/minecraft/world/entity/npc/villager/Villager.java +++ b/net/minecraft/world/entity/npc/villager/Villager.java -@@ -271,6 +271,7 @@ public class Villager extends AbstractVillager implements VillagerDataHolder, Re +@@ -262,6 +262,7 @@ public class Villager extends AbstractVillager implements VillagerDataHolder, Re @Override protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); @@ -54,7 +54,7 @@ index 33b219e4422d22bb88aa17841c0380398e9c149b..e06be61042e8cb873aed23ebcb94cc68 } // Purpur end - Ridables -@@ -279,6 +280,7 @@ public class Villager extends AbstractVillager implements VillagerDataHolder, Re +@@ -270,6 +271,7 @@ public class Villager extends AbstractVillager implements VillagerDataHolder, Re public void initAttributes() { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.villagerMaxHealth); this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.villagerScale); @@ -62,7 +62,7 @@ index 33b219e4422d22bb88aa17841c0380398e9c149b..e06be61042e8cb873aed23ebcb94cc68 } // Purpur end - Configurable entity base attributes -@@ -320,7 +322,7 @@ public class Villager extends AbstractVillager implements VillagerDataHolder, Re +@@ -311,7 +313,7 @@ public class Villager extends AbstractVillager implements VillagerDataHolder, Re } public static AttributeSupplier.Builder createAttributes() { @@ -72,7 +72,7 @@ index 33b219e4422d22bb88aa17841c0380398e9c149b..e06be61042e8cb873aed23ebcb94cc68 public boolean assignProfessionWhenSpawned() { diff --git a/net/minecraft/world/entity/npc/wanderingtrader/WanderingTrader.java b/net/minecraft/world/entity/npc/wanderingtrader/WanderingTrader.java -index f93fc5710e6c95b1c7782ff1024e52bee9fb6102..292980e7445d969475332d18b158a0092ad847fe 100644 +index 9aefc3ecb98cd0333eb2adab82cd5846b76bfd2a..d0c9643d3f64d0e17cd8c3a62ec389430d9d7c87 100644 --- a/net/minecraft/world/entity/npc/wanderingtrader/WanderingTrader.java +++ b/net/minecraft/world/entity/npc/wanderingtrader/WanderingTrader.java @@ -88,9 +88,16 @@ public class WanderingTrader extends AbstractVillager implements Consumable.Over diff --git a/purpur-server/minecraft-patches/unapplied-features/0008-Implement-elytra-settings.patch b/purpur-server/minecraft-patches/features/0008-Implement-elytra-settings.patch similarity index 94% rename from purpur-server/minecraft-patches/unapplied-features/0008-Implement-elytra-settings.patch rename to purpur-server/minecraft-patches/features/0008-Implement-elytra-settings.patch index e76f7dcf0..586ebd1e3 100644 --- a/purpur-server/minecraft-patches/unapplied-features/0008-Implement-elytra-settings.patch +++ b/purpur-server/minecraft-patches/features/0008-Implement-elytra-settings.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Implement elytra settings diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java -index 3bc8a8d26569a3c26e518cd48c52b9b6c9e38294..34d122f58ff32cb47b79ab1348fee3224315d2dd 100644 +index 55f7761ad757cc4eebbf1271e0d284bc31db753e..991ded4e26c00ffb25a933a8cc175849e1e579b2 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java -@@ -3943,7 +3943,16 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -4011,7 +4011,16 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin if (freeFallInterval % 2 == 0) { List slotsWithGliders = EquipmentSlot.VALUES.stream().filter(slot -> canGlideUsing(this.getItemBySlot(slot), slot)).toList(); EquipmentSlot slotToDamage = Util.getRandom(slotsWithGliders, this.random); @@ -49,10 +49,10 @@ index b3443ff2d06af328493046e723efc11d299a2824..3c001b3810097d5cb60ad64e0727d8d9 itemStack.shrink(1); // Moved up from below } else { diff --git a/net/minecraft/world/item/ItemStack.java b/net/minecraft/world/item/ItemStack.java -index d71fe8e6699e2e3298240e091832d33215837a4a..f9d2aa76bd273c40d39c30e1c9fddb2749b18865 100644 +index b415581057f20e3aba5b249ec35b9069aa873038..a528429259f5981ac4e1c89953c217bfd165517f 100644 --- a/net/minecraft/world/item/ItemStack.java +++ b/net/minecraft/world/item/ItemStack.java -@@ -694,6 +694,14 @@ public final class ItemStack implements DataComponentHolder, ItemInstance { +@@ -682,6 +682,14 @@ public final class ItemStack implements DataComponentHolder, ItemInstance { org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerItemBreakEvent(serverPlayer, this); // Paper - Add EntityDamageItemEvent } // CraftBukkit end diff --git a/purpur-server/minecraft-patches/unapplied-features/0009-Configurable-jockey-options.patch b/purpur-server/minecraft-patches/features/0009-Configurable-jockey-options.patch similarity index 88% rename from purpur-server/minecraft-patches/unapplied-features/0009-Configurable-jockey-options.patch rename to purpur-server/minecraft-patches/features/0009-Configurable-jockey-options.patch index 32e940021..230f4f971 100644 --- a/purpur-server/minecraft-patches/unapplied-features/0009-Configurable-jockey-options.patch +++ b/purpur-server/minecraft-patches/features/0009-Configurable-jockey-options.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configurable jockey options diff --git a/net/minecraft/world/entity/monster/zombie/Drowned.java b/net/minecraft/world/entity/monster/zombie/Drowned.java -index 36184895787abaf54072fbae6ade286076b6f3c8..8102352e1b59608b19a68f4e5080180c9a3999b5 100644 +index 04b31af8a16eeec19c1c26e8794416a0c23b5c10..1234c13b4290f45997eab79f6ef18933dcf3b04f 100644 --- a/net/minecraft/world/entity/monster/zombie/Drowned.java +++ b/net/minecraft/world/entity/monster/zombie/Drowned.java -@@ -116,6 +116,23 @@ public class Drowned extends Zombie implements RangedAttackMob { +@@ -117,6 +117,23 @@ public class Drowned extends Zombie implements RangedAttackMob { } // Purpur end - Configurable entity base attributes @@ -33,10 +33,10 @@ index 36184895787abaf54072fbae6ade286076b6f3c8..8102352e1b59608b19a68f4e5080180c protected void addBehaviourGoals() { this.goalSelector.addGoal(1, new Drowned.DrownedGoToWaterGoal(this, 1.0)); diff --git a/net/minecraft/world/entity/monster/zombie/Husk.java b/net/minecraft/world/entity/monster/zombie/Husk.java -index 1c985585a2da43e59bb5b9ebd742e1e31b2cda29..c3f2d9ab49eb501f26939387624f326227908b81 100644 +index 7a3747d67f1ce93e0703965144e32d134adbdee8..91800961ba5b724aac905ccd4fd1d0f915c93803 100644 --- a/net/minecraft/world/entity/monster/zombie/Husk.java +++ b/net/minecraft/world/entity/monster/zombie/Husk.java -@@ -66,6 +66,23 @@ public class Husk extends Zombie { +@@ -67,6 +67,23 @@ public class Husk extends Zombie { } // Purpur end - Configurable entity base attributes @@ -61,10 +61,10 @@ index 1c985585a2da43e59bb5b9ebd742e1e31b2cda29..c3f2d9ab49eb501f26939387624f3262 public boolean isSunSensitive() { return false; diff --git a/net/minecraft/world/entity/monster/zombie/Zombie.java b/net/minecraft/world/entity/monster/zombie/Zombie.java -index 875993036ebd0f8a08d28f0e04f0c82b294e3ff5..4b7a00ae57526db73dda9f92a31a95c97b0bc41c 100644 +index 51e9175cf7f0c487d063247dca4e700012283431..f47f4a3f8e0f4f5a40f520a25e87e0068a564b4c 100644 --- a/net/minecraft/world/entity/monster/zombie/Zombie.java +++ b/net/minecraft/world/entity/monster/zombie/Zombie.java -@@ -137,6 +137,20 @@ public class Zombie extends Monster { +@@ -138,6 +138,20 @@ public class Zombie extends Monster { } // Purpur end - Configurable entity base attributes @@ -85,7 +85,7 @@ index 875993036ebd0f8a08d28f0e04f0c82b294e3ff5..4b7a00ae57526db73dda9f92a31a95c9 @Override protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables -@@ -547,19 +561,18 @@ public class Zombie extends Monster { +@@ -549,19 +563,18 @@ public class Zombie extends Monster { } if (groupData instanceof Zombie.ZombieGroupData zombieData) { @@ -108,10 +108,10 @@ index 875993036ebd0f8a08d28f0e04f0c82b294e3ff5..4b7a00ae57526db73dda9f92a31a95c9 - } - } else if (random.nextFloat() < 0.05) { + } else { // Purpur - Configurable jockey options - Chicken chicken = EntityType.CHICKEN.create(this.level(), EntitySpawnReason.JOCKEY); + Chicken chicken = EntityTypes.CHICKEN.create(this.level(), EntitySpawnReason.JOCKEY); if (chicken != null) { chicken.snapTo(this.getX(), this.getY(), this.getZ(), this.getYRot(), 0.0F); -@@ -568,6 +581,7 @@ public class Zombie extends Monster { +@@ -570,6 +583,7 @@ public class Zombie extends Monster { this.startRiding(chicken, false, false); level.addFreshEntity(chicken, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.MOUNT); // CraftBukkit } @@ -120,10 +120,10 @@ index 875993036ebd0f8a08d28f0e04f0c82b294e3ff5..4b7a00ae57526db73dda9f92a31a95c9 } } diff --git a/net/minecraft/world/entity/monster/zombie/ZombieVillager.java b/net/minecraft/world/entity/monster/zombie/ZombieVillager.java -index 02cc4228bfc1ee27ffceb39d6406fce89f6d8312..8a5634d2204b9abae560d34a7b0616b3ebdc68ab 100644 +index 2323ef6faec7bc62b28240e6dcc9f350de427c8e..155ba4d03e7864b21e7a3dab854315b62d3b9e5b 100644 --- a/net/minecraft/world/entity/monster/zombie/ZombieVillager.java +++ b/net/minecraft/world/entity/monster/zombie/ZombieVillager.java -@@ -114,6 +114,23 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { +@@ -116,6 +116,23 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { } // Purpur end - Configurable entity base attributes @@ -148,7 +148,7 @@ index 02cc4228bfc1ee27ffceb39d6406fce89f6d8312..8a5634d2204b9abae560d34a7b0616b3 protected void defineSynchedData(final SynchedEntityData.Builder entityData) { super.defineSynchedData(entityData); diff --git a/net/minecraft/world/entity/monster/zombie/ZombifiedPiglin.java b/net/minecraft/world/entity/monster/zombie/ZombifiedPiglin.java -index b6c14d7c5fbe7f37d4d5b865aae60d4a05af081b..d1edf1f44de1fc6d23bcd8044f8bf4165821790e 100644 +index 8022a5ce1efedf5b9485c366d0a525077583712c..7a59980a38abb8ed9500def97fc7e3e8952a439d 100644 --- a/net/minecraft/world/entity/monster/zombie/ZombifiedPiglin.java +++ b/net/minecraft/world/entity/monster/zombie/ZombifiedPiglin.java @@ -93,6 +93,23 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { diff --git a/purpur-server/minecraft-patches/unapplied-features/0010-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch b/purpur-server/minecraft-patches/features/0010-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch similarity index 93% rename from purpur-server/minecraft-patches/unapplied-features/0010-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch rename to purpur-server/minecraft-patches/features/0010-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch index c6a4e29b0..e0b2c0ea0 100644 --- a/purpur-server/minecraft-patches/unapplied-features/0010-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch +++ b/purpur-server/minecraft-patches/features/0010-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Phantoms attracted to crystals and crystals shoot phantoms diff --git a/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java b/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java -index aa5426c1c407a3534c587d558d56364ebd99dca3..7a85db931978b39f82947ed619edd3c83ae04dce 100644 +index f083705efb92a57dc770a1bdb7c3e8dd6d51c1d5..6704a3b50d23db92ed2fb9811712f19688d00ba7 100644 --- a/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java +++ b/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java -@@ -27,6 +27,12 @@ public class EndCrystal extends Entity { +@@ -28,6 +28,12 @@ public class EndCrystal extends Entity { private static final boolean DEFAULT_SHOW_BOTTOM = true; public int time; public boolean generatedByDragonFight = false; // Paper - Fix invulnerable end crystals @@ -21,7 +21,7 @@ index aa5426c1c407a3534c587d558d56364ebd99dca3..7a85db931978b39f82947ed619edd3c8 public EndCrystal(final EntityType type, final Level level) { super(type, level); -@@ -95,6 +101,49 @@ public class EndCrystal extends Entity { +@@ -96,6 +102,49 @@ public class EndCrystal extends Entity { // Paper end - Fix invulnerable end crystals if (this.level().purpurConfig.endCrystalCramming > 0 && this.level().getEntitiesOfClass(EndCrystal.class, getBoundingBox()).size() > this.level().purpurConfig.endCrystalCramming) this.hurt(this.damageSources().cramming(), 6.0F); // Purpur - End Crystal Cramming @@ -72,7 +72,7 @@ index aa5426c1c407a3534c587d558d56364ebd99dca3..7a85db931978b39f82947ed619edd3c8 @Override diff --git a/net/minecraft/world/entity/monster/Phantom.java b/net/minecraft/world/entity/monster/Phantom.java -index 194b398a85550edc752b54636079e16a4de27ba7..1474d005d8333f592856ba4cdfc396cb4b93159a 100644 +index b42f67dff1ae0fd9b549f584e789285a15cb690c..d3c9948ee52c0f209481e273bc94b551519a7d71 100644 --- a/net/minecraft/world/entity/monster/Phantom.java +++ b/net/minecraft/world/entity/monster/Phantom.java @@ -49,6 +49,7 @@ public class Phantom extends Mob implements Enemy { @@ -118,8 +118,8 @@ index 194b398a85550edc752b54636079e16a4de27ba7..1474d005d8333f592856ba4cdfc396cb - this.goalSelector.addGoal(3, new Phantom.PhantomCircleAroundAnchorGoal()); + // Purpur start - Phantoms attracted to crystals and crystals shoot phantoms + if (level().purpurConfig.phantomOrbitCrystalRadius > 0) { -+ this.goalSelector.addGoal(1, new PhantomFindCrystalGoal(this)); -+ this.goalSelector.addGoal(2, new PhantomOrbitCrystalGoal(this)); ++ this.goalSelector.addGoal(1, new Phantom.PhantomFindCrystalGoal(this)); ++ this.goalSelector.addGoal(2, new Phantom.PhantomOrbitCrystalGoal(this)); + } + this.goalSelector.addGoal(3, new Phantom.PhantomAttackStrategyGoal()); + this.goalSelector.addGoal(4, new Phantom.PhantomSweepAttackGoal()); @@ -133,7 +133,7 @@ index 194b398a85550edc752b54636079e16a4de27ba7..1474d005d8333f592856ba4cdfc396cb } + // Purpur start - Phantoms attracted to crystals and crystals shoot phantoms -+ class PhantomFindCrystalGoal extends Goal { ++ private class PhantomFindCrystalGoal extends Goal { + private final Phantom phantom; + private net.minecraft.world.entity.boss.enderdragon.EndCrystal crystal; + private Comparator comparator; @@ -186,7 +186,7 @@ index 194b398a85550edc752b54636079e16a4de27ba7..1474d005d8333f592856ba4cdfc396cb + } + } + -+ class PhantomOrbitCrystalGoal extends Goal { ++ private class PhantomOrbitCrystalGoal extends Goal { + private final Phantom phantom; + private float offset; + private float radius; @@ -250,6 +250,6 @@ index 194b398a85550edc752b54636079e16a4de27ba7..1474d005d8333f592856ba4cdfc396cb + } + // Purpur end - Phantoms attracted to crystals and crystals shoot phantoms + - private class PhantomMoveControl extends org.purpurmc.purpur.controller.FlyingMoveControllerWASD { // Purpur - Ridables + private class PhantomMoveControl extends org.purpurmc.purpur.controller.FlyingMoveControllerWASD { // Purpur - Ridables private float speed = 0.1F; diff --git a/purpur-server/minecraft-patches/unapplied-features/0011-Phantoms-burn-in-light.patch b/purpur-server/minecraft-patches/features/0011-Phantoms-burn-in-light.patch similarity index 97% rename from purpur-server/minecraft-patches/unapplied-features/0011-Phantoms-burn-in-light.patch rename to purpur-server/minecraft-patches/features/0011-Phantoms-burn-in-light.patch index 79dc7725a..3d1e4c440 100644 --- a/purpur-server/minecraft-patches/unapplied-features/0011-Phantoms-burn-in-light.patch +++ b/purpur-server/minecraft-patches/features/0011-Phantoms-burn-in-light.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Phantoms burn in light diff --git a/net/minecraft/world/entity/monster/Phantom.java b/net/minecraft/world/entity/monster/Phantom.java -index 1474d005d8333f592856ba4cdfc396cb4b93159a..03db90080675c879688c37e568dc25603b4972b1 100644 +index d3c9948ee52c0f209481e273bc94b551519a7d71..f2665ff68020cddf921675f4eaa4c0e99c9d9563 100644 --- a/net/minecraft/world/entity/monster/Phantom.java +++ b/net/minecraft/world/entity/monster/Phantom.java @@ -54,6 +54,7 @@ public class Phantom extends Mob implements Enemy { diff --git a/purpur-server/minecraft-patches/unapplied-features/0012-Make-entity-breeding-times-configurable.patch b/purpur-server/minecraft-patches/features/0012-Make-entity-breeding-times-configurable.patch similarity index 82% rename from purpur-server/minecraft-patches/unapplied-features/0012-Make-entity-breeding-times-configurable.patch rename to purpur-server/minecraft-patches/features/0012-Make-entity-breeding-times-configurable.patch index deba4b950..7e0fc9fa3 100644 --- a/purpur-server/minecraft-patches/unapplied-features/0012-Make-entity-breeding-times-configurable.patch +++ b/purpur-server/minecraft-patches/features/0012-Make-entity-breeding-times-configurable.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Make entity breeding times configurable diff --git a/net/minecraft/world/entity/ai/behavior/VillagerMakeLove.java b/net/minecraft/world/entity/ai/behavior/VillagerMakeLove.java -index 2f89f27a7a5935c08ab45c09e281801fe885cc3a..74ff05c1ec402c4fdf2dee6173f7ae90ec9af9b6 100644 +index 979b537bb459898a501af86280fa313ac58510b2..9aefa11fcc336c5c98c63301b7f9a51b397bdc71 100644 --- a/net/minecraft/world/entity/ai/behavior/VillagerMakeLove.java +++ b/net/minecraft/world/entity/ai/behavior/VillagerMakeLove.java @@ -119,8 +119,10 @@ public class VillagerMakeLove extends Behavior { @@ -22,7 +22,7 @@ index 2f89f27a7a5935c08ab45c09e281801fe885cc3a..74ff05c1ec402c4fdf2dee6173f7ae90 // CraftBukkit end - call EntityBreedEvent level.broadcastEntityEvent(child, EntityEvent.LOVE_HEARTS); diff --git a/net/minecraft/world/entity/animal/Animal.java b/net/minecraft/world/entity/animal/Animal.java -index 0742f39f6b56a0c16878bdc23874bd71d247b8b1..cd1d0b07dcb89b977cd4c00130c57269e25760bc 100644 +index 44f34214b53a8ea754e3c62f5db652ea944a95f6..79de24884cb5862a4af6dd9a9067434d72a91fa8 100644 --- a/net/minecraft/world/entity/animal/Animal.java +++ b/net/minecraft/world/entity/animal/Animal.java @@ -46,6 +46,7 @@ public abstract class Animal extends AgeableMob { @@ -47,10 +47,10 @@ index 0742f39f6b56a0c16878bdc23874bd71d247b8b1..cd1d0b07dcb89b977cd4c00130c57269 partner.resetLove(); level.broadcastEntityEvent(this, EntityEvent.IN_LOVE_HEARTS); diff --git a/net/minecraft/world/entity/animal/armadillo/Armadillo.java b/net/minecraft/world/entity/animal/armadillo/Armadillo.java -index b55d1d5abe06d753063ea7939bd975c055a1cc95..eecedf1067f7ff1236a3c48cf22db30c623bf490 100644 +index 9f0e074df58d8b8484aa8be5cb0bc8941cee0f96..4296d0caec2583f1b0135719ba6f218b3df7a3a8 100644 --- a/net/minecraft/world/entity/animal/armadillo/Armadillo.java +++ b/net/minecraft/world/entity/animal/armadillo/Armadillo.java -@@ -114,6 +114,13 @@ public class Armadillo extends Animal { +@@ -118,6 +118,13 @@ public class Armadillo extends Animal { } // Purpur end - Configurable entity base attributes @@ -65,10 +65,10 @@ index b55d1d5abe06d753063ea7939bd975c055a1cc95..eecedf1067f7ff1236a3c48cf22db30c protected void defineSynchedData(final SynchedEntityData.Builder entityData) { super.defineSynchedData(entityData); diff --git a/net/minecraft/world/entity/animal/axolotl/Axolotl.java b/net/minecraft/world/entity/animal/axolotl/Axolotl.java -index e0b9b15b2727953deb7850ed57edd7248f88c184..3f1c56981c5da00bf7d07c9faf80d3386442723c 100644 +index 2752e906f2a98540d6fd33cd5f080f376e6e3f86..11b3d0706a89b21251b5a045fbb34b1c3e3d77b8 100644 --- a/net/minecraft/world/entity/animal/axolotl/Axolotl.java +++ b/net/minecraft/world/entity/animal/axolotl/Axolotl.java -@@ -142,6 +142,13 @@ public class Axolotl extends Animal implements Bucketable { +@@ -147,6 +147,13 @@ public class Axolotl extends Animal implements Bucketable { } // Purpur end - Configurable entity base attributes @@ -83,10 +83,10 @@ index e0b9b15b2727953deb7850ed57edd7248f88c184..3f1c56981c5da00bf7d07c9faf80d338 public float getWalkTargetValue(final BlockPos pos, final LevelReader level) { return 0.0F; diff --git a/net/minecraft/world/entity/animal/bee/Bee.java b/net/minecraft/world/entity/animal/bee/Bee.java -index 24dfd3846abcb0f4f00d9c0e58f1e5389e7db658..0a06e8df6e111ba65269365f3d021b57d7f87e60 100644 +index 6022df0a91e46b0a7a0102b959a1eb2b18c1de63..c871d6e0140fae4e15bf07ba86ed7c67615e9ce6 100644 --- a/net/minecraft/world/entity/animal/bee/Bee.java +++ b/net/minecraft/world/entity/animal/bee/Bee.java -@@ -487,6 +487,13 @@ public class Bee extends Animal implements FlyingAnimal, NeutralMob { +@@ -485,6 +485,13 @@ public class Bee extends Animal implements NeutralMob { } // Purpur end - Configurable entity base attributes @@ -101,10 +101,10 @@ index 24dfd3846abcb0f4f00d9c0e58f1e5389e7db658..0a06e8df6e111ba65269365f3d021b57 public long getPersistentAngerEndTime() { return this.entityData.get(DATA_ANGER_END_TIME); diff --git a/net/minecraft/world/entity/animal/camel/Camel.java b/net/minecraft/world/entity/animal/camel/Camel.java -index aee34b1ac868f0f0fc24e3ffe022d51141143c9b..92fc921c4024b59dc2c30c5adf35e06a7978abd2 100644 +index 431f296bf651942cd390b7f383295eae3f4d2bce..a683afa61a69a9ea2d372dc7a00dc76f9fabd0d4 100644 --- a/net/minecraft/world/entity/animal/camel/Camel.java +++ b/net/minecraft/world/entity/animal/camel/Camel.java -@@ -102,6 +102,13 @@ public class Camel extends AbstractHorse { +@@ -107,6 +107,13 @@ public class Camel extends AbstractHorse { } // Purpur end - Ridables @@ -119,10 +119,10 @@ index aee34b1ac868f0f0fc24e3ffe022d51141143c9b..92fc921c4024b59dc2c30c5adf35e06a protected void addAdditionalSaveData(final ValueOutput output) { super.addAdditionalSaveData(output); diff --git a/net/minecraft/world/entity/animal/chicken/Chicken.java b/net/minecraft/world/entity/animal/chicken/Chicken.java -index 0392c8a94801a1dee735ff610058fbb2180571fa..ccf7c4630e08d9be54a4634c642a4cd1cd542a82 100644 +index 122ebcf1a7fb7e7856a8f73d4a0355672d5c9655..b27e52819fa244d93f70177b19898ab6399e2d3f 100644 --- a/net/minecraft/world/entity/animal/chicken/Chicken.java +++ b/net/minecraft/world/entity/animal/chicken/Chicken.java -@@ -106,6 +106,13 @@ public class Chicken extends Animal { +@@ -111,6 +111,13 @@ public class Chicken extends Animal { } // Purpur end - Configurable entity base attributes @@ -137,10 +137,10 @@ index 0392c8a94801a1dee735ff610058fbb2180571fa..ccf7c4630e08d9be54a4634c642a4cd1 protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/animal/cow/Cow.java b/net/minecraft/world/entity/animal/cow/Cow.java -index 33c0b8f2c43065ea89b3f9c6a519dde27620ed07..7981f60f10c44ab2459933cb15ee961103922364 100644 +index 65c41435e06120c875a82ba8d5427e082bbeb9eb..da88b2b3ed1c27100bff546cb80837da6e30e20b 100644 --- a/net/minecraft/world/entity/animal/cow/Cow.java +++ b/net/minecraft/world/entity/animal/cow/Cow.java -@@ -59,6 +59,13 @@ public class Cow extends AbstractCow { +@@ -67,6 +67,13 @@ public class Cow extends AbstractCow { } // Purpur end - Configurable entity base attributes @@ -155,10 +155,10 @@ index 33c0b8f2c43065ea89b3f9c6a519dde27620ed07..7981f60f10c44ab2459933cb15ee9611 protected void defineSynchedData(final SynchedEntityData.Builder entityData) { super.defineSynchedData(entityData); diff --git a/net/minecraft/world/entity/animal/cow/MushroomCow.java b/net/minecraft/world/entity/animal/cow/MushroomCow.java -index 58d37bd62fec5071fb4a0c297f6c2ef89a3d79e4..88ac1974f09b9213f124550b1873d28d8c926083 100644 +index 0c1baeb2fe56099a68043b8366507f29e41792f5..ab57ef2e091d95adc8d13d1b33033b190b7f68d6 100644 --- a/net/minecraft/world/entity/animal/cow/MushroomCow.java +++ b/net/minecraft/world/entity/animal/cow/MushroomCow.java -@@ -85,6 +85,13 @@ public class MushroomCow extends AbstractCow implements Shearable { +@@ -93,6 +93,13 @@ public class MushroomCow extends AbstractCow implements Shearable { } // Purpur end - Configurable entity base attributes @@ -173,10 +173,10 @@ index 58d37bd62fec5071fb4a0c297f6c2ef89a3d79e4..88ac1974f09b9213f124550b1873d28d public float getWalkTargetValue(final BlockPos pos, final LevelReader level) { return level.getBlockState(pos.below()).is(Blocks.MYCELIUM) ? 10.0F : level.getPathfindingCostFromLightLevels(pos); diff --git a/net/minecraft/world/entity/animal/equine/Donkey.java b/net/minecraft/world/entity/animal/equine/Donkey.java -index 1a130fc107315b40b4e34a97beb53f7fe0ced14f..8c3d3f0f24e6f5a9b8aa9bf58f3c8b679896017d 100644 +index 0a91e245c992c26ac715bcaedd369e96ac6e70cd..ee024d5f00b5a2845eeb296172c593b1040be1a8 100644 --- a/net/minecraft/world/entity/animal/equine/Donkey.java +++ b/net/minecraft/world/entity/animal/equine/Donkey.java -@@ -40,6 +40,13 @@ public class Donkey extends AbstractChestedHorse { +@@ -41,6 +41,13 @@ public class Donkey extends AbstractChestedHorse { } // Purpur end - Configurable entity base attributes @@ -191,10 +191,10 @@ index 1a130fc107315b40b4e34a97beb53f7fe0ced14f..8c3d3f0f24e6f5a9b8aa9bf58f3c8b67 public SoundEvent getAmbientSound() { return SoundEvents.DONKEY_AMBIENT; diff --git a/net/minecraft/world/entity/animal/equine/Horse.java b/net/minecraft/world/entity/animal/equine/Horse.java -index 8ba8430f41ce74736f405bfac2ef5de6fffe7d49..dbb586058f38b6c4f81e2f6567b7ae8ebbaff5a2 100644 +index 2a89a4a3123a9645e3c532e51f9811af29867f76..e69ae448ed73949a11ee3284f93a535a9f0b3d1c 100644 --- a/net/minecraft/world/entity/animal/equine/Horse.java +++ b/net/minecraft/world/entity/animal/equine/Horse.java -@@ -72,6 +72,13 @@ public class Horse extends AbstractHorse { +@@ -73,6 +73,13 @@ public class Horse extends AbstractHorse { } // Purpur end - Configurable entity base attributes @@ -209,10 +209,10 @@ index 8ba8430f41ce74736f405bfac2ef5de6fffe7d49..dbb586058f38b6c4f81e2f6567b7ae8e protected void randomizeAttributes(final RandomSource random) { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(generateMaxHealth(random::nextInt)); diff --git a/net/minecraft/world/entity/animal/equine/Llama.java b/net/minecraft/world/entity/animal/equine/Llama.java -index 942f55f750b7ba0cf25429ca888a46bc4c172eb3..08dcee8ef18818ad6963762198b9e60e9c7d4d04 100644 +index 4b607b42f7258da62968cdd3081b207da02cf5e3..0678e622e90fc13f758c582286f872b358f46243 100644 --- a/net/minecraft/world/entity/animal/equine/Llama.java +++ b/net/minecraft/world/entity/animal/equine/Llama.java -@@ -151,6 +151,13 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob { +@@ -152,6 +152,13 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob { } // Purpur end - Configurable entity base attributes @@ -227,10 +227,10 @@ index 942f55f750b7ba0cf25429ca888a46bc4c172eb3..08dcee8ef18818ad6963762198b9e60e return false; } diff --git a/net/minecraft/world/entity/animal/equine/Mule.java b/net/minecraft/world/entity/animal/equine/Mule.java -index a866b93312391142b030605e2108fe522d3d8ddd..cf0f3c9d5f8ff348e6fb76db823da4cadce4fc5b 100644 +index 226acd03320c235db4051e5274364e7579e584aa..24daee9922a270c9cdfb26899c9eda74370a5dea 100644 --- a/net/minecraft/world/entity/animal/equine/Mule.java +++ b/net/minecraft/world/entity/animal/equine/Mule.java -@@ -39,6 +39,13 @@ public class Mule extends AbstractChestedHorse { +@@ -40,6 +40,13 @@ public class Mule extends AbstractChestedHorse { } // Purpur end - Configurable entity base attributes @@ -245,10 +245,10 @@ index a866b93312391142b030605e2108fe522d3d8ddd..cf0f3c9d5f8ff348e6fb76db823da4ca public SoundEvent getAmbientSound() { return SoundEvents.MULE_AMBIENT; diff --git a/net/minecraft/world/entity/animal/equine/SkeletonHorse.java b/net/minecraft/world/entity/animal/equine/SkeletonHorse.java -index 6b12c3a1a99ce66751f8e7d65ee1f6c21ffb0833..cfce6db53e670b39a0db7f6a17857dda0ad160f6 100644 +index d8a774d65e29e19bb982bc40ff8249882e9ce96d..f1657977511160e4f35172bff89f503887b13e25 100644 --- a/net/minecraft/world/entity/animal/equine/SkeletonHorse.java +++ b/net/minecraft/world/entity/animal/equine/SkeletonHorse.java -@@ -67,6 +67,13 @@ public class SkeletonHorse extends AbstractHorse { +@@ -68,6 +68,13 @@ public class SkeletonHorse extends AbstractHorse { } // Purpur end - Configurable entity base attributes @@ -263,10 +263,10 @@ index 6b12c3a1a99ce66751f8e7d65ee1f6c21ffb0833..cfce6db53e670b39a0db7f6a17857dda return createBaseHorseAttributes().add(Attributes.MAX_HEALTH, 15.0).add(Attributes.MOVEMENT_SPEED, 0.2F); } diff --git a/net/minecraft/world/entity/animal/equine/TraderLlama.java b/net/minecraft/world/entity/animal/equine/TraderLlama.java -index bfae12b0a2b094dcd5953058f4d6245077a04fd7..7c41aecd2699725211babbac0350cb241f31ca41 100644 +index 4b92a5345d6ac96551aba8ecdd75aa0e4003dbee..544777353802146de13f3365935bd1f7dda41af3 100644 --- a/net/minecraft/world/entity/animal/equine/TraderLlama.java +++ b/net/minecraft/world/entity/animal/equine/TraderLlama.java -@@ -70,6 +70,13 @@ public class TraderLlama extends Llama { +@@ -71,6 +71,13 @@ public class TraderLlama extends Llama { } // Purpur end - Configurable entity base attributes @@ -281,10 +281,10 @@ index bfae12b0a2b094dcd5953058f4d6245077a04fd7..7c41aecd2699725211babbac0350cb24 public boolean isTraderLlama() { return true; diff --git a/net/minecraft/world/entity/animal/equine/ZombieHorse.java b/net/minecraft/world/entity/animal/equine/ZombieHorse.java -index ae429aec9be39d9af7da4671db15a4506da135d9..4be11663154a870a21832ddba05764a897ce90bd 100644 +index 061b6483beaffe62a901b3ab4665288eaf09950f..aca379a8af847b5551d950cf2880a242d9ec1768 100644 --- a/net/minecraft/world/entity/animal/equine/ZombieHorse.java +++ b/net/minecraft/world/entity/animal/equine/ZombieHorse.java -@@ -78,6 +78,13 @@ public class ZombieHorse extends AbstractHorse { +@@ -79,6 +79,13 @@ public class ZombieHorse extends AbstractHorse { } // Purpur end - Configurable entity base attributes @@ -299,10 +299,10 @@ index ae429aec9be39d9af7da4671db15a4506da135d9..4be11663154a870a21832ddba05764a8 return createBaseHorseAttributes().add(Attributes.MAX_HEALTH, 25.0); } diff --git a/net/minecraft/world/entity/animal/feline/Cat.java b/net/minecraft/world/entity/animal/feline/Cat.java -index 74c271dd9d55c846ed5440ff0d9c378a06da059d..51a587af3507415dad42f764d8fe72c5856cb6a7 100644 +index 026157f6f533e0034ad569593929532fc69729c3..bcc7eeaaba22fbc5ec21028d1b6b400ea6fcbec1 100644 --- a/net/minecraft/world/entity/animal/feline/Cat.java +++ b/net/minecraft/world/entity/animal/feline/Cat.java -@@ -128,6 +128,13 @@ public class Cat extends TamableAnimal { +@@ -135,6 +135,13 @@ public class Cat extends TamableAnimal { } // Purpur end - Configurable entity base attributes @@ -317,10 +317,10 @@ index 74c271dd9d55c846ed5440ff0d9c378a06da059d..51a587af3507415dad42f764d8fe72c5 protected void registerGoals() { this.temptGoal = new Cat.CatTemptGoal(this, 0.6, i -> i.is(ItemTags.CAT_FOOD), true); diff --git a/net/minecraft/world/entity/animal/feline/Ocelot.java b/net/minecraft/world/entity/animal/feline/Ocelot.java -index 4bf42db19d0f58338f32af1ab7c802c274a8581c..2accf49e8dd907c8a482e5317d07b28fc5492a1e 100644 +index a225a5bc7209cdaf328b252fd712cde2605fb039..b04d9caff464a5e690bafcdce4b1b46b9571d238 100644 --- a/net/minecraft/world/entity/animal/feline/Ocelot.java +++ b/net/minecraft/world/entity/animal/feline/Ocelot.java -@@ -91,6 +91,13 @@ public class Ocelot extends Animal { +@@ -98,6 +98,13 @@ public class Ocelot extends Animal { } // Purpur end - Configurable entity base attributes @@ -335,10 +335,10 @@ index 4bf42db19d0f58338f32af1ab7c802c274a8581c..2accf49e8dd907c8a482e5317d07b28f return this.entityData.get(DATA_TRUSTING); } diff --git a/net/minecraft/world/entity/animal/fox/Fox.java b/net/minecraft/world/entity/animal/fox/Fox.java -index d218a71c2475240438029ca44e86d7584ff36f73..bd4c29146ec791a7939fdea6c3f22badaa7b393a 100644 +index cf9fc2afb3b2fac97930289411f0a22fdb8ea61d..f63f304ec9375ffca0a7b22c9598a38452a3b739 100644 --- a/net/minecraft/world/entity/animal/fox/Fox.java +++ b/net/minecraft/world/entity/animal/fox/Fox.java -@@ -200,6 +200,13 @@ public class Fox extends Animal { +@@ -207,6 +207,13 @@ public class Fox extends Animal { } // Purpur end - Configurable entity base attributes @@ -352,7 +352,7 @@ index d218a71c2475240438029ca44e86d7584ff36f73..bd4c29146ec791a7939fdea6c3f22bad @Override protected void defineSynchedData(final SynchedEntityData.Builder entityData) { super.defineSynchedData(entityData); -@@ -1003,8 +1010,10 @@ public class Fox extends Animal { +@@ -1010,8 +1017,10 @@ public class Fox extends Animal { CriteriaTriggers.BRED_ANIMALS.trigger(loveCause, this.animal, this.partner, offspring); } @@ -366,7 +366,7 @@ index d218a71c2475240438029ca44e86d7584ff36f73..bd4c29146ec791a7939fdea6c3f22bad this.partner.resetLove(); this.level.addFreshEntityWithPassengers(offspring, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.BREEDING); // CraftBukkit - added SpawnReason diff --git a/net/minecraft/world/entity/animal/frog/Frog.java b/net/minecraft/world/entity/animal/frog/Frog.java -index bedbe9adede69efa4c4f2e6def9aeb3e8429fc2e..94cd1064b8544060f2838fb776d95c19bcaf629b 100644 +index 1d9689489d67098148960d49540db77532d3adeb..79e1e1a0664cb08c1263f43b8abc3dae2828863f 100644 --- a/net/minecraft/world/entity/animal/frog/Frog.java +++ b/net/minecraft/world/entity/animal/frog/Frog.java @@ -141,6 +141,13 @@ public class Frog extends Animal { @@ -384,10 +384,10 @@ index bedbe9adede69efa4c4f2e6def9aeb3e8429fc2e..94cd1064b8544060f2838fb776d95c19 protected Brain makeBrain(final Brain.Packed packedBrain) { return BRAIN_PROVIDER.makeBrain(this, packedBrain); diff --git a/net/minecraft/world/entity/animal/goat/Goat.java b/net/minecraft/world/entity/animal/goat/Goat.java -index cd0f514fa6deef90efc697d30af9a88797b456f8..8651caf56331d78f80982b9be1fa24cb963a78a4 100644 +index 6d81790bf42f7a580b95644f0f19c3ddfc7d1764..49cfa8f360aac209106052e15ae0a6d88b3cc3ff 100644 --- a/net/minecraft/world/entity/animal/goat/Goat.java +++ b/net/minecraft/world/entity/animal/goat/Goat.java -@@ -117,6 +117,13 @@ public class Goat extends Animal { +@@ -123,6 +123,13 @@ public class Goat extends Animal { } // Purpur end - Ridables @@ -402,10 +402,10 @@ index cd0f514fa6deef90efc697d30af9a88797b456f8..8651caf56331d78f80982b9be1fa24cb protected Brain makeBrain(final Brain.Packed packedBrain) { return BRAIN_PROVIDER.makeBrain(this, packedBrain); diff --git a/net/minecraft/world/entity/animal/happyghast/HappyGhast.java b/net/minecraft/world/entity/animal/happyghast/HappyGhast.java -index 7991ef3a11c7901d361fef6349aef37737a69b76..cc3ecc13bfcd367f8c6aeb55380bf509e525d85b 100644 +index 2a0e5edf26e1b53ed9f6e341a89670fe3cd4dbd3..a70806026e1c664bd45f9992a2c28dc7bbfb01eb 100644 --- a/net/minecraft/world/entity/animal/happyghast/HappyGhast.java +++ b/net/minecraft/world/entity/animal/happyghast/HappyGhast.java -@@ -153,6 +153,13 @@ public class HappyGhast extends Animal { +@@ -157,6 +157,13 @@ public class HappyGhast extends Animal { } // Purpur end - Configurable entity base attributes @@ -420,10 +420,10 @@ index 7991ef3a11c7901d361fef6349aef37737a69b76..cc3ecc13bfcd367f8c6aeb55380bf509 protected void ageBoundaryReached() { if (this.isBaby()) { diff --git a/net/minecraft/world/entity/animal/nautilus/Nautilus.java b/net/minecraft/world/entity/animal/nautilus/Nautilus.java -index cc38312d0a59529e7b8f799ffec2f917c9aa0e9b..e89c0638f7b6d1a463a895dbab5994c15aa4add3 100644 +index 49f3dc14c85a8ed391afdc7355e8c6ac34ab9ae5..d173ceba9629f7a0dca31aefc9df0bfa70d75738 100644 --- a/net/minecraft/world/entity/animal/nautilus/Nautilus.java +++ b/net/minecraft/world/entity/animal/nautilus/Nautilus.java -@@ -39,6 +39,13 @@ public class Nautilus extends AbstractNautilus { +@@ -48,6 +48,13 @@ public class Nautilus extends AbstractNautilus { } // Purpur end - Configurable entity base attributes @@ -438,7 +438,7 @@ index cc38312d0a59529e7b8f799ffec2f917c9aa0e9b..e89c0638f7b6d1a463a895dbab5994c1 protected Brain makeBrain(final Brain.Packed packedBrain) { return BRAIN_PROVIDER.makeBrain(this, packedBrain); diff --git a/net/minecraft/world/entity/animal/nautilus/ZombieNautilus.java b/net/minecraft/world/entity/animal/nautilus/ZombieNautilus.java -index 087e768c35c2c2af191c75648b278154ce5e593c..18bfb321e3728d3fa0596da0b86e4b76ced2178a 100644 +index 1ceeaad8411f06de37a0ea5aff8fc48d9211eed2..55b4a41867799dcb2999f0c324bde8b2341b2e9d 100644 --- a/net/minecraft/world/entity/animal/nautilus/ZombieNautilus.java +++ b/net/minecraft/world/entity/animal/nautilus/ZombieNautilus.java @@ -59,6 +59,13 @@ public class ZombieNautilus extends AbstractNautilus { @@ -456,10 +456,10 @@ index 087e768c35c2c2af191c75648b278154ce5e593c..18bfb321e3728d3fa0596da0b86e4b76 return AbstractNautilus.createAttributes().add(Attributes.MOVEMENT_SPEED, 1.1F); } diff --git a/net/minecraft/world/entity/animal/panda/Panda.java b/net/minecraft/world/entity/animal/panda/Panda.java -index 83ec6995b5fc47872efb5039c3e24cd62da22d10..25232dc02916a0d7189d925c858d88ab71ea5677 100644 +index bd8936c6ef9d2285858b784873e85d52812b3f14..9328cb71c88efc13afc203da1c0bff7cd305fb3c 100644 --- a/net/minecraft/world/entity/animal/panda/Panda.java +++ b/net/minecraft/world/entity/animal/panda/Panda.java -@@ -145,6 +145,13 @@ public class Panda extends Animal { +@@ -147,6 +147,13 @@ public class Panda extends Animal { } // Purpur end - Configurable entity base attributes @@ -474,10 +474,10 @@ index 83ec6995b5fc47872efb5039c3e24cd62da22d10..25232dc02916a0d7189d925c858d88ab protected boolean canDispenserEquipIntoSlot(final EquipmentSlot slot) { return slot == EquipmentSlot.MAINHAND && this.canPickUpLoot(); diff --git a/net/minecraft/world/entity/animal/parrot/Parrot.java b/net/minecraft/world/entity/animal/parrot/Parrot.java -index c11c6fdc96d696a2f8c4aee96f4ddf6c4f9b9676..346cc1fa117229b95eef86b1bf2e9fe3a84970cf 100644 +index 441919a0a99c4d87c13611999e1e24e9cfb6e0e9..22962f57daf5c274fa0ec46170f36dcaa1c8bed3 100644 --- a/net/minecraft/world/entity/animal/parrot/Parrot.java +++ b/net/minecraft/world/entity/animal/parrot/Parrot.java -@@ -207,6 +207,13 @@ public class Parrot extends ShoulderRidingEntity implements FlyingAnimal { +@@ -207,6 +207,13 @@ public class Parrot extends ShoulderRidingEntity { } // Purpur end - Configurable entity base attributes @@ -492,10 +492,10 @@ index c11c6fdc96d696a2f8c4aee96f4ddf6c4f9b9676..346cc1fa117229b95eef86b1bf2e9fe3 public @Nullable SpawnGroupData finalizeSpawn( final ServerLevelAccessor level, final DifficultyInstance difficulty, final EntitySpawnReason spawnReason, @Nullable SpawnGroupData groupData diff --git a/net/minecraft/world/entity/animal/pig/Pig.java b/net/minecraft/world/entity/animal/pig/Pig.java -index 7246b53d2fba7e547d41fd5db1eb487738e5b51e..14696e16da919a78d0098ad07a911b82ed6b60da 100644 +index 376e60ef2125e00432aad380ea7a6087abc76a0c..0deeb7ed21c3b6d4a29951ac84771a6439728698 100644 --- a/net/minecraft/world/entity/animal/pig/Pig.java +++ b/net/minecraft/world/entity/animal/pig/Pig.java -@@ -93,6 +93,13 @@ public class Pig extends Animal implements ItemSteerable { +@@ -101,6 +101,13 @@ public class Pig extends Animal implements ItemSteerable { } // Purpur end - Configurable entity base attributes @@ -510,10 +510,10 @@ index 7246b53d2fba7e547d41fd5db1eb487738e5b51e..14696e16da919a78d0098ad07a911b82 protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/animal/polarbear/PolarBear.java b/net/minecraft/world/entity/animal/polarbear/PolarBear.java -index ddfc7cab1b3864fc523e0837ff4acb8454e83ac9..38d4e31ddd9bd169dd30b6dee456f0d3f10f106d 100644 +index 85c6b17bbf490315b76612c4a8ab50b03e9d14a3..8041beeb5bb039f0aec0b59ba45806cf6eb57582 100644 --- a/net/minecraft/world/entity/animal/polarbear/PolarBear.java +++ b/net/minecraft/world/entity/animal/polarbear/PolarBear.java -@@ -126,6 +126,13 @@ public class PolarBear extends Animal implements NeutralMob { +@@ -132,6 +132,13 @@ public class PolarBear extends Animal implements NeutralMob { } // Purpur end - Configurable entity base attributes @@ -526,12 +526,12 @@ index ddfc7cab1b3864fc523e0837ff4acb8454e83ac9..38d4e31ddd9bd169dd30b6dee456f0d3 + @Override public @Nullable AgeableMob getBreedOffspring(final ServerLevel level, final AgeableMob partner) { - return EntityType.POLAR_BEAR.create(level, EntitySpawnReason.BREEDING); + return EntityTypes.POLAR_BEAR.create(level, EntitySpawnReason.BREEDING); diff --git a/net/minecraft/world/entity/animal/rabbit/Rabbit.java b/net/minecraft/world/entity/animal/rabbit/Rabbit.java -index 4aa18f0ce6f07f479f1d856c9cef9fa5d6329138..f0a0c698c612de039a24b51f6afa87df8008d5b7 100644 +index 38fa1c0b79e3dc11e830af95be4bed1e74910108..f0c4ad3715322bf1a5a60edd870b34a15949a77f 100644 --- a/net/minecraft/world/entity/animal/rabbit/Rabbit.java +++ b/net/minecraft/world/entity/animal/rabbit/Rabbit.java -@@ -170,6 +170,13 @@ public class Rabbit extends Animal { +@@ -171,6 +171,13 @@ public class Rabbit extends Animal { } // Purpur end - Configurable entity base attributes @@ -546,10 +546,10 @@ index 4aa18f0ce6f07f479f1d856c9cef9fa5d6329138..f0a0c698c612de039a24b51f6afa87df public void registerGoals() { this.goalSelector.addGoal(1, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/animal/sheep/Sheep.java b/net/minecraft/world/entity/animal/sheep/Sheep.java -index eb919dc63d950af08448b75559467ec88623d6b8..e83fe71b4f63f8f7fa1976f7d2165c36bbb184bf 100644 +index 6ba9cd9090ef264660361e28198886f96c95dfba..cd53e9540856c53b9aae961ee0303b592a513684 100644 --- a/net/minecraft/world/entity/animal/sheep/Sheep.java +++ b/net/minecraft/world/entity/animal/sheep/Sheep.java -@@ -88,6 +88,13 @@ public class Sheep extends Animal implements Shearable { +@@ -96,6 +96,13 @@ public class Sheep extends Animal implements Shearable { } // Purpur end - Configurable entity base attributes @@ -564,10 +564,10 @@ index eb919dc63d950af08448b75559467ec88623d6b8..e83fe71b4f63f8f7fa1976f7d2165c36 protected void registerGoals() { this.eatBlockGoal = new EatBlockGoal(this); diff --git a/net/minecraft/world/entity/animal/sniffer/Sniffer.java b/net/minecraft/world/entity/animal/sniffer/Sniffer.java -index 73a1ba04a6a3ef0d0aba3301b6c1dfefeacb4df6..3a0d1901dcc42aa61ccaba8db5caef671f994bf5 100644 +index 9246c76131c02832d96eeb6d3899e0050abce938..33eb3e6b312ef32c6ae94a7ef5333ab60bb4c4ad 100644 --- a/net/minecraft/world/entity/animal/sniffer/Sniffer.java +++ b/net/minecraft/world/entity/animal/sniffer/Sniffer.java -@@ -119,6 +119,13 @@ public class Sniffer extends Animal { +@@ -120,6 +120,13 @@ public class Sniffer extends Animal { } // Purpur end - Configurable entity base attributes @@ -582,10 +582,10 @@ index 73a1ba04a6a3ef0d0aba3301b6c1dfefeacb4df6..3a0d1901dcc42aa61ccaba8db5caef67 protected void defineSynchedData(final SynchedEntityData.Builder entityData) { super.defineSynchedData(entityData); diff --git a/net/minecraft/world/entity/animal/turtle/Turtle.java b/net/minecraft/world/entity/animal/turtle/Turtle.java -index 2dfcf0c9f8eb762d1683d2841a05219c497fddfc..62d9fce83cc44165c5356049a12bf6081c925857 100644 +index 806da779ee6ea7ab6fe572d2ca6cf35c03d302b3..bbee5d60204cf7c6e77cf337044e608d79d8462e 100644 --- a/net/minecraft/world/entity/animal/turtle/Turtle.java +++ b/net/minecraft/world/entity/animal/turtle/Turtle.java -@@ -112,6 +112,13 @@ public class Turtle extends Animal { +@@ -113,6 +113,13 @@ public class Turtle extends Animal { } // Purpur end - Configurable entity base attributes @@ -599,7 +599,7 @@ index 2dfcf0c9f8eb762d1683d2841a05219c497fddfc..62d9fce83cc44165c5356049a12bf608 public void setHomePos(final BlockPos pos) { this.homePos = pos; } -@@ -343,8 +350,10 @@ public class Turtle extends Animal { +@@ -348,8 +355,10 @@ public class Turtle extends Animal { } this.turtle.setHasEgg(true); @@ -613,10 +613,10 @@ index 2dfcf0c9f8eb762d1683d2841a05219c497fddfc..62d9fce83cc44165c5356049a12bf608 this.partner.resetLove(); RandomSource random = this.animal.getRandom(); diff --git a/net/minecraft/world/entity/animal/wolf/Wolf.java b/net/minecraft/world/entity/animal/wolf/Wolf.java -index ab9e4583dd29e692a3632d23c479539a3f19e042..f84b35919e49c1a86cbc4bdec1f9f81f2dac633d 100644 +index acf623ba0ab1f1d6c98af1a83cddd634443aee58..66e58482f8422e5478b29f82271489d0449ceddb 100644 --- a/net/minecraft/world/entity/animal/wolf/Wolf.java +++ b/net/minecraft/world/entity/animal/wolf/Wolf.java -@@ -212,6 +212,13 @@ public class Wolf extends TamableAnimal implements NeutralMob { +@@ -220,6 +220,13 @@ public class Wolf extends TamableAnimal implements NeutralMob { } // Purpur end - Configurable entity base attributes @@ -631,10 +631,10 @@ index ab9e4583dd29e692a3632d23c479539a3f19e042..f84b35919e49c1a86cbc4bdec1f9f81f protected void registerGoals() { this.goalSelector.addGoal(1, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/monster/Strider.java b/net/minecraft/world/entity/monster/Strider.java -index 47a5ce453ea7b291e5cca12c7cb86ccba9d55cc8..b6c20ce23cc1c97c337c5df6e03ad79a51c08702 100644 +index 4f4f01941e66880113dd80626030a635203365b9..6017c3865c685c55ecf304af34b07e64563c5969 100644 --- a/net/minecraft/world/entity/monster/Strider.java +++ b/net/minecraft/world/entity/monster/Strider.java -@@ -118,6 +118,13 @@ public class Strider extends Animal implements ItemSteerable { +@@ -124,6 +124,13 @@ public class Strider extends Animal implements ItemSteerable { } // Purpur end - Configurable entity base attributes @@ -649,10 +649,10 @@ index 47a5ce453ea7b291e5cca12c7cb86ccba9d55cc8..b6c20ce23cc1c97c337c5df6e03ad79a final EntityType ignoredType, final LevelAccessor level, diff --git a/net/minecraft/world/entity/monster/hoglin/Hoglin.java b/net/minecraft/world/entity/monster/hoglin/Hoglin.java -index 352139672f2cf1a7d624db4cc5bdef3ab0c9b942..d158807f22a0a08614b2d7054663ef2782a519e3 100644 +index 2d8023023ae121dd6ad623766c50e0b236e6a25e..c8b60fd516340de7245d3d23303c44bef4239a9c 100644 --- a/net/minecraft/world/entity/monster/hoglin/Hoglin.java +++ b/net/minecraft/world/entity/monster/hoglin/Hoglin.java -@@ -98,6 +98,13 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { +@@ -106,6 +106,13 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { } // Purpur end - Configurable entity base attributes diff --git a/purpur-server/minecraft-patches/unapplied-features/0013-Apply-display-names-from-item-forms-of-entities-to-e.patch b/purpur-server/minecraft-patches/features/0013-Apply-display-names-from-item-forms-of-entities-to-e.patch similarity index 84% rename from purpur-server/minecraft-patches/unapplied-features/0013-Apply-display-names-from-item-forms-of-entities-to-e.patch rename to purpur-server/minecraft-patches/features/0013-Apply-display-names-from-item-forms-of-entities-to-e.patch index d4852e889..25f7b63bb 100644 --- a/purpur-server/minecraft-patches/unapplied-features/0013-Apply-display-names-from-item-forms-of-entities-to-e.patch +++ b/purpur-server/minecraft-patches/features/0013-Apply-display-names-from-item-forms-of-entities-to-e.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Apply display names from item forms of entities to entities diff --git a/net/minecraft/world/entity/decoration/ArmorStand.java b/net/minecraft/world/entity/decoration/ArmorStand.java -index 0f48cba7d4a5246baa58aaf7e42deff93a0307de..8ed90c7e793c12a130a3214f54aab5482e8e1a8a 100644 +index 385d6bdf435320b4779a27512447e7cc64e05ddf..ec65ca3fd54c8da3768851ee53195735d24d4895 100644 --- a/net/minecraft/world/entity/decoration/ArmorStand.java +++ b/net/minecraft/world/entity/decoration/ArmorStand.java -@@ -475,6 +475,7 @@ public class ArmorStand extends LivingEntity { +@@ -476,6 +476,7 @@ public class ArmorStand extends LivingEntity { private org.bukkit.event.entity.EntityDeathEvent brokenByPlayer(final ServerLevel level, final DamageSource source) { // Paper ItemStack result = new ItemStack(Items.ARMOR_STAND); @@ -18,10 +18,10 @@ index 0f48cba7d4a5246baa58aaf7e42deff93a0307de..8ed90c7e793c12a130a3214f54aab548 this.drops.add(new DefaultDrop(result, stack -> Block.popResource(this.level(), this.blockPosition(), stack))); // CraftBukkit - add to drops // Paper - Restore vanilla drops behavior return this.brokenByAnything(level, source); // Paper diff --git a/net/minecraft/world/entity/decoration/ItemFrame.java b/net/minecraft/world/entity/decoration/ItemFrame.java -index 9cc2af3db862fdfa45a67ef4b9c49581d7d69d36..b62bf660b9ccc479afdd9d277a78aa857211ef12 100644 +index 7fa894e6052dd35a87b19f6bac6031bfd0243deb..19bd80e860a520f6a07baa3e66cc40c8a419c79f 100644 --- a/net/minecraft/world/entity/decoration/ItemFrame.java +++ b/net/minecraft/world/entity/decoration/ItemFrame.java -@@ -248,7 +248,11 @@ public class ItemFrame extends HangingEntity { +@@ -249,7 +249,11 @@ public class ItemFrame extends HangingEntity { this.removeFramedMap(itemStack); } else { if (withFrame) { @@ -35,10 +35,10 @@ index 9cc2af3db862fdfa45a67ef4b9c49581d7d69d36..b62bf660b9ccc479afdd9d277a78aa85 if (!itemStack.isEmpty()) { diff --git a/net/minecraft/world/entity/decoration/painting/Painting.java b/net/minecraft/world/entity/decoration/painting/Painting.java -index e43a510250b7c9b2b5542c30a9aca8be23004794..bb4081d0345a59b209c076fafaee1d1872ea0285 100644 +index ed20a97ca9253c5c6626f3fddef45c54490fc285..338992872b24a46babd24eb364044e1449e27f17 100644 --- a/net/minecraft/world/entity/decoration/painting/Painting.java +++ b/net/minecraft/world/entity/decoration/painting/Painting.java -@@ -182,7 +182,11 @@ public class Painting extends HangingEntity { +@@ -183,7 +183,11 @@ public class Painting extends HangingEntity { if (level.getGameRules().get(GameRules.ENTITY_DROPS)) { this.playSound(SoundEvents.PAINTING_BREAK, 1.0F, 1.0F); if (!(causedBy instanceof Player player && player.hasInfiniteMaterials())) { @@ -52,10 +52,10 @@ index e43a510250b7c9b2b5542c30a9aca8be23004794..bb4081d0345a59b209c076fafaee1d18 } } diff --git a/net/minecraft/world/entity/vehicle/boat/AbstractBoat.java b/net/minecraft/world/entity/vehicle/boat/AbstractBoat.java -index b78a488780dcf1be542fcb2c271b06939ede7053..37386231ba0de8cec1a671b95ca9cc96446115be 100644 +index 2a6c5faa18da0f008e34eb4f2e2c3dc14e49186a..2e4ee279e4a9afacdfdfb6e1ed99a66c08aee4c9 100644 --- a/net/minecraft/world/entity/vehicle/boat/AbstractBoat.java +++ b/net/minecraft/world/entity/vehicle/boat/AbstractBoat.java -@@ -820,7 +820,13 @@ public abstract class AbstractBoat extends VehicleEntity implements Leashable { +@@ -825,7 +825,13 @@ public abstract class AbstractBoat extends VehicleEntity implements Leashable { @Override public final ItemStack getPickResult() { @@ -71,10 +71,10 @@ index b78a488780dcf1be542fcb2c271b06939ede7053..37386231ba0de8cec1a671b95ca9cc96 @Override diff --git a/net/minecraft/world/item/ArmorStandItem.java b/net/minecraft/world/item/ArmorStandItem.java -index 62b2da0f028d21f6f759bb13acaf0ed62c673386..f0cb4717a0ffb30ca81d957e0d5f468c187dd693 100644 +index 9ed039c323cccf163e7b3f39d73fcc7e3b5c663c..e640c97e26308988f0c8bd0c57d05365e8a41d9f 100644 --- a/net/minecraft/world/item/ArmorStandItem.java +++ b/net/minecraft/world/item/ArmorStandItem.java -@@ -52,6 +52,10 @@ public class ArmorStandItem extends Item { +@@ -53,6 +53,10 @@ public class ArmorStandItem extends Item { return InteractionResult.FAIL; } // CraftBukkit end @@ -86,7 +86,7 @@ index 62b2da0f028d21f6f759bb13acaf0ed62c673386..f0cb4717a0ffb30ca81d957e0d5f468c level.playSound(null, entity.getX(), entity.getY(), entity.getZ(), SoundEvents.ARMOR_STAND_PLACE, SoundSource.BLOCKS, 0.75F, 0.8F); entity.gameEvent(GameEvent.ENTITY_PLACE, context.getPlayer()); diff --git a/net/minecraft/world/item/BoatItem.java b/net/minecraft/world/item/BoatItem.java -index 8d30c52c46b5f81cd0b9eef6b9c2301613f23892..7c4786b14acbeaa9fd8f98281ed74efbccdd15c9 100644 +index 416feeb88dd0c473e596a8bb217fab52a24d23be..597f14af31e1a1253e5d412af390e200632ba279 100644 --- a/net/minecraft/world/item/BoatItem.java +++ b/net/minecraft/world/item/BoatItem.java @@ -65,6 +65,7 @@ public class BoatItem extends Item { @@ -98,15 +98,15 @@ index 8d30c52c46b5f81cd0b9eef6b9c2301613f23892..7c4786b14acbeaa9fd8f98281ed74efb return InteractionResult.FAIL; } diff --git a/net/minecraft/world/item/HangingEntityItem.java b/net/minecraft/world/item/HangingEntityItem.java -index b90397101ffb45b1a0aee3103be2d3100ae02788..a611db7d20c8652abac02c2bb80bfd974a990df0 100644 +index 56a048740794db66917c2975a65d9d8fc5a8dc36..e3d81dc449545d6ce25c2f2cb46d521cc6a2a422 100644 --- a/net/minecraft/world/item/HangingEntityItem.java +++ b/net/minecraft/world/item/HangingEntityItem.java -@@ -60,7 +60,7 @@ public class HangingEntityItem extends Item { +@@ -61,7 +61,7 @@ public class HangingEntityItem extends Item { entity = new GlowItemFrame(level, blockPos, clickedFace); } -- EntityType.createDefaultStackConfig(level, itemInHand, player).accept(entity); -+ EntityType.appendDefaultStackConfig(entity1 -> {if (!level.purpurConfig.persistentDroppableEntityDisplayNames) entity1.setCustomName(null);}, level, itemInHand, player).accept(entity); // Purpur - Apply display names from item forms of entities to entities and vice versa +- EntityType.createDefaultStackConfig(level, itemInHand, player).apply(entity); ++ EntityType.appendDefaultStackConfig(entity1 -> {if (!level.purpurConfig.persistentDroppableEntityDisplayNames) entity1.setCustomName(null);}, level, itemInHand, player).apply(entity); // Purpur - Apply display names from item forms of entities to entities and vice versa if (entity.survives()) { if (!level.isClientSide()) { // CraftBukkit start - fire HangingPlaceEvent diff --git a/purpur-server/minecraft-patches/unapplied-features/0014-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch b/purpur-server/minecraft-patches/features/0014-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch similarity index 92% rename from purpur-server/minecraft-patches/unapplied-features/0014-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch rename to purpur-server/minecraft-patches/features/0014-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch index 752c1a56e..3cf996a89 100644 --- a/purpur-server/minecraft-patches/unapplied-features/0014-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch +++ b/purpur-server/minecraft-patches/features/0014-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch @@ -8,7 +8,7 @@ farm Nether Wart. Reimplemented based on a feature of the carpet-extra mod. diff --git a/net/minecraft/world/entity/ai/behavior/HarvestFarmland.java b/net/minecraft/world/entity/ai/behavior/HarvestFarmland.java -index f5e93036b5ecb46e4f81aff27d93d27cda49e1b0..959f9fb20c428879fdc2d4a59904cf6b1a8f4d88 100644 +index 5a0d0d1c145c303930769ea27f81d91337a3f1bf..29458d4dc1764b5b7ede94853190a5dd84c1fc36 100644 --- a/net/minecraft/world/entity/ai/behavior/HarvestFarmland.java +++ b/net/minecraft/world/entity/ai/behavior/HarvestFarmland.java @@ -31,6 +31,7 @@ public class HarvestFarmland extends Behavior { @@ -37,15 +37,15 @@ index f5e93036b5ecb46e4f81aff27d93d27cda49e1b0..959f9fb20c428879fdc2d4a59904cf6b Block block = state.getBlock(); Block blockBelow = level.getBlockState(blockPos.below()).getBlock(); + if (this.clericWartFarmer) return block == net.minecraft.world.level.block.Blocks.NETHER_WART && state.getValue(net.minecraft.world.level.block.NetherWartBlock.AGE) == 3 || state.isAir() && block == net.minecraft.world.level.block.Blocks.SOUL_SAND; // Purpur - Option for Villager Clerics to farm Nether Wart - return block instanceof CropBlock && ((CropBlock)block).isMaxAge(state) || state.isAir() && blockBelow instanceof FarmlandBlock; + return block instanceof CropBlock cropBlock && cropBlock.isMaxAge(state) || state.isAir() && blockBelow instanceof FarmlandBlock; } @@ -109,19 +112,19 @@ public class HarvestFarmland extends Behavior { BlockState blockState = level.getBlockState(this.aboveFarmlandPos); Block block = blockState.getBlock(); Block blockBelow = level.getBlockState(this.aboveFarmlandPos.below()).getBlock(); -- if (block instanceof CropBlock && ((CropBlock)block).isMaxAge(blockState)) { -+ if (block instanceof CropBlock && ((CropBlock)block).isMaxAge(blockState) && !this.clericWartFarmer || this.clericWartFarmer && block == net.minecraft.world.level.block.Blocks.NETHER_WART && blockState.getValue(net.minecraft.world.level.block.NetherWartBlock.AGE) == 3) { // Purpur - Option for Villager Clerics to farm Nether Wart +- if (block instanceof CropBlock cropBlock && cropBlock.isMaxAge(blockState)) { ++ if (block instanceof CropBlock cropBlock && cropBlock.isMaxAge(blockState) && !this.clericWartFarmer || this.clericWartFarmer && block == net.minecraft.world.level.block.Blocks.NETHER_WART && blockState.getValue(net.minecraft.world.level.block.NetherWartBlock.AGE) == 3) { // Purpur - Option for Villager Clerics to farm Nether Wart if (org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(body, this.aboveFarmlandPos, blockState.getFluidState().createLegacyBlock())) { // CraftBukkit // Paper - fix wrong block state level.destroyBlock(this.aboveFarmlandPos, true, body); } // CraftBukkit @@ -73,7 +73,7 @@ index f5e93036b5ecb46e4f81aff27d93d27cda49e1b0..959f9fb20c428879fdc2d4a59904cf6b 1.0F, 1.0F diff --git a/net/minecraft/world/entity/ai/behavior/TradeWithVillager.java b/net/minecraft/world/entity/ai/behavior/TradeWithVillager.java -index 1d405a77c4cf70bd818a4f59163e5b319808d5f3..6a7b51acfc2cd157ce81c3a92d2633375cb1a6a7 100644 +index 736ad21b73a19113c6f0f3bce6aa1cc0a41485a8..ec3541d4f2d39a3fd482063efabeab6478311214 100644 --- a/net/minecraft/world/entity/ai/behavior/TradeWithVillager.java +++ b/net/minecraft/world/entity/ai/behavior/TradeWithVillager.java @@ -59,6 +59,12 @@ public class TradeWithVillager extends Behavior { @@ -90,7 +90,7 @@ index 1d405a77c4cf70bd818a4f59163e5b319808d5f3..6a7b51acfc2cd157ce81c3a92d263337 throwHalfStack(body, this.trades, target); } diff --git a/net/minecraft/world/entity/ai/behavior/VillagerGoalPackages.java b/net/minecraft/world/entity/ai/behavior/VillagerGoalPackages.java -index e70ada99503e9df863e0f1e17dcafe85b5e4efd5..ebd320fa575fbf955f900f7ec0bbf6e17aa73b05 100644 +index fa9163d1f73eacd110227b6cf95f578c678aa803..bcae1ac0f5acccd4e58fe1cc2a54b3d30b488414 100644 --- a/net/minecraft/world/entity/ai/behavior/VillagerGoalPackages.java +++ b/net/minecraft/world/entity/ai/behavior/VillagerGoalPackages.java @@ -74,8 +74,13 @@ public class VillagerGoalPackages { @@ -136,7 +136,7 @@ index ec12508c112b1e7748a5d197b73a0d540bed10fc..f2daabad51d565cae11e8bfce8b1bf40 brain.setMemory(MemoryModuleType.SECONDARY_JOB_SITE, jobSites); } else { diff --git a/net/minecraft/world/entity/npc/villager/Villager.java b/net/minecraft/world/entity/npc/villager/Villager.java -index e06be61042e8cb873aed23ebcb94cc688a2668cc..744a7251f0ab9d7cb09ccdc7d1f0bbcd62483da1 100644 +index f0ebe6f376a13df2fa34f41ecdcc9bded72dc756..bd9f39efb01f9153db56e6e58b56b76dec3d8cc3 100644 --- a/net/minecraft/world/entity/npc/villager/Villager.java +++ b/net/minecraft/world/entity/npc/villager/Villager.java @@ -148,7 +148,7 @@ public class Villager extends AbstractVillager implements VillagerDataHolder, Re diff --git a/purpur-server/minecraft-patches/unapplied-features/0015-Add-mobGriefing-override-to-everything-affected.patch b/purpur-server/minecraft-patches/features/0015-Add-mobGriefing-override-to-everything-affected.patch similarity index 90% rename from purpur-server/minecraft-patches/unapplied-features/0015-Add-mobGriefing-override-to-everything-affected.patch rename to purpur-server/minecraft-patches/features/0015-Add-mobGriefing-override-to-everything-affected.patch index ee77701a8..dc42ccded 100644 --- a/purpur-server/minecraft-patches/unapplied-features/0015-Add-mobGriefing-override-to-everything-affected.patch +++ b/purpur-server/minecraft-patches/features/0015-Add-mobGriefing-override-to-everything-affected.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add mobGriefing override to everything affected diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java -index 17dab3c08b4cf38b890e064b70edb9cfb2c23e73..c3bf8c3d9e34940c40a0bf453bea3ca4191b2411 100644 +index 991ded4e26c00ffb25a933a8cc175849e1e579b2..a9e93d55de28964169988e2b276fdfc8acd29fdb 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java -@@ -1953,7 +1953,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -1982,7 +1982,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin if (this.level() instanceof ServerLevel serverLevel) { boolean var6 = false; if (this.dead && killer instanceof WitherBoss) { // Paper @@ -18,10 +18,10 @@ index 17dab3c08b4cf38b890e064b70edb9cfb2c23e73..c3bf8c3d9e34940c40a0bf453bea3ca4 BlockState state = Blocks.WITHER_ROSE.defaultBlockState(); if (this.level().getBlockState(pos).isAir() && state.canSurvive(this.level(), pos)) { diff --git a/net/minecraft/world/entity/Mob.java b/net/minecraft/world/entity/Mob.java -index 31cb7f27dc114f347b1667a3ad7e99d4ccff8d34..2d74f6f2a47e5dea6b52037a8b6e3766a74f6f82 100644 +index c707a18175920b12b4d554d8041c7afe10a0efd1..6e6ba45c93209bd9e7a8565bf166b4cc9843b80a 100644 --- a/net/minecraft/world/entity/Mob.java +++ b/net/minecraft/world/entity/Mob.java -@@ -572,7 +572,7 @@ public abstract class Mob extends LivingEntity implements Targeting, EquipmentUs +@@ -577,7 +577,7 @@ public abstract class Mob extends LivingEntity implements Targeting, EquipmentUs && this.canPickUpLoot() && this.isAlive() && !this.dead @@ -31,7 +31,7 @@ index 31cb7f27dc114f347b1667a3ad7e99d4ccff8d34..2d74f6f2a47e5dea6b52037a8b6e3766 for (ItemEntity entity : this.level() diff --git a/net/minecraft/world/entity/ai/behavior/HarvestFarmland.java b/net/minecraft/world/entity/ai/behavior/HarvestFarmland.java -index 959f9fb20c428879fdc2d4a59904cf6b1a8f4d88..a3590f9b54520c2b7e11de706fba685c3b860f7c 100644 +index 29458d4dc1764b5b7ede94853190a5dd84c1fc36..139f7d44333aa50367739487f6154fe8deaf9685 100644 --- a/net/minecraft/world/entity/ai/behavior/HarvestFarmland.java +++ b/net/minecraft/world/entity/ai/behavior/HarvestFarmland.java @@ -48,7 +48,7 @@ public class HarvestFarmland extends Behavior { @@ -92,10 +92,10 @@ index ff0f99d4b560a1c0721885b0eba5bd5ab2087bd7..51c72524c14c078d1bb0539f0b54fc4a } else if (this.nextStartTick > 0) { this.nextStartTick--; diff --git a/net/minecraft/world/entity/animal/fox/Fox.java b/net/minecraft/world/entity/animal/fox/Fox.java -index bd4c29146ec791a7939fdea6c3f22badaa7b393a..ed481b0d7c7787ef01797ef553b85b1bac6027c9 100644 +index f63f304ec9375ffca0a7b22c9598a38452a3b739..bf9ff90916733110a249912d7aeabc2e45f63b01 100644 --- a/net/minecraft/world/entity/animal/fox/Fox.java +++ b/net/minecraft/world/entity/animal/fox/Fox.java -@@ -1068,7 +1068,7 @@ public class Fox extends Animal { +@@ -1075,7 +1075,7 @@ public class Fox extends Animal { } protected void onReachedTarget() { @@ -105,7 +105,7 @@ index bd4c29146ec791a7939fdea6c3f22badaa7b393a..ed481b0d7c7787ef01797ef553b85b1b if (state.is(Blocks.SWEET_BERRY_BUSH)) { this.pickSweetBerries(state); diff --git a/net/minecraft/world/entity/animal/golem/SnowGolem.java b/net/minecraft/world/entity/animal/golem/SnowGolem.java -index bd594838ae25f16e6e16335e06c4d981c5ecdc2a..7091f5bc2ecb9d4b86162fe364447df65d8e9348 100644 +index 3fe90a55e0b681c3c689db081abe28e6931e711f..ad300631146959f158cbabddac12fda4deb33360 100644 --- a/net/minecraft/world/entity/animal/golem/SnowGolem.java +++ b/net/minecraft/world/entity/animal/golem/SnowGolem.java @@ -135,7 +135,7 @@ public class SnowGolem extends AbstractGolem implements RangedAttackMob, Shearab @@ -118,10 +118,10 @@ index bd594838ae25f16e6e16335e06c4d981c5ecdc2a..7091f5bc2ecb9d4b86162fe364447df6 } diff --git a/net/minecraft/world/entity/animal/rabbit/Rabbit.java b/net/minecraft/world/entity/animal/rabbit/Rabbit.java -index f0a0c698c612de039a24b51f6afa87df8008d5b7..07db369d748df1e870339eb06032146d6fba8d35 100644 +index f0c4ad3715322bf1a5a60edd870b34a15949a77f..80a65dba81ab82cdb9bd43d1878e74550e61d634 100644 --- a/net/minecraft/world/entity/animal/rabbit/Rabbit.java +++ b/net/minecraft/world/entity/animal/rabbit/Rabbit.java -@@ -696,7 +696,7 @@ public class Rabbit extends Animal { +@@ -695,7 +695,7 @@ public class Rabbit extends Animal { @Override public boolean canUse() { if (this.nextStartTick <= 0) { @@ -131,10 +131,10 @@ index f0a0c698c612de039a24b51f6afa87df8008d5b7..07db369d748df1e870339eb06032146d } diff --git a/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -index 6e2afa71d0d2da4cca868f617d29b3cc9071553d..9cdbb284c190f2130824c881000880958994013f 100644 +index 6883bd42f9d124c6421d1eb332f04514aa7bc3f8..1294dc666be270b4c7b335b7f2786b9b68bededc 100644 --- a/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java +++ b/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -@@ -535,7 +535,7 @@ public class EnderDragon extends Mob implements Enemy { +@@ -536,7 +536,7 @@ public class EnderDragon extends Mob implements Enemy { BlockPos blockPos = new BlockPos(x, y, z); BlockState state = level.getBlockState(blockPos); if (!state.isAir() && !state.is(BlockTags.DRAGON_TRANSPARENT)) { @@ -144,7 +144,7 @@ index 6e2afa71d0d2da4cca868f617d29b3cc9071553d..9cdbb284c190f2130824c88100088095 //flag1 = level.removeBlock(blockPos, false) || flag1; destroyedBlock = true; diff --git a/net/minecraft/world/entity/boss/wither/WitherBoss.java b/net/minecraft/world/entity/boss/wither/WitherBoss.java -index 8b2716294b18da6fae981e088b8ddb1f2ffcfb2e..06f09cf81d1ad42beda79dbd5087c2d7264a9612 100644 +index 7a80afbe7d1c5ff2ea0e26eb1c59123705dc1aef..543ea15e63316564aa6c699863d952570d7e0df7 100644 --- a/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/net/minecraft/world/entity/boss/wither/WitherBoss.java @@ -492,7 +492,7 @@ public class WitherBoss extends Monster implements RangedAttackMob { @@ -179,10 +179,10 @@ index e9b28ab9af835e8394855f08edb3cc463022d6f9..3f233ad5cf2514813ec8d3d36a59f716 } diff --git a/net/minecraft/world/entity/monster/Ravager.java b/net/minecraft/world/entity/monster/Ravager.java -index 3e2fa1f4e9c820af76ef5f4354ca66fae182da7b..01e09b39ac5385e7cbfa8a38df94884c17f8f8c0 100644 +index d8c97a5ec3f121ce92dedfeba4babb564714eca4..22722b7cec888fa1c28fa17baeb37f38c55a72e4 100644 --- a/net/minecraft/world/entity/monster/Ravager.java +++ b/net/minecraft/world/entity/monster/Ravager.java -@@ -177,7 +177,7 @@ public class Ravager extends Raider { +@@ -178,7 +178,7 @@ public class Ravager extends Raider { this.getAttribute(Attributes.MOVEMENT_SPEED).setBaseValue(Mth.lerp(0.1, baseValue, maxSpeed)); } @@ -192,7 +192,7 @@ index 3e2fa1f4e9c820af76ef5f4354ca66fae182da7b..01e09b39ac5385e7cbfa8a38df94884c AABB bb = this.getBoundingBox().inflate(0.2); diff --git a/net/minecraft/world/entity/monster/Silverfish.java b/net/minecraft/world/entity/monster/Silverfish.java -index 6037500c084e709110dfe512f110b505111b6d71..34bb4c573f72b32931e47e5502a342a8d2283a6c 100644 +index a789aa75d88658236524d83fee02cf303e898809..1119feee838deb454ceef5d6c9998773c7169daf 100644 --- a/net/minecraft/world/entity/monster/Silverfish.java +++ b/net/minecraft/world/entity/monster/Silverfish.java @@ -173,7 +173,7 @@ public class Silverfish extends Monster { @@ -204,20 +204,20 @@ index 6037500c084e709110dfe512f110b505111b6d71..34bb4c573f72b32931e47e5502a342a8 this.selectedDirection = Direction.getRandom(random); BlockPos pos = BlockPos.containing(this.mob.getX(), this.mob.getY() + 0.5, this.mob.getZ()).relative(this.selectedDirection); BlockState blockState = this.mob.level().getBlockState(pos); -@@ -249,7 +249,7 @@ public class Silverfish extends Monster { - Block block = blockState.getBlock(); - if (block instanceof InfestedBlock) { +@@ -248,7 +248,7 @@ public class Silverfish extends Monster { + BlockState blockState = level.getBlockState(testPos); + if (blockState.getBlock() instanceof InfestedBlock infestedBlock) { // CraftBukkit start -- BlockState afterState = getServerLevel(level).getGameRules().get(GameRules.MOB_GRIEFING) ? blockState.getFluidState().createLegacyBlock() : ((InfestedBlock) block).hostStateByInfested(level.getBlockState(testPos)); // Paper - fix wrong block state -+ BlockState afterState = getServerLevel(level).getGameRules().get(GameRules.MOB_GRIEFING, getServerLevel(level).purpurConfig.silverfishMobGriefingOverride) ? blockState.getFluidState().createLegacyBlock() : ((InfestedBlock) block).hostStateByInfested(level.getBlockState(testPos)); // Paper - fix wrong block state // Purpur - Add mobGriefing override to everything affected +- BlockState afterState = getServerLevel(level).getGameRules().get(GameRules.MOB_GRIEFING) ? blockState.getFluidState().createLegacyBlock() : infestedBlock.hostStateByInfested(level.getBlockState(testPos)); // Paper - fix wrong block state ++ BlockState afterState = getServerLevel(level).getGameRules().get(GameRules.MOB_GRIEFING, getServerLevel(level).purpurConfig.silverfishMobGriefingOverride) ? blockState.getFluidState().createLegacyBlock() : infestedBlock.hostStateByInfested(level.getBlockState(testPos)); // Paper - fix wrong block state // Purpur - Add mobGriefing override to everything affected if (!org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(this.silverfish, testPos, afterState)) { // Paper - fix wrong block state continue; } diff --git a/net/minecraft/world/entity/monster/illager/Evoker.java b/net/minecraft/world/entity/monster/illager/Evoker.java -index d41c3efa257f82981fbbabd527c4e748f448bfa9..40fb26c7b0f5975a58d218d799fa391661e1c748 100644 +index 73ebf1ac5d814399887e4e8e717ee8fb41404969..4b077693e8749b6d2440b12f0aa1d7d6ac899593 100644 --- a/net/minecraft/world/entity/monster/illager/Evoker.java +++ b/net/minecraft/world/entity/monster/illager/Evoker.java -@@ -318,7 +318,7 @@ public class Evoker extends SpellcasterIllager { +@@ -332,7 +332,7 @@ public class Evoker extends SpellcasterIllager { } ServerLevel level = getServerLevel(Evoker.this.level()); @@ -227,7 +227,7 @@ index d41c3efa257f82981fbbabd527c4e748f448bfa9..40fb26c7b0f5975a58d218d799fa3916 } diff --git a/net/minecraft/world/entity/monster/piglin/Piglin.java b/net/minecraft/world/entity/monster/piglin/Piglin.java -index 17ce12d23ec9e1e03c02755711dfecb6d207af61..d00490669c66343e37d2a54a051f02995e686c84 100644 +index 95751fd884c70ff6a3ff95fb2d442627a7867996..013550c72a194977b1874f30aeda60d27b682853 100644 --- a/net/minecraft/world/entity/monster/piglin/Piglin.java +++ b/net/minecraft/world/entity/monster/piglin/Piglin.java @@ -416,7 +416,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento @@ -253,10 +253,10 @@ index 9af4bf76974f05d9f752bbd4e8037560ec481cdf..7f3673a44b0200d18dbf7f1fac8d377b public boolean mayBreak(final ServerLevel level) { diff --git a/net/minecraft/world/entity/projectile/hurtingprojectile/LargeFireball.java b/net/minecraft/world/entity/projectile/hurtingprojectile/LargeFireball.java -index 711b97aa9e49b7edee34c91d77b1005be4fa96bd..bcda871c7db7a13f85e04e8fb91be13da15992bc 100644 +index 8195ab561d12abb33f4359a68b3c1579ce284242..1991148d1bd440a453363c5df21fd161308f656f 100644 --- a/net/minecraft/world/entity/projectile/hurtingprojectile/LargeFireball.java +++ b/net/minecraft/world/entity/projectile/hurtingprojectile/LargeFireball.java -@@ -20,20 +20,20 @@ public class LargeFireball extends Fireball { +@@ -21,20 +21,20 @@ public class LargeFireball extends Fireball { public LargeFireball(final EntityType type, final Level level) { super(type, level); @@ -265,7 +265,7 @@ index 711b97aa9e49b7edee34c91d77b1005be4fa96bd..bcda871c7db7a13f85e04e8fb91be13d } public LargeFireball(final Level level, final LivingEntity mob, final Vec3 direction, final int explosionPower) { - super(EntityType.FIREBALL, mob, direction, level); + super(EntityTypes.FIREBALL, mob, direction, level); this.explosionPower = explosionPower; - this.isIncendiary = (level instanceof ServerLevel serverLevel) && serverLevel.getGameRules().get(GameRules.MOB_GRIEFING); // CraftBukkit + this.isIncendiary = (level instanceof ServerLevel serverLevel) && serverLevel.getGameRules().get(GameRules.MOB_GRIEFING, serverLevel.purpurConfig.fireballsMobGriefingOverride); // CraftBukkit // Purpur - Add mobGriefing override to everything affected @@ -281,11 +281,11 @@ index 711b97aa9e49b7edee34c91d77b1005be4fa96bd..bcda871c7db7a13f85e04e8fb91be13d org.bukkit.event.entity.ExplosionPrimeEvent event = new org.bukkit.event.entity.ExplosionPrimeEvent((org.bukkit.entity.Explosive) this.getBukkitEntity()); if (event.callEvent()) { diff --git a/net/minecraft/world/entity/projectile/hurtingprojectile/SmallFireball.java b/net/minecraft/world/entity/projectile/hurtingprojectile/SmallFireball.java -index 55000ce5010321323bf79007ef8de637a492657f..b7f5f434b8b3abbaab7f65fc591ddf18308b5a2f 100644 +index a2aab8db9826e0b4607f54914af43918a7e35512..e5cf3ec08e134e24fbcc31d90321913077988b43 100644 --- a/net/minecraft/world/entity/projectile/hurtingprojectile/SmallFireball.java +++ b/net/minecraft/world/entity/projectile/hurtingprojectile/SmallFireball.java -@@ -25,7 +25,7 @@ public class SmallFireball extends Fireball { - super(EntityType.SMALL_FIREBALL, mob, direction, level); +@@ -26,7 +26,7 @@ public class SmallFireball extends Fireball { + super(EntityTypes.SMALL_FIREBALL, mob, direction, level); // CraftBukkit start if (this.getOwner() != null && this.getOwner() instanceof Mob) { - this.isIncendiary = (level instanceof ServerLevel serverLevel) && serverLevel.getGameRules().get(GameRules.MOB_GRIEFING); @@ -294,10 +294,10 @@ index 55000ce5010321323bf79007ef8de637a492657f..b7f5f434b8b3abbaab7f65fc591ddf18 // CraftBukkit end } diff --git a/net/minecraft/world/entity/raid/Raider.java b/net/minecraft/world/entity/raid/Raider.java -index cf689dae6978577970e39bf3004be551b4908cd1..869af8dffe56a52ea1406a6598df733f724ee654 100644 +index ac5808a7019e7131b2e7f6710537d63ad5340703..f37710c48aafb11d65b99e4d37ef1382a8a36417 100644 --- a/net/minecraft/world/entity/raid/Raider.java +++ b/net/minecraft/world/entity/raid/Raider.java -@@ -397,7 +397,7 @@ public abstract class Raider extends PatrollingMonster { +@@ -398,7 +398,7 @@ public abstract class Raider extends PatrollingMonster { } private boolean cannotPickUpBanner() { @@ -333,7 +333,7 @@ index d4a7099782965fe2c24c4e5fc48aab07a3f1ec45..830067a48d60d8fe85e0878cff2a7ad4 // CraftBukkit start - Interact soil org.bukkit.event.Cancellable cancellable; diff --git a/net/minecraft/world/level/block/PowderSnowBlock.java b/net/minecraft/world/level/block/PowderSnowBlock.java -index 648262547aadff8e0615a93a9834ca654e581b3a..022daf760a649720c46e6e31591f2c1ad8a8f3ea 100644 +index e62a9b0ffe7ba44fc5edd5d584b7c114699d8e58..564376c2da94257db2c7251def664fb990f708b5 100644 --- a/net/minecraft/world/level/block/PowderSnowBlock.java +++ b/net/minecraft/world/level/block/PowderSnowBlock.java @@ -103,7 +103,7 @@ public class PowderSnowBlock extends Block implements BucketPickup { @@ -346,7 +346,7 @@ index 648262547aadff8e0615a93a9834ca654e581b3a..022daf760a649720c46e6e31591f2c1a } // CraftBukkit end diff --git a/net/minecraft/world/level/block/TurtleEggBlock.java b/net/minecraft/world/level/block/TurtleEggBlock.java -index 9293faf988be7013dbeddc9f98beb69a2dac9928..4f1e08c0e3f8ea89a55e02e8f0197fe4336ae0e2 100644 +index 789d977862da31a39dff96bcfd5e0c3c32c5770c..ed57b65f0c94d56477863dfb4435d8674d3d6ce2 100644 --- a/net/minecraft/world/level/block/TurtleEggBlock.java +++ b/net/minecraft/world/level/block/TurtleEggBlock.java @@ -221,7 +221,7 @@ public class TurtleEggBlock extends Block { diff --git a/purpur-server/minecraft-patches/unapplied-features/0016-Toggle-for-water-sensitive-mob-damage.patch b/purpur-server/minecraft-patches/features/0016-Toggle-for-water-sensitive-mob-damage.patch similarity index 83% rename from purpur-server/minecraft-patches/unapplied-features/0016-Toggle-for-water-sensitive-mob-damage.patch rename to purpur-server/minecraft-patches/features/0016-Toggle-for-water-sensitive-mob-damage.patch index 8a0150d68..ff5c3c4ce 100644 --- a/purpur-server/minecraft-patches/unapplied-features/0016-Toggle-for-water-sensitive-mob-damage.patch +++ b/purpur-server/minecraft-patches/features/0016-Toggle-for-water-sensitive-mob-damage.patch @@ -23,10 +23,10 @@ index cb242c69be97e0927dd62714f1a9b112c0dec84b..626463a20f49c807eae86b30fe38c514 public boolean isFlapping() { return !this.isResting() && this.tickCount % 10.0F == 0.0F; diff --git a/net/minecraft/world/entity/animal/axolotl/Axolotl.java b/net/minecraft/world/entity/animal/axolotl/Axolotl.java -index 3f1c56981c5da00bf7d07c9faf80d3386442723c..72583935d49eb513e1e3211863865f154e742aeb 100644 +index 11b3d0706a89b21251b5a045fbb34b1c3e3d77b8..523358fb9bfb393dde41fb90fed40ab8a54ba107 100644 --- a/net/minecraft/world/entity/animal/axolotl/Axolotl.java +++ b/net/minecraft/world/entity/animal/axolotl/Axolotl.java -@@ -149,6 +149,13 @@ public class Axolotl extends Animal implements Bucketable { +@@ -154,6 +154,13 @@ public class Axolotl extends Animal implements Bucketable { } // Purpur end - Make entity breeding times configurable @@ -41,19 +41,19 @@ index 3f1c56981c5da00bf7d07c9faf80d3386442723c..72583935d49eb513e1e3211863865f15 public float getWalkTargetValue(final BlockPos pos, final LevelReader level) { return 0.0F; diff --git a/net/minecraft/world/entity/animal/bee/Bee.java b/net/minecraft/world/entity/animal/bee/Bee.java -index 0a06e8df6e111ba65269365f3d021b57d7f87e60..df53953b532ebb4cdc78ea1e1cab0b0ed48ce960 100644 +index c871d6e0140fae4e15bf07ba86ed7c67615e9ce6..f4e063e0fe64e26f926523765eba83a8a61d6404 100644 --- a/net/minecraft/world/entity/animal/bee/Bee.java +++ b/net/minecraft/world/entity/animal/bee/Bee.java -@@ -185,7 +185,7 @@ public class Bee extends Animal implements FlyingAnimal, NeutralMob { +@@ -183,7 +183,7 @@ public class Bee extends Animal implements NeutralMob { // Paper end - Fix MC-167279 this.lookControl = new Bee.BeeLookControl(this); - this.setPathfindingMalus(PathType.FIRE_IN_NEIGHBOR, -1.0F); + this.setPathfindingMalus(PathType.FIRE, -1.0F); - if (this.level().purpurConfig.beeCanInstantlyStartDrowning) this.setPathfindingMalus(PathType.WATER, -1.0F); // Purpur - bee can instantly start drowning in water option + if (this.level().purpurConfig.beeCanInstantlyStartDrowning || isSensitiveToWater()) this.setPathfindingMalus(PathType.WATER, -1.0F); // Purpur - bee can instantly start drowning in water option // Purpur - Toggle for water sensitive mob damage this.setPathfindingMalus(PathType.WATER_BORDER, 16.0F); this.setPathfindingMalus(PathType.COCOA, -1.0F); this.setPathfindingMalus(PathType.FENCE, -1.0F); -@@ -494,6 +494,13 @@ public class Bee extends Animal implements FlyingAnimal, NeutralMob { +@@ -492,6 +492,13 @@ public class Bee extends Animal implements NeutralMob { } // Purpur end - Make entity breeding times configurable @@ -68,10 +68,10 @@ index 0a06e8df6e111ba65269365f3d021b57d7f87e60..df53953b532ebb4cdc78ea1e1cab0b0e public long getPersistentAngerEndTime() { return this.entityData.get(DATA_ANGER_END_TIME); diff --git a/net/minecraft/world/entity/animal/chicken/Chicken.java b/net/minecraft/world/entity/animal/chicken/Chicken.java -index ccf7c4630e08d9be54a4634c642a4cd1cd542a82..4a59e133fc6c68f3b3d495c62bb965718643f6b8 100644 +index b27e52819fa244d93f70177b19898ab6399e2d3f..fed0cce13f0b75395ba4398e2cc79b142c289e68 100644 --- a/net/minecraft/world/entity/animal/chicken/Chicken.java +++ b/net/minecraft/world/entity/animal/chicken/Chicken.java -@@ -113,6 +113,13 @@ public class Chicken extends Animal { +@@ -118,6 +118,13 @@ public class Chicken extends Animal { } // Purpur end - Make entity breeding times configurable @@ -86,10 +86,10 @@ index ccf7c4630e08d9be54a4634c642a4cd1cd542a82..4a59e133fc6c68f3b3d495c62bb96571 protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/animal/cow/Cow.java b/net/minecraft/world/entity/animal/cow/Cow.java -index 7981f60f10c44ab2459933cb15ee961103922364..7d3853d693a87e5225a16285631e0e2057685c1b 100644 +index da88b2b3ed1c27100bff546cb80837da6e30e20b..103b4cd879e059fc34f8e42a5d25fc6cbb146837 100644 --- a/net/minecraft/world/entity/animal/cow/Cow.java +++ b/net/minecraft/world/entity/animal/cow/Cow.java -@@ -66,6 +66,13 @@ public class Cow extends AbstractCow { +@@ -74,6 +74,13 @@ public class Cow extends AbstractCow { } // Purpur end - Make entity breeding times configurable @@ -104,10 +104,10 @@ index 7981f60f10c44ab2459933cb15ee961103922364..7d3853d693a87e5225a16285631e0e20 protected void defineSynchedData(final SynchedEntityData.Builder entityData) { super.defineSynchedData(entityData); diff --git a/net/minecraft/world/entity/animal/cow/MushroomCow.java b/net/minecraft/world/entity/animal/cow/MushroomCow.java -index 88ac1974f09b9213f124550b1873d28d8c926083..9bdc0bb89e554957c70d97e6ca60f1c4aa1ef91b 100644 +index ab57ef2e091d95adc8d13d1b33033b190b7f68d6..fdc5cc7fe6c3955ae04b184d189f1156b6f2af9a 100644 --- a/net/minecraft/world/entity/animal/cow/MushroomCow.java +++ b/net/minecraft/world/entity/animal/cow/MushroomCow.java -@@ -92,6 +92,13 @@ public class MushroomCow extends AbstractCow implements Shearable { +@@ -100,6 +100,13 @@ public class MushroomCow extends AbstractCow implements Shearable { } // Purpur end - Make entity breeding times configurable @@ -122,10 +122,10 @@ index 88ac1974f09b9213f124550b1873d28d8c926083..9bdc0bb89e554957c70d97e6ca60f1c4 public float getWalkTargetValue(final BlockPos pos, final LevelReader level) { return level.getBlockState(pos.below()).is(Blocks.MYCELIUM) ? 10.0F : level.getPathfindingCostFromLightLevels(pos); diff --git a/net/minecraft/world/entity/animal/dolphin/Dolphin.java b/net/minecraft/world/entity/animal/dolphin/Dolphin.java -index f8e155393b0c2a69018da88556116b4eeb416d83..58ce1ab82ab9883853eeffd103a1b72053c59798 100644 +index b6d698fbdf1fe5b6b1ffe8d622c83004f1fa693a..68c59f9b7048c9e523c3d33d0ab444d430e491ef 100644 --- a/net/minecraft/world/entity/animal/dolphin/Dolphin.java +++ b/net/minecraft/world/entity/animal/dolphin/Dolphin.java -@@ -162,6 +162,13 @@ public class Dolphin extends AgeableWaterCreature { +@@ -169,6 +169,13 @@ public class Dolphin extends AgeableWaterCreature { } // Purpur end - Configurable entity base attributes @@ -140,10 +140,10 @@ index f8e155393b0c2a69018da88556116b4eeb416d83..58ce1ab82ab9883853eeffd103a1b720 public @Nullable SpawnGroupData finalizeSpawn( final ServerLevelAccessor level, final DifficultyInstance difficulty, final EntitySpawnReason spawnReason, final @Nullable SpawnGroupData groupData diff --git a/net/minecraft/world/entity/animal/equine/Donkey.java b/net/minecraft/world/entity/animal/equine/Donkey.java -index 8c3d3f0f24e6f5a9b8aa9bf58f3c8b679896017d..5e0846fcaccfab5edbeb90bc61c2360cecf7a0c4 100644 +index ee024d5f00b5a2845eeb296172c593b1040be1a8..a74124c9910c121c834eb7510f3e6a54557c8c07 100644 --- a/net/minecraft/world/entity/animal/equine/Donkey.java +++ b/net/minecraft/world/entity/animal/equine/Donkey.java -@@ -47,6 +47,13 @@ public class Donkey extends AbstractChestedHorse { +@@ -48,6 +48,13 @@ public class Donkey extends AbstractChestedHorse { } // Purpur end - Make entity breeding times configurable @@ -158,10 +158,10 @@ index 8c3d3f0f24e6f5a9b8aa9bf58f3c8b679896017d..5e0846fcaccfab5edbeb90bc61c2360c public SoundEvent getAmbientSound() { return SoundEvents.DONKEY_AMBIENT; diff --git a/net/minecraft/world/entity/animal/equine/Horse.java b/net/minecraft/world/entity/animal/equine/Horse.java -index dbb586058f38b6c4f81e2f6567b7ae8ebbaff5a2..64603ad973bdb697ca75642e8e42e7052efd4191 100644 +index e69ae448ed73949a11ee3284f93a535a9f0b3d1c..187f72ab0fa2fa623e4b7ea825a640f1b1d42d72 100644 --- a/net/minecraft/world/entity/animal/equine/Horse.java +++ b/net/minecraft/world/entity/animal/equine/Horse.java -@@ -79,6 +79,13 @@ public class Horse extends AbstractHorse { +@@ -80,6 +80,13 @@ public class Horse extends AbstractHorse { } // Purpur end - Make entity breeding times configurable @@ -176,10 +176,10 @@ index dbb586058f38b6c4f81e2f6567b7ae8ebbaff5a2..64603ad973bdb697ca75642e8e42e705 protected void randomizeAttributes(final RandomSource random) { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(generateMaxHealth(random::nextInt)); diff --git a/net/minecraft/world/entity/animal/equine/Llama.java b/net/minecraft/world/entity/animal/equine/Llama.java -index 08dcee8ef18818ad6963762198b9e60e9c7d4d04..4b7a9c76df89cb0494db9375940bc219093f04c1 100644 +index 0678e622e90fc13f758c582286f872b358f46243..75eb96b3a62fcb07b93edbf629965fe75d385c38 100644 --- a/net/minecraft/world/entity/animal/equine/Llama.java +++ b/net/minecraft/world/entity/animal/equine/Llama.java -@@ -158,6 +158,13 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob { +@@ -159,6 +159,13 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob { } // Purpur end - Make entity breeding times configurable @@ -194,10 +194,10 @@ index 08dcee8ef18818ad6963762198b9e60e9c7d4d04..4b7a9c76df89cb0494db9375940bc219 return false; } diff --git a/net/minecraft/world/entity/animal/equine/Mule.java b/net/minecraft/world/entity/animal/equine/Mule.java -index cf0f3c9d5f8ff348e6fb76db823da4cadce4fc5b..291176b409097d15c2afff7fe8deb17ba07dbc12 100644 +index 24daee9922a270c9cdfb26899c9eda74370a5dea..c54a7033d40e973b7c93de5276d20451306b48bc 100644 --- a/net/minecraft/world/entity/animal/equine/Mule.java +++ b/net/minecraft/world/entity/animal/equine/Mule.java -@@ -46,6 +46,13 @@ public class Mule extends AbstractChestedHorse { +@@ -47,6 +47,13 @@ public class Mule extends AbstractChestedHorse { } // Purpur end - Make entity breeding times configurable @@ -212,10 +212,10 @@ index cf0f3c9d5f8ff348e6fb76db823da4cadce4fc5b..291176b409097d15c2afff7fe8deb17b public SoundEvent getAmbientSound() { return SoundEvents.MULE_AMBIENT; diff --git a/net/minecraft/world/entity/animal/equine/SkeletonHorse.java b/net/minecraft/world/entity/animal/equine/SkeletonHorse.java -index cfce6db53e670b39a0db7f6a17857dda0ad160f6..02aa9a838e0cbd62bc0a2e0f30e0cfc9a3995a41 100644 +index f1657977511160e4f35172bff89f503887b13e25..a5a2923dbc0b4a090c29de16bd564bfd78ca8f9c 100644 --- a/net/minecraft/world/entity/animal/equine/SkeletonHorse.java +++ b/net/minecraft/world/entity/animal/equine/SkeletonHorse.java -@@ -74,6 +74,13 @@ public class SkeletonHorse extends AbstractHorse { +@@ -75,6 +75,13 @@ public class SkeletonHorse extends AbstractHorse { } // Purpur end - Make entity breeding times configurable @@ -230,10 +230,10 @@ index cfce6db53e670b39a0db7f6a17857dda0ad160f6..02aa9a838e0cbd62bc0a2e0f30e0cfc9 return createBaseHorseAttributes().add(Attributes.MAX_HEALTH, 15.0).add(Attributes.MOVEMENT_SPEED, 0.2F); } diff --git a/net/minecraft/world/entity/animal/equine/TraderLlama.java b/net/minecraft/world/entity/animal/equine/TraderLlama.java -index 7c41aecd2699725211babbac0350cb241f31ca41..a9fcf7827e6a6b061c2a861d1e59bca80117699b 100644 +index 544777353802146de13f3365935bd1f7dda41af3..e9bd6334f0713d8fab91d1cfddfb8d4580faaa5b 100644 --- a/net/minecraft/world/entity/animal/equine/TraderLlama.java +++ b/net/minecraft/world/entity/animal/equine/TraderLlama.java -@@ -77,6 +77,13 @@ public class TraderLlama extends Llama { +@@ -78,6 +78,13 @@ public class TraderLlama extends Llama { } // Purpur end - Make entity breeding times configurable @@ -248,10 +248,10 @@ index 7c41aecd2699725211babbac0350cb241f31ca41..a9fcf7827e6a6b061c2a861d1e59bca8 public boolean isTraderLlama() { return true; diff --git a/net/minecraft/world/entity/animal/equine/ZombieHorse.java b/net/minecraft/world/entity/animal/equine/ZombieHorse.java -index 4be11663154a870a21832ddba05764a897ce90bd..586151b916a5e21c36578aa04cab9d71994dcf43 100644 +index aca379a8af847b5551d950cf2880a242d9ec1768..9deb8e249830aea4bbc230f26eb192479eec0c4e 100644 --- a/net/minecraft/world/entity/animal/equine/ZombieHorse.java +++ b/net/minecraft/world/entity/animal/equine/ZombieHorse.java -@@ -85,6 +85,13 @@ public class ZombieHorse extends AbstractHorse { +@@ -86,6 +86,13 @@ public class ZombieHorse extends AbstractHorse { } // Purpur end - Make entity breeding times configurable @@ -266,10 +266,10 @@ index 4be11663154a870a21832ddba05764a897ce90bd..586151b916a5e21c36578aa04cab9d71 return createBaseHorseAttributes().add(Attributes.MAX_HEALTH, 25.0); } diff --git a/net/minecraft/world/entity/animal/feline/Cat.java b/net/minecraft/world/entity/animal/feline/Cat.java -index 51a587af3507415dad42f764d8fe72c5856cb6a7..609cf964f5020728321da2e08ccd94dc925cc4c7 100644 +index bcc7eeaaba22fbc5ec21028d1b6b400ea6fcbec1..3e8ba2867b37b9171375c81ece0d534692c9ac68 100644 --- a/net/minecraft/world/entity/animal/feline/Cat.java +++ b/net/minecraft/world/entity/animal/feline/Cat.java -@@ -135,6 +135,13 @@ public class Cat extends TamableAnimal { +@@ -142,6 +142,13 @@ public class Cat extends TamableAnimal { } // Purpur end - Make entity breeding times configurable @@ -284,10 +284,10 @@ index 51a587af3507415dad42f764d8fe72c5856cb6a7..609cf964f5020728321da2e08ccd94dc protected void registerGoals() { this.temptGoal = new Cat.CatTemptGoal(this, 0.6, i -> i.is(ItemTags.CAT_FOOD), true); diff --git a/net/minecraft/world/entity/animal/feline/Ocelot.java b/net/minecraft/world/entity/animal/feline/Ocelot.java -index 2accf49e8dd907c8a482e5317d07b28fc5492a1e..9a582b789d3b3037c510c063a07f99f92ac58a1c 100644 +index b04d9caff464a5e690bafcdce4b1b46b9571d238..528341355817ae603eed895beb67814ef4fc12f2 100644 --- a/net/minecraft/world/entity/animal/feline/Ocelot.java +++ b/net/minecraft/world/entity/animal/feline/Ocelot.java -@@ -98,6 +98,13 @@ public class Ocelot extends Animal { +@@ -105,6 +105,13 @@ public class Ocelot extends Animal { } // Purpur end - Make entity breeding times configurable @@ -320,7 +320,7 @@ index 948d6a8e3465fd5985e91ca7eaa5f02258ad9625..f44214eaa47c2021f7ca9c84a7b89be1 public ItemStack getBucketItemStack() { return new ItemStack(Items.COD_BUCKET); diff --git a/net/minecraft/world/entity/animal/fish/Pufferfish.java b/net/minecraft/world/entity/animal/fish/Pufferfish.java -index 26acbeff80d3a4216b69b9842381f3fa48c9862b..a0f1ea76011dc3aa6e8a702528062f5fafe07e01 100644 +index 3d68c742dfa6b805f22c647af8b2c4f5ccc5cccf..60f2b9411bf7acf02a66e91377b6042b421b56ab 100644 --- a/net/minecraft/world/entity/animal/fish/Pufferfish.java +++ b/net/minecraft/world/entity/animal/fish/Pufferfish.java @@ -66,6 +66,13 @@ public class Pufferfish extends AbstractFish { @@ -338,7 +338,7 @@ index 26acbeff80d3a4216b69b9842381f3fa48c9862b..a0f1ea76011dc3aa6e8a702528062f5f protected void defineSynchedData(final SynchedEntityData.Builder entityData) { super.defineSynchedData(entityData); diff --git a/net/minecraft/world/entity/animal/fish/Salmon.java b/net/minecraft/world/entity/animal/fish/Salmon.java -index 9bce191fbc3b68a051f50e85674b8cfd42832a85..ddf23647e17bdb04babae1832486efb52ab9f81a 100644 +index ecc4e79d43f2fce16c4ee78ea8fb8efba4d0c9e6..53f24f3f22c41d4a3a401c3da92867d5ac96febd 100644 --- a/net/minecraft/world/entity/animal/fish/Salmon.java +++ b/net/minecraft/world/entity/animal/fish/Salmon.java @@ -60,6 +60,13 @@ public class Salmon extends AbstractSchoolingFish { @@ -374,10 +374,10 @@ index e9692aacca5f32c4280b16b4eabecf87c2ed5aeb..dc2800dd2f4c9f71c79d9f012be17398 return "entity.minecraft.tropical_fish.predefined." + index; } diff --git a/net/minecraft/world/entity/animal/fox/Fox.java b/net/minecraft/world/entity/animal/fox/Fox.java -index ed481b0d7c7787ef01797ef553b85b1bac6027c9..e74adaebbf28247e8bc85671ca294c9d9843ca08 100644 +index bf9ff90916733110a249912d7aeabc2e45f63b01..4553c0d7528f3aea8434e353e4daf78b53ac831d 100644 --- a/net/minecraft/world/entity/animal/fox/Fox.java +++ b/net/minecraft/world/entity/animal/fox/Fox.java -@@ -207,6 +207,13 @@ public class Fox extends Animal { +@@ -214,6 +214,13 @@ public class Fox extends Animal { } // Purpur end - Make entity breeding times configurable @@ -392,10 +392,10 @@ index ed481b0d7c7787ef01797ef553b85b1bac6027c9..e74adaebbf28247e8bc85671ca294c9d protected void defineSynchedData(final SynchedEntityData.Builder entityData) { super.defineSynchedData(entityData); diff --git a/net/minecraft/world/entity/animal/goat/Goat.java b/net/minecraft/world/entity/animal/goat/Goat.java -index 8651caf56331d78f80982b9be1fa24cb963a78a4..ea0aace589356cb2719925d5287bc5672eb45993 100644 +index 49cfa8f360aac209106052e15ae0a6d88b3cc3ff..9744d757ae7dcc31291db469539ebd58db7b08a2 100644 --- a/net/minecraft/world/entity/animal/goat/Goat.java +++ b/net/minecraft/world/entity/animal/goat/Goat.java -@@ -124,6 +124,13 @@ public class Goat extends Animal { +@@ -130,6 +130,13 @@ public class Goat extends Animal { } // Purpur end - Make entity breeding times configurable @@ -410,7 +410,7 @@ index 8651caf56331d78f80982b9be1fa24cb963a78a4..ea0aace589356cb2719925d5287bc567 protected Brain makeBrain(final Brain.Packed packedBrain) { return BRAIN_PROVIDER.makeBrain(this, packedBrain); diff --git a/net/minecraft/world/entity/animal/golem/CopperGolem.java b/net/minecraft/world/entity/animal/golem/CopperGolem.java -index 00877102ad4261ecd7191e402cf4e381dd6e40b3..ac416c47f86b2ec4c8c58a24491b81504e3a8212 100644 +index 5337c65d317299df2ac0dfd9b7ea12fc7debcdb6..53e17b3ebb5f66f00870c45fb0389ace08a2c144 100644 --- a/net/minecraft/world/entity/animal/golem/CopperGolem.java +++ b/net/minecraft/world/entity/animal/golem/CopperGolem.java @@ -144,6 +144,13 @@ public class CopperGolem extends AbstractGolem implements ContainerUser, Shearab @@ -428,10 +428,10 @@ index 00877102ad4261ecd7191e402cf4e381dd6e40b3..ac416c47f86b2ec4c8c58a24491b8150 return Mob.createMobAttributes().add(Attributes.MOVEMENT_SPEED, 0.2F).add(Attributes.STEP_HEIGHT, 1.0).add(Attributes.MAX_HEALTH, 12.0); } diff --git a/net/minecraft/world/entity/animal/golem/IronGolem.java b/net/minecraft/world/entity/animal/golem/IronGolem.java -index cd68a06abb509dbdbcf909d3f3e142c7a1f896cf..305b6b9b5575c9351990d36f3bd2e9721a00dc2b 100644 +index 9fd7366157c7e6d3d75469c33599560c5045abf7..0d47b1d7ffb09a883edde3c5c0a8e6eadec08642 100644 --- a/net/minecraft/world/entity/animal/golem/IronGolem.java +++ b/net/minecraft/world/entity/animal/golem/IronGolem.java -@@ -99,6 +99,13 @@ public class IronGolem extends AbstractGolem implements NeutralMob { +@@ -100,6 +100,13 @@ public class IronGolem extends AbstractGolem implements NeutralMob { } // Purpur end - Configurable entity base attributes @@ -446,7 +446,7 @@ index cd68a06abb509dbdbcf909d3f3e142c7a1f896cf..305b6b9b5575c9351990d36f3bd2e972 protected void registerGoals() { if (this.level().purpurConfig.ironGolemPoppyCalm) this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.ReceiveFlower(this)); // Purpur - Iron golem calm anger options diff --git a/net/minecraft/world/entity/animal/golem/SnowGolem.java b/net/minecraft/world/entity/animal/golem/SnowGolem.java -index 7091f5bc2ecb9d4b86162fe364447df65d8e9348..2d3127f6846ff9eda1a0b89764dc837da6e7e0c7 100644 +index ad300631146959f158cbabddac12fda4deb33360..efd9770fb2401650e4459fab8066cb0da9870e58 100644 --- a/net/minecraft/world/entity/animal/golem/SnowGolem.java +++ b/net/minecraft/world/entity/animal/golem/SnowGolem.java @@ -124,7 +124,7 @@ public class SnowGolem extends AbstractGolem implements RangedAttackMob, Shearab @@ -459,10 +459,10 @@ index 7091f5bc2ecb9d4b86162fe364447df65d8e9348..2d3127f6846ff9eda1a0b89764dc837d @Override diff --git a/net/minecraft/world/entity/animal/happyghast/HappyGhast.java b/net/minecraft/world/entity/animal/happyghast/HappyGhast.java -index cc3ecc13bfcd367f8c6aeb55380bf509e525d85b..2ab9e28e84193ea76e09008a230fbdeb5acbf4c1 100644 +index a70806026e1c664bd45f9992a2c28dc7bbfb01eb..f37773ac8ec943744a8989b443e913710e13230b 100644 --- a/net/minecraft/world/entity/animal/happyghast/HappyGhast.java +++ b/net/minecraft/world/entity/animal/happyghast/HappyGhast.java -@@ -160,6 +160,13 @@ public class HappyGhast extends Animal { +@@ -164,6 +164,13 @@ public class HappyGhast extends Animal { } // Purpur end - Make entity breeding times configurable @@ -477,10 +477,10 @@ index cc3ecc13bfcd367f8c6aeb55380bf509e525d85b..2ab9e28e84193ea76e09008a230fbdeb protected void ageBoundaryReached() { if (this.isBaby()) { diff --git a/net/minecraft/world/entity/animal/panda/Panda.java b/net/minecraft/world/entity/animal/panda/Panda.java -index 25232dc02916a0d7189d925c858d88ab71ea5677..4249aff88a1768f2f2184a09efe730752545b164 100644 +index 9328cb71c88efc13afc203da1c0bff7cd305fb3c..af66c192d57d4f5b49b7a0e4c00cfbce6616eb9b 100644 --- a/net/minecraft/world/entity/animal/panda/Panda.java +++ b/net/minecraft/world/entity/animal/panda/Panda.java -@@ -152,6 +152,13 @@ public class Panda extends Animal { +@@ -154,6 +154,13 @@ public class Panda extends Animal { } // Purpur end - Make entity breeding times configurable @@ -495,10 +495,10 @@ index 25232dc02916a0d7189d925c858d88ab71ea5677..4249aff88a1768f2f2184a09efe73075 protected boolean canDispenserEquipIntoSlot(final EquipmentSlot slot) { return slot == EquipmentSlot.MAINHAND && this.canPickUpLoot(); diff --git a/net/minecraft/world/entity/animal/parrot/Parrot.java b/net/minecraft/world/entity/animal/parrot/Parrot.java -index 346cc1fa117229b95eef86b1bf2e9fe3a84970cf..0f5da739a7bed82a1ccef173d379a78981f37939 100644 +index 22962f57daf5c274fa0ec46170f36dcaa1c8bed3..e43fe2c45e79526ba954dba2260c49075ae1c556 100644 --- a/net/minecraft/world/entity/animal/parrot/Parrot.java +++ b/net/minecraft/world/entity/animal/parrot/Parrot.java -@@ -214,6 +214,13 @@ public class Parrot extends ShoulderRidingEntity implements FlyingAnimal { +@@ -214,6 +214,13 @@ public class Parrot extends ShoulderRidingEntity { } // Purpur end - Make entity breeding times configurable @@ -513,10 +513,10 @@ index 346cc1fa117229b95eef86b1bf2e9fe3a84970cf..0f5da739a7bed82a1ccef173d379a789 public @Nullable SpawnGroupData finalizeSpawn( final ServerLevelAccessor level, final DifficultyInstance difficulty, final EntitySpawnReason spawnReason, @Nullable SpawnGroupData groupData diff --git a/net/minecraft/world/entity/animal/pig/Pig.java b/net/minecraft/world/entity/animal/pig/Pig.java -index 14696e16da919a78d0098ad07a911b82ed6b60da..5413851446237e7984c8da4172c31b0dd9affc60 100644 +index 0deeb7ed21c3b6d4a29951ac84771a6439728698..9463a70aec69af7d680caf35cbab7ee4b975b6ea 100644 --- a/net/minecraft/world/entity/animal/pig/Pig.java +++ b/net/minecraft/world/entity/animal/pig/Pig.java -@@ -100,6 +100,13 @@ public class Pig extends Animal implements ItemSteerable { +@@ -108,6 +108,13 @@ public class Pig extends Animal implements ItemSteerable { } // Purpur end - Make entity breeding times configurable @@ -531,10 +531,10 @@ index 14696e16da919a78d0098ad07a911b82ed6b60da..5413851446237e7984c8da4172c31b0d protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/animal/polarbear/PolarBear.java b/net/minecraft/world/entity/animal/polarbear/PolarBear.java -index 38d4e31ddd9bd169dd30b6dee456f0d3f10f106d..a9e64a4053755050099cdcaef870a0099a867575 100644 +index 8041beeb5bb039f0aec0b59ba45806cf6eb57582..c47640ebcf2db48bb27b671c907f3270eac3c126 100644 --- a/net/minecraft/world/entity/animal/polarbear/PolarBear.java +++ b/net/minecraft/world/entity/animal/polarbear/PolarBear.java -@@ -133,6 +133,13 @@ public class PolarBear extends Animal implements NeutralMob { +@@ -139,6 +139,13 @@ public class PolarBear extends Animal implements NeutralMob { } // Purpur end - Make entity breeding times configurable @@ -547,12 +547,12 @@ index 38d4e31ddd9bd169dd30b6dee456f0d3f10f106d..a9e64a4053755050099cdcaef870a009 + @Override public @Nullable AgeableMob getBreedOffspring(final ServerLevel level, final AgeableMob partner) { - return EntityType.POLAR_BEAR.create(level, EntitySpawnReason.BREEDING); + return EntityTypes.POLAR_BEAR.create(level, EntitySpawnReason.BREEDING); diff --git a/net/minecraft/world/entity/animal/rabbit/Rabbit.java b/net/minecraft/world/entity/animal/rabbit/Rabbit.java -index 07db369d748df1e870339eb06032146d6fba8d35..9116e659fff5daf09257739f6c04e32d1dfc70ca 100644 +index 80a65dba81ab82cdb9bd43d1878e74550e61d634..d7b287459fb0633470efffd70dda67ad8177615a 100644 --- a/net/minecraft/world/entity/animal/rabbit/Rabbit.java +++ b/net/minecraft/world/entity/animal/rabbit/Rabbit.java -@@ -177,6 +177,13 @@ public class Rabbit extends Animal { +@@ -178,6 +178,13 @@ public class Rabbit extends Animal { } // Purpur end - Make entity breeding times configurable @@ -567,10 +567,10 @@ index 07db369d748df1e870339eb06032146d6fba8d35..9116e659fff5daf09257739f6c04e32d public void registerGoals() { this.goalSelector.addGoal(1, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/animal/sheep/Sheep.java b/net/minecraft/world/entity/animal/sheep/Sheep.java -index e83fe71b4f63f8f7fa1976f7d2165c36bbb184bf..49389028a34971bbd1c480ba91e2b53d3c26513c 100644 +index cd53e9540856c53b9aae961ee0303b592a513684..0116de3318e769076481d3e5d479a810e235f0c0 100644 --- a/net/minecraft/world/entity/animal/sheep/Sheep.java +++ b/net/minecraft/world/entity/animal/sheep/Sheep.java -@@ -95,6 +95,13 @@ public class Sheep extends Animal implements Shearable { +@@ -103,6 +103,13 @@ public class Sheep extends Animal implements Shearable { } // Purpur end - Make entity breeding times configurable @@ -585,10 +585,10 @@ index e83fe71b4f63f8f7fa1976f7d2165c36bbb184bf..49389028a34971bbd1c480ba91e2b53d protected void registerGoals() { this.eatBlockGoal = new EatBlockGoal(this); diff --git a/net/minecraft/world/entity/animal/squid/GlowSquid.java b/net/minecraft/world/entity/animal/squid/GlowSquid.java -index cb3d0bd838473af87af74c7d1bab38593a6c8f6d..1fa3d614dd1c45ec42caffbe92e3f8db02b399b1 100644 +index 86b8f30bc9c98423e2e5bbb2a7548ea36c0854b6..e11e4e9134db7e59bd7f3112605206ad1f36cab6 100644 --- a/net/minecraft/world/entity/animal/squid/GlowSquid.java +++ b/net/minecraft/world/entity/animal/squid/GlowSquid.java -@@ -57,6 +57,13 @@ public class GlowSquid extends Squid { +@@ -58,6 +58,13 @@ public class GlowSquid extends Squid { } // Purpur end - Configurable entity base attributes @@ -603,7 +603,7 @@ index cb3d0bd838473af87af74c7d1bab38593a6c8f6d..1fa3d614dd1c45ec42caffbe92e3f8db protected ParticleOptions getInkParticle() { return ParticleTypes.GLOW_SQUID_INK; diff --git a/net/minecraft/world/entity/animal/squid/Squid.java b/net/minecraft/world/entity/animal/squid/Squid.java -index da8e8d817f959ffcbc0a84a40af854ecfc939ef2..2b2272122a7ebaed6a995d09dab7a3db3ee0c594 100644 +index 66477755d3ee8293a8bd79baa01214954b792898..6d6981635b4029a09ccc6115f0d17451089e09d4 100644 --- a/net/minecraft/world/entity/animal/squid/Squid.java +++ b/net/minecraft/world/entity/animal/squid/Squid.java @@ -104,6 +104,13 @@ public class Squid extends AgeableWaterCreature { @@ -621,10 +621,10 @@ index da8e8d817f959ffcbc0a84a40af854ecfc939ef2..2b2272122a7ebaed6a995d09dab7a3db protected void registerGoals() { this.goalSelector.addGoal(0, new Squid.SquidRandomMovementGoal(this)); diff --git a/net/minecraft/world/entity/animal/turtle/Turtle.java b/net/minecraft/world/entity/animal/turtle/Turtle.java -index 62d9fce83cc44165c5356049a12bf6081c925857..6d09c0de38f2c91d2a0ab6dd0b694ab42b48a981 100644 +index bbee5d60204cf7c6e77cf337044e608d79d8462e..1080f96351535e4caa29120c65727280e361a042 100644 --- a/net/minecraft/world/entity/animal/turtle/Turtle.java +++ b/net/minecraft/world/entity/animal/turtle/Turtle.java -@@ -119,6 +119,13 @@ public class Turtle extends Animal { +@@ -120,6 +120,13 @@ public class Turtle extends Animal { } // Purpur end - Make entity breeding times configurable @@ -639,10 +639,10 @@ index 62d9fce83cc44165c5356049a12bf6081c925857..6d09c0de38f2c91d2a0ab6dd0b694ab4 this.homePos = pos; } diff --git a/net/minecraft/world/entity/animal/wolf/Wolf.java b/net/minecraft/world/entity/animal/wolf/Wolf.java -index f84b35919e49c1a86cbc4bdec1f9f81f2dac633d..1587bcafa4b338a98e60743faab0b2ce9b923444 100644 +index 66e58482f8422e5478b29f82271489d0449ceddb..cdc12cabee85c7090ff317068a98b0acc973fdbe 100644 --- a/net/minecraft/world/entity/animal/wolf/Wolf.java +++ b/net/minecraft/world/entity/animal/wolf/Wolf.java -@@ -219,6 +219,13 @@ public class Wolf extends TamableAnimal implements NeutralMob { +@@ -227,6 +227,13 @@ public class Wolf extends TamableAnimal implements NeutralMob { } // Purpur end - Make entity breeding times configurable @@ -657,10 +657,10 @@ index f84b35919e49c1a86cbc4bdec1f9f81f2dac633d..1587bcafa4b338a98e60743faab0b2ce protected void registerGoals() { this.goalSelector.addGoal(1, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -index 9cdbb284c190f2130824c881000880958994013f..994939ffe86f9986b6879c5cf9f982f8e9535e37 100644 +index 1294dc666be270b4c7b335b7f2786b9b68bededc..5ad833b7673e73a1a5120b335f8980f639a9b2eb 100644 --- a/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java +++ b/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -@@ -170,6 +170,13 @@ public class EnderDragon extends Mob implements Enemy { +@@ -171,6 +171,13 @@ public class EnderDragon extends Mob implements Enemy { } // Purpur end - Configurable entity base attributes @@ -675,7 +675,7 @@ index 9cdbb284c190f2130824c881000880958994013f..994939ffe86f9986b6879c5cf9f982f8 return Mob.createMobAttributes().add(Attributes.MAX_HEALTH, 200.0).add(Attributes.CAMERA_DISTANCE, 16.0); } diff --git a/net/minecraft/world/entity/boss/wither/WitherBoss.java b/net/minecraft/world/entity/boss/wither/WitherBoss.java -index 06f09cf81d1ad42beda79dbd5087c2d7264a9612..2a88f051740bba72bb48e7f23cbd12d216a2eb86 100644 +index 543ea15e63316564aa6c699863d952570d7e0df7..7032f6b01ee36422952ce564a388c4e1ffeb05c5 100644 --- a/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/net/minecraft/world/entity/boss/wither/WitherBoss.java @@ -221,6 +221,13 @@ public class WitherBoss extends Monster implements RangedAttackMob { @@ -733,10 +733,10 @@ index 01c722932aaed2221badaa6231d8a20d005b087b..2d60c5e6426097302464e04bcfdd60ab public SoundEvent getHurtSound(final DamageSource source) { return SoundEvents.CREEPER_HURT; diff --git a/net/minecraft/world/entity/monster/ElderGuardian.java b/net/minecraft/world/entity/monster/ElderGuardian.java -index ffcfe02c51f6df1bd238c821a8d6535f4ccf019c..a98967c7a76d8e25da9e31eaa8f2ae0bf0704c9d 100644 +index a14807226ac6b6786cd1470130819d2d735db16b..68922bcf87052d7b13a78fd6f8daddcdec6b8614 100644 --- a/net/minecraft/world/entity/monster/ElderGuardian.java +++ b/net/minecraft/world/entity/monster/ElderGuardian.java -@@ -51,6 +51,13 @@ public class ElderGuardian extends Guardian { +@@ -52,6 +52,13 @@ public class ElderGuardian extends Guardian { } // Purpur end - Configurable entity base attributes @@ -791,7 +791,7 @@ index c10982945974171e478690d2db5080551cb29cdb..099476663f734f00b4979de7c2d0f13d protected void registerGoals() { this.goalSelector.addGoal(1, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/monster/Ghast.java b/net/minecraft/world/entity/monster/Ghast.java -index 5ebb6dc59ee8a845a983de207e763e1df103a4f7..14c5c70853bc8bef677c12f7e1884f472c293609 100644 +index f6cd12c6a36c95dcb338c5aec791707bb971d615..3b514d9102946166534e404181af287865655c32 100644 --- a/net/minecraft/world/entity/monster/Ghast.java +++ b/net/minecraft/world/entity/monster/Ghast.java @@ -83,6 +83,13 @@ public class Ghast extends Mob implements Enemy { @@ -827,7 +827,7 @@ index c39031e8fdfb0dff7867d9525dbddde110242647..43ebfe06ce2a8c15787d72a8ef54cd6c return Monster.createMonsterAttributes() .add(Attributes.MAX_HEALTH, 100.0) diff --git a/net/minecraft/world/entity/monster/Guardian.java b/net/minecraft/world/entity/monster/Guardian.java -index 2616aab01c6c43fcc259c42c9d5c43fc73794caf..3acf963c26ef5f269a95cdf8fe0da248adf22c83 100644 +index a803e9b43758b7bad9bb1f9b577a2c9c7bc040d2..04d092ad64f58b898f210266a2aba758ccc0577b 100644 --- a/net/minecraft/world/entity/monster/Guardian.java +++ b/net/minecraft/world/entity/monster/Guardian.java @@ -97,6 +97,13 @@ public class Guardian extends Monster { @@ -844,26 +844,8 @@ index 2616aab01c6c43fcc259c42c9d5c43fc73794caf..3acf963c26ef5f269a95cdf8fe0da248 @Override protected void registerGoals() { MoveTowardsRestrictionGoal goal = new MoveTowardsRestrictionGoal(this, 1.0); -diff --git a/net/minecraft/world/entity/monster/MagmaCube.java b/net/minecraft/world/entity/monster/MagmaCube.java -index d40a4daeec1500f2d9865022ee6e3c386ad7533e..fba41f261e57a050d4e24d2611cc27edcbb84ddf 100644 ---- a/net/minecraft/world/entity/monster/MagmaCube.java -+++ b/net/minecraft/world/entity/monster/MagmaCube.java -@@ -68,6 +68,13 @@ public class MagmaCube extends Slime { - } - // Purpur end - Configurable entity base attributes - -+ // Purpur start - Toggle for water sensitive mob damage -+ @Override -+ public boolean isSensitiveToWater() { -+ return this.level().purpurConfig.magmaCubeTakeDamageFromWater; -+ } -+ // Purpur end - Toggle for water sensitive mob damage -+ - public static AttributeSupplier.Builder createAttributes() { - return Monster.createMonsterAttributes().add(Attributes.MOVEMENT_SPEED, 0.2F); - } diff --git a/net/minecraft/world/entity/monster/Phantom.java b/net/minecraft/world/entity/monster/Phantom.java -index 03db90080675c879688c37e568dc25603b4972b1..b95449d4de57c42e604428e4f5a74fb1eb44746f 100644 +index f2665ff68020cddf921675f4eaa4c0e99c9d9563..7c1aad8b5f9625d757039cb636783cb760aa87e0 100644 --- a/net/minecraft/world/entity/monster/Phantom.java +++ b/net/minecraft/world/entity/monster/Phantom.java @@ -128,6 +128,13 @@ public class Phantom extends Mob implements Enemy { @@ -881,10 +863,10 @@ index 03db90080675c879688c37e568dc25603b4972b1..b95449d4de57c42e604428e4f5a74fb1 public boolean isFlapping() { return (this.getUniqueFlapTickOffset() + this.tickCount) % TICKS_PER_FLAP == 0; diff --git a/net/minecraft/world/entity/monster/Ravager.java b/net/minecraft/world/entity/monster/Ravager.java -index 01e09b39ac5385e7cbfa8a38df94884c17f8f8c0..3e0403635cb9ce3d0894705db6727d9a7cc4d628 100644 +index 22722b7cec888fa1c28fa17baeb37f38c55a72e4..9afb9be57a6223cc262a9357a42cd7d19953bef5 100644 --- a/net/minecraft/world/entity/monster/Ravager.java +++ b/net/minecraft/world/entity/monster/Ravager.java -@@ -101,6 +101,13 @@ public class Ravager extends Raider { +@@ -102,6 +102,13 @@ public class Ravager extends Raider { } // Purpur end - Configurable entity base attributes @@ -899,7 +881,7 @@ index 01e09b39ac5385e7cbfa8a38df94884c17f8f8c0..3e0403635cb9ce3d0894705db6727d9a protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/Shulker.java b/net/minecraft/world/entity/monster/Shulker.java -index b07dd45cf3ee07d8e51aa9473ee22fab577809c6..8e33c702bf4b6a2ad2af8e730f9fecef579ab2ad 100644 +index 12b32798d890bf430a04781866de140e07f94821..bfef619b3b21ee2071fd74c82b1b658f239cd402 100644 --- a/net/minecraft/world/entity/monster/Shulker.java +++ b/net/minecraft/world/entity/monster/Shulker.java @@ -134,6 +134,13 @@ public class Shulker extends AbstractGolem implements Enemy { @@ -917,7 +899,7 @@ index b07dd45cf3ee07d8e51aa9473ee22fab577809c6..8e33c702bf4b6a2ad2af8e730f9fecef protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables diff --git a/net/minecraft/world/entity/monster/Silverfish.java b/net/minecraft/world/entity/monster/Silverfish.java -index 34bb4c573f72b32931e47e5502a342a8d2283a6c..e6bc3451f2f5921c5f8773749962b4334328ac88 100644 +index 1119feee838deb454ceef5d6c9998773c7169daf..d8f696287021d3f20949002f5229d1caf40c9d4f 100644 --- a/net/minecraft/world/entity/monster/Silverfish.java +++ b/net/minecraft/world/entity/monster/Silverfish.java @@ -65,6 +65,13 @@ public class Silverfish extends Monster { @@ -934,29 +916,11 @@ index 34bb4c573f72b32931e47e5502a342a8d2283a6c..e6bc3451f2f5921c5f8773749962b433 @Override protected void registerGoals() { this.friendsGoal = new Silverfish.SilverfishWakeUpFriendsGoal(this); -diff --git a/net/minecraft/world/entity/monster/Slime.java b/net/minecraft/world/entity/monster/Slime.java -index f541ccef625ab0d560f4781c28ad7ae3b67196d6..834125d0ded28a1d7a39a3e5fcf6a5bb967c7f91 100644 ---- a/net/minecraft/world/entity/monster/Slime.java -+++ b/net/minecraft/world/entity/monster/Slime.java -@@ -135,6 +135,13 @@ public class Slime extends Mob implements Enemy { - } - // Purpur end - Configurable entity base attributes - -+ // Purpur start - Toggle for water sensitive mob damage -+ @Override -+ public boolean isSensitiveToWater() { -+ return this.level().purpurConfig.slimeTakeDamageFromWater; -+ } -+ // Purpur end - Toggle for water sensitive mob damage -+ - @Override - protected void registerGoals() { - this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables diff --git a/net/minecraft/world/entity/monster/Strider.java b/net/minecraft/world/entity/monster/Strider.java -index b6c20ce23cc1c97c337c5df6e03ad79a51c08702..eacbaa4a9c9eb30a29eade20b31860f9ec6e1a69 100644 +index 6017c3865c685c55ecf304af34b07e64563c5969..584aee58a1319da937eeb78d3015bc48e705bd64 100644 --- a/net/minecraft/world/entity/monster/Strider.java +++ b/net/minecraft/world/entity/monster/Strider.java -@@ -87,7 +87,7 @@ public class Strider extends Animal implements ItemSteerable { +@@ -93,7 +93,7 @@ public class Strider extends Animal implements ItemSteerable { public Strider(final EntityType strider, final Level level) { super(strider, level); this.blocksBuilding = true; @@ -965,7 +929,7 @@ index b6c20ce23cc1c97c337c5df6e03ad79a51c08702..eacbaa4a9c9eb30a29eade20b31860f9 this.setPathfindingMalus(PathType.LAVA, 0.0F); this.setPathfindingMalus(PathType.FIRE_IN_NEIGHBOR, 0.0F); this.setPathfindingMalus(PathType.FIRE, 0.0F); -@@ -398,7 +398,7 @@ public class Strider extends Animal implements ItemSteerable { +@@ -409,7 +409,7 @@ public class Strider extends Animal implements ItemSteerable { @Override public boolean isSensitiveToWater() { @@ -975,10 +939,10 @@ index b6c20ce23cc1c97c337c5df6e03ad79a51c08702..eacbaa4a9c9eb30a29eade20b31860f9 @Override diff --git a/net/minecraft/world/entity/monster/Vex.java b/net/minecraft/world/entity/monster/Vex.java -index 4b5aade3de8ff29943b58741db5e310851a33561..838edcb5267268fadfc913ea71f3fb4adbe94209 100644 +index 854c78d567a446479a704fbf459885f2b164e54d..e361d1ecf9e9a27491bb8195fee6272dc903615c 100644 --- a/net/minecraft/world/entity/monster/Vex.java +++ b/net/minecraft/world/entity/monster/Vex.java -@@ -110,6 +110,13 @@ public class Vex extends Monster implements TraceableEntity { +@@ -112,6 +112,13 @@ public class Vex extends Monster implements TraceableEntity, OwnableEntity { } // Purpur end - Configurable entity base attributes @@ -993,10 +957,10 @@ index 4b5aade3de8ff29943b58741db5e310851a33561..838edcb5267268fadfc913ea71f3fb4a public boolean isFlapping() { return this.tickCount % TICKS_PER_FLAP == 0; diff --git a/net/minecraft/world/entity/monster/Witch.java b/net/minecraft/world/entity/monster/Witch.java -index 6b17c2135397f349670a7180e88db4794d3902a8..bfa222c9b61bc2d20927fdf08e8baa5fda4fdbdc 100644 +index 4b2da14b64476d4b7358c6c764a622d4b0fc6207..847363cd327e52b5d67d07510618dd0f6a7fc8a4 100644 --- a/net/minecraft/world/entity/monster/Witch.java +++ b/net/minecraft/world/entity/monster/Witch.java -@@ -82,6 +82,13 @@ public class Witch extends Raider implements RangedAttackMob { +@@ -83,6 +83,13 @@ public class Witch extends Raider implements RangedAttackMob { } // Purpur end - Configurable entity base attributes @@ -1011,10 +975,10 @@ index 6b17c2135397f349670a7180e88db4794d3902a8..bfa222c9b61bc2d20927fdf08e8baa5f protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/Zoglin.java b/net/minecraft/world/entity/monster/Zoglin.java -index 4d4593f89e20e8e72a979cc2dee54566ef380462..15e5e3c63ec9bddaf19636e27dd21d12df9318ce 100644 +index f449875ed2ada648aef7f0cfff52c08e94516d73..dec8f0ab0fd8f33dbc4b18d38e43ff1531963b07 100644 --- a/net/minecraft/world/entity/monster/Zoglin.java +++ b/net/minecraft/world/entity/monster/Zoglin.java -@@ -101,6 +101,13 @@ public class Zoglin extends Monster implements HoglinBase { +@@ -109,6 +109,13 @@ public class Zoglin extends Monster implements HoglinBase { } // Purpur end - Configurable entity base attributes @@ -1028,11 +992,65 @@ index 4d4593f89e20e8e72a979cc2dee54566ef380462..15e5e3c63ec9bddaf19636e27dd21d12 @Override protected Brain makeBrain(final Brain.Packed packedBrain) { return BRAIN_PROVIDER.makeBrain(this, packedBrain); +diff --git a/net/minecraft/world/entity/monster/cubemob/MagmaCube.java b/net/minecraft/world/entity/monster/cubemob/MagmaCube.java +index 54cc2ab970ec854ca44476a5e58b53363c64d1e5..44e8dd9667663e971c65613baef25f4d7ddf4a79 100644 +--- a/net/minecraft/world/entity/monster/cubemob/MagmaCube.java ++++ b/net/minecraft/world/entity/monster/cubemob/MagmaCube.java +@@ -90,6 +90,13 @@ public class MagmaCube extends AbstractCubeMob implements Enemy { + } + // Purpur end - Configurable entity base attributes + ++ // Purpur start - Toggle for water sensitive mob damage ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level().purpurConfig.magmaCubeTakeDamageFromWater; ++ } ++ // Purpur end - Toggle for water sensitive mob damage ++ + public static AttributeSupplier.Builder createAttributes() { + return Monster.createMonsterAttributes().add(Attributes.MOVEMENT_SPEED, 0.2F); + } +diff --git a/net/minecraft/world/entity/monster/cubemob/Slime.java b/net/minecraft/world/entity/monster/cubemob/Slime.java +index 22c20e4360473cdbe9cda8bb7b3b30be85f16fe6..3c09f472ba54f8929782ac6a080ceabf10f09699 100644 +--- a/net/minecraft/world/entity/monster/cubemob/Slime.java ++++ b/net/minecraft/world/entity/monster/cubemob/Slime.java +@@ -101,6 +101,13 @@ public class Slime extends AbstractCubeMob implements Enemy { + } + // Purpur end - Configurable entity base attributes + ++ // Purpur start - Toggle for water sensitive mob damage ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level().purpurConfig.slimeTakeDamageFromWater; ++ } ++ // Purpur end - Toggle for water sensitive mob damage ++ + @Override + public SoundEvent getHurtSound(final DamageSource source) { + return this.isTiny() ? SoundEvents.SLIME_HURT_SMALL : SoundEvents.SLIME_HURT; +diff --git a/net/minecraft/world/entity/monster/cubemob/SulfurCube.java b/net/minecraft/world/entity/monster/cubemob/SulfurCube.java +index 8a12c35177a745e94c2a4ced86994114fac933f5..f777ed1de1ec159fed3019bd5bfb711b9aad6146 100644 +--- a/net/minecraft/world/entity/monster/cubemob/SulfurCube.java ++++ b/net/minecraft/world/entity/monster/cubemob/SulfurCube.java +@@ -165,6 +165,13 @@ public class SulfurCube extends AbstractCubeMob implements Bucketable, Shearable + protected java.util.Map getAttackDamageCache() {return new java.util.HashMap<>();} + // Purpur start - Configurable entity base attributes + ++ // Purpur start - Toggle for water sensitive mob damage ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level().purpurConfig.sulfurCubeTakeDamageFromWater; ++ } ++ // Purpur end - Toggle for water sensitive mob damage ++ + @Override + public boolean fromBucket() { + return this.entityData.get(FROM_BUCKET); diff --git a/net/minecraft/world/entity/monster/hoglin/Hoglin.java b/net/minecraft/world/entity/monster/hoglin/Hoglin.java -index d158807f22a0a08614b2d7054663ef2782a519e3..d001cf955dba66435079eb2cc30e05aec963d2c6 100644 +index c8b60fd516340de7245d3d23303c44bef4239a9c..03686024f7a870079dc1c379c5e88f92d8f904fe 100644 --- a/net/minecraft/world/entity/monster/hoglin/Hoglin.java +++ b/net/minecraft/world/entity/monster/hoglin/Hoglin.java -@@ -105,6 +105,13 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { +@@ -113,6 +113,13 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { } // Purpur end - Make entity breeding times configurable @@ -1047,10 +1065,10 @@ index d158807f22a0a08614b2d7054663ef2782a519e3..d001cf955dba66435079eb2cc30e05ae public void setTimeInOverworld(final int timeInOverworld) { this.timeInOverworld = timeInOverworld; diff --git a/net/minecraft/world/entity/monster/illager/Evoker.java b/net/minecraft/world/entity/monster/illager/Evoker.java -index 40fb26c7b0f5975a58d218d799fa391661e1c748..fe67813da3b3be09dad8f99a68685448b33fa5a9 100644 +index 4b077693e8749b6d2440b12f0aa1d7d6ac899593..fead174f8a56ea9611aa4f20ff870df32048037f 100644 --- a/net/minecraft/world/entity/monster/illager/Evoker.java +++ b/net/minecraft/world/entity/monster/illager/Evoker.java -@@ -74,6 +74,13 @@ public class Evoker extends SpellcasterIllager { +@@ -75,6 +75,13 @@ public class Evoker extends SpellcasterIllager { } // Purpur end - Configurable entity base attributes @@ -1083,7 +1101,7 @@ index 0150ebdcbb681bcf8128eec34fd6e3fbfb85a79f..bfd1a61d43fcc1293592a6199d7bab03 protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/illager/Pillager.java b/net/minecraft/world/entity/monster/illager/Pillager.java -index 134650a5866459881c1dca4b77b47110fd67420a..bd9092a0fecef475bde06d94bc2f6726f21404fd 100644 +index 81d956085667b7564588b54b54c1150b8a082c97..18c177bd17873d87769dbcdd4ee3794fb828905c 100644 --- a/net/minecraft/world/entity/monster/illager/Pillager.java +++ b/net/minecraft/world/entity/monster/illager/Pillager.java @@ -90,6 +90,13 @@ public class Pillager extends AbstractIllager implements CrossbowAttackMob, Inve @@ -1101,7 +1119,7 @@ index 134650a5866459881c1dca4b77b47110fd67420a..bd9092a0fecef475bde06d94bc2f6726 protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/illager/Vindicator.java b/net/minecraft/world/entity/monster/illager/Vindicator.java -index 865395b9ceddfaac4fc88701878a1cf349556fe1..aab0bd86da31ca73efc4988fa34c906886139ec3 100644 +index d06f6bf930277f08756752f7f259a57f456e7c38..db2ca5e6f5c5a0968e1fb76369ad2efdee57e480 100644 --- a/net/minecraft/world/entity/monster/illager/Vindicator.java +++ b/net/minecraft/world/entity/monster/illager/Vindicator.java @@ -82,6 +82,13 @@ public class Vindicator extends AbstractIllager { @@ -1119,10 +1137,10 @@ index 865395b9ceddfaac4fc88701878a1cf349556fe1..aab0bd86da31ca73efc4988fa34c9068 protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/piglin/Piglin.java b/net/minecraft/world/entity/monster/piglin/Piglin.java -index d00490669c66343e37d2a54a051f02995e686c84..21674f5ee9bd89bfbcf36f43ba728a692934a886 100644 +index 013550c72a194977b1874f30aeda60d27b682853..f7e8b26f3acaff88aeb3e2cde93ec7922859e1ae 100644 --- a/net/minecraft/world/entity/monster/piglin/Piglin.java +++ b/net/minecraft/world/entity/monster/piglin/Piglin.java -@@ -133,6 +133,13 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento +@@ -134,6 +134,13 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento } // Purpur end - Configurable entity base attributes @@ -1137,7 +1155,7 @@ index d00490669c66343e37d2a54a051f02995e686c84..21674f5ee9bd89bfbcf36f43ba728a69 protected void addAdditionalSaveData(final ValueOutput output) { super.addAdditionalSaveData(output); diff --git a/net/minecraft/world/entity/monster/piglin/PiglinBrute.java b/net/minecraft/world/entity/monster/piglin/PiglinBrute.java -index 4d82bf4283cb3ff26d5a9c367a28b4debed6cb0d..79e084304cec441966a22f0028e021d19e49bfd3 100644 +index 3cbb6f2ee343e6d3851e84e53cb1aafa55418b0f..5f25162930b7d18385d84715f4f72962c1efa93d 100644 --- a/net/minecraft/world/entity/monster/piglin/PiglinBrute.java +++ b/net/minecraft/world/entity/monster/piglin/PiglinBrute.java @@ -75,6 +75,13 @@ public class PiglinBrute extends AbstractPiglin { @@ -1155,10 +1173,10 @@ index 4d82bf4283cb3ff26d5a9c367a28b4debed6cb0d..79e084304cec441966a22f0028e021d1 return Monster.createMonsterAttributes() .add(Attributes.MAX_HEALTH, 50.0) diff --git a/net/minecraft/world/entity/monster/skeleton/Skeleton.java b/net/minecraft/world/entity/monster/skeleton/Skeleton.java -index 76b16400085d237194ed646b04210c8eca8398d3..a2fc1cf5fa77c1cc78610ce0b4bbd35a371878a0 100644 +index 12f87667ddeda1f57fe89f137b2df6cebef35c74..0890eb175438eb1dd39ca511c9ac332ef2a32e02 100644 --- a/net/minecraft/world/entity/monster/skeleton/Skeleton.java +++ b/net/minecraft/world/entity/monster/skeleton/Skeleton.java -@@ -50,6 +50,13 @@ public class Skeleton extends AbstractSkeleton { +@@ -51,6 +51,13 @@ public class Skeleton extends AbstractSkeleton { } // Purpur end - Configurable entity base attributes @@ -1173,7 +1191,7 @@ index 76b16400085d237194ed646b04210c8eca8398d3..a2fc1cf5fa77c1cc78610ce0b4bbd35a protected void defineSynchedData(final SynchedEntityData.Builder entityData) { super.defineSynchedData(entityData); diff --git a/net/minecraft/world/entity/monster/skeleton/Stray.java b/net/minecraft/world/entity/monster/skeleton/Stray.java -index ce9364040d6e856fd1fa42baa75b403098e6813f..64dc2a04bb2ae4dc63083a24c48f671bfc8ff8ea 100644 +index f028e74e34b16cfa4b5c808a8896521d4709d03f..60aae5ecbd5d1243c63b304a7ffbfd729ad093c0 100644 --- a/net/minecraft/world/entity/monster/skeleton/Stray.java +++ b/net/minecraft/world/entity/monster/skeleton/Stray.java @@ -47,6 +47,13 @@ public class Stray extends AbstractSkeleton { @@ -1191,7 +1209,7 @@ index ce9364040d6e856fd1fa42baa75b403098e6813f..64dc2a04bb2ae4dc63083a24c48f671b final EntityType type, final ServerLevelAccessor level, final EntitySpawnReason spawnReason, final BlockPos pos, final RandomSource random ) { diff --git a/net/minecraft/world/entity/monster/skeleton/WitherSkeleton.java b/net/minecraft/world/entity/monster/skeleton/WitherSkeleton.java -index 0d370f992e5ef601d8032230c927164d760a95e1..2f3ff6eeae3103248512afb8cfd745f3e08c3eaf 100644 +index 7ef07d92c1accc525f331e29406ff89ebe5afd05..2ec114406a6d207676739bf6b7eeb3b218442edd 100644 --- a/net/minecraft/world/entity/monster/skeleton/WitherSkeleton.java +++ b/net/minecraft/world/entity/monster/skeleton/WitherSkeleton.java @@ -59,6 +59,13 @@ public class WitherSkeleton extends AbstractSkeleton { @@ -1209,7 +1227,7 @@ index 0d370f992e5ef601d8032230c927164d760a95e1..2f3ff6eeae3103248512afb8cfd745f3 protected void registerGoals() { this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractPiglin.class, true)); diff --git a/net/minecraft/world/entity/monster/spider/CaveSpider.java b/net/minecraft/world/entity/monster/spider/CaveSpider.java -index beba154f2a76d3d8f7d9b44c1b45b83c9dc3b86c..cbbfdd2dde1437955f1007618244eeb72768b8fd 100644 +index 6a34024c8fc6b537d405afddd5bc9afa7a91a7b7..cb4d092e7365a978c16b620dfe05cbca56a0e1f0 100644 --- a/net/minecraft/world/entity/monster/spider/CaveSpider.java +++ b/net/minecraft/world/entity/monster/spider/CaveSpider.java @@ -51,6 +51,13 @@ public class CaveSpider extends Spider { @@ -1227,10 +1245,10 @@ index beba154f2a76d3d8f7d9b44c1b45b83c9dc3b86c..cbbfdd2dde1437955f1007618244eeb7 public boolean doHurtTarget(final ServerLevel level, final Entity target) { if (super.doHurtTarget(level, target)) { diff --git a/net/minecraft/world/entity/monster/spider/Spider.java b/net/minecraft/world/entity/monster/spider/Spider.java -index 8834ecb96e3a6ec28f8700b23971d00136f26a4d..467ea1fd09b94747a03aaadd28a107d983afeb01 100644 +index 0f87739c64f976f59c5740556d15763b4189a01e..4b406ba70824d3ab06883085204c0233c7ff0a0a 100644 --- a/net/minecraft/world/entity/monster/spider/Spider.java +++ b/net/minecraft/world/entity/monster/spider/Spider.java -@@ -77,6 +77,13 @@ public class Spider extends Monster { +@@ -78,6 +78,13 @@ public class Spider extends Monster { } // Purpur end - Configurable entity base attributes @@ -1245,10 +1263,10 @@ index 8834ecb96e3a6ec28f8700b23971d00136f26a4d..467ea1fd09b94747a03aaadd28a107d9 protected void registerGoals() { this.goalSelector.addGoal(1, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/monster/zombie/Drowned.java b/net/minecraft/world/entity/monster/zombie/Drowned.java -index 8102352e1b59608b19a68f4e5080180c9a3999b5..3828001bed19114c23e5099c3716837f4d2c2314 100644 +index 1234c13b4290f45997eab79f6ef18933dcf3b04f..a6ff55afa5987ddf3ff1e9a43e34392f1cede2b4 100644 --- a/net/minecraft/world/entity/monster/zombie/Drowned.java +++ b/net/minecraft/world/entity/monster/zombie/Drowned.java -@@ -133,6 +133,13 @@ public class Drowned extends Zombie implements RangedAttackMob { +@@ -134,6 +134,13 @@ public class Drowned extends Zombie implements RangedAttackMob { } // Purpur end - Configurable jockey options @@ -1263,10 +1281,10 @@ index 8102352e1b59608b19a68f4e5080180c9a3999b5..3828001bed19114c23e5099c3716837f protected void addBehaviourGoals() { this.goalSelector.addGoal(1, new Drowned.DrownedGoToWaterGoal(this, 1.0)); diff --git a/net/minecraft/world/entity/monster/zombie/Husk.java b/net/minecraft/world/entity/monster/zombie/Husk.java -index c3f2d9ab49eb501f26939387624f326227908b81..8d6262e99fb3ad98d3142ee069f07d2370ca0778 100644 +index 91800961ba5b724aac905ccd4fd1d0f915c93803..83c2d21587fc490eb7eb60c43a21da73f144140c 100644 --- a/net/minecraft/world/entity/monster/zombie/Husk.java +++ b/net/minecraft/world/entity/monster/zombie/Husk.java -@@ -83,6 +83,13 @@ public class Husk extends Zombie { +@@ -84,6 +84,13 @@ public class Husk extends Zombie { } // Purpur end - Configurable jockey options @@ -1281,10 +1299,10 @@ index c3f2d9ab49eb501f26939387624f326227908b81..8d6262e99fb3ad98d3142ee069f07d23 public boolean isSunSensitive() { return false; diff --git a/net/minecraft/world/entity/monster/zombie/Zombie.java b/net/minecraft/world/entity/monster/zombie/Zombie.java -index 4b7a00ae57526db73dda9f92a31a95c97b0bc41c..9b34ac54b4b23c826766f2d8b1098487090aac1e 100644 +index f47f4a3f8e0f4f5a40f520a25e87e0068a564b4c..26f0ac03eaa3d33fa593ce65bc944872864a66a9 100644 --- a/net/minecraft/world/entity/monster/zombie/Zombie.java +++ b/net/minecraft/world/entity/monster/zombie/Zombie.java -@@ -151,6 +151,13 @@ public class Zombie extends Monster { +@@ -152,6 +152,13 @@ public class Zombie extends Monster { } // Purpur end - Configurable jockey options @@ -1299,10 +1317,10 @@ index 4b7a00ae57526db73dda9f92a31a95c97b0bc41c..9b34ac54b4b23c826766f2d8b1098487 protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables diff --git a/net/minecraft/world/entity/monster/zombie/ZombieVillager.java b/net/minecraft/world/entity/monster/zombie/ZombieVillager.java -index 8a5634d2204b9abae560d34a7b0616b3ebdc68ab..ecbac0d55dbe921ac2e185e0acab5691579be512 100644 +index 155ba4d03e7864b21e7a3dab854315b62d3b9e5b..b704a24142f79f40e72a2dd76d1448501d9f7f59 100644 --- a/net/minecraft/world/entity/monster/zombie/ZombieVillager.java +++ b/net/minecraft/world/entity/monster/zombie/ZombieVillager.java -@@ -131,6 +131,13 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { +@@ -133,6 +133,13 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { } // Purpur end - Configurable jockey options @@ -1317,7 +1335,7 @@ index 8a5634d2204b9abae560d34a7b0616b3ebdc68ab..ecbac0d55dbe921ac2e185e0acab5691 protected void defineSynchedData(final SynchedEntityData.Builder entityData) { super.defineSynchedData(entityData); diff --git a/net/minecraft/world/entity/monster/zombie/ZombifiedPiglin.java b/net/minecraft/world/entity/monster/zombie/ZombifiedPiglin.java -index d1edf1f44de1fc6d23bcd8044f8bf4165821790e..6cc4d4729520c60b98d45d5e7dd674e599616505 100644 +index 7a59980a38abb8ed9500def97fc7e3e8952a439d..1233173bec21f780b25e7773788fd1fb003804af 100644 --- a/net/minecraft/world/entity/monster/zombie/ZombifiedPiglin.java +++ b/net/minecraft/world/entity/monster/zombie/ZombifiedPiglin.java @@ -110,6 +110,13 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { @@ -1335,10 +1353,10 @@ index d1edf1f44de1fc6d23bcd8044f8bf4165821790e..6cc4d4729520c60b98d45d5e7dd674e5 protected void addBehaviourGoals() { this.goalSelector.addGoal(1, new SpearUseGoal<>(this, 1.0, 1.0, 10.0F, 2.0F)); diff --git a/net/minecraft/world/entity/npc/villager/Villager.java b/net/minecraft/world/entity/npc/villager/Villager.java -index 744a7251f0ab9d7cb09ccdc7d1f0bbcd62483da1..fd0b329f56fa78d05be5348b42f3542fff7ebbe4 100644 +index bd9f39efb01f9153db56e6e58b56b76dec3d8cc3..dddbde704f3488b6bd7cbf126bc18ccb26d24d2c 100644 --- a/net/minecraft/world/entity/npc/villager/Villager.java +++ b/net/minecraft/world/entity/npc/villager/Villager.java -@@ -284,6 +284,13 @@ public class Villager extends AbstractVillager implements VillagerDataHolder, Re +@@ -275,6 +275,13 @@ public class Villager extends AbstractVillager implements VillagerDataHolder, Re } // Purpur end - Configurable entity base attributes @@ -1351,9 +1369,9 @@ index 744a7251f0ab9d7cb09ccdc7d1f0bbcd62483da1..fd0b329f56fa78d05be5348b42f3542f + @Override public Brain getBrain() { - return (Brain) super.getBrain(); + return (Brain)super.getBrain(); diff --git a/net/minecraft/world/entity/npc/wanderingtrader/WanderingTrader.java b/net/minecraft/world/entity/npc/wanderingtrader/WanderingTrader.java -index 292980e7445d969475332d18b158a0092ad847fe..b6e16bcfff9a74fdd2109d4a442344c07692c3d1 100644 +index d0c9643d3f64d0e17cd8c3a62ec389430d9d7c87..2f6fe59d812ccef104d7e3357483442c8f52e826 100644 --- a/net/minecraft/world/entity/npc/wanderingtrader/WanderingTrader.java +++ b/net/minecraft/world/entity/npc/wanderingtrader/WanderingTrader.java @@ -98,6 +98,13 @@ public class WanderingTrader extends AbstractVillager implements Consumable.Over diff --git a/purpur-server/minecraft-patches/unapplied-features/0017-API-for-any-mob-to-burn-daylight.patch b/purpur-server/minecraft-patches/features/0017-API-for-any-mob-to-burn-daylight.patch similarity index 89% rename from purpur-server/minecraft-patches/unapplied-features/0017-API-for-any-mob-to-burn-daylight.patch rename to purpur-server/minecraft-patches/features/0017-API-for-any-mob-to-burn-daylight.patch index dc7b88b7a..c63c50427 100644 --- a/purpur-server/minecraft-patches/unapplied-features/0017-API-for-any-mob-to-burn-daylight.patch +++ b/purpur-server/minecraft-patches/features/0017-API-for-any-mob-to-burn-daylight.patch @@ -6,10 +6,10 @@ Subject: [PATCH] API for any mob to burn daylight Co-authored by: Encode42 diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index 241ff14c2c27204fc8615b19700f946afdcfa2d1..6807b1310c70cd50bf8a0c8828a1bb627bfe4fce 100644 +index 6b51feb4e41f10dae9e5fcd303d260d5f511ae91..2f2b5794cc37aedb5dc09925dd77b6e700934a95 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java -@@ -558,6 +558,21 @@ public abstract class Entity +@@ -453,6 +453,21 @@ public abstract class Entity } // Purpur end - Add canSaveToDisk to Entity @@ -32,10 +32,10 @@ index 241ff14c2c27204fc8615b19700f946afdcfa2d1..6807b1310c70cd50bf8a0c8828a1bb62 this.type = type; this.level = level; diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java -index c3bf8c3d9e34940c40a0bf453bea3ca4191b2411..215149e07e0ae2a3b98d90336d8adf8d36e2bae0 100644 +index a9e93d55de28964169988e2b276fdfc8acd29fdb..77a5742fe3aab5acde6dff9664fea66f66262f3c 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java -@@ -291,6 +291,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -305,6 +305,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin public boolean silentDeath = false; // Paper - mark entity as dying silently for cancellable death event public net.kyori.adventure.util.TriState frictionState = net.kyori.adventure.util.TriState.NOT_SET; // Paper - Friction API public int invulnerableDuration = LivingEntity.INVULNERABLE_DURATION; // Paper - configurable invulnerable duration @@ -43,7 +43,7 @@ index c3bf8c3d9e34940c40a0bf453bea3ca4191b2411..215149e07e0ae2a3b98d90336d8adf8d // CraftBukkit end protected LivingEntity(final EntityType type, final Level level) { -@@ -788,6 +789,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -810,6 +811,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin output.putBoolean("FallFlying", this.isFallFlying()); this.getSleepingPos().ifPresent(sleepingPos -> output.store("sleeping_pos", BlockPos.CODEC, sleepingPos)); output.store("Brain", Brain.Packed.CODEC, this.brain.pack()); @@ -51,7 +51,7 @@ index c3bf8c3d9e34940c40a0bf453bea3ca4191b2411..215149e07e0ae2a3b98d90336d8adf8d if (this.lastHurtByPlayer != null) { this.lastHurtByPlayer.store(output, "last_hurt_by_player"); output.putInt("last_hurt_by_player_memory_time", this.lastHurtByPlayerMemoryTime); -@@ -914,6 +916,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -935,6 +937,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin } // Paper - The sleeping pos will always also set the actual pos, so a desync suggests something is wrong }, this::clearSleepingPos); input.read("Brain", Brain.Packed.CODEC).ifPresent(packedBrain -> this.brain = this.makeBrain(packedBrain)); @@ -59,7 +59,7 @@ index c3bf8c3d9e34940c40a0bf453bea3ca4191b2411..215149e07e0ae2a3b98d90336d8adf8d this.lastHurtByPlayer = EntityReference.read(input, "last_hurt_by_player"); this.lastHurtByPlayerMemoryTime = input.getIntOr("last_hurt_by_player_memory_time", 0); this.lastHurtByMob = EntityReference.read(input, "last_hurt_by_mob"); -@@ -3913,6 +3916,37 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -3981,6 +3984,37 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin if (this.level() instanceof ServerLevel serverLevel && this.isSensitiveToWater() && this.isInWaterOrRain()) { this.hurtServer(serverLevel, this.damageSources().drown(), 1.0F); } @@ -98,10 +98,10 @@ index c3bf8c3d9e34940c40a0bf453bea3ca4191b2411..215149e07e0ae2a3b98d90336d8adf8d protected void applyInput() { diff --git a/net/minecraft/world/entity/Mob.java b/net/minecraft/world/entity/Mob.java -index 2d74f6f2a47e5dea6b52037a8b6e3766a74f6f82..65473722cf31dd7f298ec60cf0d870d8e8fbe142 100644 +index 6e6ba45c93209bd9e7a8565bf166b4cc9843b80a..b5c2b64c581c30cdf6f379ccd76a863b81513f8b 100644 --- a/net/minecraft/world/entity/Mob.java +++ b/net/minecraft/world/entity/Mob.java -@@ -562,9 +562,9 @@ public abstract class Mob extends LivingEntity implements Targeting, EquipmentUs +@@ -567,9 +567,9 @@ public abstract class Mob extends LivingEntity implements Targeting, EquipmentUs @Override public void aiStep() { super.aiStep(); @@ -113,7 +113,7 @@ index 2d74f6f2a47e5dea6b52037a8b6e3766a74f6f82..65473722cf31dd7f298ec60cf0d870d8 ProfilerFiller profiler = Profiler.get(); profiler.push("looting"); -@@ -616,16 +616,8 @@ public abstract class Mob extends LivingEntity implements Targeting, EquipmentUs +@@ -621,16 +621,8 @@ public abstract class Mob extends LivingEntity implements Targeting, EquipmentUs } public boolean isSunBurnTick() { @@ -133,10 +133,10 @@ index 2d74f6f2a47e5dea6b52037a8b6e3766a74f6f82..65473722cf31dd7f298ec60cf0d870d8 protected Vec3i getPickupReach() { diff --git a/net/minecraft/world/entity/animal/equine/ZombieHorse.java b/net/minecraft/world/entity/animal/equine/ZombieHorse.java -index 586151b916a5e21c36578aa04cab9d71994dcf43..426b468ee821a7441d15dae3634032535cb60725 100644 +index 9deb8e249830aea4bbc230f26eb192479eec0c4e..9c8ce7eee6bf462478a0755b074e229133eee1c3 100644 --- a/net/minecraft/world/entity/animal/equine/ZombieHorse.java +++ b/net/minecraft/world/entity/animal/equine/ZombieHorse.java -@@ -47,6 +47,7 @@ public class ZombieHorse extends AbstractHorse { +@@ -48,6 +48,7 @@ public class ZombieHorse extends AbstractHorse { public ZombieHorse(final EntityType type, final Level level) { super(type, level); @@ -145,7 +145,7 @@ index 586151b916a5e21c36578aa04cab9d71994dcf43..426b468ee821a7441d15dae363403253 // Purpur start - Ridables diff --git a/net/minecraft/world/entity/animal/nautilus/ZombieNautilus.java b/net/minecraft/world/entity/animal/nautilus/ZombieNautilus.java -index 18bfb321e3728d3fa0596da0b86e4b76ced2178a..ab97449bfa5e8b5615e0f2b6b16be2fe7e4233fd 100644 +index 55b4a41867799dcb2999f0c324bde8b2341b2e9d..da60906faaca79efbfd29ed05b01a0c07978bab2 100644 --- a/net/minecraft/world/entity/animal/nautilus/ZombieNautilus.java +++ b/net/minecraft/world/entity/animal/nautilus/ZombieNautilus.java @@ -46,6 +46,7 @@ public class ZombieNautilus extends AbstractNautilus { @@ -157,7 +157,7 @@ index 18bfb321e3728d3fa0596da0b86e4b76ced2178a..ab97449bfa5e8b5615e0f2b6b16be2fe // Purpur start - Configurable entity base attributes diff --git a/net/minecraft/world/entity/monster/Phantom.java b/net/minecraft/world/entity/monster/Phantom.java -index b95449d4de57c42e604428e4f5a74fb1eb44746f..356f5c6e5534b1b36bcb5c44021e0e48194fb645 100644 +index 7c1aad8b5f9625d757039cb636783cb760aa87e0..9d646f3d924d3c2fdb2b396e4501111912fba043 100644 --- a/net/minecraft/world/entity/monster/Phantom.java +++ b/net/minecraft/world/entity/monster/Phantom.java @@ -52,7 +52,7 @@ public class Phantom extends Mob implements Enemy { @@ -171,7 +171,7 @@ index b95449d4de57c42e604428e4f5a74fb1eb44746f..356f5c6e5534b1b36bcb5c44021e0e48 @@ -61,6 +61,7 @@ public class Phantom extends Mob implements Enemy { this.xpReward = 5; - this.moveControl = new Phantom.PhantomMoveControl(this); + this.moveControl = new Phantom.PhantomMoveControl<>(this); this.lookControl = new Phantom.PhantomLookControl(this); + this.setShouldBurnInDay(true); // Purpur - API for any mob to burn daylight } @@ -196,7 +196,7 @@ index b95449d4de57c42e604428e4f5a74fb1eb44746f..356f5c6e5534b1b36bcb5c44021e0e48 } diff --git a/net/minecraft/world/entity/monster/skeleton/AbstractSkeleton.java b/net/minecraft/world/entity/monster/skeleton/AbstractSkeleton.java -index 695dca87fc3ef633290f9abe1089e7a6a0e7feb9..d02869b5c17378abf18b4ba3514e8916c62b904c 100644 +index 3294aca7cb32d5cf9bbc7c2c99a538eb00fc3dcc..8f30f9f0f12e5fd6ddcb1809195f0823ea3ebd51 100644 --- a/net/minecraft/world/entity/monster/skeleton/AbstractSkeleton.java +++ b/net/minecraft/world/entity/monster/skeleton/AbstractSkeleton.java @@ -66,11 +66,12 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo @@ -232,7 +232,7 @@ index 695dca87fc3ef633290f9abe1089e7a6a0e7feb9..d02869b5c17378abf18b4ba3514e8916 // Paper end - shouldBurnInDay API } diff --git a/net/minecraft/world/entity/monster/skeleton/Parched.java b/net/minecraft/world/entity/monster/skeleton/Parched.java -index 36348e59c278e8842330e685340820c2ac9205eb..b14ea9e0f3de832fb73ae51728607486e399120b 100644 +index 986caff5325830c6d3eb0f6927c3294ae8b9ebe0..ed121e0b32a791ade0126edc627a96f713bc30d4 100644 --- a/net/minecraft/world/entity/monster/skeleton/Parched.java +++ b/net/minecraft/world/entity/monster/skeleton/Parched.java @@ -17,6 +17,7 @@ import org.jspecify.annotations.Nullable; @@ -244,10 +244,10 @@ index 36348e59c278e8842330e685340820c2ac9205eb..b14ea9e0f3de832fb73ae51728607486 @Override diff --git a/net/minecraft/world/entity/monster/zombie/Husk.java b/net/minecraft/world/entity/monster/zombie/Husk.java -index 8d6262e99fb3ad98d3142ee069f07d2370ca0778..02e935edd7a6cabbf2e6fcc6c96a9601bee71acc 100644 +index 83c2d21587fc490eb7eb60c43a21da73f144140c..afca08cfa58a25a7fa257eebf66dd888ccc1c734 100644 --- a/net/minecraft/world/entity/monster/zombie/Husk.java +++ b/net/minecraft/world/entity/monster/zombie/Husk.java -@@ -35,6 +35,7 @@ public class Husk extends Zombie { +@@ -36,6 +36,7 @@ public class Husk extends Zombie { public Husk(final EntityType type, final Level level) { super(type, level); @@ -255,7 +255,7 @@ index 8d6262e99fb3ad98d3142ee069f07d2370ca0778..02e935edd7a6cabbf2e6fcc6c96a9601 } // Purpur start - Ridables -@@ -92,7 +93,7 @@ public class Husk extends Zombie { +@@ -93,7 +94,7 @@ public class Husk extends Zombie { @Override public boolean isSunSensitive() { @@ -265,10 +265,10 @@ index 8d6262e99fb3ad98d3142ee069f07d2370ca0778..02e935edd7a6cabbf2e6fcc6c96a9601 @Override diff --git a/net/minecraft/world/entity/monster/zombie/Zombie.java b/net/minecraft/world/entity/monster/zombie/Zombie.java -index 9b34ac54b4b23c826766f2d8b1098487090aac1e..92be49434eb76fa0774864af73b0a460f49b6a32 100644 +index 26f0ac03eaa3d33fa593ce65bc944872864a66a9..f104394d49989fe80462602cb06b2f58c4282fbb 100644 --- a/net/minecraft/world/entity/monster/zombie/Zombie.java +++ b/net/minecraft/world/entity/monster/zombie/Zombie.java -@@ -101,11 +101,12 @@ public class Zombie extends Monster { +@@ -102,11 +102,12 @@ public class Zombie extends Monster { private boolean canBreakDoors = false; private int inWaterTime = 0; public int conversionTime; @@ -277,12 +277,12 @@ index 9b34ac54b4b23c826766f2d8b1098487090aac1e..92be49434eb76fa0774864af73b0a460 public Zombie(final EntityType type, final Level level) { super(type, level); - this.breakDoorGoal = new BreakDoorGoal(this, com.google.common.base.Predicates.in(level.paperConfig().entities.behavior.doorBreakingDifficulty.getOrDefault(type, level.paperConfig().entities.behavior.doorBreakingDifficulty.get(EntityType.ZOMBIE)))); // Paper - Configurable door breaking difficulty + this.breakDoorGoal = new BreakDoorGoal(this, com.google.common.base.Predicates.in(level.paperConfig().entities.behavior.doorBreakingDifficulty.getOrDefault(type, level.paperConfig().entities.behavior.doorBreakingDifficulty.get(EntityTypes.ZOMBIE)))); // Paper - Configurable door breaking difficulty + this.setShouldBurnInDay(true); // Purpur - API for any mob to burn daylight } public Zombie(final Level level) { -@@ -363,6 +364,7 @@ public class Zombie extends Monster { +@@ -365,6 +366,7 @@ public class Zombie extends Monster { // CraftBukkit end } @@ -290,7 +290,7 @@ index 9b34ac54b4b23c826766f2d8b1098487090aac1e..92be49434eb76fa0774864af73b0a460 public boolean isSunSensitive() { return this.shouldBurnInDay; // Paper - Add more Zombie API } -@@ -502,7 +504,7 @@ public class Zombie extends Monster { +@@ -504,7 +506,7 @@ public class Zombie extends Monster { output.putBoolean("CanBreakDoors", this.canBreakDoors()); output.putInt("InWaterTime", this.isInWater() ? this.inWaterTime : -1); output.putInt("DrownedConversionTime", this.isUnderWaterConverting() ? this.conversionTime : -1); @@ -299,7 +299,7 @@ index 9b34ac54b4b23c826766f2d8b1098487090aac1e..92be49434eb76fa0774864af73b0a460 } @Override -@@ -517,7 +519,7 @@ public class Zombie extends Monster { +@@ -519,7 +521,7 @@ public class Zombie extends Monster { } else { this.getEntityData().set(DATA_DROWNED_CONVERSION_ID, false); } diff --git a/purpur-server/minecraft-patches/unapplied-features/0018-Cows-naturally-aggressive-to-players-chance.patch b/purpur-server/minecraft-patches/features/0018-Cows-naturally-aggressive-to-players-chance.patch similarity index 77% rename from purpur-server/minecraft-patches/unapplied-features/0018-Cows-naturally-aggressive-to-players-chance.patch rename to purpur-server/minecraft-patches/features/0018-Cows-naturally-aggressive-to-players-chance.patch index f27987764..ba303f553 100644 --- a/purpur-server/minecraft-patches/unapplied-features/0018-Cows-naturally-aggressive-to-players-chance.patch +++ b/purpur-server/minecraft-patches/features/0018-Cows-naturally-aggressive-to-players-chance.patch @@ -5,23 +5,23 @@ Subject: [PATCH] Cows naturally aggressive to players chance diff --git a/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java b/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java -index 34d2394006a006ea0773a52bb43b5cb3617470e5..7cd25e2b5e2e50b50fff00ca9e5c3a48ee2a3375 100644 +index f875fdb10d16598f9f5b6fbb597c88ad42e88996..36e0aef3aeb1f9542aa34fafdfc014af37ce909e 100644 --- a/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java +++ b/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java -@@ -135,7 +135,7 @@ public class DefaultAttributes { - .put(EntityType.LLAMA, Llama.createAttributes().build()) - .put(EntityType.MAGMA_CUBE, MagmaCube.createAttributes().build()) - .put(EntityType.MANNEQUIN, LivingEntity.createLivingAttributes().build()) -- .put(EntityType.MOOSHROOM, Cow.createAttributes().build()) -+ .put(EntityType.MOOSHROOM, net.minecraft.world.entity.animal.cow.AbstractCow.createAttributes().build()) // Purpur - Cows naturally aggressive to players chance - .put(EntityType.MULE, AbstractChestedHorse.createBaseChestedHorseAttributes().build()) - .put(EntityType.NAUTILUS, Nautilus.createAttributes().build()) - .put(EntityType.OCELOT, Ocelot.createAttributes().build()) +@@ -138,7 +138,7 @@ public class DefaultAttributes { + .put(EntityTypes.MAGMA_CUBE, MagmaCube.createAttributes().build()) + .put(EntityTypes.SULFUR_CUBE, SulfurCube.createSulfurCubeAttributes().build()) + .put(EntityTypes.MANNEQUIN, LivingEntity.createLivingAttributes().build()) +- .put(EntityTypes.MOOSHROOM, Cow.createAttributes().build()) ++ .put(EntityTypes.MOOSHROOM, net.minecraft.world.entity.animal.cow.AbstractCow.createAttributes().build()) // Purpur - Cows naturally aggressive to players chance + .put(EntityTypes.MULE, AbstractChestedHorse.createBaseChestedHorseAttributes().build()) + .put(EntityTypes.NAUTILUS, Nautilus.createAttributes().build()) + .put(EntityTypes.OCELOT, Ocelot.createAttributes().build()) diff --git a/net/minecraft/world/entity/animal/cow/Cow.java b/net/minecraft/world/entity/animal/cow/Cow.java -index 7d3853d693a87e5225a16285631e0e2057685c1b..cdd404f64e196629dd61035675aac984619f1e1c 100644 +index 103b4cd879e059fc34f8e42a5d25fc6cbb146837..70edf30006f3042974a90f6f737d249675b47d16 100644 --- a/net/minecraft/world/entity/animal/cow/Cow.java +++ b/net/minecraft/world/entity/animal/cow/Cow.java -@@ -25,6 +25,8 @@ import net.minecraft.world.level.storage.ValueOutput; +@@ -30,6 +30,8 @@ import net.minecraft.world.level.storage.ValueOutput; import org.jspecify.annotations.Nullable; public class Cow extends AbstractCow { @@ -30,7 +30,7 @@ index 7d3853d693a87e5225a16285631e0e2057685c1b..cdd404f64e196629dd61035675aac984 private static final EntityDataAccessor> DATA_VARIANT_ID = SynchedEntityData.defineId(Cow.class, EntityDataSerializers.COW_VARIANT); private static final EntityDataAccessor> DATA_SOUND_VARIANT_ID = SynchedEntityData.defineId( Cow.class, EntityDataSerializers.COW_SOUND_VARIANT -@@ -54,8 +56,9 @@ public class Cow extends AbstractCow { +@@ -62,8 +64,9 @@ public class Cow extends AbstractCow { // Purpur start - Configurable entity base attributes @Override public void initAttributes() { @@ -42,7 +42,7 @@ index 7d3853d693a87e5225a16285631e0e2057685c1b..cdd404f64e196629dd61035675aac984 } // Purpur end - Configurable entity base attributes -@@ -73,6 +76,13 @@ public class Cow extends AbstractCow { +@@ -81,6 +84,13 @@ public class Cow extends AbstractCow { } // Purpur end - Toggle for water sensitive mob damage @@ -56,7 +56,7 @@ index 7d3853d693a87e5225a16285631e0e2057685c1b..cdd404f64e196629dd61035675aac984 @Override protected void defineSynchedData(final SynchedEntityData.Builder entityData) { super.defineSynchedData(entityData); -@@ -93,6 +103,12 @@ public class Cow extends AbstractCow { +@@ -101,6 +111,12 @@ public class Cow extends AbstractCow { ); } @@ -69,7 +69,7 @@ index 7d3853d693a87e5225a16285631e0e2057685c1b..cdd404f64e196629dd61035675aac984 @Override protected void readAdditionalSaveData(final ValueInput input) { super.readAdditionalSaveData(input); -@@ -116,6 +132,7 @@ public class Cow extends AbstractCow { +@@ -124,6 +140,7 @@ public class Cow extends AbstractCow { public SpawnGroupData finalizeSpawn( final ServerLevelAccessor level, final DifficultyInstance difficulty, final EntitySpawnReason spawnReason, final @Nullable SpawnGroupData groupData ) { diff --git a/purpur-server/minecraft-patches/unapplied-features/0019-Mobs-always-drop-experience.patch b/purpur-server/minecraft-patches/features/0019-Mobs-always-drop-experience.patch similarity index 83% rename from purpur-server/minecraft-patches/unapplied-features/0019-Mobs-always-drop-experience.patch rename to purpur-server/minecraft-patches/features/0019-Mobs-always-drop-experience.patch index c3b2e4fcc..e612430fa 100644 --- a/purpur-server/minecraft-patches/unapplied-features/0019-Mobs-always-drop-experience.patch +++ b/purpur-server/minecraft-patches/features/0019-Mobs-always-drop-experience.patch @@ -23,10 +23,10 @@ index 626463a20f49c807eae86b30fe38c514311abd88..237408b7dc923b04addba1d671ad07fb public boolean isFlapping() { return !this.isResting() && this.tickCount % 10.0F == 0.0F; diff --git a/net/minecraft/world/entity/animal/axolotl/Axolotl.java b/net/minecraft/world/entity/animal/axolotl/Axolotl.java -index 72583935d49eb513e1e3211863865f154e742aeb..374c980e28f250e67fc045e9e1080aabe952710d 100644 +index 523358fb9bfb393dde41fb90fed40ab8a54ba107..57b34d61c972123a2871da5abba851fbe656ff75 100644 --- a/net/minecraft/world/entity/animal/axolotl/Axolotl.java +++ b/net/minecraft/world/entity/animal/axolotl/Axolotl.java -@@ -156,6 +156,13 @@ public class Axolotl extends Animal implements Bucketable { +@@ -161,6 +161,13 @@ public class Axolotl extends Animal implements Bucketable { } // Purpur end - Toggle for water sensitive mob damage @@ -41,10 +41,10 @@ index 72583935d49eb513e1e3211863865f154e742aeb..374c980e28f250e67fc045e9e1080aab public float getWalkTargetValue(final BlockPos pos, final LevelReader level) { return 0.0F; diff --git a/net/minecraft/world/entity/animal/bee/Bee.java b/net/minecraft/world/entity/animal/bee/Bee.java -index df53953b532ebb4cdc78ea1e1cab0b0ed48ce960..d344b4bb8515fb66d1ed33a0e6870c96927e6c72 100644 +index f4e063e0fe64e26f926523765eba83a8a61d6404..2a623511d609cfd3b4a9e056e12f18d19c2d8a96 100644 --- a/net/minecraft/world/entity/animal/bee/Bee.java +++ b/net/minecraft/world/entity/animal/bee/Bee.java -@@ -501,6 +501,13 @@ public class Bee extends Animal implements FlyingAnimal, NeutralMob { +@@ -499,6 +499,13 @@ public class Bee extends Animal implements NeutralMob { } // Purpur end - Toggle for water sensitive mob damage @@ -59,10 +59,10 @@ index df53953b532ebb4cdc78ea1e1cab0b0ed48ce960..d344b4bb8515fb66d1ed33a0e6870c96 public long getPersistentAngerEndTime() { return this.entityData.get(DATA_ANGER_END_TIME); diff --git a/net/minecraft/world/entity/animal/chicken/Chicken.java b/net/minecraft/world/entity/animal/chicken/Chicken.java -index 4a59e133fc6c68f3b3d495c62bb965718643f6b8..c75abd1befdbcf1ace817cf243a50945cf706e95 100644 +index fed0cce13f0b75395ba4398e2cc79b142c289e68..4c1ee5c54b882c85b122fcb0909b92204798d0ce 100644 --- a/net/minecraft/world/entity/animal/chicken/Chicken.java +++ b/net/minecraft/world/entity/animal/chicken/Chicken.java -@@ -120,6 +120,13 @@ public class Chicken extends Animal { +@@ -125,6 +125,13 @@ public class Chicken extends Animal { } // Purpur end - Toggle for water sensitive mob damage @@ -77,10 +77,10 @@ index 4a59e133fc6c68f3b3d495c62bb965718643f6b8..c75abd1befdbcf1ace817cf243a50945 protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/animal/cow/Cow.java b/net/minecraft/world/entity/animal/cow/Cow.java -index cdd404f64e196629dd61035675aac984619f1e1c..8e90f9163bcd93691bb40d1db02e06381ebe0182 100644 +index 70edf30006f3042974a90f6f737d249675b47d16..b084e914bc473aa739be988a03b98085d0a795a7 100644 --- a/net/minecraft/world/entity/animal/cow/Cow.java +++ b/net/minecraft/world/entity/animal/cow/Cow.java -@@ -76,6 +76,13 @@ public class Cow extends AbstractCow { +@@ -84,6 +84,13 @@ public class Cow extends AbstractCow { } // Purpur end - Toggle for water sensitive mob damage @@ -95,10 +95,10 @@ index cdd404f64e196629dd61035675aac984619f1e1c..8e90f9163bcd93691bb40d1db02e0638 protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/animal/cow/MushroomCow.java b/net/minecraft/world/entity/animal/cow/MushroomCow.java -index 9bdc0bb89e554957c70d97e6ca60f1c4aa1ef91b..39595cc7d2a74e067beb9c9f9c07c941d34b10ed 100644 +index fdc5cc7fe6c3955ae04b184d189f1156b6f2af9a..b95e6f21b1cfaeae1ca4340c7fe0d6cb2a0804c7 100644 --- a/net/minecraft/world/entity/animal/cow/MushroomCow.java +++ b/net/minecraft/world/entity/animal/cow/MushroomCow.java -@@ -99,6 +99,13 @@ public class MushroomCow extends AbstractCow implements Shearable { +@@ -107,6 +107,13 @@ public class MushroomCow extends AbstractCow implements Shearable { } // Purpur end - Toggle for water sensitive mob damage @@ -113,10 +113,10 @@ index 9bdc0bb89e554957c70d97e6ca60f1c4aa1ef91b..39595cc7d2a74e067beb9c9f9c07c941 public float getWalkTargetValue(final BlockPos pos, final LevelReader level) { return level.getBlockState(pos.below()).is(Blocks.MYCELIUM) ? 10.0F : level.getPathfindingCostFromLightLevels(pos); diff --git a/net/minecraft/world/entity/animal/dolphin/Dolphin.java b/net/minecraft/world/entity/animal/dolphin/Dolphin.java -index 58ce1ab82ab9883853eeffd103a1b72053c59798..048deece8e45f51d3bad36ef0afd39847086aa9f 100644 +index 68c59f9b7048c9e523c3d33d0ab444d430e491ef..d363e9da76a292c5d388f4b8a81e54f1322f5bd7 100644 --- a/net/minecraft/world/entity/animal/dolphin/Dolphin.java +++ b/net/minecraft/world/entity/animal/dolphin/Dolphin.java -@@ -169,6 +169,13 @@ public class Dolphin extends AgeableWaterCreature { +@@ -176,6 +176,13 @@ public class Dolphin extends AgeableWaterCreature { } // Purpur end - Toggle for water sensitive mob damage @@ -131,10 +131,10 @@ index 58ce1ab82ab9883853eeffd103a1b72053c59798..048deece8e45f51d3bad36ef0afd3984 public @Nullable SpawnGroupData finalizeSpawn( final ServerLevelAccessor level, final DifficultyInstance difficulty, final EntitySpawnReason spawnReason, final @Nullable SpawnGroupData groupData diff --git a/net/minecraft/world/entity/animal/equine/Donkey.java b/net/minecraft/world/entity/animal/equine/Donkey.java -index 5e0846fcaccfab5edbeb90bc61c2360cecf7a0c4..d58d70173bc475dd22d9d4f36a9cae8d0942e050 100644 +index a74124c9910c121c834eb7510f3e6a54557c8c07..13998bb4fa18e2ed14070b4eadc003f845faa462 100644 --- a/net/minecraft/world/entity/animal/equine/Donkey.java +++ b/net/minecraft/world/entity/animal/equine/Donkey.java -@@ -54,6 +54,13 @@ public class Donkey extends AbstractChestedHorse { +@@ -55,6 +55,13 @@ public class Donkey extends AbstractChestedHorse { } // Purpur end - Toggle for water sensitive mob damage @@ -149,10 +149,10 @@ index 5e0846fcaccfab5edbeb90bc61c2360cecf7a0c4..d58d70173bc475dd22d9d4f36a9cae8d public SoundEvent getAmbientSound() { return SoundEvents.DONKEY_AMBIENT; diff --git a/net/minecraft/world/entity/animal/equine/Horse.java b/net/minecraft/world/entity/animal/equine/Horse.java -index 64603ad973bdb697ca75642e8e42e7052efd4191..5d643be94db358e4093cbb00659a4e9066dddd4a 100644 +index 187f72ab0fa2fa623e4b7ea825a640f1b1d42d72..3350900b8b5824048d5d25ff216c86274b195ebc 100644 --- a/net/minecraft/world/entity/animal/equine/Horse.java +++ b/net/minecraft/world/entity/animal/equine/Horse.java -@@ -86,6 +86,13 @@ public class Horse extends AbstractHorse { +@@ -87,6 +87,13 @@ public class Horse extends AbstractHorse { } // Purpur end - Toggle for water sensitive mob damage @@ -167,10 +167,10 @@ index 64603ad973bdb697ca75642e8e42e7052efd4191..5d643be94db358e4093cbb00659a4e90 protected void randomizeAttributes(final RandomSource random) { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(generateMaxHealth(random::nextInt)); diff --git a/net/minecraft/world/entity/animal/equine/Llama.java b/net/minecraft/world/entity/animal/equine/Llama.java -index 4b7a9c76df89cb0494db9375940bc219093f04c1..36cc05946f0760eb7b5f3523e12a58a836161e87 100644 +index 75eb96b3a62fcb07b93edbf629965fe75d385c38..2e29ad25c1ca442de5e5b0dc6108682f943a2aa3 100644 --- a/net/minecraft/world/entity/animal/equine/Llama.java +++ b/net/minecraft/world/entity/animal/equine/Llama.java -@@ -165,6 +165,13 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob { +@@ -166,6 +166,13 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob { } // Purpur end - Toggle for water sensitive mob damage @@ -185,10 +185,10 @@ index 4b7a9c76df89cb0494db9375940bc219093f04c1..36cc05946f0760eb7b5f3523e12a58a8 return false; } diff --git a/net/minecraft/world/entity/animal/equine/Mule.java b/net/minecraft/world/entity/animal/equine/Mule.java -index 291176b409097d15c2afff7fe8deb17ba07dbc12..8425956ded89a1ffe5a56f410f155092250ac78c 100644 +index c54a7033d40e973b7c93de5276d20451306b48bc..096315eef536b8d240ea9a61bee499d4c30d8ddc 100644 --- a/net/minecraft/world/entity/animal/equine/Mule.java +++ b/net/minecraft/world/entity/animal/equine/Mule.java -@@ -53,6 +53,13 @@ public class Mule extends AbstractChestedHorse { +@@ -54,6 +54,13 @@ public class Mule extends AbstractChestedHorse { } // Purpur end - Toggle for water sensitive mob damage @@ -203,10 +203,10 @@ index 291176b409097d15c2afff7fe8deb17ba07dbc12..8425956ded89a1ffe5a56f410f155092 public SoundEvent getAmbientSound() { return SoundEvents.MULE_AMBIENT; diff --git a/net/minecraft/world/entity/animal/equine/SkeletonHorse.java b/net/minecraft/world/entity/animal/equine/SkeletonHorse.java -index 02aa9a838e0cbd62bc0a2e0f30e0cfc9a3995a41..ed25701549c7453be446b29b9f08d2093388e679 100644 +index a5a2923dbc0b4a090c29de16bd564bfd78ca8f9c..7df95f57044a29d51af9d898535f1794941d3f31 100644 --- a/net/minecraft/world/entity/animal/equine/SkeletonHorse.java +++ b/net/minecraft/world/entity/animal/equine/SkeletonHorse.java -@@ -81,6 +81,13 @@ public class SkeletonHorse extends AbstractHorse { +@@ -82,6 +82,13 @@ public class SkeletonHorse extends AbstractHorse { } // Purpur end - Toggle for water sensitive mob damage @@ -221,10 +221,10 @@ index 02aa9a838e0cbd62bc0a2e0f30e0cfc9a3995a41..ed25701549c7453be446b29b9f08d209 return createBaseHorseAttributes().add(Attributes.MAX_HEALTH, 15.0).add(Attributes.MOVEMENT_SPEED, 0.2F); } diff --git a/net/minecraft/world/entity/animal/equine/TraderLlama.java b/net/minecraft/world/entity/animal/equine/TraderLlama.java -index a9fcf7827e6a6b061c2a861d1e59bca80117699b..78a22fb382da7623bd05f5ff097fe06fc0dfec1c 100644 +index e9bd6334f0713d8fab91d1cfddfb8d4580faaa5b..492d19954258ce6a18b01aaa486c6e53f0377db5 100644 --- a/net/minecraft/world/entity/animal/equine/TraderLlama.java +++ b/net/minecraft/world/entity/animal/equine/TraderLlama.java -@@ -84,6 +84,13 @@ public class TraderLlama extends Llama { +@@ -85,6 +85,13 @@ public class TraderLlama extends Llama { } // Purpur end - Toggle for water sensitive mob damage @@ -239,10 +239,10 @@ index a9fcf7827e6a6b061c2a861d1e59bca80117699b..78a22fb382da7623bd05f5ff097fe06f public boolean isTraderLlama() { return true; diff --git a/net/minecraft/world/entity/animal/equine/ZombieHorse.java b/net/minecraft/world/entity/animal/equine/ZombieHorse.java -index 426b468ee821a7441d15dae3634032535cb60725..54cbd5136997bdec34df0f822e21ffe5046936d6 100644 +index 9c8ce7eee6bf462478a0755b074e229133eee1c3..ad73c42d6c375595f2143c5b966c011dd5d1dc0e 100644 --- a/net/minecraft/world/entity/animal/equine/ZombieHorse.java +++ b/net/minecraft/world/entity/animal/equine/ZombieHorse.java -@@ -93,6 +93,13 @@ public class ZombieHorse extends AbstractHorse { +@@ -94,6 +94,13 @@ public class ZombieHorse extends AbstractHorse { } // Purpur end - Toggle for water sensitive mob damage @@ -257,10 +257,10 @@ index 426b468ee821a7441d15dae3634032535cb60725..54cbd5136997bdec34df0f822e21ffe5 return createBaseHorseAttributes().add(Attributes.MAX_HEALTH, 25.0); } diff --git a/net/minecraft/world/entity/animal/feline/Cat.java b/net/minecraft/world/entity/animal/feline/Cat.java -index 609cf964f5020728321da2e08ccd94dc925cc4c7..007e1ed1eae0d04a086bd7682351638d3d65a90d 100644 +index 3e8ba2867b37b9171375c81ece0d534692c9ac68..ad93261cdbe93487ea2168ae3bd3f937cee0eb53 100644 --- a/net/minecraft/world/entity/animal/feline/Cat.java +++ b/net/minecraft/world/entity/animal/feline/Cat.java -@@ -142,6 +142,13 @@ public class Cat extends TamableAnimal { +@@ -149,6 +149,13 @@ public class Cat extends TamableAnimal { } // Purpur end - Toggle for water sensitive mob damage @@ -275,10 +275,10 @@ index 609cf964f5020728321da2e08ccd94dc925cc4c7..007e1ed1eae0d04a086bd7682351638d protected void registerGoals() { this.temptGoal = new Cat.CatTemptGoal(this, 0.6, i -> i.is(ItemTags.CAT_FOOD), true); diff --git a/net/minecraft/world/entity/animal/feline/Ocelot.java b/net/minecraft/world/entity/animal/feline/Ocelot.java -index 9a582b789d3b3037c510c063a07f99f92ac58a1c..2fbb1668448ca7f1d2e08293a0a3e81c6a0d13a4 100644 +index 528341355817ae603eed895beb67814ef4fc12f2..c56715a81f3a65b370d85574a1b57f60284df55e 100644 --- a/net/minecraft/world/entity/animal/feline/Ocelot.java +++ b/net/minecraft/world/entity/animal/feline/Ocelot.java -@@ -105,6 +105,13 @@ public class Ocelot extends Animal { +@@ -112,6 +112,13 @@ public class Ocelot extends Animal { } // Purpur end - Toggle for water sensitive mob damage @@ -311,7 +311,7 @@ index f44214eaa47c2021f7ca9c84a7b89be15fecb5bc..7d4bfca8b2608c18fc96e14f1ef91212 public ItemStack getBucketItemStack() { return new ItemStack(Items.COD_BUCKET); diff --git a/net/minecraft/world/entity/animal/fish/Pufferfish.java b/net/minecraft/world/entity/animal/fish/Pufferfish.java -index a0f1ea76011dc3aa6e8a702528062f5fafe07e01..a6ac30e39b15493cdee194a79d744d85d54ecdde 100644 +index 60f2b9411bf7acf02a66e91377b6042b421b56ab..44fcb7dc3f8d85ae468f9ef7208d2ca089e871d6 100644 --- a/net/minecraft/world/entity/animal/fish/Pufferfish.java +++ b/net/minecraft/world/entity/animal/fish/Pufferfish.java @@ -73,6 +73,13 @@ public class Pufferfish extends AbstractFish { @@ -329,7 +329,7 @@ index a0f1ea76011dc3aa6e8a702528062f5fafe07e01..a6ac30e39b15493cdee194a79d744d85 protected void defineSynchedData(final SynchedEntityData.Builder entityData) { super.defineSynchedData(entityData); diff --git a/net/minecraft/world/entity/animal/fish/Salmon.java b/net/minecraft/world/entity/animal/fish/Salmon.java -index ddf23647e17bdb04babae1832486efb52ab9f81a..97d8471bd04a6098653dbfbd07dbea97aeafc821 100644 +index 53f24f3f22c41d4a3a401c3da92867d5ac96febd..a001040061a12a4c8c86eb377893e33c584996b9 100644 --- a/net/minecraft/world/entity/animal/fish/Salmon.java +++ b/net/minecraft/world/entity/animal/fish/Salmon.java @@ -67,6 +67,13 @@ public class Salmon extends AbstractSchoolingFish { @@ -365,10 +365,10 @@ index dc2800dd2f4c9f71c79d9f012be17398263d033d..adb530b59ce6080e281aad21e2165fd1 return "entity.minecraft.tropical_fish.predefined." + index; } diff --git a/net/minecraft/world/entity/animal/fox/Fox.java b/net/minecraft/world/entity/animal/fox/Fox.java -index e74adaebbf28247e8bc85671ca294c9d9843ca08..ea23a64654ebaaf97fe9e5c0eab0f31f54d94d22 100644 +index 4553c0d7528f3aea8434e353e4daf78b53ac831d..ca5b0b8081c4943bfbfba4f0f9284f0fdda3cf9f 100644 --- a/net/minecraft/world/entity/animal/fox/Fox.java +++ b/net/minecraft/world/entity/animal/fox/Fox.java -@@ -214,6 +214,13 @@ public class Fox extends Animal { +@@ -221,6 +221,13 @@ public class Fox extends Animal { } // Purpur end - Toggle for water sensitive mob damage @@ -383,10 +383,10 @@ index e74adaebbf28247e8bc85671ca294c9d9843ca08..ea23a64654ebaaf97fe9e5c0eab0f31f protected void defineSynchedData(final SynchedEntityData.Builder entityData) { super.defineSynchedData(entityData); diff --git a/net/minecraft/world/entity/animal/goat/Goat.java b/net/minecraft/world/entity/animal/goat/Goat.java -index ea0aace589356cb2719925d5287bc5672eb45993..88e672d51a8b7b74e7760529ed3fdb8835be795e 100644 +index 9744d757ae7dcc31291db469539ebd58db7b08a2..363a6f9e8d13312f93562cf3a2b1668bc53adc66 100644 --- a/net/minecraft/world/entity/animal/goat/Goat.java +++ b/net/minecraft/world/entity/animal/goat/Goat.java -@@ -131,6 +131,13 @@ public class Goat extends Animal { +@@ -137,6 +137,13 @@ public class Goat extends Animal { } // Purpur end - Toggle for water sensitive mob damage @@ -401,7 +401,7 @@ index ea0aace589356cb2719925d5287bc5672eb45993..88e672d51a8b7b74e7760529ed3fdb88 protected Brain makeBrain(final Brain.Packed packedBrain) { return BRAIN_PROVIDER.makeBrain(this, packedBrain); diff --git a/net/minecraft/world/entity/animal/golem/CopperGolem.java b/net/minecraft/world/entity/animal/golem/CopperGolem.java -index ac416c47f86b2ec4c8c58a24491b81504e3a8212..eb93463395c8a580faa7c5d0aaa8bf11cdd05f2d 100644 +index 53e17b3ebb5f66f00870c45fb0389ace08a2c144..646f5ce1df4b125427f2020788369549befb2694 100644 --- a/net/minecraft/world/entity/animal/golem/CopperGolem.java +++ b/net/minecraft/world/entity/animal/golem/CopperGolem.java @@ -151,6 +151,13 @@ public class CopperGolem extends AbstractGolem implements ContainerUser, Shearab @@ -419,10 +419,10 @@ index ac416c47f86b2ec4c8c58a24491b81504e3a8212..eb93463395c8a580faa7c5d0aaa8bf11 return Mob.createMobAttributes().add(Attributes.MOVEMENT_SPEED, 0.2F).add(Attributes.STEP_HEIGHT, 1.0).add(Attributes.MAX_HEALTH, 12.0); } diff --git a/net/minecraft/world/entity/animal/golem/IronGolem.java b/net/minecraft/world/entity/animal/golem/IronGolem.java -index 305b6b9b5575c9351990d36f3bd2e9721a00dc2b..fa1fb6251e1a50517a2282a933a67cc192570edb 100644 +index 0d47b1d7ffb09a883edde3c5c0a8e6eadec08642..e7114a76761bc89c76871868c8ed9d6dbf141a67 100644 --- a/net/minecraft/world/entity/animal/golem/IronGolem.java +++ b/net/minecraft/world/entity/animal/golem/IronGolem.java -@@ -106,6 +106,13 @@ public class IronGolem extends AbstractGolem implements NeutralMob { +@@ -107,6 +107,13 @@ public class IronGolem extends AbstractGolem implements NeutralMob { } // Purpur end - Toggle for water sensitive mob damage @@ -437,7 +437,7 @@ index 305b6b9b5575c9351990d36f3bd2e9721a00dc2b..fa1fb6251e1a50517a2282a933a67cc1 protected void registerGoals() { if (this.level().purpurConfig.ironGolemPoppyCalm) this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.ReceiveFlower(this)); // Purpur - Iron golem calm anger options diff --git a/net/minecraft/world/entity/animal/golem/SnowGolem.java b/net/minecraft/world/entity/animal/golem/SnowGolem.java -index 2d3127f6846ff9eda1a0b89764dc837da6e7e0c7..ffb0e9cc4f8604fd03cb3a2412001182fb47bce8 100644 +index efd9770fb2401650e4459fab8066cb0da9870e58..db2e018781f941a38c93b0aae27570ba1cf2048d 100644 --- a/net/minecraft/world/entity/animal/golem/SnowGolem.java +++ b/net/minecraft/world/entity/animal/golem/SnowGolem.java @@ -87,6 +87,13 @@ public class SnowGolem extends AbstractGolem implements RangedAttackMob, Shearab @@ -455,10 +455,10 @@ index 2d3127f6846ff9eda1a0b89764dc837da6e7e0c7..ffb0e9cc4f8604fd03cb3a2412001182 protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables diff --git a/net/minecraft/world/entity/animal/happyghast/HappyGhast.java b/net/minecraft/world/entity/animal/happyghast/HappyGhast.java -index 2ab9e28e84193ea76e09008a230fbdeb5acbf4c1..790b061344b9e3c500a388bddd158bc4221fb41d 100644 +index f37773ac8ec943744a8989b443e913710e13230b..0c56a19f0de0fa811a61b24a998fe2efce56d78a 100644 --- a/net/minecraft/world/entity/animal/happyghast/HappyGhast.java +++ b/net/minecraft/world/entity/animal/happyghast/HappyGhast.java -@@ -167,6 +167,13 @@ public class HappyGhast extends Animal { +@@ -171,6 +171,13 @@ public class HappyGhast extends Animal { } // Purpur end - Toggle for water sensitive mob damage @@ -473,10 +473,10 @@ index 2ab9e28e84193ea76e09008a230fbdeb5acbf4c1..790b061344b9e3c500a388bddd158bc4 protected void ageBoundaryReached() { if (this.isBaby()) { diff --git a/net/minecraft/world/entity/animal/nautilus/Nautilus.java b/net/minecraft/world/entity/animal/nautilus/Nautilus.java -index e89c0638f7b6d1a463a895dbab5994c15aa4add3..e4c7f1aa39443b26758caac252fe90b2b766b707 100644 +index d173ceba9629f7a0dca31aefc9df0bfa70d75738..1584f5a505ecf91897ed9105acf12add21510c0d 100644 --- a/net/minecraft/world/entity/animal/nautilus/Nautilus.java +++ b/net/minecraft/world/entity/animal/nautilus/Nautilus.java -@@ -46,6 +46,13 @@ public class Nautilus extends AbstractNautilus { +@@ -55,6 +55,13 @@ public class Nautilus extends AbstractNautilus { } // Purpur end - Make entity breeding times configurable @@ -491,7 +491,7 @@ index e89c0638f7b6d1a463a895dbab5994c15aa4add3..e4c7f1aa39443b26758caac252fe90b2 protected Brain makeBrain(final Brain.Packed packedBrain) { return BRAIN_PROVIDER.makeBrain(this, packedBrain); diff --git a/net/minecraft/world/entity/animal/nautilus/ZombieNautilus.java b/net/minecraft/world/entity/animal/nautilus/ZombieNautilus.java -index ab97449bfa5e8b5615e0f2b6b16be2fe7e4233fd..869cec108d33626362400e9aa4890a92e49151e4 100644 +index da60906faaca79efbfd29ed05b01a0c07978bab2..9aed9eb7a7c3b3fb653d6fed5f8d79f7c32b2b94 100644 --- a/net/minecraft/world/entity/animal/nautilus/ZombieNautilus.java +++ b/net/minecraft/world/entity/animal/nautilus/ZombieNautilus.java @@ -67,6 +67,13 @@ public class ZombieNautilus extends AbstractNautilus { @@ -509,10 +509,10 @@ index ab97449bfa5e8b5615e0f2b6b16be2fe7e4233fd..869cec108d33626362400e9aa4890a92 return AbstractNautilus.createAttributes().add(Attributes.MOVEMENT_SPEED, 1.1F); } diff --git a/net/minecraft/world/entity/animal/panda/Panda.java b/net/minecraft/world/entity/animal/panda/Panda.java -index 4249aff88a1768f2f2184a09efe730752545b164..f509b3a3a8f1021d5292ec6ed0a6a91e09787754 100644 +index af66c192d57d4f5b49b7a0e4c00cfbce6616eb9b..29569ad09390775aaa47b1da89aff061786137d6 100644 --- a/net/minecraft/world/entity/animal/panda/Panda.java +++ b/net/minecraft/world/entity/animal/panda/Panda.java -@@ -159,6 +159,13 @@ public class Panda extends Animal { +@@ -161,6 +161,13 @@ public class Panda extends Animal { } // Purpur end - Toggle for water sensitive mob damage @@ -527,10 +527,10 @@ index 4249aff88a1768f2f2184a09efe730752545b164..f509b3a3a8f1021d5292ec6ed0a6a91e protected boolean canDispenserEquipIntoSlot(final EquipmentSlot slot) { return slot == EquipmentSlot.MAINHAND && this.canPickUpLoot(); diff --git a/net/minecraft/world/entity/animal/parrot/Parrot.java b/net/minecraft/world/entity/animal/parrot/Parrot.java -index 0f5da739a7bed82a1ccef173d379a78981f37939..6df09c069c56fdcea4d44423d2c8cdba088ea305 100644 +index e43fe2c45e79526ba954dba2260c49075ae1c556..0204a35ab612a6f59543d29efc6443fa9ecbffca 100644 --- a/net/minecraft/world/entity/animal/parrot/Parrot.java +++ b/net/minecraft/world/entity/animal/parrot/Parrot.java -@@ -221,6 +221,13 @@ public class Parrot extends ShoulderRidingEntity implements FlyingAnimal { +@@ -221,6 +221,13 @@ public class Parrot extends ShoulderRidingEntity { } // Purpur end - Toggle for water sensitive mob damage @@ -545,10 +545,10 @@ index 0f5da739a7bed82a1ccef173d379a78981f37939..6df09c069c56fdcea4d44423d2c8cdba public @Nullable SpawnGroupData finalizeSpawn( final ServerLevelAccessor level, final DifficultyInstance difficulty, final EntitySpawnReason spawnReason, @Nullable SpawnGroupData groupData diff --git a/net/minecraft/world/entity/animal/pig/Pig.java b/net/minecraft/world/entity/animal/pig/Pig.java -index 5413851446237e7984c8da4172c31b0dd9affc60..93ebe564d7ee8220c624058e4ae1d5ae6aa59e5d 100644 +index 9463a70aec69af7d680caf35cbab7ee4b975b6ea..0bb58d534d3966bbd4760f1b909e3497a7f7ac06 100644 --- a/net/minecraft/world/entity/animal/pig/Pig.java +++ b/net/minecraft/world/entity/animal/pig/Pig.java -@@ -107,6 +107,13 @@ public class Pig extends Animal implements ItemSteerable { +@@ -115,6 +115,13 @@ public class Pig extends Animal implements ItemSteerable { } // Purpur end - Toggle for water sensitive mob damage @@ -563,10 +563,10 @@ index 5413851446237e7984c8da4172c31b0dd9affc60..93ebe564d7ee8220c624058e4ae1d5ae protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/animal/polarbear/PolarBear.java b/net/minecraft/world/entity/animal/polarbear/PolarBear.java -index a9e64a4053755050099cdcaef870a0099a867575..ee3bc947ef81ea27b02135c0f0ea6d6168ca9fbd 100644 +index c47640ebcf2db48bb27b671c907f3270eac3c126..46276e32dcc7884758e333c45f65ce03133c04fe 100644 --- a/net/minecraft/world/entity/animal/polarbear/PolarBear.java +++ b/net/minecraft/world/entity/animal/polarbear/PolarBear.java -@@ -140,6 +140,13 @@ public class PolarBear extends Animal implements NeutralMob { +@@ -146,6 +146,13 @@ public class PolarBear extends Animal implements NeutralMob { } // Purpur end - Toggle for water sensitive mob damage @@ -579,12 +579,12 @@ index a9e64a4053755050099cdcaef870a0099a867575..ee3bc947ef81ea27b02135c0f0ea6d61 + @Override public @Nullable AgeableMob getBreedOffspring(final ServerLevel level, final AgeableMob partner) { - return EntityType.POLAR_BEAR.create(level, EntitySpawnReason.BREEDING); + return EntityTypes.POLAR_BEAR.create(level, EntitySpawnReason.BREEDING); diff --git a/net/minecraft/world/entity/animal/rabbit/Rabbit.java b/net/minecraft/world/entity/animal/rabbit/Rabbit.java -index 9116e659fff5daf09257739f6c04e32d1dfc70ca..a6ccaafe6c025bda6b82be87ff4689117cc7fbf3 100644 +index d7b287459fb0633470efffd70dda67ad8177615a..c83df47628d63cafa5d47f76948b80e303a9ef0b 100644 --- a/net/minecraft/world/entity/animal/rabbit/Rabbit.java +++ b/net/minecraft/world/entity/animal/rabbit/Rabbit.java -@@ -184,6 +184,13 @@ public class Rabbit extends Animal { +@@ -185,6 +185,13 @@ public class Rabbit extends Animal { } // Purpur end - Toggle for water sensitive mob damage @@ -599,10 +599,10 @@ index 9116e659fff5daf09257739f6c04e32d1dfc70ca..a6ccaafe6c025bda6b82be87ff468911 public void registerGoals() { this.goalSelector.addGoal(1, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/animal/sheep/Sheep.java b/net/minecraft/world/entity/animal/sheep/Sheep.java -index 49389028a34971bbd1c480ba91e2b53d3c26513c..f0ff3484c73b2348e7b2239517c8984422cd1bdd 100644 +index 0116de3318e769076481d3e5d479a810e235f0c0..341b88eae6d56911a3e3da71609fab4c15714de9 100644 --- a/net/minecraft/world/entity/animal/sheep/Sheep.java +++ b/net/minecraft/world/entity/animal/sheep/Sheep.java -@@ -102,6 +102,13 @@ public class Sheep extends Animal implements Shearable { +@@ -110,6 +110,13 @@ public class Sheep extends Animal implements Shearable { } // Purpur end - Toggle for water sensitive mob damage @@ -617,10 +617,10 @@ index 49389028a34971bbd1c480ba91e2b53d3c26513c..f0ff3484c73b2348e7b2239517c89844 protected void registerGoals() { this.eatBlockGoal = new EatBlockGoal(this); diff --git a/net/minecraft/world/entity/animal/squid/GlowSquid.java b/net/minecraft/world/entity/animal/squid/GlowSquid.java -index 1fa3d614dd1c45ec42caffbe92e3f8db02b399b1..0f4587df333a68627d6db18c0583ae1e7b936b15 100644 +index e11e4e9134db7e59bd7f3112605206ad1f36cab6..079d7dfd726670a5e3ed2811813190badfba696c 100644 --- a/net/minecraft/world/entity/animal/squid/GlowSquid.java +++ b/net/minecraft/world/entity/animal/squid/GlowSquid.java -@@ -64,6 +64,13 @@ public class GlowSquid extends Squid { +@@ -65,6 +65,13 @@ public class GlowSquid extends Squid { } // Purpur end - Toggle for water sensitive mob damage @@ -635,7 +635,7 @@ index 1fa3d614dd1c45ec42caffbe92e3f8db02b399b1..0f4587df333a68627d6db18c0583ae1e protected ParticleOptions getInkParticle() { return ParticleTypes.GLOW_SQUID_INK; diff --git a/net/minecraft/world/entity/animal/squid/Squid.java b/net/minecraft/world/entity/animal/squid/Squid.java -index 2b2272122a7ebaed6a995d09dab7a3db3ee0c594..d3809367a849ac56a0e57b5b2af01695d5a30193 100644 +index 6d6981635b4029a09ccc6115f0d17451089e09d4..cd1f9133775633eeeb12bbab0d4bb48f42b7efb0 100644 --- a/net/minecraft/world/entity/animal/squid/Squid.java +++ b/net/minecraft/world/entity/animal/squid/Squid.java @@ -111,6 +111,13 @@ public class Squid extends AgeableWaterCreature { @@ -653,10 +653,10 @@ index 2b2272122a7ebaed6a995d09dab7a3db3ee0c594..d3809367a849ac56a0e57b5b2af01695 protected void registerGoals() { this.goalSelector.addGoal(0, new Squid.SquidRandomMovementGoal(this)); diff --git a/net/minecraft/world/entity/animal/turtle/Turtle.java b/net/minecraft/world/entity/animal/turtle/Turtle.java -index 6d09c0de38f2c91d2a0ab6dd0b694ab42b48a981..37345edf599a43ac48274e30f5d7aa340051c649 100644 +index 1080f96351535e4caa29120c65727280e361a042..0481a0deeb6053ddc9be9bc835d2b95fba712982 100644 --- a/net/minecraft/world/entity/animal/turtle/Turtle.java +++ b/net/minecraft/world/entity/animal/turtle/Turtle.java -@@ -126,6 +126,13 @@ public class Turtle extends Animal { +@@ -127,6 +127,13 @@ public class Turtle extends Animal { } // Purpur end - Toggle for water sensitive mob damage @@ -671,10 +671,10 @@ index 6d09c0de38f2c91d2a0ab6dd0b694ab42b48a981..37345edf599a43ac48274e30f5d7aa34 this.homePos = pos; } diff --git a/net/minecraft/world/entity/animal/wolf/Wolf.java b/net/minecraft/world/entity/animal/wolf/Wolf.java -index 1587bcafa4b338a98e60743faab0b2ce9b923444..cf7e5a02b83dcf7d5d2b6121ebee0940600ebbba 100644 +index cdc12cabee85c7090ff317068a98b0acc973fdbe..af82e593ac58eaa0e7e8b4abd0d152cfb58d5c13 100644 --- a/net/minecraft/world/entity/animal/wolf/Wolf.java +++ b/net/minecraft/world/entity/animal/wolf/Wolf.java -@@ -226,6 +226,13 @@ public class Wolf extends TamableAnimal implements NeutralMob { +@@ -234,6 +234,13 @@ public class Wolf extends TamableAnimal implements NeutralMob { } // Purpur end - Toggle for water sensitive mob damage @@ -689,7 +689,7 @@ index 1587bcafa4b338a98e60743faab0b2ce9b923444..cf7e5a02b83dcf7d5d2b6121ebee0940 protected void registerGoals() { this.goalSelector.addGoal(1, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/boss/wither/WitherBoss.java b/net/minecraft/world/entity/boss/wither/WitherBoss.java -index 2a88f051740bba72bb48e7f23cbd12d216a2eb86..a043a320afc2d6e4780bb7382e0c4d0bd1d12ea8 100644 +index 7032f6b01ee36422952ce564a388c4e1ffeb05c5..44a9f5a1af987f4541a6848a92732df46dd1b2f5 100644 --- a/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/net/minecraft/world/entity/boss/wither/WitherBoss.java @@ -228,6 +228,13 @@ public class WitherBoss extends Monster implements RangedAttackMob { @@ -743,10 +743,10 @@ index 2d60c5e6426097302464e04bcfdd60abd08b96b9..56cfc2b7cf9bd7edc966f59de091d279 public SoundEvent getHurtSound(final DamageSource source) { return SoundEvents.CREEPER_HURT; diff --git a/net/minecraft/world/entity/monster/ElderGuardian.java b/net/minecraft/world/entity/monster/ElderGuardian.java -index a98967c7a76d8e25da9e31eaa8f2ae0bf0704c9d..54d3ab3cb7521f4f75bdd05b7fcf35e7195aa83d 100644 +index 68922bcf87052d7b13a78fd6f8daddcdec6b8614..bc3374274d0c204131d8baf3e1c1263d705adb2e 100644 --- a/net/minecraft/world/entity/monster/ElderGuardian.java +++ b/net/minecraft/world/entity/monster/ElderGuardian.java -@@ -58,6 +58,13 @@ public class ElderGuardian extends Guardian { +@@ -59,6 +59,13 @@ public class ElderGuardian extends Guardian { } // Purpur end - Toggle for water sensitive mob damage @@ -797,7 +797,7 @@ index 099476663f734f00b4979de7c2d0f13da5bf4909..3729137f6fa1bc2c8b886a02e8604918 protected void registerGoals() { this.goalSelector.addGoal(1, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/monster/Ghast.java b/net/minecraft/world/entity/monster/Ghast.java -index 14c5c70853bc8bef677c12f7e1884f472c293609..2a7960e4b431c4c1d4c10daea092e52f51cf3623 100644 +index 3b514d9102946166534e404181af287865655c32..bf5e977d395d2dbe0203d8b2488d7cb5ff0c08d3 100644 --- a/net/minecraft/world/entity/monster/Ghast.java +++ b/net/minecraft/world/entity/monster/Ghast.java @@ -90,6 +90,13 @@ public class Ghast extends Mob implements Enemy { @@ -833,7 +833,7 @@ index 43ebfe06ce2a8c15787d72a8ef54cd6c7cac2bfc..07dfe0e6fd431b8417fc7f823962e4d4 return Monster.createMonsterAttributes() .add(Attributes.MAX_HEALTH, 100.0) diff --git a/net/minecraft/world/entity/monster/Guardian.java b/net/minecraft/world/entity/monster/Guardian.java -index 3acf963c26ef5f269a95cdf8fe0da248adf22c83..61a5a7c77a53c29de8a9e61f6cbc68eb50142b3a 100644 +index 04d092ad64f58b898f210266a2aba758ccc0577b..f7c67e129d70012705e8d649995b8f82bf7b0796 100644 --- a/net/minecraft/world/entity/monster/Guardian.java +++ b/net/minecraft/world/entity/monster/Guardian.java @@ -104,6 +104,13 @@ public class Guardian extends Monster { @@ -850,26 +850,8 @@ index 3acf963c26ef5f269a95cdf8fe0da248adf22c83..61a5a7c77a53c29de8a9e61f6cbc68eb @Override protected void registerGoals() { MoveTowardsRestrictionGoal goal = new MoveTowardsRestrictionGoal(this, 1.0); -diff --git a/net/minecraft/world/entity/monster/MagmaCube.java b/net/minecraft/world/entity/monster/MagmaCube.java -index fba41f261e57a050d4e24d2611cc27edcbb84ddf..4e757fc7d49c22f79eceafc02ff05da5ea4a04e9 100644 ---- a/net/minecraft/world/entity/monster/MagmaCube.java -+++ b/net/minecraft/world/entity/monster/MagmaCube.java -@@ -75,6 +75,13 @@ public class MagmaCube extends Slime { - } - // Purpur end - Toggle for water sensitive mob damage - -+ // Purpur start - Mobs always drop experience -+ @Override -+ protected boolean isAlwaysExperienceDropper() { -+ return this.level().purpurConfig.magmaCubeAlwaysDropExp; -+ } -+ // Purpur end - Mobs always drop experience -+ - public static AttributeSupplier.Builder createAttributes() { - return Monster.createMonsterAttributes().add(Attributes.MOVEMENT_SPEED, 0.2F); - } diff --git a/net/minecraft/world/entity/monster/Phantom.java b/net/minecraft/world/entity/monster/Phantom.java -index 356f5c6e5534b1b36bcb5c44021e0e48194fb645..31f668c097db2986c29dadc042de2e90ff684780 100644 +index 9d646f3d924d3c2fdb2b396e4501111912fba043..c6eecc3928664672d3e191b621d3daec735e70c9 100644 --- a/net/minecraft/world/entity/monster/Phantom.java +++ b/net/minecraft/world/entity/monster/Phantom.java @@ -136,6 +136,13 @@ public class Phantom extends Mob implements Enemy { @@ -887,10 +869,10 @@ index 356f5c6e5534b1b36bcb5c44021e0e48194fb645..31f668c097db2986c29dadc042de2e90 public boolean isFlapping() { return (this.getUniqueFlapTickOffset() + this.tickCount) % TICKS_PER_FLAP == 0; diff --git a/net/minecraft/world/entity/monster/Ravager.java b/net/minecraft/world/entity/monster/Ravager.java -index 3e0403635cb9ce3d0894705db6727d9a7cc4d628..700799d2cedea989ac60d7c5dfc563c99db9f537 100644 +index 9afb9be57a6223cc262a9357a42cd7d19953bef5..663deb587323fe10c7fca63d5c5196d00c30be3a 100644 --- a/net/minecraft/world/entity/monster/Ravager.java +++ b/net/minecraft/world/entity/monster/Ravager.java -@@ -108,6 +108,13 @@ public class Ravager extends Raider { +@@ -109,6 +109,13 @@ public class Ravager extends Raider { } // Purpur end - Toggle for water sensitive mob damage @@ -905,7 +887,7 @@ index 3e0403635cb9ce3d0894705db6727d9a7cc4d628..700799d2cedea989ac60d7c5dfc563c9 protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/Shulker.java b/net/minecraft/world/entity/monster/Shulker.java -index 8e33c702bf4b6a2ad2af8e730f9fecef579ab2ad..44a2809ca8603228e19a0e0cde50c6a64ebc412e 100644 +index bfef619b3b21ee2071fd74c82b1b658f239cd402..3f4bad4bb552da43d6ed037b0595808203da4660 100644 --- a/net/minecraft/world/entity/monster/Shulker.java +++ b/net/minecraft/world/entity/monster/Shulker.java @@ -141,6 +141,13 @@ public class Shulker extends AbstractGolem implements Enemy { @@ -923,7 +905,7 @@ index 8e33c702bf4b6a2ad2af8e730f9fecef579ab2ad..44a2809ca8603228e19a0e0cde50c6a6 protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables diff --git a/net/minecraft/world/entity/monster/Silverfish.java b/net/minecraft/world/entity/monster/Silverfish.java -index e6bc3451f2f5921c5f8773749962b4334328ac88..8fe686109b7b4fb900c0f61db5de282496470f68 100644 +index d8f696287021d3f20949002f5229d1caf40c9d4f..16c23d984bebe489d75695ce0c1b3d2ce8f2d38c 100644 --- a/net/minecraft/world/entity/monster/Silverfish.java +++ b/net/minecraft/world/entity/monster/Silverfish.java @@ -72,6 +72,13 @@ public class Silverfish extends Monster { @@ -940,29 +922,11 @@ index e6bc3451f2f5921c5f8773749962b4334328ac88..8fe686109b7b4fb900c0f61db5de2824 @Override protected void registerGoals() { this.friendsGoal = new Silverfish.SilverfishWakeUpFriendsGoal(this); -diff --git a/net/minecraft/world/entity/monster/Slime.java b/net/minecraft/world/entity/monster/Slime.java -index 834125d0ded28a1d7a39a3e5fcf6a5bb967c7f91..0636fdf31330da5523b9ad11869776a21a6f68b1 100644 ---- a/net/minecraft/world/entity/monster/Slime.java -+++ b/net/minecraft/world/entity/monster/Slime.java -@@ -142,6 +142,13 @@ public class Slime extends Mob implements Enemy { - } - // Purpur end - Toggle for water sensitive mob damage - -+ // Purpur start - Mobs always drop experience -+ @Override -+ protected boolean isAlwaysExperienceDropper() { -+ return this.level().purpurConfig.slimeAlwaysDropExp; -+ } -+ // Purpur end - Mobs always drop experience -+ - @Override - protected void registerGoals() { - this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables diff --git a/net/minecraft/world/entity/monster/Strider.java b/net/minecraft/world/entity/monster/Strider.java -index eacbaa4a9c9eb30a29eade20b31860f9ec6e1a69..5528ef9fab00cc65f7c36f8f87b458c33515ae04 100644 +index 584aee58a1319da937eeb78d3015bc48e705bd64..929bd327f01ed28462c4ce4e7d2f3e1886aa4157 100644 --- a/net/minecraft/world/entity/monster/Strider.java +++ b/net/minecraft/world/entity/monster/Strider.java -@@ -125,6 +125,13 @@ public class Strider extends Animal implements ItemSteerable { +@@ -131,6 +131,13 @@ public class Strider extends Animal implements ItemSteerable { } // Purpur end - Make entity breeding times configurable @@ -977,10 +941,10 @@ index eacbaa4a9c9eb30a29eade20b31860f9ec6e1a69..5528ef9fab00cc65f7c36f8f87b458c3 final EntityType ignoredType, final LevelAccessor level, diff --git a/net/minecraft/world/entity/monster/Vex.java b/net/minecraft/world/entity/monster/Vex.java -index 838edcb5267268fadfc913ea71f3fb4adbe94209..6ddd7d1d0ad8fa49a9e687137a06e9069db7889d 100644 +index e361d1ecf9e9a27491bb8195fee6272dc903615c..b93cc363a2d411f4ea2d70984fecc549417f098c 100644 --- a/net/minecraft/world/entity/monster/Vex.java +++ b/net/minecraft/world/entity/monster/Vex.java -@@ -117,6 +117,13 @@ public class Vex extends Monster implements TraceableEntity { +@@ -119,6 +119,13 @@ public class Vex extends Monster implements TraceableEntity, OwnableEntity { } // Purpur end - Toggle for water sensitive mob damage @@ -995,10 +959,10 @@ index 838edcb5267268fadfc913ea71f3fb4adbe94209..6ddd7d1d0ad8fa49a9e687137a06e906 public boolean isFlapping() { return this.tickCount % TICKS_PER_FLAP == 0; diff --git a/net/minecraft/world/entity/monster/Witch.java b/net/minecraft/world/entity/monster/Witch.java -index bfa222c9b61bc2d20927fdf08e8baa5fda4fdbdc..f05beafdbc3f1dcf0413bb2b9f8dbcdd35532867 100644 +index 847363cd327e52b5d67d07510618dd0f6a7fc8a4..0b9f0b3d5376522a2106eca92c7b1d5aae7fa367 100644 --- a/net/minecraft/world/entity/monster/Witch.java +++ b/net/minecraft/world/entity/monster/Witch.java -@@ -89,6 +89,13 @@ public class Witch extends Raider implements RangedAttackMob { +@@ -90,6 +90,13 @@ public class Witch extends Raider implements RangedAttackMob { } // Purpur end - Toggle for water sensitive mob damage @@ -1013,10 +977,10 @@ index bfa222c9b61bc2d20927fdf08e8baa5fda4fdbdc..f05beafdbc3f1dcf0413bb2b9f8dbcdd protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/Zoglin.java b/net/minecraft/world/entity/monster/Zoglin.java -index 15e5e3c63ec9bddaf19636e27dd21d12df9318ce..547e9a61779b653c9f59fb04c03d8c2b4ee16e8e 100644 +index dec8f0ab0fd8f33dbc4b18d38e43ff1531963b07..35da647c8dad5da274ab8de857636d28e8cc8520 100644 --- a/net/minecraft/world/entity/monster/Zoglin.java +++ b/net/minecraft/world/entity/monster/Zoglin.java -@@ -108,6 +108,13 @@ public class Zoglin extends Monster implements HoglinBase { +@@ -116,6 +116,13 @@ public class Zoglin extends Monster implements HoglinBase { } // Purpur end - Toggle for water sensitive mob damage @@ -1030,11 +994,65 @@ index 15e5e3c63ec9bddaf19636e27dd21d12df9318ce..547e9a61779b653c9f59fb04c03d8c2b @Override protected Brain makeBrain(final Brain.Packed packedBrain) { return BRAIN_PROVIDER.makeBrain(this, packedBrain); +diff --git a/net/minecraft/world/entity/monster/cubemob/MagmaCube.java b/net/minecraft/world/entity/monster/cubemob/MagmaCube.java +index 44e8dd9667663e971c65613baef25f4d7ddf4a79..fd48929cb583662a76912f450aa4bf74abb05541 100644 +--- a/net/minecraft/world/entity/monster/cubemob/MagmaCube.java ++++ b/net/minecraft/world/entity/monster/cubemob/MagmaCube.java +@@ -97,6 +97,13 @@ public class MagmaCube extends AbstractCubeMob implements Enemy { + } + // Purpur end - Toggle for water sensitive mob damage + ++ // Purpur start - Mobs always drop experience ++ @Override ++ protected boolean isAlwaysExperienceDropper() { ++ return this.level().purpurConfig.magmaCubeAlwaysDropExp; ++ } ++ // Purpur end - Mobs always drop experience ++ + public static AttributeSupplier.Builder createAttributes() { + return Monster.createMonsterAttributes().add(Attributes.MOVEMENT_SPEED, 0.2F); + } +diff --git a/net/minecraft/world/entity/monster/cubemob/Slime.java b/net/minecraft/world/entity/monster/cubemob/Slime.java +index 3c09f472ba54f8929782ac6a080ceabf10f09699..1faab89a0c6febdbbb15c8f1345fbd8e71f3af6e 100644 +--- a/net/minecraft/world/entity/monster/cubemob/Slime.java ++++ b/net/minecraft/world/entity/monster/cubemob/Slime.java +@@ -108,6 +108,13 @@ public class Slime extends AbstractCubeMob implements Enemy { + } + // Purpur end - Toggle for water sensitive mob damage + ++ // Purpur start - Mobs always drop experience ++ @Override ++ protected boolean isAlwaysExperienceDropper() { ++ return this.level().purpurConfig.slimeAlwaysDropExp; ++ } ++ // Purpur end - Mobs always drop experience ++ + @Override + public SoundEvent getHurtSound(final DamageSource source) { + return this.isTiny() ? SoundEvents.SLIME_HURT_SMALL : SoundEvents.SLIME_HURT; +diff --git a/net/minecraft/world/entity/monster/cubemob/SulfurCube.java b/net/minecraft/world/entity/monster/cubemob/SulfurCube.java +index f777ed1de1ec159fed3019bd5bfb711b9aad6146..611501ed6a141bf656e69f9248794b499393cc43 100644 +--- a/net/minecraft/world/entity/monster/cubemob/SulfurCube.java ++++ b/net/minecraft/world/entity/monster/cubemob/SulfurCube.java +@@ -172,6 +172,13 @@ public class SulfurCube extends AbstractCubeMob implements Bucketable, Shearable + } + // Purpur end - Toggle for water sensitive mob damage + ++ // Purpur start - Mobs always drop experience ++ @Override ++ protected boolean isAlwaysExperienceDropper() { ++ return this.level().purpurConfig.sulfurCubeAlwaysDropExp; ++ } ++ // Purpur end - Mobs always drop experience ++ + @Override + public boolean fromBucket() { + return this.entityData.get(FROM_BUCKET); diff --git a/net/minecraft/world/entity/monster/hoglin/Hoglin.java b/net/minecraft/world/entity/monster/hoglin/Hoglin.java -index d001cf955dba66435079eb2cc30e05aec963d2c6..b8c764cc274f43073a460a4c8643e0cb87d808ad 100644 +index 03686024f7a870079dc1c379c5e88f92d8f904fe..103d7ac2e3fdb4629d94902c0b4080a7622ae744 100644 --- a/net/minecraft/world/entity/monster/hoglin/Hoglin.java +++ b/net/minecraft/world/entity/monster/hoglin/Hoglin.java -@@ -112,6 +112,13 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { +@@ -120,6 +120,13 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { } // Purpur end - Toggle for water sensitive mob damage @@ -1049,10 +1067,10 @@ index d001cf955dba66435079eb2cc30e05aec963d2c6..b8c764cc274f43073a460a4c8643e0cb public void setTimeInOverworld(final int timeInOverworld) { this.timeInOverworld = timeInOverworld; diff --git a/net/minecraft/world/entity/monster/illager/Evoker.java b/net/minecraft/world/entity/monster/illager/Evoker.java -index fe67813da3b3be09dad8f99a68685448b33fa5a9..16792e45655df1ec96732f4d097f3803d4dafde8 100644 +index fead174f8a56ea9611aa4f20ff870df32048037f..c1d4c40260f4b002ed6c6eb49ca3cc33a0b9b2eb 100644 --- a/net/minecraft/world/entity/monster/illager/Evoker.java +++ b/net/minecraft/world/entity/monster/illager/Evoker.java -@@ -81,6 +81,13 @@ public class Evoker extends SpellcasterIllager { +@@ -82,6 +82,13 @@ public class Evoker extends SpellcasterIllager { } // Purpur end - Toggle for water sensitive mob damage @@ -1085,7 +1103,7 @@ index bfd1a61d43fcc1293592a6199d7bab0346f40c7f..05c0a84a2eb41ab9c19fd95e6745037d protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/illager/Pillager.java b/net/minecraft/world/entity/monster/illager/Pillager.java -index bd9092a0fecef475bde06d94bc2f6726f21404fd..e69514bf39e2acfc909cb55b1704ca3f56f704e2 100644 +index 18c177bd17873d87769dbcdd4ee3794fb828905c..9d6629c29dc471ef1db672cce4260a983d452cbd 100644 --- a/net/minecraft/world/entity/monster/illager/Pillager.java +++ b/net/minecraft/world/entity/monster/illager/Pillager.java @@ -97,6 +97,13 @@ public class Pillager extends AbstractIllager implements CrossbowAttackMob, Inve @@ -1103,7 +1121,7 @@ index bd9092a0fecef475bde06d94bc2f6726f21404fd..e69514bf39e2acfc909cb55b1704ca3f protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/illager/Vindicator.java b/net/minecraft/world/entity/monster/illager/Vindicator.java -index aab0bd86da31ca73efc4988fa34c906886139ec3..c29a1aea5c09ade40e36f4cb00a677b31ad91069 100644 +index db2ca5e6f5c5a0968e1fb76369ad2efdee57e480..d42afe275f7a917d5784da2838972dff73f1476a 100644 --- a/net/minecraft/world/entity/monster/illager/Vindicator.java +++ b/net/minecraft/world/entity/monster/illager/Vindicator.java @@ -89,6 +89,13 @@ public class Vindicator extends AbstractIllager { @@ -1121,10 +1139,10 @@ index aab0bd86da31ca73efc4988fa34c906886139ec3..c29a1aea5c09ade40e36f4cb00a677b3 protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/piglin/Piglin.java b/net/minecraft/world/entity/monster/piglin/Piglin.java -index 21674f5ee9bd89bfbcf36f43ba728a692934a886..bbdf01c5ab0b0eee4773d4ca690dc3c4fa3ec202 100644 +index f7e8b26f3acaff88aeb3e2cde93ec7922859e1ae..9246caa06976c258c15c95b52a156aebf63d89d7 100644 --- a/net/minecraft/world/entity/monster/piglin/Piglin.java +++ b/net/minecraft/world/entity/monster/piglin/Piglin.java -@@ -140,6 +140,13 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento +@@ -141,6 +141,13 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento } // Purpur end - Toggle for water sensitive mob damage @@ -1139,7 +1157,7 @@ index 21674f5ee9bd89bfbcf36f43ba728a692934a886..bbdf01c5ab0b0eee4773d4ca690dc3c4 protected void addAdditionalSaveData(final ValueOutput output) { super.addAdditionalSaveData(output); diff --git a/net/minecraft/world/entity/monster/piglin/PiglinBrute.java b/net/minecraft/world/entity/monster/piglin/PiglinBrute.java -index 79e084304cec441966a22f0028e021d19e49bfd3..0755e3ed3b940609f0211d123c0c664905af56b5 100644 +index 5f25162930b7d18385d84715f4f72962c1efa93d..ee1a87f7811d22b5b33b3ae6b22fc5332b57322b 100644 --- a/net/minecraft/world/entity/monster/piglin/PiglinBrute.java +++ b/net/minecraft/world/entity/monster/piglin/PiglinBrute.java @@ -82,6 +82,13 @@ public class PiglinBrute extends AbstractPiglin { @@ -1157,10 +1175,10 @@ index 79e084304cec441966a22f0028e021d19e49bfd3..0755e3ed3b940609f0211d123c0c6649 return Monster.createMonsterAttributes() .add(Attributes.MAX_HEALTH, 50.0) diff --git a/net/minecraft/world/entity/monster/skeleton/Skeleton.java b/net/minecraft/world/entity/monster/skeleton/Skeleton.java -index a2fc1cf5fa77c1cc78610ce0b4bbd35a371878a0..7d0c6fe7290e8ad44c451b431778e1b7fe37c6e5 100644 +index 0890eb175438eb1dd39ca511c9ac332ef2a32e02..675faf3f02447fd73f48acc08c4b224114a0dc2e 100644 --- a/net/minecraft/world/entity/monster/skeleton/Skeleton.java +++ b/net/minecraft/world/entity/monster/skeleton/Skeleton.java -@@ -57,6 +57,13 @@ public class Skeleton extends AbstractSkeleton { +@@ -58,6 +58,13 @@ public class Skeleton extends AbstractSkeleton { } // Purpur end - Toggle for water sensitive mob damage @@ -1175,7 +1193,7 @@ index a2fc1cf5fa77c1cc78610ce0b4bbd35a371878a0..7d0c6fe7290e8ad44c451b431778e1b7 protected void defineSynchedData(final SynchedEntityData.Builder entityData) { super.defineSynchedData(entityData); diff --git a/net/minecraft/world/entity/monster/skeleton/Stray.java b/net/minecraft/world/entity/monster/skeleton/Stray.java -index 64dc2a04bb2ae4dc63083a24c48f671bfc8ff8ea..76f28568aecf019ce7432ff89593b2ed4eaff8a2 100644 +index 60aae5ecbd5d1243c63b304a7ffbfd729ad093c0..19ed23a4fc07f3a47f64ceefe1081b3641dfdccb 100644 --- a/net/minecraft/world/entity/monster/skeleton/Stray.java +++ b/net/minecraft/world/entity/monster/skeleton/Stray.java @@ -54,6 +54,13 @@ public class Stray extends AbstractSkeleton { @@ -1193,7 +1211,7 @@ index 64dc2a04bb2ae4dc63083a24c48f671bfc8ff8ea..76f28568aecf019ce7432ff89593b2ed final EntityType type, final ServerLevelAccessor level, final EntitySpawnReason spawnReason, final BlockPos pos, final RandomSource random ) { diff --git a/net/minecraft/world/entity/monster/skeleton/WitherSkeleton.java b/net/minecraft/world/entity/monster/skeleton/WitherSkeleton.java -index 2f3ff6eeae3103248512afb8cfd745f3e08c3eaf..c3f09863893933580caa07b8b9cdfd08ad5a0978 100644 +index 2ec114406a6d207676739bf6b7eeb3b218442edd..5b057a367198f1b39e3e5ade7d48eb04a2a4b324 100644 --- a/net/minecraft/world/entity/monster/skeleton/WitherSkeleton.java +++ b/net/minecraft/world/entity/monster/skeleton/WitherSkeleton.java @@ -66,6 +66,13 @@ public class WitherSkeleton extends AbstractSkeleton { @@ -1211,7 +1229,7 @@ index 2f3ff6eeae3103248512afb8cfd745f3e08c3eaf..c3f09863893933580caa07b8b9cdfd08 protected void registerGoals() { this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractPiglin.class, true)); diff --git a/net/minecraft/world/entity/monster/spider/CaveSpider.java b/net/minecraft/world/entity/monster/spider/CaveSpider.java -index cbbfdd2dde1437955f1007618244eeb72768b8fd..24b5ba31c92923545d5b7cab758c2e30ac77d23b 100644 +index cb4d092e7365a978c16b620dfe05cbca56a0e1f0..b3621772cca164c92a630ca96a80315645b33681 100644 --- a/net/minecraft/world/entity/monster/spider/CaveSpider.java +++ b/net/minecraft/world/entity/monster/spider/CaveSpider.java @@ -58,6 +58,13 @@ public class CaveSpider extends Spider { @@ -1229,10 +1247,10 @@ index cbbfdd2dde1437955f1007618244eeb72768b8fd..24b5ba31c92923545d5b7cab758c2e30 public boolean doHurtTarget(final ServerLevel level, final Entity target) { if (super.doHurtTarget(level, target)) { diff --git a/net/minecraft/world/entity/monster/spider/Spider.java b/net/minecraft/world/entity/monster/spider/Spider.java -index 467ea1fd09b94747a03aaadd28a107d983afeb01..8396b9d6b41e381e040ee71e7fe04ad20af63039 100644 +index 4b406ba70824d3ab06883085204c0233c7ff0a0a..0db35d3e0c6be00dc8502331bbafc0e4e82adb9d 100644 --- a/net/minecraft/world/entity/monster/spider/Spider.java +++ b/net/minecraft/world/entity/monster/spider/Spider.java -@@ -84,6 +84,13 @@ public class Spider extends Monster { +@@ -85,6 +85,13 @@ public class Spider extends Monster { } // Purpur end - Toggle for water sensitive mob damage @@ -1247,10 +1265,10 @@ index 467ea1fd09b94747a03aaadd28a107d983afeb01..8396b9d6b41e381e040ee71e7fe04ad2 protected void registerGoals() { this.goalSelector.addGoal(1, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/monster/zombie/Drowned.java b/net/minecraft/world/entity/monster/zombie/Drowned.java -index 3828001bed19114c23e5099c3716837f4d2c2314..d7652cc26a9e3db010a7d05f0931d78b9a53b20c 100644 +index a6ff55afa5987ddf3ff1e9a43e34392f1cede2b4..a823cca07465fa5804eb01759174cbef9becbcca 100644 --- a/net/minecraft/world/entity/monster/zombie/Drowned.java +++ b/net/minecraft/world/entity/monster/zombie/Drowned.java -@@ -140,6 +140,13 @@ public class Drowned extends Zombie implements RangedAttackMob { +@@ -141,6 +141,13 @@ public class Drowned extends Zombie implements RangedAttackMob { } // Purpur end - Toggle for water sensitive mob damage @@ -1265,10 +1283,10 @@ index 3828001bed19114c23e5099c3716837f4d2c2314..d7652cc26a9e3db010a7d05f0931d78b protected void addBehaviourGoals() { this.goalSelector.addGoal(1, new Drowned.DrownedGoToWaterGoal(this, 1.0)); diff --git a/net/minecraft/world/entity/monster/zombie/Husk.java b/net/minecraft/world/entity/monster/zombie/Husk.java -index 02e935edd7a6cabbf2e6fcc6c96a9601bee71acc..5d60b230eeaec9d37e286019b8d4276cfa85a9ea 100644 +index afca08cfa58a25a7fa257eebf66dd888ccc1c734..75b57de8caf55d795ce10e115d657998fb86b401 100644 --- a/net/minecraft/world/entity/monster/zombie/Husk.java +++ b/net/minecraft/world/entity/monster/zombie/Husk.java -@@ -91,6 +91,13 @@ public class Husk extends Zombie { +@@ -92,6 +92,13 @@ public class Husk extends Zombie { } // Purpur end - Toggle for water sensitive mob damage @@ -1283,10 +1301,10 @@ index 02e935edd7a6cabbf2e6fcc6c96a9601bee71acc..5d60b230eeaec9d37e286019b8d4276c public boolean isSunSensitive() { return this.shouldBurnInDay; // Purpur - moved to LivingEntity; keep methods for ABI compatibility - API for any mob to burn daylight diff --git a/net/minecraft/world/entity/monster/zombie/Zombie.java b/net/minecraft/world/entity/monster/zombie/Zombie.java -index 92be49434eb76fa0774864af73b0a460f49b6a32..09fda2f96f2c4024e35ef23c482097b7c055b936 100644 +index f104394d49989fe80462602cb06b2f58c4282fbb..0671b7c2a77d1173d58812abcfcad2461a42d240 100644 --- a/net/minecraft/world/entity/monster/zombie/Zombie.java +++ b/net/minecraft/world/entity/monster/zombie/Zombie.java -@@ -159,6 +159,13 @@ public class Zombie extends Monster { +@@ -160,6 +160,13 @@ public class Zombie extends Monster { } // Purpur end - Toggle for water sensitive mob damage @@ -1301,10 +1319,10 @@ index 92be49434eb76fa0774864af73b0a460f49b6a32..09fda2f96f2c4024e35ef23c482097b7 protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables diff --git a/net/minecraft/world/entity/monster/zombie/ZombieVillager.java b/net/minecraft/world/entity/monster/zombie/ZombieVillager.java -index ecbac0d55dbe921ac2e185e0acab5691579be512..3e96d18ed2fb67c08e77b17ec7f6418fbb5caf8f 100644 +index b704a24142f79f40e72a2dd76d1448501d9f7f59..e4be264d71c7980047194a86c5681020e822a67a 100644 --- a/net/minecraft/world/entity/monster/zombie/ZombieVillager.java +++ b/net/minecraft/world/entity/monster/zombie/ZombieVillager.java -@@ -138,6 +138,13 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { +@@ -140,6 +140,13 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { } // Purpur end - Toggle for water sensitive mob damage @@ -1319,7 +1337,7 @@ index ecbac0d55dbe921ac2e185e0acab5691579be512..3e96d18ed2fb67c08e77b17ec7f6418f protected void defineSynchedData(final SynchedEntityData.Builder entityData) { super.defineSynchedData(entityData); diff --git a/net/minecraft/world/entity/monster/zombie/ZombifiedPiglin.java b/net/minecraft/world/entity/monster/zombie/ZombifiedPiglin.java -index 6cc4d4729520c60b98d45d5e7dd674e599616505..9e893c0c033dcc2273275b92048d9b1a941d93f2 100644 +index 1233173bec21f780b25e7773788fd1fb003804af..2c0f08308430356a44a61d9b7a94609f340b454d 100644 --- a/net/minecraft/world/entity/monster/zombie/ZombifiedPiglin.java +++ b/net/minecraft/world/entity/monster/zombie/ZombifiedPiglin.java @@ -117,6 +117,13 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { @@ -1337,10 +1355,10 @@ index 6cc4d4729520c60b98d45d5e7dd674e599616505..9e893c0c033dcc2273275b92048d9b1a protected void addBehaviourGoals() { this.goalSelector.addGoal(1, new SpearUseGoal<>(this, 1.0, 1.0, 10.0F, 2.0F)); diff --git a/net/minecraft/world/entity/npc/villager/Villager.java b/net/minecraft/world/entity/npc/villager/Villager.java -index fd0b329f56fa78d05be5348b42f3542fff7ebbe4..c841d627254da95b786469108adb2b7f89355954 100644 +index dddbde704f3488b6bd7cbf126bc18ccb26d24d2c..64a6f4517f581f64a71382bdb302b71c68dc5396 100644 --- a/net/minecraft/world/entity/npc/villager/Villager.java +++ b/net/minecraft/world/entity/npc/villager/Villager.java -@@ -291,6 +291,13 @@ public class Villager extends AbstractVillager implements VillagerDataHolder, Re +@@ -282,6 +282,13 @@ public class Villager extends AbstractVillager implements VillagerDataHolder, Re } // Purpur end - Toggle for water sensitive mob damage @@ -1353,9 +1371,9 @@ index fd0b329f56fa78d05be5348b42f3542fff7ebbe4..c841d627254da95b786469108adb2b7f + @Override public Brain getBrain() { - return (Brain) super.getBrain(); + return (Brain)super.getBrain(); diff --git a/net/minecraft/world/entity/npc/wanderingtrader/WanderingTrader.java b/net/minecraft/world/entity/npc/wanderingtrader/WanderingTrader.java -index b6e16bcfff9a74fdd2109d4a442344c07692c3d1..35a2e2018f987d2fb63380d7a6b1e5bcad3a09d1 100644 +index 2f6fe59d812ccef104d7e3357483442c8f52e826..06f85792fea97e18b23f348728a772d5a2db65cc 100644 --- a/net/minecraft/world/entity/npc/wanderingtrader/WanderingTrader.java +++ b/net/minecraft/world/entity/npc/wanderingtrader/WanderingTrader.java @@ -105,6 +105,13 @@ public class WanderingTrader extends AbstractVillager implements Consumable.Over diff --git a/purpur-server/minecraft-patches/unapplied-features/0020-Setting-to-reintroduce-end-void-rings.patch b/purpur-server/minecraft-patches/features/0020-Setting-to-reintroduce-end-void-rings.patch similarity index 89% rename from purpur-server/minecraft-patches/unapplied-features/0020-Setting-to-reintroduce-end-void-rings.patch rename to purpur-server/minecraft-patches/features/0020-Setting-to-reintroduce-end-void-rings.patch index 0dd343809..9da68ff89 100644 --- a/purpur-server/minecraft-patches/unapplied-features/0020-Setting-to-reintroduce-end-void-rings.patch +++ b/purpur-server/minecraft-patches/features/0020-Setting-to-reintroduce-end-void-rings.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Setting to reintroduce end void rings diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index 838898572cc30207a1b915dcea11f612254ac453..d2a5a1293f276aab3136c4563d778d0d79c7ff29 100644 +index fcade65785db82fc64eeb9b337900a405f05d196..09d05ed938d0dd4cd5d7adb68f4229519cf4f61b 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java -@@ -1351,6 +1351,15 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop makeBrain(final Brain.Packed packedBrain) { return BRAIN_PROVIDER.makeBrain(this, packedBrain); diff --git a/net/minecraft/world/entity/animal/fox/Fox.java b/net/minecraft/world/entity/animal/fox/Fox.java -index ea23a64654ebaaf97fe9e5c0eab0f31f54d94d22..f286089eca3b6e9c72f1b954b872c8673a717b7a 100644 +index ca5b0b8081c4943bfbfba4f0f9284f0fdda3cf9f..91a001af54b9ba53c9c2a7cfd797d9ff2f53c0db 100644 --- a/net/minecraft/world/entity/animal/fox/Fox.java +++ b/net/minecraft/world/entity/animal/fox/Fox.java -@@ -814,6 +814,13 @@ public class Fox extends Animal { +@@ -821,6 +821,13 @@ public class Fox extends Animal { } // Purpur end - Tulips change fox type @@ -67,7 +67,7 @@ index ea23a64654ebaaf97fe9e5c0eab0f31f54d94d22..f286089eca3b6e9c72f1b954b872c867 // Paper start - Cancellable death event protected org.bukkit.event.entity.EntityDeathEvent dropAllDeathLoot(final ServerLevel level, final DamageSource source) { diff --git a/net/minecraft/world/entity/monster/illager/Pillager.java b/net/minecraft/world/entity/monster/illager/Pillager.java -index e69514bf39e2acfc909cb55b1704ca3f56f704e2..20c0b12b56416bc532de4de827c88850bfd1f0f3 100644 +index 9d6629c29dc471ef1db672cce4260a983d452cbd..55b7fc1c375edaf8c86294884da55d5d97e09e93 100644 --- a/net/minecraft/world/entity/monster/illager/Pillager.java +++ b/net/minecraft/world/entity/monster/illager/Pillager.java @@ -104,6 +104,13 @@ public class Pillager extends AbstractIllager implements CrossbowAttackMob, Inve @@ -85,7 +85,7 @@ index e69514bf39e2acfc909cb55b1704ca3f56f704e2..20c0b12b56416bc532de4de827c88850 protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/illager/Vindicator.java b/net/minecraft/world/entity/monster/illager/Vindicator.java -index c29a1aea5c09ade40e36f4cb00a677b31ad91069..d4e298ecf79ff7ebdea71b710e6df7ba72f9a0f5 100644 +index d42afe275f7a917d5784da2838972dff73f1476a..68b252bfd6bacc3952ffc610032cd8a0ec1169e3 100644 --- a/net/minecraft/world/entity/monster/illager/Vindicator.java +++ b/net/minecraft/world/entity/monster/illager/Vindicator.java @@ -96,6 +96,13 @@ public class Vindicator extends AbstractIllager { @@ -103,10 +103,10 @@ index c29a1aea5c09ade40e36f4cb00a677b31ad91069..d4e298ecf79ff7ebdea71b710e6df7ba protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/piglin/Piglin.java b/net/minecraft/world/entity/monster/piglin/Piglin.java -index bbdf01c5ab0b0eee4773d4ca690dc3c4fa3ec202..b14fd101ba647ca99211a42b142d2d80975a9e38 100644 +index 9246caa06976c258c15c95b52a156aebf63d89d7..ac96afede920fcc19a3a136ed75b1c66c0cfdea5 100644 --- a/net/minecraft/world/entity/monster/piglin/Piglin.java +++ b/net/minecraft/world/entity/monster/piglin/Piglin.java -@@ -147,6 +147,13 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento +@@ -148,6 +148,13 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento } // Purpur end - Mobs always drop experience @@ -130,7 +130,7 @@ index bbdf01c5ab0b0eee4773d4ca690dc3c4fa3ec202..b14fd101ba647ca99211a42b142d2d80 protected boolean canReplaceCurrentItem(final ItemStack newItemStack) { diff --git a/net/minecraft/world/entity/monster/piglin/PiglinBrute.java b/net/minecraft/world/entity/monster/piglin/PiglinBrute.java -index 0755e3ed3b940609f0211d123c0c664905af56b5..3a33976a667d9d9b446b6b27b5938aff8f5d9ab6 100644 +index ee1a87f7811d22b5b33b3ae6b22fc5332b57322b..34cd7f5b209e466a4bef506a9d796e04fcfe425d 100644 --- a/net/minecraft/world/entity/monster/piglin/PiglinBrute.java +++ b/net/minecraft/world/entity/monster/piglin/PiglinBrute.java @@ -89,6 +89,13 @@ public class PiglinBrute extends AbstractPiglin { @@ -148,7 +148,7 @@ index 0755e3ed3b940609f0211d123c0c664905af56b5..3a33976a667d9d9b446b6b27b5938aff return Monster.createMonsterAttributes() .add(Attributes.MAX_HEALTH, 50.0) diff --git a/net/minecraft/world/entity/monster/skeleton/Bogged.java b/net/minecraft/world/entity/monster/skeleton/Bogged.java -index 50dd01a2092f87fd9015c982f728f14965be5b81..410c5f8e1571970e8043eb5d976cd6d8b95689eb 100644 +index 617f61f4f7559a42e27d935ab9837ed99a8e9c1e..4022813e5cb9188f310fa5b633567cf854f4d627 100644 --- a/net/minecraft/world/entity/monster/skeleton/Bogged.java +++ b/net/minecraft/world/entity/monster/skeleton/Bogged.java @@ -66,6 +66,13 @@ public class Bogged extends AbstractSkeleton implements Shearable { @@ -166,10 +166,10 @@ index 50dd01a2092f87fd9015c982f728f14965be5b81..410c5f8e1571970e8043eb5d976cd6d8 protected void defineSynchedData(final SynchedEntityData.Builder entityData) { super.defineSynchedData(entityData); diff --git a/net/minecraft/world/entity/monster/skeleton/Skeleton.java b/net/minecraft/world/entity/monster/skeleton/Skeleton.java -index 7d0c6fe7290e8ad44c451b431778e1b7fe37c6e5..c5b261f36f6042a395b8e1a7d54b20339e81b4b8 100644 +index 675faf3f02447fd73f48acc08c4b224114a0dc2e..8610e59cdebe6ae6fc4ba0fb654e990b1e3f34ee 100644 --- a/net/minecraft/world/entity/monster/skeleton/Skeleton.java +++ b/net/minecraft/world/entity/monster/skeleton/Skeleton.java -@@ -64,6 +64,13 @@ public class Skeleton extends AbstractSkeleton { +@@ -65,6 +65,13 @@ public class Skeleton extends AbstractSkeleton { } // Purpur end - Mobs always drop experience @@ -184,7 +184,7 @@ index 7d0c6fe7290e8ad44c451b431778e1b7fe37c6e5..c5b261f36f6042a395b8e1a7d54b2033 protected void defineSynchedData(final SynchedEntityData.Builder entityData) { super.defineSynchedData(entityData); diff --git a/net/minecraft/world/entity/monster/skeleton/Stray.java b/net/minecraft/world/entity/monster/skeleton/Stray.java -index 76f28568aecf019ce7432ff89593b2ed4eaff8a2..e761c97212e380b6978e5fbd1d808f4ddbb89bb5 100644 +index 19ed23a4fc07f3a47f64ceefe1081b3641dfdccb..8188c9e34e0df679e3799bd184790d57f38635be 100644 --- a/net/minecraft/world/entity/monster/skeleton/Stray.java +++ b/net/minecraft/world/entity/monster/skeleton/Stray.java @@ -61,6 +61,13 @@ public class Stray extends AbstractSkeleton { @@ -202,7 +202,7 @@ index 76f28568aecf019ce7432ff89593b2ed4eaff8a2..e761c97212e380b6978e5fbd1d808f4d final EntityType type, final ServerLevelAccessor level, final EntitySpawnReason spawnReason, final BlockPos pos, final RandomSource random ) { diff --git a/net/minecraft/world/entity/monster/skeleton/WitherSkeleton.java b/net/minecraft/world/entity/monster/skeleton/WitherSkeleton.java -index c3f09863893933580caa07b8b9cdfd08ad5a0978..ddb189a3fb144bf84097aee9c3e45dafc88c593d 100644 +index 5b057a367198f1b39e3e5ade7d48eb04a2a4b324..d8eb5f2b681dab360a9a425e4cfef026799ffae4 100644 --- a/net/minecraft/world/entity/monster/skeleton/WitherSkeleton.java +++ b/net/minecraft/world/entity/monster/skeleton/WitherSkeleton.java @@ -73,6 +73,13 @@ public class WitherSkeleton extends AbstractSkeleton { @@ -220,10 +220,10 @@ index c3f09863893933580caa07b8b9cdfd08ad5a0978..ddb189a3fb144bf84097aee9c3e45daf protected void registerGoals() { this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractPiglin.class, true)); diff --git a/net/minecraft/world/entity/monster/zombie/Drowned.java b/net/minecraft/world/entity/monster/zombie/Drowned.java -index d7652cc26a9e3db010a7d05f0931d78b9a53b20c..4801c6987740f846a3049bfa0fcac547183e3f13 100644 +index a823cca07465fa5804eb01759174cbef9becbcca..936369cc110899ac074221be0972bbf6dc7c5847 100644 --- a/net/minecraft/world/entity/monster/zombie/Drowned.java +++ b/net/minecraft/world/entity/monster/zombie/Drowned.java -@@ -147,6 +147,13 @@ public class Drowned extends Zombie implements RangedAttackMob { +@@ -148,6 +148,13 @@ public class Drowned extends Zombie implements RangedAttackMob { } // Purpur end - Mobs always drop experience @@ -238,10 +238,10 @@ index d7652cc26a9e3db010a7d05f0931d78b9a53b20c..4801c6987740f846a3049bfa0fcac547 protected void addBehaviourGoals() { this.goalSelector.addGoal(1, new Drowned.DrownedGoToWaterGoal(this, 1.0)); diff --git a/net/minecraft/world/entity/monster/zombie/Husk.java b/net/minecraft/world/entity/monster/zombie/Husk.java -index 5d60b230eeaec9d37e286019b8d4276cfa85a9ea..55b2bd676f2e9633fc8250bcd984424e8c37e2ee 100644 +index 75b57de8caf55d795ce10e115d657998fb86b401..de736df453541a2c4a71de97765581575caba0b7 100644 --- a/net/minecraft/world/entity/monster/zombie/Husk.java +++ b/net/minecraft/world/entity/monster/zombie/Husk.java -@@ -98,6 +98,13 @@ public class Husk extends Zombie { +@@ -99,6 +99,13 @@ public class Husk extends Zombie { } // Purpur end - Mobs always drop experience @@ -256,10 +256,10 @@ index 5d60b230eeaec9d37e286019b8d4276cfa85a9ea..55b2bd676f2e9633fc8250bcd984424e public boolean isSunSensitive() { return this.shouldBurnInDay; // Purpur - moved to LivingEntity; keep methods for ABI compatibility - API for any mob to burn daylight diff --git a/net/minecraft/world/entity/monster/zombie/Zombie.java b/net/minecraft/world/entity/monster/zombie/Zombie.java -index 09fda2f96f2c4024e35ef23c482097b7c055b936..04ba29b8864804899e19b08b1952df781c96a23e 100644 +index 0671b7c2a77d1173d58812abcfcad2461a42d240..7ec2345a45dc62cab2fa363ed24bae4bca02db72 100644 --- a/net/minecraft/world/entity/monster/zombie/Zombie.java +++ b/net/minecraft/world/entity/monster/zombie/Zombie.java -@@ -166,6 +166,13 @@ public class Zombie extends Monster { +@@ -167,6 +167,13 @@ public class Zombie extends Monster { } // Purpur end - Mobs always drop experience @@ -274,10 +274,10 @@ index 09fda2f96f2c4024e35ef23c482097b7c055b936..04ba29b8864804899e19b08b1952df78 protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables diff --git a/net/minecraft/world/entity/monster/zombie/ZombieVillager.java b/net/minecraft/world/entity/monster/zombie/ZombieVillager.java -index 3e96d18ed2fb67c08e77b17ec7f6418fbb5caf8f..e5eb30d3620937af3cd294bdd6b985fbb61df534 100644 +index e4be264d71c7980047194a86c5681020e822a67a..23a5cee36253c222d383cc8e9d5e492231da131e 100644 --- a/net/minecraft/world/entity/monster/zombie/ZombieVillager.java +++ b/net/minecraft/world/entity/monster/zombie/ZombieVillager.java -@@ -145,6 +145,13 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { +@@ -147,6 +147,13 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { } // Purpur end - Mobs always drop experience @@ -292,7 +292,7 @@ index 3e96d18ed2fb67c08e77b17ec7f6418fbb5caf8f..e5eb30d3620937af3cd294bdd6b985fb protected void defineSynchedData(final SynchedEntityData.Builder entityData) { super.defineSynchedData(entityData); diff --git a/net/minecraft/world/entity/monster/zombie/ZombifiedPiglin.java b/net/minecraft/world/entity/monster/zombie/ZombifiedPiglin.java -index 9e893c0c033dcc2273275b92048d9b1a941d93f2..54ba4d2e8305e2d9ba0c9e71bae67bfd7b7d34b9 100644 +index 2c0f08308430356a44a61d9b7a94609f340b454d..8245dcf59c17d98a01ee509350bd79efca2b1bb3 100644 --- a/net/minecraft/world/entity/monster/zombie/ZombifiedPiglin.java +++ b/net/minecraft/world/entity/monster/zombie/ZombifiedPiglin.java @@ -124,6 +124,13 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { @@ -310,10 +310,10 @@ index 9e893c0c033dcc2273275b92048d9b1a941d93f2..54ba4d2e8305e2d9ba0c9e71bae67bfd protected void addBehaviourGoals() { this.goalSelector.addGoal(1, new SpearUseGoal<>(this, 1.0, 1.0, 10.0F, 2.0F)); diff --git a/net/minecraft/world/entity/npc/villager/Villager.java b/net/minecraft/world/entity/npc/villager/Villager.java -index c841d627254da95b786469108adb2b7f89355954..0503f9aa01099ebb807c3b6ccfe88f9610cc36b5 100644 +index 64a6f4517f581f64a71382bdb302b71c68dc5396..a1ff5e589516bb46236ef1408f0f4f2f1387e72a 100644 --- a/net/minecraft/world/entity/npc/villager/Villager.java +++ b/net/minecraft/world/entity/npc/villager/Villager.java -@@ -298,6 +298,13 @@ public class Villager extends AbstractVillager implements VillagerDataHolder, Re +@@ -289,6 +289,13 @@ public class Villager extends AbstractVillager implements VillagerDataHolder, Re } // Purpur end - Mobs always drop experience @@ -326,12 +326,12 @@ index c841d627254da95b786469108adb2b7f89355954..0503f9aa01099ebb807c3b6ccfe88f96 + @Override public Brain getBrain() { - return (Brain) super.getBrain(); + return (Brain)super.getBrain(); diff --git a/net/minecraft/world/entity/raid/Raider.java b/net/minecraft/world/entity/raid/Raider.java -index 869af8dffe56a52ea1406a6598df733f724ee654..7eeb25f068d77095dbd35e5f9c079a78f24538fe 100644 +index f37710c48aafb11d65b99e4d37ef1382a8a36417..23a541f8d740d19df59b9e024156f497326a41cb 100644 --- a/net/minecraft/world/entity/raid/Raider.java +++ b/net/minecraft/world/entity/raid/Raider.java -@@ -397,7 +397,7 @@ public abstract class Raider extends PatrollingMonster { +@@ -398,7 +398,7 @@ public abstract class Raider extends PatrollingMonster { } private boolean cannotPickUpBanner() { diff --git a/purpur-server/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/purpur-server/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java index 0ead893b9..631e6dd3a 100644 --- a/purpur-server/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/purpur-server/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -3217,6 +3217,19 @@ public class PurpurWorldConfig { striderAlwaysDropExp = getBoolean("mobs.strider.always-drop-exp", striderAlwaysDropExp); } + public boolean sulfurCubeRidable = false; + public boolean sulfurCubeRidableInWater = true; + public boolean sulfurCubeControllable = true; + public boolean sulfurCubeTakeDamageFromWater = false; + public boolean sulfurCubeAlwaysDropExp = false; + private void sulfurCubeSettings() { + sulfurCubeRidable = getBoolean("mobs.sulfur_cube.ridable", sulfurCubeRidable); + sulfurCubeRidableInWater = getBoolean("mobs.sulfur_cube.ridable-in-water", sulfurCubeRidableInWater); + sulfurCubeControllable = getBoolean("mobs.sulfur_cube.controllable", sulfurCubeControllable); + sulfurCubeTakeDamageFromWater = getBoolean("mobs.sulfur_cube.takes-damage-from-water", sulfurCubeTakeDamageFromWater); + sulfurCubeAlwaysDropExp = getBoolean("mobs.sulfur_cube.always-drop-exp", sulfurCubeAlwaysDropExp); + } + public boolean tadpoleRidable = false; public boolean tadpoleRidableInWater = true; public boolean tadpoleControllable = true; diff --git a/purpur-server/src/main/java/org/purpurmc/purpur/controller/FlyingMoveControllerWASD.java b/purpur-server/src/main/java/org/purpurmc/purpur/controller/FlyingMoveControllerWASD.java index 940bcc6f7..60dca8e4f 100644 --- a/purpur-server/src/main/java/org/purpurmc/purpur/controller/FlyingMoveControllerWASD.java +++ b/purpur-server/src/main/java/org/purpurmc/purpur/controller/FlyingMoveControllerWASD.java @@ -6,25 +6,25 @@ import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.player.Input; import net.minecraft.world.entity.player.Player; -public class FlyingMoveControllerWASD extends MoveControllerWASD { +public class FlyingMoveControllerWASD extends MoveControllerWASD { protected final float groundSpeedModifier; protected final float flyingSpeedModifier; protected int tooHighCooldown = 0; protected boolean setNoGravityFlag; - public FlyingMoveControllerWASD(Mob entity) { + public FlyingMoveControllerWASD(T entity) { this(entity, 1.0F); } - public FlyingMoveControllerWASD(Mob entity, float groundSpeedModifier) { + public FlyingMoveControllerWASD(T entity, float groundSpeedModifier) { this(entity, groundSpeedModifier, 1.0F, true); } - public FlyingMoveControllerWASD(Mob entity, float groundSpeedModifier, float flyingSpeedModifier) { + public FlyingMoveControllerWASD(T entity, float groundSpeedModifier, float flyingSpeedModifier) { this(entity, groundSpeedModifier, flyingSpeedModifier, true); } - public FlyingMoveControllerWASD(Mob entity, float groundSpeedModifier, float flyingSpeedModifier, boolean setNoGravityFlag) { + public FlyingMoveControllerWASD(T entity, float groundSpeedModifier, float flyingSpeedModifier, boolean setNoGravityFlag) { super(entity); this.groundSpeedModifier = groundSpeedModifier; this.flyingSpeedModifier = flyingSpeedModifier; diff --git a/purpur-server/src/main/java/org/purpurmc/purpur/controller/FlyingWithSpacebarMoveControllerWASD.java b/purpur-server/src/main/java/org/purpurmc/purpur/controller/FlyingWithSpacebarMoveControllerWASD.java index e0bbaec05..76c154574 100644 --- a/purpur-server/src/main/java/org/purpurmc/purpur/controller/FlyingWithSpacebarMoveControllerWASD.java +++ b/purpur-server/src/main/java/org/purpurmc/purpur/controller/FlyingWithSpacebarMoveControllerWASD.java @@ -7,12 +7,12 @@ import net.minecraft.world.entity.player.Input; import net.minecraft.world.entity.player.Player; import net.minecraft.world.phys.Vec3; -public class FlyingWithSpacebarMoveControllerWASD extends FlyingMoveControllerWASD { - public FlyingWithSpacebarMoveControllerWASD(Mob entity) { +public class FlyingWithSpacebarMoveControllerWASD extends FlyingMoveControllerWASD { + public FlyingWithSpacebarMoveControllerWASD(T entity) { super(entity); } - public FlyingWithSpacebarMoveControllerWASD(Mob entity, float groundSpeedModifier) { + public FlyingWithSpacebarMoveControllerWASD(T entity, float groundSpeedModifier) { super(entity, groundSpeedModifier); } diff --git a/purpur-server/src/main/java/org/purpurmc/purpur/controller/MoveControllerWASD.java b/purpur-server/src/main/java/org/purpurmc/purpur/controller/MoveControllerWASD.java index 34f3c43fa..d5f5822e1 100644 --- a/purpur-server/src/main/java/org/purpurmc/purpur/controller/MoveControllerWASD.java +++ b/purpur-server/src/main/java/org/purpurmc/purpur/controller/MoveControllerWASD.java @@ -8,15 +8,15 @@ import net.minecraft.world.entity.player.Input; import net.minecraft.world.entity.player.Player; import org.purpurmc.purpur.event.entity.RidableSpacebarEvent; -public class MoveControllerWASD extends MoveControl { +public class MoveControllerWASD extends MoveControl { protected final Mob entity; private final double speedModifier; - public MoveControllerWASD(Mob entity) { + public MoveControllerWASD(T entity) { this(entity, 1.0D); } - public MoveControllerWASD(Mob entity, double speedModifier) { + public MoveControllerWASD(T entity, double speedModifier) { super(entity); this.entity = entity; this.speedModifier = speedModifier; diff --git a/purpur-server/src/main/java/org/purpurmc/purpur/controller/WaterMoveControllerWASD.java b/purpur-server/src/main/java/org/purpurmc/purpur/controller/WaterMoveControllerWASD.java index 922e48799..28b790cb6 100644 --- a/purpur-server/src/main/java/org/purpurmc/purpur/controller/WaterMoveControllerWASD.java +++ b/purpur-server/src/main/java/org/purpurmc/purpur/controller/WaterMoveControllerWASD.java @@ -6,14 +6,14 @@ import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.player.Input; import net.minecraft.world.entity.player.Player; -public class WaterMoveControllerWASD extends MoveControllerWASD { +public class WaterMoveControllerWASD extends MoveControllerWASD { private final double speedModifier; - public WaterMoveControllerWASD(Mob entity) { + public WaterMoveControllerWASD(T entity) { this(entity, 1.0D); } - public WaterMoveControllerWASD(Mob entity, double speedModifier) { + public WaterMoveControllerWASD(T entity, double speedModifier) { super(entity); this.speedModifier = speedModifier; }