diff --git a/gradle.properties b/gradle.properties index 4a975ddb5..68e007376 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ group = org.purpurmc.purpur version = 1.20.4-R0.1-SNAPSHOT mcVersion = 1.20.4 -paperCommit = 3ea95efdebba7254e842dec66214f71de4721993 +paperCommit = 681bbff110d9a56152ae898c4dfe1c0356b40e69 org.gradle.caching = true org.gradle.parallel = true diff --git a/patches/server/0001-Pufferfish-Server-Changes.patch b/patches/server/0001-Pufferfish-Server-Changes.patch index 974e869ea..1b3c10ccc 100644 --- a/patches/server/0001-Pufferfish-Server-Changes.patch +++ b/patches/server/0001-Pufferfish-Server-Changes.patch @@ -20,7 +20,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . diff --git a/build.gradle.kts b/build.gradle.kts -index ce3747d8d2a8f4327766cf23d5aaa72cfcb380bc..998429d65a001d5d54a3e9cf53c8314c9ea26d2c 100644 +index 241808d8619e17c0681f79acbbc98af5bf52dd89..12b774464e8de3a07993be23e233d31e11ede7b1 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -13,8 +13,12 @@ configurations.named(log4jPlugins.compileClasspathConfigurationName) { @@ -52,7 +52,7 @@ index ce3747d8d2a8f4327766cf23d5aaa72cfcb380bc..998429d65a001d5d54a3e9cf53c8314c testImplementation("io.github.classgraph:classgraph:4.8.47") // Paper - mob goal test testImplementation("org.junit.jupiter:junit-jupiter:5.10.0") testImplementation("org.hamcrest:hamcrest:2.2") -@@ -58,6 +69,14 @@ dependencies { +@@ -59,6 +70,14 @@ dependencies { } val craftbukkitPackageVersion = "1_20_R3" // Paper @@ -67,7 +67,7 @@ index ce3747d8d2a8f4327766cf23d5aaa72cfcb380bc..998429d65a001d5d54a3e9cf53c8314c tasks.jar { archiveClassifier.set("dev") -@@ -70,7 +89,7 @@ tasks.jar { +@@ -71,7 +90,7 @@ tasks.jar { attributes( "Main-Class" to "org.bukkit.craftbukkit.Main", "Implementation-Title" to "CraftBukkit", @@ -76,7 +76,7 @@ index ce3747d8d2a8f4327766cf23d5aaa72cfcb380bc..998429d65a001d5d54a3e9cf53c8314c "Implementation-Vendor" to date, // Paper "Specification-Title" to "Bukkit", "Specification-Version" to project.version, -@@ -210,7 +229,5 @@ val runtimeClasspathForRunDev = sourceSets.main.flatMap { src -> +@@ -211,7 +230,5 @@ val runtimeClasspathForRunDev = sourceSets.main.flatMap { src -> } tasks.registerRunTask("runDev") { description = "Spin up a non-relocated Mojang-mapped test server" @@ -1560,7 +1560,7 @@ index 68d268b6fff126e8645b6deec3fb549ea2286b77..435b129c433704c24828d8fb57e14333 } } diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java -index 5a7278b093e37b95fb005ad5cc3cac90ac36f8fb..28d05b46952397bb664a1c8dae71816cafee89ce 100644 +index 12109446fc76a39faee6cda042ca48b3fd3809f4..1081e9df44bb24b2c51ebd9364c21c7b2a3a205a 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java @@ -243,7 +243,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider @@ -1738,7 +1738,7 @@ index 529ab44baaf573b97cf7e89560c548642733188f..db55ad9aaabfa1ea998754f3ac352d16 this.wasOnGround = this.entity.onGround(); this.teleportDelay = 0; diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 6934e9dac0d69c043b73b7c46d59f2d39b37c67f..dbe612427b894df9da1335b94163ba9b89b090c0 100644 +index 6907d1be36fbdf0856c0e11983218d2fd1f9cb46..531c9ef0d6504fc1632b83bd93b9cf76e91377e8 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -894,6 +894,7 @@ public class ServerLevel extends Level implements WorldGenLevel { @@ -1794,7 +1794,7 @@ index 6934e9dac0d69c043b73b7c46d59f2d39b37c67f..dbe612427b894df9da1335b94163ba9b if (this.isRainingAt(blockposition)) { diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index ab5b259d8f72022c875cae73be25fe2da346c6b3..90910646031a73e1254fb844efdb9c8e32ec4233 100644 +index 87e5ee042ab2c052d25ab4c2521a68cf2e2d67b6..601ac8738a775eafde2c9e237feb596a9a47ba89 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -1135,6 +1135,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl @@ -1918,10 +1918,10 @@ index d6cbe98e67fdbf8db46338a88ab1356dd63b50a3..20dd3a63b2f955b05a75eb240e33ae4c int LARGE_MAX_STACK_SIZE = 64; int DEFAULT_DISTANCE_LIMIT = 8; diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 906eded9a2ab61737a30cfe89292a71237ce4eb7..0f2af6968f6bb47f5ef7e3f63cbfdc2f6df53999 100644 +index 45439b0cc4ea69e409fd41d4684403c0e0feab12..098c410f0285948d7ac48835c352f9c97742c5c7 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -308,7 +308,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -309,7 +309,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S public double yo; public double zo; private Vec3 position; @@ -1930,7 +1930,7 @@ index 906eded9a2ab61737a30cfe89292a71237ce4eb7..0f2af6968f6bb47f5ef7e3f63cbfdc2f private ChunkPos chunkPosition; private Vec3 deltaMovement; private float yRot; -@@ -423,6 +423,9 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -424,6 +424,9 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S private UUID originWorld; public boolean freezeLocked = false; // Paper - Freeze Tick Lock API public boolean fixedPose = false; // Paper - Expand Pose API @@ -1940,7 +1940,7 @@ index 906eded9a2ab61737a30cfe89292a71237ce4eb7..0f2af6968f6bb47f5ef7e3f63cbfdc2f public void setOrigin(@javax.annotation.Nonnull Location location) { this.origin = location.toVector(); -@@ -807,6 +810,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -820,6 +823,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } public void tick() { @@ -1953,7 +1953,7 @@ index 906eded9a2ab61737a30cfe89292a71237ce4eb7..0f2af6968f6bb47f5ef7e3f63cbfdc2f this.baseTick(); } -@@ -4405,16 +4414,18 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -4421,16 +4430,18 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } public boolean updateFluidHeightAndDoFluidPushing(TagKey tag, double speed) { @@ -1979,7 +1979,7 @@ index 906eded9a2ab61737a30cfe89292a71237ce4eb7..0f2af6968f6bb47f5ef7e3f63cbfdc2f double d1 = 0.0D; boolean flag = this.isPushedByFluid(); boolean flag1 = false; -@@ -4422,14 +4433,61 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -4438,14 +4449,61 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S int k1 = 0; BlockPos.MutableBlockPos blockposition_mutableblockposition = new BlockPos.MutableBlockPos(); @@ -2047,7 +2047,7 @@ index 906eded9a2ab61737a30cfe89292a71237ce4eb7..0f2af6968f6bb47f5ef7e3f63cbfdc2f if (d2 >= axisalignedbb.minY) { flag1 = true; -@@ -4451,9 +4509,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -4467,9 +4525,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S // CraftBukkit end } } @@ -2074,10 +2074,10 @@ index 09e8445a3f8c6b3ebc852a75a9a25b41a51ba659..dc11683ee4d8a6b7a1c42bcae36dc6e8 private String descriptionId; @Nullable diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index aceee33eebd4d5f89e62a42910ec51843f33843b..aa9696facf7780313c322d01928aab7e6c92cc99 100644 +index 23570a0b1227a840b9c1e6ae326827ea655bb5f7..25e30408c964b5257f1cf945892bd668df38252b 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -142,7 +142,6 @@ import org.bukkit.event.entity.EntityTeleportEvent; +@@ -143,7 +143,6 @@ import org.bukkit.event.entity.EntityTeleportEvent; import org.bukkit.event.player.PlayerItemConsumeEvent; // CraftBukkit end @@ -2085,7 +2085,7 @@ index aceee33eebd4d5f89e62a42910ec51843f33843b..aa9696facf7780313c322d01928aab7e public abstract class LivingEntity extends Entity implements Attackable { -@@ -413,7 +412,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -414,7 +413,7 @@ public abstract class LivingEntity extends Entity implements Attackable { boolean flag = this instanceof net.minecraft.world.entity.player.Player; if (!this.level().isClientSide) { @@ -2094,7 +2094,7 @@ index aceee33eebd4d5f89e62a42910ec51843f33843b..aa9696facf7780313c322d01928aab7e this.hurt(this.damageSources().inWall(), 1.0F); } else if (flag && !this.level().getWorldBorder().isWithinBounds(this.getBoundingBox())) { double d0 = this.level().getWorldBorder().getDistanceToBorder(this) + this.level().getWorldBorder().getDamageSafeZone(); -@@ -1410,6 +1409,19 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1418,6 +1417,19 @@ public abstract class LivingEntity extends Entity implements Attackable { return this.getHealth() <= 0.0F; } @@ -2114,7 +2114,7 @@ index aceee33eebd4d5f89e62a42910ec51843f33843b..aa9696facf7780313c322d01928aab7e @Override public boolean hurt(DamageSource source, float amount) { if (this.isInvulnerableTo(source)) { -@@ -2016,6 +2028,20 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -2024,6 +2036,20 @@ public abstract class LivingEntity extends Entity implements Attackable { return this.lastClimbablePos; } @@ -2136,10 +2136,10 @@ index aceee33eebd4d5f89e62a42910ec51843f33843b..aa9696facf7780313c322d01928aab7e if (this.isSpectator()) { return false; diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index fa0b78139fecc0245e168ebeb4172ea2531a3fec..4be5ae6bfc7bbb8c928e13208dfcd7f455c56cfe 100644 +index 2439f8d48daca7329049436414f06a36b4b79029..4cf2963fdbe9003fd18ac8c2035ccded57c02abd 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java -@@ -221,14 +221,16 @@ public abstract class Mob extends LivingEntity implements Targeting { +@@ -222,14 +222,16 @@ public abstract class Mob extends LivingEntity implements Targeting { return this.lookControl; } @@ -2158,7 +2158,7 @@ index fa0b78139fecc0245e168ebeb4172ea2531a3fec..4be5ae6bfc7bbb8c928e13208dfcd7f4 this.targetSelector.tick(); } } -@@ -912,16 +914,20 @@ public abstract class Mob extends LivingEntity implements Targeting { +@@ -913,16 +915,20 @@ public abstract class Mob extends LivingEntity implements Targeting { if (i % 2 != 0 && this.tickCount > 1) { this.level().getProfiler().push("targetSelector"); @@ -2359,10 +2359,10 @@ index 295769d039f2a1e4f48912a60f9dbe267d8992c1..e88b058c0734e436ef24bab6364b206c this.level().getProfiler().pop(); this.level().getProfiler().push("frogActivityUpdate"); 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 4aeab90e778629c355189dfe79c39c4b21f5f5ac..6ed4ac06c76b8d0d6e8db778cade15dbd1e3e5f5 100644 +index 958816ce2166248b542c96c10c398a52d769b4db..415afe3473d9f8a50b1edab8cfda6158e59836e6 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 -@@ -77,9 +77,11 @@ public class Tadpole extends AbstractFish { +@@ -80,9 +80,11 @@ public class Tadpole extends AbstractFish { return SoundEvents.TADPOLE_FLOP; } @@ -2391,10 +2391,10 @@ index 5d247ac38fe8a61603b3d934f3000bcda773142b..2e4177cfb02616ef6fa689f6d378976e this.level().getProfiler().pop(); this.level().getProfiler().push("goatActivityUpdate"); 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 ac9eaeaf7df1e84ee588f371628c0a10784d50bc..ea8883b0661e894a466eca24bfc247ac37f40a81 100644 +index 12440ee2dccc0a697fb403765f2e1b987ccc0283..de2471cfa96a23944f229f33ffdff88b6b7756e4 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 -@@ -150,6 +150,13 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob +@@ -151,6 +151,13 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob this.bossEvent.setName(this.getDisplayName()); } @@ -2483,10 +2483,10 @@ index 937f81a859953498abe73bea560c86e6560e1c33..0a151c679b0dc943598180942d6d4b38 this.level().getProfiler().pop(); super.customServerAiStep(); 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 1aae466e3e334d7f4bbb3ea9365a255afcc3dd3a..b1fa6e102a694b63f2aa9660b9e6b649bcae9a7d 100644 +index 24044795d8e0f1fb15a4f2f5401f44897092f2a3..96ca567af2d8fb2ba39f995be80b935344550124 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -142,6 +142,8 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -143,6 +143,8 @@ public class Villager extends AbstractVillager implements ReputationEventHandler return holder.is(PoiTypes.MEETING); }); @@ -2495,7 +2495,7 @@ index 1aae466e3e334d7f4bbb3ea9365a255afcc3dd3a..b1fa6e102a694b63f2aa9660b9e6b649 public Villager(EntityType entityType, Level world) { this(entityType, world, VillagerType.PLAINS); } -@@ -245,6 +247,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -246,6 +248,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } // Spigot End @@ -2503,7 +2503,7 @@ index 1aae466e3e334d7f4bbb3ea9365a255afcc3dd3a..b1fa6e102a694b63f2aa9660b9e6b649 @Override @Deprecated // Paper protected void customServerAiStep() { -@@ -254,7 +257,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -255,7 +258,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler protected void customServerAiStep(final boolean inactive) { // Paper end this.level().getProfiler().push("villagerBrain"); @@ -2590,10 +2590,10 @@ index 156809090f1f83ad68e7e2477a3cfddac5757a8e..837f68825f601971f374be47952b2310 if (entity != null) { this.ownerUUID = entity.getUUID(); diff --git a/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecartContainer.java b/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecartContainer.java -index 6d23c39e4eadf23616080d6d08672e13b5d3c37d..e7115f1635821e0aab32e8aeea6914388dc24639 100644 +index 756d0434472921992c9d84597d7c9c824e93614c..38c573d440946ca7ee6016ef92e9c1605031e611 100644 --- a/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecartContainer.java +++ b/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecartContainer.java -@@ -27,7 +27,10 @@ import org.bukkit.inventory.InventoryHolder; +@@ -28,7 +28,10 @@ import org.bukkit.inventory.InventoryHolder; public abstract class AbstractMinecartContainer extends AbstractMinecart implements ContainerEntity { @@ -2604,7 +2604,7 @@ index 6d23c39e4eadf23616080d6d08672e13b5d3c37d..e7115f1635821e0aab32e8aeea691438 @Nullable public ResourceLocation lootTable; public long lootTableSeed; -@@ -89,12 +92,18 @@ public abstract class AbstractMinecartContainer extends AbstractMinecart impleme +@@ -90,12 +93,18 @@ public abstract class AbstractMinecartContainer extends AbstractMinecart impleme protected AbstractMinecartContainer(EntityType type, Level world) { super(type, world); @@ -2625,7 +2625,7 @@ index 6d23c39e4eadf23616080d6d08672e13b5d3c37d..e7115f1635821e0aab32e8aeea691438 } @Override -@@ -156,6 +165,10 @@ public abstract class AbstractMinecartContainer extends AbstractMinecart impleme +@@ -164,6 +173,10 @@ public abstract class AbstractMinecartContainer extends AbstractMinecart impleme protected void readAdditionalSaveData(CompoundTag nbt) { super.readAdditionalSaveData(nbt); this.lootableData.loadNbt(nbt); // Paper @@ -2697,7 +2697,7 @@ index 27b0a79f7a7c47047216aae42944bac2a2151181..a097cfc528f709c80575f35483b68783 autorecipestackmanager.initialize(this); // Paper - better exact choice recipes int i = 0; diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 19f23a6c8fb5c02843c27fb8a242ec9d0d1b538b..9c02040543825e99f576c6f8995133ec6a329940 100644 +index f476ba6c97944bdffae5aacae2e285d17541f46e..506100b02e7e9a3eabfde6b1f93858c4cc048524 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java @@ -207,6 +207,8 @@ public abstract class Level implements LevelAccessor, AutoCloseable { @@ -2720,9 +2720,9 @@ index 19f23a6c8fb5c02843c27fb8a242ec9d0d1b538b..9c02040543825e99f576c6f8995133ec final String msg = String.format("Entity threw exception at %s:%s,%s,%s", entity.level().getWorld().getName(), entity.getX(), entity.getY(), entity.getZ()); MinecraftServer.LOGGER.error(msg, throwable); getCraftServer().getPluginManager().callEvent(new com.destroystokyo.paper.event.server.ServerExceptionEvent(new com.destroystokyo.paper.exception.ServerInternalException(msg, throwable))); // Paper - ServerExceptionEvent -- entity.discard(); +- entity.discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.DISCARD); - // Paper end - Prevent block entity and entity crashes -+ entity.discard(); // Pufferfish - diff on change ServerLevel.tick ++ entity.discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.DISCARD); // Pufferfish - diff on change ServerLevel.tick + // Paper end } } @@ -2884,10 +2884,10 @@ index 9b1243d96e0694c62fc9e82e9be540bce0d2b3ad..3514022d898a24052c917ebf55dcef3e @Override diff --git a/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java -index a61d7cd2b078fe511ff00344197b6ea11feebfb2..7041394d366e6145369d032a0a14f0478af4679f 100644 +index 757edf74751dc7183454656fda9cecc4eb601e4c..9e577408d8e794c40bf34bc800cd0920856a5d2b 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java -@@ -47,7 +47,10 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen +@@ -48,7 +48,10 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen public static final int MOVE_ITEM_SPEED = 8; public static final int HOPPER_CONTAINER_SIZE = 5; @@ -2898,7 +2898,7 @@ index a61d7cd2b078fe511ff00344197b6ea11feebfb2..7041394d366e6145369d032a0a14f047 private int cooldownTime; private long tickedGameTime; -@@ -83,14 +86,37 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen +@@ -84,14 +87,37 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen public HopperBlockEntity(BlockPos pos, BlockState state) { super(BlockEntityType.HOPPER, pos, state); @@ -2938,7 +2938,7 @@ index a61d7cd2b078fe511ff00344197b6ea11feebfb2..7041394d366e6145369d032a0a14f047 if (!this.tryLoadLootTable(nbt)) { ContainerHelper.loadAllItems(nbt, this.items); } -@@ -491,6 +517,7 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen +@@ -492,6 +518,7 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen } private static boolean isFullContainer(Container inventory, Direction direction) { @@ -2946,7 +2946,7 @@ index a61d7cd2b078fe511ff00344197b6ea11feebfb2..7041394d366e6145369d032a0a14f047 // Paper start - Perf: Optimize Hoppers if (inventory instanceof WorldlyContainer worldlyContainer) { for (final int slot : worldlyContainer.getSlotsForFace(direction)) { -@@ -513,7 +540,10 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen +@@ -514,7 +541,10 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen } private static boolean isEmptyContainer(Container inv, Direction facing) { @@ -2958,7 +2958,7 @@ index a61d7cd2b078fe511ff00344197b6ea11feebfb2..7041394d366e6145369d032a0a14f047 } public static boolean suckInItems(Level world, Hopper hopper) { -@@ -713,7 +743,7 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen +@@ -714,7 +744,7 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen if (HopperBlockEntity.canPlaceItemInContainer(to, stack, slot, side)) { boolean flag = false; @@ -2967,7 +2967,7 @@ index a61d7cd2b078fe511ff00344197b6ea11feebfb2..7041394d366e6145369d032a0a14f047 if (itemstack1.isEmpty()) { // Spigot start - SPIGOT-6693, InventorySubcontainer#setItem -@@ -908,7 +938,10 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen +@@ -909,7 +939,10 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen @Override protected void setItems(NonNullList list) { diff --git a/patches/server/0002-Rebrand.patch b/patches/server/0002-Rebrand.patch index 313c7f105..93bb2a1e0 100644 --- a/patches/server/0002-Rebrand.patch +++ b/patches/server/0002-Rebrand.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Rebrand diff --git a/build.gradle.kts b/build.gradle.kts -index 998429d65a001d5d54a3e9cf53c8314c9ea26d2c..3caad009206da9c8161f549af0c3437923f6aa4a 100644 +index 12b774464e8de3a07993be23e233d31e11ede7b1..7e82d2c6a6085a5ea335ba9ef2a5ec3f5a37e787 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -13,12 +13,12 @@ configurations.named(log4jPlugins.compileClasspathConfigurationName) { @@ -36,7 +36,7 @@ index 998429d65a001d5d54a3e9cf53c8314c9ea26d2c..3caad009206da9c8161f549af0c34379 testImplementation("io.github.classgraph:classgraph:4.8.47") // Paper - mob goal test testImplementation("org.junit.jupiter:junit-jupiter:5.10.0") testImplementation("org.hamcrest:hamcrest:2.2") -@@ -89,7 +93,7 @@ tasks.jar { +@@ -90,7 +94,7 @@ tasks.jar { attributes( "Main-Class" to "org.bukkit.craftbukkit.Main", "Implementation-Title" to "CraftBukkit", @@ -45,7 +45,7 @@ index 998429d65a001d5d54a3e9cf53c8314c9ea26d2c..3caad009206da9c8161f549af0c34379 "Implementation-Vendor" to date, // Paper "Specification-Title" to "Bukkit", "Specification-Version" to project.version, -@@ -173,7 +177,7 @@ fun TaskContainer.registerRunTask( +@@ -174,7 +178,7 @@ fun TaskContainer.registerRunTask( name: String, block: JavaExec.() -> Unit ): TaskProvider = register(name) { @@ -239,7 +239,7 @@ index 4e56018b64d11f76c8da43fd8f85c6de72204e36..9607675e6c5bff2183c4420d11fc63ee @Override diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -index f1e4dfd203d455ec089cd2b5679c4083400dbc7f..6f9cb8f328f47d6f3eb3142d701d80ceb51af926 100644 +index 3f952d1409118535f325f614f1a6507c40efa4d6..98df582ca3425f621396ce93cf7a0617ce3fb11f 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java @@ -953,7 +953,7 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { diff --git a/patches/server/0003-Fix-pufferfish-issues.patch b/patches/server/0003-Fix-pufferfish-issues.patch index 70635abfe..1418270d7 100644 --- a/patches/server/0003-Fix-pufferfish-issues.patch +++ b/patches/server/0003-Fix-pufferfish-issues.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Fix pufferfish issues diff --git a/build.gradle.kts b/build.gradle.kts -index 3caad009206da9c8161f549af0c3437923f6aa4a..6bceca84bd073e25fc9aa19b8b713a2873713696 100644 +index 7e82d2c6a6085a5ea335ba9ef2a5ec3f5a37e787..32366253c04c493135f2b22d1940f83669104723 100644 --- a/build.gradle.kts +++ b/build.gradle.kts -@@ -233,5 +233,7 @@ val runtimeClasspathForRunDev = sourceSets.main.flatMap { src -> +@@ -234,5 +234,7 @@ val runtimeClasspathForRunDev = sourceSets.main.flatMap { src -> } tasks.registerRunTask("runDev") { description = "Spin up a non-relocated Mojang-mapped test server" @@ -40,9 +40,18 @@ index f6a3364175476c57a7763a087ff55e1689474800..5e01bfdad663656168604fc878a993dd "This can improve performance by a few percent, but has minor gameplay implications."); } diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index dbe612427b894df9da1335b94163ba9b89b090c0..0982d44b9dd30c13d9d879095cc9a839bbda8bdc 100644 +index 531c9ef0d6504fc1632b83bd93b9cf76e91377e8..09594f96cf79aa38142a859bef2e3b6b8d00f7db 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java +@@ -924,7 +924,7 @@ public class ServerLevel extends Level implements WorldGenLevel { + final String msg = String.format("Entity threw exception at %s:%s,%s,%s", entity.level().getWorld().getName(), entity.getX(), entity.getY(), entity.getZ()); + MinecraftServer.LOGGER.error(msg, throwable); + getCraftServer().getPluginManager().callEvent(new com.destroystokyo.paper.event.server.ServerExceptionEvent(new com.destroystokyo.paper.exception.ServerInternalException(msg, throwable))); +- entity.discard(); ++ entity.discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.DISCARD); // Purpur + // Paper end + } + // Pufferfish end @@ -992,7 +992,7 @@ public class ServerLevel extends Level implements WorldGenLevel { } // Paper start - optimise random block ticking @@ -52,8 +61,34 @@ index dbe612427b894df9da1335b94163ba9b89b090c0..0982d44b9dd30c13d9d879095cc9a839 // Paper end private int currentIceAndSnowTick = 0; protected void resetIceAndSnowTick() { this.currentIceAndSnowTick = this.randomTickRandom.nextInt(16); } // Pufferfish +diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java +index 098c410f0285948d7ac48835c352f9c97742c5c7..3773b05d0e2875db8817835e623272292855925f 100644 +--- a/src/main/java/net/minecraft/world/entity/Entity.java ++++ b/src/main/java/net/minecraft/world/entity/Entity.java +@@ -825,7 +825,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S + public void tick() { + // Pufferfish start - entity TTL + if (type != EntityType.PLAYER && type.ttl >= 0 && this.tickCount >= type.ttl) { +- discard(); ++ discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.DISCARD); // Purpur + return; + } + // Pufferfish end - entity TTL +diff --git a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java +index 837f68825f601971f374be47952b23108bf66ba6..2a8a8030feefae84e394460612405887e63f2ac7 100644 +--- a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java ++++ b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java +@@ -64,7 +64,7 @@ public abstract class Projectile extends Entity implements TraceableEntity { + if (!isLoaded) { + if (Projectile.loadedThisTick > gg.pufferfish.pufferfish.PufferfishConfig.maxProjectileLoadsPerTick) { + if (++this.loadedLifetime > gg.pufferfish.pufferfish.PufferfishConfig.maxProjectileLoadsPerProjectile) { +- this.discard(); ++ this.discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.DISCARD); // Purpur + } + return; + } diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 9c02040543825e99f576c6f8995133ec6a329940..d6a08f06812bc15813559eb8ff66eddf7cf22888 100644 +index 506100b02e7e9a3eabfde6b1f93858c4cc048524..27447e4acb7db91b7595a7c25b682a4a4ce8c151 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java @@ -207,7 +207,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { diff --git a/patches/server/0007-Component-related-conveniences.patch b/patches/server/0007-Component-related-conveniences.patch index 2078c8fb7..c4f20c5e6 100644 --- a/patches/server/0007-Component-related-conveniences.patch +++ b/patches/server/0007-Component-related-conveniences.patch @@ -36,10 +36,10 @@ index 1d91ce01e7ce806a5b2e937ff855ebf159534f29..d39a3359249e2a312da0645d5abb625d public void displayClientMessage(Component message, boolean overlay) { this.sendSystemMessage(message, overlay); diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 91feb12732564c90656da487664dbc12e55397fc..a2e76fb8431cd4dc0cbf94245086c939625fb0da 100644 +index 1e5f709115007ff19901c0a6c3cf884d9e4d3a6c..6886f5808ffaaed06dcae122f7cba6a12ad563af 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -1063,6 +1063,20 @@ public abstract class PlayerList { +@@ -1064,6 +1064,20 @@ public abstract class PlayerList { } // CraftBukkit end @@ -81,10 +81,10 @@ index 1561b85a45f52a8162f43553f8485bfe084b8f1f..938524dc5b495ad160b9b14219db573e return this.type().msgId(); } diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 0f2af6968f6bb47f5ef7e3f63cbfdc2f6df53999..169d5e539b1474a3e400b53e21f867e5fb175182 100644 +index 3773b05d0e2875db8817835e623272292855925f..b96535eb07da6535bbb287c9478b81e7022247b1 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -4136,6 +4136,20 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -4152,6 +4152,20 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S return SlotAccess.NULL; } diff --git a/patches/server/0008-Ridables.patch b/patches/server/0008-Ridables.patch index 9a8cac58d..1b2b2bf25 100644 --- a/patches/server/0008-Ridables.patch +++ b/patches/server/0008-Ridables.patch @@ -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 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 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 { +@@ -148,6 +148,44 @@ public class Fox extends Animal implements VariantHolder { 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 { +@@ -167,6 +205,7 @@ public class Fox extends Animal implements VariantHolder { 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 { +@@ -193,6 +232,7 @@ public class Fox extends Animal implements VariantHolder { 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 { +@@ -785,16 +825,16 @@ public class Fox extends Animal implements VariantHolder { 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 { +@@ -805,16 +845,16 @@ public class Fox extends Animal implements VariantHolder { } } @@ -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> 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>> SENSOR_TYPES = ImmutableList.of(SensorType.NEAREST_LIVING_ENTITIES, SensorType.NEAREST_PLAYERS, SensorType.HURT_BY, SensorType.FROG_TEMPTATIONS); protected static final ImmutableList> 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 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 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 getBrain() { return (Brain) 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 diff --git a/patches/server/0009-Configurable-entity-base-attributes.patch b/patches/server/0009-Configurable-entity-base-attributes.patch index 1a2b26256..df9141018 100644 --- a/patches/server/0009-Configurable-entity-base-attributes.patch +++ b/patches/server/0009-Configurable-entity-base-attributes.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configurable entity base attributes diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 46e3d7a949d79d9168e0a976be09be5a178bea15..9a025cb4b760090fe506d7c398d5c86fb3ac13ca 100644 +index add00d6f63ed57d95abba3666095b64c3d47791a..aa1e2c05c65391b5fbfce203c5095afd50682874 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -159,7 +159,7 @@ import org.bukkit.plugin.PluginManager; +@@ -160,7 +160,7 @@ import org.bukkit.plugin.PluginManager; // CraftBukkit end public abstract class Entity implements Nameable, EntityAccess, CommandSource, ScoreHolder { @@ -34,10 +34,10 @@ index 75c278b67ad2b78766efd8f89c4c2ca7eb7cdcb2..dc99e7f0e6f173c1313c0d5e9ea5dd6b 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 dfc7b015da2a553122f98677c12636a84ce90a1f..e907240898d30084acd7b048c44fc85d4c2435df 100644 +index 4621dd94e9346bdd2eeca1d17869ff99aede0077..781eefa21c958c28c35d2d9559d89da236ce9387 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -286,6 +286,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -287,6 +287,7 @@ public abstract class LivingEntity extends Entity implements Attackable { this.useItem = ItemStack.EMPTY; this.lastClimbablePos = Optional.empty(); this.attributes = new AttributeMap(DefaultAttributes.getSupplier(type), this); // Purpur @@ -45,7 +45,7 @@ index dfc7b015da2a553122f98677c12636a84ce90a1f..e907240898d30084acd7b048c44fc85d 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()); -@@ -301,6 +302,8 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -302,6 +303,8 @@ public abstract class LivingEntity extends Entity implements Attackable { this.brain = this.makeBrain(new Dynamic(dynamicopsnbt, (Tag) dynamicopsnbt.createMap((Map) ImmutableMap.of(dynamicopsnbt.createString("memories"), (Tag) dynamicopsnbt.emptyMap())))); } @@ -158,10 +158,10 @@ index b0cff23aa6f841ad291437964ea5bebb6395de84..f440eabffb1abe4c7370bf7badf6137a protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); 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 2412cdb1bdaf7a558ad7235fca7ea5c74eeaad3f..f3a145be1970dd1e78e04b2ea0d77c6339a42fd8 100644 +index 18380c1ee458507de98a8aeb53c8b0c863d1eb89..df6306572f11762ec0d54b738c1a8a30269c9224 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java +++ b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java -@@ -158,6 +158,11 @@ public class Dolphin extends WaterAnimal { +@@ -159,6 +159,11 @@ public class Dolphin extends WaterAnimal { } // Purpur end @@ -174,10 +174,10 @@ index 2412cdb1bdaf7a558ad7235fca7ea5c74eeaad3f..f3a145be1970dd1e78e04b2ea0d77c63 @Override public SpawnGroupData finalizeSpawn(ServerLevelAccessor world, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData entityData, @Nullable CompoundTag entityNbt) { 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 142e45f4b5f2eb90b980f5085abe104505fa7dab..310f7b5ad4d1441c186045c296aded01610c1b4a 100644 +index c63634825ffffed2eccc560af9e9fcef1a9dc2e8..3faa945f9687abeba7a36f8198cb307685e348a9 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Fox.java +++ b/src/main/java/net/minecraft/world/entity/animal/Fox.java -@@ -182,6 +182,11 @@ public class Fox extends Animal implements VariantHolder { +@@ -186,6 +186,11 @@ public class Fox extends Animal implements VariantHolder { } // Purpur end @@ -206,10 +206,10 @@ index cb05267fb287b9de9d1829e90d9bb9c9f4aac9f7..46e28d807a72b6d302d29d65c52ab081 @Override 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 2f1385cbd88e7085ee5f39f8b5c371c9f0206c23..d6fbb914ad2434e4431f3aa6bfab07b8b8eb0da4 100644 +index b59d6a3f799f100702efb1fd10bbc48da4f4bd8f..0ff5902dde47c4bb9922d6605d874868fb4820b9 100644 --- a/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java +++ b/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java -@@ -80,6 +80,11 @@ public class MushroomCow extends Cow implements Shearable, VariantHolder getBrain() { return (Brain) super.getBrain(); // CraftBukkit - decompile error 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 3782209c6d3408393e91ffe64976a15cba025843..5184939949ab54504f178f86fffba4507a895568 100644 +index 80b9c2043f2a84dc44b082a9c97a7b5dbbb93dc2..80a157aa57fe5e6725b6e06a93b841d66cf62455 100644 --- a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java +++ b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java -@@ -87,6 +87,11 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill +@@ -88,6 +88,11 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill } // Purpur end diff --git a/patches/server/0010-Barrels-and-enderchests-6-rows.patch b/patches/server/0010-Barrels-and-enderchests-6-rows.patch index 54524ad04..cccb1f1c7 100644 --- a/patches/server/0010-Barrels-and-enderchests-6-rows.patch +++ b/patches/server/0010-Barrels-and-enderchests-6-rows.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Barrels and enderchests 6 rows diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index a2e76fb8431cd4dc0cbf94245086c939625fb0da..a2715cc02f3a8a12aa8538fb7b52e5da03f1278c 100644 +index 6886f5808ffaaed06dcae122f7cba6a12ad563af..f8a6d48200dae42cb73ed4f7eb52f957e7530e8c 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -1188,6 +1188,27 @@ public abstract class PlayerList { +@@ -1189,6 +1189,27 @@ public abstract class PlayerList { player.getBukkitEntity().recalculatePermissions(); // CraftBukkit this.server.getCommands().sendCommands(player); } // Paper - Add sendOpLevel API @@ -37,10 +37,10 @@ index a2e76fb8431cd4dc0cbf94245086c939625fb0da..a2715cc02f3a8a12aa8538fb7b52e5da public boolean isWhiteListed(GameProfile profile) { 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 835e4451b075d00de53f99a796b91010fbae29b2..0c06194b9a182447459815d88a8dcb96b7b4b896 100644 +index 8a6acc19e9f3afb778420495a5ed41ce78227f1a..cad2ff51d79d584312a03f35266774b297883c0c 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -182,6 +182,7 @@ public abstract class Player extends LivingEntity { +@@ -183,6 +183,7 @@ public abstract class Player extends LivingEntity { public float hurtDir; // Paper - protected -> public public boolean affectsSpawning = true; // Paper - Affects Spawning API public net.kyori.adventure.util.TriState flyingFallDamage = net.kyori.adventure.util.TriState.NOT_SET; // Paper - flying fall damage diff --git a/patches/server/0012-AFK-API.patch b/patches/server/0012-AFK-API.patch index 7ba17a034..f57a93231 100644 --- a/patches/server/0012-AFK-API.patch +++ b/patches/server/0012-AFK-API.patch @@ -78,7 +78,7 @@ index 44409eed0b603a1e8203a35ff0263d360d81be32..cdb3cf1b9a809e3936164dbbcf9ccdfc return this.stats; } diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 88eaf67ee621e06025f23657fe870cc2c9cb9b8f..56589f5c674670534ecf0b97c73c97e302716b9c 100644 +index 7f73d724af2c468a06dcfd760a70b8d6bd9ac31a..69919fa008780a09b5cfea5e41bb71ddfb4c0b80 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -324,6 +324,20 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl @@ -192,10 +192,10 @@ index 931cbbe41905d7ed3fd46c53d3ddd06a6b9a7c8a..d8642979b7296737d08529f6db4f64e4 if (baseEntity == null) { if (this.isCombat && (!targetEntity.canBeSeenAsEnemy() || targetEntity.level().getDifficulty() == Difficulty.PEACEFUL)) { 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 0c06194b9a182447459815d88a8dcb96b7b4b896..e1e5837c6f90c811f63053bbca80c512229cd727 100644 +index cad2ff51d79d584312a03f35266774b297883c0c..97805659af862213e9217c408519563de2be5b35 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -188,6 +188,13 @@ public abstract class Player extends LivingEntity { +@@ -189,6 +189,13 @@ public abstract class Player extends LivingEntity { public boolean fauxSleeping; public int oldLevel = -1; @@ -223,7 +223,7 @@ index ed84c87a3f76bc0254c1abb189e6b8b808823465..5bc68b1ef33f297e9a4b1bdd7d69f86a if (range < 0.0D || d < range * range) { return true; diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index ab96c92d3d995a64ea9fd1c3996da35148195c48..008da41d0fa6d80dc731e4eeb9aa4d4cb4b1873e 100644 +index ee8c5a9881de75a9a8fe4224f7585a036017653a..bcf3393ad12a70eea0e1b24f69fac15b08af32fb 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -488,10 +488,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player { diff --git a/patches/server/0015-LivingEntity-safeFallDistance.patch b/patches/server/0015-LivingEntity-safeFallDistance.patch index ae5dc41d5..189f3cda3 100644 --- a/patches/server/0015-LivingEntity-safeFallDistance.patch +++ b/patches/server/0015-LivingEntity-safeFallDistance.patch @@ -5,10 +5,10 @@ Subject: [PATCH] LivingEntity safeFallDistance diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index e907240898d30084acd7b048c44fc85d4c2435df..a9d54deefa076a03bd142983261f997270a49e1e 100644 +index 781eefa21c958c28c35d2d9559d89da236ce9387..5e5485906f1157e52a7082278adcb7b6e56f3f06 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -252,6 +252,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -253,6 +253,7 @@ public abstract class LivingEntity extends Entity implements Attackable { protected boolean skipDropExperience; // CraftBukkit start public int expToDrop; @@ -16,7 +16,7 @@ index e907240898d30084acd7b048c44fc85d4c2435df..a9d54deefa076a03bd142983261f9972 public boolean forceDrops; public ArrayList drops = new ArrayList<>(); // Paper - Restore vanilla drops behavior public final org.bukkit.craftbukkit.attribute.CraftAttributeMap craftAttributes; -@@ -352,7 +353,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -353,7 +354,7 @@ public abstract class LivingEntity extends Entity implements Attackable { this.tryAddSoulSpeed(); } @@ -25,7 +25,7 @@ index e907240898d30084acd7b048c44fc85d4c2435df..a9d54deefa076a03bd142983261f9972 double d1 = this.getX(); double d2 = this.getY(); double d3 = this.getZ(); -@@ -367,7 +368,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -368,7 +369,7 @@ public abstract class LivingEntity extends Entity implements Attackable { d3 = (double) landedPosition.getZ() + 0.5D + d5 / d6 * 0.5D; } @@ -34,7 +34,7 @@ index e907240898d30084acd7b048c44fc85d4c2435df..a9d54deefa076a03bd142983261f9972 double d7 = Math.min((double) (0.2F + f / 15.0F), 2.5D); int i = (int) (150.0D * d7); -@@ -2109,7 +2110,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -2117,7 +2118,7 @@ public abstract class LivingEntity extends Entity implements Attackable { MobEffectInstance mobeffect = this.getEffect(MobEffects.JUMP); float f2 = mobeffect == null ? 0.0F : (float) (mobeffect.getAmplifier() + 1); @@ -69,7 +69,7 @@ index 2a30499fd6f4a1340f6911f0f7f079bcbe8576a3..c3c0fbe71c9af1125c80698865cb9eaf // Purpur start diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -index 6f9cb8f328f47d6f3eb3142d701d80ceb51af926..152dff14fec82432aeddf82cda6236b7d6326dca 100644 +index 98df582ca3425f621396ce93cf7a0617ce3fb11f..de7a555a646aa4eb1ed4b75e01e6ef373444ac65 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java @@ -1156,4 +1156,16 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { diff --git a/patches/server/0026-Charged-creeper-naturally-spawn.patch b/patches/server/0026-Charged-creeper-naturally-spawn.patch index 8442e2226..ed722a27b 100644 --- a/patches/server/0026-Charged-creeper-naturally-spawn.patch +++ b/patches/server/0026-Charged-creeper-naturally-spawn.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Charged creeper naturally spawn 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 33ba948bafc879f6e9cd28f7fe6bce85628cc463..7770880c9525805b67199f3c6b54618af15d106f 100644 +index e6542240c317be28a7b536a736f7ccdc9f050dca..bc3d0654759b330c473de080b8a51c0a04cf3a19 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Creeper.java +++ b/src/main/java/net/minecraft/world/entity/monster/Creeper.java -@@ -255,6 +255,14 @@ public class Creeper extends Monster implements PowerableMob { +@@ -256,6 +256,14 @@ public class Creeper extends Monster implements PowerableMob { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.creeperMaxHealth); } @@ -24,7 +24,7 @@ index 33ba948bafc879f6e9cd28f7fe6bce85628cc463..7770880c9525805b67199f3c6b54618a protected SoundEvent getHurtSound(DamageSource source) { return SoundEvents.CREEPER_HURT; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 06ea43ddbbaf3165b74303a713f55512b9701765..c7956dfe6ef01868106d7c0989d5c6a612e07b7d 100644 +index 41822b9b050f4267cc0151ea85682523f89af57f..e033ef722d9b6336f1cbc6bdf404f35c34b45db9 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -345,6 +345,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0029-Tulips-change-fox-type.patch b/patches/server/0029-Tulips-change-fox-type.patch index a7d520491..d3f71bc69 100644 --- a/patches/server/0029-Tulips-change-fox-type.patch +++ b/patches/server/0029-Tulips-change-fox-type.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Tulips change fox type 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 310f7b5ad4d1441c186045c296aded01610c1b4a..586d6453b45efc75b4c150707f9034576ad140e1 100644 +index 3faa945f9687abeba7a36f8198cb307685e348a9..a910e897cbd11fa17469642de43225eb512c1c51 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Fox.java +++ b/src/main/java/net/minecraft/world/entity/animal/Fox.java @@ -36,6 +36,7 @@ import net.minecraft.util.RandomSource; @@ -16,7 +16,7 @@ index 310f7b5ad4d1441c186045c296aded01610c1b4a..586d6453b45efc75b4c150707f903457 import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.AgeableMob; import net.minecraft.world.entity.Entity; -@@ -390,6 +391,11 @@ public class Fox extends Animal implements VariantHolder { +@@ -394,6 +395,11 @@ public class Fox extends Animal implements VariantHolder { } private void setTargetGoals() { @@ -28,7 +28,7 @@ index 310f7b5ad4d1441c186045c296aded01610c1b4a..586d6453b45efc75b4c150707f903457 if (this.getVariant() == Fox.Type.RED) { this.targetSelector.addGoal(4, this.landTargetGoal); this.targetSelector.addGoal(4, this.turtleEggTargetGoal); -@@ -423,6 +429,7 @@ public class Fox extends Animal implements VariantHolder { +@@ -427,6 +433,7 @@ public class Fox extends Animal implements VariantHolder { public void setVariant(Fox.Type variant) { this.entityData.set(Fox.DATA_TYPE_ID, variant.getId()); @@ -36,7 +36,7 @@ index 310f7b5ad4d1441c186045c296aded01610c1b4a..586d6453b45efc75b4c150707f903457 } List getTrustedUUIDs() { -@@ -769,6 +776,29 @@ public class Fox extends Animal implements VariantHolder { +@@ -773,6 +780,29 @@ public class Fox extends Animal implements VariantHolder { } // Paper end @@ -67,7 +67,7 @@ index 310f7b5ad4d1441c186045c296aded01610c1b4a..586d6453b45efc75b4c150707f903457 // Paper start - Cancellable death event protected org.bukkit.event.entity.EntityDeathEvent dropAllDeathLoot(DamageSource source) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 6087141b308c1998a6be13dbf6e1ef75d6ddc6a8..532e25d00128c62c6eae4d0076dc0a3bd16c5b4e 100644 +index a96aa7f127467a6ea8025c09f4e336f1910cc8af..d084d5ef20b2fb4d3b5479cb51003fb82a0358fc 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -509,6 +509,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0032-Add-option-to-set-armorstand-step-height.patch b/patches/server/0032-Add-option-to-set-armorstand-step-height.patch index 54ce4727d..96fce4658 100644 --- a/patches/server/0032-Add-option-to-set-armorstand-step-height.patch +++ b/patches/server/0032-Add-option-to-set-armorstand-step-height.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add option to set armorstand step height diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 036688d52541dda8d8eef6fee43823844f245124..7ca03d221e33cec1df99b6dcd60fcdd401530938 100644 +index aa1e2c05c65391b5fbfce203c5095afd50682874..f8db28b15e551fc0e0c7f37c355237685c637529 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -336,7 +336,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -337,7 +337,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S public double xOld; public double yOld; public double zOld; @@ -18,10 +18,10 @@ index 036688d52541dda8d8eef6fee43823844f245124..7ca03d221e33cec1df99b6dcd60fcdd4 public final RandomSource random; public int tickCount; diff --git a/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java b/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java -index 94a30a0c1266bf919d1dc4ca2b19489edd54a7fa..61a2048625df012f563d3a0db567630bdfe489c3 100644 +index eadcebd7845ee716e33c0ac0544502da1a6c5941..8cb248a185d880bf82ea4746341fe3db5dc89459 100644 --- a/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java +++ b/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java -@@ -677,6 +677,7 @@ public class ArmorStand extends LivingEntity { +@@ -678,6 +678,7 @@ public class ArmorStand extends LivingEntity { @Override public void tick() { @@ -30,7 +30,7 @@ index 94a30a0c1266bf919d1dc4ca2b19489edd54a7fa..61a2048625df012f563d3a0db567630b if (!this.canTick) { if (this.noTickPoseDirty) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index c76957ae7e9f2aa6b34d0a1098cfbc036b723237..ba7f378b9b0c791dd77862439f310a6653cccf30 100644 +index 4cd6d9309ed81956d59063fe4d229c6f930922ed..6649787fc15ca06ec2d4e7ac7b0ff061c4d4de82 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -90,6 +90,11 @@ public class PurpurWorldConfig { diff --git a/patches/server/0034-Cows-eat-mushrooms.patch b/patches/server/0034-Cows-eat-mushrooms.patch index a6cca9377..7a70e2b82 100644 --- a/patches/server/0034-Cows-eat-mushrooms.patch +++ b/patches/server/0034-Cows-eat-mushrooms.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Cows eat mushrooms diff --git a/src/main/java/net/minecraft/world/entity/animal/Cow.java b/src/main/java/net/minecraft/world/entity/animal/Cow.java -index f440eabffb1abe4c7370bf7badf6137a22f99071..d42c8bcd85ffb1e00d2883485bf22981611b0bc3 100644 +index f440eabffb1abe4c7370bf7badf6137a22f99071..9a1e1387932a92fdf86a144b2d94b4df50feef90 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cow.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cow.java @@ -2,6 +2,7 @@ package net.minecraft.world.entity.animal; @@ -100,7 +100,7 @@ index f440eabffb1abe4c7370bf7badf6137a22f99071..d42c8bcd85ffb1e00d2883485bf22981 + return InteractionResult.PASS; + } + this.level().addFreshEntity(mooshroom); -+ this.remove(RemovalReason.DISCARDED); ++ this.remove(RemovalReason.DISCARDED, org.bukkit.event.entity.EntityRemoveEvent.Cause.DISCARD); + if (!player.getAbilities().instabuild) { + stack.shrink(1); + } @@ -114,7 +114,7 @@ index f440eabffb1abe4c7370bf7badf6137a22f99071..d42c8bcd85ffb1e00d2883485bf22981 + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 6102535823eab8862c23919f20a8062f9f750eb6..0db470bab81016af906dda69c9ff487e88bb63a9 100644 +index c9dbbe9dde5b463bdde68604d6e5b1c2902d57fa..ab5960b9104d362852ee3d6ba151cf78dd58a0ee 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -342,6 +342,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0035-Fix-cow-rotation-when-shearing-mooshroom.patch b/patches/server/0035-Fix-cow-rotation-when-shearing-mooshroom.patch index 63e3c904e..23314c286 100644 --- a/patches/server/0035-Fix-cow-rotation-when-shearing-mooshroom.patch +++ b/patches/server/0035-Fix-cow-rotation-when-shearing-mooshroom.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Fix cow rotation when shearing mooshroom 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 557592aa5799dca43c778ef7a0d3b98619b90b90..c58b3ff4e7e5dba4543a77c2c4d9bad3911fba98 100644 +index 0ff5902dde47c4bb9922d6605d874868fb4820b9..4c3a4a5e79412a570b0dc1fdeaf540b83eb84b82 100644 --- a/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java +++ b/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java -@@ -221,7 +221,13 @@ public class MushroomCow extends Cow implements Shearable, VariantHolder getBrain() { return (Brain) super.getBrain(); // CraftBukkit - decompile error 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 8ead6c74e598eeeccb5f24cc3d1e86f03d2fe46a..8ab868c88e37fad978ffcf151ad527e57bdf4cb5 100644 +index 301d985b89b98a644603a6b086889442f4a37d79..6f30c22fe0058320b995570c9af7b15ae917dd76 100644 --- a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java +++ b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java -@@ -92,6 +92,11 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill +@@ -93,6 +93,11 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.wanderingTraderMaxHealth); } @@ -49,7 +49,7 @@ index 8ead6c74e598eeeccb5f24cc3d1e86f03d2fe46a..8ab868c88e37fad978ffcf151ad527e5 protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 431fa9e522662b506c82fbe7e0266e5662ad91cc..40a0cd68b1e35894360f0edc45bc30a5bd47622f 100644 +index f42a1205a66f4842ca43aad456dcb42481c041e9..c07064174a0ef81a9bbe628251ee1346af890ae0 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -1436,6 +1436,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0053-Add-player-death-exp-control-options.patch b/patches/server/0053-Add-player-death-exp-control-options.patch index 2f7943c0d..10f253acf 100644 --- a/patches/server/0053-Add-player-death-exp-control-options.patch +++ b/patches/server/0053-Add-player-death-exp-control-options.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add player death exp control options 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 e1e5837c6f90c811f63053bbca80c512229cd727..f26322bfa6b26d2b97a1e89218c685b508a3253b 100644 +index 97805659af862213e9217c408519563de2be5b35..e68ed7339d8aed2b97e310edeee3960611ed7bf1 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -1936,9 +1936,19 @@ public abstract class Player extends LivingEntity { +@@ -1944,9 +1944,19 @@ public abstract class Player extends LivingEntity { @Override public int getExperienceReward() { if (!this.level().getGameRules().getBoolean(GameRules.RULE_KEEPINVENTORY) && !this.isSpectator()) { diff --git a/patches/server/0054-Configurable-void-damage-height-and-damage.patch b/patches/server/0054-Configurable-void-damage-height-and-damage.patch index cd8661487..ebba07669 100644 --- a/patches/server/0054-Configurable-void-damage-height-and-damage.patch +++ b/patches/server/0054-Configurable-void-damage-height-and-damage.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configurable void damage height and damage diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 35a92f63aaf6ad90a028bf9954de48a06030cc7b..df57683541a603daf5ac2af2d5c0e03a14bb910b 100644 +index f8db28b15e551fc0e0c7f37c355237685c637529..7fe6f44d25790cd222b700cf5ce1d5f36d89e650 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -899,7 +899,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -912,7 +912,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S public void checkBelowWorld() { // Paper start - Configurable nether ceiling damage @@ -18,10 +18,10 @@ index 35a92f63aaf6ad90a028bf9954de48a06030cc7b..df57683541a603daf5ac2af2d5c0e03a && (!(this instanceof Player player) || !player.getAbilities().invulnerable))) { // Paper end - Configurable nether ceiling damage diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index ba1ca47591756558d6722788695338ef03aadef6..fbba6e2da222f30fc763a680a825d5f2d53b5e4d 100644 +index a065009d01a5e28a3054241f30e5bedf21350cb5..c80e2c400f264d7d195dbf87f5dec95ba5df7444 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -2555,7 +2555,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -2563,7 +2563,7 @@ public abstract class LivingEntity extends Entity implements Attackable { @Override protected void onBelowWorld() { diff --git a/patches/server/0055-Add-canSaveToDisk-to-Entity.patch b/patches/server/0055-Add-canSaveToDisk-to-Entity.patch index abc4318b4..77dbb304e 100644 --- a/patches/server/0055-Add-canSaveToDisk-to-Entity.patch +++ b/patches/server/0055-Add-canSaveToDisk-to-Entity.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add canSaveToDisk to Entity diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 31c51f882fa1e6c45daeb9b8c2cd32388ed2367e..ae0162d881d75e29d662f77e8be7cd5a91df4e2f 100644 +index 7fe6f44d25790cd222b700cf5ce1d5f36d89e650..95baff79c07f1fdb1f2c2799527c0d245790cd60 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -557,6 +557,10 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -558,6 +558,10 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S return false; } @@ -20,10 +20,10 @@ index 31c51f882fa1e6c45daeb9b8c2cd32388ed2367e..ae0162d881d75e29d662f77e8be7cd5a return this.hardCollides; } 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 4a2331c22a022881d66bcfd4134b0ffe421a0633..d57ef27df0a3597416564f8723b4b986413ad314 100644 +index 41261b72bfa5157139a5384b6a0b66b719ec02b9..8abc8a28ae74dc78f53b9fb38fb31b47a0a42d94 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/WitherSkull.java +++ b/src/main/java/net/minecraft/world/entity/projectile/WitherSkull.java -@@ -116,6 +116,11 @@ public class WitherSkull extends AbstractHurtingProjectile { +@@ -117,6 +117,11 @@ public class WitherSkull extends AbstractHurtingProjectile { return target != this.getRider() && super.canHitEntity(target); } @@ -48,10 +48,10 @@ index 23dc37ff1f92951817864963bf93220d5aae91bb..af563ffb67c43b50555951fe1b5e4320 final EntityType entityType = entity.getType(); final int saveLimit = level.paperConfig().chunks.entityPerChunkSaveLimit.getOrDefault(entityType, -1); diff --git a/src/main/java/org/purpurmc/purpur/entity/DolphinSpit.java b/src/main/java/org/purpurmc/purpur/entity/DolphinSpit.java -index 83dd3f982d5869e26748e6e0d0b38a3c7a08fe02..92d562fa11f69bb6b841299aef257ea0c674ca1c 100644 +index b7e3994879a2b1de0c504f122b0c3c3229e4c356..3e846f38902024875d1961b16a60c50201df309d 100644 --- a/src/main/java/org/purpurmc/purpur/entity/DolphinSpit.java +++ b/src/main/java/org/purpurmc/purpur/entity/DolphinSpit.java -@@ -35,6 +35,13 @@ public class DolphinSpit extends LlamaSpit { +@@ -36,6 +36,13 @@ public class DolphinSpit extends LlamaSpit { dolphin.getZ() + (double) (dolphin.getBbWidth() + 1.0F) * 0.5D * (double) Mth.cos(dolphin.yBodyRot * 0.017453292F)); } @@ -66,7 +66,7 @@ index 83dd3f982d5869e26748e6e0d0b38a3c7a08fe02..92d562fa11f69bb6b841299aef257ea0 super_tick(); diff --git a/src/main/java/org/purpurmc/purpur/entity/PhantomFlames.java b/src/main/java/org/purpurmc/purpur/entity/PhantomFlames.java -index 8fa9b376682d9e8b1971a9f72b918c6dc6872d04..d0d951f867390fa12cae2ba2a49212354b10d7b0 100644 +index bc139e518c8214246c3f514b64f987bdd5de6f23..11825590af9346c61d5d15e5ef446b3c77b81b54 100644 --- a/src/main/java/org/purpurmc/purpur/entity/PhantomFlames.java +++ b/src/main/java/org/purpurmc/purpur/entity/PhantomFlames.java @@ -38,6 +38,13 @@ public class PhantomFlames extends LlamaSpit { diff --git a/patches/server/0056-Dispenser-curse-of-binding-protection.patch b/patches/server/0056-Dispenser-curse-of-binding-protection.patch index b72604287..dc3c4f0a3 100644 --- a/patches/server/0056-Dispenser-curse-of-binding-protection.patch +++ b/patches/server/0056-Dispenser-curse-of-binding-protection.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Dispenser curse of binding protection diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index 9101ac55f26f130e5d4aa4b4d4a4d5003a3d1043..e9b82e27730221778e38d3417d58484b139d40af 100644 +index 43f2654eb0a396bce98e0840bdc8a8b16f00b2ba..b30292dcc9bbfc0ded94ee8a0f4a5e949327da54 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java @@ -66,6 +66,7 @@ import net.minecraft.world.item.ProjectileWeaponItem; @@ -16,7 +16,7 @@ index 9101ac55f26f130e5d4aa4b4d4a4d5003a3d1043..e9b82e27730221778e38d3417d58484b import net.minecraft.world.level.GameRules; import net.minecraft.world.level.ItemLike; import net.minecraft.world.level.Level; -@@ -1182,6 +1183,12 @@ public abstract class Mob extends LivingEntity implements Targeting { +@@ -1183,6 +1184,12 @@ public abstract class Mob extends LivingEntity implements Targeting { } diff --git a/patches/server/0058-Mending-mends-most-damages-equipment-first.patch b/patches/server/0058-Mending-mends-most-damages-equipment-first.patch index 72f7fb611..04a64d90b 100644 --- a/patches/server/0058-Mending-mends-most-damages-equipment-first.patch +++ b/patches/server/0058-Mending-mends-most-damages-equipment-first.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Mending mends most damages equipment first diff --git a/src/main/java/net/minecraft/world/entity/ExperienceOrb.java b/src/main/java/net/minecraft/world/entity/ExperienceOrb.java -index e814b2ef2577f032d6760de2f798d4fe18c67d0c..673b3aee680bb8a2d20f96be661d5fa9c61f4ce3 100644 +index 36422fb394a158f36c84ba0ee03cc704956c91b2..c8671996f07f1daafe48448f4a5b837ca2f658c6 100644 --- a/src/main/java/net/minecraft/world/entity/ExperienceOrb.java +++ b/src/main/java/net/minecraft/world/entity/ExperienceOrb.java -@@ -331,7 +331,7 @@ public class ExperienceOrb extends Entity { +@@ -332,7 +332,7 @@ public class ExperienceOrb extends Entity { } private int repairPlayerItems(Player player, int amount) { diff --git a/patches/server/0060-Implement-elytra-settings.patch b/patches/server/0060-Implement-elytra-settings.patch index bb797edd9..fcba012db 100644 --- a/patches/server/0060-Implement-elytra-settings.patch +++ b/patches/server/0060-Implement-elytra-settings.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Implement elytra settings diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index fbba6e2da222f30fc763a680a825d5f2d53b5e4d..65c36f41fe7602bfc8d2349b065c7494eb1abfb6 100644 +index c80e2c400f264d7d195dbf87f5dec95ba5df7444..40a22471b7828d660b1d8aa3f16af060694a86e3 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -3581,7 +3581,16 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3589,7 +3589,16 @@ public abstract class LivingEntity extends Entity implements Attackable { int j = i / 10; if (j % 2 == 0) { diff --git a/patches/server/0061-Item-entity-immunities.patch b/patches/server/0061-Item-entity-immunities.patch index 07c7adae8..77de6ba12 100644 --- a/patches/server/0061-Item-entity-immunities.patch +++ b/patches/server/0061-Item-entity-immunities.patch @@ -18,10 +18,10 @@ index db55ad9aaabfa1ea998754f3ac352d1698936696..04b98e23eed926d8473cc2464e04a5b9 public ServerEntity(ServerLevel worldserver, Entity entity, int i, boolean flag, Consumer> consumer, Set trackedPlayers) { this.trackedPlayers = trackedPlayers; diff --git a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java -index eb0d6238588efa35fa868f26290547574a08eca2..633c2b7b02873f83c488a286acda34937ce0b496 100644 +index c7f06c3cfb737bd17a706798bf9cf0e1af5f0cc0..3cac817351a149935df75ef23d9f9417f6502016 100644 --- a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java +++ b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java -@@ -58,6 +58,12 @@ public class ItemEntity extends Entity implements TraceableEntity { +@@ -59,6 +59,12 @@ public class ItemEntity extends Entity implements TraceableEntity { public boolean canMobPickup = true; // Paper - Item#canEntityPickup private int despawnRate = -1; // Paper - Alternative item-despawn-rate public net.kyori.adventure.util.TriState frictionState = net.kyori.adventure.util.TriState.NOT_SET; // Paper - Friction API @@ -34,7 +34,7 @@ index eb0d6238588efa35fa868f26290547574a08eca2..633c2b7b02873f83c488a286acda3493 public ItemEntity(EntityType type, Level world) { super(type, world); -@@ -364,7 +370,16 @@ public class ItemEntity extends Entity implements TraceableEntity { +@@ -365,7 +371,16 @@ public class ItemEntity extends Entity implements TraceableEntity { @Override public boolean hurt(DamageSource source, float amount) { @@ -52,7 +52,7 @@ index eb0d6238588efa35fa868f26290547574a08eca2..633c2b7b02873f83c488a286acda3493 return false; } else if (!this.getItem().isEmpty() && this.getItem().is(Items.NETHER_STAR) && source.is(DamageTypeTags.IS_EXPLOSION)) { return false; -@@ -567,6 +582,12 @@ public class ItemEntity extends Entity implements TraceableEntity { +@@ -568,6 +583,12 @@ public class ItemEntity extends Entity implements TraceableEntity { public void setItem(ItemStack stack) { this.getEntityData().set(ItemEntity.DATA_ITEM, stack); this.despawnRate = this.level().paperConfig().entities.spawning.altItemDespawnRate.enabled ? this.level().paperConfig().entities.spawning.altItemDespawnRate.items.getOrDefault(stack.getItem(), this.level().spigotConfig.itemDespawnRate) : this.level().spigotConfig.itemDespawnRate; // Paper - Alternative item-despawn-rate @@ -66,7 +66,7 @@ index eb0d6238588efa35fa868f26290547574a08eca2..633c2b7b02873f83c488a286acda3493 @Override diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java -index 832def3c518be8d6d81e71f6022566e6179e2d17..e99007570a89eebe3c85ad549cf24286514306f8 100644 +index 30d62ee4d5cd2ddacb8783b5bbbf475d592b3e02..01e4395f1669d21c30465aa1366bd2f1ae17678f 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java @@ -151,4 +151,46 @@ public class CraftItem extends CraftEntity implements Item { @@ -117,7 +117,7 @@ index 832def3c518be8d6d81e71f6022566e6179e2d17..e99007570a89eebe3c85ad549cf24286 + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 9aab2c1dc14f9683953cb2876ee9471f603da629..b5599360a524a55183b3a21f822b5cb24f59dc67 100644 +index 88aabe09118cbbad3add3cee44e237580294f685..62074152a0a494bbde4c39074942425a8b850ffd 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -125,6 +125,49 @@ public class PurpurWorldConfig { diff --git a/patches/server/0066-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch b/patches/server/0066-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch index 53dd3c50f..bdc70fd0b 100644 --- a/patches/server/0066-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch +++ b/patches/server/0066-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Phantoms attracted to crystals and crystals shoot phantoms diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java -index c99ab157e43fc990549fc06f5b6fb1e227014fde..aa75a9229210302dbccd6186439c3c35481ef46c 100644 +index 036640d49a5e891e9a0f767abe33f1f51d6d4cde..c0c8bdfbab17d8a10d616e2625ebfa7babf5fab3 100644 --- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java +++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java -@@ -30,6 +30,12 @@ public class EndCrystal extends Entity { +@@ -31,6 +31,12 @@ public class EndCrystal extends Entity { private static final EntityDataAccessor DATA_SHOW_BOTTOM = SynchedEntityData.defineId(EndCrystal.class, EntityDataSerializers.BOOLEAN); public int time; public boolean generatedByDragonFight = false; // Paper - Fix invulnerable end crystals @@ -21,7 +21,7 @@ index c99ab157e43fc990549fc06f5b6fb1e227014fde..aa75a9229210302dbccd6186439c3c35 public EndCrystal(EntityType type, Level world) { super(type, world); -@@ -79,6 +85,49 @@ public class EndCrystal extends Entity { +@@ -80,6 +86,49 @@ public class EndCrystal extends Entity { // Paper end - Fix invulnerable end crystals } diff --git a/patches/server/0072-Entity-lifespan.patch b/patches/server/0072-Entity-lifespan.patch index 9b482f430..217cfc57d 100644 --- a/patches/server/0072-Entity-lifespan.patch +++ b/patches/server/0072-Entity-lifespan.patch @@ -17,10 +17,10 @@ index 1cc86f8dd63802b7227de56b44c859c253a80756..b9a4815d6f942d78851213224a475b15 private void performInteraction(InteractionHand enumhand, ServerGamePacketListenerImpl.EntityInteraction playerconnection_a, PlayerInteractEntityEvent event) { // CraftBukkit ItemStack itemstack = ServerGamePacketListenerImpl.this.player.getItemInHand(enumhand); diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index 6c6d31ca2321499b1834e16545b6af9436c96b37..431f9a872a1195d6014ff9e87eef9c85396edbe3 100644 +index b30292dcc9bbfc0ded94ee8a0f4a5e949327da54..20e8c3c88891f0fe20556b700fab5122682b2bdb 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java -@@ -136,6 +136,7 @@ public abstract class Mob extends LivingEntity implements Targeting { +@@ -137,6 +137,7 @@ public abstract class Mob extends LivingEntity implements Targeting { private BlockPos restrictCenter; private float restrictRadius; @@ -28,7 +28,7 @@ index 6c6d31ca2321499b1834e16545b6af9436c96b37..431f9a872a1195d6014ff9e87eef9c85 public boolean aware = true; // CraftBukkit protected Mob(EntityType type, Level world) { -@@ -325,6 +326,7 @@ public abstract class Mob extends LivingEntity implements Targeting { +@@ -326,6 +327,7 @@ public abstract class Mob extends LivingEntity implements Targeting { entityliving = null; } } @@ -36,7 +36,7 @@ index 6c6d31ca2321499b1834e16545b6af9436c96b37..431f9a872a1195d6014ff9e87eef9c85 this.target = entityliving; return true; // CraftBukkit end -@@ -372,8 +374,28 @@ public abstract class Mob extends LivingEntity implements Targeting { +@@ -373,8 +375,28 @@ public abstract class Mob extends LivingEntity implements Targeting { } this.level().getProfiler().pop(); @@ -57,7 +57,7 @@ index 6c6d31ca2321499b1834e16545b6af9436c96b37..431f9a872a1195d6014ff9e87eef9c85 + return; // mob persistent + } + if (this.ticksSinceLastInteraction > this.level().purpurConfig.entityLifeSpan) { -+ this.discard(); ++ this.discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.DISCARD); + } + } + // Purpur end @@ -65,7 +65,7 @@ index 6c6d31ca2321499b1834e16545b6af9436c96b37..431f9a872a1195d6014ff9e87eef9c85 @Override protected void playHurtSound(DamageSource source) { this.resetAmbientSoundTime(); -@@ -563,6 +585,7 @@ public abstract class Mob extends LivingEntity implements Targeting { +@@ -564,6 +586,7 @@ public abstract class Mob extends LivingEntity implements Targeting { } nbt.putBoolean("Bukkit.Aware", this.aware); // CraftBukkit @@ -73,7 +73,7 @@ index 6c6d31ca2321499b1834e16545b6af9436c96b37..431f9a872a1195d6014ff9e87eef9c85 } @Override -@@ -633,6 +656,11 @@ public abstract class Mob extends LivingEntity implements Targeting { +@@ -634,6 +657,11 @@ public abstract class Mob extends LivingEntity implements Targeting { this.aware = nbt.getBoolean("Bukkit.Aware"); } // CraftBukkit end @@ -85,7 +85,7 @@ index 6c6d31ca2321499b1834e16545b6af9436c96b37..431f9a872a1195d6014ff9e87eef9c85 } @Override -@@ -1716,6 +1744,7 @@ public abstract class Mob extends LivingEntity implements Targeting { +@@ -1717,6 +1745,7 @@ public abstract class Mob extends LivingEntity implements Targeting { this.setLastHurtMob(target); } diff --git a/patches/server/0073-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch b/patches/server/0073-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch index 7c3eb71eb..a7b78f144 100644 --- a/patches/server/0073-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch +++ b/patches/server/0073-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch @@ -36,10 +36,10 @@ index 8b2550bada2cca8cb9875580133ce0ee6cc19325..498c60a8669b867101f030b5735deffe + // Purpur end } diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 65c36f41fe7602bfc8d2349b065c7494eb1abfb6..7caf73407b0a98fdb316a6b738704fe737f4c65b 100644 +index 40a22471b7828d660b1d8aa3f16af060694a86e3..dea777da2b5cb5182fd165d070dd90d579f99bea 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -426,6 +426,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -427,6 +427,7 @@ public abstract class LivingEntity extends Entity implements Attackable { double d1 = this.level().getWorldBorder().getDamagePerBlock(); if (d1 > 0.0D) { diff --git a/patches/server/0076-Configurable-villager-breeding.patch b/patches/server/0076-Configurable-villager-breeding.patch index e27c64bf1..dae08b084 100644 --- a/patches/server/0076-Configurable-villager-breeding.patch +++ b/patches/server/0076-Configurable-villager-breeding.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configurable villager breeding 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 f4ed6ae7e8f122a0a2ce7f4488b0fe1ed0c7da3d..ce450d4b0d42443a47861dcb54b78a01ede734d1 100644 +index 451443c942285b0553c87c3456e140e69586b77c..976388612d64cd137b18870119928cbd45dfd2a4 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -786,7 +786,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -787,7 +787,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler @Override public boolean canBreed() { @@ -18,7 +18,7 @@ index f4ed6ae7e8f122a0a2ce7f4488b0fe1ed0c7da3d..ce450d4b0d42443a47861dcb54b78a01 private boolean hungry() { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index a0477b47563214152483423121523f836827306b..3decdb56a21e7be052ef9386f2059e912738d4be 100644 +index dcd9f80eb69e34b514f57158568e4cb59e9860ec..df4f384032f398fc9852e753dee820ffa33e10bb 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -1611,6 +1611,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0078-Totems-work-in-inventory.patch b/patches/server/0078-Totems-work-in-inventory.patch index b35a75724..9f0a2c81f 100644 --- a/patches/server/0078-Totems-work-in-inventory.patch +++ b/patches/server/0078-Totems-work-in-inventory.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Totems work in inventory diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 7caf73407b0a98fdb316a6b738704fe737f4c65b..a0573d7c164091ad8fa3d98d1c462a4eee309a2f 100644 +index dea777da2b5cb5182fd165d070dd90d579f99bea..02be3c960bc89464b589a557d4269fce8fb88766 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -1632,6 +1632,18 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1640,6 +1640,18 @@ public abstract class LivingEntity extends Entity implements Attackable { } } diff --git a/patches/server/0082-Add-option-to-disable-dolphin-treasure-searching.patch b/patches/server/0082-Add-option-to-disable-dolphin-treasure-searching.patch index 950b4604f..8651cd48d 100644 --- a/patches/server/0082-Add-option-to-disable-dolphin-treasure-searching.patch +++ b/patches/server/0082-Add-option-to-disable-dolphin-treasure-searching.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add option to disable dolphin treasure searching 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 519e52b303cb9a2d4b1cae84d8436f2057003fcb..ff11643193495f0646de4bcf13b7f1e57731e4fb 100644 +index df6306572f11762ec0d54b738c1a8a30269c9224..3e32787cc7e96e83dc408e556a92b25607d487a9 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java +++ b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java -@@ -480,6 +480,7 @@ public class Dolphin extends WaterAnimal { +@@ -481,6 +481,7 @@ public class Dolphin extends WaterAnimal { @Override public boolean canUse() { @@ -17,7 +17,7 @@ index 519e52b303cb9a2d4b1cae84d8436f2057003fcb..ff11643193495f0646de4bcf13b7f1e5 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 1f22aae24973fc8f6464c0de0188d01c8171546f..afc67803bf71d26e84f9130c30ac2b1b3d1114bf 100644 +index 4c80796777c5a90c5e7a9e8ef0beedfcb49f0aa9..b9faaf71e0cd5918b072d068bbc2096aa2805616 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -610,6 +610,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0084-Stop-squids-floating-on-top-of-water.patch b/patches/server/0084-Stop-squids-floating-on-top-of-water.patch index 531225775..1f1731b03 100644 --- a/patches/server/0084-Stop-squids-floating-on-top-of-water.patch +++ b/patches/server/0084-Stop-squids-floating-on-top-of-water.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Stop squids floating on top of water diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 2d24aa01680dfc8ada8db55d9af57bcff8218624..2300068427a5e0fe7e263455e6035cb5cff33a5f 100644 +index 95baff79c07f1fdb1f2c2799527c0d245790cd60..8307646d2ff06ae8cde245c8d1aec259df2330a2 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -4446,6 +4446,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -4462,6 +4462,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S this.yRotO = this.getYRot(); } diff --git a/patches/server/0086-Entities-can-use-portals-configuration.patch b/patches/server/0086-Entities-can-use-portals-configuration.patch index a229521d3..23cc463f3 100644 --- a/patches/server/0086-Entities-can-use-portals-configuration.patch +++ b/patches/server/0086-Entities-can-use-portals-configuration.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Entities can use portals configuration diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 2300068427a5e0fe7e263455e6035cb5cff33a5f..53e072f6070101f9c1bd24eacf1114e0a1c16305 100644 +index 8307646d2ff06ae8cde245c8d1aec259df2330a2..ca0719307e4d50b3dcfe13195f1c1e680b00350c 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -3151,7 +3151,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3167,7 +3167,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S public void handleInsidePortal(BlockPos pos) { if (this.isOnPortalCooldown()) { this.setPortalCooldown(); @@ -17,7 +17,7 @@ index 2300068427a5e0fe7e263455e6035cb5cff33a5f..53e072f6070101f9c1bd24eacf1114e0 if (!this.level().isClientSide && !pos.equals(this.portalEntrancePos)) { this.portalEntrancePos = pos.immutable(); } -@@ -3857,7 +3857,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3873,7 +3873,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } public boolean canChangeDimensions() { diff --git a/patches/server/0088-Customizable-wither-health-and-healing.patch b/patches/server/0088-Customizable-wither-health-and-healing.patch index 9aa0c4d37..6ad148bf8 100644 --- a/patches/server/0088-Customizable-wither-health-and-healing.patch +++ b/patches/server/0088-Customizable-wither-health-and-healing.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Customizable wither health and healing Adds the ability to customize the health of the wither, as well as the amount that it heals, and how often. 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 29957114850eb897b54997dcad0753e0c895ce6e..93cf322ea4943fea127dc89eed900a2ca21b096c 100644 +index 51ccbf3bd77bbcf77833b39fadc6c01fd28f2131..0c7623cc87c534cf02ee78a1ffb6928a31758f6f 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 -@@ -526,8 +526,10 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob +@@ -527,8 +527,10 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob } } @@ -23,7 +23,7 @@ index 29957114850eb897b54997dcad0753e0c895ce6e..93cf322ea4943fea127dc89eed900a2c this.bossEvent.setProgress(this.getHealth() / this.getMaxHealth()); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 4ffd1263f48a426e5f7a79fd266a0f445975dc2e..6b7602954de34a114893e49e8f93665ba30ed494 100644 +index 1f25407aafba71762a482f0b1982302fed14387f..beea39d7cdbca783de7248a5c40ea2c7ab02e5b5 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -1717,6 +1717,8 @@ public class PurpurWorldConfig { diff --git a/patches/server/0099-Arrows-should-not-reset-despawn-counter.patch b/patches/server/0099-Arrows-should-not-reset-despawn-counter.patch index 3a71241de..0751b3adf 100644 --- a/patches/server/0099-Arrows-should-not-reset-despawn-counter.patch +++ b/patches/server/0099-Arrows-should-not-reset-despawn-counter.patch @@ -7,10 +7,10 @@ This prevents keeping arrows alive indefinitely (such as when the block the arrow is stuck in gets removed, like a piston head going up/down) diff --git a/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java b/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java -index 42ebd91196ae420eee57f4380abc558555457163..49b55db16c8c2f389fb6990b3b3ad7dc29eb10c3 100644 +index e8faca6e443239968f0111519f9e5cd018ed3297..5d60f038220ef4e7b66834c172cc47c7abfe7da7 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java +++ b/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java -@@ -319,7 +319,7 @@ public abstract class AbstractArrow extends Projectile { +@@ -320,7 +320,7 @@ public abstract class AbstractArrow extends Projectile { Vec3 vec3d = this.getDeltaMovement(); this.setDeltaMovement(vec3d.multiply((double) (this.random.nextFloat() * 0.2F), (double) (this.random.nextFloat() * 0.2F), (double) (this.random.nextFloat() * 0.2F))); @@ -20,7 +20,7 @@ index 42ebd91196ae420eee57f4380abc558555457163..49b55db16c8c2f389fb6990b3b3ad7dc @Override diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index e1701bd63540f1672ceb821f0e37d29587847da9..c0f3f52068d147ca06dbb87da51d628b56cf51e4 100644 +index 666ff3e30e09c91653bf51041afc95799c8955fe..4386ae1f2f1e0340ad045023124693f619cf4283 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -101,6 +101,11 @@ public class PurpurWorldConfig { diff --git a/patches/server/0102-Make-entity-breeding-times-configurable.patch b/patches/server/0102-Make-entity-breeding-times-configurable.patch index a9742f003..a8ee7bf82 100644 --- a/patches/server/0102-Make-entity-breeding-times-configurable.patch +++ b/patches/server/0102-Make-entity-breeding-times-configurable.patch @@ -95,7 +95,7 @@ index bc3094493d7d25eaf50da8fdd74eacae25692b09..b142e5c489e9fe65b7258f541ef121b2 protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); diff --git a/src/main/java/net/minecraft/world/entity/animal/Cow.java b/src/main/java/net/minecraft/world/entity/animal/Cow.java -index d42c8bcd85ffb1e00d2883485bf22981611b0bc3..c501704251e5b23f697efc307ebdc906cd2e5acd 100644 +index 9a1e1387932a92fdf86a144b2d94b4df50feef90..3fd310fe80b0f725746e20e8be2b3b7710467c28 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cow.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cow.java @@ -69,6 +69,11 @@ public class Cow extends Animal { @@ -111,10 +111,10 @@ index d42c8bcd85ffb1e00d2883485bf22981611b0bc3..c501704251e5b23f697efc307ebdc906 protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); 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 586d6453b45efc75b4c150707f9034576ad140e1..bc91862958fe18602d301f748ebeb73f65a4ee89 100644 +index a910e897cbd11fa17469642de43225eb512c1c51..4f1ae50564a7e646172b3b923d15a002ee736601 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Fox.java +++ b/src/main/java/net/minecraft/world/entity/animal/Fox.java -@@ -188,6 +188,11 @@ public class Fox extends Animal implements VariantHolder { +@@ -192,6 +192,11 @@ public class Fox extends Animal implements VariantHolder { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.foxMaxHealth); } @@ -126,7 +126,7 @@ index 586d6453b45efc75b4c150707f9034576ad140e1..bc91862958fe18602d301f748ebeb73f @Override protected void defineSynchedData() { super.defineSynchedData(); -@@ -1003,8 +1008,10 @@ public class Fox extends Animal implements VariantHolder { +@@ -1007,8 +1012,10 @@ public class Fox extends Animal implements VariantHolder { CriteriaTriggers.BRED_ANIMALS.trigger(entityplayer2, this.animal, this.partner, entityfox); } @@ -140,10 +140,10 @@ index 586d6453b45efc75b4c150707f9034576ad140e1..bc91862958fe18602d301f748ebeb73f this.partner.resetLove(); worldserver.addFreshEntityWithPassengers(entityfox, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.BREEDING); // CraftBukkit - added SpawnReason 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 e21fc50313052fe38ad54e5b44b3739c881ccd22..56427c987439c2d6d5652dae0f2c0a72d4eba26e 100644 +index 4c3a4a5e79412a570b0dc1fdeaf540b83eb84b82..b699f88ce9480ef4da5bfb97004a9c5f62d58894 100644 --- a/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java +++ b/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java -@@ -85,6 +85,11 @@ public class MushroomCow extends Cow implements Shearable, VariantHolder getModelRotationValues() { return this.modelRotationValues; diff --git a/src/main/java/net/minecraft/world/entity/animal/camel/Camel.java b/src/main/java/net/minecraft/world/entity/animal/camel/Camel.java -index aace7991c198ccfe1338625e7b64b88921cefe0c..d1ada87d222e5b35c2df5a0e7b0075ec3413fa66 100644 +index 2ffa81c374bd4dc618b8e284317d13f6a070dc52..a654c26742d8aa5e4c58a6391ad2fc5fe917ed3a 100644 --- a/src/main/java/net/minecraft/world/entity/animal/camel/Camel.java +++ b/src/main/java/net/minecraft/world/entity/animal/camel/Camel.java @@ -91,6 +91,10 @@ public class Camel extends AbstractHorse implements PlayerRideableJumping, Saddl @@ -426,10 +426,10 @@ index abbeb305b2d09e9c4c02ade603adac5ceb34bdd0..1de48560ac5a1db8845c98c812b2e9f9 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 68981762e3b71cfdf12180c9a711f22b33c471b7..76de20b86b6b99c10379adeb303fac4371891923 100644 +index d65d3c1275623a199d90497152519e45317a110f..250a51017cfbb42730ed736a112b269a258c19af 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 -@@ -57,6 +57,11 @@ public class SkeletonHorse extends AbstractHorse { +@@ -64,6 +64,11 @@ public class SkeletonHorse extends AbstractHorse { return generateSpeed(this.level().purpurConfig.skeletonHorseMovementSpeedMin, this.level().purpurConfig.skeletonHorseMovementSpeedMax); } @@ -439,13 +439,13 @@ index 68981762e3b71cfdf12180c9a711f22b33c471b7..76de20b86b6b99c10379adeb303fac43 + } + 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); } 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 4abb9d5fedf63eba9dc3f716d44ea11806607af0..3632fcb124be8cf77d9bebf7b861a48196252ed0 100644 +index 85e32d35cdfb7dd11b3c28146b9b71eae2b5c685..0a6cf9f0f16882c8042a333852699129402f75f2 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 -@@ -64,6 +64,11 @@ public class TraderLlama extends Llama { +@@ -67,6 +67,11 @@ public class TraderLlama extends Llama { return generateSpeed(this.level().purpurConfig.traderLlamaMovementSpeedMin, this.level().purpurConfig.traderLlamaMovementSpeedMax); } @@ -522,7 +522,7 @@ index 9748b32692b14bffde1506e88149939c4ed25900..fae14f6ab139e7d7a0e8625488c472f0 public boolean canBeLeashed(Player player) { return !this.isLeashed(); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 52b9e364056b0b405779965daa634a8b0f1f82e0..bbff889198f33fa8fede86fef7be81236a0a591c 100644 +index c469fc30efcc71af34b446475af16870049487b6..4e2619e07b177cd8ce732e58da538de89b627098 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -501,10 +501,12 @@ public class PurpurWorldConfig { diff --git a/patches/server/0103-Apply-display-names-from-item-forms-of-entities-to-e.patch b/patches/server/0103-Apply-display-names-from-item-forms-of-entities-to-e.patch index 7afe94dbe..52c243b50 100644 --- a/patches/server/0103-Apply-display-names-from-item-forms-of-entities-to-e.patch +++ b/patches/server/0103-Apply-display-names-from-item-forms-of-entities-to-e.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Apply display names from item forms of entities to entities diff --git a/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java b/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java -index b9bb4745cf540b5720259b009e973633647c36c6..1bb58a662f885670e3104e30c7ff0160198ceeed 100644 +index 8cb248a185d880bf82ea4746341fe3db5dc89459..aca5e7a2b0eab93c613b03834509366f7119ec03 100644 --- a/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java +++ b/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java -@@ -606,7 +606,7 @@ public class ArmorStand extends LivingEntity { +@@ -607,7 +607,7 @@ public class ArmorStand extends LivingEntity { private org.bukkit.event.entity.EntityDeathEvent brokenByPlayer(DamageSource damageSource) { // Paper ItemStack itemstack = new ItemStack(Items.ARMOR_STAND); @@ -19,7 +19,7 @@ index b9bb4745cf540b5720259b009e973633647c36c6..1bb58a662f885670e3104e30c7ff0160 } diff --git a/src/main/java/net/minecraft/world/entity/decoration/ItemFrame.java b/src/main/java/net/minecraft/world/entity/decoration/ItemFrame.java -index 69912c5b300b67394dce3876d2d96872033cf156..d728dc8a9b5fa2de0a824aaf132ee15db090b02e 100644 +index 80303f9466b8c7097151be313afc9a383693d18a..e5b7598a5613a8281a991e42af5b950bcc2995ca 100644 --- a/src/main/java/net/minecraft/world/entity/decoration/ItemFrame.java +++ b/src/main/java/net/minecraft/world/entity/decoration/ItemFrame.java @@ -268,7 +268,13 @@ public class ItemFrame extends HangingEntity { @@ -57,7 +57,7 @@ index 03c065d0ad97d29f3586ba2bf3cd207b867ed634..62cdc36a21c0203ed98d2946a1efdf54 } diff --git a/src/main/java/net/minecraft/world/entity/vehicle/Boat.java b/src/main/java/net/minecraft/world/entity/vehicle/Boat.java -index 960bada23cb89a7f270d1ee24d62f2bc108522af..7e9c88efd2a1edea673d1ef81635c2891a04d30e 100644 +index 96c6b4c37a556da8a4c6807db121c44c3f1b0729..81e0930acccd014e977b88d22e10346627f0edb0 100644 --- a/src/main/java/net/minecraft/world/entity/vehicle/Boat.java +++ b/src/main/java/net/minecraft/world/entity/vehicle/Boat.java @@ -968,7 +968,13 @@ public class Boat extends VehicleEntity implements VariantHolder { @@ -136,7 +136,7 @@ index b2ad6d230de2c29f371178bccde1111c7532ee70..6667926519a0f1c151e53f59cce36e74 if (((HangingEntity) object).survives()) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 569a09a73c9d800e78a77c430494292457453ab1..82d7028c1fc2ddfbb8bbcee9205375f4807c8e25 100644 +index 4e2619e07b177cd8ce732e58da538de89b627098..2d9429ef5884f0ee542c2fb197ae263c2e5d6577 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -97,8 +97,10 @@ public class PurpurWorldConfig { diff --git a/patches/server/0106-Add-configurable-snowball-damage.patch b/patches/server/0106-Add-configurable-snowball-damage.patch index 6a739bed7..76ee96d82 100644 --- a/patches/server/0106-Add-configurable-snowball-damage.patch +++ b/patches/server/0106-Add-configurable-snowball-damage.patch @@ -5,20 +5,20 @@ Subject: [PATCH] Add configurable snowball damage diff --git a/src/main/java/net/minecraft/world/entity/projectile/Snowball.java b/src/main/java/net/minecraft/world/entity/projectile/Snowball.java -index 718e120c9768cf716b32d3d652f53f1dda925168..b90cedad282e95a067aca176fafa9f72a726f520 100644 +index 5e82549ea2e80b3968b793b7b4b685c4891e9a91..8d1591c3b29e02794f6f66b742ec6a121920ad71 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/Snowball.java +++ b/src/main/java/net/minecraft/world/entity/projectile/Snowball.java -@@ -53,7 +53,7 @@ public class Snowball extends ThrowableItemProjectile { +@@ -58,7 +58,7 @@ public class Snowball extends ThrowableItemProjectile { protected void onHitEntity(EntityHitResult entityHitResult) { super.onHitEntity(entityHitResult); Entity entity = entityHitResult.getEntity(); - int i = entity instanceof Blaze ? 3 : 0; + int i = entity.level().purpurConfig.snowballDamage >= 0 ? entity.level().purpurConfig.snowballDamage : entity instanceof Blaze ? 3 : 0; // Purpur - entity.hurt(this.damageSources().thrown(this, this.getOwner()), (float)i); - } + entity.hurt(this.damageSources().thrown(this, this.getOwner()), (float) i); + } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index b2c8ec43768c1a3243bca0998350400d8ea51b89..06558480c2f3b9b1e81ba48fe7c7a80ea5652599 100644 +index ed2bc4524167521bdfb1b9c516106b14b4b05e50..1f41804ec120b2e50ef99ef50d41d44a91ba3814 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -350,6 +350,11 @@ public class PurpurWorldConfig { diff --git a/patches/server/0107-Changeable-Mob-Left-Handed-Chance.patch b/patches/server/0107-Changeable-Mob-Left-Handed-Chance.patch index 4fe30e18e..78f269413 100644 --- a/patches/server/0107-Changeable-Mob-Left-Handed-Chance.patch +++ b/patches/server/0107-Changeable-Mob-Left-Handed-Chance.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Changeable Mob Left Handed Chance diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index 8a8ddfffe83554352f1e97fd33e8afd4bb4d82c0..a7b22c652ed8876a1a8da14ffcba69fccedb578f 100644 +index 20e8c3c88891f0fe20556b700fab5122682b2bdb..050d6705cfa7ce59b85a3120a0569b3e8f9be6b7 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java -@@ -1311,7 +1311,7 @@ public abstract class Mob extends LivingEntity implements Targeting { +@@ -1312,7 +1312,7 @@ public abstract class Mob extends LivingEntity implements Targeting { RandomSource randomsource = world.getRandom(); this.getAttribute(Attributes.FOLLOW_RANGE).addPermanentModifier(new AttributeModifier("Random spawn bonus", randomsource.triangle(0.0D, 0.11485000000000001D), AttributeModifier.Operation.MULTIPLY_BASE)); @@ -18,7 +18,7 @@ index 8a8ddfffe83554352f1e97fd33e8afd4bb4d82c0..a7b22c652ed8876a1a8da14ffcba69fc } else { this.setLeftHanded(false); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 26d0491025361ca2c898d9daa5a47430f9b8ed5e..8ccfa4ff11ca26ff3ac9785daa11d5a03d22649a 100644 +index 1f41804ec120b2e50ef99ef50d41d44a91ba3814..e84e5007a0952a77b991ff6c00549af28aa54230 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -156,8 +156,10 @@ public class PurpurWorldConfig { diff --git a/patches/server/0111-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch b/patches/server/0111-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch index a9d248102..24a15efb5 100644 --- a/patches/server/0111-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch +++ b/patches/server/0111-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch @@ -136,10 +136,10 @@ index cb1d91f9fe98f21c2afbe3894dfd9bca3bdd3ba6..d2703432af207c74ea8d298a784329c3 brain.setMemory(MemoryModuleType.SECONDARY_JOB_SITE, list); } else { 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 ce450d4b0d42443a47861dcb54b78a01ede734d1..833db485054338cd4a5e626b35ec050c35f15477 100644 +index 976388612d64cd137b18870119928cbd45dfd2a4..430e660f74ee523d0bb98e21784f32158495de7a 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -224,7 +224,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -225,7 +225,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler brain.addActivity(Activity.PLAY, VillagerGoalPackages.getPlayPackage(0.5F)); } else { brain.setSchedule(Schedule.VILLAGER_DEFAULT); @@ -148,7 +148,7 @@ index ce450d4b0d42443a47861dcb54b78a01ede734d1..833db485054338cd4a5e626b35ec050c } brain.addActivity(Activity.CORE, VillagerGoalPackages.getCorePackage(villagerprofession, 0.5F)); -@@ -979,6 +979,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -980,6 +980,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler public boolean hasFarmSeeds() { return this.getInventory().hasAnyMatching((itemstack) -> { @@ -174,7 +174,7 @@ index ac70c2c03241e73943bd517a8c69dd05e0873634..0318663a824d2a9515f867a075d148c3 public static final VillagerProfession FISHERMAN = register("fisherman", PoiTypes.FISHERMAN, SoundEvents.VILLAGER_WORK_FISHERMAN); public static final VillagerProfession FLETCHER = register("fletcher", PoiTypes.FLETCHER, SoundEvents.VILLAGER_WORK_FLETCHER); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 7bcec0062d777134fdc963ed4e8874730df36711..743f53357131695b89cb71c0c126f2e53a46c9f1 100644 +index c034b4686a1f5c67daef7ece163b92f54c6813d4..aebeb25fcb6b9a72ad52d249f8df794c3f5cce11 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -1808,6 +1808,8 @@ public class PurpurWorldConfig { diff --git a/patches/server/0117-Implement-TPSBar.patch b/patches/server/0117-Implement-TPSBar.patch index a3dcdb1db..60df30ee8 100644 --- a/patches/server/0117-Implement-TPSBar.patch +++ b/patches/server/0117-Implement-TPSBar.patch @@ -29,7 +29,7 @@ index 808ec6b3fa06dd0de76e78ec832894b2570eef8c..69af88f3ed690cbb751d367171c4cf6a this.hasLoggedStop = true; // Paper - Debugging if (isDebugging()) io.papermc.paper.util.TraceUtil.dumpTraceForThread("Server stopped"); // Paper - Debugging diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java -index a7388e51a169d43f22a1bd193b88f4383949cea6..f0745f41ba4c1931e4b61ac75edcff8f8cea5b34 100644 +index aa47b0af34cff5eaa638d6c24c718d02a0a266cf..d66fc3f1b8d960782a7a2e08dd72831025f9c8fd 100644 --- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java @@ -351,6 +351,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface @@ -83,10 +83,10 @@ index fbf1b37a0328d72c54331f8b567088731e5cc5d0..a30732576b86bcf9c56e7d0ced8eb849 // Purpur end } diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index f00121174230b16d852a6b5aaa75d277deaf5dff..d283a8c2e976c0320c65e3be542bd36dad809cc9 100644 +index 8d4e080540fb24b434e6d01eee6e7c2116c66804..89ba5789c6d6e4fe8360a854f0a6123036a5a792 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -486,6 +486,7 @@ public abstract class PlayerList { +@@ -487,6 +487,7 @@ public abstract class PlayerList { scoreboard.addPlayerToTeam(player.getScoreboardName(), collideRuleTeam); } // Paper end - Configurable player collision @@ -94,7 +94,7 @@ index f00121174230b16d852a6b5aaa75d277deaf5dff..d283a8c2e976c0320c65e3be542bd36d PlayerList.LOGGER.info("{}[{}] logged in with entity id {} at ([{}]{}, {}, {})", player.getName().getString(), s1, player.getId(), worldserver1.serverLevelData.getLevelName(), player.getX(), player.getY(), player.getZ()); } -@@ -598,6 +599,7 @@ public abstract class PlayerList { +@@ -599,6 +600,7 @@ public abstract class PlayerList { } public net.kyori.adventure.text.Component remove(ServerPlayer entityplayer, net.kyori.adventure.text.Component leaveMessage) { // Paper end - Fix kick event leave message not being sent diff --git a/patches/server/0120-Full-netherite-armor-grants-fire-resistance.patch b/patches/server/0120-Full-netherite-armor-grants-fire-resistance.patch index 82158b7e3..5a5b75daa 100644 --- a/patches/server/0120-Full-netherite-armor-grants-fire-resistance.patch +++ b/patches/server/0120-Full-netherite-armor-grants-fire-resistance.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Full netherite armor grants fire resistance 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 f26322bfa6b26d2b97a1e89218c685b508a3253b..ad4046a24f04845e794d1e446e12eb6c5c581d14 100644 +index e68ed7339d8aed2b97e310edeee3960611ed7bf1..73f8aeb1b5253cfd7d5502d506677a3ef906625e 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -368,6 +368,16 @@ public abstract class Player extends LivingEntity { +@@ -369,6 +369,16 @@ public abstract class Player extends LivingEntity { this.addEffect(new MobEffectInstance(MobEffects.WATER_BREATHING, 200, 0, false, false, true), org.bukkit.event.entity.EntityPotionEffectEvent.Cause.TURTLE_HELMET); // CraftBukkit } diff --git a/patches/server/0122-Add-mobGriefing-bypass-to-everything-affected.patch b/patches/server/0122-Add-mobGriefing-bypass-to-everything-affected.patch index 8a12662db..8c2093783 100644 --- a/patches/server/0122-Add-mobGriefing-bypass-to-everything-affected.patch +++ b/patches/server/0122-Add-mobGriefing-bypass-to-everything-affected.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add mobGriefing bypass to everything affected diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index a0573d7c164091ad8fa3d98d1c462a4eee309a2f..2a5d3d5c0a337933c62e1168de1a595a92bc5444 100644 +index 02be3c960bc89464b589a557d4269fce8fb88766..0461debc992ad7812a28ea73f3e18d5c0c22f700 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -1810,7 +1810,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1818,7 +1818,7 @@ public abstract class LivingEntity extends Entity implements Attackable { boolean flag = false; if (this.dead && adversary instanceof WitherBoss) { // Paper @@ -18,10 +18,10 @@ index a0573d7c164091ad8fa3d98d1c462a4eee309a2f..2a5d3d5c0a337933c62e1168de1a595a BlockState iblockdata = Blocks.WITHER_ROSE.defaultBlockState(); diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index 3fd1951441b149af2fcf335fd4b5886b4d66d5b0..c5cf5e84893f137ee4bead287e80eb57ff1a7407 100644 +index 050d6705cfa7ce59b85a3120a0569b3e8f9be6b7..56ba7ac3d9d1f65de84f98eb724761d6bb374d47 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java -@@ -705,7 +705,7 @@ public abstract class Mob extends LivingEntity implements Targeting { +@@ -706,7 +706,7 @@ public abstract class Mob extends LivingEntity implements Targeting { public void aiStep() { super.aiStep(); this.level().getProfiler().push("looting"); @@ -92,10 +92,10 @@ index 5580a396a56c6e0f364a5368985ee99b9e2be0a8..3facfd6eee17cb0b59425494c966e198 } else if (this.nextStartTick > 0) { --this.nextStartTick; 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 bc91862958fe18602d301f748ebeb73f65a4ee89..ef2f07cd030d66797cc00932ad61282c634e8047 100644 +index 4f1ae50564a7e646172b3b923d15a002ee736601..5ddc3e997fec6417c379561f60c438386030d49d 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Fox.java +++ b/src/main/java/net/minecraft/world/entity/animal/Fox.java -@@ -1397,7 +1397,7 @@ public class Fox extends Animal implements VariantHolder { +@@ -1401,7 +1401,7 @@ public class Fox extends Animal implements VariantHolder { } protected void onReachedTarget() { @@ -131,10 +131,10 @@ index b97f892fe5824b5275905cd51599bea17da3dd19..1d70a108293a61b7813b70cc9ce600a3 } 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 88bc3710cf7229f85805ec210a06b224aec65a4b..50f6b8977866248d1a69f0c82d427eb8ef480952 100644 +index e4b2b35cb1704e61ce0a84cb97578cee7e1eed43..39cf974313c7c0bdcd6599c6c8bec450efe0277a 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 -@@ -604,7 +604,7 @@ public class EnderDragon extends Mob implements Enemy { +@@ -605,7 +605,7 @@ public class EnderDragon extends Mob implements Enemy { BlockState iblockdata = this.level().getBlockState(blockposition); if (!iblockdata.isAir() && !iblockdata.is(BlockTags.DRAGON_TRANSPARENT)) { @@ -144,10 +144,10 @@ index 88bc3710cf7229f85805ec210a06b224aec65a4b..50f6b8977866248d1a69f0c82d427eb8 // flag1 = this.level().removeBlock(blockposition, false) || flag1; flag1 = true; 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 6bc0713a8bc8ac86f1febe3414bed135c1cd5336..a655c38eccc41d97cfb6d329e104bad6d9ccbc95 100644 +index 0c7623cc87c534cf02ee78a1ffb6928a31758f6f..3cc47b0e05621c913a3e8d04c653bafab4a86744 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 -@@ -493,7 +493,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob +@@ -494,7 +494,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob if (this.destroyBlocksTick > 0) { --this.destroyBlocksTick; @@ -221,10 +221,10 @@ index 226b44ba4cd3a08562c8cb0d79c1d880cfac34ec..056fa8b12368dac5d1a12962b8ee92e8 AABB axisalignedbb = this.getBoundingBox().inflate(0.2D); Iterator iterator = BlockPos.betweenClosed(Mth.floor(axisalignedbb.minX), Mth.floor(axisalignedbb.minY), Mth.floor(axisalignedbb.minZ), Mth.floor(axisalignedbb.maxX), Mth.floor(axisalignedbb.maxY), Mth.floor(axisalignedbb.maxZ)).iterator(); 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 1738f0a251e4cab2eb3f122e83366afb02201765..49a37d294bac8205ac0a795daa300ccc8170c8a8 100644 +index e81c162f7a2061180f81754de341b2c33da76a0d..69f6306b91e535050fe8b22852503dfb0514f316 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Silverfish.java +++ b/src/main/java/net/minecraft/world/entity/monster/Silverfish.java -@@ -210,7 +210,7 @@ public class Silverfish extends Monster { +@@ -211,7 +211,7 @@ public class Silverfish extends Monster { continue; } // CraftBukkit end @@ -233,7 +233,7 @@ index 1738f0a251e4cab2eb3f122e83366afb02201765..49a37d294bac8205ac0a795daa300ccc world.destroyBlock(blockposition1, true, this.silverfish); } else { world.setBlock(blockposition1, ((InfestedBlock) block).hostStateByInfested(world.getBlockState(blockposition1)), 3); -@@ -248,7 +248,7 @@ public class Silverfish extends Monster { +@@ -249,7 +249,7 @@ public class Silverfish extends Monster { } else { RandomSource randomsource = this.mob.getRandom(); @@ -256,10 +256,10 @@ index b5e6a48192592e9bc5a7c0a2775e5d78f06cd46a..03b58860ecb72976ecce99f368d16942 protected boolean canReplaceCurrentItem(ItemStack stack) { diff --git a/src/main/java/net/minecraft/world/entity/projectile/LargeFireball.java b/src/main/java/net/minecraft/world/entity/projectile/LargeFireball.java -index 6b67eec90cd0dc1b20762514eac97f75fdbdf182..2dec28091d1816e9d4c749a5155e83031751cf50 100644 +index 9d89872c5958f3e8d6c1ef4fd93f9b8b85296851..6a94c86acce5afbf1e9c8e7d664b3eb2d79ab5ab 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/LargeFireball.java +++ b/src/main/java/net/minecraft/world/entity/projectile/LargeFireball.java -@@ -16,20 +16,20 @@ public class LargeFireball extends Fireball { +@@ -19,20 +19,20 @@ public class LargeFireball extends Fireball { public LargeFireball(EntityType type, Level world) { super(type, world); @@ -284,7 +284,7 @@ index 6b67eec90cd0dc1b20762514eac97f75fdbdf182..2dec28091d1816e9d4c749a5155e8303 // CraftBukkit start - fire ExplosionPrimeEvent ExplosionPrimeEvent event = new ExplosionPrimeEvent((org.bukkit.entity.Explosive) this.getBukkitEntity()); diff --git a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java -index 837f68825f601971f374be47952b23108bf66ba6..422145f30b7c8e11366705cd9b974a5a89ba5e10 100644 +index 2a8a8030feefae84e394460612405887e63f2ac7..577df1ad8eb57ae7a53c9931c379824a6882fa5f 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java +++ b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java @@ -334,7 +334,7 @@ public abstract class Projectile extends Entity implements TraceableEntity { @@ -297,10 +297,10 @@ index 837f68825f601971f374be47952b23108bf66ba6..422145f30b7c8e11366705cd9b974a5a public boolean mayBreak(Level world) { diff --git a/src/main/java/net/minecraft/world/entity/projectile/SmallFireball.java b/src/main/java/net/minecraft/world/entity/projectile/SmallFireball.java -index 9d43c8520953d6fe0d0948f9dbe14e0650ee01c2..deee9fffe6981d7e728621cc799a812d78000592 100644 +index 6724fe4470aeea338eb4cfd10a7e61fbcac1e5b7..dd38f32ac6a62905c9a79dacf85cf073fa6941b3 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/SmallFireball.java +++ b/src/main/java/net/minecraft/world/entity/projectile/SmallFireball.java -@@ -24,7 +24,7 @@ public class SmallFireball extends Fireball { +@@ -27,7 +27,7 @@ public class SmallFireball extends Fireball { super(EntityType.SMALL_FIREBALL, owner, velocityX, velocityY, velocityZ, world); // CraftBukkit start if (this.getOwner() != null && this.getOwner() instanceof Mob) { @@ -310,10 +310,10 @@ index 9d43c8520953d6fe0d0948f9dbe14e0650ee01c2..deee9fffe6981d7e728621cc799a812d // CraftBukkit end } diff --git a/src/main/java/net/minecraft/world/entity/raid/Raider.java b/src/main/java/net/minecraft/world/entity/raid/Raider.java -index 226fb5c88dd43c8008c5237299ef80db9e847af7..2da00acac01e333c23f7d155594011dceeb50f64 100644 +index 93bbf7556f9599e9dd90761085a57d78bd521867..b3912881892b4f1bca577761083c5da1568c8187 100644 --- a/src/main/java/net/minecraft/world/entity/raid/Raider.java +++ b/src/main/java/net/minecraft/world/entity/raid/Raider.java -@@ -319,7 +319,7 @@ public abstract class Raider extends PatrollingMonster { +@@ -322,7 +322,7 @@ public abstract class Raider extends PatrollingMonster { @Override public boolean canUse() { diff --git a/patches/server/0124-Add-EntityTeleportHinderedEvent.patch b/patches/server/0124-Add-EntityTeleportHinderedEvent.patch index 46f8a6b9e..e3c302ec9 100644 --- a/patches/server/0124-Add-EntityTeleportHinderedEvent.patch +++ b/patches/server/0124-Add-EntityTeleportHinderedEvent.patch @@ -55,10 +55,10 @@ index 1b5cc5d6aa0b4313da980ce175c54145852d0db0..613df7b174ba4cb87314a631ebc7dfed EntityPortalEnterEvent event = new EntityPortalEnterEvent(entity.getBukkitEntity(), new org.bukkit.Location(world.getWorld(), pos.getX(), pos.getY(), pos.getZ())); world.getCraftServer().getPluginManager().callEvent(event); diff --git a/src/main/java/net/minecraft/world/level/block/entity/TheEndGatewayBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/TheEndGatewayBlockEntity.java -index f5f464e69bfb00f5ea493d109bdd96e459fcad46..c3d25a26883f7cbe7106c2f3415af0b18f534ee2 100644 +index 400b7bbf49b1aa42eebb5d8f349a19d4ff321a7c..1b150b9fc444a248f6c01572447c7bb8eecfc76e 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/TheEndGatewayBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/TheEndGatewayBlockEntity.java -@@ -178,6 +178,14 @@ public class TheEndGatewayBlockEntity extends TheEndPortalBlockEntity { +@@ -179,6 +179,14 @@ public class TheEndGatewayBlockEntity extends TheEndPortalBlockEntity { public static void teleportEntity(Level world, BlockPos pos, BlockState state, Entity entity, TheEndGatewayBlockEntity blockEntity) { if (world instanceof ServerLevel && !blockEntity.isCoolingDown()) { if (!entity.canChangeDimensions()) return; // Purpur @@ -74,10 +74,10 @@ index f5f464e69bfb00f5ea493d109bdd96e459fcad46..c3d25a26883f7cbe7106c2f3415af0b1 blockEntity.teleportCooldown = 100; diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -index 39ae3335866669be54f31ee6cd10d41bc70b193c..a260e3768892dcf7ddd955cf8753d4d19cd2e8d3 100644 +index 74599d29538b7072464d3bb16b6356da09513d21..61348dfaab2fe3da35ae3195b7224e4b239dddd8 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -@@ -252,6 +252,10 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { +@@ -253,6 +253,10 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { // Paper end if ((!ignorePassengers && this.entity.isVehicle()) || this.entity.isRemoved()) { // Paper - Teleport passenger API @@ -89,7 +89,7 @@ index 39ae3335866669be54f31ee6cd10d41bc70b193c..a260e3768892dcf7ddd955cf8753d4d1 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 008da41d0fa6d80dc731e4eeb9aa4d4cb4b1873e..498310a94284c25d2e28d7de8299b80b1f34de3b 100644 +index bcf3393ad12a70eea0e1b24f69fac15b08af32fb..f74e632f6be8ab2c7bdf9f5ba2ad2a2a0ef4d14e 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -1356,6 +1356,10 @@ public class CraftPlayer extends CraftHumanEntity implements Player { diff --git a/patches/server/0126-Movement-options-for-armor-stands.patch b/patches/server/0126-Movement-options-for-armor-stands.patch index 623c0b362..5436c6ebf 100644 --- a/patches/server/0126-Movement-options-for-armor-stands.patch +++ b/patches/server/0126-Movement-options-for-armor-stands.patch @@ -17,10 +17,10 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 53e072f6070101f9c1bd24eacf1114e0a1c16305..36dd6555fb2245958ae5372b376d2329346060ea 100644 +index ca0719307e4d50b3dcfe13195f1c1e680b00350c..7380008f1bd25eb459e5875f753015593135486f 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -1872,7 +1872,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -1885,7 +1885,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S return this.isInWater() || flag; } @@ -30,10 +30,10 @@ index 53e072f6070101f9c1bd24eacf1114e0a1c16305..36dd6555fb2245958ae5372b376d2329 if (entity instanceof Boat) { diff --git a/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java b/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java -index 728814649f8d6837586cd5400b271d25b8306e35..53f36e281e42a2bfc174f06f448f1eb85eb02aff 100644 +index aca5e7a2b0eab93c613b03834509366f7119ec03..40550897d5be12fcb8e1e751ee2e7a138512ce0b 100644 --- a/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java +++ b/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java -@@ -99,10 +99,12 @@ public class ArmorStand extends LivingEntity { +@@ -100,10 +100,12 @@ public class ArmorStand extends LivingEntity { private boolean noTickPoseDirty = false; private boolean noTickEquipmentDirty = false; // Paper end - Allow ArmorStands not to tick @@ -46,7 +46,7 @@ index 728814649f8d6837586cd5400b271d25b8306e35..53f36e281e42a2bfc174f06f448f1eb8 this.handItems = NonNullList.withSize(2, ItemStack.EMPTY); this.armorItems = NonNullList.withSize(4, ItemStack.EMPTY); this.headPose = ArmorStand.DEFAULT_HEAD_POSE; -@@ -1005,4 +1007,18 @@ public class ArmorStand extends LivingEntity { +@@ -1006,4 +1008,18 @@ public class ArmorStand extends LivingEntity { } } // Paper end diff --git a/patches/server/0127-Fix-stuck-in-portals.patch b/patches/server/0127-Fix-stuck-in-portals.patch index ecc4a0c05..3282b813c 100644 --- a/patches/server/0127-Fix-stuck-in-portals.patch +++ b/patches/server/0127-Fix-stuck-in-portals.patch @@ -17,10 +17,10 @@ index a30732576b86bcf9c56e7d0ced8eb8490af13515..e76d1a202bea3dd94cbdbdfca9b052ca // CraftBukkit end this.setServerLevel(worldserver); diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 36dd6555fb2245958ae5372b376d2329346060ea..e30dad61530fcc2c806465bbdaf4d2a7029e6153 100644 +index 7380008f1bd25eb459e5875f753015593135486f..79f6b204668a508d2afd305f520c413f9f5fa8f1 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -3148,12 +3148,15 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3164,12 +3164,15 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S return Vec3.directionFromRotation(this.getRotationVector()); } diff --git a/patches/server/0128-Toggle-for-water-sensitive-mob-damage.patch b/patches/server/0128-Toggle-for-water-sensitive-mob-damage.patch index c97ac36a7..57d318bda 100644 --- a/patches/server/0128-Toggle-for-water-sensitive-mob-damage.patch +++ b/patches/server/0128-Toggle-for-water-sensitive-mob-damage.patch @@ -110,7 +110,7 @@ index 3d61c2d5da103de68242c16d85c703813979d179..2343325fa9a771de7b9445cda24a2bcd public ItemStack getBucketItemStack() { return new ItemStack(Items.COD_BUCKET); diff --git a/src/main/java/net/minecraft/world/entity/animal/Cow.java b/src/main/java/net/minecraft/world/entity/animal/Cow.java -index c501704251e5b23f697efc307ebdc906cd2e5acd..f76b0d92150fd985a8fc699f6f884527d589dfd3 100644 +index 3fd310fe80b0f725746e20e8be2b3b7710467c28..4c2cc5ba3c8f15c26f01361e786d25b399747974 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cow.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cow.java @@ -74,6 +74,11 @@ public class Cow extends Animal { @@ -126,10 +126,10 @@ index c501704251e5b23f697efc307ebdc906cd2e5acd..f76b0d92150fd985a8fc699f6f884527 protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); 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 cdbe66bc89a64f8d41ea496f2da85159f48bb8c5..a5759b711d1853ac41713dd9fe11f3da5af286ef 100644 +index 3e32787cc7e96e83dc408e556a92b25607d487a9..21e804d391478c613f4f89076fd268a9eb2e2ecf 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java +++ b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java -@@ -163,6 +163,11 @@ public class Dolphin extends WaterAnimal { +@@ -164,6 +164,11 @@ public class Dolphin extends WaterAnimal { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.dolphinMaxHealth); } @@ -142,10 +142,10 @@ index cdbe66bc89a64f8d41ea496f2da85159f48bb8c5..a5759b711d1853ac41713dd9fe11f3da @Override public SpawnGroupData finalizeSpawn(ServerLevelAccessor world, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData entityData, @Nullable CompoundTag entityNbt) { 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 292504cb09ac94f593fdde317030c7662f9e500c..9a34a59300c4ad5dfbd327aa4fd42992f73da89a 100644 +index 5ddc3e997fec6417c379561f60c438386030d49d..1e04205a1707e46a1f540f5c8f6ec1b81bf1b5d7 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Fox.java +++ b/src/main/java/net/minecraft/world/entity/animal/Fox.java -@@ -193,6 +193,11 @@ public class Fox extends Animal implements VariantHolder { +@@ -197,6 +197,11 @@ public class Fox extends Animal implements VariantHolder { return this.level().purpurConfig.foxBreedingTicks; } @@ -174,10 +174,10 @@ index 46e28d807a72b6d302d29d65c52ab0813cd82b1a..669132fb78d3fd72f73d4c20370f0213 protected void registerGoals() { if (level().purpurConfig.ironGolemCanSwim) this.goalSelector.addGoal(0, new net.minecraft.world.entity.ai.goal.FloatGoal(this)); // Purpur 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 56427c987439c2d6d5652dae0f2c0a72d4eba26e..f01d93c6f88f543b51420ceca7a4a95829368a20 100644 +index b699f88ce9480ef4da5bfb97004a9c5f62d58894..5cf206bea6d2f3155c1da73d8337bbd8e2ee7bb3 100644 --- a/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java +++ b/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java -@@ -90,6 +90,11 @@ public class MushroomCow extends Cow implements Shearable, VariantHolder brainProvider() { return Brain.provider(MEMORY_TYPES, SENSOR_TYPES); diff --git a/src/main/java/net/minecraft/world/entity/monster/Zombie.java b/src/main/java/net/minecraft/world/entity/monster/Zombie.java -index 1bb5eb0f75dc4509377cf54054eba34e4ffd02a9..edc47e077fe44d1b817b791ddde86e052a5bf831 100644 +index 4df125607985b315b078253f7ea889626e743197..94b92c6e588f871d4b0d86bb8f860a99e473a4ea 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java @@ -141,6 +141,11 @@ public class Zombie extends Monster { @@ -1165,10 +1165,10 @@ index 04e54c241078e6cd6419a21ba1bf913fd3b413d1..b63d87df0f48dd63c89118f91b31dc4e return Monster.createMonsterAttributes().add(Attributes.MAX_HEALTH, 50.0D).add(Attributes.MOVEMENT_SPEED, (double)0.35F).add(Attributes.ATTACK_DAMAGE, 7.0D); } 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 b8675cb1a69f675585c040b2f47172dfe9235d08..cd59f262572df87b28b33f98a3dc667b4c5b3072 100644 +index 430e660f74ee523d0bb98e21784f32158495de7a..870330f95fa1c1b4b8fb5f5e59a9770fb9389eb5 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -190,6 +190,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -191,6 +191,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler return level().purpurConfig.villagerCanBeLeashed && !this.isLeashed(); } @@ -1181,10 +1181,10 @@ index b8675cb1a69f675585c040b2f47172dfe9235d08..cd59f262572df87b28b33f98a3dc667b public Brain getBrain() { return (Brain) super.getBrain(); // CraftBukkit - decompile error 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 8ab868c88e37fad978ffcf151ad527e57bdf4cb5..027e86e504d0e4291deae0641f0e5b40686e6ccb 100644 +index 6f30c22fe0058320b995570c9af7b15ae917dd76..381e86286eabdbc254cd8901c498dd781521ed4d 100644 --- a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java +++ b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java -@@ -97,6 +97,11 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill +@@ -98,6 +98,11 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill return level().purpurConfig.wanderingTraderCanBeLeashed && !this.isLeashed(); } @@ -1197,7 +1197,7 @@ index 8ab868c88e37fad978ffcf151ad527e57bdf4cb5..027e86e504d0e4291deae0641f0e5b40 protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index cd4a14bd5d13b41d02ad68ddf31fd3648f933850..bab1a72f8a165ba9df57187296f242287d57f300 100644 +index 26a62a67b80b520246c0b118900fa2db20c96fcf..b4b9520cbd113abfd8cb99168c7f90ad3c83c563 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -568,11 +568,13 @@ public class PurpurWorldConfig { diff --git a/patches/server/0130-End-crystal-explosion-options.patch b/patches/server/0130-End-crystal-explosion-options.patch index a5d06766a..2a65dea77 100644 --- a/patches/server/0130-End-crystal-explosion-options.patch +++ b/patches/server/0130-End-crystal-explosion-options.patch @@ -5,10 +5,10 @@ Subject: [PATCH] End crystal explosion options diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java -index aa75a9229210302dbccd6186439c3c35481ef46c..ea7075dd4a9bc466d850cabc69199d56e48c825a 100644 +index c0c8bdfbab17d8a10d616e2625ebfa7babf5fab3..24ad1bae912fa6ee82ea8b6bdbb0af664dc1006c 100644 --- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java +++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java -@@ -48,6 +48,22 @@ public class EndCrystal extends Entity { +@@ -49,6 +49,22 @@ public class EndCrystal extends Entity { this.setPos(x, y, z); } @@ -32,8 +32,8 @@ index aa75a9229210302dbccd6186439c3c35481ef46c..ea7075dd4a9bc466d850cabc69199d56 protected Entity.MovementEmission getMovementEmission() { return Entity.MovementEmission.NONE; @@ -173,16 +189,18 @@ public class EndCrystal extends Entity { + } // CraftBukkit end - this.remove(Entity.RemovalReason.KILLED); if (!source.is(DamageTypeTags.IS_EXPLOSION)) { + if (shouldExplode()) {// Purpur DamageSource damagesource1 = source.getEntity() != null ? this.damageSources().explosion(this, source.getEntity()) : null; @@ -42,16 +42,16 @@ index aa75a9229210302dbccd6186439c3c35481ef46c..ea7075dd4a9bc466d850cabc69199d56 - ExplosionPrimeEvent event = CraftEventFactory.callExplosionPrimeEvent(this, 6.0F, false); + ExplosionPrimeEvent event = CraftEventFactory.callExplosionPrimeEvent(this, getExplosionPower(), hasExplosionFire()); // Purpur if (event.isCancelled()) { - this.unsetRemoved(); return false; } + + this.remove(Entity.RemovalReason.KILLED, EntityRemoveEvent.Cause.EXPLODE); // CraftBukkit - add Bukkit remove cause - this.level().explode(this, damagesource1, (ExplosionDamageCalculator) null, this.getX(), this.getY(), this.getZ(), event.getRadius(), event.getFire(), Level.ExplosionInteraction.BLOCK); + this.level().explode(this, damagesource1, (ExplosionDamageCalculator) null, this.getX(), this.getY(), this.getZ(), event.getRadius(), event.getFire(), getExplosionEffect()); // Purpur - // CraftBukkit end + } else this.unsetRemoved(); // Purpur + } else { + this.remove(Entity.RemovalReason.KILLED, EntityRemoveEvent.Cause.DEATH); // CraftBukkit - add Bukkit remove cause } - - this.onDestroyedBy(source); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java index f1e99cc608fb9afab44c2c960c7b74468ec62c07..40ca971f169bd07da0a2f7ba37e3a4aa534d0c7e 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java diff --git a/patches/server/0131-Configs-for-if-Wither-Ender-Dragon-can-ride-vehicles.patch b/patches/server/0131-Configs-for-if-Wither-Ender-Dragon-can-ride-vehicles.patch index 4d3cb9f85..4f89445ba 100644 --- a/patches/server/0131-Configs-for-if-Wither-Ender-Dragon-can-ride-vehicles.patch +++ b/patches/server/0131-Configs-for-if-Wither-Ender-Dragon-can-ride-vehicles.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configs for if Wither/Ender Dragon can ride vehicles 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 df8baf2059cdfed3f0c43496fba843b8b6819281..aa10cd2e0ee7b0d421c223de390e671d401f87fc 100644 +index 0ce3acdc0bc72bba3b59d480e7e4135b3d794fca..ff4b188084d43af9e8ed60e6a77996018e589807 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 -@@ -1189,6 +1189,7 @@ public class EnderDragon extends Mob implements Enemy { +@@ -1190,6 +1190,7 @@ public class EnderDragon extends Mob implements Enemy { @Override protected boolean canRide(Entity entity) { @@ -17,10 +17,10 @@ index df8baf2059cdfed3f0c43496fba843b8b6819281..aa10cd2e0ee7b0d421c223de390e671d } 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 73930b4eea2bd632c390b79118ecafad84cfa44a..ac7e54e2bfc1ca41fd8082c453c1f99fa89e77c2 100644 +index db5a8b93b9cefca4566d3abc2b4c55d4b4cc1003..06f4bbbbdf3a3c49035df9edc258e6bda87b53fc 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 -@@ -739,6 +739,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob +@@ -740,6 +740,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob @Override protected boolean canRide(Entity entity) { @@ -29,7 +29,7 @@ index 73930b4eea2bd632c390b79118ecafad84cfa44a..ac7e54e2bfc1ca41fd8082c453c1f99f } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 4d7d111a2cb6f02d3263174af9e70548be0fe971..ecfbfc843b534196ff19c2e45989f0271f9e8105 100644 +index 40ca971f169bd07da0a2f7ba37e3a4aa534d0c7e..6d017d5d3cfe8581936b8f1fb58656ff2b2fdf95 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -947,6 +947,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0133-One-Punch-Man.patch b/patches/server/0133-One-Punch-Man.patch index 16c985308..6f387ee32 100644 --- a/patches/server/0133-One-Punch-Man.patch +++ b/patches/server/0133-One-Punch-Man.patch @@ -5,10 +5,10 @@ Subject: [PATCH] One Punch Man! diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 2a5d3d5c0a337933c62e1168de1a595a92bc5444..9c240ce04337458395aea35aab7d97a9f592f008 100644 +index 0461debc992ad7812a28ea73f3e18d5c0c22f700..f1a8918afe7e13fa0ba61566d3ad1b364a6e71dc 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -2348,6 +2348,20 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -2356,6 +2356,20 @@ public abstract class LivingEntity extends Entity implements Attackable { } } diff --git a/patches/server/0134-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch b/patches/server/0134-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch index 940274eb3..b8f3d57b6 100644 --- a/patches/server/0134-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch +++ b/patches/server/0134-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch @@ -8,10 +8,10 @@ Subject: [PATCH] Configurable Ender Pearl cooldown, damage, and Endermite RNG - Endermite spawn chance diff --git a/src/main/java/net/minecraft/world/entity/projectile/ThrownEnderpearl.java b/src/main/java/net/minecraft/world/entity/projectile/ThrownEnderpearl.java -index 3be611e7ae35b696ba44cd361042f79b69391815..0de1cda80c57c3552d243780d5aa368675b915e8 100644 +index 28690877c443ceb2bdf20e6d251c9d32f667814c..b004f072d2a67ad9fb39dd6fbd3a30c94016202f 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/ThrownEnderpearl.java +++ b/src/main/java/net/minecraft/world/entity/projectile/ThrownEnderpearl.java -@@ -70,7 +70,7 @@ public class ThrownEnderpearl extends ThrowableItemProjectile { +@@ -71,7 +71,7 @@ public class ThrownEnderpearl extends ThrowableItemProjectile { Bukkit.getPluginManager().callEvent(teleEvent); if (!teleEvent.isCancelled() && entityplayer.connection.isAcceptingMessages()) { @@ -20,7 +20,7 @@ index 3be611e7ae35b696ba44cd361042f79b69391815..0de1cda80c57c3552d243780d5aa3686 Endermite entityendermite = (Endermite) EntityType.ENDERMITE.create(this.level()); if (entityendermite != null) { -@@ -85,7 +85,7 @@ public class ThrownEnderpearl extends ThrowableItemProjectile { +@@ -86,7 +86,7 @@ public class ThrownEnderpearl extends ThrowableItemProjectile { entityplayer.connection.teleport(teleEvent.getTo()); entity.resetFallDistance(); diff --git a/patches/server/0136-Add-back-player-spawned-endermite-API.patch b/patches/server/0136-Add-back-player-spawned-endermite-API.patch index 969f0fcf3..9f58851c8 100644 --- a/patches/server/0136-Add-back-player-spawned-endermite-API.patch +++ b/patches/server/0136-Add-back-player-spawned-endermite-API.patch @@ -5,18 +5,18 @@ Subject: [PATCH] Add back player spawned endermite API 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 936add0eb7204af7dc507c786cb82e0d7a76d5dc..c0c3ab5dbf5987e543e6cdd1a814d2ec3ec17939 100644 +index 7655e6d36e29ba8a64729e6a0688e81ffefa95fa..67f3928f4a03a8d546c55e46a1f094a354ac412d 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Endermite.java +++ b/src/main/java/net/minecraft/world/entity/monster/Endermite.java -@@ -32,6 +32,7 @@ import org.joml.Vector3f; - public class Endermite extends Monster { +@@ -37,6 +37,7 @@ public class Endermite extends Monster { + private static final int MAX_LIFE = 2400; public int life; + private boolean isPlayerSpawned; // Purpur public Endermite(EntityType type, Level world) { super(type, world); -@@ -65,6 +66,14 @@ public class Endermite extends Monster { +@@ -70,6 +71,14 @@ public class Endermite extends Monster { return this.level().purpurConfig.endermiteTakeDamageFromWater; } @@ -31,7 +31,7 @@ index 936add0eb7204af7dc507c786cb82e0d7a76d5dc..c0c3ab5dbf5987e543e6cdd1a814d2ec @Override protected void registerGoals() { this.goalSelector.addGoal(1, new FloatGoal(this)); -@@ -117,12 +126,14 @@ public class Endermite extends Monster { +@@ -122,12 +131,14 @@ public class Endermite extends Monster { public void readAdditionalSaveData(CompoundTag nbt) { super.readAdditionalSaveData(nbt); this.life = nbt.getInt("Lifetime"); @@ -47,10 +47,10 @@ index 936add0eb7204af7dc507c786cb82e0d7a76d5dc..c0c3ab5dbf5987e543e6cdd1a814d2ec @Override diff --git a/src/main/java/net/minecraft/world/entity/projectile/ThrownEnderpearl.java b/src/main/java/net/minecraft/world/entity/projectile/ThrownEnderpearl.java -index f9cd39a4f8ec5cdade311984d863b64f8f845fb7..59cc9e9a56898c7bdc5474842c31d2fbe6a81897 100644 +index b004f072d2a67ad9fb39dd6fbd3a30c94016202f..326d1db39e3d3cd46cb5a584e2a7b82dd46ff8fa 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/ThrownEnderpearl.java +++ b/src/main/java/net/minecraft/world/entity/projectile/ThrownEnderpearl.java -@@ -74,6 +74,7 @@ public class ThrownEnderpearl extends ThrowableItemProjectile { +@@ -75,6 +75,7 @@ public class ThrownEnderpearl extends ThrowableItemProjectile { Endermite entityendermite = (Endermite) EntityType.ENDERMITE.create(this.level()); if (entityendermite != null) { diff --git a/patches/server/0141-Config-to-make-Creepers-explode-on-death.patch b/patches/server/0141-Config-to-make-Creepers-explode-on-death.patch index 25e8c394e..53bdeed38 100644 --- a/patches/server/0141-Config-to-make-Creepers-explode-on-death.patch +++ b/patches/server/0141-Config-to-make-Creepers-explode-on-death.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Config to make Creepers explode on death Creepers exploded after being killed in the alpha days. This brings that back. 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 63d51f6f792f951a1db5f8f7c9b359898968cd85..f043b6da9649c8c9e6a9cf5172e95470d167443b 100644 +index eb2c80a50bd29ad4ab9ece0ce5d71f3713700fba..743d888c07450ea9e2367d169e20a583b51f7be0 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Creeper.java +++ b/src/main/java/net/minecraft/world/entity/monster/Creeper.java -@@ -63,6 +63,7 @@ public class Creeper extends Monster implements PowerableMob { +@@ -64,6 +64,7 @@ public class Creeper extends Monster implements PowerableMob { private int spacebarCharge = 0; private int prevSpacebarCharge = 0; private int powerToggleDelay = 0; @@ -17,7 +17,7 @@ index 63d51f6f792f951a1db5f8f7c9b359898968cd85..f043b6da9649c8c9e6a9cf5172e95470 // Purpur end public Creeper(EntityType type, Level world) { -@@ -268,6 +269,14 @@ public class Creeper extends Monster implements PowerableMob { +@@ -269,6 +270,14 @@ public class Creeper extends Monster implements PowerableMob { return this.level().purpurConfig.creeperTakeDamageFromWater; } @@ -32,7 +32,7 @@ index 63d51f6f792f951a1db5f8f7c9b359898968cd85..f043b6da9649c8c9e6a9cf5172e95470 @Override protected SoundEvent getHurtSound(DamageSource source) { return SoundEvents.CREEPER_HURT; -@@ -359,6 +368,7 @@ public class Creeper extends Monster implements PowerableMob { +@@ -360,6 +369,7 @@ public class Creeper extends Monster implements PowerableMob { } public void explodeCreeper() { @@ -40,7 +40,7 @@ index 63d51f6f792f951a1db5f8f7c9b359898968cd85..f043b6da9649c8c9e6a9cf5172e95470 if (!this.level().isClientSide) { float f = this.isPowered() ? 2.0F : 1.0F; -@@ -377,7 +387,7 @@ public class Creeper extends Monster implements PowerableMob { +@@ -378,7 +388,7 @@ public class Creeper extends Monster implements PowerableMob { } // CraftBukkit end } @@ -50,7 +50,7 @@ index 63d51f6f792f951a1db5f8f7c9b359898968cd85..f043b6da9649c8c9e6a9cf5172e95470 private void spawnLingeringCloud() { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index f2357e851fcea101d1a6f262ff88561b774032b0..44b98e5030bef02ab05a9686fdfc711fa78ec072 100644 +index 238f8dd90bbf9897cb28c4783ad43382be0a836a..78d088e0ae3186f72dc8898a65ef2983e7d608ab 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -851,6 +851,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0145-Add-config-for-villager-trading.patch b/patches/server/0145-Add-config-for-villager-trading.patch index db92e587c..1b56264f9 100644 --- a/patches/server/0145-Add-config-for-villager-trading.patch +++ b/patches/server/0145-Add-config-for-villager-trading.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add config for villager trading 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 9ed51efc1a42a792b652e7c958c06fa5b572e4bf..6857eeb9a93850594cbdb634dfbdf6cb6d82ced5 100644 +index 870330f95fa1c1b4b8fb5f5e59a9770fb9389eb5..ee509b5eea71c17ff466fb93fe63168710065add 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -372,7 +372,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -373,7 +373,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler return tryRide(player, hand, InteractionResult.sidedSuccess(this.level().isClientSide)); // Purpur } else { if (level().purpurConfig.villagerRidable && itemstack.isEmpty()) return tryRide(player, hand); // Purpur @@ -18,10 +18,10 @@ index 9ed51efc1a42a792b652e7c958c06fa5b572e4bf..6857eeb9a93850594cbdb634dfbdf6cb } 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 5a373ba4d9e404c064bc158718d02c0cd2aca548..d672c1e381e5c4a4b79a1dfb96f1410ec35cb1b5 100644 +index 381e86286eabdbc254cd8901c498dd781521ed4d..657fdbabf18da7ab321e8e95a31d53362c605380 100644 --- a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java +++ b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java -@@ -153,7 +153,7 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill +@@ -154,7 +154,7 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill return tryRide(player, hand, InteractionResult.sidedSuccess(this.level().isClientSide)); // Purpur } else { if (level().purpurConfig.wanderingTraderRidable && itemstack.isEmpty()) return tryRide(player, hand); // Purpur @@ -31,7 +31,7 @@ index 5a373ba4d9e404c064bc158718d02c0cd2aca548..d672c1e381e5c4a4b79a1dfb96f1410e this.openTradingScreen(player, this.getDisplayName(), 1); } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index e51a38ca916e91255c46b864e45428a364e59539..9aa6a3f69afb0fd70ac60ca0d50d564dd7d3fe54 100644 +index adb72146f6d6fd1389d99f833115ff8bc68f925b..ab999a2a71d1a04bce176d81844cecbf5760157d 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -2123,6 +2123,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0147-Drowning-Settings.patch b/patches/server/0147-Drowning-Settings.patch index 3892a9b2c..a4212ccc5 100644 --- a/patches/server/0147-Drowning-Settings.patch +++ b/patches/server/0147-Drowning-Settings.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Drowning Settings diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index e30dad61530fcc2c806465bbdaf4d2a7029e6153..7579c2d4c716695ab1854a055bc595d7b55201e5 100644 +index 79f6b204668a508d2afd305f520c413f9f5fa8f1..b14b99b8f0ce427da999e486bfed84ad38a19d8c 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -3397,7 +3397,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3413,7 +3413,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } public int getMaxAirSupply() { @@ -18,10 +18,10 @@ index e30dad61530fcc2c806465bbdaf4d2a7029e6153..7579c2d4c716695ab1854a055bc595d7 public int getAirSupply() { diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 9c240ce04337458395aea35aab7d97a9f592f008..99673b3df82d40dfebc313935061e3fa79a3a59c 100644 +index f1a8918afe7e13fa0ba61566d3ad1b364a6e71dc..fa289f634d4a674d6cb5d9633ae6d1997a02fd59 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -438,7 +438,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -439,7 +439,7 @@ public abstract class LivingEntity extends Entity implements Attackable { if (flag1) { this.setAirSupply(this.decreaseAirSupply(this.getAirSupply())); @@ -30,7 +30,7 @@ index 9c240ce04337458395aea35aab7d97a9f592f008..99673b3df82d40dfebc313935061e3fa this.setAirSupply(0); Vec3 vec3d = this.getDeltaMovement(); -@@ -450,7 +450,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -451,7 +451,7 @@ public abstract class LivingEntity extends Entity implements Attackable { this.level().addParticle(ParticleTypes.BUBBLE, this.getX() + d2, this.getY() + d3, this.getZ() + d4, vec3d.x, vec3d.y, vec3d.z); } diff --git a/patches/server/0150-Config-to-show-Armor-Stand-arms-on-spawn.patch b/patches/server/0150-Config-to-show-Armor-Stand-arms-on-spawn.patch index c92cf9a43..b313afb1d 100644 --- a/patches/server/0150-Config-to-show-Armor-Stand-arms-on-spawn.patch +++ b/patches/server/0150-Config-to-show-Armor-Stand-arms-on-spawn.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Config to show Armor Stand arms on spawn diff --git a/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java b/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java -index 5332e072e3c278a1d9769feb783b9419020a36d1..1ea348b6007d8aebf1e0f29018a03eb10c445369 100644 +index 40550897d5be12fcb8e1e751ee2e7a138512ce0b..fef18455da5ae020f9875663984b26e54a1c4bf7 100644 --- a/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java +++ b/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java -@@ -114,6 +114,7 @@ public class ArmorStand extends LivingEntity { +@@ -115,6 +115,7 @@ public class ArmorStand extends LivingEntity { this.leftLegPose = ArmorStand.DEFAULT_LEFT_LEG_POSE; this.rightLegPose = ArmorStand.DEFAULT_RIGHT_LEG_POSE; this.setMaxUpStep(0.0F); @@ -17,7 +17,7 @@ index 5332e072e3c278a1d9769feb783b9419020a36d1..1ea348b6007d8aebf1e0f29018a03eb1 public ArmorStand(Level world, double x, double y, double z) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 40afefd48f10068c48f2db6524c1c24cb5348c28..f023b83b2e7084ee661673080c4573c4bce9f355 100644 +index b8d5b60abe228456e62b5bee33bb65d19c9f71d4..d4afdff36ef3fe477ca4b8dfe2cf44965d73dc50 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -102,6 +102,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0157-Config-to-change-max-number-of-bees.patch b/patches/server/0157-Config-to-change-max-number-of-bees.patch index bb56df6c3..cd579d08f 100644 --- a/patches/server/0157-Config-to-change-max-number-of-bees.patch +++ b/patches/server/0157-Config-to-change-max-number-of-bees.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Config to change max number of bees diff --git a/src/main/java/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java -index dfd364ac4b7551a13c4c6c100b5e62c0dfb10595..312ee43ad1a35918fc359f7ebb5742004212b931 100644 +index 55b0e2bf98a285cdcd30e40d94192b7a1802efd8..b37b7f58d59616cd409bbab701659c8e8879ccc7 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java -@@ -43,7 +43,7 @@ public class BeehiveBlockEntity extends BlockEntity { +@@ -47,7 +47,7 @@ public class BeehiveBlockEntity extends BlockEntity { private final List stored = Lists.newArrayList(); @Nullable public BlockPos savedFlowerPos; diff --git a/patches/server/0158-Config-for-wither-explosion-radius.patch b/patches/server/0158-Config-for-wither-explosion-radius.patch index 485fd260c..afe90ba0c 100644 --- a/patches/server/0158-Config-for-wither-explosion-radius.patch +++ b/patches/server/0158-Config-for-wither-explosion-radius.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Config for wither explosion radius 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 d57ef27df0a3597416564f8723b4b986413ad314..aa5ce9625bf23885a55521cbb4d994b684a5cf61 100644 +index 8abc8a28ae74dc78f53b9fb38fb31b47a0a42d94..beaa7e817fb923b9cb1a9df63ddce3fe9e087061 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/WitherSkull.java +++ b/src/main/java/net/minecraft/world/entity/projectile/WitherSkull.java -@@ -98,7 +98,7 @@ public class WitherSkull extends AbstractHurtingProjectile { +@@ -99,7 +99,7 @@ public class WitherSkull extends AbstractHurtingProjectile { if (!this.level().isClientSide) { // CraftBukkit start // this.level().explode(this, this.getX(), this.getY(), this.getZ(), 1.0F, false, World.a.MOB); @@ -18,7 +18,7 @@ index d57ef27df0a3597416564f8723b4b986413ad314..aa5ce9625bf23885a55521cbb4d994b6 if (!event.isCancelled()) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 960dfb5f343bc0c1dcd17271594e33471a191b83..cd1fd91c9b0c1e4627f918d97338c1e87bcc0601 100644 +index 50373f138db63443dee0ca28781ae0a0cc65fa24..8b7c68d7d7ae77ba216a004724d088956a1dfce4 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -2290,6 +2290,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0162-Configurable-mob-blindness.patch b/patches/server/0162-Configurable-mob-blindness.patch index 1f259baa1..bf91f0b75 100644 --- a/patches/server/0162-Configurable-mob-blindness.patch +++ b/patches/server/0162-Configurable-mob-blindness.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Configurable mob blindness Ported from https://github.com/raltsmc/mobblindness diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 99673b3df82d40dfebc313935061e3fa79a3a59c..e997844c0cead8eef82a8025283d43163b1a6848 100644 +index fa289f634d4a674d6cb5d9633ae6d1997a02fd59..926962fc5631faa4672c8dd2fdb72b9ef6947292 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -1037,6 +1037,17 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1045,6 +1045,17 @@ public abstract class LivingEntity extends Entity implements Attackable { if (entitytypes == EntityType.SKELETON && itemstack.is(Items.SKELETON_SKULL) || entitytypes == EntityType.ZOMBIE && itemstack.is(Items.ZOMBIE_HEAD) || entitytypes == EntityType.PIGLIN && itemstack.is(Items.PIGLIN_HEAD) || entitytypes == EntityType.PIGLIN_BRUTE && itemstack.is(Items.PIGLIN_HEAD) || entitytypes == EntityType.CREEPER && itemstack.is(Items.CREEPER_HEAD)) { d0 *= 0.5D; } diff --git a/patches/server/0164-Config-for-health-to-impact-Creeper-explosion-radius.patch b/patches/server/0164-Config-for-health-to-impact-Creeper-explosion-radius.patch index 43671818b..2b0913a9b 100644 --- a/patches/server/0164-Config-for-health-to-impact-Creeper-explosion-radius.patch +++ b/patches/server/0164-Config-for-health-to-impact-Creeper-explosion-radius.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Config for health to impact Creeper explosion radius 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 f043b6da9649c8c9e6a9cf5172e95470d167443b..1a33d4e855a85b0a0d51c29dbb4042d30918684c 100644 +index 743d888c07450ea9e2367d169e20a583b51f7be0..a3cc2e3ae32984e11f4e91421d663f0fe7c7b236 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Creeper.java +++ b/src/main/java/net/minecraft/world/entity/monster/Creeper.java -@@ -371,9 +371,10 @@ public class Creeper extends Monster implements PowerableMob { +@@ -372,9 +372,10 @@ public class Creeper extends Monster implements PowerableMob { this.exploding = true; // Purpur if (!this.level().isClientSide) { float f = this.isPowered() ? 2.0F : 1.0F; @@ -21,7 +21,7 @@ index f043b6da9649c8c9e6a9cf5172e95470d167443b..1a33d4e855a85b0a0d51c29dbb4042d3 // CraftBukkit end this.dead = true; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 1af16bbaab355022d183e71828a866686347ec0f..59cb375fce3f2917d86617854a18dfa55766daf4 100644 +index 3d582716df3cbdec2f1c2dbaf567e829406c21a1..8694ba3aea41f83d16d0a761b922b6b248e5942f 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -928,6 +928,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0168-Add-config-change-multiplier-critical-damage-value.patch b/patches/server/0168-Add-config-change-multiplier-critical-damage-value.patch index 601f357bc..d1a32db26 100644 --- a/patches/server/0168-Add-config-change-multiplier-critical-damage-value.patch +++ b/patches/server/0168-Add-config-change-multiplier-critical-damage-value.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add config change multiplier critical damage value 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 ad4046a24f04845e794d1e446e12eb6c5c581d14..2289e7bc32e0d2833e73f9d21c37487cd369b25f 100644 +index 73f8aeb1b5253cfd7d5502d506677a3ef906625e..28dca8464a75487566e5d2efac1ec3fe42e6c410 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -1315,7 +1315,7 @@ public abstract class Player extends LivingEntity { +@@ -1316,7 +1316,7 @@ public abstract class Player extends LivingEntity { flag2 = flag2 && !this.level().paperConfig().entities.behavior.disablePlayerCrits; // Paper - Toggleable player crits flag2 = flag2 && !this.isSprinting(); if (flag2) { diff --git a/patches/server/0172-Bee-can-work-when-raining-or-at-night.patch b/patches/server/0172-Bee-can-work-when-raining-or-at-night.patch index f3846f5b8..236ce0a97 100644 --- a/patches/server/0172-Bee-can-work-when-raining-or-at-night.patch +++ b/patches/server/0172-Bee-can-work-when-raining-or-at-night.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Bee can work when raining or at night diff --git a/src/main/java/net/minecraft/world/entity/animal/Bee.java b/src/main/java/net/minecraft/world/entity/animal/Bee.java -index 0db5e35b8e4a186c8ef150a1b0f072e10573136e..a4c6ea94be1c1a610c6141328192a29052b9f157 100644 +index 52a7a8b35cf0f7b52d5de253b21f7713ab261544..8d80055253008bb1b2ed77e91a1c51c995208dac 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Bee.java +++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java @@ -406,7 +406,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { @@ -18,10 +18,10 @@ index 0db5e35b8e4a186c8ef150a1b0f072e10573136e..a4c6ea94be1c1a610c6141328192a290 return flag && !this.isHiveNearFire(); } else { diff --git a/src/main/java/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java -index 312ee43ad1a35918fc359f7ebb5742004212b931..8a163b5d3c7759abe4fe84bfec788a15fddc1e44 100644 +index b37b7f58d59616cd409bbab701659c8e8879ccc7..dc5bcf8f7662bd1feb4375605f27c320878bf7e0 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java -@@ -203,7 +203,7 @@ public class BeehiveBlockEntity extends BlockEntity { +@@ -207,7 +207,7 @@ public class BeehiveBlockEntity extends BlockEntity { } private static boolean releaseBee(Level world, BlockPos blockposition, BlockState iblockdata, BeehiveBlockEntity.BeeData tileentitybeehive_hivebee, @Nullable List list, BeehiveBlockEntity.BeeReleaseStatus tileentitybeehive_releasestatus, @Nullable BlockPos blockposition1, boolean force) { @@ -31,7 +31,7 @@ index 312ee43ad1a35918fc359f7ebb5742004212b931..8a163b5d3c7759abe4fe84bfec788a15 return false; } else { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index e50d8cb072acd403c285fee9a0df80e4d5946846..3973c8fb88ed33264e21d94b56425389c95b54a1 100644 +index 96d04052d419e4b74826c63fb4a687bf7490d4c1..7d89fc67d4f9b58697ff317a0c526be8e612e37a 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -764,6 +764,8 @@ public class PurpurWorldConfig { diff --git a/patches/server/0173-API-for-any-mob-to-burn-daylight.patch b/patches/server/0173-API-for-any-mob-to-burn-daylight.patch index d6f972e25..1f98cf2e9 100644 --- a/patches/server/0173-API-for-any-mob-to-burn-daylight.patch +++ b/patches/server/0173-API-for-any-mob-to-burn-daylight.patch @@ -6,10 +6,10 @@ Subject: [PATCH] API for any mob to burn daylight Co-authored by: Encode42 diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 7579c2d4c716695ab1854a055bc595d7b55201e5..f8f311e0e4715a8d648d743c0b5a664b7f004efe 100644 +index b14b99b8f0ce427da999e486bfed84ad38a19d8c..d79cbbcf0e6e6e6096e138be2617b727ea991c18 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -561,6 +561,21 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -562,6 +562,21 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S return true; } @@ -32,10 +32,10 @@ index 7579c2d4c716695ab1854a055bc595d7b55201e5..f8f311e0e4715a8d648d743c0b5a664b return this.hardCollides; } diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index e997844c0cead8eef82a8025283d43163b1a6848..1ebc5cfac7e7e47e1e9c10a90d707a4fa799ca43 100644 +index 926962fc5631faa4672c8dd2fdb72b9ef6947292..4af345c848040fabdde82b4f0493ba796a7fef1f 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -262,6 +262,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -263,6 +263,7 @@ public abstract class LivingEntity extends Entity implements Attackable { public org.bukkit.craftbukkit.entity.CraftLivingEntity getBukkitLivingEntity() { return (org.bukkit.craftbukkit.entity.CraftLivingEntity) super.getBukkitEntity(); } // Paper public boolean silentDeath = false; // Paper - mark entity as dying silently for cancellable death event public net.kyori.adventure.util.TriState frictionState = net.kyori.adventure.util.TriState.NOT_SET; // Paper - Friction API @@ -43,7 +43,7 @@ index e997844c0cead8eef82a8025283d43163b1a6848..1ebc5cfac7e7e47e1e9c10a90d707a4f @Override public float getBukkitYaw() { -@@ -803,6 +804,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -811,6 +812,7 @@ public abstract class LivingEntity extends Entity implements Attackable { dataresult.resultOrPartial(logger::error).ifPresent((nbtbase) -> { nbt.put("Brain", nbtbase); }); @@ -51,7 +51,7 @@ index e997844c0cead8eef82a8025283d43163b1a6848..1ebc5cfac7e7e47e1e9c10a90d707a4f } @Override -@@ -889,6 +891,11 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -897,6 +899,11 @@ public abstract class LivingEntity extends Entity implements Attackable { this.brain = this.makeBrain(new Dynamic(NbtOps.INSTANCE, nbt.get("Brain"))); } @@ -63,7 +63,7 @@ index e997844c0cead8eef82a8025283d43163b1a6848..1ebc5cfac7e7e47e1e9c10a90d707a4f } // CraftBukkit start -@@ -3599,6 +3606,27 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3607,6 +3614,27 @@ public abstract class LivingEntity extends Entity implements Attackable { this.hurt(this.damageSources().drown(), 1.0F); } @@ -92,10 +92,10 @@ index e997844c0cead8eef82a8025283d43163b1a6848..1ebc5cfac7e7e47e1e9c10a90d707a4f public boolean isSensitiveToWater() { diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index c5cf5e84893f137ee4bead287e80eb57ff1a7407..8588f230724e7fec2093b0b5c8c80b3d1944ce47 100644 +index 56ba7ac3d9d1f65de84f98eb724761d6bb374d47..380834677c93a23879a9e53173fa835ebd22f584 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java -@@ -1765,17 +1765,7 @@ public abstract class Mob extends LivingEntity implements Targeting { +@@ -1766,17 +1766,7 @@ public abstract class Mob extends LivingEntity implements Targeting { } public boolean isSunBurnTick() { @@ -354,10 +354,10 @@ index 94b92c6e588f871d4b0d86bb8f860a99e473a4ea..e568d014f577ab705645152446156dc0 // Paper end - Add more Zombie API diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -index a260e3768892dcf7ddd955cf8753d4d19cd2e8d3..9304a2d06400dfa244ddb4d9591de988b334c3cf 100644 +index 61348dfaab2fe3da35ae3195b7224e4b239dddd8..897f9f5d25c674f167530810c0b94bca83c3c3cc 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -@@ -83,6 +83,11 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { +@@ -84,6 +84,11 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { this.entityType = CraftEntityType.minecraftToBukkit(entity.getType()); } @@ -370,7 +370,7 @@ index a260e3768892dcf7ddd955cf8753d4d19cd2e8d3..9304a2d06400dfa244ddb4d9591de988 Preconditions.checkArgument(entity != null, "Unknown entity"); diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -index 1bcd9d9729952e68c56ff6e169ace11611b44e97..332c553db22aaeb0cda5e628c5e464e130c7abb0 100644 +index 1d889c7476149431693f4c6125857f33c89b13a2..9730a5469f81687cfde0a19a58d1c2147588d1d2 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java @@ -1173,5 +1173,15 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { diff --git a/patches/server/0176-Add-toggle-for-sand-duping-fix.patch b/patches/server/0176-Add-toggle-for-sand-duping-fix.patch index 28ace66b0..62529b0eb 100644 --- a/patches/server/0176-Add-toggle-for-sand-duping-fix.patch +++ b/patches/server/0176-Add-toggle-for-sand-duping-fix.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add toggle for sand duping fix diff --git a/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java b/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java -index 9daf8aa557d9f4fdbcc138a47892ea5a061dd877..3a25741693a8fd08ac4308da3f178155c28bf46b 100644 +index 0aef6a8d51cb1351daaea16022f5cbb27ceaff0d..65cb5994142351e2b19f6d4ff2963f9ae7752205 100644 --- a/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java +++ b/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java -@@ -133,7 +133,7 @@ public class FallingBlockEntity extends Entity { +@@ -134,7 +134,7 @@ public class FallingBlockEntity extends Entity { @Override public void tick() { // Paper start - fix sand duping @@ -17,7 +17,7 @@ index 9daf8aa557d9f4fdbcc138a47892ea5a061dd877..3a25741693a8fd08ac4308da3f178155 return; } // Paper end - fix sand duping -@@ -149,7 +149,7 @@ public class FallingBlockEntity extends Entity { +@@ -150,7 +150,7 @@ public class FallingBlockEntity extends Entity { this.move(MoverType.SELF, this.getDeltaMovement()); // Paper start - fix sand duping @@ -27,7 +27,7 @@ index 9daf8aa557d9f4fdbcc138a47892ea5a061dd877..3a25741693a8fd08ac4308da3f178155 } // Paper end - fix sand duping diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 072387303cf013876e6d13ccd6646e7f197bf7ac..77fa5b91ac5a65d2dce6195214c39dbff4aa6c8b 100644 +index 991e8491c5bc254eb2ba0cbdcd06cb410d286fbb..6fb87c1ab0397d4c659dc69f33d0a4743c4d0dcd 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -683,6 +683,11 @@ public class PurpurWorldConfig { diff --git a/patches/server/0177-Add-toggle-for-end-portal-safe-teleporting.patch b/patches/server/0177-Add-toggle-for-end-portal-safe-teleporting.patch index a6e721182..f93f429e6 100644 --- a/patches/server/0177-Add-toggle-for-end-portal-safe-teleporting.patch +++ b/patches/server/0177-Add-toggle-for-end-portal-safe-teleporting.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add toggle for end portal safe teleporting diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index f8f311e0e4715a8d648d743c0b5a664b7f004efe..079cf12c01df7ebb1c9c29a4efa1b94dea4d0d78 100644 +index d79cbbcf0e6e6e6096e138be2617b727ea991c18..c868a61d73b4563807c70c9539f63cb0645a9984 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -3222,7 +3222,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3238,7 +3238,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } this.processPortalCooldown(); diff --git a/patches/server/0179-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch b/patches/server/0179-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch index 94efa07bf..d238d9ca5 100644 --- a/patches/server/0179-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch +++ b/patches/server/0179-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Burp delay, burp after eating food fills hunger bar 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 2289e7bc32e0d2833e73f9d21c37487cd369b25f..5259d5a17b162700737acc5583560784aea10d9f 100644 +index 28dca8464a75487566e5d2efac1ec3fe42e6c410..f8b444583cc48a18a68c860ba933c0c1834578be 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -183,6 +183,7 @@ public abstract class Player extends LivingEntity { +@@ -184,6 +184,7 @@ public abstract class Player extends LivingEntity { public boolean affectsSpawning = true; // Paper - Affects Spawning API public net.kyori.adventure.util.TriState flyingFallDamage = net.kyori.adventure.util.TriState.NOT_SET; // Paper - flying fall damage public int sixRowEnderchestSlotCount = -1; // Purpur @@ -17,7 +17,7 @@ index 2289e7bc32e0d2833e73f9d21c37487cd369b25f..5259d5a17b162700737acc5583560784 // CraftBukkit start public boolean fauxSleeping; -@@ -258,6 +259,12 @@ public abstract class Player extends LivingEntity { +@@ -259,6 +260,12 @@ public abstract class Player extends LivingEntity { @Override public void tick() { @@ -30,7 +30,7 @@ index 2289e7bc32e0d2833e73f9d21c37487cd369b25f..5259d5a17b162700737acc5583560784 this.noPhysics = this.isSpectator(); if (this.isSpectator()) { this.setOnGround(false); -@@ -2314,7 +2321,7 @@ public abstract class Player extends LivingEntity { +@@ -2322,7 +2329,7 @@ public abstract class Player extends LivingEntity { public ItemStack eat(Level world, ItemStack stack) { this.getFoodData().eat(stack.getItem(), stack); this.awardStat(Stats.ITEM_USED.get(stack.getItem())); diff --git a/patches/server/0180-Allow-player-join-full-server-by-permission.patch b/patches/server/0180-Allow-player-join-full-server-by-permission.patch index 0faea0bc0..3b366ffbe 100644 --- a/patches/server/0180-Allow-player-join-full-server-by-permission.patch +++ b/patches/server/0180-Allow-player-join-full-server-by-permission.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Allow player join full server by permission diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 1f17abac0d9ae19b2d3a5c28a19a6e8a69b6e380..d1afad129159d5ce7cf9530a7dfb6ed5b4fa25f3 100644 +index 89ba5789c6d6e4fe8360a854f0a6123036a5a792..1b8b0bafce3352bd65d570ac7cb4ea3acdfe991d 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -754,7 +754,7 @@ public abstract class PlayerList { +@@ -755,7 +755,7 @@ public abstract class PlayerList { event.disallow(PlayerLoginEvent.Result.KICK_BANNED, io.papermc.paper.adventure.PaperAdventure.asAdventure(ichatmutablecomponent)); // Paper - Adventure } else { // return this.players.size() >= this.maxPlayers && !this.canBypassPlayerLimit(gameprofile) ? IChatBaseComponent.translatable("multiplayer.disconnect.server_full") : null; diff --git a/patches/server/0181-Add-portal-permission-bypass.patch b/patches/server/0181-Add-portal-permission-bypass.patch index 4558e651a..a5beb57f1 100644 --- a/patches/server/0181-Add-portal-permission-bypass.patch +++ b/patches/server/0181-Add-portal-permission-bypass.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add portal permission bypass 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 5259d5a17b162700737acc5583560784aea10d9f..0fba4859f63c272a1256d3d6cde23609cd165708 100644 +index f8b444583cc48a18a68c860ba933c0c1834578be..992ac6cfba700839259b973fa1eabb5ce6c301af 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -184,6 +184,7 @@ public abstract class Player extends LivingEntity { +@@ -185,6 +185,7 @@ public abstract class Player extends LivingEntity { public net.kyori.adventure.util.TriState flyingFallDamage = net.kyori.adventure.util.TriState.NOT_SET; // Paper - flying fall damage public int sixRowEnderchestSlotCount = -1; // Purpur public int burpDelay = 0; // Purpur @@ -16,7 +16,7 @@ index 5259d5a17b162700737acc5583560784aea10d9f..0fba4859f63c272a1256d3d6cde23609 // CraftBukkit start public boolean fauxSleeping; -@@ -475,7 +476,7 @@ public abstract class Player extends LivingEntity { +@@ -476,7 +477,7 @@ public abstract class Player extends LivingEntity { @Override public int getPortalWaitTime() { diff --git a/patches/server/0190-Summoner-API.patch b/patches/server/0190-Summoner-API.patch index f8156e216..42edefcb0 100644 --- a/patches/server/0190-Summoner-API.patch +++ b/patches/server/0190-Summoner-API.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Summoner API diff --git a/src/main/java/net/minecraft/world/entity/animal/IronGolem.java b/src/main/java/net/minecraft/world/entity/animal/IronGolem.java -index 1ffb8e1c386fc85796432281ac407a935169b186..c2817324ff57860ea2628dc4ac8e78b76cf67a5a 100644 +index 75a44fdb1228233ac2abe1d33bde8d978a8a994b..02506902ca7e6f4e4c0fea47499cb8766e33960f 100644 --- a/src/main/java/net/minecraft/world/entity/animal/IronGolem.java +++ b/src/main/java/net/minecraft/world/entity/animal/IronGolem.java @@ -60,6 +60,7 @@ public class IronGolem extends AbstractGolem implements NeutralMob { @@ -49,7 +49,7 @@ index 1ffb8e1c386fc85796432281ac407a935169b186..c2817324ff57860ea2628dc4ac8e78b7 } diff --git a/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java b/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java -index a1efde792eaa3f80cd0c7c48e38bbd07e1eb5c9d..20f2fd0edf290d448d06e4772b5947fc7865c20b 100644 +index d46ab4d56e4c34b4dbe7a3df0785ab8745fcd3b9..81a88d510d7f52ca6a1c9cca991c22c3bdaf6b0d 100644 --- a/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java +++ b/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java @@ -49,6 +49,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM @@ -93,10 +93,10 @@ index a1efde792eaa3f80cd0c7c48e38bbd07e1eb5c9d..20f2fd0edf290d448d06e4772b5947fc } 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 81084ec809a2c4602d92f3736fab4eeaf80e6fa4..2447d89f1219736bda0ee80bb5dcf11cc61f5863 100644 +index 06f4bbbbdf3a3c49035df9edc258e6bda87b53fc..b5ce9576ce7e91204f981c86fe70abb4cd0f267f 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,6 +84,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob +@@ -85,6 +85,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob return entityliving.getMobType() != MobType.UNDEAD && entityliving.attackable(); }; private static final TargetingConditions TARGETING_CONDITIONS = TargetingConditions.forCombat().range(20.0D).selector(WitherBoss.LIVING_ENTITY_SELECTOR); @@ -104,7 +104,7 @@ index 81084ec809a2c4602d92f3736fab4eeaf80e6fa4..2447d89f1219736bda0ee80bb5dcf11c private int shootCooldown = 0; // Purpur // Paper start private boolean canPortal = false; -@@ -122,6 +123,15 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob +@@ -123,6 +124,15 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob return this.level().purpurConfig.witherTakeDamageFromWater; } @@ -120,7 +120,7 @@ index 81084ec809a2c4602d92f3736fab4eeaf80e6fa4..2447d89f1219736bda0ee80bb5dcf11c @Override protected PathNavigation createNavigation(Level world) { FlyingPathNavigation navigationflying = new FlyingPathNavigation(this, world); -@@ -256,6 +266,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob +@@ -257,6 +267,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob public void addAdditionalSaveData(CompoundTag nbt) { super.addAdditionalSaveData(nbt); nbt.putInt("Invul", this.getInvulnerableTicks()); @@ -128,7 +128,7 @@ index 81084ec809a2c4602d92f3736fab4eeaf80e6fa4..2447d89f1219736bda0ee80bb5dcf11c } @Override -@@ -265,6 +276,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob +@@ -266,6 +277,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob if (this.hasCustomName()) { this.bossEvent.setName(this.getDisplayName()); } @@ -137,7 +137,7 @@ index 81084ec809a2c4602d92f3736fab4eeaf80e6fa4..2447d89f1219736bda0ee80bb5dcf11c } diff --git a/src/main/java/net/minecraft/world/level/block/CarvedPumpkinBlock.java b/src/main/java/net/minecraft/world/level/block/CarvedPumpkinBlock.java -index a63733fa01dc58b3c0abb28c1cd88c8b0a456083..75ef899fcd063dd7770aefaca69a6936cccfa620 100644 +index cdd7ab3fe589d089c0c03508721f46f6c136fc8a..6f148028c0fe503e9f6b327596d0954ce9e53269 100644 --- a/src/main/java/net/minecraft/world/level/block/CarvedPumpkinBlock.java +++ b/src/main/java/net/minecraft/world/level/block/CarvedPumpkinBlock.java @@ -71,7 +71,7 @@ public class CarvedPumpkinBlock extends HorizontalDirectionalBlock { diff --git a/patches/server/0194-Player-ridable-in-water-option.patch b/patches/server/0194-Player-ridable-in-water-option.patch index f62998695..bfb3f2490 100644 --- a/patches/server/0194-Player-ridable-in-water-option.patch +++ b/patches/server/0194-Player-ridable-in-water-option.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Player ridable in water option 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 0fba4859f63c272a1256d3d6cde23609cd165708..d0204938816f3e74b0845b9a62f4b6ad44d2dd02 100644 +index 992ac6cfba700839259b973fa1eabb5ce6c301af..e8000f236d3ec0476ec782f08e159eea6c99476a 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -2042,6 +2042,11 @@ public abstract class Player extends LivingEntity { +@@ -2050,6 +2050,11 @@ public abstract class Player extends LivingEntity { return this.inventory.armor; } diff --git a/patches/server/0197-Toggle-for-kinetic-damage.patch b/patches/server/0197-Toggle-for-kinetic-damage.patch index 12c2ce5ab..0870cdd65 100644 --- a/patches/server/0197-Toggle-for-kinetic-damage.patch +++ b/patches/server/0197-Toggle-for-kinetic-damage.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Toggle for kinetic damage diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 1ebc5cfac7e7e47e1e9c10a90d707a4fa799ca43..567fbb4cee7221b9b24b982c97546f353ce124cd 100644 +index 4af345c848040fabdde82b4f0493ba796a7fef1f..9f542c8ddb25faaef00d5db354f1c1fe3cfc3c45 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -2946,6 +2946,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -2954,6 +2954,7 @@ public abstract class LivingEntity extends Entity implements Attackable { if (f3 > 0.0F) { this.playSound(this.getFallDamageSound((int) f3), 1.0F, 1.0F); diff --git a/patches/server/0201-Toggle-for-Wither-s-spawn-sound.patch b/patches/server/0201-Toggle-for-Wither-s-spawn-sound.patch index 3751ca82e..a320fbf38 100644 --- a/patches/server/0201-Toggle-for-Wither-s-spawn-sound.patch +++ b/patches/server/0201-Toggle-for-Wither-s-spawn-sound.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Toggle for Wither's spawn sound 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 b449a7f16bfe591d0659e991c2c1c9ed4ec64dc8..d50b8c407ed30c0bb46159994c1b0e310a15e33a 100644 +index b5ce9576ce7e91204f981c86fe70abb4cd0f267f..461247f3424b854032ccd45855c877aa85dd2e88 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 -@@ -425,7 +425,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob +@@ -426,7 +426,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob } // CraftBukkit end @@ -18,7 +18,7 @@ index b449a7f16bfe591d0659e991c2c1c9ed4ec64dc8..d50b8c407ed30c0bb46159994c1b0e31 // this.level().globalLevelEvent(1023, new BlockPosition(this), 0); int viewDistance = ((ServerLevel) this.level()).getCraftServer().getViewDistance() * 16; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 355e953d2050750aef6b243a5b287a4ab75818be..5d4aa302fca63909f6cee2fea4182da17b270201 100644 +index deba979e6987f60308c6b4a286943b18aa2974f4..8d726d509e4c0693ff06ee3c43b5af23ee7f9806 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -2682,6 +2682,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0213-Dolphins-naturally-aggressive-to-players-chance.patch b/patches/server/0213-Dolphins-naturally-aggressive-to-players-chance.patch index 8da2f38ea..13d657fb6 100644 --- a/patches/server/0213-Dolphins-naturally-aggressive-to-players-chance.patch +++ b/patches/server/0213-Dolphins-naturally-aggressive-to-players-chance.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Dolphins naturally aggressive to players chance 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 75585a6b275fafbc5ef112d9de4926b77fcb3781..0453ba99a640855c6e13cb1e1d82929842f240ea 100644 +index 21e804d391478c613f4f89076fd268a9eb2e2ecf..9c35059d390c94f6d641c0fe8d37777fcf1b29f3 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java +++ b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java -@@ -82,6 +82,7 @@ public class Dolphin extends WaterAnimal { +@@ -83,6 +83,7 @@ public class Dolphin extends WaterAnimal { public static final Predicate ALLOWED_ITEMS = (entityitem) -> { return !entityitem.hasPickUpDelay() && entityitem.isAlive() && entityitem.isInWater(); }; @@ -16,7 +16,7 @@ index 75585a6b275fafbc5ef112d9de4926b77fcb3781..0453ba99a640855c6e13cb1e1d829298 private int spitCooldown; // Purpur public Dolphin(EntityType type, Level world) { -@@ -173,6 +174,7 @@ public class Dolphin extends WaterAnimal { +@@ -174,6 +175,7 @@ public class Dolphin extends WaterAnimal { public SpawnGroupData finalizeSpawn(ServerLevelAccessor world, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData entityData, @Nullable CompoundTag entityNbt) { this.setAirSupply(this.getMaxAirSupply()); this.setXRot(0.0F); @@ -24,7 +24,7 @@ index 75585a6b275fafbc5ef112d9de4926b77fcb3781..0453ba99a640855c6e13cb1e1d829298 return super.finalizeSpawn(world, difficulty, spawnReason, entityData, entityNbt); } -@@ -237,6 +239,7 @@ public class Dolphin extends WaterAnimal { +@@ -238,6 +240,7 @@ public class Dolphin extends WaterAnimal { protected void registerGoals() { this.goalSelector.addGoal(0, new BreathAirGoal(this)); this.goalSelector.addGoal(0, new TryFindWaterGoal(this)); @@ -32,7 +32,7 @@ index 75585a6b275fafbc5ef112d9de4926b77fcb3781..0453ba99a640855c6e13cb1e1d829298 this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur this.goalSelector.addGoal(1, new Dolphin.DolphinSwimToTreasureGoal(this)); this.goalSelector.addGoal(2, new Dolphin.DolphinSwimWithPlayerGoal(this, 4.0D)); -@@ -244,12 +247,13 @@ public class Dolphin extends WaterAnimal { +@@ -245,12 +248,13 @@ public class Dolphin extends WaterAnimal { this.goalSelector.addGoal(4, new RandomLookAroundGoal(this)); this.goalSelector.addGoal(5, new LookAtPlayerGoal(this, Player.class, 6.0F)); this.goalSelector.addGoal(5, new DolphinJumpGoal(this, 10)); @@ -48,7 +48,7 @@ index 75585a6b275fafbc5ef112d9de4926b77fcb3781..0453ba99a640855c6e13cb1e1d829298 public static AttributeSupplier.Builder createAttributes() { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 857df6dd4d1d598857d977107dcabbb25307ceab..727a70ef18192e27736ecdd6775711a17f8ce79b 100644 +index 83da28a7edb4b101138034ed6ac71a0ae36a091b..a46cbcd6393cf27a919405db0bfb4903b2f6e6fd 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -1342,6 +1342,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0215-Option-for-beds-to-explode-on-villager-sleep.patch b/patches/server/0215-Option-for-beds-to-explode-on-villager-sleep.patch index 0a1f3fd1d..d914b2c63 100644 --- a/patches/server/0215-Option-for-beds-to-explode-on-villager-sleep.patch +++ b/patches/server/0215-Option-for-beds-to-explode-on-villager-sleep.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Option for beds to explode on villager sleep 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 6857eeb9a93850594cbdb634dfbdf6cb6d82ced5..20b3872b1f8464579ddd4324c9b09170f8ae4778 100644 +index ee509b5eea71c17ff466fb93fe63168710065add..d2b6d094c4b93055a4e6622372c6a0a83bd992a3 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -1110,6 +1110,12 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -1111,6 +1111,12 @@ public class Villager extends AbstractVillager implements ReputationEventHandler @Override public void startSleeping(BlockPos pos) { @@ -22,7 +22,7 @@ index 6857eeb9a93850594cbdb634dfbdf6cb6d82ced5..20b3872b1f8464579ddd4324c9b09170 this.brain.setMemory(MemoryModuleType.LAST_SLEPT, this.level().getGameTime()); // CraftBukkit - decompile error this.brain.eraseMemory(MemoryModuleType.WALK_TARGET); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index e967ce42a54d97f28e50509167c7c7ac693a285b..83e4255059ca68f1fef3a8915662db28a98109b3 100644 +index 60643dc828b134d1a3956a280b1fc72348b0bd5c..8703e603f4c45fc79b0a44dd22e8497060421254 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -824,6 +824,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0220-options-to-extinguish-fire-blocks-with-snowballs.patch b/patches/server/0220-options-to-extinguish-fire-blocks-with-snowballs.patch index 36bd3a042..8129534f5 100644 --- a/patches/server/0220-options-to-extinguish-fire-blocks-with-snowballs.patch +++ b/patches/server/0220-options-to-extinguish-fire-blocks-with-snowballs.patch @@ -5,11 +5,11 @@ Subject: [PATCH] options to extinguish fire blocks with snowballs diff --git a/src/main/java/net/minecraft/world/entity/projectile/Snowball.java b/src/main/java/net/minecraft/world/entity/projectile/Snowball.java -index b90cedad282e95a067aca176fafa9f72a726f520..440d3d72d8b2dac14f83a83caa5ae9dbf3e979b6 100644 +index 8d1591c3b29e02794f6f66b742ec6a121920ad71..bb61e1132c28274175215a679befdcfa2496b099 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/Snowball.java +++ b/src/main/java/net/minecraft/world/entity/projectile/Snowball.java -@@ -57,6 +57,36 @@ public class Snowball extends ThrowableItemProjectile { - entity.hurt(this.damageSources().thrown(this, this.getOwner()), (float)i); +@@ -63,6 +63,36 @@ public class Snowball extends ThrowableItemProjectile { + entity.hurt(this.damageSources().thrown(this, this.getOwner()), (float) i); } + // Purpur start - borrowed and modified code from ThrownPotion#onHitBlock and ThrownPotion#dowseFire @@ -46,7 +46,7 @@ index b90cedad282e95a067aca176fafa9f72a726f520..440d3d72d8b2dac14f83a83caa5ae9db protected void onHit(HitResult hitResult) { super.onHit(hitResult); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index a7beb70988183ddcaf6bb2ef846eb9c640af46b0..aa8f7692a2638b176e9db935bf1331ee09fc9993 100644 +index 2b0093b9f30d5fe2c53b4a3fd02ad813d5aad555..2c3ea77d66f889fddde73bd49e6607aa2a0c3ad9 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -231,6 +231,9 @@ public class PurpurWorldConfig { diff --git a/patches/server/0225-Mobs-always-drop-experience.patch b/patches/server/0225-Mobs-always-drop-experience.patch index ec435109c..4f88524a7 100644 --- a/patches/server/0225-Mobs-always-drop-experience.patch +++ b/patches/server/0225-Mobs-always-drop-experience.patch @@ -21,7 +21,7 @@ index d04e48d6a0a6dc7825a3e3d4cf854e294a75d19c..b18cbe85330e26de6f6cbfcc3d51a741 protected ParticleOptions getInkParticle() { return ParticleTypes.GLOW_SQUID_INK; diff --git a/src/main/java/net/minecraft/world/entity/ambient/Bat.java b/src/main/java/net/minecraft/world/entity/ambient/Bat.java -index 980f2426a5052117f03ebb1ed3f7882b236ad86e..bae3c516b0d13358603576d87a18602a0522a9ff 100644 +index 08190c45b0807079b77c41203502e355ecaf2e14..735445456bbfab8a64df488fed30f0be28d50159 100644 --- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java +++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java @@ -285,6 +285,11 @@ public class Bat extends AmbientCreature { @@ -37,7 +37,7 @@ index 980f2426a5052117f03ebb1ed3f7882b236ad86e..bae3c516b0d13358603576d87a18602a public void readAdditionalSaveData(CompoundTag nbt) { super.readAdditionalSaveData(nbt); diff --git a/src/main/java/net/minecraft/world/entity/animal/Bee.java b/src/main/java/net/minecraft/world/entity/animal/Bee.java -index a4c6ea94be1c1a610c6141328192a29052b9f157..6d7b8c9f9bfe296263f1752f485dcf8f53af8142 100644 +index 8d80055253008bb1b2ed77e91a1c51c995208dac..9fa937d2d6c3b23e390447e4d4fa24543e2679e5 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Bee.java +++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java @@ -493,6 +493,11 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { @@ -53,7 +53,7 @@ index a4c6ea94be1c1a610c6141328192a29052b9f157..6d7b8c9f9bfe296263f1752f485dcf8f public int getRemainingPersistentAngerTime() { return (Integer) this.entityData.get(Bee.DATA_REMAINING_ANGER_TIME); diff --git a/src/main/java/net/minecraft/world/entity/animal/Cat.java b/src/main/java/net/minecraft/world/entity/animal/Cat.java -index 9a40cd8d7d4789a8b43f5194bdc67dc6753eed21..6e5b4a50b8d2dddbd7f099426b4866b35bcb798a 100644 +index d9b19f74b377721ed78cd0ea24d25e412cef1398..6af5e1dfcfd739e0bc857f648c189151d5a795c8 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cat.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cat.java @@ -138,6 +138,11 @@ public class Cat extends TamableAnimal implements VariantHolder { @@ -101,7 +101,7 @@ index 2343325fa9a771de7b9445cda24a2bcd7a7c1761..f0b6118a9995bb41836685bbf94d2e7f public ItemStack getBucketItemStack() { return new ItemStack(Items.COD_BUCKET); diff --git a/src/main/java/net/minecraft/world/entity/animal/Cow.java b/src/main/java/net/minecraft/world/entity/animal/Cow.java -index 3c12e179861b5514e081d0db1664f7173955629c..6d00b3cd4a9cb0fc8a9e9c27f37429a25fcf6e9d 100644 +index da3dfa10e08750e7ad84ff32a0c0136e055ee3a7..be4ccc42d6f598cbaaf39aafbd49b594ac7b06fe 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cow.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cow.java @@ -87,6 +87,11 @@ public class Cow extends Animal { @@ -117,10 +117,10 @@ index 3c12e179861b5514e081d0db1664f7173955629c..6d00b3cd4a9cb0fc8a9e9c27f37429a2 protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); 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 0453ba99a640855c6e13cb1e1d82929842f240ea..ed2769d8049bb304c1ee3b8e162046855951a624 100644 +index 9c35059d390c94f6d641c0fe8d37777fcf1b29f3..61bb29de8f1eaa833db95fcc38ab6e18c1a2243c 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java +++ b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java -@@ -169,6 +169,11 @@ public class Dolphin extends WaterAnimal { +@@ -170,6 +170,11 @@ public class Dolphin extends WaterAnimal { return this.level().purpurConfig.dolphinTakeDamageFromWater; } @@ -133,10 +133,10 @@ index 0453ba99a640855c6e13cb1e1d82929842f240ea..ed2769d8049bb304c1ee3b8e16204685 @Override public SpawnGroupData finalizeSpawn(ServerLevelAccessor world, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData entityData, @Nullable CompoundTag entityNbt) { 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 c8efa4029136d0cd54a5f73f003e022511cc7c8b..77d40aad6e336cac7ee4e4adef159571181ba44a 100644 +index 1e04205a1707e46a1f540f5c8f6ec1b81bf1b5d7..445c1993a18da93e89792b7953e5eb71777c7874 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Fox.java +++ b/src/main/java/net/minecraft/world/entity/animal/Fox.java -@@ -198,6 +198,11 @@ public class Fox extends Animal implements VariantHolder { +@@ -202,6 +202,11 @@ public class Fox extends Animal implements VariantHolder { return this.level().purpurConfig.foxTakeDamageFromWater; } @@ -149,7 +149,7 @@ index c8efa4029136d0cd54a5f73f003e022511cc7c8b..77d40aad6e336cac7ee4e4adef159571 protected void defineSynchedData() { super.defineSynchedData(); diff --git a/src/main/java/net/minecraft/world/entity/animal/IronGolem.java b/src/main/java/net/minecraft/world/entity/animal/IronGolem.java -index c2817324ff57860ea2628dc4ac8e78b76cf67a5a..64aba511e615983988cdb6a0fd45b7d9d4f2f16d 100644 +index 02506902ca7e6f4e4c0fea47499cb8766e33960f..442eb602f5c82550a87e218e2013171b718abd62 100644 --- a/src/main/java/net/minecraft/world/entity/animal/IronGolem.java +++ b/src/main/java/net/minecraft/world/entity/animal/IronGolem.java @@ -103,6 +103,11 @@ public class IronGolem extends AbstractGolem implements NeutralMob { @@ -165,10 +165,10 @@ index c2817324ff57860ea2628dc4ac8e78b76cf67a5a..64aba511e615983988cdb6a0fd45b7d9 protected void registerGoals() { if (level().purpurConfig.ironGolemCanSwim) this.goalSelector.addGoal(0, new net.minecraft.world.entity.ai.goal.FloatGoal(this)); // Purpur 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 7bd539ed5fea0d4db8e97722bd9bd37e6563185d..5d75e715a2edac73350cd74e2a5184e7fccbad53 100644 +index 5cf206bea6d2f3155c1da73d8337bbd8e2ee7bb3..48ee8c43a91efaadacfe8f37399ea1fb81f5f1ee 100644 --- a/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java +++ b/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java -@@ -95,6 +95,11 @@ public class MushroomCow extends Cow implements Shearable, VariantHolder getModelRotationValues() { return this.modelRotationValues; diff --git a/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java b/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java -index 26062173d137e26abdc452f7b2e0be0ee6dddfa3..fba00cab2c4b234dd2e85b5f4dcd0db34183c1a2 100644 +index 5b3126168e9406f6cbd0607b6b7cc2de4ab68b65..f7730ec3a6c8818baf2a7a738e5a49a56d17c0e8 100644 --- a/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java +++ b/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java @@ -119,6 +119,11 @@ public class Goat extends Animal { @@ -469,7 +469,7 @@ index f8dbea402f723bf38d7ab3f2468d1b02b7124560..3b1faa63e46a48e83ea672cf6da444a1 protected void randomizeAttributes(RandomSource random) { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue((double)generateMaxHealth(random::nextInt)); diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java b/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java -index 8d57bf9bbd1f61e6f1509c8b5cf01756ef145571..b414572411e5b2b78fd66e860273656d53df9d9d 100644 +index 30493e675d6308d65a4d4fa3fea601b6d7e4fa76..22abcf70f51a6752ab6d3f421366adb196e50dfc 100644 --- a/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java +++ b/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java @@ -150,6 +150,11 @@ public class Llama extends AbstractChestedHorse implements VariantHolder brainProvider() { return Brain.provider(MEMORY_TYPES, SENSOR_TYPES); diff --git a/src/main/java/net/minecraft/world/entity/monster/Zombie.java b/src/main/java/net/minecraft/world/entity/monster/Zombie.java -index 728f4f2d7c37e253b0dab752f627a7b6c4e8339c..f6dd5fd56926215830ccebbd46098d4bc08e17e4 100644 +index 9e373fa5eba63ed061e666510e01a6d8cdd6997b..c531d830f4d6b2d2213e160d7e1a5b50b80dbea5 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java @@ -147,6 +147,11 @@ public class Zombie extends Monster { @@ -1045,7 +1045,7 @@ index 728f4f2d7c37e253b0dab752f627a7b6c4e8339c..f6dd5fd56926215830ccebbd46098d4b protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur diff --git a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java -index faf03e2c69b6b4ee7d7425322b5b19974e37cb85..4d744e00bbaf25d1bad3782a6415e9bf5958e536 100644 +index f902814a23ef8a7d3893fc0349d1a0b3c203a123..712f77d4ddad04c7cd89d51c6d0c79c2f3ab9347 100644 --- a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java +++ b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java @@ -129,6 +129,11 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { @@ -1061,7 +1061,7 @@ index faf03e2c69b6b4ee7d7425322b5b19974e37cb85..4d744e00bbaf25d1bad3782a6415e9bf protected void defineSynchedData() { super.defineSynchedData(); diff --git a/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java b/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java -index 3574a1e641d8af34a0ff7ea8dcfb08641cf6ace0..df8c7a45eb49a8c667030eb67d6d49dcbaef4fcf 100644 +index e6b653c75a4c3306e06bfcadb4c4b53bccd5aad2..feba8a264bae656244f60296d0511a8046297f73 100644 --- a/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java @@ -106,6 +106,11 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { @@ -1077,7 +1077,7 @@ index 3574a1e641d8af34a0ff7ea8dcfb08641cf6ace0..df8c7a45eb49a8c667030eb67d6d49dc public void setPersistentAngerTarget(@Nullable UUID angryAt) { this.persistentAngerTarget = angryAt; diff --git a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java -index d0144c99cf5c755c81fc0f9457b462c98ff3e804..e326e753cc6bca1bd00287d16c9796b9f3dd4d14 100644 +index 7a167887c40eccea4c216eb906a4a69006f72114..510ee1aee1dd106b5129c375ebb59c7950b8b989 100644 --- a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java @@ -101,6 +101,11 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { @@ -1093,7 +1093,7 @@ index d0144c99cf5c755c81fc0f9457b462c98ff3e804..e326e753cc6bca1bd00287d16c9796b9 public boolean canBeLeashed(Player player) { return !this.isLeashed(); diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java -index e506dcf390ecb5cce8ae6993df7ec91b3ebc125e..9ca1618ab945ad834c5fc221ada49058f806e79c 100644 +index 20ecfcbe948d02bb61b8f673f5330d2f9e60c387..141fa7d4e1b81e90f4d63a3459c9a72bc595d30b 100644 --- a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java @@ -123,6 +123,11 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento @@ -1125,10 +1125,10 @@ index b63d87df0f48dd63c89118f91b31dc4e3622e3b8..61e8f2d030fc50840c3f80dfb6fc8107 return Monster.createMonsterAttributes().add(Attributes.MAX_HEALTH, 50.0D).add(Attributes.MOVEMENT_SPEED, (double)0.35F).add(Attributes.ATTACK_DAMAGE, 7.0D); } 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 20b3872b1f8464579ddd4324c9b09170f8ae4778..9c86dc4b9cd558f0e8f97b63d6cab746bd30d10c 100644 +index d2b6d094c4b93055a4e6622372c6a0a83bd992a3..19a3e88ce5ccdd74b049246eb51eaa0783d03d5d 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -195,6 +195,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -196,6 +196,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler return this.level().purpurConfig.villagerTakeDamageFromWater; } @@ -1141,10 +1141,10 @@ index 20b3872b1f8464579ddd4324c9b09170f8ae4778..9c86dc4b9cd558f0e8f97b63d6cab746 public Brain getBrain() { return (Brain) super.getBrain(); // CraftBukkit - decompile error 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 d672c1e381e5c4a4b79a1dfb96f1410ec35cb1b5..08320248a6956d41d60681e3d29f81768c80fd3d 100644 +index 657fdbabf18da7ab321e8e95a31d53362c605380..21a7cc86245d2440b8fc757d3664a29de293f7b0 100644 --- a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java +++ b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java -@@ -102,6 +102,11 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill +@@ -103,6 +103,11 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill return this.level().purpurConfig.wanderingTraderTakeDamageFromWater; } @@ -1157,7 +1157,7 @@ index d672c1e381e5c4a4b79a1dfb96f1410ec35cb1b5..08320248a6956d41d60681e3d29f8176 protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index ed4c29795aae72d16e26d126888944204cae0291..108554529587f6e7ba56d1eabff8f061a74cc1b0 100644 +index 3683277077ed77fa804f5678127ba2b65bc070e7..6dc882c14f1dfd0dd7d37d595f86f387f52fff7f 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -1109,12 +1109,14 @@ public class PurpurWorldConfig { diff --git a/patches/server/0230-Mob-head-visibility-percent.patch b/patches/server/0230-Mob-head-visibility-percent.patch index ed990d8c9..20b3c6ed3 100644 --- a/patches/server/0230-Mob-head-visibility-percent.patch +++ b/patches/server/0230-Mob-head-visibility-percent.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Mob head visibility percent diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 567fbb4cee7221b9b24b982c97546f353ce124cd..39784ca82aa79097067df62d859eb13ca6fb27b1 100644 +index 9f542c8ddb25faaef00d5db354f1c1fe3cfc3c45..99c5cd7f20435be1f78cfed4f952e4c7ddfb69e8 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -1041,9 +1041,20 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1049,9 +1049,20 @@ public abstract class LivingEntity extends Entity implements Attackable { ItemStack itemstack = this.getItemBySlot(EquipmentSlot.HEAD); EntityType entitytypes = entity.getType(); diff --git a/patches/server/0231-Configurable-valid-characters-for-usernames.patch b/patches/server/0231-Configurable-valid-characters-for-usernames.patch index f07392e33..7c293be87 100644 --- a/patches/server/0231-Configurable-valid-characters-for-usernames.patch +++ b/patches/server/0231-Configurable-valid-characters-for-usernames.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configurable valid characters for usernames 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 d0204938816f3e74b0845b9a62f4b6ad44d2dd02..93689cb54c6c948577caff6ec3bd7cbec8094bea 100644 +index e8000f236d3ec0476ec782f08e159eea6c99476a..4297622fecf2cde16cdcb206ecc3e912b06c0a66 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -2421,6 +2421,7 @@ public abstract class Player extends LivingEntity { +@@ -2429,6 +2429,7 @@ public abstract class Player extends LivingEntity { } public static boolean isValidUsername(String name) { diff --git a/patches/server/0232-Shears-can-have-looting-enchantment.patch b/patches/server/0232-Shears-can-have-looting-enchantment.patch index e8f425504..7cce01f0a 100644 --- a/patches/server/0232-Shears-can-have-looting-enchantment.patch +++ b/patches/server/0232-Shears-can-have-looting-enchantment.patch @@ -31,10 +31,10 @@ index 2ee48ac3b665db2b02bcb1a30ec972d43a3725b0..59e8f5431ce5026209e1428b5fa5b548 } // Paper end - custom shear drops 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 2df9cfc7f14da1073a34960830481f49696b2e85..3f00d40125b63a76ed549755d4c9d9a2ff2d4adf 100644 +index 48ee8c43a91efaadacfe8f37399ea1fb81f5f1ee..21632120b52e4d594153ebe057a14afa74c3f4eb 100644 --- a/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java +++ b/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java -@@ -160,7 +160,7 @@ public class MushroomCow extends Cow implements Shearable, VariantHolder { return holder.is(PoiTypes.MEETING); }); @@ -17,7 +17,7 @@ index af3af49f2965dbc3da7749bd9c6ae5e2d6b94cbe..fed066980b17d7c7fa773a00b314535c public long nextGolemPanic = -1; // Pufferfish -@@ -200,6 +202,48 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -201,6 +203,48 @@ public class Villager extends AbstractVillager implements ReputationEventHandler return this.level().purpurConfig.villagerAlwaysDropExp; } @@ -66,7 +66,7 @@ index af3af49f2965dbc3da7749bd9c6ae5e2d6b94cbe..fed066980b17d7c7fa773a00b314535c @Override public Brain getBrain() { return (Brain) super.getBrain(); // CraftBukkit - decompile error -@@ -297,13 +341,19 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -298,13 +342,19 @@ public class Villager extends AbstractVillager implements ReputationEventHandler // Paper start this.customServerAiStep(false); } @@ -105,7 +105,7 @@ index 6c15d40979fd3e3d246a447c432b321fbf29ada3..6ace76a829c88e2e747dbbcce0a6582c + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index e320196cc5f7302377916d5402579632374de09c..26351f5ba9fd4f2e231481cfdd52341e0f4d96a4 100644 +index c312382eeb38b9d6b2420b482c1467d6f27beb81..6fa783b3f064b0e62c67f5a5709fbe9c0d3b51a7 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -2795,6 +2795,9 @@ public class PurpurWorldConfig { diff --git a/patches/server/0245-Config-for-mob-last-hurt-by-player-time.patch b/patches/server/0245-Config-for-mob-last-hurt-by-player-time.patch index ba70ad4c6..ba43e361f 100644 --- a/patches/server/0245-Config-for-mob-last-hurt-by-player-time.patch +++ b/patches/server/0245-Config-for-mob-last-hurt-by-player-time.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Config for mob last hurt by player time diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 39784ca82aa79097067df62d859eb13ca6fb27b1..1b58cc6ee449cfb655b7179be9d3bf8d48a86c4e 100644 +index 99c5cd7f20435be1f78cfed4f952e4c7ddfb69e8..e5691cf9ad9e795426b27391ebfb27dba97756fb 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -1547,13 +1547,13 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1555,13 +1555,13 @@ public abstract class LivingEntity extends Entity implements Attackable { if (entity1 instanceof net.minecraft.world.entity.player.Player) { net.minecraft.world.entity.player.Player entityhuman = (net.minecraft.world.entity.player.Player) entity1; @@ -25,7 +25,7 @@ index 39784ca82aa79097067df62d859eb13ca6fb27b1..1b58cc6ee449cfb655b7179be9d3bf8d if (entityliving2 instanceof net.minecraft.world.entity.player.Player) { diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -index 332c553db22aaeb0cda5e628c5e464e130c7abb0..519b875c4b0f05cab3b0f5c80f07734d8eb98abe 100644 +index 9730a5469f81687cfde0a19a58d1c2147588d1d2..e3f724a19ab2f9821d84f9b03acf7c925c88f455 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java @@ -490,7 +490,7 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { diff --git a/patches/server/0250-Implement-configurable-search-radius-for-villagers-t.patch b/patches/server/0250-Implement-configurable-search-radius-for-villagers-t.patch index 06a3eb3ea..242b2d1df 100644 --- a/patches/server/0250-Implement-configurable-search-radius-for-villagers-t.patch +++ b/patches/server/0250-Implement-configurable-search-radius-for-villagers-t.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Implement configurable search radius for villagers to spawn 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 fed066980b17d7c7fa773a00b314535c92fc53fd..857d1d80afd35d30a2947b0a6f953e5af1516048 100644 +index a188a36d919037fa3177ad7f6930570f5e130fc9..ef7c67f591ca4a3c73b87a7c44b37ad0b51d875c 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -1101,6 +1101,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -1102,6 +1102,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } public void spawnGolemIfNeeded(ServerLevel world, long time, int requiredCount) { @@ -18,7 +18,7 @@ index fed066980b17d7c7fa773a00b314535c92fc53fd..857d1d80afd35d30a2947b0a6f953e5a AABB axisalignedbb = this.getBoundingBox().inflate(10.0D, 10.0D, 10.0D); List list = world.getEntitiesOfClass(Villager.class, axisalignedbb); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 1beb9285414e3c178c95ef9ea404fcf34f9cdcac..a0b5c0819541a2924bf29ded4d1842b0e19b4e7b 100644 +index 2c577f12f86ed843f823f5756fd7cddb8bb807a6..adf1064af51c737f97c071fb65019a874a881a18 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -2809,6 +2809,8 @@ public class PurpurWorldConfig { diff --git a/patches/server/0251-Stonecutter-damage.patch b/patches/server/0251-Stonecutter-damage.patch index 18cbb8337..332ed4f56 100644 --- a/patches/server/0251-Stonecutter-damage.patch +++ b/patches/server/0251-Stonecutter-damage.patch @@ -124,10 +124,10 @@ index 0dc05919dfbbf73230505fcdc25d949b1602801c..996bd26e95e766ce4ca7e61d060881fe return BlockPathTypes.STICKY_HONEY; } else if (blockState.is(Blocks.COCOA)) { diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index 2d47fd8290c9712bbf720452f5ffe134b1941d8c..b30d0d4d453252d1f5774f5155fb1ab61294d6be 100644 +index ac836274a2d725e3fac55394154ae2148024853a..94be4f367f4c6cb2386d0e59d0417f29fca1cec7 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -@@ -1133,7 +1133,7 @@ public class CraftEventFactory { +@@ -1134,7 +1134,7 @@ public class CraftEventFactory { return CraftEventFactory.callEntityDamageEvent(source.getDirectBlock(), entity, DamageCause.LAVA, bukkitDamageSource, modifiers, modifierFunctions, cancelled); } else if (source.getDirectBlock() != null) { DamageCause cause; @@ -137,7 +137,7 @@ index 2d47fd8290c9712bbf720452f5ffe134b1941d8c..b30d0d4d453252d1f5774f5155fb1ab6 } else if (source.is(DamageTypes.HOT_FLOOR)) { cause = DamageCause.HOT_FLOOR; diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index c6628a28387023b334dd99a4e469126a2108c38b..3a49455509a26063a62e39fb3d3ad81e80bced54 100644 +index a504f727f5aaa605809938b4e7e7bbe9b84c522a..9bc5cc4944dcd3918b2a90bde9dd8fdd795ae3b2 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java @@ -209,8 +209,10 @@ public class PurpurConfig { diff --git a/patches/server/0254-Skeletons-eat-wither-roses.patch b/patches/server/0254-Skeletons-eat-wither-roses.patch index 0734e9f0a..d02980605 100644 --- a/patches/server/0254-Skeletons-eat-wither-roses.patch +++ b/patches/server/0254-Skeletons-eat-wither-roses.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Skeletons eat wither roses diff --git a/src/main/java/net/minecraft/world/entity/monster/Skeleton.java b/src/main/java/net/minecraft/world/entity/monster/Skeleton.java -index 9b43150a00d7fac85aa69f5a2dbffd0dfdae4b86..f4a47ac2c86cc95178922cce7320ba1ef5121b57 100644 +index 2064d6177b3e43810d5962102fe914296e2627ff..30ff77f5f137614b5d0d2df6dc90f47c97e8ab13 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Skeleton.java +++ b/src/main/java/net/minecraft/world/entity/monster/Skeleton.java @@ -14,6 +14,16 @@ import net.minecraft.world.item.Items; @@ -79,7 +79,7 @@ index 9b43150a00d7fac85aa69f5a2dbffd0dfdae4b86..f4a47ac2c86cc95178922cce7320ba1e + } + + this.level().addFreshEntity(skeleton); -+ this.remove(RemovalReason.DISCARDED); ++ this.remove(RemovalReason.DISCARDED, org.bukkit.event.entity.EntityRemoveEvent.Cause.DISCARD); + if (!player.getAbilities().instabuild) { + stack.shrink(1); + } @@ -94,7 +94,7 @@ index 9b43150a00d7fac85aa69f5a2dbffd0dfdae4b86..f4a47ac2c86cc95178922cce7320ba1e + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index b301f0778a2dc0de4a899da06598aed314ef545c..ef6ed71bf4674b7f0275e3cc4487f9f311d4cf48 100644 +index 163b01e476dc3b53d0176b6606f65ce2cbc6bc21..b08fd09753dfab6c31cf59c189f9a55d9f77c5a5 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -2492,6 +2492,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0261-Add-toggle-for-RNG-manipulation.patch b/patches/server/0261-Add-toggle-for-RNG-manipulation.patch index 405aa61e4..b2e82479b 100644 --- a/patches/server/0261-Add-toggle-for-RNG-manipulation.patch +++ b/patches/server/0261-Add-toggle-for-RNG-manipulation.patch @@ -7,10 +7,10 @@ Paper patches RNG maniplulation by using a shared (and locked) random source. This comes with a performance gain, but technical players may prefer the ability to manipulate RNG. diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 31f692bbb67af911dd0563c171ed48ee510fe5bf..6a3fa8bec23e2405091eae560c1edef02023a8a9 100644 +index c868a61d73b4563807c70c9539f63cb0645a9984..c0942beb4b362cdba1c0b5fa4531f7d586eab0ac 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -596,7 +596,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -597,7 +597,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S this.bb = Entity.INITIAL_AABB; this.stuckSpeedMultiplier = Vec3.ZERO; this.nextStep = 1.0F; @@ -33,7 +33,7 @@ index 2ec8a55650beff50676759617896da2db09dddc0..cba0823bfd10a3e7fd3a7548b9cc11a7 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index c6a19e70cbe90546d17c3e3f3371db40af6cf204..e4fd299c419dd5309b74eec5e00de6461613bf40 100644 +index bf2b431301780acff40546af6475b227c40bd8bf..4c157168cfea5ef58d0b070971dfb73223c26897 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -204,9 +204,11 @@ public class PurpurWorldConfig { diff --git a/patches/server/0264-Remove-Timings.patch b/patches/server/0264-Remove-Timings.patch index 0ca41254e..1e9aa97d7 100644 --- a/patches/server/0264-Remove-Timings.patch +++ b/patches/server/0264-Remove-Timings.patch @@ -236,7 +236,7 @@ index 38de0e9b83ecac489ca676725274d14fcb60dd5c..6a9bd431e9c2e1fc1e51d394eaccba86 @Override diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java -index 28d05b46952397bb664a1c8dae71816cafee89ce..c6c4d6cf59742b555af5469eaf751ebef753e249 100644 +index 1081e9df44bb24b2c51ebd9364c21c7b2a3a205a..3fbc1e7e401331790d590dcd513a0a267b5ea181 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java @@ -540,15 +540,15 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider @@ -447,7 +447,7 @@ index 1cf8c819c0d7776c3b33d6594ca81abe3c2a719d..bbc3153379d7da8b4d91c49a3ba83d44 gameprofilerfiller.pop(); gameprofilerfiller.pop(); diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 009d077f979d5ae85b359f3829038015af347429..b4b256721b7a5d25deec717123501a163fcfd8fe 100644 +index cc4be3069e64bb424393d157dd1a5fef7dbcfca6..e48fac31d5c25da0bea3b5247eceda3a45decaaf 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -866,7 +866,7 @@ public class ServerLevel extends Level implements WorldGenLevel { @@ -630,7 +630,7 @@ index 009d077f979d5ae85b359f3829038015af347429..b4b256721b7a5d25deec717123501a16 } else if (close) { chunkproviderserver.close(false); } // Paper - rewrite chunk system diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 7dec861f49e7db0ac7cf4f4942881f237ebcd61f..19b4a69a3062870b831c37728cab8376d3340d54 100644 +index 9107cc4860f81460f3424aeac4ca026b891ab47f..c48e18e4aa72eae5d1a87a86b8a9c982838b5d47 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -2456,7 +2456,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl @@ -661,10 +661,10 @@ index 7dec861f49e7db0ac7cf4f4942881f237ebcd61f..19b4a69a3062870b831c37728cab8376 } // CraftBukkit end diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 8458adda210e10254d5564a6b84894805b7ddbfe..323391509c2efd49c54d7b36d7aa880c63ae5fd4 100644 +index 1b8b0bafce3352bd65d570ac7cb4ea3acdfe991d..ac1e0c66f167218306504db6037cc1d6509072a0 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -1273,7 +1273,7 @@ public abstract class PlayerList { +@@ -1274,7 +1274,7 @@ public abstract class PlayerList { public void saveAll(int interval) { io.papermc.paper.util.MCUtil.ensureMain("Save Players" , () -> { // Paper - Ensure main @@ -673,7 +673,7 @@ index 8458adda210e10254d5564a6b84894805b7ddbfe..323391509c2efd49c54d7b36d7aa880c int numSaved = 0; long now = MinecraftServer.currentTick; for (int i = 0; i < this.players.size(); ++i) { -@@ -1284,7 +1284,7 @@ public abstract class PlayerList { +@@ -1285,7 +1285,7 @@ public abstract class PlayerList { } // Paper end - Incremental chunk and player saving } @@ -732,7 +732,7 @@ index fcdb9bde8e1605e30dde3e580491522d4b62cdc0..7094701d213c73ba47ace806962244c1 } diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 85d0a644fa876978d1295d8a2d88ab2869b33904..4999f9f3a4296df3d7f933cc4011e85527da3a17 100644 +index d43d7873574699b3b19ae6c89f02b24f3c6f7dfc..0754ec885c68a6b3c6d91c8e00069c3fe41c0299 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java @@ -1308,15 +1308,15 @@ public abstract class Level implements LevelAccessor, AutoCloseable { diff --git a/patches/server/0265-Remove-Mojang-Profiler.patch b/patches/server/0265-Remove-Mojang-Profiler.patch index 4b5cea4b2..2f7b1b2d0 100644 --- a/patches/server/0265-Remove-Mojang-Profiler.patch +++ b/patches/server/0265-Remove-Mojang-Profiler.patch @@ -448,7 +448,7 @@ index df0c15f6b5b2224d53e4f8fad42b9a1e5f33dc25..5dd0dcb47211cec69189115bf4eab1df } diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java -index c6c4d6cf59742b555af5469eaf751ebef753e249..06554a000da1f6ba7360fa907deeead7341b09ea 100644 +index 3fbc1e7e401331790d590dcd513a0a267b5ea181..bb412ca874b85d777c0e3565fcefcee15b23182b 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java @@ -538,20 +538,20 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider @@ -614,7 +614,7 @@ index bbc3153379d7da8b4d91c49a3ba83d4415a7671a..6167ffb1263a1a65b582b7d295d1d77e } diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index b4b256721b7a5d25deec717123501a163fcfd8fe..75b3de5c1e26815aa04dba3f09f2ef7807767154 100644 +index e48fac31d5c25da0bea3b5247eceda3a45decaaf..fb6b762bac4d36b2e307b5343988884fa339d001 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -824,16 +824,16 @@ public class ServerLevel extends Level implements WorldGenLevel { @@ -1095,10 +1095,10 @@ index 2e6e8eac987c4ef6b2dcd3de592d8a51d2b29792..863343a87fe34d72f04af89d75268b47 }; } diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 03f6b992aae18679845e04c6c0f70bacac11d996..2d997b91636aba8c71ae543253cde7376e99a822 100644 +index c0942beb4b362cdba1c0b5fa4531f7d586eab0ac..b78d7958b56a4f385efc4666bb35a89a3049d702 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -848,7 +848,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -861,7 +861,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S // CraftBukkit end public void baseTick() { @@ -1107,7 +1107,7 @@ index 03f6b992aae18679845e04c6c0f70bacac11d996..2d997b91636aba8c71ae543253cde737 if (firstTick && this instanceof net.minecraft.world.entity.NeutralMob neutralMob) neutralMob.tickInitialPersistentAnger(level); // Paper - Prevent entity loading causing async lookups this.feetBlockState = null; if (this.isPassenger() && this.getVehicle().isRemoved()) { -@@ -909,7 +909,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -922,7 +922,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } this.firstTick = false; @@ -1116,7 +1116,7 @@ index 03f6b992aae18679845e04c6c0f70bacac11d996..2d997b91636aba8c71ae543253cde737 } public void setSharedFlagOnFire(boolean onFire) { -@@ -1128,7 +1128,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -1141,7 +1141,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } } @@ -1125,7 +1125,7 @@ index 03f6b992aae18679845e04c6c0f70bacac11d996..2d997b91636aba8c71ae543253cde737 if (this.stuckSpeedMultiplier.lengthSqr() > 1.0E-7D) { movement = movement.multiply(this.stuckSpeedMultiplier); this.stuckSpeedMultiplier = Vec3.ZERO; -@@ -1137,7 +1137,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -1150,7 +1150,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S // Paper start - ignore movement changes while inactive. if (isTemporarilyActive && !(this instanceof ItemEntity || this instanceof net.minecraft.world.entity.vehicle.AbstractMinecart) && movement == getDeltaMovement() && movementType == MoverType.SELF) { setDeltaMovement(Vec3.ZERO); @@ -1134,7 +1134,7 @@ index 03f6b992aae18679845e04c6c0f70bacac11d996..2d997b91636aba8c71ae543253cde737 return; } // Paper end -@@ -1158,8 +1158,8 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -1171,8 +1171,8 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S this.setPos(this.getX() + vec3d1.x, this.getY() + vec3d1.y, this.getZ() + vec3d1.z); } @@ -1145,7 +1145,7 @@ index 03f6b992aae18679845e04c6c0f70bacac11d996..2d997b91636aba8c71ae543253cde737 boolean flag = !Mth.equal(movement.x, vec3d1.x); boolean flag1 = !Mth.equal(movement.z, vec3d1.z); -@@ -1178,7 +1178,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -1191,7 +1191,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S this.checkFallDamage(vec3d1.y, this.onGround(), iblockdata, blockposition); if (this.isRemoved()) { @@ -1154,7 +1154,7 @@ index 03f6b992aae18679845e04c6c0f70bacac11d996..2d997b91636aba8c71ae543253cde737 } else { if (this.horizontalCollision) { Vec3 vec3d2 = this.getDeltaMovement(); -@@ -1316,7 +1316,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -1329,7 +1329,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S this.setRemainingFireTicks(-this.getFireImmuneTicks()); } @@ -1163,7 +1163,7 @@ index 03f6b992aae18679845e04c6c0f70bacac11d996..2d997b91636aba8c71ae543253cde737 } } // Paper start - detailed watchdog information -@@ -3189,7 +3189,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3205,7 +3205,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S ServerLevel worldserver1 = minecraftserver.getLevel(resourcekey); if (true && !this.isPassenger() && this.portalTime++ >= i) { // CraftBukkit @@ -1172,7 +1172,7 @@ index 03f6b992aae18679845e04c6c0f70bacac11d996..2d997b91636aba8c71ae543253cde737 this.portalTime = i; // Paper start - Add EntityPortalReadyEvent io.papermc.paper.event.entity.EntityPortalReadyEvent event = new io.papermc.paper.event.entity.EntityPortalReadyEvent(this.getBukkitEntity(), worldserver1 == null ? null : worldserver1.getWorld(), org.bukkit.PortalType.NETHER); -@@ -3207,7 +3207,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3223,7 +3223,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } } // Paper - Add EntityPortalReadyEvent // CraftBukkit end @@ -1181,7 +1181,7 @@ index 03f6b992aae18679845e04c6c0f70bacac11d996..2d997b91636aba8c71ae543253cde737 } this.isInsidePortal = false; -@@ -3681,14 +3681,14 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3697,14 +3697,14 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } // Paper end - Fix item duplication and teleport issues if (this.level() instanceof ServerLevel && !this.isRemoved()) { @@ -1198,7 +1198,7 @@ index 03f6b992aae18679845e04c6c0f70bacac11d996..2d997b91636aba8c71ae543253cde737 PortalInfo shapedetectorshape = (location == null) ? this.findDimensionEntryPoint(worldserver) : new PortalInfo(new Vec3(location.x(), location.y(), location.z()), Vec3.ZERO, this.yRot, this.xRot, worldserver, null); // CraftBukkit if (shapedetectorshape == null) { -@@ -3727,7 +3727,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3743,7 +3743,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S this.unRide(); // CraftBukkit end @@ -1207,7 +1207,7 @@ index 03f6b992aae18679845e04c6c0f70bacac11d996..2d997b91636aba8c71ae543253cde737 // Paper start - Fix item duplication and teleport issues if (this instanceof Mob) { ((Mob) this).dropLeash(true, true); // Paper drop lead -@@ -3754,10 +3754,10 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3770,10 +3770,10 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } this.removeAfterChangingDimensions(); @@ -1221,10 +1221,10 @@ index 03f6b992aae18679845e04c6c0f70bacac11d996..2d997b91636aba8c71ae543253cde737 } } else { diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 2e935f373980f6c424fc23ddc80ef04186834532..3079daa307cf8d37a2b10213d377d808ef676cc2 100644 +index e5691cf9ad9e795426b27391ebfb27dba97756fb..cd5e884603285d4a2c73f3dc300a5afda42d98c8 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -409,7 +409,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -410,7 +410,7 @@ public abstract class LivingEntity extends Entity implements Attackable { } super.baseTick(); @@ -1233,7 +1233,7 @@ index 2e935f373980f6c424fc23ddc80ef04186834532..3079daa307cf8d37a2b10213d377d808 if (this.fireImmune() || this.level().isClientSide) { this.clearFire(); } -@@ -512,7 +512,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -513,7 +513,7 @@ public abstract class LivingEntity extends Entity implements Attackable { this.yHeadRotO = this.yHeadRot; this.yRotO = this.getYRot(); this.xRotO = this.getXRot(); @@ -1242,7 +1242,7 @@ index 2e935f373980f6c424fc23ddc80ef04186834532..3079daa307cf8d37a2b10213d377d808 } public boolean canSpawnSoulSpeedParticle() { -@@ -3179,10 +3179,10 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3187,10 +3187,10 @@ public abstract class LivingEntity extends Entity implements Attackable { } this.run += (f3 - this.run) * 0.3F; @@ -1256,7 +1256,7 @@ index 2e935f373980f6c424fc23ddc80ef04186834532..3079daa307cf8d37a2b10213d377d808 // Paper start - stop large pitch and yaw changes from crashing the server this.yRotO += Math.round((this.getYRot() - this.yRotO) / 360.0F) * 360.0F; -@@ -3194,7 +3194,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3202,7 +3202,7 @@ public abstract class LivingEntity extends Entity implements Attackable { this.yHeadRotO += Math.round((this.yHeadRot - this.yHeadRotO) / 360.0F) * 360.0F; // Paper end @@ -1265,7 +1265,7 @@ index 2e935f373980f6c424fc23ddc80ef04186834532..3079daa307cf8d37a2b10213d377d808 this.animStep += f2; if (this.isFallFlying()) { ++this.fallFlyTicks; -@@ -3489,19 +3489,19 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3497,19 +3497,19 @@ public abstract class LivingEntity extends Entity implements Attackable { } this.setDeltaMovement(d0, d1, d2); @@ -1290,7 +1290,7 @@ index 2e935f373980f6c424fc23ddc80ef04186834532..3079daa307cf8d37a2b10213d377d808 if (this.jumping && this.isAffectedByFluids()) { double d3; -@@ -3528,8 +3528,8 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3536,8 +3536,8 @@ public abstract class LivingEntity extends Entity implements Attackable { this.noJumpDelay = 0; } @@ -1301,7 +1301,7 @@ index 2e935f373980f6c424fc23ddc80ef04186834532..3079daa307cf8d37a2b10213d377d808 this.xxa *= 0.98F; this.zza *= 0.98F; this.updateFallFlying(); -@@ -3556,8 +3556,8 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3564,8 +3564,8 @@ public abstract class LivingEntity extends Entity implements Attackable { this.travel(vec3d1); } @@ -1312,7 +1312,7 @@ index 2e935f373980f6c424fc23ddc80ef04186834532..3079daa307cf8d37a2b10213d377d808 if (!this.level().isClientSide && !this.isDeadOrDying() && !this.freezeLocked) { // Paper - Freeze Tick Lock API int i = this.getTicksFrozen(); -@@ -3574,15 +3574,15 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3582,15 +3582,15 @@ public abstract class LivingEntity extends Entity implements Attackable { this.hurt(this.damageSources().freeze(), 1.0F); } @@ -1332,10 +1332,10 @@ index 2e935f373980f6c424fc23ddc80ef04186834532..3079daa307cf8d37a2b10213d377d808 // Purpur start if (this.xo != this.getX() || this.yo != this.getY() || this.zo != this.getZ() || this.yRotO != this.getYRot() || this.xRotO != this.getXRot()) { diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index 8588f230724e7fec2093b0b5c8c80b3d1944ce47..94c43de94a7ec7982046cf1e110b8a2230a72b19 100644 +index 380834677c93a23879a9e53173fa835ebd22f584..1d1688fafc438a5957096118790d44fbd55476bb 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java -@@ -367,13 +367,13 @@ public abstract class Mob extends LivingEntity implements Targeting { +@@ -368,13 +368,13 @@ public abstract class Mob extends LivingEntity implements Targeting { @Override public void baseTick() { super.baseTick(); @@ -1351,7 +1351,7 @@ index 8588f230724e7fec2093b0b5c8c80b3d1944ce47..94c43de94a7ec7982046cf1e110b8a22 incrementTicksSinceLastInteraction(); // Purpur } -@@ -704,7 +704,7 @@ public abstract class Mob extends LivingEntity implements Targeting { +@@ -705,7 +705,7 @@ public abstract class Mob extends LivingEntity implements Targeting { @Override public void aiStep() { super.aiStep(); @@ -1360,7 +1360,7 @@ index 8588f230724e7fec2093b0b5c8c80b3d1944ce47..94c43de94a7ec7982046cf1e110b8a22 if (!this.level().isClientSide && this.canPickUpLoot() && this.isAlive() && !this.dead && (this.level().purpurConfig.entitiesPickUpLootBypassMobGriefing || this.level().getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING))) { Vec3i baseblockposition = this.getPickupReach(); List list = this.level().getEntitiesOfClass(ItemEntity.class, this.getBoundingBox().inflate((double) baseblockposition.getX(), (double) baseblockposition.getY(), (double) baseblockposition.getZ())); -@@ -724,7 +724,7 @@ public abstract class Mob extends LivingEntity implements Targeting { +@@ -725,7 +725,7 @@ public abstract class Mob extends LivingEntity implements Targeting { } } @@ -1369,7 +1369,7 @@ index 8588f230724e7fec2093b0b5c8c80b3d1944ce47..94c43de94a7ec7982046cf1e110b8a22 } protected Vec3i getPickupReach() { -@@ -936,46 +936,46 @@ public abstract class Mob extends LivingEntity implements Targeting { +@@ -937,46 +937,46 @@ public abstract class Mob extends LivingEntity implements Targeting { return; } // Paper end - Allow nerfed mobs to jump and float @@ -1612,10 +1612,10 @@ index 3be70e054c658d34c4aa598ff70c63fa2cff7982..d6340d0a1308bafd3ba176562bf08dca } 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 3103df74b7ae5a5ed841bf97794284cd43ad59de..14135dac80dec4224715e21cef6556d22e569026 100644 +index c19513b3b35bbb05c3159606caacee0559366610..2a9c2a69a0589e4e7b7c79d3716376b360a2eba1 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 -@@ -117,12 +117,12 @@ public class Tadpole extends AbstractFish { +@@ -120,12 +120,12 @@ public class Tadpole extends AbstractFish { private int behaviorTick = 0; // Pufferfish @Override protected void customServerAiStep() { @@ -1777,10 +1777,10 @@ index 384e7b29215cadfa40af07a183a9c9c6a5b4a80a..bf7ef72a7d92db8f11789a6958327064 if ((this.tickCount + this.getId()) % 120 == 0) { Warden.applyDarknessAround(worldserver, this.position(), this, 20); 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 857d1d80afd35d30a2947b0a6f953e5af1516048..18f92478f07de7c941ff8bbe0ec2ef2fe3617fd7 100644 +index ef7c67f591ca4a3c73b87a7c44b37ad0b51d875c..50202286a0d83f7fe5331eb669d999718a9082cf 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -343,7 +343,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -344,7 +344,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } protected void customServerAiStep(boolean inactive) { // Purpur - not final // Paper end @@ -1789,7 +1789,7 @@ index 857d1d80afd35d30a2947b0a6f953e5af1516048..18f92478f07de7c941ff8bbe0ec2ef2f // Purpur start if (this.level().purpurConfig.villagerLobotomizeEnabled) { // treat as inactive if lobotomized -@@ -355,7 +355,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -356,7 +356,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler this.getBrain().tick((ServerLevel) this.level(), this); // Paper } else if (this.isLobotomized && shouldRestock()) restock(); // Purpur end @@ -1821,7 +1821,7 @@ index b678da2cbb93cea7971bc3c4d324cfca18b0bc97..b0884758d00efb1e3b4b47a539de2a81 if (this.fire) { diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 4999f9f3a4296df3d7f933cc4011e85527da3a17..bc797f1872f86b59a8aae3e70823249c9b8d8922 100644 +index 0754ec885c68a6b3c6d91c8e00069c3fe41c0299..67a26f22d4eb7eaeee7900e6f4de421d0bfd5612 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java @@ -1305,9 +1305,9 @@ public abstract class Level implements LevelAccessor, AutoCloseable { diff --git a/patches/server/0276-Add-an-option-to-fix-MC-3304-projectile-looting.patch b/patches/server/0276-Add-an-option-to-fix-MC-3304-projectile-looting.patch index 2fd337bec..249484962 100644 --- a/patches/server/0276-Add-an-option-to-fix-MC-3304-projectile-looting.patch +++ b/patches/server/0276-Add-an-option-to-fix-MC-3304-projectile-looting.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add an option to fix MC-3304 (projectile looting) diff --git a/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java b/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java -index 2d1bff45830b489caba33552cafa2ae795d6def6..fd1d6c4c3f78b610282318e98ba3742f8bf6e20e 100644 +index 5d60f038220ef4e7b66834c172cc47c7abfe7da7..a9289c4179a78862361be87aaa83f49d6bf60714 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java +++ b/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java -@@ -74,6 +74,7 @@ public abstract class AbstractArrow extends Projectile { +@@ -75,6 +75,7 @@ public abstract class AbstractArrow extends Projectile { @Nullable private List piercedAndKilledEntities; public ItemStack pickupItemStack; @@ -16,7 +16,7 @@ index 2d1bff45830b489caba33552cafa2ae795d6def6..fd1d6c4c3f78b610282318e98ba3742f // Spigot Start @Override -@@ -641,6 +642,12 @@ public abstract class AbstractArrow extends Projectile { +@@ -642,6 +643,12 @@ public abstract class AbstractArrow extends Projectile { this.knockback = punch; } diff --git a/patches/server/0280-Milk-Keeps-Beneficial-Effects.patch b/patches/server/0280-Milk-Keeps-Beneficial-Effects.patch index 68ee44ba7..f02c29b20 100644 --- a/patches/server/0280-Milk-Keeps-Beneficial-Effects.patch +++ b/patches/server/0280-Milk-Keeps-Beneficial-Effects.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Milk Keeps Beneficial Effects diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 5c667328f76688d6b557452319117734aaa861a6..cc490788b18209d27b339a8557084049002cff09 100644 +index cd5e884603285d4a2c73f3dc300a5afda42d98c8..bfa69b2c37f07132f8b31c12d26f4ceb074901a5 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -1125,6 +1125,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1133,6 +1133,7 @@ public abstract class LivingEntity extends Entity implements Attackable { for (flag = false; iterator.hasNext(); flag = true) { // CraftBukkit start MobEffectInstance effect = (MobEffectInstance) iterator.next(); @@ -17,10 +17,10 @@ index 5c667328f76688d6b557452319117734aaa861a6..cc490788b18209d27b339a8557084049 if (event.isCancelled()) { continue; 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 b950a0d5010fd7302995772d30e69016284f6cd6..3f78ab74cd7706ad16f6d5a989803691c9842f9f 100644 +index 21a7cc86245d2440b8fc757d3664a29de293f7b0..b133c186d2d1412aa623ba3db68091bc69c282a5 100644 --- a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java +++ b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java -@@ -114,7 +114,7 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill +@@ -115,7 +115,7 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill return this.canDrinkPotion && this.level().isNight() && !entityvillagertrader.isInvisible(); // Paper - Add more WanderingTrader API })); this.goalSelector.addGoal(0, new UseItemGoal<>(this, new ItemStack(Items.MILK_BUCKET), SoundEvents.WANDERING_TRADER_REAPPEARED, (entityvillagertrader) -> { diff --git a/patches/server/0284-Fire-Immunity-API.patch b/patches/server/0284-Fire-Immunity-API.patch index 188c10833..420d96164 100644 --- a/patches/server/0284-Fire-Immunity-API.patch +++ b/patches/server/0284-Fire-Immunity-API.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Fire Immunity API diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 2d997b91636aba8c71ae543253cde7376e99a822..b4a35b5a19167dee083e6b2421e815f893366fc9 100644 +index b78d7958b56a4f385efc4666bb35a89a3049d702..693a418c10583131135a1d9f8be9c54f23a16430 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -426,6 +426,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -427,6 +427,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S public boolean activatedPriorityReset = false; // Pufferfish - DAB public int activatedPriority = gg.pufferfish.pufferfish.PufferfishConfig.maximumActivationPrio; // Pufferfish - DAB (golf score) public final BlockPos.MutableBlockPos cachedBlockPos = new BlockPos.MutableBlockPos(); // Pufferfish - reduce entity allocations @@ -16,7 +16,7 @@ index 2d997b91636aba8c71ae543253cde7376e99a822..b4a35b5a19167dee083e6b2421e815f8 public void setOrigin(@javax.annotation.Nonnull Location location) { this.origin = location.toVector(); -@@ -1814,7 +1815,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -1827,7 +1828,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } public boolean fireImmune() { @@ -25,7 +25,7 @@ index 2d997b91636aba8c71ae543253cde7376e99a822..b4a35b5a19167dee083e6b2421e815f8 } public boolean causeFallDamage(float fallDistance, float damageMultiplier, DamageSource damageSource) { -@@ -2508,6 +2509,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -2524,6 +2525,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S nbttagcompound.putBoolean("Paper.FreezeLock", true); } // Paper end @@ -37,7 +37,7 @@ index 2d997b91636aba8c71ae543253cde7376e99a822..b4a35b5a19167dee083e6b2421e815f8 return nbttagcompound; } catch (Throwable throwable) { CrashReport crashreport = CrashReport.forThrowable(throwable, "Saving entity NBT"); -@@ -2655,6 +2661,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -2671,6 +2677,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S freezeLocked = nbt.getBoolean("Paper.FreezeLock"); } // Paper end @@ -50,10 +50,10 @@ index 2d997b91636aba8c71ae543253cde7376e99a822..b4a35b5a19167dee083e6b2421e815f8 } catch (Throwable throwable) { CrashReport crashreport = CrashReport.forThrowable(throwable, "Loading entity NBT"); diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -index 9304a2d06400dfa244ddb4d9591de988b334c3cf..aa6872290bcab8d7dc58f5714f5f5d4289759880 100644 +index 897f9f5d25c674f167530810c0b94bca83c3c3cc..50364ab478ae5ec016fc2318483920e2e849b8ba 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -@@ -83,6 +83,16 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { +@@ -84,6 +84,16 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { this.entityType = CraftEntityType.minecraftToBukkit(entity.getType()); } @@ -71,7 +71,7 @@ index 9304a2d06400dfa244ddb4d9591de988b334c3cf..aa6872290bcab8d7dc58f5714f5f5d42 public boolean isInDaylight() { return getHandle().isSunBurnTick(); diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java -index e99007570a89eebe3c85ad549cf24286514306f8..480adbfdd084a6291ee0108e5350ea418e08ff6f 100644 +index 01e4395f1669d21c30465aa1366bd2f1ae17678f..5c1cda88080850314dac196dbe71ff12e48a8aca 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java @@ -173,9 +173,14 @@ public class CraftItem extends CraftEntity implements Item { diff --git a/patches/server/0285-Add-option-to-teleport-to-spawn-on-nether-ceiling-da.patch b/patches/server/0285-Add-option-to-teleport-to-spawn-on-nether-ceiling-da.patch index 9cea3279a..63d80a982 100644 --- a/patches/server/0285-Add-option-to-teleport-to-spawn-on-nether-ceiling-da.patch +++ b/patches/server/0285-Add-option-to-teleport-to-spawn-on-nether-ceiling-da.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add option to teleport to spawn on nether ceiling damage diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index bf33c028ced7c3a4e76e9ccc9d1c12877456219c..a83a6cd64345ff0d14e4dfad01566d8dc86c8416 100644 +index 693a418c10583131135a1d9f8be9c54f23a16430..2092ede561d14ace1c003ced051cd4967bb41beb 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -923,6 +923,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -936,6 +936,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S && this.level.paperConfig().environment.netherCeilingVoidDamageHeight.test(v -> this.getY() >= v) && (!(this instanceof Player player) || !player.getAbilities().invulnerable))) { // Paper end - Configurable nether ceiling damage @@ -17,7 +17,7 @@ index bf33c028ced7c3a4e76e9ccc9d1c12877456219c..a83a6cd64345ff0d14e4dfad01566d8d } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 17894a054e67173e138cff2190c77c0dad94ef32..c620601e8c6b9cc6a82011a61ce2fcedda94dac4 100644 +index 1a1628b6a2d4814f5cdef1dc3f27bd74b22265d7..61dfb8c7e8606136981ec61f2b7ef02711d3a395 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -417,6 +417,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0288-End-Crystal-Cramming.patch b/patches/server/0288-End-Crystal-Cramming.patch index f805f9e4d..33c79427c 100644 --- a/patches/server/0288-End-Crystal-Cramming.patch +++ b/patches/server/0288-End-Crystal-Cramming.patch @@ -5,10 +5,10 @@ Subject: [PATCH] End Crystal Cramming diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java -index ea7075dd4a9bc466d850cabc69199d56e48c825a..2b850c313c7bb2f83af62709583d0ec35400215a 100644 +index 24ad1bae912fa6ee82ea8b6bdbb0af664dc1006c..34f5006f72ec357c474a19f22ee339e3a1dc786f 100644 --- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java +++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java -@@ -99,6 +99,7 @@ public class EndCrystal extends Entity { +@@ -100,6 +100,7 @@ public class EndCrystal extends Entity { } } // Paper end - Fix invulnerable end crystals diff --git a/patches/server/0295-Add-mending-multiplier.patch b/patches/server/0295-Add-mending-multiplier.patch index 0efcbf1f8..b24297039 100644 --- a/patches/server/0295-Add-mending-multiplier.patch +++ b/patches/server/0295-Add-mending-multiplier.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add mending multiplier diff --git a/src/main/java/net/minecraft/world/entity/ExperienceOrb.java b/src/main/java/net/minecraft/world/entity/ExperienceOrb.java -index 01f375047998cb68b3ec704aef9f050c9f0630dc..e594a6f318d34debdf884d4d98b11d53b4b8734a 100644 +index 373a932b80be18b8a47ef849ce837dbfbba6f9cb..9a3210e34decb4096533c58f36687e31330198c4 100644 --- a/src/main/java/net/minecraft/world/entity/ExperienceOrb.java +++ b/src/main/java/net/minecraft/world/entity/ExperienceOrb.java -@@ -359,13 +359,15 @@ public class ExperienceOrb extends Entity { +@@ -360,13 +360,15 @@ public class ExperienceOrb extends Entity { } } @@ -27,7 +27,7 @@ index 01f375047998cb68b3ec704aef9f050c9f0630dc..e594a6f318d34debdf884d4d98b11d53 public int getValue() { return this.value; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 856a7576ecfb8d2ca5bffa594ad9da6f605917ab..4fa20bdc2a9ca0906f4fd32d7b1d2590da6094a3 100644 +index b7faa233782b82cf1482c5306a49496ae4c46a2d..1045c32ad127815f1a0f6c4c12d37dd893e0883f 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -119,6 +119,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0297-Stored-Bee-API.patch b/patches/server/0297-Stored-Bee-API.patch index fa37357ce..8fd770b33 100644 --- a/patches/server/0297-Stored-Bee-API.patch +++ b/patches/server/0297-Stored-Bee-API.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Stored Bee API diff --git a/src/main/java/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java -index 1b47b0ff7b42373ca25d13fdfbaf2bfd92337632..f9b4ac5acaf809e1eb9d10d87dd0e17c63d1e3c5 100644 +index dc5bcf8f7662bd1feb4375605f27c320878bf7e0..7810d763841825f68c60b7471026d71d89726bf0 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java -@@ -130,6 +130,22 @@ public class BeehiveBlockEntity extends BlockEntity { +@@ -134,6 +134,22 @@ public class BeehiveBlockEntity extends BlockEntity { return list; } @@ -31,7 +31,7 @@ index 1b47b0ff7b42373ca25d13fdfbaf2bfd92337632..f9b4ac5acaf809e1eb9d10d87dd0e17c public void addOccupant(Entity entity, boolean hasNectar) { this.addOccupantWithPresetTicks(entity, hasNectar, 0); } -@@ -139,6 +155,12 @@ public class BeehiveBlockEntity extends BlockEntity { +@@ -143,6 +159,12 @@ public class BeehiveBlockEntity extends BlockEntity { return this.stored.size(); } @@ -44,7 +44,7 @@ index 1b47b0ff7b42373ca25d13fdfbaf2bfd92337632..f9b4ac5acaf809e1eb9d10d87dd0e17c // Paper start - Add EntityBlockStorage clearEntities public void clearBees() { this.stored.clear(); -@@ -425,9 +447,9 @@ public class BeehiveBlockEntity extends BlockEntity { +@@ -429,9 +451,9 @@ public class BeehiveBlockEntity extends BlockEntity { private BeeReleaseStatus() {} } diff --git a/patches/server/0298-Shears-can-defuse-TNT.patch b/patches/server/0298-Shears-can-defuse-TNT.patch index cc5c633ab..0832a2c9c 100644 --- a/patches/server/0298-Shears-can-defuse-TNT.patch +++ b/patches/server/0298-Shears-can-defuse-TNT.patch @@ -8,10 +8,10 @@ Shears can now defuse TNT. Each world can have a configured chance for the TNT t By default the option is disabled to avoid breaking any possible vanilla mechanics. diff --git a/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java b/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java -index cd7b955754b809826048b80723e2e9055b373a4a..b929bef749397797203eb6fb7a7e817d90ec310c 100644 +index e712bd07ea2946167782473a536e0c72fab4bccd..6d934405cd18d63943171448743cafd5c52026e2 100644 --- a/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java +++ b/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java -@@ -199,4 +199,29 @@ public class PrimedTnt extends Entity implements TraceableEntity { +@@ -200,4 +200,29 @@ public class PrimedTnt extends Entity implements TraceableEntity { return !level().paperConfig().fixes.preventTntFromMovingInWater && super.isPushedByFluid(); } // Paper end - Option to prevent TNT from moving in water @@ -42,7 +42,7 @@ index cd7b955754b809826048b80723e2e9055b373a4a..b929bef749397797203eb6fb7a7e817d + // Purpur end - Shears can defuse TNT } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 51540ca96e7ce0706afbb0644f5b8e699fb79cfc..d7b7e3adb55224adec5f11a98d77e93ebdbb5c2d 100644 +index 1045c32ad127815f1a0f6c4c12d37dd893e0883f..5021553d6518bb23bcb32a0c6980f0194c379467 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -3286,4 +3286,11 @@ public class PurpurWorldConfig { diff --git a/patches/server/0301-add-an-option-for-piglins-to-ignore-gold-trimmed-arm.patch b/patches/server/0301-add-an-option-for-piglins-to-ignore-gold-trimmed-arm.patch index 6211f52a7..f1b51d6f8 100644 --- a/patches/server/0301-add-an-option-for-piglins-to-ignore-gold-trimmed-arm.patch +++ b/patches/server/0301-add-an-option-for-piglins-to-ignore-gold-trimmed-arm.patch @@ -5,10 +5,10 @@ Subject: [PATCH] add an option for piglins to ignore gold-trimmed armor diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinAi.java b/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinAi.java -index 372d084609216d5437b92ee60810a9efbb0b6f31..a5a7ea0ddad31e3633647f823df86ddbb5fbbcc5 100644 +index 4f4f557b7f4232ec3b90dda43c6bed30521318ba..dd4313e0507d3adda0ec84c79f1af13ecc2d7ef3 100644 --- a/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinAi.java +++ b/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinAi.java -@@ -598,20 +598,33 @@ public class PiglinAi { +@@ -599,20 +599,33 @@ public class PiglinAi { Iterator iterator = iterable.iterator(); Item item; @@ -45,7 +45,7 @@ index 372d084609216d5437b92ee60810a9efbb0b6f31..a5a7ea0ddad31e3633647f823df86ddb piglin.getBrain().eraseMemory(MemoryModuleType.WALK_TARGET); piglin.getNavigation().stop(); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 2f0e119e6e630eba8229011d42185de40860f202..c1354f18f7dd11d1f28f37d38ad4db4b671e3af1 100644 +index 10ab00dda8e7c180e629676e342297979f427cbe..98f15753ebe2de471fd6de7d8baf0fe04d6dc449 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -2270,6 +2270,7 @@ public class PurpurWorldConfig {