@@ -42,7 +42,7 @@ index e4c88e1f99e684fadec47eeceb82420c879897cf..44a8629ec03c01597c7167c26d801c01
4242 @Override
4343 public @Nullable LevelChunk getChunkIfLoaded(int x, int z) {
4444diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java
45- index 14a7b040e9f5609a0e08783b60a767618a192de7..0c489a6d3357ed0d3dc9341440b87623d007da3f 100644
45+ index 565f54a7e37b9303cb23db09881751b364cdf5c4..38f92b36533c5f9694ca689a88f3f42a977d003a 100644
4646--- a/net/minecraft/server/level/ServerPlayer.java
4747+++ b/net/minecraft/server/level/ServerPlayer.java
4848@@ -761,6 +761,15 @@ public class ServerPlayer extends Player {
@@ -62,7 +62,7 @@ index 14a7b040e9f5609a0e08783b60a767618a192de7..0c489a6d3357ed0d3dc9341440b87623
6262
6363 private void updatePlayerAttributes() {
6464diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
65- index 7cdb4d46bb0ebdece3cdbe0dc2c156fe211da0d0..58be234e80a0c55642ba66a5001bac784c420a95 100644
65+ index 55e74b04ed0576923b8acfdf833e6c999d5a7b6c..900d59620d309258b3b883ccd8cb086f26db0c11 100644
6666--- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java
6767+++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
6868@@ -2773,6 +2773,8 @@ public class ServerGamePacketListenerImpl
@@ -75,10 +75,10 @@ index 7cdb4d46bb0ebdece3cdbe0dc2c156fe211da0d0..58be234e80a0c55642ba66a5001bac78
7575 if ((target instanceof net.minecraft.world.entity.animal.Bucketable && target instanceof LivingEntity && origItem != null && origItem == Items.WATER_BUCKET) && (event.isCancelled() || ServerGamePacketListenerImpl.this.player.getInventory().getSelectedItem().isEmpty() || !ServerGamePacketListenerImpl.this.player.getInventory().getSelectedItem().is(origItem))) {
7676 target.resendPossiblyDesyncedEntityData(ServerGamePacketListenerImpl.this.player); // Paper - The entire mob gets deleted, so resend it
7777diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
78- index fe1b49288dabc8aecfcae151b40fa76d633fc8c2..bce2b06cd7c0b9928a6538ddcd370f2c4d84a9ae 100644
78+ index efeee8849237270ad7c8cd0577dcefed34b82299..7e9e0e9cd0a12af66d937859885da5c0f619af22 100644
7979--- a/net/minecraft/world/entity/Entity.java
8080+++ b/net/minecraft/world/entity/Entity.java
81- @@ -3069 ,6 +3069 ,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
81+ @@ -3065 ,6 +3065 ,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
8282 this.passengers = ImmutableList.copyOf(list);
8383 }
8484
@@ -92,7 +92,7 @@ index fe1b49288dabc8aecfcae151b40fa76d633fc8c2..bce2b06cd7c0b9928a6538ddcd370f2c
9292 this.gameEvent(GameEvent.ENTITY_MOUNT, passenger);
9393 }
9494 }
95- @@ -3110 ,6 +3117 ,14 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
95+ @@ -3106 ,6 +3113 ,14 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
9696 return false;
9797 }
9898 // CraftBukkit end
@@ -107,7 +107,7 @@ index fe1b49288dabc8aecfcae151b40fa76d633fc8c2..bce2b06cd7c0b9928a6538ddcd370f2c
107107 if (this.passengers.size() == 1 && this.passengers.get(0) == passenger) {
108108 this.passengers = ImmutableList.of();
109109 } else {
110- @@ -5079 ,4 +5094 ,44 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
110+ @@ -5075 ,4 +5090 ,44 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
111111 return ((ServerLevel) this.level()).isPositionEntityTicking(this.blockPosition());
112112 }
113113 // Paper end - Expose entity id counter
@@ -177,7 +177,7 @@ index f0c452ddc4b299a930de261722cc41a89aa78eeb..8e8ddab59de508c84c4182e105a11554
177177 protected ParticleOptions getInkParticle() {
178178 return ParticleTypes.GLOW_SQUID_INK;
179179diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java
180- index 65cb0a0cfa3d75e4d1083b7e6b22ca1b2682dc49..e78d30d8fdfcb1a530bf3380251fabd0c9a18f46 100644
180+ index 96e47e6145a4cce8c154a05f9b155c1ba74bfa6a..d272f5e789cb6c03ede0bece14fc3fe976a02ff3 100644
181181--- a/net/minecraft/world/entity/LivingEntity.java
182182+++ b/net/minecraft/world/entity/LivingEntity.java
183183@@ -238,9 +238,9 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
@@ -3483,10 +3483,10 @@ index 7efa39ab1fb34da41a04cd6816f2571c6eba98f5..10142de6bdf9474958ca939c956a4282
34833483 this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true).setUnseenMemoryTicks(300));
34843484 this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractVillager.class, false).setUnseenMemoryTicks(300));
34853485diff --git a/net/minecraft/world/entity/monster/Ghast.java b/net/minecraft/world/entity/monster/Ghast.java
3486- index bbdff8b4043f27045684a2aa5687e2b7ca7afbb5..c7ac650f9618fd124035f9cf01fffada7efc97e1 100644
3486+ index bbdff8b4043f27045684a2aa5687e2b7ca7afbb5..e09004313c7c8333eba38bbfab09b20bdb646034 100644
34873487--- a/net/minecraft/world/entity/monster/Ghast.java
34883488+++ b/net/minecraft/world/entity/monster/Ghast.java
3489- @@ -52,11 +52,47 @@ public class Ghast extends Mob implements Enemy {
3489+ @@ -52,11 +52,35 @@ public class Ghast extends Mob implements Enemy {
34903490 this.moveControl = new Ghast.GhastMoveControl(this, false, () -> false);
34913491 }
34923492
@@ -3510,18 +3510,6 @@ index bbdff8b4043f27045684a2aa5687e2b7ca7afbb5..c7ac650f9618fd124035f9cf01fffada
35103510+ public double getMaxY() {
35113511+ return level().purpurConfig.ghastMaxY;
35123512+ }
3513- +
3514- + @Override
3515- + public void travel(Vec3 vec3) {
3516- + super.travel(vec3);
3517- + if (getRider() != null && this.isControllable() && !onGround) {
3518- + float speed = (float) getAttributeValue(Attributes.FLYING_SPEED);
3519- + setSpeed(speed);
3520- + Vec3 mot = getDeltaMovement();
3521- + move(net.minecraft.world.entity.MoverType.SELF, mot.multiply(speed, 1.0, speed));
3522- + setDeltaMovement(mot.scale(0.9D));
3523- + }
3524- + }
35253513+ // Purpur end - Ridables
35263514+
35273515 @Override
@@ -3534,7 +3522,23 @@ index bbdff8b4043f27045684a2aa5687e2b7ca7afbb5..c7ac650f9618fd124035f9cf01fffada
35343522 this.targetSelector
35353523 .addGoal(1, new NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, (entity, level) -> Math.abs(entity.getY() - this.getY()) <= 4.0));
35363524 }
3537- @@ -236,7 +272,7 @@ public class Ghast extends Mob implements Enemy {
3525+ @@ -106,6 +130,15 @@ public class Ghast extends Mob implements Enemy {
3526+ @Override
3527+ public void travel(Vec3 travelVector) {
3528+ this.travelFlying(travelVector, 0.02F);
3529+ + // Purpur start - Ridables
3530+ + if (getRider() != null && this.isControllable() && !onGround) {
3531+ + float speed = (float) getAttributeValue(Attributes.FLYING_SPEED);
3532+ + setSpeed(speed);
3533+ + Vec3 mot = getDeltaMovement();
3534+ + move(net.minecraft.world.entity.MoverType.SELF, mot.multiply(speed, 1.0, speed));
3535+ + setDeltaMovement(mot.scale(0.9D));
3536+ + }
3537+ + // Purpur end - Ridables
3538+ }
3539+
3540+ @Override
3541+ @@ -236,7 +269,7 @@ public class Ghast extends Mob implements Enemy {
35383542 }
35393543 }
35403544
@@ -3543,7 +3547,7 @@ index bbdff8b4043f27045684a2aa5687e2b7ca7afbb5..c7ac650f9618fd124035f9cf01fffada
35433547 private final Mob ghast;
35443548 private int floatDuration;
35453549 private final boolean careful;
3546- @@ -250,7 +286 ,7 @@ public class Ghast extends Mob implements Enemy {
3550+ @@ -250,7 +283 ,7 @@ public class Ghast extends Mob implements Enemy {
35473551 }
35483552
35493553 @Override
@@ -3791,10 +3795,10 @@ index 889c31cc9257fbbd5df8325ccee9ce39b026ec4b..4a1299d6cee2807522de0c2d0d4745c5
37913795
37923796 @Override
37933797diff --git a/net/minecraft/world/entity/monster/Phantom.java b/net/minecraft/world/entity/monster/Phantom.java
3794- index 2abb55d84507fd29817760cb0068dd083f7f1c37..99194cf1fa89d3112719ead9f7de260ca5b9b676 100644
3798+ index 2abb55d84507fd29817760cb0068dd083f7f1c37..855ec37a7e4110e37823ecf62f67f5cb3714f4bf 100644
37953799--- a/net/minecraft/world/entity/monster/Phantom.java
37963800+++ b/net/minecraft/world/entity/monster/Phantom.java
3797- @@ -62,6 +62,64 @@ public class Phantom extends Mob implements Enemy {
3801+ @@ -62,6 +62,52 @@ public class Phantom extends Mob implements Enemy {
37983802 this.lookControl = new Phantom.PhantomLookControl(this);
37993803 }
38003804
@@ -3819,18 +3823,6 @@ index 2abb55d84507fd29817760cb0068dd083f7f1c37..99194cf1fa89d3112719ead9f7de260c
38193823+ return level().purpurConfig.phantomMaxY;
38203824+ }
38213825+
3822- + @Override
3823- + public void travel(Vec3 vec3) {
3824- + super.travel(vec3);
3825- + if (getRider() != null && this.isControllable() && !onGround) {
3826- + float speed = (float) getAttributeValue(Attributes.FLYING_SPEED);
3827- + setSpeed(speed);
3828- + Vec3 mot = getDeltaMovement();
3829- + move(net.minecraft.world.entity.MoverType.SELF, mot.multiply(speed, speed, speed));
3830- + setDeltaMovement(mot.scale(0.9D));
3831- + }
3832- + }
3833- +
38343826+ public static net.minecraft.world.entity.ai.attributes.AttributeSupplier.Builder createAttributes() {
38353827+ return Monster.createMonsterAttributes().add(Attributes.FLYING_SPEED, 3.0D);
38363828+ }
@@ -3859,7 +3851,7 @@ index 2abb55d84507fd29817760cb0068dd083f7f1c37..99194cf1fa89d3112719ead9f7de260c
38593851 @Override
38603852 public boolean isFlapping() {
38613853 return (this.getUniqueFlapTickOffset() + this.tickCount) % TICKS_PER_FLAP == 0;
3862- @@ -74,9 +132 ,11 @@ public class Phantom extends Mob implements Enemy {
3854+ @@ -74,9 +120 ,11 @@ public class Phantom extends Mob implements Enemy {
38633855
38643856 @Override
38653857 protected void registerGoals() {
@@ -3871,23 +3863,39 @@ index 2abb55d84507fd29817760cb0068dd083f7f1c37..99194cf1fa89d3112719ead9f7de260c
38713863 this.targetSelector.addGoal(1, new Phantom.PhantomAttackPlayerTargetGoal());
38723864 }
38733865
3874- @@ -92,6 +152 ,7 @@ public class Phantom extends Mob implements Enemy {
3866+ @@ -92,6 +140 ,7 @@ public class Phantom extends Mob implements Enemy {
38753867
38763868 private void updatePhantomSizeInfo() {
38773869 this.refreshDimensions();
38783870+ if (level().purpurConfig.phantomFlamesOnSwoop && attackPhase == AttackPhase.SWOOP) shoot(); // Purpur - Ridables - Phantom flames on swoop
38793871 this.getAttribute(Attributes.ATTACK_DAMAGE).setBaseValue(6 + this.getPhantomSize());
38803872 }
38813873
3882- @@ -149,6 +210 ,7 @@ public class Phantom extends Mob implements Enemy {
3874+ @@ -149,6 +198 ,7 @@ public class Phantom extends Mob implements Enemy {
38833875 @Override
38843876 public void aiStep() {
38853877 if (this.isAlive() && this.shouldBurnInDay && this.isSunBurnTick()) { // Paper - shouldBurnInDay API
38863878+ if (getRider() == null || !this.isControllable()) // Purpur - Ridables
38873879 this.igniteForSeconds(8.0F);
38883880 }
38893881
3890- @@ -419,25 +481,42 @@ public class Phantom extends Mob implements Enemy {
3882+ @@ -167,6 +217,15 @@ public class Phantom extends Mob implements Enemy {
3883+ @Override
3884+ public void travel(Vec3 travelVector) {
3885+ this.travelFlying(travelVector, 0.2F);
3886+ + // Purpur start - Ridables
3887+ + if (this.getRider() != null && this.isControllable() && !this.onGround) {
3888+ + float speed = (float) this.getAttributeValue(Attributes.FLYING_SPEED);
3889+ + this.setSpeed(speed);
3890+ + Vec3 mot = this.getDeltaMovement();
3891+ + this.move(net.minecraft.world.entity.MoverType.SELF, mot.multiply(speed, speed, speed));
3892+ + this.setDeltaMovement(mot.scale(0.9D));
3893+ + }
3894+ + // Purpur end - Ridables
3895+ }
3896+
3897+ @Override
3898+ @@ -419,25 +478,42 @@ public class Phantom extends Mob implements Enemy {
38913899 }
38923900 }
38933901
@@ -4029,7 +4037,7 @@ index 2b9a72b8742bf13c69df5ce0c905d47a92b9d8bc..b67ac487ce4a7fd8b2f62452ab0b87f4
40294037 this.getAttribute(Attributes.MOVEMENT_SPEED).setBaseValue(0.0);
40304038 } else {
40314039diff --git a/net/minecraft/world/entity/monster/Shulker.java b/net/minecraft/world/entity/monster/Shulker.java
4032- index aaa95836e7d767ab6d162ff227f8a82a41255304..e0c70493e771b50885b0263ff07e8ee594c2dfdc 100644
4040+ index b45145051f936bb08941be1b3cd2790f73102352..7b04bf19ee575b9199cb65f0eb3f412a05acac08 100644
40334041--- a/net/minecraft/world/entity/monster/Shulker.java
40344042+++ b/net/minecraft/world/entity/monster/Shulker.java
40354043@@ -110,12 +110,31 @@ public class Shulker extends AbstractGolem implements Enemy {
@@ -5046,7 +5054,7 @@ index 93ed977260f369677028bbd8396862f344dfeaa3..e5d6d8bd30876832e6219969849e8260
50465054 if (this.level().purpurConfig.wanderingTraderAllowTrading) { // Purpur - Add config for villager trading
50475055 this.setTradingPlayer(player);
50485056diff --git a/net/minecraft/world/entity/player/Player.java b/net/minecraft/world/entity/player/Player.java
5049- index aba0104c4953ef514118ee8af76d029100081fc4..c421cc7dc6c401a19eaf193abd970f21e910f927 100644
5057+ index cc29c094f81f16e6b4d74877e31fabd4a0e62435..65d981d26c729d63aa9bad1bbe90cef35207e832 100644
50505058--- a/net/minecraft/world/entity/player/Player.java
50515059+++ b/net/minecraft/world/entity/player/Player.java
50525060@@ -239,6 +239,19 @@ public abstract class Player extends LivingEntity {
0 commit comments