Updated Upstream (Paper)

Upstream has released updates that appear to apply and compile correctly

Paper Changes:
PaperMC/Paper@71c84c8 Updated Upstream (Bukkit/CraftBukkit/Spigot) (#10277)
PaperMC/Paper@e3bc4c4 Make debug mode print current configuration phase
PaperMC/Paper@d0ebfbb Fix corrupted plugin.yml breaking plugin loading (#10279)
PaperMC/Paper@681bbff Fix spawnreason saving
This commit is contained in:
granny
2024-02-23 22:51:48 -08:00
parent 8f4b0aeb67
commit 1083e45074
104 changed files with 782 additions and 743 deletions

View File

@@ -34,7 +34,7 @@ index a6d3f90f7867cfbda0ef406ff3ce1bd8b9f787b0..0831d305a3b9d8d27cef946f46c0b03f
this.profiler.push(() -> {
return worldserver + " " + worldserver.dimension().location();
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
index 0982d44b9dd30c13d9d879095cc9a839bbda8bdc..cdc17904cdf3d6669503e09debfbb156a80f0020 100644
index 09594f96cf79aa38142a859bef2e3b6b8d00f7db..8ef87310566772024193aeade42faf0bca1c0ecb 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
@@ -224,6 +224,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
@@ -79,10 +79,10 @@ index 601ac8738a775eafde2c9e237feb596a9a47ba89..7f73d724af2c468a06dcfd760a70b8d6
if ((entity instanceof Bucketable && entity instanceof LivingEntity && origItem != null && origItem.asItem() == Items.WATER_BUCKET) && (event.isCancelled() || ServerGamePacketListenerImpl.this.player.getInventory().getSelected() == null || ServerGamePacketListenerImpl.this.player.getInventory().getSelected().getItem() != origItem)) {
entity.getEntityData().resendPossiblyDesyncedEntity(player); // Paper - The entire mob gets deleted, so resend it.
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
index 169d5e539b1474a3e400b53e21f867e5fb175182..46e3d7a949d79d9168e0a976be09be5a178bea15 100644
index b96535eb07da6535bbb287c9478b81e7022247b1..add00d6f63ed57d95abba3666095b64c3d47791a 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -378,7 +378,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
@@ -379,7 +379,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
private final Set<String> tags;
private final double[] pistonDeltas;
private long pistonDeltasGameTime;
@@ -91,7 +91,7 @@ index 169d5e539b1474a3e400b53e21f867e5fb175182..46e3d7a949d79d9168e0a976be09be5a
private float eyeHeight;
public boolean isInPowderSnow;
public boolean wasInPowderSnow;
@@ -3011,6 +3011,13 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
@@ -3027,6 +3027,13 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
this.passengers = ImmutableList.copyOf(list);
}
@@ -105,7 +105,7 @@ index 169d5e539b1474a3e400b53e21f867e5fb175182..46e3d7a949d79d9168e0a976be09be5a
this.gameEvent(GameEvent.ENTITY_MOUNT, passenger);
}
}
@@ -3050,6 +3057,14 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
@@ -3066,6 +3073,14 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
return false;
}
// CraftBukkit end
@@ -120,7 +120,7 @@ index 169d5e539b1474a3e400b53e21f867e5fb175182..46e3d7a949d79d9168e0a976be09be5a
if (this.passengers.size() == 1 && this.passengers.get(0) == entity) {
this.passengers = ImmutableList.of();
} else {
@@ -4987,4 +5002,44 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
@@ -5011,4 +5026,44 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
return ((net.minecraft.server.level.ServerChunkCache) level.getChunkSource()).isPositionTicking(this);
}
// Paper end - Expose entity id counter
@@ -190,10 +190,10 @@ index 1bb8b6e91c44cd13411d96d749fa64835c75a267..75c278b67ad2b78766efd8f89c4c2ca7
protected ParticleOptions getInkParticle() {
return ParticleTypes.GLOW_SQUID_INK;
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
index aa9696facf7780313c322d01928aab7e6c92cc99..5436e9645426e01f2cae2f567fe3353ae1717ede 100644
index 25e30408c964b5257f1cf945892bd668df38252b..4621dd94e9346bdd2eeca1d17869ff99aede0077 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -217,9 +217,9 @@ public abstract class LivingEntity extends Entity implements Attackable {
@@ -218,9 +218,9 @@ public abstract class LivingEntity extends Entity implements Attackable {
protected int deathScore;
public float lastHurt;
public boolean jumping;
@@ -206,7 +206,7 @@ index aa9696facf7780313c322d01928aab7e6c92cc99..5436e9645426e01f2cae2f567fe3353a
protected int lerpSteps;
protected double lerpX;
protected double lerpY;
@@ -285,7 +285,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
@@ -286,7 +286,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
this.effectsDirty = true;
this.useItem = ItemStack.EMPTY;
this.lastClimbablePos = Optional.empty();
@@ -215,7 +215,7 @@ index aa9696facf7780313c322d01928aab7e6c92cc99..5436e9645426e01f2cae2f567fe3353a
this.craftAttributes = new CraftAttributeMap(this.attributes); // CraftBukkit
// CraftBukkit - setHealth(getMaxHealth()) inlined and simplified to skip the instanceof check for EntityPlayer, as getBukkitEntity() is not initialized in constructor
this.entityData.set(LivingEntity.DATA_HEALTH_ID, (float) this.getAttribute(Attributes.MAX_HEALTH).getValue());
@@ -336,6 +336,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
@@ -337,6 +337,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
public static AttributeSupplier.Builder createLivingAttributes() {
return AttributeSupplier.builder().add(Attributes.MAX_HEALTH).add(Attributes.KNOCKBACK_RESISTANCE).add(Attributes.MOVEMENT_SPEED).add(Attributes.ARMOR).add(Attributes.ARMOR_TOUGHNESS).add(Attributes.MAX_ABSORPTION);
}
@@ -223,7 +223,7 @@ index aa9696facf7780313c322d01928aab7e6c92cc99..5436e9645426e01f2cae2f567fe3353a
@Override
protected void checkFallDamage(double heightDifference, boolean onGround, BlockState state, BlockPos landedPosition) {
@@ -2742,7 +2743,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
@@ -2750,7 +2751,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
}
protected long lastJumpTime = 0L; // Paper - Prevent excessive velocity through repeated crits
@@ -232,7 +232,7 @@ index aa9696facf7780313c322d01928aab7e6c92cc99..5436e9645426e01f2cae2f567fe3353a
Vec3 vec3d = this.getDeltaMovement();
// Paper start - Prevent excessive velocity through repeated crits
long time = System.nanoTime();
@@ -3520,8 +3521,10 @@ public abstract class LivingEntity extends Entity implements Attackable {
@@ -3528,8 +3529,10 @@ public abstract class LivingEntity extends Entity implements Attackable {
this.pushEntities();
this.level().getProfiler().pop();
// Paper start - Add EntityMoveEvent
@@ -245,7 +245,7 @@ index aa9696facf7780313c322d01928aab7e6c92cc99..5436e9645426e01f2cae2f567fe3353a
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());
@@ -3531,6 +3534,21 @@ public abstract class LivingEntity extends Entity implements Attackable {
@@ -3539,6 +3542,21 @@ public abstract class LivingEntity extends Entity implements Attackable {
this.absMoveTo(event.getTo().getX(), event.getTo().getY(), event.getTo().getZ(), event.getTo().getYaw(), event.getTo().getPitch());
}
}
@@ -268,10 +268,10 @@ index aa9696facf7780313c322d01928aab7e6c92cc99..5436e9645426e01f2cae2f567fe3353a
// Paper end - Add EntityMoveEvent
if (!this.level().isClientSide && this.isSensitiveToWater() && this.isInWaterRainOrBubble()) {
diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java
index 4be5ae6bfc7bbb8c928e13208dfcd7f455c56cfe..1a31090435898c9ffc1a4e124d2d6c9130a77015 100644
index 4cf2963fdbe9003fd18ac8c2035ccded57c02abd..8b39ea90558dbd5356c038b74fa4037fb69546ac 100644
--- a/src/main/java/net/minecraft/world/entity/Mob.java
+++ b/src/main/java/net/minecraft/world/entity/Mob.java
@@ -148,8 +148,8 @@ public abstract class Mob extends LivingEntity implements Targeting {
@@ -149,8 +149,8 @@ public abstract class Mob extends LivingEntity implements Targeting {
this.restrictRadius = -1.0F;
this.goalSelector = new GoalSelector(world.getProfilerSupplier());
this.targetSelector = new GoalSelector(world.getProfilerSupplier());
@@ -282,7 +282,7 @@ index 4be5ae6bfc7bbb8c928e13208dfcd7f455c56cfe..1a31090435898c9ffc1a4e124d2d6c91
this.jumpControl = new JumpControl(this);
this.bodyRotationControl = this.createBodyControl();
this.navigation = this.createNavigation(world);
@@ -1397,7 +1397,7 @@ public abstract class Mob extends LivingEntity implements Targeting {
@@ -1398,7 +1398,7 @@ public abstract class Mob extends LivingEntity implements Targeting {
protected void onOffspringSpawnedFromEgg(Player player, Mob child) {}
protected InteractionResult mobInteract(Player player, InteractionHand hand) {
@@ -291,7 +291,7 @@ index 4be5ae6bfc7bbb8c928e13208dfcd7f455c56cfe..1a31090435898c9ffc1a4e124d2d6c91
}
public boolean isWithinRestriction() {
@@ -1786,4 +1786,56 @@ public abstract class Mob extends LivingEntity implements Targeting {
@@ -1787,4 +1787,56 @@ public abstract class Mob extends LivingEntity implements Targeting {
return itemmonsteregg == null ? null : new ItemStack(itemmonsteregg);
}
@@ -965,10 +965,10 @@ index 3cdd9f379c7e2d46ea47c9ef55b121c93ec0bb4a..b0cff23aa6f841ad291437964ea5bebb
// CraftBukkit end
diff --git a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java
index 178e1e75fcd0e60a1dd2729a894df08cf4129526..2412cdb1bdaf7a558ad7235fca7ea5c74eeaad3f 100644
index 45646c69ea73936a8916756fde37dd3f39db0d04..18380c1ee458507de98a8aeb53c8b0c863d1eb89 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java
@@ -82,14 +82,82 @@ public class Dolphin extends WaterAnimal {
@@ -83,14 +83,82 @@ public class Dolphin extends WaterAnimal {
public static final Predicate<ItemEntity> ALLOWED_ITEMS = (entityitem) -> {
return !entityitem.hasPickUpDelay() && entityitem.isAlive() && entityitem.isInWater();
};
@@ -1052,7 +1052,7 @@ index 178e1e75fcd0e60a1dd2729a894df08cf4129526..2412cdb1bdaf7a558ad7235fca7ea5c7
@Nullable
@Override
public SpawnGroupData finalizeSpawn(ServerLevelAccessor world, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData entityData, @Nullable CompoundTag entityNbt) {
@@ -159,6 +227,7 @@ public class Dolphin extends WaterAnimal {
@@ -160,6 +228,7 @@ public class Dolphin extends WaterAnimal {
protected void registerGoals() {
this.goalSelector.addGoal(0, new BreathAirGoal(this));
this.goalSelector.addGoal(0, new TryFindWaterGoal(this));
@@ -1060,7 +1060,7 @@ index 178e1e75fcd0e60a1dd2729a894df08cf4129526..2412cdb1bdaf7a558ad7235fca7ea5c7
this.goalSelector.addGoal(1, new Dolphin.DolphinSwimToTreasureGoal(this));
this.goalSelector.addGoal(2, new Dolphin.DolphinSwimWithPlayerGoal(this, 4.0D));
this.goalSelector.addGoal(4, new RandomSwimmingGoal(this, 1.0D, 10));
@@ -169,6 +238,7 @@ public class Dolphin extends WaterAnimal {
@@ -170,6 +239,7 @@ public class Dolphin extends WaterAnimal {
this.goalSelector.addGoal(8, new Dolphin.PlayWithItemsGoal());
this.goalSelector.addGoal(8, new FollowBoatGoal(this));
this.goalSelector.addGoal(9, new AvoidEntityGoal<>(this, Guardian.class, 8.0F, 1.0D, 1.0D));
@@ -1068,7 +1068,7 @@ index 178e1e75fcd0e60a1dd2729a894df08cf4129526..2412cdb1bdaf7a558ad7235fca7ea5c7
this.targetSelector.addGoal(1, (new HurtByTargetGoal(this, new Class[]{Guardian.class})).setAlertOthers());
}
@@ -220,7 +290,7 @@ public class Dolphin extends WaterAnimal {
@@ -221,7 +291,7 @@ public class Dolphin extends WaterAnimal {
@Override
protected boolean canRide(Entity entity) {
@@ -1077,7 +1077,7 @@ index 178e1e75fcd0e60a1dd2729a894df08cf4129526..2412cdb1bdaf7a558ad7235fca7ea5c7
}
@Override
@@ -255,6 +325,11 @@ public class Dolphin extends WaterAnimal {
@@ -256,6 +326,11 @@ public class Dolphin extends WaterAnimal {
@Override
public void tick() {
super.tick();
@@ -1090,10 +1090,10 @@ index 178e1e75fcd0e60a1dd2729a894df08cf4129526..2412cdb1bdaf7a558ad7235fca7ea5c7
this.setAirSupply(this.getMaxAirSupply());
} else {
diff --git a/src/main/java/net/minecraft/world/entity/animal/Fox.java b/src/main/java/net/minecraft/world/entity/animal/Fox.java
index 12b49510deb0494c4a70b63679f8818960f2af06..142e45f4b5f2eb90b980f5085abe104505fa7dab 100644
index f7a7810fdc2f74b79fa14470493485e4b74539ab..c63634825ffffed2eccc560af9e9fcef1a9dc2e8 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Fox.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Fox.java
@@ -144,6 +144,44 @@ public class Fox extends Animal implements VariantHolder<Fox.Type> {
@@ -148,6 +148,44 @@ public class Fox extends Animal implements VariantHolder<Fox.Type> {
this.setCanPickUpLoot(true);
}
@@ -1138,7 +1138,7 @@ index 12b49510deb0494c4a70b63679f8818960f2af06..142e45f4b5f2eb90b980f5085abe1045
@Override
protected void defineSynchedData() {
super.defineSynchedData();
@@ -163,6 +201,7 @@ public class Fox extends Animal implements VariantHolder<Fox.Type> {
@@ -167,6 +205,7 @@ public class Fox extends Animal implements VariantHolder<Fox.Type> {
return entityliving instanceof AbstractSchoolingFish;
});
this.goalSelector.addGoal(0, new Fox.FoxFloatGoal());
@@ -1146,7 +1146,7 @@ index 12b49510deb0494c4a70b63679f8818960f2af06..142e45f4b5f2eb90b980f5085abe1045
this.goalSelector.addGoal(0, new ClimbOnTopOfPowderSnowGoal(this, this.level()));
this.goalSelector.addGoal(1, new Fox.FaceplantGoal());
this.goalSelector.addGoal(2, new Fox.FoxPanicGoal(2.2D));
@@ -189,6 +228,7 @@ public class Fox extends Animal implements VariantHolder<Fox.Type> {
@@ -193,6 +232,7 @@ public class Fox extends Animal implements VariantHolder<Fox.Type> {
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());
@@ -1154,7 +1154,7 @@ index 12b49510deb0494c4a70b63679f8818960f2af06..142e45f4b5f2eb90b980f5085abe1045
this.targetSelector.addGoal(3, new Fox.DefendTrustedTargetGoal(LivingEntity.class, false, false, (entityliving) -> {
return Fox.TRUSTED_TARGET_SELECTOR.test(entityliving) && !this.trusts(entityliving.getUUID());
}));
@@ -781,16 +821,16 @@ public class Fox extends Animal implements VariantHolder<Fox.Type> {
@@ -785,16 +825,16 @@ public class Fox extends Animal implements VariantHolder<Fox.Type> {
return new Vec3(0.0D, (double) (0.55F * this.getEyeHeight()), (double) (this.getBbWidth() * 0.4F));
}
@@ -1174,7 +1174,7 @@ index 12b49510deb0494c4a70b63679f8818960f2af06..142e45f4b5f2eb90b980f5085abe1045
}
}
@@ -801,16 +841,16 @@ public class Fox extends Animal implements VariantHolder<Fox.Type> {
@@ -805,16 +845,16 @@ public class Fox extends Animal implements VariantHolder<Fox.Type> {
}
}
@@ -1251,10 +1251,10 @@ index 6cfe0d6c46caa122db107c607d27a2bdcd82f7a8..cb05267fb287b9de9d1829e90d9bb9c9
float f1 = 1.0F + (this.random.nextFloat() - this.random.nextFloat()) * 0.2F;
diff --git a/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java b/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java
index e1f174ff0f791b20be7d6ad8e4a172d1e0c81e33..2f1385cbd88e7085ee5f39f8b5c371c9f0206c23 100644
index 161c128d27f50f145f88142191f1a5c93649ea65..b59d6a3f799f100702efb1fd10bbc48da4f4bd8f 100644
--- a/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java
+++ b/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java
@@ -63,6 +63,23 @@ public class MushroomCow extends Cow implements Shearable, VariantHolder<Mushroo
@@ -64,6 +64,23 @@ public class MushroomCow extends Cow implements Shearable, VariantHolder<Mushroo
super(type, world);
}
@@ -1278,7 +1278,7 @@ index e1f174ff0f791b20be7d6ad8e4a172d1e0c81e33..2f1385cbd88e7085ee5f39f8b5c371c9
@Override
public float getWalkTargetValue(BlockPos pos, LevelReader world) {
return world.getBlockState(pos.below()).is(Blocks.MYCELIUM) ? 10.0F : world.getPathfindingCostFromLightLevels(pos);
@@ -127,7 +144,7 @@ public class MushroomCow extends Cow implements Shearable, VariantHolder<Mushroo
@@ -128,7 +145,7 @@ public class MushroomCow extends Cow implements Shearable, VariantHolder<Mushroo
org.bukkit.event.player.PlayerShearEntityEvent event = CraftEventFactory.handlePlayerShearEntityEvent(player, this, itemstack, hand, drops);
if (event != null) {
if (event.isCancelled()) {
@@ -1287,7 +1287,7 @@ index e1f174ff0f791b20be7d6ad8e4a172d1e0c81e33..2f1385cbd88e7085ee5f39f8b5c371c9
}
drops = org.bukkit.craftbukkit.inventory.CraftItemStack.asNMSCopy(event.getDrops());
}
@@ -151,7 +168,7 @@ public class MushroomCow extends Cow implements Shearable, VariantHolder<Mushroo
@@ -152,7 +169,7 @@ public class MushroomCow extends Cow implements Shearable, VariantHolder<Mushroo
Optional<List<SuspiciousEffectHolder.EffectEntry>> optional = this.getEffectsFromItemStack(itemstack);
if (optional.isEmpty()) {
@@ -1340,10 +1340,10 @@ index 4300fab61765dd224fab084d118aae7294fc9de6..66f80ec010909648278c4e74c80d3766
this.targetSelector.addGoal(1, new NearestAttackableTargetGoal<>(this, Turtle.class, 10, false, false, Turtle.BABY_ON_LAND_SELECTOR));
}
diff --git a/src/main/java/net/minecraft/world/entity/animal/Panda.java b/src/main/java/net/minecraft/world/entity/animal/Panda.java
index be554dbaa9900207753e4f67f0ba402333e21338..87a1a6ff04b40ceebded50e81aaafe67a802fa1b 100644
index d683c49fdf2d1e5b0f2620641f9c241e82f96825..c900776b626b2f038b92dedc86bb9f431e0e0b89 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Panda.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Panda.java
@@ -114,6 +114,32 @@ public class Panda extends Animal {
@@ -115,6 +115,32 @@ public class Panda extends Animal {
}
@@ -1376,7 +1376,7 @@ index be554dbaa9900207753e4f67f0ba402333e21338..87a1a6ff04b40ceebded50e81aaafe67
@Override
public boolean canTakeItem(ItemStack stack) {
EquipmentSlot enumitemslot = Mob.getEquipmentSlotForItem(stack);
@@ -275,6 +301,7 @@ public class Panda extends Animal {
@@ -276,6 +302,7 @@ public class Panda extends Animal {
@Override
protected void registerGoals() {
this.goalSelector.addGoal(0, new FloatGoal(this));
@@ -1384,7 +1384,7 @@ index be554dbaa9900207753e4f67f0ba402333e21338..87a1a6ff04b40ceebded50e81aaafe67
this.goalSelector.addGoal(2, new Panda.PandaPanicGoal(this, 2.0D));
this.goalSelector.addGoal(2, new Panda.PandaBreedGoal(this, 1.0D));
this.goalSelector.addGoal(3, new Panda.PandaAttackGoal(this, 1.2000000476837158D, true));
@@ -290,6 +317,7 @@ public class Panda extends Animal {
@@ -291,6 +318,7 @@ public class Panda extends Animal {
this.goalSelector.addGoal(12, new Panda.PandaRollGoal(this));
this.goalSelector.addGoal(13, new FollowParentGoal(this, 1.25D));
this.goalSelector.addGoal(14, new WaterAvoidingRandomStrollGoal(this, 1.0D));
@@ -1392,7 +1392,7 @@ index be554dbaa9900207753e4f67f0ba402333e21338..87a1a6ff04b40ceebded50e81aaafe67
this.targetSelector.addGoal(1, (new Panda.PandaHurtByTargetGoal(this, new Class[0])).setAlertOthers(new Class[0]));
}
@@ -636,7 +664,7 @@ public class Panda extends Animal {
@@ -637,7 +665,7 @@ public class Panda extends Animal {
ItemStack itemstack = player.getItemInHand(hand);
if (this.isScared()) {
@@ -1401,7 +1401,7 @@ index be554dbaa9900207753e4f67f0ba402333e21338..87a1a6ff04b40ceebded50e81aaafe67
} else if (this.isOnBack()) {
this.setOnBack(false);
return InteractionResult.sidedSuccess(this.level().isClientSide);
@@ -654,7 +682,7 @@ public class Panda extends Animal {
@@ -655,7 +683,7 @@ public class Panda extends Animal {
this.setInLove(player, breedCopy); // Paper - Fix EntityBreedEvent copying
} else {
if (this.level().isClientSide || this.isSitting() || this.isInWater()) {
@@ -1410,7 +1410,7 @@ index be554dbaa9900207753e4f67f0ba402333e21338..87a1a6ff04b40ceebded50e81aaafe67
}
this.tryToSit();
@@ -673,7 +701,7 @@ public class Panda extends Animal {
@@ -674,7 +702,7 @@ public class Panda extends Animal {
return InteractionResult.SUCCESS;
} else {
@@ -1419,7 +1419,7 @@ index be554dbaa9900207753e4f67f0ba402333e21338..87a1a6ff04b40ceebded50e81aaafe67
}
}
@@ -718,7 +746,7 @@ public class Panda extends Animal {
@@ -719,7 +747,7 @@ public class Panda extends Animal {
return new Vector3f(0.0F, dimensions.height - (this.isBaby() ? 0.4375F : 0.0F) * scaleFactor, 0.0F);
}
@@ -1428,7 +1428,7 @@ index be554dbaa9900207753e4f67f0ba402333e21338..87a1a6ff04b40ceebded50e81aaafe67
private final Panda panda;
@@ -728,9 +756,9 @@ public class Panda extends Animal {
@@ -729,9 +757,9 @@ public class Panda extends Animal {
}
@Override
@@ -1527,10 +1527,10 @@ index f3f48225c2a1e4bd3d0091d1b4b7e4e150850ed2..06568c109d806a4e98b092016d0efd5b
this.goalSelector.addGoal(2, new SitWhenOrderedToGoal(this));
this.goalSelector.addGoal(2, new FollowOwnerGoal(this, 1.0D, 5.0F, 1.0F, true));
diff --git a/src/main/java/net/minecraft/world/entity/animal/Pig.java b/src/main/java/net/minecraft/world/entity/animal/Pig.java
index a43479c92775d618794f8f1fbeb31f42d303e167..28f68a7383fe6e53541eb1b36ba73eb15723f0f7 100644
index 24770540c51fe4831040d6b46b27636d25ebac40..ebfa162f172bdad7b17ce153fdee508748620fc0 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Pig.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Pig.java
@@ -67,9 +67,27 @@ public class Pig extends Animal implements ItemSteerable, Saddleable {
@@ -68,9 +68,27 @@ public class Pig extends Animal implements ItemSteerable, Saddleable {
this.steering = new ItemBasedSteering(this.entityData, Pig.DATA_BOOST_TIME, Pig.DATA_SADDLE_ID);
}
@@ -2372,10 +2372,10 @@ index e88b058c0734e436ef24bab6364b206c13e5a9c2..156fd7b01853f4ad50235646a15893bb
super(entity);
}
diff --git a/src/main/java/net/minecraft/world/entity/animal/frog/Tadpole.java b/src/main/java/net/minecraft/world/entity/animal/frog/Tadpole.java
index 6ed4ac06c76b8d0d6e8db778cade15dbd1e3e5f5..3103df74b7ae5a5ed841bf97794284cd43ad59de 100644
index 415afe3473d9f8a50b1edab8cfda6158e59836e6..c19513b3b35bbb05c3159606caacee0559366610 100644
--- a/src/main/java/net/minecraft/world/entity/animal/frog/Tadpole.java
+++ b/src/main/java/net/minecraft/world/entity/animal/frog/Tadpole.java
@@ -45,13 +45,50 @@ public class Tadpole extends AbstractFish {
@@ -48,13 +48,50 @@ public class Tadpole extends AbstractFish {
protected static final ImmutableList<SensorType<? extends Sensor<? super Tadpole>>> SENSOR_TYPES = ImmutableList.of(SensorType.NEAREST_LIVING_ENTITIES, SensorType.NEAREST_PLAYERS, SensorType.HURT_BY, SensorType.FROG_TEMPTATIONS);
protected static final ImmutableList<MemoryModuleType<?>> MEMORY_TYPES = ImmutableList.of(MemoryModuleType.LOOK_TARGET, MemoryModuleType.NEAREST_VISIBLE_LIVING_ENTITIES, MemoryModuleType.WALK_TARGET, MemoryModuleType.CANT_REACH_WALK_TARGET_SINCE, MemoryModuleType.PATH, MemoryModuleType.NEAREST_VISIBLE_ADULT, MemoryModuleType.TEMPTATION_COOLDOWN_TICKS, MemoryModuleType.IS_TEMPTED, MemoryModuleType.TEMPTING_PLAYER, MemoryModuleType.BREED_TARGET, MemoryModuleType.IS_PANICKING);
public boolean ageLocked; // Paper
@@ -2427,7 +2427,7 @@ index 6ed4ac06c76b8d0d6e8db778cade15dbd1e3e5f5..3103df74b7ae5a5ed841bf97794284cd
@Override
protected PathNavigation createNavigation(Level world) {
return new WaterBoundPathNavigation(this, world);
@@ -81,8 +118,7 @@ public class Tadpole extends AbstractFish {
@@ -84,8 +121,7 @@ public class Tadpole extends AbstractFish {
@Override
protected void customServerAiStep() {
this.level().getProfiler().push("tadpoleBrain");
@@ -2636,10 +2636,10 @@ index a6601f70890f90691923c0e6a9f10ea597ccabc2..ae7bcfa608d8bdd2a2320618225294de
protected SoundEvent getAmbientSound() {
return SoundEvents.MULE_AMBIENT;
diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java b/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java
index 41596d9c2e8e6c91f77b1bbe3ccf828708b6b970..6e7b7d2e9ccf67f9df458dc30cfea7242dc212ac 100644
index 184f508d19aad46267302a0e17f7cb9bdafce079..19d463cf5f57b2943431f1c5306fb51c19c7dc3a 100644
--- a/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java
+++ b/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java
@@ -35,6 +35,13 @@ public class SkeletonHorse extends AbstractHorse {
@@ -42,6 +42,13 @@ public class SkeletonHorse extends AbstractHorse {
super(type, world);
}
@@ -2651,21 +2651,24 @@ index 41596d9c2e8e6c91f77b1bbe3ccf828708b6b970..6e7b7d2e9ccf67f9df458dc30cfea724
+ // Purpur end
+
public static AttributeSupplier.Builder createAttributes() {
return createBaseHorseAttributes().add(Attributes.MAX_HEALTH, 15.0D).add(Attributes.MOVEMENT_SPEED, (double)0.2F);
return createBaseHorseAttributes().add(Attributes.MAX_HEALTH, 15.0D).add(Attributes.MOVEMENT_SPEED, 0.20000000298023224D);
}
@@ -59,7 +66,9 @@ public class SkeletonHorse extends AbstractHorse {
}
@@ -54,6 +61,7 @@ public class SkeletonHorse extends AbstractHorse {
@Override
protected void addBehaviourGoals() {
- protected void addBehaviourGoals() {}
+ protected void addBehaviourGoals() {
+ if (level().purpurConfig.skeletonHorseCanSwim) goalSelector.addGoal(0, new net.minecraft.world.entity.ai.goal.FloatGoal(this));
}
+ }
@Override
protected SoundEvent getAmbientSound() {
diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/TraderLlama.java b/src/main/java/net/minecraft/world/entity/animal/horse/TraderLlama.java
index b016f53c6644c6411b3a91e09049892131187179..5fc37e2322188e0db12f7679e40b1a3d40268ca7 100644
index 038de19633002e8f7c4b1ead7438cef0163456ce..c1d1321c75330231777adb4ff6e0ca604f3fab80 100644
--- a/src/main/java/net/minecraft/world/entity/animal/horse/TraderLlama.java
+++ b/src/main/java/net/minecraft/world/entity/animal/horse/TraderLlama.java
@@ -27,6 +27,28 @@ public class TraderLlama extends Llama {
@@ -30,6 +30,28 @@ public class TraderLlama extends Llama {
super(type, world);
}
@@ -2781,10 +2784,10 @@ index a6f3fba3b02b0b4d2a4e9e5205301c6f52d0188a..4eebfc27ded55e4d764d04f35d3e9c9e
protected void defineSynchedData() {
}
diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java
index a86ae40b945b1ecdf42a69d753d0412f39ee3001..8f0bd246d41627bf9725f88268530ac6ead32b0a 100644
index 1df13af62af7d0bbd92c84d424a07da66bb8583f..3d4ecd05af1794b37102996305a2346b7c0a72e2 100644
--- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java
+++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java
@@ -107,6 +107,7 @@ public class EnderDragon extends Mob implements Enemy {
@@ -108,6 +108,7 @@ public class EnderDragon extends Mob implements Enemy {
@Nullable
private BlockPos podium;
// Paper end - Allow changing the EnderDragon podium
@@ -2792,7 +2795,7 @@ index a86ae40b945b1ecdf42a69d753d0412f39ee3001..8f0bd246d41627bf9725f88268530ac6
public EnderDragon(EntityType<? extends EnderDragon> entitytypes, Level world) {
super(EntityType.ENDER_DRAGON, world);
@@ -129,6 +130,37 @@ public class EnderDragon extends Mob implements Enemy {
@@ -130,6 +131,37 @@ public class EnderDragon extends Mob implements Enemy {
this.noCulling = true;
this.phaseManager = new EnderDragonPhaseManager(this);
this.explosionSource = new Explosion(world, this, null, null, Double.NaN, Double.NaN, Double.NaN, Float.NaN, true, Explosion.BlockInteraction.DESTROY, ParticleTypes.EXPLOSION, ParticleTypes.EXPLOSION_EMITTER, SoundEvents.GENERIC_EXPLODE); // CraftBukkit
@@ -2830,7 +2833,7 @@ index a86ae40b945b1ecdf42a69d753d0412f39ee3001..8f0bd246d41627bf9725f88268530ac6
}
public void setDragonFight(EndDragonFight fight) {
@@ -143,6 +175,17 @@ public class EnderDragon extends Mob implements Enemy {
@@ -144,6 +176,17 @@ public class EnderDragon extends Mob implements Enemy {
return this.fightOrigin;
}
@@ -2848,7 +2851,7 @@ index a86ae40b945b1ecdf42a69d753d0412f39ee3001..8f0bd246d41627bf9725f88268530ac6
public static AttributeSupplier.Builder createAttributes() {
return Mob.createMobAttributes().add(Attributes.MAX_HEALTH, 200.0D);
}
@@ -204,6 +247,37 @@ public class EnderDragon extends Mob implements Enemy {
@@ -205,6 +248,37 @@ public class EnderDragon extends Mob implements Enemy {
@Override
public void aiStep() {
@@ -2886,7 +2889,7 @@ index a86ae40b945b1ecdf42a69d753d0412f39ee3001..8f0bd246d41627bf9725f88268530ac6
this.processFlappingMovement();
if (this.level().isClientSide) {
this.setHealth(this.getHealth());
@@ -230,6 +304,8 @@ public class EnderDragon extends Mob implements Enemy {
@@ -231,6 +305,8 @@ public class EnderDragon extends Mob implements Enemy {
float f;
if (this.isDeadOrDying()) {
@@ -2895,7 +2898,7 @@ index a86ae40b945b1ecdf42a69d753d0412f39ee3001..8f0bd246d41627bf9725f88268530ac6
float f1 = (this.random.nextFloat() - 0.5F) * 8.0F;
f = (this.random.nextFloat() - 0.5F) * 4.0F;
@@ -242,9 +318,9 @@ public class EnderDragon extends Mob implements Enemy {
@@ -243,9 +319,9 @@ public class EnderDragon extends Mob implements Enemy {
f = 0.2F / ((float) vec3d.horizontalDistance() * 10.0F + 1.0F);
f *= (float) Math.pow(2.0D, vec3d.y);
@@ -2907,7 +2910,7 @@ index a86ae40b945b1ecdf42a69d753d0412f39ee3001..8f0bd246d41627bf9725f88268530ac6
this.flapTime += f * 0.5F;
} else {
this.flapTime += f;
@@ -278,7 +354,7 @@ public class EnderDragon extends Mob implements Enemy {
@@ -279,7 +355,7 @@ public class EnderDragon extends Mob implements Enemy {
}
this.phaseManager.getCurrentPhase().doClientTick();
@@ -2916,7 +2919,7 @@ index a86ae40b945b1ecdf42a69d753d0412f39ee3001..8f0bd246d41627bf9725f88268530ac6
DragonPhaseInstance idragoncontroller = this.phaseManager.getCurrentPhase();
idragoncontroller.doServerTick();
@@ -347,7 +423,7 @@ public class EnderDragon extends Mob implements Enemy {
@@ -348,7 +424,7 @@ public class EnderDragon extends Mob implements Enemy {
this.tickPart(this.body, (double) (f11 * 0.5F), 0.0D, (double) (-f12 * 0.5F));
this.tickPart(this.wing1, (double) (f12 * 4.5F), 2.0D, (double) (f11 * 4.5F));
this.tickPart(this.wing2, (double) (f12 * -4.5F), 2.0D, (double) (f11 * -4.5F));
@@ -2925,7 +2928,7 @@ index a86ae40b945b1ecdf42a69d753d0412f39ee3001..8f0bd246d41627bf9725f88268530ac6
this.knockBack(this.level().getEntities((Entity) this, this.wing1.getBoundingBox().inflate(4.0D, 2.0D, 4.0D).move(0.0D, -2.0D, 0.0D), EntitySelector.NO_CREATIVE_OR_SPECTATOR));
this.knockBack(this.level().getEntities((Entity) this, this.wing2.getBoundingBox().inflate(4.0D, 2.0D, 4.0D).move(0.0D, -2.0D, 0.0D), EntitySelector.NO_CREATIVE_OR_SPECTATOR));
this.hurt(this.level().getEntities((Entity) this, this.head.getBoundingBox().inflate(1.0D), EntitySelector.NO_CREATIVE_OR_SPECTATOR));
@@ -391,7 +467,7 @@ public class EnderDragon extends Mob implements Enemy {
@@ -392,7 +468,7 @@ public class EnderDragon extends Mob implements Enemy {
}
if (!this.level().isClientSide) {
@@ -2935,10 +2938,10 @@ index a86ae40b945b1ecdf42a69d753d0412f39ee3001..8f0bd246d41627bf9725f88268530ac6
this.dragonFight.updateDragon(this);
}
diff --git a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java
index ea8883b0661e894a466eca24bfc247ac37f40a81..6af131d0574a508bccc84b85d0e0b3b5bab6f795 100644
index de2471cfa96a23944f229f33ffdff88b6b7756e4..8fbfd134005c0813406fecbce8a918cd0376d03e 100644
--- a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java
+++ b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java
@@ -84,16 +84,30 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob
@@ -85,16 +85,30 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob
return entityliving.getMobType() != MobType.UNDEAD && entityliving.attackable();
};
private static final TargetingConditions TARGETING_CONDITIONS = TargetingConditions.forCombat().range(20.0D).selector(WitherBoss.LIVING_ENTITY_SELECTOR);
@@ -2970,7 +2973,7 @@ index ea8883b0661e894a466eca24bfc247ac37f40a81..6af131d0574a508bccc84b85d0e0b3b5
this.setHealth(this.getMaxHealth());
this.xpReward = 50;
}
@@ -108,13 +122,113 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob
@@ -109,13 +123,113 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob
return navigationflying;
}
@@ -3084,7 +3087,7 @@ index ea8883b0661e894a466eca24bfc247ac37f40a81..6af131d0574a508bccc84b85d0e0b3b5
this.targetSelector.addGoal(1, new HurtByTargetGoal(this, new Class[0]));
this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, LivingEntity.class, 0, false, false, WitherBoss.LIVING_ENTITY_SELECTOR));
}
@@ -263,6 +377,16 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob
@@ -264,6 +378,16 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob
@Override
protected void customServerAiStep() {
@@ -3101,7 +3104,7 @@ index ea8883b0661e894a466eca24bfc247ac37f40a81..6af131d0574a508bccc84b85d0e0b3b5
int i;
if (this.getInvulnerableTicks() > 0) {
@@ -584,11 +708,11 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob
@@ -585,11 +709,11 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob
}
public int getAlternativeTarget(int headIndex) {
@@ -3247,10 +3250,10 @@ index 70d25bb45ad603095a1f5812cc396dfc5f16a1e1..562faf0257388d9c22146a418f25716c
public boolean doHurtTarget(Entity target) {
if (super.doHurtTarget(target)) {
diff --git a/src/main/java/net/minecraft/world/entity/monster/Creeper.java b/src/main/java/net/minecraft/world/entity/monster/Creeper.java
index 6a91960f93e624a4b975c1cf76698eb45ceda838..577a829595f67708b220407b53dca1bd145a3479 100644
index 9657796d08f4a102d9d5ff7685f2a152d1a87fda..30b4c8513e97463ce1a96775b1c22a1d95bd6fbd 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Creeper.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Creeper.java
@@ -59,21 +59,98 @@ public class Creeper extends Monster implements PowerableMob {
@@ -60,21 +60,98 @@ public class Creeper extends Monster implements PowerableMob {
public int maxSwell = 30;
public int explosionRadius = 3;
private int droppedSkulls;
@@ -3349,7 +3352,7 @@ index 6a91960f93e624a4b975c1cf76698eb45ceda838..577a829595f67708b220407b53dca1bd
this.targetSelector.addGoal(1, new NearestAttackableTargetGoal<>(this, Player.class, true));
this.targetSelector.addGoal(2, new HurtByTargetGoal(this, new Class[0]));
}
@@ -324,6 +401,7 @@ public class Creeper extends Monster implements PowerableMob {
@@ -325,6 +402,7 @@ public class Creeper extends Monster implements PowerableMob {
com.destroystokyo.paper.event.entity.CreeperIgniteEvent event = new com.destroystokyo.paper.event.entity.CreeperIgniteEvent((org.bukkit.entity.Creeper) getBukkitEntity(), ignited);
if (event.callEvent()) {
this.entityData.set(Creeper.DATA_IS_IGNITED, event.isIgnited());
@@ -3503,10 +3506,10 @@ index 6563e625ebae47fc68e5010d36bd4b4d327c07b7..01dd5347bc8fa25b9b1f6cb746c25ca6
boolean flag = source.getDirectEntity() instanceof ThrownPotion;
boolean flag1;
diff --git a/src/main/java/net/minecraft/world/entity/monster/Endermite.java b/src/main/java/net/minecraft/world/entity/monster/Endermite.java
index 66b6c55f72aec7e4e9dfa5417a46ba68dbb16a83..7fb02aab225a45e951ab1e7c6ba1c53f53d0fecd 100644
index b8ce2a9ad151b20f0f4e9e8e34a57069d8d77128..75de003b4f7556cd9c5137fe324b66348835141a 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Endermite.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Endermite.java
@@ -38,14 +38,33 @@ public class Endermite extends Monster {
@@ -43,14 +43,33 @@ public class Endermite extends Monster {
this.xpReward = 3;
}
@@ -3537,7 +3540,7 @@ index 66b6c55f72aec7e4e9dfa5417a46ba68dbb16a83..7fb02aab225a45e951ab1e7c6ba1c53f
this.goalSelector.addGoal(7, new LookAtPlayerGoal(this, Player.class, 8.0F));
this.goalSelector.addGoal(8, new RandomLookAroundGoal(this));
+ this.targetSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur
this.targetSelector.addGoal(1, (new HurtByTargetGoal(this)).setAlertOthers());
this.targetSelector.addGoal(1, (new HurtByTargetGoal(this, new Class[0])).setAlertOthers());
this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true));
}
diff --git a/src/main/java/net/minecraft/world/entity/monster/Evoker.java b/src/main/java/net/minecraft/world/entity/monster/Evoker.java
@@ -4048,10 +4051,10 @@ index 187037c43ebb5b245ffa4b50163d443490668744..98ced015ceb4f68364ff5ee6f7ee1a69
private class PhantomBodyRotationControl extends BodyRotationControl {
diff --git a/src/main/java/net/minecraft/world/entity/monster/Pillager.java b/src/main/java/net/minecraft/world/entity/monster/Pillager.java
index cec545c3baa6599d47b9cf1a4b97de8771062a22..31d204d8d81ccc30371070af3678d82dc721618d 100644
index 05ed2f06a41f3b12e0432a37faf98d0b1fea7a8b..3eca357a82eebedc56237a03503017a17f17d3a6 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Pillager.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Pillager.java
@@ -62,15 +62,34 @@ public class Pillager extends AbstractIllager implements CrossbowAttackMob, Inve
@@ -66,15 +66,34 @@ public class Pillager extends AbstractIllager implements CrossbowAttackMob, Inve
super(type, world);
}
@@ -4083,7 +4086,7 @@ index cec545c3baa6599d47b9cf1a4b97de8771062a22..31d204d8d81ccc30371070af3678d82d
this.goalSelector.addGoal(9, new LookAtPlayerGoal(this, Player.class, 15.0F, 1.0F));
this.goalSelector.addGoal(10, new LookAtPlayerGoal(this, Mob.class, 15.0F));
+ this.targetSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur
this.targetSelector.addGoal(1, (new HurtByTargetGoal(this, Raider.class)).setAlertOthers());
this.targetSelector.addGoal(1, (new HurtByTargetGoal(this, new Class[]{Raider.class})).setAlertOthers());
this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true));
this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractVillager.class, false));
diff --git a/src/main/java/net/minecraft/world/entity/monster/Ravager.java b/src/main/java/net/minecraft/world/entity/monster/Ravager.java
@@ -4185,10 +4188,10 @@ index f3c2a2ffb74daa89a516db4c188ce675c79932bf..a695ac9b9e4c3e423d74d082e2492858
public ShulkerLookControl(Mob entity) {
super(entity);
diff --git a/src/main/java/net/minecraft/world/entity/monster/Silverfish.java b/src/main/java/net/minecraft/world/entity/monster/Silverfish.java
index 2c60a3765d22909e73b660492410ab8456304b68..f5dda5ed4532c8572bc4f511c49377c262efe057 100644
index fcd5cc3ff8d4b38f4dea08f78723db3dac53ffde..e884e44139e2c7a05f5769192c3f6c7632eeb730 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Silverfish.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Silverfish.java
@@ -47,14 +47,33 @@ public class Silverfish extends Monster {
@@ -48,14 +48,33 @@ public class Silverfish extends Monster {
super(type, world);
}
@@ -4251,10 +4254,10 @@ index 92974452d8f63fde8524cfac305ee2ef5212f840..3568c4b7ecfa250bbeb1799685b487df
protected void defineSynchedData() {
super.defineSynchedData();
diff --git a/src/main/java/net/minecraft/world/entity/monster/Slime.java b/src/main/java/net/minecraft/world/entity/monster/Slime.java
index 2502cb476032c6a247132ce2e427721d6c9f8ce4..23ed3890fd5a5786c1d251b926cb386b16f8b4f9 100644
index 3d9107d2c19a09215445aa0e0aacc32f9f82a536..bb1d0cae9d51a64e0752a59218dc71da73330139 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Slime.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Slime.java
@@ -61,6 +61,7 @@ public class Slime extends Mob implements Enemy {
@@ -62,6 +62,7 @@ public class Slime extends Mob implements Enemy {
public float squish;
public float oSquish;
private boolean wasOnGround;
@@ -4262,7 +4265,7 @@ index 2502cb476032c6a247132ce2e427721d6c9f8ce4..23ed3890fd5a5786c1d251b926cb386b
public Slime(EntityType<? extends Slime> type, Level world) {
super(type, world);
@@ -68,12 +69,48 @@ public class Slime extends Mob implements Enemy {
@@ -69,12 +70,48 @@ public class Slime extends Mob implements Enemy {
this.moveControl = new Slime.SlimeMoveControl(this);
}
@@ -4311,7 +4314,7 @@ index 2502cb476032c6a247132ce2e427721d6c9f8ce4..23ed3890fd5a5786c1d251b926cb386b
this.targetSelector.addGoal(1, new NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, (entityliving) -> {
return Math.abs(entityliving.getY() - this.getY()) <= 4.0D;
}));
@@ -378,11 +415,12 @@ public class Slime extends Mob implements Enemy {
@@ -386,11 +423,12 @@ public class Slime extends Mob implements Enemy {
}
@Override
@@ -4325,7 +4328,7 @@ index 2502cb476032c6a247132ce2e427721d6c9f8ce4..23ed3890fd5a5786c1d251b926cb386b
}
@Nullable
@@ -416,7 +454,7 @@ public class Slime extends Mob implements Enemy {
@@ -424,7 +462,7 @@ public class Slime extends Mob implements Enemy {
return super.getDimensions(pose).scale(0.255F * (float) this.getSize());
}
@@ -4334,7 +4337,7 @@ index 2502cb476032c6a247132ce2e427721d6c9f8ce4..23ed3890fd5a5786c1d251b926cb386b
private float yRot;
private int jumpDelay;
@@ -435,21 +473,33 @@ public class Slime extends Mob implements Enemy {
@@ -443,21 +481,33 @@ public class Slime extends Mob implements Enemy {
}
public void setWantedMovement(double speed) {
@@ -4371,7 +4374,7 @@ index 2502cb476032c6a247132ce2e427721d6c9f8ce4..23ed3890fd5a5786c1d251b926cb386b
if (this.jumpDelay-- <= 0) {
this.jumpDelay = this.slime.getJumpDelay();
if (this.isAggressive) {
@@ -466,7 +516,7 @@ public class Slime extends Mob implements Enemy {
@@ -474,7 +524,7 @@ public class Slime extends Mob implements Enemy {
this.mob.setSpeed(0.0F);
}
} else {
@@ -5007,10 +5010,10 @@ index 0a151c679b0dc943598180942d6d4b3886211688..384e7b29215cadfa40af07a183a9c9c6
public static void applyDarknessAround(ServerLevel world, Vec3 pos, @Nullable Entity entity, int range) {
diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java
index b1fa6e102a694b63f2aa9660b9e6b649bcae9a7d..3f9945db1970c6356e3fbde3520c07e2a75fbb48 100644
index 96ca567af2d8fb2ba39f995be80b935344550124..8e3e9bfe614057450ec771f72c9b1d7ea061d66e 100644
--- a/src/main/java/net/minecraft/world/entity/npc/Villager.java
+++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java
@@ -157,6 +157,28 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
@@ -158,6 +158,28 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
this.setVillagerData(this.getVillagerData().setType(type).setProfession(VillagerProfession.NONE));
}
@@ -5039,7 +5042,7 @@ index b1fa6e102a694b63f2aa9660b9e6b649bcae9a7d..3f9945db1970c6356e3fbde3520c07e2
@Override
public Brain<Villager> getBrain() {
return (Brain<Villager>) super.getBrain(); // CraftBukkit - decompile error
@@ -257,11 +279,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
@@ -258,11 +280,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
protected void customServerAiStep(final boolean inactive) {
// Paper end
this.level().getProfiler().push("villagerBrain");
@@ -5054,7 +5057,7 @@ index b1fa6e102a694b63f2aa9660b9e6b649bcae9a7d..3f9945db1970c6356e3fbde3520c07e2
this.level().getProfiler().pop();
if (this.assignProfessionWhenSpawned) {
this.assignProfessionWhenSpawned = false;
@@ -318,7 +340,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
@@ -319,7 +341,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
if (!itemstack.is(Items.VILLAGER_SPAWN_EGG) && this.isAlive() && !this.isTrading() && !this.isSleeping()) {
if (this.isBaby()) {
this.setUnhappy();
@@ -5063,7 +5066,7 @@ index b1fa6e102a694b63f2aa9660b9e6b649bcae9a7d..3f9945db1970c6356e3fbde3520c07e2
} else {
boolean flag = this.getOffers().isEmpty();
@@ -331,8 +353,9 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
@@ -332,8 +354,9 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
}
if (flag) {
@@ -5075,10 +5078,10 @@ index b1fa6e102a694b63f2aa9660b9e6b649bcae9a7d..3f9945db1970c6356e3fbde3520c07e2
this.startTrading(player);
}
diff --git a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java
index 1c89f20debfad9807c90a21cc336d5790294ebce..3782209c6d3408393e91ffe64976a15cba025843 100644
index 8d1cc1a644415be251f469ab1cb2ebc09fe5c3eb..80b9c2043f2a84dc44b082a9c97a7b5dbbb93dc2 100644
--- a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java
+++ b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java
@@ -70,6 +70,23 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill
@@ -71,6 +71,23 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill
//this.setDespawnDelay(48000); // CraftBukkit - set default from MobSpawnerTrader // Paper - move back to MobSpawnerTrader - Vanilla behavior is that only traders spawned by it have this value set.
}
@@ -5102,7 +5105,7 @@ index 1c89f20debfad9807c90a21cc336d5790294ebce..3782209c6d3408393e91ffe64976a15c
@Override
protected void registerGoals() {
this.goalSelector.addGoal(0, new FloatGoal(this));
@@ -117,8 +134,9 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill
@@ -118,8 +135,9 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill
}
if (this.getOffers().isEmpty()) {
@@ -5114,10 +5117,10 @@ index 1c89f20debfad9807c90a21cc336d5790294ebce..3782209c6d3408393e91ffe64976a15c
this.setTradingPlayer(player);
this.openTradingScreen(player, this.getDisplayName(), 1);
diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java
index 5ca1f834f311a87323ced2578535e66efa14e47f..835e4451b075d00de53f99a796b91010fbae29b2 100644
index 567704f61034363e48ef2a5b5566ebdc91682297..8a6acc19e9f3afb778420495a5ed41ce78227f1a 100644
--- a/src/main/java/net/minecraft/world/entity/player/Player.java
+++ b/src/main/java/net/minecraft/world/entity/player/Player.java
@@ -193,6 +193,19 @@ public abstract class Player extends LivingEntity {
@@ -194,6 +194,19 @@ public abstract class Player extends LivingEntity {
}
// CraftBukkit end
@@ -5138,10 +5141,10 @@ index 5ca1f834f311a87323ced2578535e66efa14e47f..835e4451b075d00de53f99a796b91010
super(EntityType.PLAYER, world);
this.lastItemInMainHand = ItemStack.EMPTY;
diff --git a/src/main/java/net/minecraft/world/entity/projectile/LlamaSpit.java b/src/main/java/net/minecraft/world/entity/projectile/LlamaSpit.java
index 0bbe853f7df93f9dcd2b21d762939f8b6be069aa..7db9844083703944f59e112c6dc5e1a5e062d31c 100644
index 8f5376543cca9cbfb2a014f67ec373d984b0df64..3673d1442778331ece25f8faca95b3499cafe46e 100644
--- a/src/main/java/net/minecraft/world/entity/projectile/LlamaSpit.java
+++ b/src/main/java/net/minecraft/world/entity/projectile/LlamaSpit.java
@@ -26,6 +26,12 @@ public class LlamaSpit extends Projectile {
@@ -29,6 +29,12 @@ public class LlamaSpit extends Projectile {
this.setPos(owner.getX() - (double) (owner.getBbWidth() + 1.0F) * 0.5D * (double) Mth.sin(owner.yBodyRot * 0.017453292F), owner.getEyeY() - 0.10000000149011612D, owner.getZ() + (double) (owner.getBbWidth() + 1.0F) * 0.5D * (double) Mth.cos(owner.yBodyRot * 0.017453292F));
}
@@ -5155,10 +5158,10 @@ index 0bbe853f7df93f9dcd2b21d762939f8b6be069aa..7db9844083703944f59e112c6dc5e1a5
public void tick() {
super.tick();
diff --git a/src/main/java/net/minecraft/world/entity/projectile/WitherSkull.java b/src/main/java/net/minecraft/world/entity/projectile/WitherSkull.java
index 78dd3365dc4d1265fc2102f740d75a384f5df5c5..4a2331c22a022881d66bcfd4134b0ffe421a0633 100644
index 35e76fc8667d9fde5a8fc426699a617fb0a08e4b..41261b72bfa5157139a5384b6a0b66b719ec02b9 100644
--- a/src/main/java/net/minecraft/world/entity/projectile/WitherSkull.java
+++ b/src/main/java/net/minecraft/world/entity/projectile/WitherSkull.java
@@ -110,6 +110,12 @@ public class WitherSkull extends AbstractHurtingProjectile {
@@ -111,6 +111,12 @@ public class WitherSkull extends AbstractHurtingProjectile {
}
@@ -5172,10 +5175,10 @@ index 78dd3365dc4d1265fc2102f740d75a384f5df5c5..4a2331c22a022881d66bcfd4134b0ffe
public boolean isPickable() {
return false;
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
index 8698104e3eb98e2cc5da5de87a8f538860c1d91d..39ae3335866669be54f31ee6cd10d41bc70b193c 100644
index 0b5a31477e3b76833fb97a455842316193663c8e..74599d29538b7072464d3bb16b6356da09513d21 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
@@ -1227,4 +1227,27 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
@@ -1228,4 +1228,27 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
return this.getHandle().getScoreboardName();
}
// Paper end - entity scoreboard name
@@ -5204,10 +5207,10 @@ index 8698104e3eb98e2cc5da5de87a8f538860c1d91d..39ae3335866669be54f31ee6cd10d41b
+ // Purpur end
}
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
index d677759ac6b6d3cfe5a2af76dc1f0034b216ac2d..2d47fd8290c9712bbf720452f5ffe134b1941d8c 100644
index 4c2e8129481384a143384d327e14320023735b1a..ac836274a2d725e3fac55394154ae2148024853a 100644
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
@@ -591,6 +591,15 @@ public class CraftEventFactory {
@@ -592,6 +592,15 @@ public class CraftEventFactory {
// Paper end
craftServer.getPluginManager().callEvent(event);
@@ -5223,7 +5226,7 @@ index d677759ac6b6d3cfe5a2af76dc1f0034b216ac2d..2d47fd8290c9712bbf720452f5ffe134
return event;
}
@@ -1182,6 +1191,7 @@ public class CraftEventFactory {
@@ -1183,6 +1192,7 @@ public class CraftEventFactory {
EntityDamageEvent event;
if (damager != null) {
event = new EntityDamageByEntityEvent(damager.getBukkitEntity(), damagee.getBukkitEntity(), cause, bukkitDamageSource, modifiers, modifierFunctions, critical);
@@ -6357,10 +6360,10 @@ index 0000000000000000000000000000000000000000..ba2a37dad43e238e54632975abea8ee6
+}
diff --git a/src/main/java/org/purpurmc/purpur/entity/DolphinSpit.java b/src/main/java/org/purpurmc/purpur/entity/DolphinSpit.java
new file mode 100644
index 0000000000000000000000000000000000000000..83dd3f982d5869e26748e6e0d0b38a3c7a08fe02
index 0000000000000000000000000000000000000000..b7e3994879a2b1de0c504f122b0c3c3229e4c356
--- /dev/null
+++ b/src/main/java/org/purpurmc/purpur/entity/DolphinSpit.java
@@ -0,0 +1,99 @@
@@ -0,0 +1,100 @@
+package org.purpurmc.purpur.entity;
+
+import net.minecraft.core.particles.ParticleTypes;
@@ -6379,6 +6382,7 @@ index 0000000000000000000000000000000000000000..83dd3f982d5869e26748e6e0d0b38a3c
+import net.minecraft.world.phys.EntityHitResult;
+import net.minecraft.world.phys.HitResult;
+import net.minecraft.world.phys.Vec3;
+import org.bukkit.event.entity.EntityRemoveEvent;
+
+public class DolphinSpit extends LlamaSpit {
+ public LivingEntity dolphin;
@@ -6422,7 +6426,7 @@ index 0000000000000000000000000000000000000000..83dd3f982d5869e26748e6e0d0b38a3c
+ }
+
+ if (++ticksLived > 20) {
+ this.discard();
+ this.discard(EntityRemoveEvent.Cause.DISCARD);
+ } else {
+ this.setDeltaMovement(mot.scale(0.99D));
+ if (!this.isNoGravity()) {
@@ -6457,12 +6461,12 @@ index 0000000000000000000000000000000000000000..83dd3f982d5869e26748e6e0d0b38a3c
+ }
+ BlockState state = this.level().getBlockState(blockHitResult.getBlockPos());
+ state.onProjectileHit(this.level(), state, blockHitResult, this);
+ this.discard();
+ this.discard(EntityRemoveEvent.Cause.DISCARD);
+ }
+}
diff --git a/src/main/java/org/purpurmc/purpur/entity/PhantomFlames.java b/src/main/java/org/purpurmc/purpur/entity/PhantomFlames.java
new file mode 100644
index 0000000000000000000000000000000000000000..8fa9b376682d9e8b1971a9f72b918c6dc6872d04
index 0000000000000000000000000000000000000000..bc139e518c8214246c3f514b64f987bdd5de6f23
--- /dev/null
+++ b/src/main/java/org/purpurmc/purpur/entity/PhantomFlames.java
@@ -0,0 +1,114 @@
@@ -6530,11 +6534,11 @@ index 0000000000000000000000000000000000000000..8fa9b376682d9e8b1971a9f72b918c6d
+ }
+
+ if (++ticksLived > 20) {
+ this.discard();
+ this.discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.DISCARD);
+ } else if (this.level().getBlockStates(this.getBoundingBox()).noneMatch(BlockBehaviour.BlockStateBase::isAir)) {
+ this.discard();
+ this.discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.DISCARD);
+ } else if (this.isInWaterOrBubble()) {
+ this.discard();
+ this.discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.DISCARD);
+ } else {
+ this.setDeltaMovement(mot.scale(0.99D));
+ if (!this.isNoGravity()) {
@@ -6577,7 +6581,7 @@ index 0000000000000000000000000000000000000000..8fa9b376682d9e8b1971a9f72b918c6d
+ BlockState state = this.level().getBlockState(blockHitResult.getBlockPos());
+ state.onProjectileHit(this.level(), state, blockHitResult, this);
+ }
+ this.discard();
+ this.discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.DISCARD);
+ }
+}
diff --git a/src/main/java/org/purpurmc/purpur/entity/ai/HasRider.java b/src/main/java/org/purpurmc/purpur/entity/ai/HasRider.java