From 222ce27b6ef850141a84ff69e3aa6d3c2f0d43ef Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Fri, 21 Jun 2019 01:05:41 -0500 Subject: [PATCH] Add more ridables fixes --- patches/server/0011-Integrate-ridables.patch | 1173 ++++++++++++++++-- 1 file changed, 1067 insertions(+), 106 deletions(-) diff --git a/patches/server/0011-Integrate-ridables.patch b/patches/server/0011-Integrate-ridables.patch index aed2ff780..53200bc8d 100644 --- a/patches/server/0011-Integrate-ridables.patch +++ b/patches/server/0011-Integrate-ridables.patch @@ -1,11 +1,11 @@ -From b784d4883c562d97ae7a0176868e57f37c1c8a6e Mon Sep 17 00:00:00 2001 +From bae1d45340b4d2075134599f8bd63b8b79890915 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Tue, 30 Apr 2019 19:17:21 -0500 Subject: [PATCH] Integrate ridables --- .../server/ControllerLookDolphin.java | 4 +- - .../java/net/minecraft/server/Entity.java | 28 +++- + .../java/net/minecraft/server/Entity.java | 28 ++++- .../net/minecraft/server/EntityAgeable.java | 2 +- .../java/net/minecraft/server/EntityBat.java | 22 ++++ .../net/minecraft/server/EntityBlaze.java | 15 ++- @@ -14,60 +14,60 @@ Subject: [PATCH] Integrate ridables .../net/minecraft/server/EntityChicken.java | 3 +- .../java/net/minecraft/server/EntityCod.java | 1 + .../java/net/minecraft/server/EntityCow.java | 1 + - .../net/minecraft/server/EntityCreeper.java | 56 ++++++++ - .../net/minecraft/server/EntityDolphin.java | 18 ++- - .../net/minecraft/server/EntityDrowned.java | 7 +- + .../net/minecraft/server/EntityCreeper.java | 56 +++++++++ + .../net/minecraft/server/EntityDolphin.java | 23 +++- + .../net/minecraft/server/EntityDrowned.java | 16 ++- .../minecraft/server/EntityEnderDragon.java | 1 + - .../net/minecraft/server/EntityEnderman.java | 1 + + .../net/minecraft/server/EntityEnderman.java | 6 + .../net/minecraft/server/EntityEndermite.java | 3 +- - .../net/minecraft/server/EntityEvoker.java | 3 +- - .../java/net/minecraft/server/EntityFish.java | 20 +-- - .../java/net/minecraft/server/EntityFox.java | 57 ++++++-- - .../net/minecraft/server/EntityGhast.java | 1 + + .../net/minecraft/server/EntityEvoker.java | 6 +- + .../java/net/minecraft/server/EntityFish.java | 21 ++-- + .../java/net/minecraft/server/EntityFox.java | 87 +++++++++++-- + .../net/minecraft/server/EntityGhast.java | 8 +- .../minecraft/server/EntityGiantZombie.java | 2 + - .../net/minecraft/server/EntityGuardian.java | 27 +++- + .../net/minecraft/server/EntityGuardian.java | 29 ++++- .../minecraft/server/EntityGuardianElder.java | 1 + .../minecraft/server/EntityHorseAbstract.java | 4 + - .../net/minecraft/server/EntityHuman.java | 14 +- - .../server/EntityIllagerIllusioner.java | 1 + + .../net/minecraft/server/EntityHuman.java | 14 ++- + .../server/EntityIllagerIllusioner.java | 3 + + .../minecraft/server/EntityIllagerWizard.java | 3 + .../minecraft/server/EntityInsentient.java | 52 +++++++- .../net/minecraft/server/EntityIronGolem.java | 1 + .../net/minecraft/server/EntityLiving.java | 25 +++- .../net/minecraft/server/EntityMagmaCube.java | 3 +- .../minecraft/server/EntityMushroomCow.java | 1 + - .../net/minecraft/server/EntityOcelot.java | 1 + - .../net/minecraft/server/EntityPanda.java | 22 +++- - .../net/minecraft/server/EntityParrot.java | 3 +- - .../net/minecraft/server/EntityPhantom.java | 32 ++++- + .../net/minecraft/server/EntityOcelot.java | 3 + + .../net/minecraft/server/EntityPanda.java | 39 +++++- + .../net/minecraft/server/EntityParrot.java | 5 +- + .../net/minecraft/server/EntityPhantom.java | 41 +++++- .../java/net/minecraft/server/EntityPig.java | 34 +++-- - .../net/minecraft/server/EntityPigZombie.java | 1 + + .../net/minecraft/server/EntityPigZombie.java | 4 +- .../net/minecraft/server/EntityPillager.java | 1 + - .../net/minecraft/server/EntityPolarBear.java | 29 +++++ - .../minecraft/server/EntityPufferFish.java | 1 + + .../net/minecraft/server/EntityPolarBear.java | 31 +++++ + .../minecraft/server/EntityPufferFish.java | 3 + .../net/minecraft/server/EntityRabbit.java | 3 +- + .../net/minecraft/server/EntityRaider.java | 5 + .../net/minecraft/server/EntityRavager.java | 1 + .../net/minecraft/server/EntitySalmon.java | 1 + .../net/minecraft/server/EntitySheep.java | 7 +- - .../net/minecraft/server/EntityShulker.java | 1 + - .../minecraft/server/EntitySilverfish.java | 1 + + .../net/minecraft/server/EntityShulker.java | 6 + + .../minecraft/server/EntitySilverfish.java | 4 + .../net/minecraft/server/EntitySkeleton.java | 1 + .../minecraft/server/EntitySkeletonStray.java | 1 + .../server/EntitySkeletonWither.java | 1 + .../net/minecraft/server/EntitySlime.java | 3 +- .../net/minecraft/server/EntitySnowman.java | 2 + - .../net/minecraft/server/EntitySpider.java | 3 + - .../net/minecraft/server/EntitySquid.java | 47 +++++++ + .../net/minecraft/server/EntitySpider.java | 4 + + .../net/minecraft/server/EntitySquid.java | 48 +++++++ .../server/EntityTameableAnimal.java | 6 + .../minecraft/server/EntityTropicalFish.java | 1 + - .../net/minecraft/server/EntityTurtle.java | 1 + + .../net/minecraft/server/EntityTurtle.java | 13 ++ .../net/minecraft/server/EntityTypes.java | 4 + - .../java/net/minecraft/server/EntityVex.java | 1 + - .../net/minecraft/server/EntityVillager.java | 1 + - .../server/EntityVillagerTrader.java | 1 + - .../minecraft/server/EntityVindicator.java | 1 + + .../java/net/minecraft/server/EntityVex.java | 17 ++- + .../minecraft/server/EntityVindicator.java | 4 + .../net/minecraft/server/EntityWitch.java | 1 + - .../net/minecraft/server/EntityWither.java | 1 + - .../java/net/minecraft/server/EntityWolf.java | 1 + + .../net/minecraft/server/EntityWither.java | 2 + + .../java/net/minecraft/server/EntityWolf.java | 2 + .../net/minecraft/server/EntityZombie.java | 1 + .../minecraft/server/EntityZombieHusk.java | 1 + .../server/EntityZombieVillager.java | 1 + @@ -126,15 +126,15 @@ Subject: [PATCH] Integrate ridables .../server/PathfinderGoalUseItem.java | 2 + .../minecraft/server/PathfinderGoalWater.java | 1 + .../server/PathfinderGoalWaterJump.java | 2 + - .../java/net/pl3x/purpur/PurpurConfig.java | 122 ++++++++++++++++++ + .../java/net/pl3x/purpur/PurpurConfig.java | 118 ++++++++++++++++++ .../purpur/controller/ControllerLookWASD.java | 74 +++++++++++ - .../purpur/controller/ControllerMoveWASD.java | 77 +++++++++++ + .../purpur/controller/ControllerMoveWASD.java | 77 ++++++++++++ .../controller/ControllerMoveWASDFlying.java | 62 +++++++++ .../ControllerMoveWASDFlyingWithSpacebar.java | 65 ++++++++++ - .../controller/ControllerMoveWASDWater.java | 42 ++++++ + .../controller/ControllerMoveWASDWater.java | 42 +++++++ .../craftbukkit/entity/CraftLivingEntity.java | 10 ++ .../bukkit/craftbukkit/entity/CraftMob.java | 12 ++ - 130 files changed, 1095 insertions(+), 98 deletions(-) + 130 files changed, 1234 insertions(+), 105 deletions(-) create mode 100644 src/main/java/net/pl3x/purpur/controller/ControllerLookWASD.java create mode 100644 src/main/java/net/pl3x/purpur/controller/ControllerMoveWASD.java create mode 100644 src/main/java/net/pl3x/purpur/controller/ControllerMoveWASDFlying.java @@ -526,7 +526,7 @@ index f053ff0e50..16a35418f2 100644 @Override diff --git a/src/main/java/net/minecraft/server/EntityCreeper.java b/src/main/java/net/minecraft/server/EntityCreeper.java -index 165b07e142..2fb3c4be34 100644 +index 165b07e142..38ad629e47 100644 --- a/src/main/java/net/minecraft/server/EntityCreeper.java +++ b/src/main/java/net/minecraft/server/EntityCreeper.java @@ -20,6 +20,7 @@ public class EntityCreeper extends EntityMonster { @@ -574,7 +574,7 @@ index 165b07e142..2fb3c4be34 100644 + @Override + public boolean onSpacebar() { + if (powerToggleDelay > 0) { -+ return true; // just toggled power, do not jump ++ return true; // just toggled power, do not jump or ignite + } + spacebarCharge++; + if (spacebarCharge > maxFuseTicks - 2) { @@ -598,7 +598,7 @@ index 165b07e142..2fb3c4be34 100644 + // Purpur end } diff --git a/src/main/java/net/minecraft/server/EntityDolphin.java b/src/main/java/net/minecraft/server/EntityDolphin.java -index 04060bb3ef..d13d3309c6 100644 +index 04060bb3ef..091c2b2c4d 100644 --- a/src/main/java/net/minecraft/server/EntityDolphin.java +++ b/src/main/java/net/minecraft/server/EntityDolphin.java @@ -17,6 +17,7 @@ public class EntityDolphin extends EntityWaterAnimal { @@ -609,7 +609,44 @@ index 04060bb3ef..d13d3309c6 100644 this.moveController = new EntityDolphin.a(this); this.lookController = new ControllerLookDolphin(this, 10); this.setCanPickupLoot(true); -@@ -524,7 +525,7 @@ public class EntityDolphin extends EntityWaterAnimal { +@@ -322,11 +323,13 @@ public class EntityDolphin extends EntityWaterAnimal { + + @Override + public boolean a() { ++ if (this.a.getRider() != null) return false; // Purpur + return this.a.dV() && this.a.getAirTicks() >= 100; + } + + @Override + public boolean b() { ++ if (this.a.getRider() != null) return false; // Purpur + BlockPosition blockposition = this.a.l(); + + return !(new BlockPosition((double) blockposition.getX(), this.a.locY, (double) blockposition.getZ())).a((IPosition) this.a.ch(), 4.0D) && !this.b && this.a.getAirTicks() >= 100; +@@ -416,12 +419,14 @@ public class EntityDolphin extends EntityWaterAnimal { + + @Override + public boolean a() { ++ if (this.a.getRider() != null) return false; // Purpur + this.c = this.a.world.a(EntityDolphin.bA, (EntityLiving) this.a); + return this.c == null ? false : this.c.isSwimming(); + } + + @Override + public boolean b() { ++ if (this.a.getRider() != null) return false; // Purpur + return this.c != null && this.c.isSwimming() && this.a.h((Entity) this.c) < 256.0D; + } + +@@ -460,6 +465,7 @@ public class EntityDolphin extends EntityWaterAnimal { + + @Override + public boolean a() { ++ if (EntityDolphin.this.getRider() != null) return false; // Purpur + if (this.b > EntityDolphin.this.ticksLived) { + return false; + } else { +@@ -524,7 +530,7 @@ public class EntityDolphin extends EntityWaterAnimal { } } @@ -618,7 +655,7 @@ index 04060bb3ef..d13d3309c6 100644 private final EntityDolphin i; -@@ -533,8 +534,21 @@ public class EntityDolphin extends EntityWaterAnimal { +@@ -533,8 +539,21 @@ public class EntityDolphin extends EntityWaterAnimal { this.i = entitydolphin; } @@ -642,7 +679,7 @@ index 04060bb3ef..d13d3309c6 100644 this.i.setMot(this.i.getMot().add(0.0D, 0.005D, 0.0D)); } diff --git a/src/main/java/net/minecraft/server/EntityDrowned.java b/src/main/java/net/minecraft/server/EntityDrowned.java -index 7f34cdbc34..542d828a9a 100644 +index 7f34cdbc34..d78eaaf1a2 100644 --- a/src/main/java/net/minecraft/server/EntityDrowned.java +++ b/src/main/java/net/minecraft/server/EntityDrowned.java @@ -12,6 +12,7 @@ public class EntityDrowned extends EntityZombie implements IRangedEntity { @@ -680,6 +717,72 @@ index 7f34cdbc34..542d828a9a 100644 } } +@@ -265,11 +266,13 @@ public class EntityDrowned extends EntityZombie implements IRangedEntity { + + @Override + public boolean a() { ++ if (this.d.getRider() != null) return false; // Purpur + return super.a() && this.d.h(this.d.getGoalTarget()); + } + + @Override + public boolean b() { ++ if (this.d.getRider() != null) return false; // Purpur + return super.b() && this.d.h(this.d.getGoalTarget()); + } + } +@@ -292,6 +295,7 @@ public class EntityDrowned extends EntityZombie implements IRangedEntity { + + @Override + public boolean a() { ++ if (this.a.getRider() != null) return false; // Purpur + if (!this.f.J()) { + return false; + } else if (this.a.isInWater()) { +@@ -312,6 +316,7 @@ public class EntityDrowned extends EntityZombie implements IRangedEntity { + + @Override + public boolean b() { ++ if (this.a.getRider() != null) return false; // Purpur + return !this.a.getNavigation().n(); + } + +@@ -348,11 +353,13 @@ public class EntityDrowned extends EntityZombie implements IRangedEntity { + + @Override + public boolean a() { ++ if (this.g.getRider() != null) return false; // Purpur + return super.a() && !this.g.world.J() && this.g.isInWater() && this.g.locY >= (double) (this.g.world.getSeaLevel() - 3); + } + + @Override + public boolean b() { ++ if (this.g.getRider() != null) return false; // Purpur + return super.b(); + } + +@@ -391,11 +398,13 @@ public class EntityDrowned extends EntityZombie implements IRangedEntity { + + @Override + public boolean a() { ++ if (this.a.getRider() != null) return false; // Purpur + return !this.a.world.J() && this.a.isInWater() && this.a.locY < (double) (this.c - 2); + } + + @Override + public boolean b() { ++ if (this.a.getRider() != null) return false; // Purpur + return this.a() && !this.d; + } + +@@ -437,6 +446,7 @@ public class EntityDrowned extends EntityZombie implements IRangedEntity { + + @Override + public boolean a() { ++ if (this.a.getRider() != null) return false; // Purpur + return super.a() && this.a.getItemInMainHand().getItem() == Items.TRIDENT; + } + diff --git a/src/main/java/net/minecraft/server/EntityEnderDragon.java b/src/main/java/net/minecraft/server/EntityEnderDragon.java index 29fa1d1df1..484a4bc455 100644 --- a/src/main/java/net/minecraft/server/EntityEnderDragon.java @@ -693,7 +796,7 @@ index 29fa1d1df1..484a4bc455 100644 this.setHealth(this.getMaxHealth()); this.noclip = true; diff --git a/src/main/java/net/minecraft/server/EntityEnderman.java b/src/main/java/net/minecraft/server/EntityEnderman.java -index d4c4dc2fdc..8c35b93d68 100644 +index d4c4dc2fdc..75ea357a76 100644 --- a/src/main/java/net/minecraft/server/EntityEnderman.java +++ b/src/main/java/net/minecraft/server/EntityEnderman.java @@ -22,6 +22,7 @@ public class EntityEnderman extends EntityMonster { @@ -704,6 +807,46 @@ index d4c4dc2fdc..8c35b93d68 100644 this.K = 1.0F; this.a(PathType.WATER, -1.0F); } +@@ -314,6 +315,7 @@ public class EntityEnderman extends EntityMonster { + + @Override + public boolean a() { ++ if (this.enderman.getRider() != null) return false; // Purpur + return this.enderman.getCarried() != null ? false : (!this.enderman.world.getGameRules().getBoolean("mobGriefing") ? false : this.enderman.getRandom().nextInt(20) == 0); + } + +@@ -357,6 +359,7 @@ public class EntityEnderman extends EntityMonster { + + @Override + public boolean a() { ++ if (this.a.getRider() != null) return false; // Purpur + return this.a.getCarried() == null ? false : (!this.a.world.getGameRules().getBoolean("mobGriefing") ? false : this.a.getRandom().nextInt(2000) == 0); + } + +@@ -401,6 +404,7 @@ public class EntityEnderman extends EntityMonster { + + @Override + public boolean a() { ++ if (this.a.getRider() != null) return false; // Purpur + EntityLiving entityliving = this.a.getGoalTarget(); + + if (!(entityliving instanceof EntityHuman)) { +@@ -437,6 +441,7 @@ public class EntityEnderman extends EntityMonster { + + @Override + public boolean a() { ++ if (this.i.getRider() != null) return false; // Purpur + this.j = this.i.world.a(this.m, (EntityLiving) this.i); + return this.j != null; + } +@@ -455,6 +460,7 @@ public class EntityEnderman extends EntityMonster { + + @Override + public boolean b() { ++ if (this.i.getRider() != null) return false; // Purpur + if (this.j != null) { + if (!this.i.f(this.j)) { + return false; diff --git a/src/main/java/net/minecraft/server/EntityEndermite.java b/src/main/java/net/minecraft/server/EntityEndermite.java index 10b0f96531..b191539d7a 100644 --- a/src/main/java/net/minecraft/server/EntityEndermite.java @@ -726,7 +869,7 @@ index 10b0f96531..b191539d7a 100644 } diff --git a/src/main/java/net/minecraft/server/EntityEvoker.java b/src/main/java/net/minecraft/server/EntityEvoker.java -index 026847dff2..bd143396ac 100644 +index 026847dff2..0402af0bcd 100644 --- a/src/main/java/net/minecraft/server/EntityEvoker.java +++ b/src/main/java/net/minecraft/server/EntityEvoker.java @@ -9,6 +9,7 @@ public class EntityEvoker extends EntityIllagerWizard { @@ -746,8 +889,32 @@ index 026847dff2..bd143396ac 100644 this.targetSelector.a(2, (new PathfinderGoalNearestAttackableTarget<>(this, EntityHuman.class, true)).a(300)); this.targetSelector.a(3, (new PathfinderGoalNearestAttackableTarget<>(this, EntityVillagerAbstract.class, false)).a(300)); this.targetSelector.a(3, new PathfinderGoalNearestAttackableTarget<>(this, EntityIronGolem.class, false)); +@@ -117,6 +118,7 @@ public class EntityEvoker extends EntityIllagerWizard { + + @Override + public boolean a() { ++ if (EntityEvoker.this.getRider() != null) return false; // Purpur + if (EntityEvoker.this.getGoalTarget() != null) { + return false; + } else if (EntityEvoker.this.eg()) { +@@ -139,6 +141,7 @@ public class EntityEvoker extends EntityIllagerWizard { + + @Override + public boolean b() { ++ if (EntityEvoker.this.getRider() != null) return false; // Purpur + return EntityEvoker.this.eq() != null && this.b > 0; + } + +@@ -195,6 +198,7 @@ public class EntityEvoker extends EntityIllagerWizard { + + @Override + public boolean a() { ++ if (EntityEvoker.this.getRider() != null) return false; // Purpur + if (!super.a()) { + return false; + } else { diff --git a/src/main/java/net/minecraft/server/EntityFish.java b/src/main/java/net/minecraft/server/EntityFish.java -index a28fbdf1e0..36229a2c4b 100644 +index a28fbdf1e0..ee26648d8a 100644 --- a/src/main/java/net/minecraft/server/EntityFish.java +++ b/src/main/java/net/minecraft/server/EntityFish.java @@ -75,11 +75,7 @@ public abstract class EntityFish extends EntityWaterAnimal { @@ -799,8 +966,16 @@ index a28fbdf1e0..36229a2c4b 100644 if (this.i.a(TagsFluid.WATER)) { this.i.setMot(this.i.getMot().add(0.0D, 0.005D, 0.0D)); } +@@ -209,6 +213,7 @@ public abstract class EntityFish extends EntityWaterAnimal { + + @Override + public boolean a() { ++ if (this.h.getRider() != null) return false; // Purpur + return this.h.dV() && super.a(); + } + } diff --git a/src/main/java/net/minecraft/server/EntityFox.java b/src/main/java/net/minecraft/server/EntityFox.java -index b363e9ce99..b44e714022 100644 +index b363e9ce99..0352e8da94 100644 --- a/src/main/java/net/minecraft/server/EntityFox.java +++ b/src/main/java/net/minecraft/server/EntityFox.java @@ -48,6 +48,7 @@ public class EntityFox extends EntityAnimal { @@ -899,7 +1074,35 @@ index b363e9ce99..b44e714022 100644 double d0 = entityliving.locZ - entityfox.locZ; double d1 = entityliving.locX - entityfox.locX; double d2 = d0 / d1; -@@ -681,16 +710,16 @@ public class EntityFox extends EntityAnimal { +@@ -646,11 +675,13 @@ public class EntityFox extends EntityAnimal { + + @Override + public boolean a() { ++ if (EntityFox.this.getRider() != null) return false; // Purpur + return super.a() && !EntityFox.this.dX() && !EntityFox.this.eg(); + } + + @Override + public boolean b() { ++ if (EntityFox.this.getRider() != null) return false; // Purpur + return super.b() && !EntityFox.this.dX() && !EntityFox.this.eg(); + } + } +@@ -666,11 +697,13 @@ public class EntityFox extends EntityAnimal { + + @Override + public boolean a() { ++ if (EntityFox.this.getRider() != null) return false; // Purpur + return !this.b.el() && super.a(); + } + + @Override + public boolean b() { ++ if (EntityFox.this.getRider() != null) return false; // Purpur + return !this.b.el() && super.b(); + } + +@@ -681,16 +714,16 @@ public class EntityFox extends EntityAnimal { } } @@ -919,38 +1122,151 @@ index b363e9ce99..b44e714022 100644 } } -@@ -1004,12 +1033,12 @@ public class EntityFox extends EntityAnimal { +@@ -707,6 +740,7 @@ public class EntityFox extends EntityAnimal { + + @Override + public boolean a() { ++ if (EntityFox.this.getRider() != null) return false; // Purpur + if (!EntityFox.this.ee()) { + return false; + } else { +@@ -734,6 +768,7 @@ public class EntityFox extends EntityAnimal { + + @Override + public boolean b() { ++ if (EntityFox.this.getRider() != null) return false; // Purpur + EntityLiving entityliving = EntityFox.this.getGoalTarget(); + + if (entityliving != null && entityliving.isAlive()) { +@@ -837,11 +872,13 @@ public class EntityFox extends EntityAnimal { + + @Override + public boolean a() { ++ if (EntityFox.this.getRider() != null) return false; // Purpur + return super.a() && this.g(); + } + + @Override + public boolean b() { ++ if (EntityFox.this.getRider() != null) return false; // Purpur + return super.b() && this.g(); + } + +@@ -858,6 +895,7 @@ public class EntityFox extends EntityAnimal { + + @Override + public boolean a() { ++ if (EntityFox.this.getRider() != null) return false; // Purpur + return !EntityFox.this.el() && super.a(); + } + } +@@ -872,6 +910,7 @@ public class EntityFox extends EntityAnimal { + + @Override + public boolean a() { ++ if (EntityFox.this.getRider() != null) return false; // Purpur + return EntityFox.this.dX(); + } + +@@ -979,6 +1018,7 @@ public class EntityFox extends EntityAnimal { + + @Override + public boolean a() { ++ if (EntityFox.this.getRider() != null) return false; // Purpur + return !EntityFox.this.isSleeping() && super.a(); + } + +@@ -1004,12 +1044,14 @@ public class EntityFox extends EntityAnimal { @Override public boolean a() { - return EntityFox.this.getLastDamager() == null && EntityFox.this.getRandom().nextFloat() < 0.02F && !EntityFox.this.isSleeping() && EntityFox.this.getGoalTarget() == null && EntityFox.this.getNavigation().n() && !this.h() && !EntityFox.this.dY() && !EntityFox.this.isCrouching(); ++ if (EntityFox.this.getRider() != null) return false; // Purpur + return getRider() == null && EntityFox.this.getLastDamager() == null && EntityFox.this.getRandom().nextFloat() < 0.02F && !EntityFox.this.isSleeping() && EntityFox.this.getGoalTarget() == null && EntityFox.this.getNavigation().n() && !this.h() && !EntityFox.this.dY() && !EntityFox.this.isCrouching(); // Purpur } @Override public boolean b() { - return this.f > 0; ++ if (EntityFox.this.getRider() != null) return false; // Purpur + return getRider() == null && this.f > 0; // Purpur } @Override -@@ -1290,8 +1319,14 @@ public class EntityFox extends EntityAnimal { +@@ -1057,11 +1099,13 @@ public class EntityFox extends EntityAnimal { @Override public boolean a() { -- return !EntityFox.this.isSitting() && !EntityFox.this.isSleeping() && !EntityFox.this.isCrouching() && !EntityFox.this.dX() && super.a(); -+ return getRider() == null && !EntityFox.this.isSitting() && !EntityFox.this.isSleeping() && !EntityFox.this.isCrouching() && !EntityFox.this.dX() && super.a(); // Purpur ++ if (EntityFox.this.getRider() != null) return false; // Purpur + return EntityFox.this.bb == 0.0F && EntityFox.this.bc == 0.0F && EntityFox.this.bd == 0.0F ? this.j() || EntityFox.this.isSleeping() : false; + } + + @Override + public boolean b() { ++ if (EntityFox.this.getRider() != null) return false; // Purpur + return this.j(); + } + +@@ -1100,6 +1144,18 @@ public class EntityFox extends EntityAnimal { + this.b = (new PathfinderTargetCondition()).a(12.0D).c().a(EntityFox.this.new c()); + } + ++ // Purpur start ++ @Override ++ public boolean a() { ++ return EntityFox.this.getRider() == null; + } + ++ @Override ++ public boolean b() { ++ return EntityFox.this.getRider() == null; ++ } ++ // Purpur end ++ + protected boolean g() { + BlockPosition blockposition = new BlockPosition(EntityFox.this); + +@@ -1130,6 +1186,7 @@ public class EntityFox extends EntityAnimal { + + @Override + public boolean a() { ++ if (EntityFox.this.getRider() != null) return false; // Purpur + if (!EntityFox.this.isSleeping() && this.a.getGoalTarget() == null) { + if (EntityFox.this.world.U()) { + return true; +@@ -1167,6 +1224,7 @@ public class EntityFox extends EntityAnimal { + + @Override + public boolean a() { ++ if (EntityFox.this.getRider() != null) return false; // Purpur + if (this.b > 0 && this.e.getRandom().nextInt(this.b) != 0) { + return false; + } else { +@@ -1290,8 +1348,15 @@ public class EntityFox extends EntityAnimal { + + @Override + public boolean a() { ++ if (EntityFox.this.getRider() != null) return false; // Purpur + return !EntityFox.this.isSitting() && !EntityFox.this.isSleeping() && !EntityFox.this.isCrouching() && !EntityFox.this.dX() && super.a(); + } ++ + // Purpur start + public boolean b() { -+ return getRider() == null && super.b(); - } ++ return EntityFox.this.getRider() == null && super.b(); ++ } + // Purpur end } class u extends PathfinderGoal { -@@ -1349,16 +1384,16 @@ public class EntityFox extends EntityAnimal { +@@ -1302,6 +1367,7 @@ public class EntityFox extends EntityAnimal { + + @Override + public boolean a() { ++ if (EntityFox.this.getRider() != null) return false; // Purpur + if (EntityFox.this.isSleeping()) { + return false; + } else { +@@ -1349,16 +1415,16 @@ public class EntityFox extends EntityAnimal { } } @@ -970,8 +1286,16 @@ index b363e9ce99..b44e714022 100644 } } +@@ -1372,6 +1438,7 @@ public class EntityFox extends EntityAnimal { + + @Override + public boolean a() { ++ if (EntityFox.this.getRider() != null) return false; // Purpur + if (!EntityFox.this.getEquipment(EnumItemSlot.MAINHAND).isEmpty()) { + return false; + } else if (EntityFox.this.getGoalTarget() == null && EntityFox.this.getLastDamager() == null) { diff --git a/src/main/java/net/minecraft/server/EntityGhast.java b/src/main/java/net/minecraft/server/EntityGhast.java -index 55b96c4d2e..a05c3916f6 100644 +index 55b96c4d2e..10df4e5b07 100644 --- a/src/main/java/net/minecraft/server/EntityGhast.java +++ b/src/main/java/net/minecraft/server/EntityGhast.java @@ -10,6 +10,7 @@ public class EntityGhast extends EntityFlying implements IMonster { @@ -982,6 +1306,48 @@ index 55b96c4d2e..a05c3916f6 100644 this.f = 5; this.moveController = new EntityGhast.ControllerGhast(this); } +@@ -132,6 +133,7 @@ public class EntityGhast extends EntityFlying implements IMonster { + + @Override + public boolean a() { ++ if (this.ghast.getRider() != null) return false; // Purpur + return this.ghast.getGoalTarget() != null; + } + +@@ -195,6 +197,7 @@ public class EntityGhast extends EntityFlying implements IMonster { + + @Override + public boolean a() { ++ if (this.a.getRider() != null) return false; // Purpur + return true; + } + +@@ -232,6 +235,7 @@ public class EntityGhast extends EntityFlying implements IMonster { + + @Override + public boolean a() { ++ if (this.a.getRider() != null) return false; // Purpur + ControllerMove controllermove = this.a.getControllerMove(); + + if (!controllermove.b()) { +@@ -262,7 +266,7 @@ public class EntityGhast extends EntityFlying implements IMonster { + } + } + +- static class ControllerGhast extends ControllerMove { ++ static class ControllerGhast extends net.pl3x.purpur.controller.ControllerMoveWASDFlying { // Purpur + + private final EntityGhast i; + private int j; +@@ -273,7 +277,7 @@ public class EntityGhast extends EntityFlying implements IMonster { + } + + @Override +- public void a() { ++ public void tick() { // Purpur + if (this.h == ControllerMove.Operation.MOVE_TO) { + if (this.j-- <= 0) { + this.j += this.i.getRandom().nextInt(5) + 2; diff --git a/src/main/java/net/minecraft/server/EntityGiantZombie.java b/src/main/java/net/minecraft/server/EntityGiantZombie.java index bcbade19ea..b7e2022b19 100644 --- a/src/main/java/net/minecraft/server/EntityGiantZombie.java @@ -997,7 +1363,7 @@ index bcbade19ea..b7e2022b19 100644 } diff --git a/src/main/java/net/minecraft/server/EntityGuardian.java b/src/main/java/net/minecraft/server/EntityGuardian.java -index 335416d962..7835154edd 100644 +index 335416d962..03b536c48e 100644 --- a/src/main/java/net/minecraft/server/EntityGuardian.java +++ b/src/main/java/net/minecraft/server/EntityGuardian.java @@ -22,8 +22,15 @@ public class EntityGuardian extends EntityMonster { @@ -1062,6 +1428,22 @@ index 335416d962..7835154edd 100644 if (this.h == ControllerMove.Operation.MOVE_TO && !this.i.getNavigation().n()) { Vec3D vec3d = new Vec3D(this.b - this.i.locX, this.c - this.i.locY, this.d - this.i.locZ); double d0 = vec3d.f(); +@@ -382,6 +399,7 @@ public class EntityGuardian extends EntityMonster { + + @Override + public boolean a() { ++ if (this.a.getRider() != null) return false; // Purpur + EntityLiving entityliving = this.a.getGoalTarget(); + + return entityliving != null && entityliving.isAlive(); +@@ -389,6 +407,7 @@ public class EntityGuardian extends EntityMonster { + + @Override + public boolean b() { ++ if (this.a.getRider() != null) return false; // Purpur + return super.b() && (this.c || this.a.h((Entity) this.a.getGoalTarget()) > 9.0D); + } + diff --git a/src/main/java/net/minecraft/server/EntityGuardianElder.java b/src/main/java/net/minecraft/server/EntityGuardianElder.java index a85a7bf59e..a32f6ee2a3 100644 --- a/src/main/java/net/minecraft/server/EntityGuardianElder.java @@ -1117,7 +1499,7 @@ index f709e7d87a..b487f37ad4 100644 this.setSneaking(false); } else { diff --git a/src/main/java/net/minecraft/server/EntityIllagerIllusioner.java b/src/main/java/net/minecraft/server/EntityIllagerIllusioner.java -index 76641682b1..bab9431b35 100644 +index 76641682b1..8c33634726 100644 --- a/src/main/java/net/minecraft/server/EntityIllagerIllusioner.java +++ b/src/main/java/net/minecraft/server/EntityIllagerIllusioner.java @@ -9,6 +9,7 @@ public class EntityIllagerIllusioner extends EntityIllagerWizard implements IRan @@ -1128,6 +1510,50 @@ index 76641682b1..bab9431b35 100644 this.f = 5; this.bA = new Vec3D[2][4]; +@@ -162,6 +163,7 @@ public class EntityIllagerIllusioner extends EntityIllagerWizard implements IRan + + @Override + public boolean a() { ++ if (EntityIllagerIllusioner.this.getRider() != null) return false; // Purpur + return !super.a() ? false : (EntityIllagerIllusioner.this.getGoalTarget() == null ? false : (EntityIllagerIllusioner.this.getGoalTarget().getId() == this.e ? false : EntityIllagerIllusioner.this.world.getDamageScaler(new BlockPosition(EntityIllagerIllusioner.this)).a((float) EnumDifficulty.NORMAL.ordinal()))); + } + +@@ -205,6 +207,7 @@ public class EntityIllagerIllusioner extends EntityIllagerWizard implements IRan + + @Override + public boolean a() { ++ if (EntityIllagerIllusioner.this.getRider() != null) return false; // Purpur + return !super.a() ? false : !EntityIllagerIllusioner.this.hasEffect(MobEffects.INVISIBILITY); + } + +diff --git a/src/main/java/net/minecraft/server/EntityIllagerWizard.java b/src/main/java/net/minecraft/server/EntityIllagerWizard.java +index f8627f818a..a27b14119e 100644 +--- a/src/main/java/net/minecraft/server/EntityIllagerWizard.java ++++ b/src/main/java/net/minecraft/server/EntityIllagerWizard.java +@@ -115,6 +115,7 @@ public abstract class EntityIllagerWizard extends EntityIllagerAbstract { + + @Override + public boolean a() { ++ if (EntityIllagerWizard.this.getRider() != null) return false; // Purpur + EntityLiving entityliving = EntityIllagerWizard.this.getGoalTarget(); + + return entityliving != null && entityliving.isAlive() ? (EntityIllagerWizard.this.eg() ? false : EntityIllagerWizard.this.ticksLived >= this.c) : false; +@@ -122,6 +123,7 @@ public abstract class EntityIllagerWizard extends EntityIllagerAbstract { + + @Override + public boolean b() { ++ if (EntityIllagerWizard.this.getRider() != null) return false; // Purpur + EntityLiving entityliving = EntityIllagerWizard.this.getGoalTarget(); + + return entityliving != null && entityliving.isAlive() && this.b > 0; +@@ -175,6 +177,7 @@ public abstract class EntityIllagerWizard extends EntityIllagerAbstract { + + @Override + public boolean a() { ++ if (EntityIllagerWizard.this.getRider() != null) return false; // Purpur + return EntityIllagerWizard.this.ei() > 0; + } + diff --git a/src/main/java/net/minecraft/server/EntityInsentient.java b/src/main/java/net/minecraft/server/EntityInsentient.java index 48ce154848..68ba9b8808 100644 --- a/src/main/java/net/minecraft/server/EntityInsentient.java @@ -1354,7 +1780,7 @@ index 31b3062112..c918288e08 100644 } diff --git a/src/main/java/net/minecraft/server/EntityOcelot.java b/src/main/java/net/minecraft/server/EntityOcelot.java -index 1713bead27..9841219695 100644 +index 1713bead27..e3a9a3f3d2 100644 --- a/src/main/java/net/minecraft/server/EntityOcelot.java +++ b/src/main/java/net/minecraft/server/EntityOcelot.java @@ -13,6 +13,7 @@ public class EntityOcelot extends EntityAnimal { @@ -1365,8 +1791,22 @@ index 1713bead27..9841219695 100644 this.dV(); } +@@ -263,11 +264,13 @@ public class EntityOcelot extends EntityAnimal { + + @Override + public boolean a() { ++ if (this.i.getRider() != null) return false; // Purpur + return !this.i.isTrusting() && super.a(); + } + + @Override + public boolean b() { ++ if (this.i.getRider() != null) return false; // Purpur + return !this.i.isTrusting() && super.b(); + } + } diff --git a/src/main/java/net/minecraft/server/EntityPanda.java b/src/main/java/net/minecraft/server/EntityPanda.java -index b46ca388eb..d378f87b41 100644 +index b46ca388eb..0585865f95 100644 --- a/src/main/java/net/minecraft/server/EntityPanda.java +++ b/src/main/java/net/minecraft/server/EntityPanda.java @@ -37,6 +37,7 @@ public class EntityPanda extends EntityAnimal { @@ -1443,8 +1883,128 @@ index b46ca388eb..d378f87b41 100644 @Nullable @Override protected SoundEffect getSoundAmbient() { +@@ -626,6 +642,7 @@ public class EntityPanda extends EntityAnimal { + + @Override + public boolean a() { ++ if (this.f.getRider() != null) return false; // Purpur + if (!this.f.isBurning()) { + return false; + } else { +@@ -644,6 +661,7 @@ public class EntityPanda extends EntityAnimal { + + @Override + public boolean b() { ++ if (this.f.getRider() != null) return false; // Purpur + if (this.f.dX()) { + this.f.getNavigation().o(); + return false; +@@ -664,6 +682,7 @@ public class EntityPanda extends EntityAnimal { + + @Override + public boolean b() { ++ if (this.a.getRider() != null) return false; // Purpur + if (!this.a.bH && !this.a.bI) { + return super.b(); + } else { +@@ -692,11 +711,13 @@ public class EntityPanda extends EntityAnimal { + + @Override + public boolean a() { ++ if (this.a.getRider() != null) return false; // Purpur + return this.b < this.a.ticksLived && this.a.ej() && this.a.eq() && this.a.random.nextInt(400) == 1; + } + + @Override + public boolean b() { ++ if (this.a.getRider() != null) return false; // Purpur + return !this.a.isInWater() && (this.a.ej() || this.a.random.nextInt(600) != 1) ? this.a.random.nextInt(2000) != 1 : false; + } + +@@ -723,6 +744,7 @@ public class EntityPanda extends EntityAnimal { + + @Override + public boolean a() { ++ if (EntityPanda.this.getRider() != null) return false; // Purpur + if (this.b <= EntityPanda.this.ticksLived && !EntityPanda.this.isBaby() && !EntityPanda.this.isInWater() && EntityPanda.this.eq() && EntityPanda.this.dV() <= 0) { + List list = EntityPanda.this.world.a(EntityItem.class, EntityPanda.this.getBoundingBox().grow(6.0D, 6.0D, 6.0D), EntityPanda.PICKUP_PREDICATE); + +@@ -734,6 +756,7 @@ public class EntityPanda extends EntityAnimal { + + @Override + public boolean b() { ++ if (EntityPanda.this.getRider() != null) return false; // Purpur + return !EntityPanda.this.isInWater() && (EntityPanda.this.ej() || EntityPanda.this.random.nextInt(600) != 1) ? EntityPanda.this.random.nextInt(2000) != 1 : false; + } + +@@ -787,6 +810,7 @@ public class EntityPanda extends EntityAnimal { + + @Override + public boolean a() { ++ if (this.i.getRider() != null) return false; // Purpur + return this.i.ek() && this.i.eq() && super.a(); + } + } +@@ -804,6 +828,7 @@ public class EntityPanda extends EntityAnimal { + + @Override + public boolean a() { ++ if (this.e.getRider() != null) return false; // Purpur + if (super.a() && this.e.dV() == 0) { + if (!this.h()) { + if (this.f <= this.e.ticksLived) { +@@ -856,6 +881,7 @@ public class EntityPanda extends EntityAnimal { + + @Override + public boolean a() { ++ if (this.a.getRider() != null) return false; // Purpur + return this.a.isBaby() && this.a.eq() ? (this.a.en() && this.a.random.nextInt(500) == 1 ? true : this.a.random.nextInt(6000) == 1) : false; + } + +@@ -881,6 +907,7 @@ public class EntityPanda extends EntityAnimal { + + @Override + public boolean a() { ++ if (this.a.getRider() != null) return false; // Purpur + if ((this.a.isBaby() || this.a.el()) && this.a.onGround) { + if (!this.a.eq()) { + return false; +@@ -933,6 +960,7 @@ public class EntityPanda extends EntityAnimal { + + @Override + public boolean a() { ++ if (this.f.getRider() != null) return false; // Purpur + return this.f.eq() && super.a(); + } + } +@@ -948,6 +976,7 @@ public class EntityPanda extends EntityAnimal { + + @Override + public boolean a() { ++ if (this.d.getRider() != null) return false; // Purpur + return this.d.eq() && super.a(); + } + } +@@ -957,7 +986,7 @@ public class EntityPanda extends EntityAnimal { + private e() {} + } + +- static class i extends ControllerMove { ++ static class i extends net.pl3x.purpur.controller.ControllerMoveWASD { // Purpur + + private final EntityPanda i; + +@@ -967,7 +996,7 @@ public class EntityPanda extends EntityAnimal { + } + + @Override +- public void a() { ++ public void tick() { // Purpur + if (this.i.eq()) { + super.a(); + } diff --git a/src/main/java/net/minecraft/server/EntityParrot.java b/src/main/java/net/minecraft/server/EntityParrot.java -index 6173a86e09..a795047b67 100644 +index 6173a86e09..c6c5f66b3c 100644 --- a/src/main/java/net/minecraft/server/EntityParrot.java +++ b/src/main/java/net/minecraft/server/EntityParrot.java @@ -21,7 +21,7 @@ public class EntityParrot extends EntityPerchable implements EntityBird { @@ -1456,16 +2016,18 @@ index 6173a86e09..a795047b67 100644 hashmap.put(EntityTypes.BLAZE, SoundEffects.ENTITY_PARROT_IMITATE_BLAZE); hashmap.put(EntityTypes.CAVE_SPIDER, SoundEffects.ENTITY_PARROT_IMITATE_SPIDER); hashmap.put(EntityTypes.CREEPER, SoundEffects.ENTITY_PARROT_IMITATE_CREEPER); -@@ -67,6 +67,7 @@ public class EntityParrot extends EntityPerchable implements EntityBird { +@@ -67,7 +67,8 @@ public class EntityParrot extends EntityPerchable implements EntityBird { public EntityParrot(EntityTypes entitytypes, World world) { super(entitytypes, world); +- this.moveController = new ControllerMoveFlying(this); + this.isRidable = net.pl3x.purpur.PurpurConfig.ridableParrot; // Purpur - this.moveController = new ControllerMoveFlying(this); ++ this.moveController = new net.pl3x.purpur.controller.ControllerMoveWASDFlyingWithSpacebar(this); } + @Nullable diff --git a/src/main/java/net/minecraft/server/EntityPhantom.java b/src/main/java/net/minecraft/server/EntityPhantom.java -index 6aa116f4b8..238c68edf5 100644 +index 6aa116f4b8..5808363b0f 100644 --- a/src/main/java/net/minecraft/server/EntityPhantom.java +++ b/src/main/java/net/minecraft/server/EntityPhantom.java @@ -16,12 +16,14 @@ public class EntityPhantom extends EntityFlying implements IMonster { @@ -1492,7 +2054,78 @@ index 6aa116f4b8..238c68edf5 100644 this.setOnFire(8); } -@@ -605,14 +607,23 @@ public class EntityPhantom extends EntityFlying implements IMonster { +@@ -239,6 +241,7 @@ public class EntityPhantom extends EntityFlying implements IMonster { + + @Override + public boolean a() { // shouldExecute ++ if (this.phantom.getRider() != null) return false; + double range = maxTargetRange(); + List crystals = world.a(EntityEnderCrystal.class, phantom.getBoundingBox().grow(range, range, range)); + if (crystals.isEmpty()) { +@@ -255,6 +258,7 @@ public class EntityPhantom extends EntityFlying implements IMonster { + + @Override + public boolean b() { // shouldContinueExecuting ++ if (this.phantom.getRider() != null) return false; + if (crystal == null || !crystal.isAlive()) { + return false; + } +@@ -306,6 +310,7 @@ public class EntityPhantom extends EntityFlying implements IMonster { + + @Override + public boolean a() { // shouldExecute ++ if (this.phantom.getRider() != null) return false; + return phantom.isCirclingCrystal(); + } + +@@ -368,6 +373,7 @@ public class EntityPhantom extends EntityFlying implements IMonster { + + @Override + public boolean a() { ++ if (EntityPhantom.this.getRider() != null) return false; // Purpur + if (this.c > 0) { + --this.c; + return false; +@@ -397,6 +403,7 @@ public class EntityPhantom extends EntityFlying implements IMonster { + + @Override + public boolean b() { ++ if (EntityPhantom.this.getRider() != null) return false; // Purpur + EntityLiving entityliving = EntityPhantom.this.getGoalTarget(); + + return entityliving != null ? EntityPhantom.this.a(entityliving, PathfinderTargetCondition.a) : false; +@@ -411,6 +418,7 @@ public class EntityPhantom extends EntityFlying implements IMonster { + + @Override + public boolean a() { ++ if (EntityPhantom.this.getRider() != null) return false; // Purpur + EntityLiving entityliving = EntityPhantom.this.getGoalTarget(); + + return !isCirclingCrystal() && entityliving != null && EntityPhantom.this.a(EntityPhantom.this.getGoalTarget(), PathfinderTargetCondition.a); // Purpur +@@ -459,12 +467,14 @@ public class EntityPhantom extends EntityFlying implements IMonster { + + @Override + public boolean a() { ++ if (EntityPhantom.this.getRider() != null) return false; // Purpur + return !isCirclingCrystal() && EntityPhantom.this.getGoalTarget() != null && EntityPhantom.this.bz == EntityPhantom.AttackPhase.SWOOP; // Purpur + } + + @Override + public boolean b() { + // Purpur start ++ if (EntityPhantom.this.getRider() != null) return false; + if (isCirclingCrystal()) { + return false; + } +@@ -538,6 +548,7 @@ public class EntityPhantom extends EntityFlying implements IMonster { + + @Override + public boolean a() { ++ if (EntityPhantom.this.getRider() != null) return false; // Purpur + return !isCirclingCrystal() && EntityPhantom.this.getGoalTarget() == null || EntityPhantom.this.bz == EntityPhantom.AttackPhase.CIRCLE; // Purpur + } + +@@ -605,14 +616,23 @@ public class EntityPhantom extends EntityFlying implements IMonster { } } @@ -1518,7 +2151,7 @@ index 6aa116f4b8..238c68edf5 100644 } class d extends EntityAIBodyControl { -@@ -628,7 +639,7 @@ public class EntityPhantom extends EntityFlying implements IMonster { +@@ -628,7 +648,7 @@ public class EntityPhantom extends EntityFlying implements IMonster { } } @@ -1527,7 +2160,7 @@ index 6aa116f4b8..238c68edf5 100644 private float j = 0.1F; -@@ -636,8 +647,19 @@ public class EntityPhantom extends EntityFlying implements IMonster { +@@ -636,8 +656,19 @@ public class EntityPhantom extends EntityFlying implements IMonster { super(entityinsentient); } @@ -1603,7 +2236,7 @@ index 616075569f..fd57e5bde0 100644 @Override diff --git a/src/main/java/net/minecraft/server/EntityPigZombie.java b/src/main/java/net/minecraft/server/EntityPigZombie.java -index dc08a7c576..07504f7363 100644 +index dc08a7c576..77c370c0bc 100644 --- a/src/main/java/net/minecraft/server/EntityPigZombie.java +++ b/src/main/java/net/minecraft/server/EntityPigZombie.java @@ -13,6 +13,7 @@ public class EntityPigZombie extends EntityZombie { @@ -1614,6 +2247,23 @@ index dc08a7c576..07504f7363 100644 this.a(PathType.LAVA, 8.0F); } +@@ -172,7 +173,7 @@ public class EntityPigZombie extends EntityZombie { + + @Override + public boolean a(EntityHuman entityhuman, EnumHand enumhand) { +- return false; ++ return tryRide(entityhuman, enumhand); // Purpur + } + + @Override +@@ -198,6 +199,7 @@ public class EntityPigZombie extends EntityZombie { + + @Override + public boolean a() { ++ if (this.e.getRider() != null) return false; // Purpur + return ((EntityPigZombie) this.e).ed() && super.a(); + } + } diff --git a/src/main/java/net/minecraft/server/EntityPillager.java b/src/main/java/net/minecraft/server/EntityPillager.java index 845f7ac32a..c945f52f22 100644 --- a/src/main/java/net/minecraft/server/EntityPillager.java @@ -1627,7 +2277,7 @@ index 845f7ac32a..c945f52f22 100644 @Override diff --git a/src/main/java/net/minecraft/server/EntityPolarBear.java b/src/main/java/net/minecraft/server/EntityPolarBear.java -index 182a3195ef..8ecd2a6f2f 100644 +index 182a3195ef..13621ee474 100644 --- a/src/main/java/net/minecraft/server/EntityPolarBear.java +++ b/src/main/java/net/minecraft/server/EntityPolarBear.java @@ -1,5 +1,8 @@ @@ -1698,8 +2348,24 @@ index 182a3195ef..8ecd2a6f2f 100644 class e extends PathfinderGoalPanic { public e() { +@@ -173,6 +202,7 @@ public class EntityPolarBear extends EntityAnimal { + + @Override + public boolean a() { ++ if (EntityPolarBear.this.getRider() != null) return false; // Purpur + return !EntityPolarBear.this.isBaby() && !EntityPolarBear.this.isBurning() ? false : super.a(); + } + } +@@ -228,6 +258,7 @@ public class EntityPolarBear extends EntityAnimal { + + @Override + public boolean a() { ++ if (EntityPolarBear.this.getRider() != null) return false; // Purpur + if (EntityPolarBear.this.isBaby()) { + return false; + } else { diff --git a/src/main/java/net/minecraft/server/EntityPufferFish.java b/src/main/java/net/minecraft/server/EntityPufferFish.java -index 153d34120a..7a008627b4 100644 +index 153d34120a..0189060bf8 100644 --- a/src/main/java/net/minecraft/server/EntityPufferFish.java +++ b/src/main/java/net/minecraft/server/EntityPufferFish.java @@ -15,6 +15,7 @@ public class EntityPufferFish extends EntityFish { @@ -1710,6 +2376,22 @@ index 153d34120a..7a008627b4 100644 } @Override +@@ -177,6 +178,7 @@ public class EntityPufferFish extends EntityFish { + + @Override + public boolean a() { ++ if (this.a.getRider() != null) return false; // Purpur + List list = this.a.world.a(EntityLiving.class, this.a.getBoundingBox().g(2.0D), EntityPufferFish.bz); + + return !list.isEmpty(); +@@ -195,6 +197,7 @@ public class EntityPufferFish extends EntityFish { + + @Override + public boolean b() { ++ if (this.a.getRider() != null) return false; // Purpur + List list = this.a.world.a(EntityLiving.class, this.a.getBoundingBox().g(2.0D), EntityPufferFish.bz); + + return !list.isEmpty(); diff --git a/src/main/java/net/minecraft/server/EntityRabbit.java b/src/main/java/net/minecraft/server/EntityRabbit.java index f6fa871587..ffdb39725a 100644 --- a/src/main/java/net/minecraft/server/EntityRabbit.java @@ -1731,6 +2413,50 @@ index f6fa871587..ffdb39725a 100644 super.jump(); double d0 = this.moveController.c(); +diff --git a/src/main/java/net/minecraft/server/EntityRaider.java b/src/main/java/net/minecraft/server/EntityRaider.java +index 0c9927d078..7edcaf9230 100644 +--- a/src/main/java/net/minecraft/server/EntityRaider.java ++++ b/src/main/java/net/minecraft/server/EntityRaider.java +@@ -277,6 +277,7 @@ public abstract class EntityRaider extends EntityMonsterPatrolling { + + @Override + public boolean a() { ++ if (this.a.getRider() != null) return false; // Purpur + this.j(); + return this.g() && this.h() && this.a.getGoalTarget() == null; + } +@@ -302,6 +303,7 @@ public abstract class EntityRaider extends EntityMonsterPatrolling { + + @Override + public boolean b() { ++ if (this.a.getRider() != null) return false; // Purpur + return this.a.getNavigation().n() ? false : this.a.getGoalTarget() == null && !this.c.a((IPosition) this.a.ch(), (double) (this.a.getWidth() + (float) this.e)) && !this.f; + } + +@@ -381,6 +383,7 @@ public abstract class EntityRaider extends EntityMonsterPatrolling { + + @Override + public boolean a() { ++ if (this.c.getRider() != null) return false; // Purpur + EntityLiving entityliving = this.c.getLastDamager(); + + return this.c.ek() == null && this.c.isPatrolling() && this.c.getGoalTarget() != null && !this.c.dR() && (entityliving == null || entityliving.getEntityType() != EntityTypes.PLAYER); +@@ -452,6 +455,7 @@ public abstract class EntityRaider extends EntityMonsterPatrolling { + + @Override + public boolean a() { ++ if (this.b.getRider() != null) return false; // Purpur + Raid raid = this.b.ek(); + + return this.b.isAlive() && this.b.getGoalTarget() == null && raid != null && raid.f(); +@@ -494,6 +498,7 @@ public abstract class EntityRaider extends EntityMonsterPatrolling { + + @Override + public boolean a() { ++ if (this.b.getRider() != null) return false; // Purpur + Raid raid = this.b.ek(); + + if (this.b.el() && !this.b.ek().a() && this.b.dY() && !ItemStack.matches(this.b.getEquipment(EnumItemSlot.HEAD), Raid.a)) { diff --git a/src/main/java/net/minecraft/server/EntityRavager.java b/src/main/java/net/minecraft/server/EntityRavager.java index 9c22323c47..9162049c12 100644 --- a/src/main/java/net/minecraft/server/EntityRavager.java @@ -1788,7 +2514,7 @@ index df1bfc94e2..f7d7f417ce 100644 @Override diff --git a/src/main/java/net/minecraft/server/EntityShulker.java b/src/main/java/net/minecraft/server/EntityShulker.java -index 1df311d852..e821efe62e 100644 +index 1df311d852..e09ce366ca 100644 --- a/src/main/java/net/minecraft/server/EntityShulker.java +++ b/src/main/java/net/minecraft/server/EntityShulker.java @@ -26,6 +26,7 @@ public class EntityShulker extends EntityGolem implements IMonster { @@ -1799,8 +2525,46 @@ index 1df311d852..e821efe62e 100644 this.aL = 180.0F; this.aK = 180.0F; this.bE = null; +@@ -475,6 +476,7 @@ public class EntityShulker extends EntityGolem implements IMonster { + + @Override + public boolean a() { ++ if (this.e.getRider() != null) return false; // Purpur + return this.e.getScoreboardTeam() == null ? false : super.a(); + } + +@@ -494,6 +496,7 @@ public class EntityShulker extends EntityGolem implements IMonster { + + @Override + public boolean a() { ++ if (this.e.getRider() != null) return false; // Purpur + return EntityShulker.this.world.getDifficulty() == EnumDifficulty.PEACEFUL ? false : super.a(); + } + +@@ -515,6 +518,7 @@ public class EntityShulker extends EntityGolem implements IMonster { + + @Override + public boolean a() { ++ if (EntityShulker.this.getRider() != null) return false; // Purpur + EntityLiving entityliving = EntityShulker.this.getGoalTarget(); + + return entityliving != null && entityliving.isAlive() ? EntityShulker.this.world.getDifficulty() != EnumDifficulty.PEACEFUL : false; +@@ -563,11 +567,13 @@ public class EntityShulker extends EntityGolem implements IMonster { + + @Override + public boolean a() { ++ if (EntityShulker.this.getRider() != null) return false; // Purpur + return EntityShulker.this.getGoalTarget() == null && EntityShulker.this.random.nextInt(40) == 0; + } + + @Override + public boolean b() { ++ if (EntityShulker.this.getRider() != null) return false; // Purpur + return EntityShulker.this.getGoalTarget() == null && this.b > 0; + } + diff --git a/src/main/java/net/minecraft/server/EntitySilverfish.java b/src/main/java/net/minecraft/server/EntitySilverfish.java -index d823c6b6d9..0a7ec94d31 100644 +index d823c6b6d9..3665381aa4 100644 --- a/src/main/java/net/minecraft/server/EntitySilverfish.java +++ b/src/main/java/net/minecraft/server/EntitySilverfish.java @@ -10,6 +10,7 @@ public class EntitySilverfish extends EntityMonster { @@ -1811,6 +2575,30 @@ index d823c6b6d9..0a7ec94d31 100644 } @Override +@@ -129,6 +130,7 @@ public class EntitySilverfish extends EntityMonster { + + @Override + public boolean a() { ++ if (this.a.getRider() != null) return false; // Purpur + if (this.a.getGoalTarget() != null) { + return false; + } else if (!this.a.getNavigation().n()) { +@@ -154,6 +156,7 @@ public class EntitySilverfish extends EntityMonster { + + @Override + public boolean b() { ++ if (this.a.getRider() != null) return false; // Purpur + return this.i ? false : super.b(); + } + +@@ -199,6 +202,7 @@ public class EntitySilverfish extends EntityMonster { + + @Override + public boolean a() { ++ if (this.silverfish.getRider() != null) return false; // Purpur + return this.b > 0; + } + diff --git a/src/main/java/net/minecraft/server/EntitySkeleton.java b/src/main/java/net/minecraft/server/EntitySkeleton.java index 0e78d5c62c..908e51b636 100644 --- a/src/main/java/net/minecraft/server/EntitySkeleton.java @@ -1889,7 +2677,7 @@ index fb36306b90..271b952b21 100644 for (int l = 0; l < 4; ++l) { diff --git a/src/main/java/net/minecraft/server/EntitySpider.java b/src/main/java/net/minecraft/server/EntitySpider.java -index b560a89694..43b1f443df 100644 +index b560a89694..76b2098dfd 100644 --- a/src/main/java/net/minecraft/server/EntitySpider.java +++ b/src/main/java/net/minecraft/server/EntitySpider.java @@ -9,6 +9,7 @@ public class EntitySpider extends EntityMonster { @@ -1908,7 +2696,13 @@ index b560a89694..43b1f443df 100644 float f = this.e.aE(); return f >= 0.5F ? false : super.a(); -@@ -179,6 +181,7 @@ public class EntitySpider extends EntityMonster { +@@ -174,11 +176,13 @@ public class EntitySpider extends EntityMonster { + + @Override + public boolean a() { ++ if (this.a.getRider() != null) return false; // Purpur + return super.a() && !this.a.isVehicle(); + } @Override public boolean b() { @@ -1917,7 +2711,7 @@ index b560a89694..43b1f443df 100644 if (f >= 0.5F && this.a.getRandom().nextInt(100) == 0) { diff --git a/src/main/java/net/minecraft/server/EntitySquid.java b/src/main/java/net/minecraft/server/EntitySquid.java -index 77c0ed42f4..e06282fdff 100644 +index 77c0ed42f4..54427bac64 100644 --- a/src/main/java/net/minecraft/server/EntitySquid.java +++ b/src/main/java/net/minecraft/server/EntitySquid.java @@ -19,6 +19,7 @@ public class EntitySquid extends EntityWaterAnimal { @@ -1936,7 +2730,15 @@ index 77c0ed42f4..e06282fdff 100644 public void a(float f, float f1, float f2) { this.bH = f; this.bI = f1; -@@ -258,6 +260,39 @@ public class EntitySquid extends EntityWaterAnimal { +@@ -192,6 +194,7 @@ public class EntitySquid extends EntityWaterAnimal { + + @Override + public boolean a() { ++ if (EntitySquid.this.getRider() != null) return false; // Purpur + EntityLiving entityliving = EntitySquid.this.getLastDamager(); + + return EntitySquid.this.isInWater() && entityliving != null ? EntitySquid.this.h((Entity) entityliving) < 100.0D : false; +@@ -258,6 +261,39 @@ public class EntitySquid extends EntityWaterAnimal { @Override public void e() { @@ -1976,7 +2778,7 @@ index 77c0ed42f4..e06282fdff 100644 int i = this.b.cv(); if (i > 100) { -@@ -272,5 +307,17 @@ public class EntitySquid extends EntityWaterAnimal { +@@ -272,5 +308,17 @@ public class EntitySquid extends EntityWaterAnimal { } } @@ -2024,7 +2826,7 @@ index 2e537c2032..03b49a7c76 100644 @Override diff --git a/src/main/java/net/minecraft/server/EntityTurtle.java b/src/main/java/net/minecraft/server/EntityTurtle.java -index e4eecf5688..80bd32b79e 100644 +index e4eecf5688..17998b9790 100644 --- a/src/main/java/net/minecraft/server/EntityTurtle.java +++ b/src/main/java/net/minecraft/server/EntityTurtle.java @@ -22,6 +22,7 @@ public class EntityTurtle extends EntityAnimal { @@ -2035,6 +2837,98 @@ index e4eecf5688..80bd32b79e 100644 this.moveController = new EntityTurtle.e(this); this.bC = Blocks.SAND; this.K = 1.0F; +@@ -395,11 +396,13 @@ public class EntityTurtle extends EntityAnimal { + + @Override + public boolean b() { ++ if (this.g.getRider() != null) return false; // Purpur + return !this.g.isInWater() && this.d <= 1200 && this.a(this.g.world, this.e); + } + + @Override + public boolean a() { ++ if (this.g.getRider() != null) return false; // Purpur + return this.g.isBaby() && !this.g.isInWater() ? super.a() : (!this.g.dZ() && !this.g.isInWater() && !this.g.dV() ? super.a() : false); + } + +@@ -427,6 +430,7 @@ public class EntityTurtle extends EntityAnimal { + + @Override + public boolean a() { ++ if (this.h.getRider() != null) return false; // Purpur + return !this.a.isInWater() && !this.h.dZ() && !this.h.dV() ? super.a() : false; + } + } +@@ -442,11 +446,13 @@ public class EntityTurtle extends EntityAnimal { + + @Override + public boolean a() { ++ if (this.g.getRider() != null) return false; // Purpur + return this.g.dV() && this.g.dX().a((IPosition) this.g.ch(), 9.0D) ? super.a() : false; + } + + @Override + public boolean b() { ++ if (this.g.getRider() != null) return false; // Purpur + return super.b() && this.g.dV() && this.g.dX().a((IPosition) this.g.ch(), 9.0D); + } + +@@ -506,6 +512,7 @@ public class EntityTurtle extends EntityAnimal { + + @Override + public boolean a() { ++ if (this.d.getRider() != null) return false; // Purpur + return super.a() && !this.d.dV(); + } + +@@ -552,6 +559,7 @@ public class EntityTurtle extends EntityAnimal { + + @Override + public boolean a() { ++ if (this.b.getRider() != null) return false; // Purpur + if (this.e > 0) { + --this.e; + return false; +@@ -603,6 +611,7 @@ public class EntityTurtle extends EntityAnimal { + + @Override + public boolean a() { ++ if (this.a.getRider() != null) return false; // Purpur + return this.a.isBaby() ? false : (this.a.dV() ? true : (this.a.getRandom().nextInt(700) != 0 ? false : !this.a.dX().a((IPosition) this.a.ch(), 64.0D))) && new com.destroystokyo.paper.event.entity.TurtleGoHomeEvent((org.bukkit.entity.Turtle) this.a.getBukkitEntity()).callEvent(); // Paper; + } + +@@ -620,6 +629,7 @@ public class EntityTurtle extends EntityAnimal { + + @Override + public boolean b() { ++ if (this.a.getRider() != null) return false; // Purpur + return !this.a.dX().a((IPosition) this.a.ch(), 7.0D) && !this.c && this.d <= 600; + } + +@@ -667,6 +677,7 @@ public class EntityTurtle extends EntityAnimal { + + @Override + public boolean a() { ++ if (this.a.getRider() != null) return false; // Purpur + return !this.a.dZ() && !this.a.dV() && this.a.isInWater(); + } + +@@ -722,6 +733,7 @@ public class EntityTurtle extends EntityAnimal { + + @Override + public boolean b() { ++ if (this.a.getRider() != null) return false; // Purpur + return !this.a.getNavigation().n() && !this.c && !this.a.dZ() && !this.a.isInLove() && !this.a.dV(); + } + +@@ -740,6 +752,7 @@ public class EntityTurtle extends EntityAnimal { + + @Override + public boolean a() { ++ if (this.a.getRider() != null) return false; // Purpur + if (this.a.getLastDamager() == null && !this.a.isBurning()) { + return false; + } else { diff --git a/src/main/java/net/minecraft/server/EntityTypes.java b/src/main/java/net/minecraft/server/EntityTypes.java index 759e8b443c..3fd1f8f49d 100644 --- a/src/main/java/net/minecraft/server/EntityTypes.java @@ -2051,7 +2945,7 @@ index 759e8b443c..3fd1f8f49d 100644 return getNameComponent().getString(); } diff --git a/src/main/java/net/minecraft/server/EntityVex.java b/src/main/java/net/minecraft/server/EntityVex.java -index bcda21ba71..0fc3bce6fa 100644 +index bcda21ba71..1fc6ad43ae 100644 --- a/src/main/java/net/minecraft/server/EntityVex.java +++ b/src/main/java/net/minecraft/server/EntityVex.java @@ -15,6 +15,7 @@ public class EntityVex extends EntityMonster { @@ -2062,32 +2956,63 @@ index bcda21ba71..0fc3bce6fa 100644 this.moveController = new EntityVex.c(this); this.f = 3; } -diff --git a/src/main/java/net/minecraft/server/EntityVillager.java b/src/main/java/net/minecraft/server/EntityVillager.java -index fe9efa9da1..6e6f9180c5 100644 ---- a/src/main/java/net/minecraft/server/EntityVillager.java -+++ b/src/main/java/net/minecraft/server/EntityVillager.java -@@ -61,6 +61,7 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation +@@ -187,6 +188,7 @@ public class EntityVex extends EntityMonster { - public EntityVillager(EntityTypes entitytypes, World world, VillagerType villagertype) { - super(entitytypes, world); -+ this.isRidable = net.pl3x.purpur.PurpurConfig.ridableVillager; // Purpur - this.bI = Long.MIN_VALUE; - this.bL = new Reputation(); - ((Navigation) this.getNavigation()).a(true); -diff --git a/src/main/java/net/minecraft/server/EntityVillagerTrader.java b/src/main/java/net/minecraft/server/EntityVillagerTrader.java -index 46a349e73a..b029c38d2c 100644 ---- a/src/main/java/net/minecraft/server/EntityVillagerTrader.java -+++ b/src/main/java/net/minecraft/server/EntityVillagerTrader.java -@@ -17,6 +17,7 @@ public class EntityVillagerTrader extends EntityVillagerAbstract { + @Override + public boolean a() { ++ if (EntityVex.this.getRider() != null) return false; // Purpur + return EntityVex.this.c != null && EntityVex.this.c.getGoalTarget() != null && this.a(EntityVex.this.c.getGoalTarget(), this.b); + } - public EntityVillagerTrader(EntityTypes entitytypes, World world) { - super(entitytypes, world); -+ this.isRidable = net.pl3x.purpur.PurpurConfig.ridableWanderingTrader; // Purpur - this.attachedToPlayer = true; +@@ -205,6 +207,7 @@ public class EntityVex extends EntityMonster { + + @Override + public boolean a() { ++ if (EntityVex.this.getRider() != null) return false; // Purpur + return !EntityVex.this.getControllerMove().b() && EntityVex.this.random.nextInt(7) == 0; + } + +@@ -244,11 +247,13 @@ public class EntityVex extends EntityMonster { + + @Override + public boolean a() { ++ if (EntityVex.this.getRider() != null) return false; // Purpur + return EntityVex.this.getGoalTarget() != null && !EntityVex.this.getControllerMove().b() && EntityVex.this.random.nextInt(7) == 0 ? EntityVex.this.h((Entity) EntityVex.this.getGoalTarget()) > 4.0D : false; + } + + @Override + public boolean b() { ++ if (EntityVex.this.getRider() != null) return false; // Purpur + return EntityVex.this.getControllerMove().b() && EntityVex.this.isCharging() && EntityVex.this.getGoalTarget() != null && EntityVex.this.getGoalTarget().isAlive(); + } + +@@ -287,14 +292,22 @@ public class EntityVex extends EntityMonster { + } } +- class c extends ControllerMove { ++ class c extends net.pl3x.purpur.controller.ControllerMoveWASDFlying { // Purpur + + public c(EntityVex entityvex) { + super(entityvex); + } + ++ // Purpur start + @Override +- public void a() { ++ public void tick(EntityHuman rider) { ++ super.tick(rider); ++ this.a.noclip = false; ++ } ++ ++ @Override ++ public void tick() { ++ // Purpur end + if (this.h == ControllerMove.Operation.MOVE_TO) { + Vec3D vec3d = new Vec3D(this.b - EntityVex.this.locX, this.c - EntityVex.this.locY, this.d - EntityVex.this.locZ); + double d0 = vec3d.f(); diff --git a/src/main/java/net/minecraft/server/EntityVindicator.java b/src/main/java/net/minecraft/server/EntityVindicator.java -index 130a2e4ffe..88a2ace08b 100644 +index 130a2e4ffe..6590708efb 100644 --- a/src/main/java/net/minecraft/server/EntityVindicator.java +++ b/src/main/java/net/minecraft/server/EntityVindicator.java @@ -15,6 +15,7 @@ public class EntityVindicator extends EntityIllagerAbstract { @@ -2098,6 +3023,30 @@ index 130a2e4ffe..88a2ace08b 100644 } @Override +@@ -158,6 +159,7 @@ public class EntityVindicator extends EntityIllagerAbstract { + + @Override + public boolean a() { ++ if (this.e.getRider() != null) return false; // Purpur + return ((EntityVindicator) this.e).bz && super.a(); + } + +@@ -177,6 +179,7 @@ public class EntityVindicator extends EntityIllagerAbstract { + + @Override + public boolean b() { ++ if (this.entity.getRider() != null) return false; // Purpur + EntityVindicator entityvindicator = (EntityVindicator) this.entity; + + return entityvindicator.el() && super.b(); +@@ -184,6 +187,7 @@ public class EntityVindicator extends EntityIllagerAbstract { + + @Override + public boolean a() { ++ if (this.entity.getRider() != null) return false; // Purpur + EntityVindicator entityvindicator = (EntityVindicator) this.entity; + + return entityvindicator.el() && entityvindicator.random.nextInt(10) == 0 && super.a(); diff --git a/src/main/java/net/minecraft/server/EntityWitch.java b/src/main/java/net/minecraft/server/EntityWitch.java index f30ce95686..6a0d7a82f9 100644 --- a/src/main/java/net/minecraft/server/EntityWitch.java @@ -2111,7 +3060,7 @@ index f30ce95686..6a0d7a82f9 100644 @Override diff --git a/src/main/java/net/minecraft/server/EntityWither.java b/src/main/java/net/minecraft/server/EntityWither.java -index 5609fcfe00..51624ac8a8 100644 +index 5609fcfe00..bb5f9259c3 100644 --- a/src/main/java/net/minecraft/server/EntityWither.java +++ b/src/main/java/net/minecraft/server/EntityWither.java @@ -35,6 +35,7 @@ public class EntityWither extends EntityMonster implements IRangedEntity { @@ -2122,8 +3071,16 @@ index 5609fcfe00..51624ac8a8 100644 this.bossBattle = (BossBattleServer) (new BossBattleServer(this.getScoreboardDisplayName(), BossBattle.BarColor.PURPLE, BossBattle.BarStyle.PROGRESS)).setDarkenSky(true); this.setHealth(this.getMaxHealth()); this.getNavigation().d(true); +@@ -558,6 +559,7 @@ public class EntityWither extends EntityMonster implements IRangedEntity { + + @Override + public boolean a() { ++ if (EntityWither.this.getRider() != null) return false; // Purpur + return EntityWither.this.dV() > 0; + } + } diff --git a/src/main/java/net/minecraft/server/EntityWolf.java b/src/main/java/net/minecraft/server/EntityWolf.java -index 0f4554c394..dd213c7d9a 100644 +index 0f4554c394..8156a81eeb 100644 --- a/src/main/java/net/minecraft/server/EntityWolf.java +++ b/src/main/java/net/minecraft/server/EntityWolf.java @@ -28,6 +28,7 @@ public class EntityWolf extends EntityTameableAnimal { @@ -2134,6 +3091,14 @@ index 0f4554c394..dd213c7d9a 100644 this.setTamed(false); } +@@ -445,6 +446,7 @@ public class EntityWolf extends EntityTameableAnimal { + + @Override + public boolean a() { ++ if (this.j.getRider() != null) return false; // Purpur + return super.a() && this.b instanceof EntityLlama ? !this.j.isTamed() && this.a((EntityLlama) this.b) : false; + } + diff --git a/src/main/java/net/minecraft/server/EntityZombie.java b/src/main/java/net/minecraft/server/EntityZombie.java index 40a796384c..a131d57b5b 100644 --- a/src/main/java/net/minecraft/server/EntityZombie.java @@ -3126,7 +4091,7 @@ index a2fc2cd802..8f064526b2 100644 return (d0 * d0 >= 0.029999999329447746D || this.b.pitch == 0.0F || Math.abs(this.b.pitch) >= 10.0F || !this.b.isInWater()) && !this.b.onGround; diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java -index 8f3367ae1d..77c1d3e897 100644 +index 8f3367ae1d..e536e83ea1 100644 --- a/src/main/java/net/pl3x/purpur/PurpurConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java @@ -103,6 +103,11 @@ public class PurpurConfig { @@ -3141,7 +4106,7 @@ index 8f3367ae1d..77c1d3e897 100644 public static int feedMushroomsToCows = 5; private static void cowsSettings() { feedMushroomsToCows = getInt("settings.mobs.cow.feed-mushrooms-for-mooshroom", feedMushroomsToCows); -@@ -114,4 +119,121 @@ public class PurpurConfig { +@@ -114,4 +119,117 @@ public class PurpurConfig { snowmanDropsPumpkin = getBoolean("settings.mobs.snow_golem.drops-pumpkin-when-sheared", snowmanDropsPumpkin); snowmanPumpkinPutBack = getBoolean("settings.mobs.snow_golem.pumpkin-can-be-added-back", snowmanPumpkinPutBack); } @@ -3193,9 +4158,7 @@ index 8f3367ae1d..77c1d3e897 100644 + public static boolean ridableTropicalFish = true; + public static boolean ridableTurtle = true; + public static boolean ridableVex = true; -+ public static boolean ridableVillager = true; + public static boolean ridableVindicator = true; -+ public static boolean ridableWanderingTrader = true; + public static boolean ridableWitch = true; + public static boolean ridableWither = true; + public static boolean ridableWitherSkeleton = true; @@ -3251,9 +4214,7 @@ index 8f3367ae1d..77c1d3e897 100644 + ridableTropicalFish = getBoolean("settings.ridable.tropical_fish", ridableTropicalFish); + ridableTurtle = getBoolean("settings.ridable.turtle", ridableTurtle); + ridableVex = getBoolean("settings.ridable.vex", ridableVex); -+ ridableVillager = getBoolean("settings.ridable.villager", ridableVillager); + ridableVindicator = getBoolean("settings.ridable.vindicator", ridableVindicator); -+ ridableWanderingTrader = getBoolean("settings.ridable.wandering_trader", ridableWanderingTrader); + ridableWitch = getBoolean("settings.ridable.witch", ridableWitch); + ridableWither = getBoolean("settings.ridable.wither", ridableWither); + ridableWitherSkeleton = getBoolean("settings.ridable.skeleton", ridableWitherSkeleton);