diff --git a/gradle.properties b/gradle.properties index abb60014c..0be6c994b 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 = 94807a1d2e74b26b1a3154974d4024daa4c95f51 +paperCommit = 27cabc19a02e054276b58bfe0a40fc0add14d25e 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 c878e01ed..9c586a8a4 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 444ff797c70b0e285d4272ea2ce3d72453c9bda5..fd785a79b1708aadd760f5b62d49d4d4e55e9938 100644 +index 376e8983fdfdbb6c3e5fd8ad0f6a05e655b622bf..658e9b4590a82d179907feea04e129fdba9a2f42 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -13,8 +13,12 @@ configurations.named(log4jPlugins.compileClasspathConfigurationName) { @@ -625,10 +625,10 @@ index 0000000000000000000000000000000000000000..020368da69b9a492155f6de6297f7473 +} diff --git a/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java b/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java new file mode 100644 -index 0000000000000000000000000000000000000000..61f21c0bf6658326a15b735c22001b4028b98800 +index 0000000000000000000000000000000000000000..ad368b58005b6b0453b709c2ef0ea23bca53d34a --- /dev/null +++ b/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java -@@ -0,0 +1,315 @@ +@@ -0,0 +1,301 @@ +package gg.pufferfish.pufferfish; + +import gg.pufferfish.pufferfish.simd.SIMDDetection; @@ -819,20 +819,6 @@ index 0000000000000000000000000000000000000000..61f21c0bf6658326a15b735c22001b40 + "an attempt to maintain 20 TPS. This option (defaults to true per", + "spigot/paper) can cause mobs to move fast after a lag spike."); + } -+ -+ public static boolean enableAsyncWorldSaving; -+ public static boolean asyncWorldSavingInitialized; -+ private static void asyncWorldSaving() { -+ boolean temp = getBoolean("enable-async-world-saving", false, -+ "Save world changes asynchronously. This is disabled by default as it is not", -+ "100% confident that this will not cause world corruption issues."); -+ -+ // This prevents us from changing the value during a reload. -+ if (!asyncWorldSavingInitialized) { -+ asyncWorldSavingInitialized = true; -+ enableAsyncWorldSaving = temp; -+ } -+ } + + public static boolean enableSuffocationOptimization; + private static void suffocationOptimization() { @@ -935,13 +921,13 @@ index 0000000000000000000000000000000000000000..61f21c0bf6658326a15b735c22001b40 + "the ender dragon whenever a player places an end crystal."); + } + -+ public static boolean disableMethodProfiler; ++ public static boolean disableMethodProfiler; + public static boolean disableOutOfOrderChat; -+ private static void miscSettings() { ++ private static void miscSettings() { + disableMethodProfiler = getBoolean("misc.disable-method-profiler", true); + disableOutOfOrderChat = getBoolean("misc.disable-out-of-order-chat", false); -+ setComment("misc", "Settings for things that don't belong elsewhere"); -+ } ++ setComment("misc", "Settings for things that don't belong elsewhere"); ++ } + +} diff --git a/src/main/java/gg/pufferfish/pufferfish/PufferfishLogger.java b/src/main/java/gg/pufferfish/pufferfish/PufferfishLogger.java @@ -1498,20 +1484,20 @@ index 200ed770b57e1a9240abf0473968d4b85cbefe3c..0acc7cfc0fb0264dd76a58f7582e79d8 public static long getCoordinateKey(final ChunkPos pair) { diff --git a/src/main/java/net/minecraft/network/chat/SignedMessageChain.java b/src/main/java/net/minecraft/network/chat/SignedMessageChain.java -index 85a8a687b1568a56e3e646b37ef78b562c1b8a82..69971b2c59e541ac4100b84c84e2972de1b44ca9 100644 +index ba12919c3f9aec34a9e64993b143ae92be5eb172..9efeab9078e2d08903e482718b840797e22ab1c2 100644 --- a/src/main/java/net/minecraft/network/chat/SignedMessageChain.java +++ b/src/main/java/net/minecraft/network/chat/SignedMessageChain.java @@ -38,7 +38,7 @@ public class SignedMessageChain { throw new SignedMessageChain.DecodeException(Component.translatable("chat.disabled.chain_broken"), false); // Paper - diff on change (if disconnects, need a new kick event cause) } else if (playerPublicKey.data().hasExpired()) { - throw new SignedMessageChain.DecodeException(Component.translatable("chat.disabled.expiredProfileKey", org.bukkit.event.player.PlayerKickEvent.Cause.EXPIRED_PROFILE_PUBLIC_KEY), false); // Paper - kick event causes + throw new SignedMessageChain.DecodeException(Component.translatable("chat.disabled.expiredProfileKey"), false, org.bukkit.event.player.PlayerKickEvent.Cause.EXPIRED_PROFILE_PUBLIC_KEY); // Paper - kick event causes - } else if (body.timeStamp().isBefore(this.lastTimeStamp)) { + } else if (!gg.pufferfish.pufferfish.PufferfishConfig.disableOutOfOrderChat && body.timeStamp().isBefore(this.lastTimeStamp)) { // Pufferfish - throw new SignedMessageChain.DecodeException(Component.translatable("multiplayer.disconnect.out_of_order_chat", org.bukkit.event.player.PlayerKickEvent.Cause.OUT_OF_ORDER_CHAT), true); // Paper - kick event causes + throw new SignedMessageChain.DecodeException(Component.translatable("multiplayer.disconnect.out_of_order_chat"), true, org.bukkit.event.player.PlayerKickEvent.Cause.OUT_OF_ORDER_CHAT); // Paper - kick event causes } else { this.lastTimeStamp = body.timeStamp(); diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 016b7628b289fb882f3ec15dd5b0cb4e0af72edc..1343649cd77a42dd502747581050b401840a6efe 100644 +index ec1197e498d0fa8d58466b8dffe46fb0683b530c..771a9c9f4c39fdfac26ee62db2a9cdcf15d9e1a6 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -314,6 +314,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop chunkConsumer) { diff --git a/src/main/java/net/minecraft/server/level/ServerEntity.java b/src/main/java/net/minecraft/server/level/ServerEntity.java -index b6e5a2fa247bdee2f681739a26630dff3fc6c51a..e385a62058204ba3b01ce594e7c180f9cc6cf664 100644 +index ae188ae314336d971303023c7b7b8ecf32bae253..79914528f6d255355284b04253218a7c4dec1ead 100644 --- a/src/main/java/net/minecraft/server/level/ServerEntity.java +++ b/src/main/java/net/minecraft/server/level/ServerEntity.java -@@ -177,7 +177,8 @@ public class ServerEntity { +@@ -183,7 +183,8 @@ public class ServerEntity { long i1 = this.positionCodec.encodeZ(vec3d); boolean flag6 = k < -32768L || k > 32767L || l < -32768L || l > 32767L || i1 < -32768L || i1 > 32767L; @@ -1744,7 +1730,7 @@ index b6e5a2fa247bdee2f681739a26630dff3fc6c51a..e385a62058204ba3b01ce594e7c180f9 if ((!flag2 || !flag3) && !(this.entity instanceof AbstractArrow)) { if (flag2) { packet1 = new ClientboundMoveEntityPacket.Pos(this.entity.getId(), (short) ((int) k), (short) ((int) l), (short) ((int) i1), this.entity.onGround()); -@@ -191,6 +192,7 @@ public class ServerEntity { +@@ -197,6 +198,7 @@ public class ServerEntity { flag4 = true; flag5 = true; } @@ -1753,10 +1739,10 @@ index b6e5a2fa247bdee2f681739a26630dff3fc6c51a..e385a62058204ba3b01ce594e7c180f9 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 e0dae41eb94da08649cba607975798dc2ac328ad..f7215d0a67e9e024af0c040c796ebcbb4f76e885 100644 +index 7a327afc8c08dfb94e66595b015887c6d0018c37..e387de54c9786711272f0ec3f8d312e472a9c4ea 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -899,6 +899,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -894,6 +894,7 @@ public class ServerLevel extends Level implements WorldGenLevel { org.spigotmc.ActivationRange.activateEntities(this); // Spigot this.timings.entityTick.startTiming(); // Spigot this.entityTickList.forEach((entity) -> { @@ -1764,7 +1750,7 @@ index e0dae41eb94da08649cba607975798dc2ac328ad..f7215d0a67e9e024af0c040c796ebcbb if (!entity.isRemoved()) { if (false && this.shouldDiscardEntity(entity)) { // CraftBukkit - We prevent spawning in general, so this butchering is not needed entity.discard(); -@@ -918,7 +919,20 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -913,7 +914,20 @@ public class ServerLevel extends Level implements WorldGenLevel { } gameprofilerfiller.push("tick"); @@ -1786,7 +1772,7 @@ index e0dae41eb94da08649cba607975798dc2ac328ad..f7215d0a67e9e024af0c040c796ebcbb gameprofilerfiller.pop(); } } -@@ -983,9 +997,11 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -978,9 +992,11 @@ public class ServerLevel extends Level implements WorldGenLevel { } // Paper start - optimise random block ticking private final BlockPos.MutableBlockPos chunkTickMutablePosition = new BlockPos.MutableBlockPos(); @@ -1799,7 +1785,7 @@ index e0dae41eb94da08649cba607975798dc2ac328ad..f7215d0a67e9e024af0c040c796ebcbb public void tickChunk(LevelChunk chunk, int randomTickSpeed) { ChunkPos chunkcoordintpair = chunk.getPos(); boolean flag = this.isRaining(); -@@ -996,7 +1012,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -991,7 +1007,7 @@ public class ServerLevel extends Level implements WorldGenLevel { gameprofilerfiller.push("thunder"); final BlockPos.MutableBlockPos blockposition = this.chunkTickMutablePosition; // Paper - use mutable to reduce allocation rate, final to force compile fail on change @@ -1808,64 +1794,18 @@ index e0dae41eb94da08649cba607975798dc2ac328ad..f7215d0a67e9e024af0c040c796ebcbb blockposition.set(this.findLightningTargetAround(this.getBlockRandomPos(j, 0, k, 15))); // Paper if (this.isRainingAt(blockposition)) { -@@ -1491,7 +1507,7 @@ public class ServerLevel extends Level implements WorldGenLevel { - - try (co.aikar.timings.Timing ignored = this.timings.worldSave.startTiming()) { - if (doFull) { -- this.saveLevelData(); -+ this.saveLevelData(true); // Pufferfish - } - - this.timings.worldSaveChunks.startTiming(); // Paper -@@ -1527,7 +1543,7 @@ public class ServerLevel extends Level implements WorldGenLevel { - progressListener.progressStartNoAbort(Component.translatable("menu.savingLevel")); - } - -- this.saveLevelData(); -+ this.saveLevelData(!close); // Pufferfish - if (progressListener != null) { - progressListener.progressStage(Component.translatable("menu.savingChunks")); - } -@@ -1550,12 +1566,12 @@ public class ServerLevel extends Level implements WorldGenLevel { - // CraftBukkit end - } - -- private void saveLevelData() { -+ private void saveLevelData(boolean async) { // Pufferfish - if (this.dragonFight != null) { - this.serverLevelData.setEndDragonFightData(this.dragonFight.saveData()); // CraftBukkit - } - -- this.getChunkSource().getDataStorage().save(); -+ this.getChunkSource().getDataStorage().save(async); // Pufferfish - } - - public List getEntities(EntityTypeTest filter, Predicate predicate) { diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 8568de90c39838e1627f286c5c3ca4b0f19002cb..04b0eb391bb524dd7af14b862d89c0f2494a8206 100644 +index 5234d3dcb60d84f65621713b57bea034038af2a5..b5917417aaed74555917772650fe51485281c2ec 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -1124,6 +1124,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1121,6 +1121,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl @Override public void handleEditBook(ServerboundEditBookPacket packet) { + if (!gg.pufferfish.pufferfish.PufferfishConfig.enableBooks && !this.player.getBukkitEntity().hasPermission("pufferfish.usebooks")) return; // Pufferfish - // Paper start + // Paper start - Book size limits if (!this.cserver.isPrimaryThread()) { List pageList = packet.getPages(); -diff --git a/src/main/java/net/minecraft/util/worldupdate/WorldUpgrader.java b/src/main/java/net/minecraft/util/worldupdate/WorldUpgrader.java -index f2a7cb6ebed7a4b4019a09af2a025f624f6fe9c9..47636aad5fa20d1c28d3520beb0729df9b30cf6c 100644 ---- a/src/main/java/net/minecraft/util/worldupdate/WorldUpgrader.java -+++ b/src/main/java/net/minecraft/util/worldupdate/WorldUpgrader.java -@@ -224,7 +224,7 @@ public class WorldUpgrader { - } - } - -- this.overworldDataStorage.save(); -+ this.overworldDataStorage.save(false); // Pufferfish - i = Util.getMillis() - i; - WorldUpgrader.LOGGER.info("World optimizaton finished after {} ms", i); - this.finished = true; diff --git a/src/main/java/net/minecraft/world/CompoundContainer.java b/src/main/java/net/minecraft/world/CompoundContainer.java index 241fec02e6869c638d3a160819b32173a081467b..6a8f9e8f5bf108674c47018def28906e2d0a729c 100644 --- a/src/main/java/net/minecraft/world/CompoundContainer.java @@ -1979,10 +1919,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 14fbaef2215f7de4acb5303ad6f677b348f855d8..a8d8d261daed2ebbbea3f4f356434942997ba541 100644 +index 1a19f18b5d4c42ac07e7e4f305e140954dea481b..7a50a1fe485de232abb9d626e8001eee78a33b1b 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -309,7 +309,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -308,7 +308,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S public double yo; public double zo; private Vec3 position; @@ -1991,7 +1931,7 @@ index 14fbaef2215f7de4acb5303ad6f677b348f855d8..a8d8d261daed2ebbbea3f4f356434942 private ChunkPos chunkPosition; private Vec3 deltaMovement; private float yRot; -@@ -440,6 +440,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -439,6 +439,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S return this.originWorld; } // Paper end @@ -2004,7 +1944,7 @@ index 14fbaef2215f7de4acb5303ad6f677b348f855d8..a8d8d261daed2ebbbea3f4f356434942 public float getBukkitYaw() { return this.yRot; } -@@ -808,6 +814,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -807,6 +813,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } public void tick() { @@ -2017,7 +1957,7 @@ index 14fbaef2215f7de4acb5303ad6f677b348f855d8..a8d8d261daed2ebbbea3f4f356434942 this.baseTick(); } -@@ -4410,16 +4422,18 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -4407,16 +4419,18 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } public boolean updateFluidHeightAndDoFluidPushing(TagKey tag, double speed) { @@ -2043,7 +1983,7 @@ index 14fbaef2215f7de4acb5303ad6f677b348f855d8..a8d8d261daed2ebbbea3f4f356434942 double d1 = 0.0D; boolean flag = this.isPushedByFluid(); boolean flag1 = false; -@@ -4427,14 +4441,61 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -4424,14 +4438,61 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S int k1 = 0; BlockPos.MutableBlockPos blockposition_mutableblockposition = new BlockPos.MutableBlockPos(); @@ -2111,7 +2051,7 @@ index 14fbaef2215f7de4acb5303ad6f677b348f855d8..a8d8d261daed2ebbbea3f4f356434942 if (d2 >= axisalignedbb.minY) { flag1 = true; -@@ -4456,9 +4517,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -4453,9 +4514,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S // CraftBukkit end } } @@ -2125,7 +2065,7 @@ index 14fbaef2215f7de4acb5303ad6f677b348f855d8..a8d8d261daed2ebbbea3f4f356434942 if (vec3d.length() > 0.0D) { if (k1 > 0) { diff --git a/src/main/java/net/minecraft/world/entity/EntityType.java b/src/main/java/net/minecraft/world/entity/EntityType.java -index 081937597a8984b52a1e92d4c6032c04c942116e..0ffd377dba738bd651b0c7f5ca0a0d61aaa1d82c 100644 +index e52f3da3b63cc3dba59d3e874a8420dd312b5e96..f772f7c4cd41ec52bea53d619b5b953971825df0 100644 --- a/src/main/java/net/minecraft/world/entity/EntityType.java +++ b/src/main/java/net/minecraft/world/entity/EntityType.java @@ -305,6 +305,8 @@ public class EntityType implements FeatureElement, EntityTypeT @@ -2138,7 +2078,7 @@ index 081937597a8984b52a1e92d4c6032c04c942116e..0ffd377dba738bd651b0c7f5ca0a0d61 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 4cbb1f5d904191e59395df0177e76e94faae764c..9b7e786d5ae6bdeeb96df6e9c4d1b24e1e856e58 100644 +index 5e2f6a1cdaf83468c0db6a2cc8fefb71e6ec51d8..370033cb058a20a83f80b8e2618e419bb3fd97cf 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; @@ -2200,7 +2140,7 @@ index 4cbb1f5d904191e59395df0177e76e94faae764c..9b7e786d5ae6bdeeb96df6e9c4d1b24e 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 0b5334004b9d0489e8465824870662b467ce321b..2f3dc569ff9cdead48aa831c96c027cc7255d609 100644 +index 3ebf777811cba0cc45cfae7587b277f06adeb045..4e3d48f6af493f2cded599f51ad5d2cd07e252f2 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 { @@ -2244,7 +2184,7 @@ index 0b5334004b9d0489e8465824870662b467ce321b..2f3dc569ff9cdead48aa831c96c027cc this.level().getProfiler().pop(); } diff --git a/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java b/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java -index 7204b973c3ad9239e82355513f6d538107102e48..3087f8359b098682a345399c85395de8a15b6eed 100644 +index 897d7632ecfea40890433474870dd7a5e534d8ab..683c9693754d1a87b7e8fccc757a0d0963351f60 100644 --- a/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java +++ b/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java @@ -23,9 +23,11 @@ public class AttributeMap { @@ -2310,19 +2250,19 @@ index b738ee2d3801fadfd09313f05ae24593e56b0ec6..1635818fc4b1788c0d397085239df6dd public boolean hasTasks() { for (WrappedGoal task : this.availableGoals) { diff --git a/src/main/java/net/minecraft/world/entity/ai/goal/MoveToBlockGoal.java b/src/main/java/net/minecraft/world/entity/ai/goal/MoveToBlockGoal.java -index 4bbc36404b396500df0d9db380cf223b5897662e..382e9d18b81bcbeb20cb3b828b66260f07a845e6 100644 +index 07519c817cc6de04a98198c43a0c2b02ba3141eb..ee66be6e5aa45ec8448b6d30785a6e71200b09e3 100644 --- a/src/main/java/net/minecraft/world/entity/ai/goal/MoveToBlockGoal.java +++ b/src/main/java/net/minecraft/world/entity/ai/goal/MoveToBlockGoal.java -@@ -119,6 +119,7 @@ public abstract class MoveToBlockGoal extends Goal { +@@ -120,6 +120,7 @@ public abstract class MoveToBlockGoal extends Goal { for(int m = 0; m <= l; m = m > 0 ? -m : 1 - m) { for(int n = m < l && m > -l ? l : 0; n <= l; n = n > 0 ? -n : 1 - n) { mutableBlockPos.setWithOffset(blockPos, m, k - 1, n); + if (!this.mob.level().hasChunkAt(mutableBlockPos)) continue; // Pufferfish - if this block isn't loaded, continue if (this.mob.isWithinRestriction(mutableBlockPos) && this.isValidTarget(this.mob.level(), mutableBlockPos)) { this.blockPos = mutableBlockPos; - setTargetPosition(mutableBlockPos.immutable()); // Paper + this.mob.movingTarget = mutableBlockPos == BlockPos.ZERO ? null : mutableBlockPos.immutable(); // Paper diff --git a/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java b/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java -index c157309ac78e7af084d3acb6e8b2bcd469a39d5e..ac5e5676b194a2a99e5cf53eb89c1152cac963b8 100644 +index c8a80c1b2fedff22e8a877d466062375ffb2f0d7..3c4f4af85a3f2d4f9f52827164e63727b916c33a 100644 --- a/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java +++ b/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java @@ -75,9 +75,18 @@ public class TargetingConditions { @@ -2330,7 +2270,7 @@ index c157309ac78e7af084d3acb6e8b2bcd469a39d5e..ac5e5676b194a2a99e5cf53eb89c1152 if (this.range > 0.0D) { - double d = this.testInvisible ? targetEntity.getVisibilityPercent(baseEntity) : 1.0D; -- double e = Math.max((this.useFollowRange ? this.getFollowRange(baseEntity) : this.range) * d, 2.0D); // Paper +- double e = Math.max((this.useFollowRange ? this.getFollowRange(baseEntity) : this.range) * d, 2.0D); // Paper - Fix MC-145656 + // Pufferfish start - check range before getting visibility + // d = invisibility percent, e = follow range adjusted for invisibility, f = distance double f = baseEntity.distanceToSqr(targetEntity.getX(), targetEntity.getY(), targetEntity.getZ()); @@ -2347,7 +2287,7 @@ index c157309ac78e7af084d3acb6e8b2bcd469a39d5e..ac5e5676b194a2a99e5cf53eb89c1152 return false; } 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 6b614818b14ecfc8fc82b523eeb7e21fdf9bf1ba..8820905ac733a8915cc1697259b2bef14d97e471 100644 +index 44fa2d4f90389f5526746bd94a2450c03340bd0b..4fba7c2f6ec363846a772ef2a63e9b3fc1037de5 100644 --- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java +++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java @@ -241,13 +241,22 @@ public class Bat extends AmbientCreature { @@ -2391,7 +2331,7 @@ index 5ad5f22e5aa26445e5eb229958e7bf356bdd460e..d241ca4d0295f9fce39c11197bd435cf this.level().getProfiler().pop(); this.level().getProfiler().push("allayActivityUpdate"); diff --git a/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java b/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java -index 387006271c246362b0df1bfcadca7b7096660003..9158c5a507904c46a8fe2fdad9a0b6ba3a9b2460 100644 +index b21e180641d17438997a80e5bcb0ec7998d24a2e..33c160994f70f71446d665e7487913437c9f9db4 100644 --- a/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java +++ b/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java @@ -275,9 +275,11 @@ public class Axolotl extends Animal implements LerpingModel, VariantHolder getTypeKey(); + @@ -2773,7 +2713,7 @@ index b05e11e6b091c7616df5a9bbef867b06cafe3dc3..2902c29cd7f0b99b84cff3664fc4ec15 protected Level(WritableLevelData worlddatamutable, ResourceKey resourcekey, RegistryAccess iregistrycustom, Holder holder, Supplier supplier, boolean flag, boolean flag1, long i, int j, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider, org.bukkit.World.Environment env, java.util.function.Function paperWorldConfigCreator, java.util.concurrent.Executor executor) { // Paper - create paper world config; Async-Anti-Xray: Pass executor this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName()); // Spigot -@@ -1318,13 +1320,13 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1317,13 +1319,13 @@ public abstract class Level implements LevelAccessor, AutoCloseable { try { tickConsumer.accept(entity); MinecraftServer.getServer().executeMidTickTasks(); // Paper - execute chunk tasks mid tick @@ -2789,7 +2729,7 @@ index b05e11e6b091c7616df5a9bbef867b06cafe3dc3..2902c29cd7f0b99b84cff3664fc4ec15 // Paper end } } -@@ -1798,6 +1800,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1797,6 +1799,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { } public ProfilerFiller getProfiler() { @@ -2798,7 +2738,7 @@ index b05e11e6b091c7616df5a9bbef867b06cafe3dc3..2902c29cd7f0b99b84cff3664fc4ec15 } diff --git a/src/main/java/net/minecraft/world/level/NaturalSpawner.java b/src/main/java/net/minecraft/world/level/NaturalSpawner.java -index dc211c6aedc178ac50b7d05aab3662c422211cbd..3fb96de68b93e8d33bd5ab9137e5d4facc94d788 100644 +index ba67c55cde0120786e6705fed96fab4b611c1c75..2c300e3769acf534ee3bed91663374eca0acf5df 100644 --- a/src/main/java/net/minecraft/world/level/NaturalSpawner.java +++ b/src/main/java/net/minecraft/world/level/NaturalSpawner.java @@ -429,12 +429,12 @@ public final class NaturalSpawner { @@ -2868,7 +2808,7 @@ index 4f9187d9d640618c40a2fa528f36b845017b4777..efca73d4de33028cf9df944f36e51b7b } } diff --git a/src/main/java/net/minecraft/world/level/block/entity/ChestBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/ChestBlockEntity.java -index a71414397bd45ee7bcacfeef0041d80dfa25f114..d66806565770cb03a21794f99e5c4b0f3040b26a 100644 +index 9b1243d96e0694c62fc9e82e9be540bce0d2b3ad..3514022d898a24052c917ebf55dcef3e757d6836 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/ChestBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/ChestBlockEntity.java @@ -31,7 +31,10 @@ import org.bukkit.entity.HumanEntity; @@ -2946,7 +2886,7 @@ index a71414397bd45ee7bcacfeef0041d80dfa25f114..d66806565770cb03a21794f99e5c4b0f @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 df1c1c27b7c0065f8179d59bdb9de01dde22befa..1ddae39df4e7cb36db412ebdec8ca9d2818450a9 100644 +index a61d7cd2b078fe511ff00344197b6ea11feebfb2..7041394d366e6145369d032a0a14f0478af4679f 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 @@ -3060,7 +3000,7 @@ index a94300a457b25f0e33a8eeabba6dd5720ca9ab1e..b41635dd0569ff7df909df492d3e850a } diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -index 27e8ee4507460b1cc72de692b41562b9f4f13929..1afac69b5bc7055d2adb07aea4755b87b246275c 100644 +index d85ed706703e50f76df8db414827ccd41a5985d9..177673cc19cd70f60bb489cb2e74b39fbb8f8d24 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java @@ -86,6 +86,18 @@ public class LevelChunk extends ChunkAccess { @@ -3092,7 +3032,7 @@ index 27e8ee4507460b1cc72de692b41562b9f4f13929..1afac69b5bc7055d2adb07aea4755b87 // CraftBukkit start diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunkSection.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunkSection.java -index 9da74764a91bea7822c0444b48623b23e038d3f2..37228dc74463dddcc55301489c41aa253017f2d4 100644 +index 1a473187c22c4158959a3aae33a6823229c5b7a7..1df090afcbf5ac43cd03c61b154b7902eb2f3bc1 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunkSection.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunkSection.java @@ -25,6 +25,7 @@ public class LevelChunkSection { @@ -3141,7 +3081,7 @@ index 4cdfc433df67afcd455422e9baf56f167dd712ae..57fcf3910f45ce371ac2e237b277b103 private void ensureActiveIsNotIterated() { // Paper - replace with better logic, do not delay removals diff --git a/src/main/java/net/minecraft/world/level/material/FlowingFluid.java b/src/main/java/net/minecraft/world/level/material/FlowingFluid.java -index e21f4c5aff3a8e97101f6efc1349fbecf326b5ea..c55f51e6db55f9fa66f53eef0e7a56af5f81d742 100644 +index 6d8ff6c06af5545634f255ed17dc1e489ece2548..6411aa4ff6bd4cabb25c426fa8f4a7eedb969c03 100644 --- a/src/main/java/net/minecraft/world/level/material/FlowingFluid.java +++ b/src/main/java/net/minecraft/world/level/material/FlowingFluid.java @@ -45,6 +45,8 @@ public abstract class FlowingFluid extends Fluid { @@ -3168,7 +3108,7 @@ index e21f4c5aff3a8e97101f6efc1349fbecf326b5ea..c55f51e6db55f9fa66f53eef0e7a56af private final Map shapes = Maps.newIdentityHashMap(); public FlowingFluid() {} -@@ -252,6 +262,8 @@ public abstract class FlowingFluid extends Fluid { +@@ -251,6 +261,8 @@ public abstract class FlowingFluid extends Fluid { return false; } // Paper end - optimise collisions @@ -3177,7 +3117,7 @@ index e21f4c5aff3a8e97101f6efc1349fbecf326b5ea..c55f51e6db55f9fa66f53eef0e7a56af Object2ByteLinkedOpenHashMap object2bytelinkedopenhashmap; if (!state.getBlock().hasDynamicShape() && !fromState.getBlock().hasDynamicShape()) { -@@ -259,9 +271,16 @@ public abstract class FlowingFluid extends Fluid { +@@ -258,9 +270,16 @@ public abstract class FlowingFluid extends Fluid { } else { object2bytelinkedopenhashmap = null; } @@ -3194,7 +3134,7 @@ index e21f4c5aff3a8e97101f6efc1349fbecf326b5ea..c55f51e6db55f9fa66f53eef0e7a56af if (object2bytelinkedopenhashmap != null) { block_a = new Block.BlockStatePairKey(state, fromState, face); byte b0 = object2bytelinkedopenhashmap.getAndMoveToFirst(block_a); -@@ -272,11 +291,22 @@ public abstract class FlowingFluid extends Fluid { +@@ -271,11 +290,22 @@ public abstract class FlowingFluid extends Fluid { } else { block_a = null; } @@ -3217,7 +3157,7 @@ index e21f4c5aff3a8e97101f6efc1349fbecf326b5ea..c55f51e6db55f9fa66f53eef0e7a56af if (object2bytelinkedopenhashmap != null) { if (object2bytelinkedopenhashmap.size() == 200) { object2bytelinkedopenhashmap.removeLastByte(); -@@ -284,6 +314,11 @@ public abstract class FlowingFluid extends Fluid { +@@ -283,6 +313,11 @@ public abstract class FlowingFluid extends Fluid { object2bytelinkedopenhashmap.putAndMoveToFirst(block_a, (byte) (flag ? 1 : 0)); } @@ -3229,57 +3169,6 @@ index e21f4c5aff3a8e97101f6efc1349fbecf326b5ea..c55f51e6db55f9fa66f53eef0e7a56af return flag; } -diff --git a/src/main/java/net/minecraft/world/level/saveddata/SavedData.java b/src/main/java/net/minecraft/world/level/saveddata/SavedData.java -index 697df9a9f050c0130246ce2b08a859965bddf184..6df6a6bd89979bcd728e2f5bec948437d6ff9498 100644 ---- a/src/main/java/net/minecraft/world/level/saveddata/SavedData.java -+++ b/src/main/java/net/minecraft/world/level/saveddata/SavedData.java -@@ -29,17 +29,28 @@ public abstract class SavedData { - return this.dirty; - } - -- public void save(File file) { -+ public void save(File file) { save(file, false); } // Pufferfish -+ public void save(File file, boolean async) { // Pufferfish - if (this.isDirty()) { - CompoundTag compoundTag = new CompoundTag(); - compoundTag.put("data", this.save(new CompoundTag())); - NbtUtils.addCurrentDataVersion(compoundTag); - -+ // Pufferfish start -+ Runnable writeRunnable = () -> { - try { - NbtIo.writeCompressed(compoundTag, file.toPath()); - } catch (IOException var4) { - LOGGER.error("Could not save data {}", this, var4); - } -+ }; -+ -+ if (gg.pufferfish.pufferfish.PufferfishConfig.enableAsyncWorldSaving && async) { -+ net.minecraft.Util.ioPool().execute(writeRunnable); -+ } else { -+ writeRunnable.run(); -+ } -+ // Pufferfish end - - this.setDirty(false); - } -diff --git a/src/main/java/net/minecraft/world/level/storage/DimensionDataStorage.java b/src/main/java/net/minecraft/world/level/storage/DimensionDataStorage.java -index d051e8c1db6b5c42b8df0be54d9d48ba0e7b0077..6488a61bb05b0f2af23c77bc6df7c3014042ec5e 100644 ---- a/src/main/java/net/minecraft/world/level/storage/DimensionDataStorage.java -+++ b/src/main/java/net/minecraft/world/level/storage/DimensionDataStorage.java -@@ -118,10 +118,10 @@ public class DimensionDataStorage { - return bl; - } - -- public void save() { -+ public void save(boolean async) { // Pufferfish - this.cache.forEach((id, state) -> { - if (state != null) { -- state.save(this.getDataFile(id)); -+ state.save(this.getDataFile(id), async); // Pufferfish - } - - }); diff --git a/src/main/java/net/minecraft/world/level/storage/loot/LootParams.java b/src/main/java/net/minecraft/world/level/storage/loot/LootParams.java index e43d07ccdd36f0c9f5b8e9c74cf0d87e17eec66a..8e441f7c2b2d911a0c0111aaa231fc6adae08730 100644 --- a/src/main/java/net/minecraft/world/level/storage/loot/LootParams.java @@ -3384,7 +3273,7 @@ index ebe65474a4a05ff1637d7f37ebcfe690af59def5..42142c512b12e5b269c19f1e821c50e7 @Nullable diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 9ef8f911632598fd589368cedde268c8abcad3b6..cfc41926305441cb36ed67a8cb7e327cd80ff301 100644 +index d5e473d621ba09f6cf84ba9ca0e870f5ff6e02f3..8962ced18e0dac6603df54ba7d99588fae24073c 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -264,7 +264,7 @@ import javax.annotation.Nullable; // Paper @@ -3407,7 +3296,7 @@ index 9ef8f911632598fd589368cedde268c8abcad3b6..cfc41926305441cb36ed67a8cb7e327c + } } } - // Paper end + // Paper end - Wait for Async Tasks during shutdown diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftShapelessRecipe.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftShapelessRecipe.java index 96d772eb02f79f8c478f5e6f065e387aa7665b18..c5ce412f321b8b4f31cc042893659e213b081f29 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftShapelessRecipe.java @@ -3421,7 +3310,7 @@ index 96d772eb02f79f8c478f5e6f065e387aa7665b18..c5ce412f321b8b4f31cc042893659e21 } } diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -index ec2396f0e5d62b10450eaa7239a8c5479638b3c3..c909efd2060dc95bd3ecb8c9fec36a1e69a642ff 100644 +index 509f8487a170f3dc84b091acf16df26e42391189..2338ba106c19c3e61d1a2088cc51d0744432666d 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java +++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java @@ -482,7 +482,7 @@ public final class CraftMagicNumbers implements UnsafeValues { @@ -3447,7 +3336,7 @@ index 774556a62eb240da42e84db4502e2ed43495be17..80553face9c70c2a3d897681e7761df8 if (stream != null) { diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java -index 2d31752478636bd21bbff5b430e5acb76b5d91c2..651063863b451d24ffe39f0a4d8db296e58ff585 100644 +index fafc8b84d6b6368c70b8eedfdb4c3a9deace9c26..a69814d3a6214af734d670fe5545518a5f8a8dc5 100644 --- a/src/main/java/org/spigotmc/ActivationRange.java +++ b/src/main/java/org/spigotmc/ActivationRange.java @@ -38,6 +38,10 @@ import co.aikar.timings.MinecraftTimings; @@ -3463,7 +3352,7 @@ index 2d31752478636bd21bbff5b430e5acb76b5d91c2..651063863b451d24ffe39f0a4d8db296 { @@ -222,6 +226,25 @@ public class ActivationRange } - // Paper end - configurable marker ticking + // Paper end - Configurable marker ticking ActivationRange.activateEntity(entity); + + // Pufferfish start diff --git a/patches/server/0003-Fix-pufferfish-issues.patch b/patches/server/0003-Fix-pufferfish-issues.patch index 23b2191fa..7a5e18f1a 100644 --- a/patches/server/0003-Fix-pufferfish-issues.patch +++ b/patches/server/0003-Fix-pufferfish-issues.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Fix pufferfish issues diff --git a/build.gradle.kts b/build.gradle.kts -index 4bdf291e2e2d96ea7385ae667983f1731baa176a..5b8a28969451b12c4fc66976afd052ffa5805932 100644 +index f253b340d75302fda8e59a2ad113f652c2417869..0c92d10f334f82d196e065c0811d0c1f48887377 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -232,5 +232,7 @@ val runtimeClasspathForRunDev = sourceSets.main.flatMap { src -> @@ -18,10 +18,10 @@ index 4bdf291e2e2d96ea7385ae667983f1731baa176a..5b8a28969451b12c4fc66976afd052ff + jvmArgs("-DPaper.isRunDev=true") } diff --git a/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java b/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java -index 61f21c0bf6658326a15b735c22001b4028b98800..51ec029e33f8bdb1710ad36f014fa769da2db41c 100644 +index ad368b58005b6b0453b709c2ef0ea23bca53d34a..2dac1ec1daf4084f33ead33d5128d2955da23ee2 100644 --- a/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java +++ b/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java -@@ -246,7 +246,7 @@ public class PufferfishConfig { +@@ -232,7 +232,7 @@ public class PufferfishConfig { public static int activationDistanceMod; private static void dynamicActivationOfBrains() throws IOException { @@ -30,7 +30,7 @@ index 61f21c0bf6658326a15b735c22001b4028b98800..51ec029e33f8bdb1710ad36f014fa769 startDistance = getInt("dab.start-distance", "activation-range.start-distance", 12, "This value determines how far away an entity has to be", "from the player to start being effected by DEAR."); -@@ -290,7 +290,7 @@ public class PufferfishConfig { +@@ -276,7 +276,7 @@ public class PufferfishConfig { public static boolean throttleInactiveGoalSelectorTick; private static void inactiveGoalSelectorThrottle() { @@ -40,10 +40,10 @@ index 61f21c0bf6658326a15b735c22001b4028b98800..51ec029e33f8bdb1710ad36f014fa769 "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 c80dc73d7fd7d6cf3b87d1626129273e944d6649..916fa1ecef7a73b494d14c21c4db407d9d8316d7 100644 +index e387de54c9786711272f0ec3f8d312e472a9c4ea..e0f1f23bcf4f59cffa98ea1c70f774fd787dae08 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -997,7 +997,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -992,7 +992,7 @@ public class ServerLevel extends Level implements WorldGenLevel { } // Paper start - optimise random block ticking private final BlockPos.MutableBlockPos chunkTickMutablePosition = new BlockPos.MutableBlockPos(); @@ -53,11 +53,11 @@ index c80dc73d7fd7d6cf3b87d1626129273e944d6649..916fa1ecef7a73b494d14c21c4db407d private int currentIceAndSnowTick = 0; protected void resetIceAndSnowTick() { this.currentIceAndSnowTick = this.randomTickRandom.nextInt(16); } // Pufferfish diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 3bf4aa21e2ad602bf9d85d3fcd4f43e0357ef221..43729a9f1282999d5cfcffdc70aac9e8cc76c916 100644 +index 4f568184557d21b44569a9a16456962ee983101b..aa6c3df047e97bde3c352caae7eb3c09e2f45978 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -212,8 +212,8 @@ public abstract class Level implements LevelAccessor, AutoCloseable { - // Paper end +@@ -211,8 +211,8 @@ public abstract class Level implements LevelAccessor, AutoCloseable { + // Paper end - Use getChunkIfLoadedImmediately public abstract ResourceKey getTypeKey(); - @@ -68,7 +68,7 @@ index 3bf4aa21e2ad602bf9d85d3fcd4f43e0357ef221..43729a9f1282999d5cfcffdc70aac9e8 protected Level(WritableLevelData worlddatamutable, ResourceKey resourcekey, RegistryAccess iregistrycustom, Holder holder, Supplier supplier, boolean flag, boolean flag1, long i, int j, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider, org.bukkit.World.Environment env, java.util.function.Function paperWorldConfigCreator, java.util.concurrent.Executor executor) { // Paper - create paper world config; Async-Anti-Xray: Pass executor this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName()); // Spigot diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -index 1afac69b5bc7055d2adb07aea4755b87b246275c..76a4708464d35dd7782b1032288b52d61ee8fffc 100644 +index 177673cc19cd70f60bb489cb2e74b39fbb8f8d24..c3fb622845770bcee9ddd6ebbeee174b06ee16eb 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java @@ -122,7 +122,7 @@ public class LevelChunk extends ChunkAccess { diff --git a/patches/server/0004-Purpur-config-files.patch b/patches/server/0004-Purpur-config-files.patch index d9b1b48d3..705d5b047 100644 --- a/patches/server/0004-Purpur-config-files.patch +++ b/patches/server/0004-Purpur-config-files.patch @@ -37,7 +37,7 @@ index 692c962193cf9fcc6801fc93f3220bdc673d527b..8cde30544e14f8fc2dac32966ae3c21f metrics.addCustomChart(new Metrics.DrilldownPie("java_version", () -> { Map> map = new HashMap<>(); diff --git a/src/main/java/net/minecraft/commands/CommandSourceStack.java b/src/main/java/net/minecraft/commands/CommandSourceStack.java -index ec4152f7372ddad216039a489fb5d72f963b4f18..ca926baddf27536252a442bb23d0e34ac9fc08c0 100644 +index 623403c56d79e29421f340e97c05488efaf1893d..d7333193b20fc6d9a4aaa0ef00a2a66655250081 100644 --- a/src/main/java/net/minecraft/commands/CommandSourceStack.java +++ b/src/main/java/net/minecraft/commands/CommandSourceStack.java @@ -335,6 +335,30 @@ public class CommandSourceStack implements ExecutionCommandSource resourcekey, RegistryAccess iregistrycustom, Holder holder, Supplier supplier, boolean flag, boolean flag1, long i, int j, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider, org.bukkit.World.Environment env, java.util.function.Function paperWorldConfigCreator, java.util.concurrent.Executor executor) { // Paper - create paper world config; Async-Anti-Xray: Pass executor this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName()); // Spigot this.paperConfig = paperWorldConfigCreator.apply(this.spigotConfig); // Paper - create paper world config @@ -112,7 +112,7 @@ index 43729a9f1282999d5cfcffdc70aac9e8cc76c916..f528e4df3299d76d1ecc846721f34ae3 this.world = new CraftWorld((ServerLevel) this, gen, biomeProvider, env); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 63a27079bae650672c027443ff4dc8d4e21a4d06..d1776bb7309b6e35115ab39e31d4bf4b96e5e28b 100644 +index 0d37bde27beaa2d6730bb9f82d4b686f6f60e40b..5248e951e1307c2e019db276dcc80d9d41693fb0 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -1037,6 +1037,7 @@ public final class CraftServer implements Server { @@ -159,7 +159,7 @@ index 63a27079bae650672c027443ff4dc8d4e21a4d06..d1776bb7309b6e35115ab39e31d4bf4b public void restart() { org.spigotmc.RestartCommand.restart(); diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java -index ef8bbef6e4143b9432ee2ae2fb79e2aa2a9b84df..537fb93e1207d659d9d5375bf53981708393486a 100644 +index 62d9737a8d36d4863ffd7853ba290ef83c759687..bc001869b10fa497d3473f7e45a2a7120e61f87e 100644 --- a/src/main/java/org/bukkit/craftbukkit/Main.java +++ b/src/main/java/org/bukkit/craftbukkit/Main.java @@ -174,6 +174,14 @@ public class Main { diff --git a/patches/server/0005-Purpur-client-support.patch b/patches/server/0005-Purpur-client-support.patch index 931f716e3..619b0c8df 100644 --- a/patches/server/0005-Purpur-client-support.patch +++ b/patches/server/0005-Purpur-client-support.patch @@ -5,19 +5,19 @@ Subject: [PATCH] Purpur client support diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index be05a52be037042c6158100e2ce880b8ed415d53..95240bee8f76fd651166ecabe80885ac6601c34e 100644 +index 38df47d282713522b3c5784a562ff09e3151fb27..0b90e6810ec549471fad70406f2f054897c1eb24 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -281,6 +281,7 @@ public class ServerPlayer extends Player { public com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent playerNaturallySpawnedEvent; // Paper - public @Nullable String clientBrandName = null; // Paper - Brand name - public org.bukkit.event.player.PlayerQuitEvent.QuitReason quitReason = null; // Paper - there are a lot of changes to do if we change all methods leading to the event + public @Nullable String clientBrandName = null; // Paper - Brand support + public org.bukkit.event.player.PlayerQuitEvent.QuitReason quitReason = null; // Paper - Add API for quit reason; there are a lot of changes to do if we change all methods leading to the event + public boolean purpurClient = false; // Purpur // Paper start - replace player chunk loader private final java.util.concurrent.atomic.AtomicReference viewDistances = new java.util.concurrent.atomic.AtomicReference<>(new io.papermc.paper.chunk.system.RegionizedPlayerChunkLoader.ViewDistances(-1, -1, -1)); diff --git a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java -index d28d0ef6105ddeb562ddf31ae9088739856941fc..49aaa5147b9b904fa912c1811dc66d47d2e8dada 100644 +index f5f2d65d2e02b0d79352585d9d4ef588ab59dce7..fda3c2c006ffdf8743097da05e75ecc6c7d3893d 100644 --- a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java @@ -56,6 +56,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack @@ -43,7 +43,7 @@ index d28d0ef6105ddeb562ddf31ae9088739856941fc..49aaa5147b9b904fa912c1811dc66d47 try { String channels = payload.toString(com.google.common.base.Charsets.UTF_8); diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index da63b4050be25dcb91d04df8c2fcc643cbb0751d..96e4f1c21e13bc673ff83279ca51c1f1467a5e6e 100644 +index b8d3398b349d9294de6b8a8594b054d3c84dbe0a..4ab63267c4ec808d3daf94478a1425b5aa70b75f 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -3373,4 +3373,11 @@ public class CraftPlayer extends CraftHumanEntity implements Player { diff --git a/patches/server/0007-Component-related-conveniences.patch b/patches/server/0007-Component-related-conveniences.patch index c19d76df5..04646987b 100644 --- a/patches/server/0007-Component-related-conveniences.patch +++ b/patches/server/0007-Component-related-conveniences.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Component related conveniences diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 95240bee8f76fd651166ecabe80885ac6601c34e..257675e0f3d44dec2d532161713609502b2ae868 100644 +index 0b90e6810ec549471fad70406f2f054897c1eb24..a1dff77b662f178bd42c0d232ecea1ca2cc4f6d3 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -1884,6 +1884,26 @@ public class ServerPlayer extends Player { @@ -36,7 +36,7 @@ index 95240bee8f76fd651166ecabe80885ac6601c34e..257675e0f3d44dec2d53216171360950 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 e98a455b6bca9d094d0da323bddd7b3f2c07bb23..05131b298048de6418cfa103d883039b55740dfa 100644 +index 1c89b95ac40120ee970da0f06fd7fff36eb55e61..2a4b63ead77cf6117b1ebefe9d9dbd6c73ed4d95 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -1064,6 +1064,20 @@ public abstract class PlayerList { @@ -61,7 +61,7 @@ index e98a455b6bca9d094d0da323bddd7b3f2c07bb23..05131b298048de6418cfa103d883039b Iterator iterator = this.players.iterator(); diff --git a/src/main/java/net/minecraft/world/damagesource/DamageSource.java b/src/main/java/net/minecraft/world/damagesource/DamageSource.java -index 25a5a3b949a0eb632611355e74ccd4865be108ca..14fcfd7c1d3a62833978e163f4e0d6f9b2203042 100644 +index fc6903b20a6e084729306fc960a6fc80e094f76c..dad8d358e60902eb186cbc5686219f66d3babf89 100644 --- a/src/main/java/net/minecraft/world/damagesource/DamageSource.java +++ b/src/main/java/net/minecraft/world/damagesource/DamageSource.java @@ -126,6 +126,15 @@ public class DamageSource { @@ -81,10 +81,10 @@ index 25a5a3b949a0eb632611355e74ccd4865be108ca..14fcfd7c1d3a62833978e163f4e0d6f9 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 5cbe6cb0676ac23e184e7586e2dacbbc1d5fb218..4bcd36f4767975e87ec6ed12a3c80e834e2d497b 100644 +index 7a50a1fe485de232abb9d626e8001eee78a33b1b..59ec8a66c76bea89f14aa19f61c03571a00c7e4f 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -4141,6 +4141,20 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -4138,6 +4138,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 59fcb77ce..b01a32d0b 100644 --- a/patches/server/0008-Ridables.patch +++ b/patches/server/0008-Ridables.patch @@ -5,12 +5,12 @@ Subject: [PATCH] Ridables diff --git a/src/main/java/net/minecraft/core/BlockPos.java b/src/main/java/net/minecraft/core/BlockPos.java -index c47aa87db42dea74a2e07ffe6015257fa337da23..fb672028548fbc3c026c3823024249e4e804be01 100644 +index e17fa30966dea2836fb791becd032fc7d5cc2611..dd06323731533fb9b1b25a56844a4e39e8a1c4ea 100644 --- a/src/main/java/net/minecraft/core/BlockPos.java +++ b/src/main/java/net/minecraft/core/BlockPos.java @@ -48,6 +48,12 @@ public class BlockPos extends Vec3i { private static final int X_OFFSET = 38; - // Paper end + // Paper end - Optimize Bit Operations by inlining + // Purpur start + public BlockPos(net.minecraft.world.entity.Entity entity) { @@ -22,31 +22,31 @@ index c47aa87db42dea74a2e07ffe6015257fa337da23..fb672028548fbc3c026c3823024249e4 super(x, y, z); } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index de0f93e1a85754051315653f707b95753ff7dc70..41918e5fe6d55749204a9207efe305e2f1369d9c 100644 +index e83bf05132155c5ac5b57ac04c433c99d4ba77c2..a0dafd629275e2aa42edf00f5e166097e85ed394 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -1700,6 +1700,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0; // Paper net.minecraft.world.level.block.entity.HopperBlockEntity.skipHopperEvents = worldserver.paperConfig().hopper.disableMoveEvent || org.bukkit.event.inventory.InventoryMoveItemEvent.getHandlerList().getRegisteredListeners().length == 0; // Paper - Perf: Optimize Hoppers - worldserver.hasEntityMoveEvent = io.papermc.paper.event.entity.EntityMoveEvent.getHandlerList().getRegisteredListeners().length > 0; // Paper + worldserver.hasEntityMoveEvent = io.papermc.paper.event.entity.EntityMoveEvent.getHandlerList().getRegisteredListeners().length > 0; // Paper - Add EntityMoveEvent + worldserver.hasRidableMoveEvent = org.purpurmc.purpur.event.entity.RidableMoveEvent.getHandlerList().getRegisteredListeners().length > 0; // Purpur 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 f29b3dc2243138783ba1d5ec852a8e4c2400150c..dda4a2e46e085190697adc60311abc43031bbf2e 100644 +index e0f1f23bcf4f59cffa98ea1c70f774fd787dae08..a129e8ef37fef6fa289e6457b68a221947ef0348 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 { public boolean hasPhysicsEvent = true; // Paper - public boolean hasEntityMoveEvent = false; // Paper + public boolean hasEntityMoveEvent; // Paper - Add EntityMoveEvent private final alternate.current.wire.WireHandler wireHandler = new alternate.current.wire.WireHandler(this); // Paper - optimize redstone (Alternate Current) + public boolean hasRidableMoveEvent = false; // Purpur - public static Throwable getAddToWorldStackTrace(Entity entity) { - final Throwable thr = new Throwable(entity + " Added to world at " + new java.util.Date()); - io.papermc.paper.util.StacktraceDeobfuscator.INSTANCE.deobfuscateThrowable(thr); + + @Override public LevelChunk getChunkIfLoaded(int x, int z) { // Paper - this was added in world too but keeping here for NMS ABI + return this.chunkSource.getChunkAtIfLoadedImmediately(x, z); // Paper - Use getChunkIfLoadedImmediately diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 849b4190976722179ce4b90aa2bad1dd6cfbadc7..c0b18bf97c8da4e843e08ccd39d4ef6d43295e54 100644 +index a1dff77b662f178bd42c0d232ecea1ca2cc4f6d3..6c6f084fcb2e9da843365ed4eac4f1c2d7550f33 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -763,6 +763,15 @@ public class ServerPlayer extends Player { @@ -66,10 +66,10 @@ index 849b4190976722179ce4b90aa2bad1dd6cfbadc7..c0b18bf97c8da4e843e08ccd39d4ef6d public void doTick() { diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 04b0eb391bb524dd7af14b862d89c0f2494a8206..671b5deba9eb3afddc4d0af7ce5e61c11cddd303 100644 +index b5917417aaed74555917772650fe51485281c2ec..d9f34bfb22f8b3ca444002acc861eeb5bd3b69e1 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -2724,6 +2724,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -2719,6 +2719,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl ServerGamePacketListenerImpl.this.cserver.getPluginManager().callEvent(event); @@ -79,10 +79,10 @@ index 04b0eb391bb524dd7af14b862d89c0f2494a8206..671b5deba9eb3afddc4d0af7ce5e61c1 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 d7e664b9b1f19eeb74b380c90d25354b3f450421..5544a0d6bb1eac588a301261dcd96701be316cc8 100644 +index 59ec8a66c76bea89f14aa19f61c03571a00c7e4f..f0216a0ac90aa1c0851dea13dd2250a2560c0e17 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -379,7 +379,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -378,7 +378,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 d7e664b9b1f19eeb74b380c90d25354b3f450421..5544a0d6bb1eac588a301261dcd96701 private float eyeHeight; public boolean isInPowderSnow; public boolean wasInPowderSnow; -@@ -3013,6 +3013,13 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3012,6 +3012,13 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S this.passengers = ImmutableList.copyOf(list); } @@ -105,7 +105,7 @@ index d7e664b9b1f19eeb74b380c90d25354b3f450421..5544a0d6bb1eac588a301261dcd96701 this.gameEvent(GameEvent.ENTITY_MOUNT, passenger); } } -@@ -3052,6 +3059,14 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3051,6 +3058,14 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S return false; } // CraftBukkit end @@ -120,10 +120,10 @@ index d7e664b9b1f19eeb74b380c90d25354b3f450421..5544a0d6bb1eac588a301261dcd96701 if (this.passengers.size() == 1 && this.passengers.get(0) == entity) { this.passengers = ImmutableList.of(); } else { -@@ -5000,4 +5015,44 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -4992,4 +5007,44 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S return ((net.minecraft.server.level.ServerChunkCache) level.getChunkSource()).isPositionTicking(this); } - // Paper end + // Paper end - Expose entity id counter + // Purpur start + @Nullable + private Player rider = null; @@ -190,7 +190,7 @@ 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 9b7e786d5ae6bdeeb96df6e9c4d1b24e1e856e58..120666439f235c976ba32a02b09c239ca79cb826 100644 +index 370033cb058a20a83f80b8e2618e419bb3fd97cf..b225b9823e5edf81dfc916c3817caab93927118d 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 { @@ -226,16 +226,16 @@ index 9b7e786d5ae6bdeeb96df6e9c4d1b24e1e856e58..120666439f235c976ba32a02b09c239c @@ -2728,7 +2729,7 @@ public abstract class LivingEntity extends Entity implements Attackable { } - protected long lastJumpTime = 0L; // Paper + protected long lastJumpTime = 0L; // Paper - Prevent excessive velocity through repeated crits - protected void jumpFromGround() { + public void jumpFromGround() { // Purpur - protected -> public Vec3 vec3d = this.getDeltaMovement(); - // Paper start + // Paper start - Prevent excessive velocity through repeated crits long time = System.nanoTime(); @@ -3506,8 +3507,10 @@ public abstract class LivingEntity extends Entity implements Attackable { this.pushEntities(); this.level().getProfiler().pop(); - // Paper start + // Paper start - Add EntityMoveEvent - if (((ServerLevel) this.level()).hasEntityMoveEvent && !(this instanceof net.minecraft.world.entity.player.Player)) { - if (this.xo != this.getX() || this.yo != this.getY() || this.zo != this.getZ() || this.yRotO != this.getYRot() || this.xRotO != this.getXRot()) { + // Purpur start @@ -265,10 +265,10 @@ index 9b7e786d5ae6bdeeb96df6e9c4d1b24e1e856e58..120666439f235c976ba32a02b09c239c + } + // Purpur end } - // Paper end + // 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 2f3dc569ff9cdead48aa831c96c027cc7255d609..36c49ca7632495d816fdf98e7f5ae62bbedd4e22 100644 +index 4e3d48f6af493f2cded599f51ad5d2cd07e252f2..749de94a6e41d44a6041f67c7d0e2205e10a26ab 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 { @@ -349,7 +349,7 @@ index 2f3dc569ff9cdead48aa831c96c027cc7255d609..36c49ca7632495d816fdf98e7f5ae62b + // Purpur end } diff --git a/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java b/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java -index 3087f8359b098682a345399c85395de8a15b6eed..6b0855cffb901dbc7dcc5fd44506275206bc9a2d 100644 +index 683c9693754d1a87b7e8fccc757a0d0963351f60..c47af2c9d023aba454343bab0b43268013c8bd08 100644 --- a/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java +++ b/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java @@ -24,14 +24,21 @@ public class AttributeMap { @@ -527,7 +527,7 @@ index 7df56705a4a0de2dc4ff7ab133fc26612c219162..384bed4505b6cabb1ae151cd2c4eb5e5 --this.lookAtCooldown; this.getYRotD().ifPresent((yaw) -> { 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 8820905ac733a8915cc1697259b2bef14d97e471..384fa039b11fb70c2d04df447b689aef3e808968 100644 +index 4fba7c2f6ec363846a772ef2a63e9b3fc1037de5..f8c2e2a7065a3ad5b306ebab3d04a12f362c2ea1 100644 --- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java +++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java @@ -19,6 +19,7 @@ import net.minecraft.world.entity.EntityDimensions; @@ -679,7 +679,7 @@ index 2249fc6dd98afb8d52623b5864955fdd3b3fc042..2ccfaab0a02cf5ff9779e250fb79a75a double d = this.wantedX - this.fish.getX(); double e = this.wantedY - this.fish.getY(); 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 a87a34b0c4c8e5d0cf079025c230b1434c919b54..8f906101afa436b891f4a751b184d6eb89668948 100644 +index f9521a6e115f0c975a7885b024c99eae300b63bf..78e802a4bd994b6988ae415cf2958bb828830964 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Bee.java +++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java @@ -43,6 +43,7 @@ import net.minecraft.world.entity.EntityType; @@ -695,7 +695,7 @@ index a87a34b0c4c8e5d0cf079025c230b1434c919b54..8f906101afa436b891f4a751b184d6eb super(type, world); this.remainingCooldownBeforeLocatingNewFlower = Mth.nextInt(this.random, 20, 60); + final org.purpurmc.purpur.controller.FlyingMoveControllerWASD flyingController = new org.purpurmc.purpur.controller.FlyingMoveControllerWASD(this, 0.25F, 1.0F, false); // Purpur - // Paper start - apply gravity to bees when they get stuck in the void, fixes MC-167279 + // Paper start - Fix MC-167279 class BeeFlyingMoveControl extends FlyingMoveControl { public BeeFlyingMoveControl(final Mob entity, final int maxPitchChange, final boolean noGravity) { @@ -155,11 +157,24 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { @@ -722,7 +722,7 @@ index a87a34b0c4c8e5d0cf079025c230b1434c919b54..8f906101afa436b891f4a751b184d6eb + // Purpur end } this.moveControl = new BeeFlyingMoveControl(this, 20, true); - // Paper end + // Paper end - Fix MC-167279 @@ -171,6 +186,40 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { this.setPathfindingMalus(BlockPathTypes.FENCE, -1.0F); } @@ -801,7 +801,7 @@ index a87a34b0c4c8e5d0cf079025c230b1434c919b54..8f906101afa436b891f4a751b184d6eb } 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 de51ce9875e12961e6e549e87d76f492d2f19787..3e89e788c796fe168e43a6b78c0d6c1fc077fc78 100644 +index f760ce7d9df79ef58f8963de3e901cba3e12fcaa..25636efbdb55605303e390f63276ef0bfd4929ba 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cat.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cat.java @@ -98,6 +98,31 @@ public class Cat extends TamableAnimal implements VariantHolder { @@ -965,7 +965,7 @@ 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 e555fd8ca61e1ce7a52ecd475cc3ea11dedcab08..e818cf94d0a7def1f0abc8519e3b8ff4e7918aef 100644 +index 178e1e75fcd0e60a1dd2729a894df08cf4129526..2412cdb1bdaf7a558ad7235fca7ea5c74eeaad3f 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 { @@ -1090,7 +1090,7 @@ index e555fd8ca61e1ce7a52ecd475cc3ea11dedcab08..e818cf94d0a7def1f0abc8519e3b8ff4 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 3d771b137dc29579614aa4c15d12bd456cdc608a..8e1494f0f5a50dc16efebc8ab76a41d0cd355ff2 100644 +index 287e52dc844c2a64dac74dad117b775f46631157..9133fc6cf8ecc5670b5c3745c882430308e7c184 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 { @@ -1195,7 +1195,7 @@ index 3d771b137dc29579614aa4c15d12bd456cdc608a..8e1494f0f5a50dc16efebc8ab76a41d0 } 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 f383928fc5b331ddf128bdcb6a23010d8fe088d3..6815d7350a82c6d32f60aa6116466ebd06a920f9 100644 +index 6cfe0d6c46caa122db107c607d27a2bdcd82f7a8..cb05267fb287b9de9d1829e90d9bb9c9f4aac9f7 100644 --- a/src/main/java/net/minecraft/world/entity/animal/IronGolem.java +++ b/src/main/java/net/minecraft/world/entity/animal/IronGolem.java @@ -66,8 +66,27 @@ public class IronGolem extends AbstractGolem implements NeutralMob { @@ -1340,7 +1340,7 @@ 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 ead5060ae2840a0519c5bf8b4b84aa12cc41b02a..9376de7391cfdd31f3f44da9a062bf23efd43561 100644 +index be554dbaa9900207753e4f67f0ba402333e21338..87a1a6ff04b40ceebded50e81aaafe67a802fa1b 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 { @@ -1441,7 +1441,7 @@ index ead5060ae2840a0519c5bf8b4b84aa12cc41b02a..9376de7391cfdd31f3f44da9a062bf23 } } diff --git a/src/main/java/net/minecraft/world/entity/animal/Parrot.java b/src/main/java/net/minecraft/world/entity/animal/Parrot.java -index 4c34edc55fa0e136ccf49a3aef001f413274dfac..521ce86afafe329de97c0ef8e95fb503c999edda 100644 +index f3f48225c2a1e4bd3d0091d1b4b7e4e150850ed2..06568c109d806a4e98b092016d0efd5b2cdfd359 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Parrot.java +++ b/src/main/java/net/minecraft/world/entity/animal/Parrot.java @@ -131,12 +131,68 @@ public class Parrot extends ShoulderRidingEntity implements VariantHolder entitytypes, Level world) { @@ -2935,7 +2935,7 @@ index a59c2d1e84c522a9b86cb86491fb987f6f70dcd0..89e3c1cf179b95efe5e0e16ce703fa0b 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 1f7f6e5995c00725bf66723c75620ec416e24f87..f1f95b2a22797a8b16df1276d8fcc65cbebb165a 100644 +index ea8883b0661e894a466eca24bfc247ac37f40a81..6af131d0574a508bccc84b85d0e0b3b5bab6f795 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 @@ -3116,7 +3116,7 @@ index 1f7f6e5995c00725bf66723c75620ec416e24f87..f1f95b2a22797a8b16df1276d8fcc65c @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java b/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java -index a383c0c8b5c89ef1eef7d18edc3a09f749fdd310..d205578dbed88776c6704fec9500299ce1606152 100644 +index 586e3e92ccc275446df6dbbff9bf010a37a9aa8f..9d259d7e2aa3e44e350eb5927314cfceaffaf3f3 100644 --- a/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java +++ b/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java @@ -70,12 +70,14 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo @@ -3247,7 +3247,7 @@ 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 52eb3f6a73fa99d12d5fc75bab03e47a605c653a..7b17195c3e872822f92760c2977af3afa395b183 100644 +index 51ab33d805028fb739ff9fa1a22a010e70777c1e..b3d1e3158165c940ad1081e80f5bd2dd9d0152f8 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 { @@ -3356,9 +3356,9 @@ index 52eb3f6a73fa99d12d5fc75bab03e47a605c653a..7b17195c3e872822f92760c2977af3af + if (!event.isIgnited()) setSwellDir(-1); // Purpur } } - // Paper end + // Paper end - CreeperIgniteEvent diff --git a/src/main/java/net/minecraft/world/entity/monster/Drowned.java b/src/main/java/net/minecraft/world/entity/monster/Drowned.java -index 485d14d71fb26e6e0d00a43da040bf63d696b66a..a72609b6b98ae730aa765b57275d2e32dbbb0eb6 100644 +index 01897af1e6253b987734a24c052daf2ce1314092..02141c89708a60c396dc89bc202bc2316a7e419f 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Drowned.java +++ b/src/main/java/net/minecraft/world/entity/monster/Drowned.java @@ -68,6 +68,23 @@ public class Drowned extends Zombie implements RangedAttackMob { @@ -3423,7 +3423,7 @@ index 485d14d71fb26e6e0d00a43da040bf63d696b66a..a72609b6b98ae730aa765b57275d2e32 } diff --git a/src/main/java/net/minecraft/world/entity/monster/ElderGuardian.java b/src/main/java/net/minecraft/world/entity/monster/ElderGuardian.java -index efc1d49c5bfea7d1674b8a9de2c8b617657eda0f..37afe706c5c453003ea96e62f376f45d7b8eb4a8 100644 +index 6d4810626980ce46e02042a5660f615c58d0d5fd..dd2037d4c50e622f249406eee49add29bf261865 100644 --- a/src/main/java/net/minecraft/world/entity/monster/ElderGuardian.java +++ b/src/main/java/net/minecraft/world/entity/monster/ElderGuardian.java @@ -36,6 +36,18 @@ public class ElderGuardian extends Guardian { @@ -3446,7 +3446,7 @@ index efc1d49c5bfea7d1674b8a9de2c8b617657eda0f..37afe706c5c453003ea96e62f376f45d return Guardian.createAttributes().add(Attributes.MOVEMENT_SPEED, 0.30000001192092896D).add(Attributes.ATTACK_DAMAGE, 8.0D).add(Attributes.MAX_HEALTH, 80.0D); } diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -index ebbd0031da656c4b12debbf76a347da2865d50d1..05f2b8c9813b2cdadb2aa8de445b8506ed4c2a30 100644 +index ad46881a5cba388e6ceb4e0134aa377e28d5f267..8ef8894733ead4f440de1847723cdb405bee17f8 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java @@ -98,9 +98,27 @@ public class EnderMan extends Monster implements NeutralMob { @@ -3818,7 +3818,7 @@ index 72b8290bebe8ed9bc3c464b30cfe5d2d664310f5..bfc6dcafe79fa3bb6e450a23e91a772b return checkMonsterSpawnRules(type, world, spawnReason, pos, random) && (MobSpawnType.isSpawner(spawnReason) || world.canSeeSky(pos)); } diff --git a/src/main/java/net/minecraft/world/entity/monster/Illusioner.java b/src/main/java/net/minecraft/world/entity/monster/Illusioner.java -index 63fce7e3d9f59f36e29bc827a46396d73143bb8b..f83f09f7568c44a1165aac73f7127c5d1af0478f 100644 +index fb84b35e34063075e69e00e430bc00e7c3b9d62c..4d50d10016a3b574d67bdfec5aee910cede8ffc3 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Illusioner.java +++ b/src/main/java/net/minecraft/world/entity/monster/Illusioner.java @@ -59,10 +59,28 @@ public class Illusioner extends SpellcasterIllager implements RangedAttackMob { @@ -3906,7 +3906,7 @@ index 2858ea5562d06c11e5c7337a2b123f9be7a3f62e..aad51022eac584fbc058c2b25e2bf192 @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/Phantom.java b/src/main/java/net/minecraft/world/entity/monster/Phantom.java -index 5b4719dd7c3b8f93c898779f45239568f6a5fe43..34de7704ad6bf6989fb83a1e24905098d7ba0123 100644 +index 187037c43ebb5b245ffa4b50163d443490668744..98ced015ceb4f68364ff5ee6f7ee1a69251dbb04 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Phantom.java +++ b/src/main/java/net/minecraft/world/entity/monster/Phantom.java @@ -61,6 +61,64 @@ public class Phantom extends FlyingMob implements Enemy { @@ -3989,12 +3989,12 @@ index 5b4719dd7c3b8f93c898779f45239568f6a5fe43..34de7704ad6bf6989fb83a1e24905098 @@ -146,6 +206,7 @@ public class Phantom extends FlyingMob implements Enemy { @Override public void aiStep() { - if (this.isAlive() && shouldBurnInDay && this.isSunBurnTick()) { // Paper - Configurable Burning + if (this.isAlive() && shouldBurnInDay && this.isSunBurnTick()) { // Paper - shouldBurnInDay API + if (getRider() == null || !this.isControllable()) // Purpur this.setSecondsOnFire(8); } -@@ -274,7 +335,7 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -273,7 +334,7 @@ public class Phantom extends FlyingMob implements Enemy { private AttackPhase() {} } @@ -4003,7 +4003,7 @@ index 5b4719dd7c3b8f93c898779f45239568f6a5fe43..34de7704ad6bf6989fb83a1e24905098 private float speed = 0.1F; -@@ -282,8 +343,19 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -281,8 +342,19 @@ public class Phantom extends FlyingMob implements Enemy { super(entity); } @@ -4024,7 +4024,7 @@ index 5b4719dd7c3b8f93c898779f45239568f6a5fe43..34de7704ad6bf6989fb83a1e24905098 if (Phantom.this.horizontalCollision) { Phantom.this.setYRot(Phantom.this.getYRot() + 180.0F); this.speed = 0.1F; -@@ -329,14 +401,20 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -328,14 +400,20 @@ public class Phantom extends FlyingMob implements Enemy { } } @@ -4087,7 +4087,7 @@ index cec545c3baa6599d47b9cf1a4b97de8771062a22..31d204d8d81ccc30371070af3678d82d 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 -index 0c11d9bef8f0129c541e30ad057612e881703b24..cfa324c6a75ac83cff4ba87034677d4e9415189e 100644 +index 151acc43c96b4545ce92d3d559d8e1591874b4b5..73220bd6989855ac82420219c841421612cb3f11 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Ravager.java +++ b/src/main/java/net/minecraft/world/entity/monster/Ravager.java @@ -71,14 +71,39 @@ public class Ravager extends Raider { @@ -4223,7 +4223,7 @@ index 2c60a3765d22909e73b660492410ab8456304b68..f5dda5ed4532c8572bc4f511c49377c2 this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); } 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 8b818a7cb835512c4bd2ea9641d4bfd904150332..4db19589d19d1a0e488ddd0b691e81152ac236e4 100644 +index 92974452d8f63fde8524cfac305ee2ef5212f840..3568c4b7ecfa250bbeb1799685b487df53537919 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Skeleton.java +++ b/src/main/java/net/minecraft/world/entity/monster/Skeleton.java @@ -26,6 +26,23 @@ public class Skeleton extends AbstractSkeleton { @@ -4251,7 +4251,7 @@ index 8b818a7cb835512c4bd2ea9641d4bfd904150332..4db19589d19d1a0e488ddd0b691e8115 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 cd964e5cded6a74cb9dcf27b4134f944764062cd..5d15c491034e2bd9c136935f5b266e2de3e85729 100644 +index 2e59a32aa8afe45641a319b1a6c347ee944398a8..01416cef059e4b8d82a0676a0ced19a325a47ace 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 { @@ -4381,7 +4381,7 @@ index cd964e5cded6a74cb9dcf27b4134f944764062cd..5d15c491034e2bd9c136935f5b266e2d } diff --git a/src/main/java/net/minecraft/world/entity/monster/Spider.java b/src/main/java/net/minecraft/world/entity/monster/Spider.java -index 8094c133f9e934c98eee09738220bacd87a0a364..4d0ef7d73b2c4623c9df22fd971ba8c378e8f696 100644 +index 0c68ed759421d6bce4435399f1b4980510081cac..8133ff59a1dba12542c7b582381433267ca18ce5 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Spider.java +++ b/src/main/java/net/minecraft/world/entity/monster/Spider.java @@ -53,14 +53,33 @@ public class Spider extends Monster { @@ -4603,7 +4603,7 @@ index 30ea3f64234fd1fda8dada3c7fb12be0730322a8..841fba3edf697647f59d0485b751c836 Vec3 vec3d1 = Vex.this.getDeltaMovement(); diff --git a/src/main/java/net/minecraft/world/entity/monster/Vindicator.java b/src/main/java/net/minecraft/world/entity/monster/Vindicator.java -index ad41bbbf5395ed18c2c9e1e692c7661a6e0cb98c..049e81af9d5cc746e872be9bdec80917e3137be3 100644 +index a6af5ac9d09834940d3dd4c80b16450b90484edb..e5d3bf2e8934d97760eaf165a0ac930d51a3c884 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Vindicator.java +++ b/src/main/java/net/minecraft/world/entity/monster/Vindicator.java @@ -58,14 +58,33 @@ public class Vindicator extends AbstractIllager { @@ -4641,7 +4641,7 @@ index ad41bbbf5395ed18c2c9e1e692c7661a6e0cb98c..049e81af9d5cc746e872be9bdec80917 this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractVillager.class, true)); diff --git a/src/main/java/net/minecraft/world/entity/monster/Witch.java b/src/main/java/net/minecraft/world/entity/monster/Witch.java -index 580dff41d746d9591f718081d9dfe4ac77e7eeaa..c146d16acac7d3ea380b5e3591f22491c102d7a9 100644 +index 02386e7eabc6669296ce35158fa35a3c88c6b563..330974f7fcc435cd45c744cc9c8e0f1bac2305ef 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Witch.java +++ b/src/main/java/net/minecraft/world/entity/monster/Witch.java @@ -59,6 +59,23 @@ public class Witch extends Raider implements RangedAttackMob { @@ -4682,7 +4682,7 @@ index 580dff41d746d9591f718081d9dfe4ac77e7eeaa..c146d16acac7d3ea380b5e3591f22491 this.targetSelector.addGoal(2, this.healRaidersGoal); this.targetSelector.addGoal(3, this.attackPlayersGoal); diff --git a/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java b/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java -index 3dcd43279ce1295b37c3504ecbdaac5275df2b80..728e3c78fb17d954247cc62f05cdd970d8b5f540 100644 +index 20a65c11ededcd7170704b70118da6200151fbab..4235684e533e744bb1eb90a5cc69001e43782bc2 100644 --- a/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java +++ b/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java @@ -35,6 +35,23 @@ public class WitherSkeleton extends AbstractSkeleton { @@ -4746,7 +4746,7 @@ index 11275a9ec6faa69c9f054683cb47312e443ba883..dc29e875c1e184c1c4553c127bb8c86d this.level().getProfiler().pop(); this.updateActivity(); 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 753defa8f8b48d004a2a53b2fc322fd9c083d95e..1d5c60c08354bb64a6d671032c2e8b885ec4ca73 100644 +index 3fa43be16cc8d35622c269db37875b4bd0a09405..aa6533c40b73bc72a4906f0533f13e74e58c091a 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java @@ -107,11 +107,30 @@ public class Zombie extends Monster { @@ -4773,7 +4773,7 @@ index 753defa8f8b48d004a2a53b2fc322fd9c083d95e..1d5c60c08354bb64a6d671032c2e8b88 @Override protected void registerGoals() { + this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - if (this.level().paperConfig().entities.behavior.zombiesTargetTurtleEggs) this.goalSelector.addGoal(4, new Zombie.ZombieAttackTurtleEggGoal(this, 1.0D, 3)); // Paper + if (this.level().paperConfig().entities.behavior.zombiesTargetTurtleEggs) this.goalSelector.addGoal(4, new Zombie.ZombieAttackTurtleEggGoal(this, 1.0D, 3)); // Paper - Add zombie targets turtle egg config this.goalSelector.addGoal(8, 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 @@ -4809,7 +4809,7 @@ index 7de9d012e7416eaa0189b513a0972c846e93c4b6..ba391ae0f8c361fb0ffbe0b65f12a008 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 1afe8a8694c1fd0bf43ce3c0c36a83fda9aec141..252d2994fac423ea1fef36bdc7c09778203049cb 100644 +index fbabbd0808304f5d0d12f987d00c9e43a89fb1c9..2121de85765d535effb3ef4e0c4a873238dd7576 100644 --- a/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java @@ -64,6 +64,23 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { @@ -4837,7 +4837,7 @@ index 1afe8a8694c1fd0bf43ce3c0c36a83fda9aec141..252d2994fac423ea1fef36bdc7c09778 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 e703320717ff620a19ff76d1c10066117c9895d5..d040198ce528293ed95adcdb17ddf0acbc5a93e0 100644 +index 9921b160fb21f72fbd28fe81ea66fbc3dc05f83f..1d54077a7ebb463270a03bb17c342ced8874f4c2 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 @@ -69,6 +69,23 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { @@ -4874,7 +4874,7 @@ index e703320717ff620a19ff76d1c10066117c9895d5..d040198ce528293ed95adcdb17ddf0ac this.level().getProfiler().pop(); HoglinAi.updateActivity(this); 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 cfdc1650783d6855e0d4f33ec68aab48dbee09f0..f57d7fee1ece00aba9bc7b07dda8398e7acc73c3 100644 +index 83d83e3f84bb6bd58761671c6cd4c8683545ff4c..015bb57c73c7b38622329fc3001b6369fa183cd1 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 @@ -96,6 +96,23 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento @@ -4947,7 +4947,7 @@ index e1be4a77fae0b9120781f460079269b85c993930..2d842c0dfce1c7e7229bd42b2a92c024 this.level().getProfiler().pop(); PiglinBruteAi.updateActivity(this); diff --git a/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java b/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java -index 58a7e61e02b7d72326ed4d57ee514adb63b3873c..63e4688d8055cf4a8883477f7943bf63520c0693 100644 +index 0a151c679b0dc943598180942d6d4b3886211688..384e7b29215cadfa40af07a183a9c9c6a5b4a80a 100644 --- a/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java +++ b/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java @@ -123,8 +123,32 @@ public class Warden extends Monster implements VibrationSystem { @@ -5007,7 +5007,7 @@ index 58a7e61e02b7d72326ed4d57ee514adb63b3873c..63e4688d8055cf4a8883477f7943bf63 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 1e6d61673b0e3252129c04edcfa1d7d436e8ecbe..8102f0beb58a6055e0b21c793e913d4eae96c348 100644 +index a1769d423141e2a27d7d5ac7f2b7d36c600f1b2d..6e42633cc7393d579bfd4b756a5f651a71e2f02e 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 @@ -5075,7 +5075,7 @@ index 1e6d61673b0e3252129c04edcfa1d7d436e8ecbe..8102f0beb58a6055e0b21c793e913d4e 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 833563e237462ccfc1b730b8f5fb35340d0db854..2bed7b373813660139d2322dcd6b83f3015768f0 100644 +index 1c89f20debfad9807c90a21cc336d5790294ebce..3782209c6d3408393e91ffe64976a15cba025843 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 @@ -5114,7 +5114,7 @@ index 833563e237462ccfc1b730b8f5fb35340d0db854..2bed7b373813660139d2322dcd6b83f3 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 2668c3b6f752d5d8bc45f4e6e52c20cc6a36a957..19ed29dc7e4bcb9bedbb8c25174d48194132685e 100644 +index 7e77383368388f6e56159892cd483513b068e402..b33f63016fc2818b0a6a05107e435e1c9be3ca97 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java @@ -194,6 +194,19 @@ public abstract class Player extends LivingEntity { @@ -5172,7 +5172,7 @@ 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 1c3e1153d08b59d29b3613fc3b50a4780aa7a3ac..7c8b90444aa635cddf480d49a92a180a1bfa9c34 100644 +index f16ac1d640fc97f348c244d4ea86e3278b30ae19..6f7be7d29b4654d463299c62b8a01696ca187eb2 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 { @@ -5204,7 +5204,7 @@ index 1c3e1153d08b59d29b3613fc3b50a4780aa7a3ac..7c8b90444aa635cddf480d49a92a180a + // 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 55c26840957f69860816c917c16f59d02074b388..b3d8e795683ab186295902aba7d476a689ff0f3f 100644 +index b9e90f589749dfc9324c4aa2062c505fbd4447bc..118483d7342117c4bc172db89df9fab391f30378 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 { @@ -5223,7 +5223,7 @@ index 55c26840957f69860816c917c16f59d02074b388..b3d8e795683ab186295902aba7d476a6 return event; } -@@ -1070,6 +1079,7 @@ public class CraftEventFactory { +@@ -1068,6 +1077,7 @@ public class CraftEventFactory { damageCause = DamageCause.ENTITY_EXPLOSION; } event = new EntityDamageByEntityEvent(damager.getBukkitEntity(), entity.getBukkitEntity(), damageCause, modifiers, modifierFunctions, source.isCritical()); // Paper - add critical damage API @@ -5231,7 +5231,7 @@ index 55c26840957f69860816c917c16f59d02074b388..b3d8e795683ab186295902aba7d476a6 } event.setCancelled(cancelled); -@@ -1184,6 +1194,7 @@ public class CraftEventFactory { +@@ -1182,6 +1192,7 @@ public class CraftEventFactory { } else { entity.lastDamageCancelled = true; // SPIGOT-5339, SPIGOT-6252, SPIGOT-6777: Keep track if the event was canceled } @@ -5239,7 +5239,7 @@ index 55c26840957f69860816c917c16f59d02074b388..b3d8e795683ab186295902aba7d476a6 return event; } -@@ -1247,6 +1258,7 @@ public class CraftEventFactory { +@@ -1245,6 +1256,7 @@ public class CraftEventFactory { EntityDamageEvent event; if (damager != null) { event = new EntityDamageByEntityEvent(damager.getBukkitEntity(), damagee.getBukkitEntity(), cause, modifiers, modifierFunctions, critical); // Paper - add critical damage API diff --git a/patches/server/0009-Configurable-entity-base-attributes.patch b/patches/server/0009-Configurable-entity-base-attributes.patch index adc6b9c02..1670248e3 100644 --- a/patches/server/0009-Configurable-entity-base-attributes.patch +++ b/patches/server/0009-Configurable-entity-base-attributes.patch @@ -5,7 +5,7 @@ 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 dae5eb42eb1da596ddbbaf525818ee9601ecdc2f..960b772977adf13c8765dd115346ca53303f7823 100644 +index f0216a0ac90aa1c0851dea13dd2250a2560c0e17..036688d52541dda8d8eef6fee43823844f245124 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; @@ -16,7 +16,7 @@ index dae5eb42eb1da596ddbbaf525818ee9601ecdc2f..960b772977adf13c8765dd115346ca53 + public static javax.script.ScriptEngine scriptEngine = new javax.script.ScriptEngineManager().getEngineByName("rhino"); // Purpur // CraftBukkit start private static final int CURRENT_LEVEL = 2; - public boolean preserveMotion = true; // Paper - keep initial motion on first setPositionRotation + public boolean preserveMotion = true; // Paper - Fix Entity Teleportation and cancel velocity if teleported; keep initial motion on first setPositionRotation diff --git a/src/main/java/net/minecraft/world/entity/GlowSquid.java b/src/main/java/net/minecraft/world/entity/GlowSquid.java index 75c278b67ad2b78766efd8f89c4c2ca7eb7cdcb2..dc99e7f0e6f173c1313c0d5e9ea5dd6bdbdac169 100644 --- a/src/main/java/net/minecraft/world/entity/GlowSquid.java @@ -34,7 +34,7 @@ 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 bc83444129f9bd606450c8721bc0e65d3855cdb5..3b7897cc4e282b682e83109a639b987a2c78fa07 100644 +index b225b9823e5edf81dfc916c3817caab93927118d..ea7cb84dab429f1a9495b05e578775ac9d94f08a 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 { @@ -55,7 +55,7 @@ index bc83444129f9bd606450c8721bc0e65d3855cdb5..3b7897cc4e282b682e83109a639b987a return this.brain; } 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 384fa039b11fb70c2d04df447b689aef3e808968..92777e7f6c6293c5b5689cfa5f992335629d05eb 100644 +index f8c2e2a7065a3ad5b306ebab3d04a12f362c2ea1..8910aaaa1fdabecec4740d6212db3114bd1197fc 100644 --- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java +++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java @@ -268,6 +268,18 @@ public class Bat extends AmbientCreature { @@ -78,7 +78,7 @@ index 384fa039b11fb70c2d04df447b689aef3e808968..92777e7f6c6293c5b5689cfa5f992335 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 8f906101afa436b891f4a751b184d6eb89668948..9496bf72eb4cda6c2675daabe5ad82e90d12e173 100644 +index 78e802a4bd994b6988ae415cf2958bb828830964..c1f71bf53dac227e6b8c6dbd88473fe79b6a2c64 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Bee.java +++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java @@ -478,6 +478,11 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { @@ -94,7 +94,7 @@ index 8f906101afa436b891f4a751b184d6eb89668948..9496bf72eb4cda6c2675daabe5ad82e9 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 3e89e788c796fe168e43a6b78c0d6c1fc077fc78..87642c1c2c1f39a1c2029797bab73f60c19a1080 100644 +index 25636efbdb55605303e390f63276ef0bfd4929ba..83e715c9604efc9586171fd32c7cd2b339bc2349 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cat.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cat.java @@ -123,6 +123,11 @@ public class Cat extends TamableAnimal implements VariantHolder { @@ -158,7 +158,7 @@ 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 e818cf94d0a7def1f0abc8519e3b8ff4e7918aef..519e52b303cb9a2d4b1cae84d8436f2057003fcb 100644 +index 2412cdb1bdaf7a558ad7235fca7ea5c74eeaad3f..f3a145be1970dd1e78e04b2ea0d77c6339a42fd8 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 { @@ -174,7 +174,7 @@ index e818cf94d0a7def1f0abc8519e3b8ff4e7918aef..519e52b303cb9a2d4b1cae84d8436f20 @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 86c7b7d3c340372a5c33f8a848a274240c0e8554..21c0431dd8abc06773b6a8ae76908a4227225326 100644 +index 9133fc6cf8ecc5670b5c3745c882430308e7c184..450a0b91fdeef9a868063c9501aa531ce3f8b3b7 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 { @@ -190,7 +190,7 @@ index 86c7b7d3c340372a5c33f8a848a274240c0e8554..21c0431dd8abc06773b6a8ae76908a42 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 6815d7350a82c6d32f60aa6116466ebd06a920f9..95ff109511c97d603aeaf9e73c49397a841fcbce 100644 +index cb05267fb287b9de9d1829e90d9bb9c9f4aac9f7..46e28d807a72b6d302d29d65c52ab0813cd82b1a 100644 --- a/src/main/java/net/minecraft/world/entity/animal/IronGolem.java +++ b/src/main/java/net/minecraft/world/entity/animal/IronGolem.java @@ -81,6 +81,11 @@ public class IronGolem extends AbstractGolem implements NeutralMob { @@ -238,7 +238,7 @@ index 66f80ec010909648278c4e74c80d3766b9cf6c6a..14daac1a87e32e0ff0a610aef256e20c return (Boolean) this.entityData.get(Ocelot.DATA_TRUSTING); } 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 f944a35c97e0a63714e04393ed6f44727c3fed2b..58dc720a0003055608b784c466c0ef17b39f4408 100644 +index 87a1a6ff04b40ceebded50e81aaafe67a802fa1b..846cbac0f862ec881347325dcd6db8eaedbd0e75 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Panda.java +++ b/src/main/java/net/minecraft/world/entity/animal/Panda.java @@ -140,6 +140,12 @@ public class Panda extends Animal { @@ -267,7 +267,7 @@ index f944a35c97e0a63714e04393ed6f44727c3fed2b..58dc720a0003055608b784c466c0ef17 if (this.isLazy()) { diff --git a/src/main/java/net/minecraft/world/entity/animal/Parrot.java b/src/main/java/net/minecraft/world/entity/animal/Parrot.java -index 521ce86afafe329de97c0ef8e95fb503c999edda..c3e8d3f2212a8e8d12e8d233c9d12463f8a44439 100644 +index 06568c109d806a4e98b092016d0efd5b2cdfd359..9334fb348e559ee27ba38bbd51c30876206c2af4 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Parrot.java +++ b/src/main/java/net/minecraft/world/entity/animal/Parrot.java @@ -193,6 +193,11 @@ public class Parrot extends ShoulderRidingEntity implements 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 79f4a2d607a1cab694afb5cc571dbf59bc3cc7fa..3b94e5550681adaeb2a3c636d21456ae42426c47 100644 +index a1a382a4cc96ff1156bbd8cbc8298e4ae6540990..aace7991c198ccfe1338625e7b64b88921cefe0c 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 @@ -320,6 +320,23 @@ public class Camel extends AbstractHorse implements PlayerRideableJumping, Saddl @@ -503,7 +503,7 @@ index 79f4a2d607a1cab694afb5cc571dbf59bc3cc7fa..3b94e5550681adaeb2a3c636d21456ae protected SoundEvent getAmbientSound() { return SoundEvents.CAMEL_AMBIENT; diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java b/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java -index dc6cda07d2ae7beb5361e3b20eb1fd073f70ad55..b50d30a22704efade7b87d4cf5817b2068a18084 100644 +index 41777079871eef2bb4d319f28c8f441d7f2607a1..24fb38499092d8cbee3818bf5c873a55465b1edb 100644 --- a/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java +++ b/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java @@ -162,6 +162,44 @@ public abstract class AbstractHorse extends Animal implements ContainerListener, @@ -613,7 +613,7 @@ index 3e50581033e88e8eddcbd85bfa890cbe0b88a7e6..92339f5a07dcb6bf7eb1bce6d584464e 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 40f2510f71608975eff411c632d6f36399130648..576b09328e956db0ed6e4ac28093429e4dcaab90 100644 +index 1c6be506804b9622c4d0094814939f894ca857df..34d87ab749a62c5d897b7bc66b116a801324b6a7 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 @@ -124,6 +124,21 @@ 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 1d5c60c08354bb64a6d671032c2e8b885ec4ca73..f75900e33a08bd6eb13fd480fe62b49346f47bac 100644 +index aa6533c40b73bc72a4906f0533f13e74e58c091a..65a22067af226751053c9df5e0771a960439f5fe 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java @@ -124,6 +124,11 @@ public class Zombie extends Monster { @@ -1378,7 +1378,7 @@ index 1d5c60c08354bb64a6d671032c2e8b885ec4ca73..f75900e33a08bd6eb13fd480fe62b493 @Override 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 3396acd9d361e05b8d7696d823c36c4fda945a23..6c96ca4bb3f94aaeaff87ae44500e87516fbf54f 100644 +index ba391ae0f8c361fb0ffbe0b65f12a008c21e4676..9fb70aabb68d5d14ab15420d8677e46c399912b2 100644 --- a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java +++ b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java @@ -99,6 +99,16 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { @@ -1399,7 +1399,7 @@ index 3396acd9d361e05b8d7696d823c36c4fda945a23..6c96ca4bb3f94aaeaff87ae44500e875 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 252d2994fac423ea1fef36bdc7c09778203049cb..fa5fa58ee03243054a38475634a6aa67815ca77d 100644 +index 2121de85765d535effb3ef4e0c4a873238dd7576..9d1d8b5a3f2bac29f8058f68e2ded4d790a50321 100644 --- a/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java @@ -81,6 +81,11 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { @@ -1424,7 +1424,7 @@ index 252d2994fac423ea1fef36bdc7c09778203049cb..fa5fa58ee03243054a38475634a6aa67 @Nullable 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 d040198ce528293ed95adcdb17ddf0acbc5a93e0..22788892f7286f3fa6b40059b2bedaf0c6ec5ef3 100644 +index 1d54077a7ebb463270a03bb17c342ced8874f4c2..9748b32692b14bffde1506e88149939c4ed25900 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 @@ -86,6 +86,11 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { @@ -1440,7 +1440,7 @@ index d040198ce528293ed95adcdb17ddf0acbc5a93e0..22788892f7286f3fa6b40059b2bedaf0 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 f57d7fee1ece00aba9bc7b07dda8398e7acc73c3..d9b1bde3ce458b7e50f7645d07ee578d13006a0a 100644 +index 015bb57c73c7b38622329fc3001b6369fa183cd1..b5e6a48192592e9bc5a7c0a2775e5d78f06cd46a 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 @@ -113,6 +113,11 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento @@ -1472,7 +1472,7 @@ index 2d842c0dfce1c7e7229bd42b2a92c024a4162b68..04e54c241078e6cd6419a21ba1bf913f 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 4ae36a344143c5aed4266dfef2920ff3d83b1b48..c21b06edb9507ddf9e5a1de56164d9c187f83cab 100644 +index 6e42633cc7393d579bfd4b756a5f651a71e2f02e..0d3ce8b8cc3a431ff28837179cd3e0080fe47649 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java @@ -179,6 +179,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler @@ -1488,7 +1488,7 @@ index 4ae36a344143c5aed4266dfef2920ff3d83b1b48..c21b06edb9507ddf9e5a1de56164d9c1 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 2bed7b373813660139d2322dcd6b83f3015768f0..731bf43e2685554174d7ff295b5561ecf9dd70fa 100644 +index 3782209c6d3408393e91ffe64976a15cba025843..5184939949ab54504f178f86fffba4507a895568 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 diff --git a/patches/server/0010-Barrels-and-enderchests-6-rows.patch b/patches/server/0010-Barrels-and-enderchests-6-rows.patch index 64b74a08c..22bf57dca 100644 --- a/patches/server/0010-Barrels-and-enderchests-6-rows.patch +++ b/patches/server/0010-Barrels-and-enderchests-6-rows.patch @@ -5,13 +5,13 @@ 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 1fd58b708bb1d4ea374819a1fe4decf382589c76..d67557141f9ceb7d9eff63f8bfe1025b3716dc20 100644 +index 2a4b63ead77cf6117b1ebefe9d9dbd6c73ed4d95..9cc88489e9545b6d2de410d702a8395ccf101f89 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -1189,6 +1189,27 @@ public abstract class PlayerList { player.getBukkitEntity().recalculatePermissions(); // CraftBukkit this.server.getCommands().sendCommands(player); - } // Paper + } // Paper - Add sendOpLevel API + + // Purpur start + if (org.purpurmc.purpur.PurpurConfig.enderChestSixRows && org.purpurmc.purpur.PurpurConfig.enderChestPermissionRows) { @@ -37,7 +37,7 @@ index 1fd58b708bb1d4ea374819a1fe4decf382589c76..d67557141f9ceb7d9eff63f8bfe1025b 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 19ed29dc7e4bcb9bedbb8c25174d48194132685e..b494e11e21e88228cb4986fb8685184913275e95 100644 +index b33f63016fc2818b0a6a05107e435e1c9be3ca97..1f7022c086c88d9a7b8672ede2a5a14f85999461 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 { diff --git a/patches/server/0012-AFK-API.patch b/patches/server/0012-AFK-API.patch index 5c93d33fa..0950df7a3 100644 --- a/patches/server/0012-AFK-API.patch +++ b/patches/server/0012-AFK-API.patch @@ -5,7 +5,7 @@ Subject: [PATCH] AFK API diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index c0b18bf97c8da4e843e08ccd39d4ef6d43295e54..23084dd2f99f893138a3b24879ed1ae3358c0b3b 100644 +index 6c6f084fcb2e9da843365ed4eac4f1c2d7550f33..d561f388a2e157c7e8846d1f987e8bcabe45426e 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -2234,8 +2234,68 @@ public class ServerPlayer extends Player { @@ -78,7 +78,7 @@ index c0b18bf97c8da4e843e08ccd39d4ef6d43295e54..23084dd2f99f893138a3b24879ed1ae3 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 671b5deba9eb3afddc4d0af7ce5e61c11cddd303..5c20086f0eb457568f8e091a240e7fc5e5364643 100644 +index d9f34bfb22f8b3ca444002acc861eeb5bd3b69e1..7c829f26b29bb3e02248bfd8d63b600c232ebd3e 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -325,6 +325,20 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl @@ -105,7 +105,7 @@ index 671b5deba9eb3afddc4d0af7ce5e61c11cddd303..5c20086f0eb457568f8e091a240e7fc5 @@ -392,6 +406,12 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl } - if (this.player.getLastActionTime() > 0L && this.server.getPlayerIdleTimeout() > 0 && Util.getMillis() - this.player.getLastActionTime() > (long) this.server.getPlayerIdleTimeout() * 1000L * 60L && !this.player.wonGame) { // Paper - Prevent AFK kick while watching end credits. + if (this.player.getLastActionTime() > 0L && this.server.getPlayerIdleTimeout() > 0 && Util.getMillis() - this.player.getLastActionTime() > (long) this.server.getPlayerIdleTimeout() * 1000L * 60L && !this.player.wonGame) { // Paper - Prevent AFK kick while watching end credits + // Purpur start + this.player.setAfk(true); + if (!this.player.level().purpurConfig.idleTimeoutKick || (!Boolean.parseBoolean(System.getenv("PURPUR_FORCE_IDLE_KICK")) && kickPermissionCache.getUnchecked(this.player.getBukkitEntity()))) { @@ -115,7 +115,7 @@ index 671b5deba9eb3afddc4d0af7ce5e61c11cddd303..5c20086f0eb457568f8e091a240e7fc5 this.player.resetLastActionTime(); // CraftBukkit - SPIGOT-854 this.disconnect(Component.translatable("multiplayer.disconnect.idling"), org.bukkit.event.player.PlayerKickEvent.Cause.IDLING); // Paper - kick event cause } -@@ -642,6 +662,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -639,6 +659,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl this.lastYaw = to.getYaw(); this.lastPitch = to.getPitch(); @@ -124,7 +124,7 @@ index 671b5deba9eb3afddc4d0af7ce5e61c11cddd303..5c20086f0eb457568f8e091a240e7fc5 Location oldTo = to.clone(); PlayerMoveEvent event = new PlayerMoveEvent(player, from, to); this.cserver.getPluginManager().callEvent(event); -@@ -1496,7 +1518,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1491,7 +1513,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl if (!event.isAllowed()) { flag2 = true; // Paper - diff on change, this should be moved wrongly if (event.getLogWarning()) @@ -133,7 +133,7 @@ index 671b5deba9eb3afddc4d0af7ce5e61c11cddd303..5c20086f0eb457568f8e091a240e7fc5 } // Paper end - Add fail move event } -@@ -1566,6 +1588,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1561,6 +1583,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl this.lastYaw = to.getYaw(); this.lastPitch = to.getPitch(); @@ -165,7 +165,7 @@ index 823efad652d8ff9e96b99375b102fef6f017716e..caa8a69bde0c212c36dd990a67836ac2 } // CraftBukkit start diff --git a/src/main/java/net/minecraft/world/entity/EntitySelector.java b/src/main/java/net/minecraft/world/entity/EntitySelector.java -index dbbce471c35849ea7d7ad07e9db9b7d8d85690df..5eb63d857fea0f1c4dc1e6e4c7af8ea653dc7963 100644 +index b350d41a724048af06f9aa9bbef039d3d719c3a8..4f25d52e70752d56c0c03d437651638ac57fa576 100644 --- a/src/main/java/net/minecraft/world/entity/EntitySelector.java +++ b/src/main/java/net/minecraft/world/entity/EntitySelector.java @@ -40,6 +40,7 @@ public final class EntitySelector { @@ -177,7 +177,7 @@ index dbbce471c35849ea7d7ad07e9db9b7d8d85690df..5eb63d857fea0f1c4dc1e6e4c7af8ea6 private EntitySelector() {} // Paper start diff --git a/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java b/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java -index ac5e5676b194a2a99e5cf53eb89c1152cac963b8..872454743f6dedc27519a13566559195c47cc9f8 100644 +index 3c4f4af85a3f2d4f9f52827164e63727b916c33a..aa4dec55c1d4cd9796587ea3a3343131a4d2f0a4 100644 --- a/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java +++ b/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java @@ -64,6 +64,10 @@ public class TargetingConditions { @@ -192,7 +192,7 @@ index ac5e5676b194a2a99e5cf53eb89c1152cac963b8..872454743f6dedc27519a13566559195 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 b494e11e21e88228cb4986fb8685184913275e95..71c0a6c896b0f608bc8bc494810723242e291c32 100644 +index 1f7022c086c88d9a7b8672ede2a5a14f85999461..59da5e5437fd060279584d6b16071dcd92ac9d33 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java @@ -189,6 +189,13 @@ public abstract class Player extends LivingEntity { @@ -223,7 +223,7 @@ index ff0b7b9e4ae3aa0c170d05bc51fd7ff26e7531ee..53d4000593d4c79de8e8ab04bfd614b7 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 69f8a65a396890176e5f1106f5560a3f5589f742..d678d2f374cc10d19879a4ebfcd601f34bb5edbc 100644 +index 4ab63267c4ec808d3daf94478a1425b5aa70b75f..833d20484c3bd5b59fff64141f2aa352742a3d5f 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -524,10 +524,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @@ -317,7 +317,7 @@ index e248395ad5f5f012aeefecf367d54f90cade0996..70f53ccb22de2c05c9ead68f8bd29d0b public boolean untamedTamablesAreRidable = true; public boolean useNightVisionWhenRiding = false; diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java -index 651063863b451d24ffe39f0a4d8db296e58ff585..9c1452a4125af81c045933fce78ceb3963b787bf 100644 +index a69814d3a6214af734d670fe5545518a5f8a8dc5..a2227d7148910631c9cec73aef2c24e223385963 100644 --- a/src/main/java/org/spigotmc/ActivationRange.java +++ b/src/main/java/org/spigotmc/ActivationRange.java @@ -203,6 +203,7 @@ public class ActivationRange diff --git a/patches/server/0022-Logger-settings-suppressing-pointless-logs.patch b/patches/server/0022-Logger-settings-suppressing-pointless-logs.patch index 8ffcaf0bb..a4716e9ce 100644 --- a/patches/server/0022-Logger-settings-suppressing-pointless-logs.patch +++ b/patches/server/0022-Logger-settings-suppressing-pointless-logs.patch @@ -17,13 +17,13 @@ index f655e0ae4a287886d0291cd0089bad2000249d0f..fcb5965ff0a9623a8e63a4b7413ad554 } else { this.startProgress(advancementholder, advancementprogress); diff --git a/src/main/java/net/minecraft/server/level/WorldGenRegion.java b/src/main/java/net/minecraft/server/level/WorldGenRegion.java -index 277c8e429481ca9763ddac9e700735d25aba78e9..3632957dfd39dc5dcb288fb86c0cadc37f1b4d27 100644 +index 5ece375eaf6bcc61864997a389bb5e24625e4505..aee4ab6c7ea09006bec4a1c6df0005718c6d86bd 100644 --- a/src/main/java/net/minecraft/server/level/WorldGenRegion.java +++ b/src/main/java/net/minecraft/server/level/WorldGenRegion.java @@ -318,6 +318,7 @@ public class WorldGenRegion implements WorldGenLevel { return true; } else { - // Paper start + // Paper start - Buffer OOB setBlock calls + if (!org.purpurmc.purpur.PurpurConfig.loggerSuppressSetBlockFarChunk) // Purpur if (!hasSetFarWarned) { Util.logAndPauseIfInIde("Detected setBlock in a far chunk [" + i + ", " + j + "], pos: " + pos + ", status: " + this.generatingStatus + (this.currentlyGenerating == null ? "" : ", currently generating: " + (String) this.currentlyGenerating.get())); diff --git a/patches/server/0025-Zombie-horse-naturally-spawn.patch b/patches/server/0025-Zombie-horse-naturally-spawn.patch index d5ca64cce..141a89c14 100644 --- a/patches/server/0025-Zombie-horse-naturally-spawn.patch +++ b/patches/server/0025-Zombie-horse-naturally-spawn.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Zombie horse naturally spawn diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index e2f722b2c5f27a3dca5e8745a9b51d2abc748c22..7beac121beb299deb412419a0c329152bb4286e2 100644 +index a129e8ef37fef6fa289e6457b68a221947ef0348..a89a84f0955c5f3bee8abf529b585f04d5349de2 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -1021,10 +1021,18 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1016,10 +1016,18 @@ public class ServerLevel extends Level implements WorldGenLevel { boolean flag1 = this.getGameRules().getBoolean(GameRules.RULE_DOMOBSPAWNING) && this.random.nextDouble() < (double) difficultydamagescaler.getEffectiveDifficulty() * this.paperConfig().entities.spawning.skeletonHorseThunderSpawnChance.or(0.01D) && !this.getBlockState(blockposition.below()).is(Blocks.LIGHTNING_ROD); // Paper if (flag1) { 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 c46c8454d..54ce4727d 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 960b772977adf13c8765dd115346ca53303f7823..08b01dd22f4cef8e866a05f6a281afee8cd1d95e 100644 +index 036688d52541dda8d8eef6fee43823844f245124..7ca03d221e33cec1df99b6dcd60fcdd401530938 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -337,7 +337,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -336,7 +336,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S public double xOld; public double yOld; public double zOld; @@ -18,7 +18,7 @@ index 960b772977adf13c8765dd115346ca53303f7823..08b01dd22f4cef8e866a05f6a281afee 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 a9c1f99ba2461333bd154ac16e812031f234f7a6..86e6b4e52a346f4e0370d0bad48ba4643daaadd7 100644 +index 94a30a0c1266bf919d1dc4ca2b19489edd54a7fa..61a2048625df012f563d3a0db567630bdfe489c3 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 { @@ -26,7 +26,7 @@ index a9c1f99ba2461333bd154ac16e812031f234f7a6..86e6b4e52a346f4e0370d0bad48ba464 @Override public void tick() { + maxUpStep = level().purpurConfig.armorstandStepHeight; - // Paper start + // Paper start - Allow ArmorStands not to tick 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 diff --git a/patches/server/0039-Allow-soil-to-moisten-from-water-directly-under-it.patch b/patches/server/0039-Allow-soil-to-moisten-from-water-directly-under-it.patch index 4e95f5d51..fb452fea2 100644 --- a/patches/server/0039-Allow-soil-to-moisten-from-water-directly-under-it.patch +++ b/patches/server/0039-Allow-soil-to-moisten-from-water-directly-under-it.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Allow soil to moisten from water directly under it diff --git a/src/main/java/net/minecraft/world/level/block/FarmBlock.java b/src/main/java/net/minecraft/world/level/block/FarmBlock.java -index 59bbdead2ebd8965d222540c7243dde051bbcc4b..bcc864cbfb9f24ad654da1fcbf7d7c76ed494ce3 100644 +index 47eb8bf604a63259c0200cada1403dc005a6cbac..4837453b2186d50da0bbcbcdc0bfe562c9f36039 100644 --- a/src/main/java/net/minecraft/world/level/block/FarmBlock.java +++ b/src/main/java/net/minecraft/world/level/block/FarmBlock.java @@ -171,7 +171,7 @@ public class FarmBlock extends Block { @@ -14,11 +14,11 @@ index 59bbdead2ebd8965d222540c7243dde051bbcc4b..bcc864cbfb9f24ad654da1fcbf7d7c76 - return false; + return ((ServerLevel) world).purpurConfig.farmlandGetsMoistFromBelow && world.getFluidState(pos.relative(Direction.DOWN)).is(FluidTags.WATER); // Purpur; + // Paper end - Perf: remove abstract block iteration } - @Override diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 10572cc8cae0902a050e62e568b29b96d9c54a21..ae393a6c34e79ea3ac0f4a17792f296f18c3f06b 100644 +index f9768a250a4a1543caa3aeab7e745e289d18d2e4..113d827713b409cc3093c39a56439d7c0d04e129 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -145,6 +145,11 @@ public class PurpurWorldConfig { diff --git a/patches/server/0044-Skip-events-if-there-s-no-listeners.patch b/patches/server/0044-Skip-events-if-there-s-no-listeners.patch index 9fc44407d..e05b2489d 100644 --- a/patches/server/0044-Skip-events-if-there-s-no-listeners.patch +++ b/patches/server/0044-Skip-events-if-there-s-no-listeners.patch @@ -5,13 +5,13 @@ Subject: [PATCH] Skip events if there's no listeners diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java -index 8fe48c6bf65db6b11fcd0674aad01d5bb8d17a5f..8572142117fbc469199a538c4624b2f064e8cb6f 100644 +index 92e8aed5efd5c6f7f8baf44f4712209acd58cf83..ac63c371eb5a24bccec561826913a39c6e96694d 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java @@ -507,6 +507,7 @@ public class Commands { private void runSync(ServerPlayer player, Collection bukkit, RootCommandNode rootcommandnode) { - // Paper end - Async command map building - new com.destroystokyo.paper.event.brigadier.AsyncPlayerSendCommandsEvent(player.getBukkitEntity(), (RootCommandNode) rootcommandnode, false).callEvent(); // Paper + // Paper end - Perf: Async command map building + new com.destroystokyo.paper.event.brigadier.AsyncPlayerSendCommandsEvent(player.getBukkitEntity(), (RootCommandNode) rootcommandnode, false).callEvent(); // Paper - Brigadier API + if (PlayerCommandSendEvent.getHandlerList().getRegisteredListeners().length > 0) { // Purpur - skip all this crap if there's nothing listening PlayerCommandSendEvent event = new PlayerCommandSendEvent(player.getBukkitEntity(), new LinkedHashSet<>(bukkit)); event.getPlayer().getServer().getPluginManager().callEvent(event); diff --git a/patches/server/0050-Allow-leashing-villagers.patch b/patches/server/0050-Allow-leashing-villagers.patch index c84bc7b6f..1b83a7452 100644 --- a/patches/server/0050-Allow-leashing-villagers.patch +++ b/patches/server/0050-Allow-leashing-villagers.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Allow leashing villagers diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index f17b7e83a04a2cd738f7d708891fec2e341f3f96..a36994947d3a4f06f102bb143e44d0d7510f8338 100644 +index 749de94a6e41d44a6041f67c7d0e2205e10a26ab..3cbfdb6cc09ef6fc13ecb110c751c93f93ab01bf 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java @@ -1317,6 +1317,7 @@ public abstract class Mob extends LivingEntity implements Targeting { @@ -14,10 +14,10 @@ index f17b7e83a04a2cd738f7d708891fec2e341f3f96..a36994947d3a4f06f102bb143e44d0d7 } else if (this.getLeashHolder() == player) { + if (hand == InteractionHand.OFF_HAND && (level().purpurConfig.villagerCanBeLeashed || level().purpurConfig.wanderingTraderCanBeLeashed) && this instanceof net.minecraft.world.entity.npc.AbstractVillager) return InteractionResult.CONSUME; // Purpur // CraftBukkit start - fire PlayerUnleashEntityEvent - // Paper start - drop leash variable + // Paper start - Expand EntityUnleashEvent org.bukkit.event.player.PlayerUnleashEntityEvent event = CraftEventFactory.callPlayerUnleashEntityEvent(this, player, hand, !player.getAbilities().instabuild); 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 a39457752612fc0dbbb022cb7faebc73bc2ad5e5..f4ed6ae7e8f122a0a2ce7f4488b0fe1ed0c7da3d 100644 +index 3a9de6da37bf12a86723f185a9cfefde123047be..1c75cbd9f998829f200c9ad679b9cd0213915607 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java @@ -185,6 +185,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler @@ -33,7 +33,7 @@ index a39457752612fc0dbbb022cb7faebc73bc2ad5e5..f4ed6ae7e8f122a0a2ce7f4488b0fe1e 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 64dd35573db3feae6507fc05086ed08c60f5ea01..ad7a32169b0decad1d3a2bd98e25b07731a33d03 100644 +index 8ead6c74e598eeeccb5f24cc3d1e86f03d2fe46a..8ab868c88e37fad978ffcf151ad527e57bdf4cb5 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 diff --git a/patches/server/0051-Implement-infinite-liquids.patch b/patches/server/0051-Implement-infinite-liquids.patch index 3d0d9ab99..8dd81a462 100644 --- a/patches/server/0051-Implement-infinite-liquids.patch +++ b/patches/server/0051-Implement-infinite-liquids.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Implement infinite liquids diff --git a/src/main/java/net/minecraft/world/level/material/FlowingFluid.java b/src/main/java/net/minecraft/world/level/material/FlowingFluid.java -index c55f51e6db55f9fa66f53eef0e7a56af5f81d742..74688f4672936cd2ac629b9f2f404163df6730e9 100644 +index 6411aa4ff6bd4cabb25c426fa8f4a7eedb969c03..0fe597d32a0e15ea67b32925c1a62e8c143ff81d 100644 --- a/src/main/java/net/minecraft/world/level/material/FlowingFluid.java +++ b/src/main/java/net/minecraft/world/level/material/FlowingFluid.java -@@ -228,7 +228,7 @@ public abstract class FlowingFluid extends Fluid { +@@ -227,7 +227,7 @@ public abstract class FlowingFluid extends Fluid { } } @@ -17,7 +17,7 @@ index c55f51e6db55f9fa66f53eef0e7a56af5f81d742..74688f4672936cd2ac629b9f2f404163 BlockState iblockdata2 = world.getBlockState(pos.below()); FluidState fluid1 = iblockdata2.getFluidState(); -@@ -337,6 +337,12 @@ public abstract class FlowingFluid extends Fluid { +@@ -336,6 +336,12 @@ public abstract class FlowingFluid extends Fluid { protected abstract boolean canConvertToSource(Level world); @@ -31,7 +31,7 @@ index c55f51e6db55f9fa66f53eef0e7a56af5f81d742..74688f4672936cd2ac629b9f2f404163 if (state.getBlock() instanceof LiquidBlockContainer) { ((LiquidBlockContainer) state.getBlock()).placeLiquid(world, pos, state, fluidState); diff --git a/src/main/java/net/minecraft/world/level/material/LavaFluid.java b/src/main/java/net/minecraft/world/level/material/LavaFluid.java -index c3f8e1e2dd89c168b8b4a15b589109db486bc8d7..2076e4b433e0a57e3ae7053c1df77e0cdc457fc9 100644 +index 3bb4a9a1a6249e8ba2de237f801210e7f4fd5825..4c230136d832d50ae16ffa037b0b30ff1101b50a 100644 --- a/src/main/java/net/minecraft/world/level/material/LavaFluid.java +++ b/src/main/java/net/minecraft/world/level/material/LavaFluid.java @@ -198,6 +198,13 @@ public abstract class LavaFluid extends FlowingFluid { @@ -49,7 +49,7 @@ index c3f8e1e2dd89c168b8b4a15b589109db486bc8d7..2076e4b433e0a57e3ae7053c1df77e0c protected boolean canConvertToSource(Level world) { return world.getGameRules().getBoolean(GameRules.RULE_LAVA_SOURCE_CONVERSION); diff --git a/src/main/java/net/minecraft/world/level/material/WaterFluid.java b/src/main/java/net/minecraft/world/level/material/WaterFluid.java -index d280c98aed5262c4ce39526c917de884f25a8584..e7d9f6802520620a1dcf0938256ffe80fc72a6f0 100644 +index cde93efaecd42b9081405638af3ba91cb5e184c9..c664fd77dd865037293a3e86699fd1fa6b703882 100644 --- a/src/main/java/net/minecraft/world/level/material/WaterFluid.java +++ b/src/main/java/net/minecraft/world/level/material/WaterFluid.java @@ -64,6 +64,13 @@ public abstract class WaterFluid extends FlowingFluid { @@ -63,11 +63,11 @@ index d280c98aed5262c4ce39526c917de884f25a8584..e7d9f6802520620a1dcf0938256ffe80 + } + // Purpur end + - // Paper start + // Paper start - Add BlockBreakBlockEvent @Override protected void beforeDestroyingBlock(LevelAccessor world, BlockPos pos, BlockState state, BlockPos source) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 5ac666f1a71770891b3b437b2d68b0c5a952358f..e1fd29d376fc52e7519d93073b3823e616cea2c1 100644 +index 40a0cd68b1e35894360f0edc45bc30a5bd47622f..783c238cc0e68e52b0f20ea535a208d3bec663de 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -221,6 +221,11 @@ public class PurpurWorldConfig { 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 ee1488f7f..a4b20b03f 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 94f5c8de371fba03debf37e36fb1c9fc9c8ce78c..f4b22c7916c79275f44079ca9796099b5e142f37 100644 +index 7ca03d221e33cec1df99b6dcd60fcdd401530938..9f354cbc17e66c425a274b00f15e6cf51cdb2cee 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -903,7 +903,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -902,7 +902,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S public void checkBelowWorld() { // Paper start - Configurable nether ceiling damage @@ -18,7 +18,7 @@ index 94f5c8de371fba03debf37e36fb1c9fc9c8ce78c..f4b22c7916c79275f44079ca9796099b && (!(this instanceof Player player) || !player.getAbilities().invulnerable))) { // Paper end diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 65a3949679b3d600b972eb6058af6eebc7367d6a..ae710015f2ef933fc61de4978f773e0014a80023 100644 +index c27e254d42697f028f3aca902bcb58ba33f95ce4..d668fd41d2bc2ab6a782cf5415507cbd83754c18 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -2541,7 +2541,7 @@ public abstract class LivingEntity extends Entity implements Attackable { diff --git a/patches/server/0055-Add-canSaveToDisk-to-Entity.patch b/patches/server/0055-Add-canSaveToDisk-to-Entity.patch index 6faffa19a..1e6bf3f8b 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 b4d249de8471499f17fc61a21b9d738f7d329f38..872f88d8d3c3b7b0ce82fda15017b32280bfef4a 100644 +index 9f354cbc17e66c425a274b00f15e6cf51cdb2cee..96e79ca690a3951dd24601673703f914465c48a3 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -499,6 +499,10 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -498,6 +498,10 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S return false; } @@ -36,15 +36,15 @@ index 4a2331c22a022881d66bcfd4134b0ffe421a0633..d57ef27df0a3597416564f8723b4b986 public boolean isPickable() { return false; diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/EntityStorage.java b/src/main/java/net/minecraft/world/level/chunk/storage/EntityStorage.java -index 060e064625969610539dbf969ce773b877a7c579..32cd9df202704cdfb8fa06aaf0e738d483054feb 100644 +index 23dc37ff1f92951817864963bf93220d5aae91bb..af563ffb67c43b50555951fe1b5e4320d429a7f1 100644 --- a/src/main/java/net/minecraft/world/level/chunk/storage/EntityStorage.java +++ b/src/main/java/net/minecraft/world/level/chunk/storage/EntityStorage.java @@ -112,6 +112,7 @@ public class EntityStorage implements EntityPersistentStorage { ListTag listTag = new ListTag(); - final java.util.Map, Integer> savedEntityCounts = new java.util.HashMap<>(); // Paper + final java.util.Map, Integer> savedEntityCounts = new java.util.HashMap<>(); // Paper - Entity load/save limit per chunk entities.forEach((entity) -> { // diff here: use entities parameter + if (!entity.canSaveToDisk()) return; // Purpur - // Paper start + // Paper start - Entity load/save limit per chunk 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 diff --git a/patches/server/0060-Implement-elytra-settings.patch b/patches/server/0060-Implement-elytra-settings.patch index d0175571a..a3e77c30e 100644 --- a/patches/server/0060-Implement-elytra-settings.patch +++ b/patches/server/0060-Implement-elytra-settings.patch @@ -5,7 +5,7 @@ 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 ae710015f2ef933fc61de4978f773e0014a80023..1abf3eb5a32cf67212e74be69ab008af772eb378 100644 +index d668fd41d2bc2ab6a782cf5415507cbd83754c18..579f3d49c2804f1a7de687426402cdf9d950fad9 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -3567,7 +3567,16 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -27,7 +27,7 @@ index ae710015f2ef933fc61de4978f773e0014a80023..1abf3eb5a32cf67212e74be69ab008af }); } diff --git a/src/main/java/net/minecraft/world/item/FireworkRocketItem.java b/src/main/java/net/minecraft/world/item/FireworkRocketItem.java -index 82b0bda3e35ec2157a477e1a17b2b46baadc97d9..0fc45b1048a1c4e0dc2bd1ae0437eecbe113cf96 100644 +index 0821c06a4c66edc8fcee09fc192335a588d2944b..56d7c05c93bc074f6caba51b1741f25d6f0861cd 100644 --- a/src/main/java/net/minecraft/world/item/FireworkRocketItem.java +++ b/src/main/java/net/minecraft/world/item/FireworkRocketItem.java @@ -15,6 +15,7 @@ import net.minecraft.util.ByIdMap; @@ -54,7 +54,7 @@ index 82b0bda3e35ec2157a477e1a17b2b46baadc97d9..0fc45b1048a1c4e0dc2bd1ae0437eecb itemStack.shrink(1); } else ((net.minecraft.server.level.ServerPlayer) user).getBukkitEntity().updateInventory(); diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java -index 1d2a706a4eee7523bbe89bc18b6d9ddd80581c3a..ee621bad75053831d5c88c783fd8af6359d2c281 100644 +index 65d1b22d3d3670f009308750013347a15d082e18..345ca7da64f646f1d6f0cde68269b697926cf17e 100644 --- a/src/main/java/net/minecraft/world/item/ItemStack.java +++ b/src/main/java/net/minecraft/world/item/ItemStack.java @@ -641,7 +641,7 @@ public final class ItemStack { @@ -67,7 +67,7 @@ index 1d2a706a4eee7523bbe89bc18b6d9ddd80581c3a..ee621bad75053831d5c88c783fd8af63 for (int l = 0; j > 0 && l < amount; ++l) { @@ -696,6 +696,12 @@ public final class ItemStack { - if (this.hurt(amount, entity.getRandom(), entity /*instanceof ServerPlayer ? (ServerPlayer) entity : null*/)) { // Paper - pass LivingEntity for EntityItemDamageEvent + if (this.hurt(amount, entity.getRandom(), entity /*instanceof ServerPlayer ? (ServerPlayer) entity : null*/)) { // Paper - Add EntityDamageItemEvent breakCallback.accept(entity); Item item = this.getItem(); + // Purpur start @@ -80,7 +80,7 @@ index 1d2a706a4eee7523bbe89bc18b6d9ddd80581c3a..ee621bad75053831d5c88c783fd8af63 if (this.count == 1 && entity instanceof net.minecraft.world.entity.player.Player) { org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerItemBreakEvent((net.minecraft.world.entity.player.Player) entity, this); diff --git a/src/main/java/net/minecraft/world/item/TridentItem.java b/src/main/java/net/minecraft/world/item/TridentItem.java -index 5fab851b319847035fb1eefd0ab999de3ccc2cd8..f1d6db9382bec49f61657168fe56b06784d02cf5 100644 +index fa876ddf54780728e7f3ecfe02aa8a16b8ef6f8d..75cf58919ac787b389286b41a9f0b5a945e71649 100644 --- a/src/main/java/net/minecraft/world/item/TridentItem.java +++ b/src/main/java/net/minecraft/world/item/TridentItem.java @@ -131,6 +131,14 @@ public class TridentItem extends Item implements Vanishable { diff --git a/patches/server/0061-Item-entity-immunities.patch b/patches/server/0061-Item-entity-immunities.patch index c2b35c396..5ea8975e3 100644 --- a/patches/server/0061-Item-entity-immunities.patch +++ b/patches/server/0061-Item-entity-immunities.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Item entity immunities diff --git a/src/main/java/net/minecraft/server/level/ServerEntity.java b/src/main/java/net/minecraft/server/level/ServerEntity.java -index e385a62058204ba3b01ce594e7c180f9cc6cf664..92ca330bee2f58bde93c8da12a8f5c14e29de540 100644 +index 79914528f6d255355284b04253218a7c4dec1ead..2568b4ad72a7b99484aaa048257a3b5465b63b9d 100644 --- a/src/main/java/net/minecraft/server/level/ServerEntity.java +++ b/src/main/java/net/minecraft/server/level/ServerEntity.java @@ -73,7 +73,7 @@ public class ServerEntity { @@ -18,12 +18,12 @@ index e385a62058204ba3b01ce594e7c180f9cc6cf664..92ca330bee2f58bde93c8da12a8f5c14 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 c34c698d389da29c9cfaa56cb8023e30416a14ba..7844ee584b917485ce5e490ad040c2c1d732eb1d 100644 +index 635f93b4205bd11a8080fbc1db53aa2430aacb77..f4bf401f53e420a6b0635a616dce386d0ab56be7 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 { public boolean canMobPickup = true; // Paper - private int despawnRate = -1; // Paper + 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 + // Purpur start + public boolean immuneToCactus = false; @@ -55,7 +55,7 @@ index c34c698d389da29c9cfaa56cb8023e30416a14ba..7844ee584b917485ce5e490ad040c2c1 @@ -567,6 +582,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 + 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 + // Purpur start + if (level().purpurConfig.itemImmuneToCactus.contains(stack.getItem())) immuneToCactus = true; + if (level().purpurConfig.itemImmuneToExplosion.contains(stack.getItem())) immuneToExplosion = true; @@ -66,7 +66,7 @@ index c34c698d389da29c9cfaa56cb8023e30416a14ba..7844ee584b917485ce5e490ad040c2c1 @Override diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java -index 81498941748d646ebe6495f4a7ce6953532144c6..14d6ff11c8b8b047ada5d308515e9d214cf77b69 100644 +index 832def3c518be8d6d81e71f6022566e6179e2d17..e99007570a89eebe3c85ad549cf24286514306f8 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 { 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 797c7a03d..6aa570d76 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,7 +5,7 @@ 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 ffc5b68c4246a7111845230a75552bb15875a209..ef0098e46bda8abc456f2bb5929d874c6aeb8698 100644 +index c99ab157e43fc990549fc06f5b6fb1e227014fde..4f0e1a653a117687b5b330ff424873d01f574bee 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 { @@ -21,11 +21,11 @@ index ffc5b68c4246a7111845230a75552bb15875a209..ef0098e46bda8abc456f2bb5929d874c public EndCrystal(EntityType type, Level world) { super(type, world); -@@ -79,7 +85,50 @@ public class EndCrystal extends Entity { - // Paper end +@@ -158,6 +164,49 @@ public class EndCrystal extends Entity { + } } -+ // Purpur start ++ // Purpur start + if (level().purpurConfig.phantomAttackedByCrystalRadius <= 0 || --idleCooldown > 0) { + return; // on cooldown + } @@ -67,13 +67,12 @@ index ffc5b68c4246a7111845230a75552bb15875a209..ef0098e46bda8abc456f2bb5929d874c + phantomBeamTicks = 0; + phantomDamageCooldown = 0; + idleCooldown = 60; - } + // Purpur end + } - @Override - protected void addAdditionalSaveData(CompoundTag nbt) { + public void setBeamTarget(@Nullable BlockPos beamTarget) { diff --git a/src/main/java/net/minecraft/world/entity/monster/Phantom.java b/src/main/java/net/minecraft/world/entity/monster/Phantom.java -index 8446ce22139fa2473c789cab67f4031a23f0d31d..ef41a462b102981d30207299d0279fd51b433a22 100644 +index 6819acda60e783ee57dd8b9b5d27bc1e105425c3..4153b621c04168f1f78c526f31a46d9b1fecf3a7 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Phantom.java +++ b/src/main/java/net/minecraft/world/entity/monster/Phantom.java @@ -50,6 +50,7 @@ public class Phantom extends FlyingMob implements Enemy { @@ -131,7 +130,7 @@ index 8446ce22139fa2473c789cab67f4031a23f0d31d..ef41a462b102981d30207299d0279fd5 this.targetSelector.addGoal(1, new Phantom.PhantomAttackPlayerTargetGoal()); } -@@ -353,6 +377,124 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -352,6 +376,124 @@ public class Phantom extends FlyingMob implements Enemy { private AttackPhase() {} } @@ -257,7 +256,7 @@ index 8446ce22139fa2473c789cab67f4031a23f0d31d..ef41a462b102981d30207299d0279fd5 private float speed = 0.1F; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 5fd4129889b3006018612204bc527738a78a0d35..262c6a2b63316fda5fa98fa4fcfbc0985951f6ee 100644 +index 5c83d5b665bfccd7c54c18012d4bec7d975de3f2..522ffc7b0d7a028436c385da4809070fb6095c4c 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -1065,6 +1065,9 @@ public class PurpurWorldConfig { diff --git a/patches/server/0067-Add-phantom-spawning-options.patch b/patches/server/0067-Add-phantom-spawning-options.patch index fc584d85e..72e52ca6c 100644 --- a/patches/server/0067-Add-phantom-spawning-options.patch +++ b/patches/server/0067-Add-phantom-spawning-options.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add phantom spawning options diff --git a/src/main/java/net/minecraft/world/level/levelgen/PhantomSpawner.java b/src/main/java/net/minecraft/world/level/levelgen/PhantomSpawner.java -index 7d7d37334321c844958ce09e77547dd61dcba6c8..e731fd6f196116f4995dc6de8ad06b1985abe22b 100644 +index ed80960777b18faca2d6a99783e53daf5fa19e09..0847aef56d8608cb1403485f231f30b2527f35ab 100644 --- a/src/main/java/net/minecraft/world/level/levelgen/PhantomSpawner.java +++ b/src/main/java/net/minecraft/world/level/levelgen/PhantomSpawner.java @@ -49,7 +49,7 @@ public class PhantomSpawner implements CustomSpawner { @@ -18,7 +18,7 @@ index 7d7d37334321c844958ce09e77547dd61dcba6c8..e731fd6f196116f4995dc6de8ad06b19 } else { int i = 0; @@ -61,10 +61,10 @@ public class PhantomSpawner implements CustomSpawner { - if (!entityplayer.isSpectator() && (!world.paperConfig().entities.behavior.phantomsDoNotSpawnOnCreativePlayers || !entityplayer.isCreative())) { // Paper + if (!entityplayer.isSpectator() && (!world.paperConfig().entities.behavior.phantomsDoNotSpawnOnCreativePlayers || !entityplayer.isCreative())) { // Paper - Add phantom creative and insomniac controls BlockPos blockposition = entityplayer.blockPosition(); - if (!world.dimensionType().hasSkyLight() || blockposition.getY() >= world.getSeaLevel() && world.canSeeSky(blockposition)) { @@ -38,7 +38,7 @@ index 7d7d37334321c844958ce09e77547dd61dcba6c8..e731fd6f196116f4995dc6de8ad06b19 + int k = world.purpurConfig.phantomSpawnMinPerAttempt + world.random.nextInt((world.purpurConfig.phantomSpawnMaxPerAttempt < 0 ? difficultydamagescaler.getDifficulty().getId() : world.purpurConfig.phantomSpawnMaxPerAttempt - world.purpurConfig.phantomSpawnMinPerAttempt) + 1); // Purpur for (int l = 0; l < k; ++l) { - // Paper start + // Paper start - PhantomPreSpawnEvent diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java index 522ffc7b0d7a028436c385da4809070fb6095c4c..28c92b79be65b35b691661f6d63c2f66c9a3a337 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java diff --git a/patches/server/0070-Add-allow-water-in-end-world-option.patch b/patches/server/0070-Add-allow-water-in-end-world-option.patch index 10e65f39c..7c3b50191 100644 --- a/patches/server/0070-Add-allow-water-in-end-world-option.patch +++ b/patches/server/0070-Add-allow-water-in-end-world-option.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add allow water in end world option diff --git a/src/main/java/net/minecraft/world/item/BucketItem.java b/src/main/java/net/minecraft/world/item/BucketItem.java -index aa0f09a18ea781e027ea70928b30d3e93061120f..5cb8f1e13f4889792395d6b498c0ade22a33b446 100644 +index 6371f326fc86cfc53e39bf8ed13b646f7705fbbc..3dec0c5fc8dece5341634eaf8e94fe1964bf4038 100644 --- a/src/main/java/net/minecraft/world/item/BucketItem.java +++ b/src/main/java/net/minecraft/world/item/BucketItem.java @@ -195,7 +195,7 @@ public class BucketItem extends Item implements DispensibleContainerItem { @@ -27,10 +27,10 @@ index aa0f09a18ea781e027ea70928b30d3e93061120f..5cb8f1e13f4889792395d6b498c0ade2 return true; diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 6ed3b2803c22ddac4234d573cecbaa5991a320d9..f0d9c35062983b0308820feee621caf6e4a6648a 100644 +index 5b5ac2d194cb9377f5ea3441505aefd3f7dbce8b..1c8653222f07f5aa12639a95c13fdcdfd5dd87c0 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -1914,4 +1914,14 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1913,4 +1913,14 @@ public abstract class Level implements LevelAccessor, AutoCloseable { } } // Paper end - notify observers even if grow failed @@ -46,12 +46,12 @@ index 6ed3b2803c22ddac4234d573cecbaa5991a320d9..f0d9c35062983b0308820feee621caf6 + // Purpur end } diff --git a/src/main/java/net/minecraft/world/level/block/IceBlock.java b/src/main/java/net/minecraft/world/level/block/IceBlock.java -index 9ebe74e235d425fde985a6180857dc4039ecfedf..2c21888c477b93f38adaf18abe62732b08e1c9c2 100644 +index 9c8c1df5187daefb1c8098b4d4a0976c71a7bbfd..cf4c1097d54c84b309ab02e9892d1b9e39d57490 100644 --- a/src/main/java/net/minecraft/world/level/block/IceBlock.java +++ b/src/main/java/net/minecraft/world/level/block/IceBlock.java @@ -41,7 +41,7 @@ public class IceBlock extends HalfTransparentBlock { public void afterDestroy(Level world, BlockPos pos, ItemStack tool) { - // Paper end + // Paper end - Improve Block#breakNaturally API if (EnchantmentHelper.getItemEnchantmentLevel(Enchantments.SILK_TOUCH, tool) == 0) { - if (world.dimensionType().ultraWarm()) { + if (world.isNether() || (world.isTheEnd() && !org.purpurmc.purpur.PurpurConfig.allowWaterPlacementInTheEnd)) { // Purpur diff --git a/patches/server/0071-Allow-color-codes-in-books.patch b/patches/server/0071-Allow-color-codes-in-books.patch index 8bf3e6835..89fece660 100644 --- a/patches/server/0071-Allow-color-codes-in-books.patch +++ b/patches/server/0071-Allow-color-codes-in-books.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Allow color codes in books diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 534b072024d6d2f6a23b3e8fde7fe685c961d4c9..3255e7d874a397dadf7dbc3ee3f994e5f41f4900 100644 +index 7c829f26b29bb3e02248bfd8d63b600c232ebd3e..063a1a979755d63bd3d099f07348c7a587adbe3d 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -1234,13 +1234,16 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1231,13 +1231,16 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl itemstack1.setTag(nbttagcompound.copy()); } @@ -28,7 +28,7 @@ index 534b072024d6d2f6a23b3e8fde7fe685c961d4c9..3255e7d874a397dadf7dbc3ee3f994e5 this.updateBookPages(pages, (s) -> { return Component.Serializer.toJson(Component.literal(s)); -@@ -1252,10 +1255,13 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1249,10 +1252,13 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl private void updateBookPages(List list, UnaryOperator unaryoperator, ItemStack itemstack, int slot, ItemStack handItem) { // CraftBukkit ListTag nbttaglist = new ListTag(); @@ -44,7 +44,7 @@ index 534b072024d6d2f6a23b3e8fde7fe685c961d4c9..3255e7d874a397dadf7dbc3ee3f994e5 Objects.requireNonNull(nbttaglist); stream.forEach(nbttaglist::add); -@@ -1265,11 +1271,11 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1262,11 +1268,11 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl for (int j = list.size(); i < j; ++i) { FilteredText filteredtext = (FilteredText) list.get(i); @@ -58,7 +58,7 @@ index 534b072024d6d2f6a23b3e8fde7fe685c961d4c9..3255e7d874a397dadf7dbc3ee3f994e5 } } -@@ -1282,6 +1288,16 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1279,6 +1285,16 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl this.player.getInventory().setItem(slot, CraftEventFactory.handleEditBookEvent(this.player, slot, handItem, itemstack)); // CraftBukkit // Paper - Don't ignore result (see other callsite for handleEditBookEvent) } diff --git a/patches/server/0072-Entity-lifespan.patch b/patches/server/0072-Entity-lifespan.patch index df26795f3..f4910e443 100644 --- a/patches/server/0072-Entity-lifespan.patch +++ b/patches/server/0072-Entity-lifespan.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Entity lifespan diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 3255e7d874a397dadf7dbc3ee3f994e5f41f4900..2979e843ba65fece078a3d5ab5256d5e656f8912 100644 +index 063a1a979755d63bd3d099f07348c7a587adbe3d..2cb344c02a3812225679d7392b9f557309d05010 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -2751,6 +2751,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -2746,6 +2746,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl AABB axisalignedbb = entity.getBoundingBox(); if (axisalignedbb.distanceToSqr(this.player.getEyePosition()) < ServerGamePacketListenerImpl.MAX_INTERACTION_DISTANCE) { @@ -17,7 +17,7 @@ index 3255e7d874a397dadf7dbc3ee3f994e5f41f4900..2979e843ba65fece078a3d5ab5256d5e 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 bbac0cf5e2c216b6ac61e4fcd2b15d28bbf648ec..f36f0291002dae00eceee96f9f9d210ccea8da31 100644 +index 8352b81387a9c558e377dee294e781d12aba45b0..53b193c0f4c1990055106b60874c24036571e951 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 { diff --git a/patches/server/0075-Phantoms-burn-in-light.patch b/patches/server/0075-Phantoms-burn-in-light.patch index 87039d62b..38a37551d 100644 --- a/patches/server/0075-Phantoms-burn-in-light.patch +++ b/patches/server/0075-Phantoms-burn-in-light.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Phantoms burn in light diff --git a/src/main/java/net/minecraft/world/entity/monster/Phantom.java b/src/main/java/net/minecraft/world/entity/monster/Phantom.java -index ef41a462b102981d30207299d0279fd51b433a22..6849b2ad3b2db840a1af35ef069490506449c861 100644 +index 4153b621c04168f1f78c526f31a46d9b1fecf3a7..fd9cb719c0380993a506bd803128cb2d7f0c37cb 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Phantom.java +++ b/src/main/java/net/minecraft/world/entity/monster/Phantom.java @@ -50,6 +50,7 @@ public class Phantom extends FlyingMob implements Enemy { @@ -20,17 +20,17 @@ index ef41a462b102981d30207299d0279fd51b433a22..6849b2ad3b2db840a1af35ef06949050 @Override public void aiStep() { -- if (this.isAlive() && shouldBurnInDay && this.isSunBurnTick()) { // Paper - Configurable Burning +- if (this.isAlive() && shouldBurnInDay && this.isSunBurnTick()) { // Paper - shouldBurnInDay API + // Purpur start + boolean burnFromDaylight = this.shouldBurnInDay && this.level().purpurConfig.phantomBurnInDaylight; + boolean burnFromLightSource = this.level().purpurConfig.phantomBurnInLight > 0 && this.level().getMaxLocalRawBrightness(blockPosition()) >= this.level().purpurConfig.phantomBurnInLight; -+ if (this.isAlive() && (burnFromDaylight || burnFromLightSource)) { // Paper - Configurable Burning ++ if (this.isAlive() && (burnFromDaylight || burnFromLightSource)) { // Paper - shouldBurnInDay API + if (getRider() == null || !this.isControllable()) -+ // Purpur end ++ // Purpur end if (getRider() == null || !this.isControllable()) // Purpur this.setSecondsOnFire(8); } -@@ -661,6 +667,12 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -660,6 +666,12 @@ public class Phantom extends FlyingMob implements Enemy { return false; } else if (!entityliving.isAlive()) { return false; @@ -43,7 +43,7 @@ index ef41a462b102981d30207299d0279fd51b433a22..6849b2ad3b2db840a1af35ef06949050 } else { if (entityliving instanceof Player) { Player entityhuman = (Player) entityliving; -@@ -806,6 +818,7 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -805,6 +817,7 @@ public class Phantom extends FlyingMob implements Enemy { this.nextScanTick = reducedTickDelay(60); List list = Phantom.this.level().getNearbyPlayers(this.attackTargeting, Phantom.this, Phantom.this.getBoundingBox().inflate(16.0D, 64.0D, 16.0D)); @@ -52,7 +52,7 @@ index ef41a462b102981d30207299d0279fd51b433a22..6849b2ad3b2db840a1af35ef06949050 list.sort(Comparator.comparing((Entity e) -> { return e.getY(); }).reversed()); // CraftBukkit - decompile error Iterator iterator = list.iterator(); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 3557d668d5117aaaef2fde0792b58c7e58546c22..81dd8666fd997f92972da2c6980c6ce515582fbc 100644 +index c87c7feb140864771cbef3dcee1f89319c9a1f83..a0477b47563214152483423121523f836827306b 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -1123,6 +1123,9 @@ 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 721bcc6d2..ac8df3dec 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 667b560c5b414d174f265778038942e87d4451ef..9a790f72307e4e044a2ae9aded57025e3974c278 100644 +index 96e79ca690a3951dd24601673703f914465c48a3..46dfa64da35505ca8be525d0eca0e2840840f776 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -4454,6 +4454,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -4451,6 +4451,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 9f1226539..9e626d409 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 9a790f72307e4e044a2ae9aded57025e3974c278..efadee43018d6d22b11ed59169a89d91192af3cc 100644 +index 46dfa64da35505ca8be525d0eca0e2840840f776..cc7cdb842df3a9d9cb9dc86b589c9893e06577ce 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -3153,7 +3153,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3152,7 +3152,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S public void handleInsidePortal(BlockPos pos) { if (this.isOnPortalCooldown()) { this.setPortalCooldown(); @@ -17,17 +17,17 @@ index 9a790f72307e4e044a2ae9aded57025e3974c278..efadee43018d6d22b11ed59169a89d91 if (!this.level().isClientSide && !pos.equals(this.portalEntrancePos)) { this.portalEntrancePos = pos.immutable(); } -@@ -3862,7 +3862,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3859,7 +3859,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } public boolean canChangeDimensions() { -- return !this.isPassenger() && !this.isVehicle() && isAlive() && valid; // Paper -+ return !this.isPassenger() && !this.isVehicle() && isAlive() && valid && (level().purpurConfig.entitiesCanUsePortals || this instanceof ServerPlayer); // Paper // Purpur +- return !this.isPassenger() && !this.isVehicle() && isAlive() && valid; // Paper - Fix item duplication and teleport issues ++ return !this.isPassenger() && !this.isVehicle() && isAlive() && valid && (level().purpurConfig.entitiesCanUsePortals || this instanceof ServerPlayer); // Paper - Fix item duplication and teleport issues // Purpur } public float getBlockExplosionResistance(Explosion explosion, BlockGetter world, BlockPos pos, BlockState blockState, FluidState fluidState, float max) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index d6b6d112da049e26ee867d81e37baa8f7bd4cda0..6b45e9aa4575892005765af9e202c61f50d4b1b6 100644 +index cb1d95f6f786df7a8825016b70c3c6b718f60358..4ffd1263f48a426e5f7a79fd266a0f445975dc2e 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -98,6 +98,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0089-Allow-toggling-special-MobSpawners-per-world.patch b/patches/server/0089-Allow-toggling-special-MobSpawners-per-world.patch index 067c982f5..21b109b70 100644 --- a/patches/server/0089-Allow-toggling-special-MobSpawners-per-world.patch +++ b/patches/server/0089-Allow-toggling-special-MobSpawners-per-world.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Allow toggling special MobSpawners per world In vanilla, these are all hardcoded on for world type 0 (overworld) and hardcoded off for every other world type. Default config behaviour matches this. diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 7beac121beb299deb412419a0c329152bb4286e2..45de633b7547646193f6cd34b9557cd54df013f5 100644 +index a89a84f0955c5f3bee8abf529b585f04d5349de2..cd54fd87fc48ee0423263c4365ac7660a9ece741 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -713,7 +713,24 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -708,7 +708,24 @@ public class ServerLevel extends Level implements WorldGenLevel { this.dragonParts = new Int2ObjectOpenHashMap(); this.tickTime = flag1; this.server = minecraftserver; @@ -36,7 +36,7 @@ index 7beac121beb299deb412419a0c329152bb4286e2..45de633b7547646193f6cd34b9557cd5 ChunkGenerator chunkgenerator = worlddimension.generator(); // CraftBukkit start diff --git a/src/main/java/net/minecraft/world/entity/npc/WanderingTraderSpawner.java b/src/main/java/net/minecraft/world/entity/npc/WanderingTraderSpawner.java -index 8385eb1d60f377da94e3178ab506feefb43563fd..a5443f92786427c42092aec8350e7ab37704db7a 100644 +index d7bddedb19c10f62fd1f7d3128453ad706ed16be..752b38d45d59d8b3cd492246e5aa4f378a78734d 100644 --- a/src/main/java/net/minecraft/world/entity/npc/WanderingTraderSpawner.java +++ b/src/main/java/net/minecraft/world/entity/npc/WanderingTraderSpawner.java @@ -159,7 +159,17 @@ public class WanderingTraderSpawner implements CustomSpawner { diff --git a/patches/server/0092-Add-option-to-disable-zombie-aggressiveness-towards-.patch b/patches/server/0092-Add-option-to-disable-zombie-aggressiveness-towards-.patch index ab1c0a096..d380f267c 100644 --- a/patches/server/0092-Add-option-to-disable-zombie-aggressiveness-towards-.patch +++ b/patches/server/0092-Add-option-to-disable-zombie-aggressiveness-towards-.patch @@ -20,16 +20,16 @@ index cfe6a6f6bcfd7a3b29ab25f5a6745d31c18f338d..c168658d4d4ec1ddd80425e786d4435f ignored.add("goal_selector_1"); ignored.add("goal_selector_2"); diff --git a/src/main/java/net/minecraft/world/entity/monster/Drowned.java b/src/main/java/net/minecraft/world/entity/monster/Drowned.java -index ebfbf67d65dc5a54e9235f44ab391147c23ddd0f..162ecea875d99115cdd742524ce65ee74cc0d47e 100644 +index cb9bc542ae73950c56fd883787f026d92dda4834..e6751c1a834453be66e891d7eb94bbb66f36008c 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Drowned.java +++ b/src/main/java/net/minecraft/world/entity/monster/Drowned.java @@ -120,7 +120,19 @@ public class Drowned extends Zombie implements RangedAttackMob { this.goalSelector.addGoal(7, new RandomStrollGoal(this, 1.0D)); this.targetSelector.addGoal(1, (new HurtByTargetGoal(this, new Class[]{Drowned.class})).setAlertOthers(ZombifiedPiglin.class)); this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, this::okTarget)); -- if (this.level().spigotConfig.zombieAggressiveTowardsVillager) this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractVillager.class, false)); // Paper +- if (this.level().spigotConfig.zombieAggressiveTowardsVillager) this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractVillager.class, false)); // Paper - Check drowned for villager aggression config + // Purpur start -+ if (this.level().spigotConfig.zombieAggressiveTowardsVillager) this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractVillager.class, false) { // Spigot ++ if (this.level().spigotConfig.zombieAggressiveTowardsVillager) this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractVillager.class, false) { // Paper - Check drowned for villager aggression config + @Override + public boolean canUse() { + return (level().purpurConfig.zombieAggressiveTowardsVillagerWhenLagging || !level().getServer().server.isLagging()) && super.canUse(); @@ -45,7 +45,7 @@ index ebfbf67d65dc5a54e9235f44ab391147c23ddd0f..162ecea875d99115cdd742524ce65ee7 this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, Axolotl.class, true, false)); this.targetSelector.addGoal(5, new NearestAttackableTargetGoal<>(this, Turtle.class, 10, true, false, Turtle.BABY_ON_LAND_SELECTOR)); 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 52f2d2df03314c8ddf70b240dca82cafa44c6b07..624e4007f031b5781e34f4cb6614e8c767999ee2 100644 +index 9c49b930d80a97ad76f0b93cb883f832974c76fd..1bb5eb0f75dc4509377cf54054eba34e4ffd02a9 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java @@ -157,7 +157,19 @@ public class Zombie extends Monster { diff --git a/patches/server/0096-Configurable-daylight-cycle.patch b/patches/server/0096-Configurable-daylight-cycle.patch index 0e8120d98..08f54b125 100644 --- a/patches/server/0096-Configurable-daylight-cycle.patch +++ b/patches/server/0096-Configurable-daylight-cycle.patch @@ -18,7 +18,7 @@ index 9ec6145fe04ec64bbee8ec6a837719caebdbc6f5..358d610ad020cada1bb83e393deeeaae public ClientboundSetTimePacket(long time, long timeOfDay, boolean doDaylightCycle) { this.gameTime = time; diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index d14a5d68ab1b03d44eec991b4e5e58769e034beb..7835f5f53cd50d87013d7a85cbe1dc771faf606d 100644 +index 6dda652c76130b477b3d47bc53761a36ef55c1d7..dde0affb3b966ea3160a9f28b2921d128b6c1b92 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -1693,7 +1693,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop this.disconnect("Book too large!", org.bukkit.event.player.PlayerKickEvent.Cause.ILLEGAL_ACTION)); // Paper - kick event cause return; } -@@ -1181,6 +1186,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1178,6 +1183,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl if (byteTotal > byteAllowed) { ServerGamePacketListenerImpl.LOGGER.warn(this.player.getScoreboardName() + " tried to send too large of a book. Book Size: " + byteTotal + " - Allowed: "+ byteAllowed + " - Pages: " + pageList.size()); 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 aad561448..d41648361 100644 --- a/patches/server/0122-Add-mobGriefing-bypass-to-everything-affected.patch +++ b/patches/server/0122-Add-mobGriefing-bypass-to-everything-affected.patch @@ -5,7 +5,7 @@ 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 a58e5dc0b1216f7f8cfc93c7a3f967cdd3b70df0..29260e8898bb68f4bf31e0bb4b7c721eb5a94344 100644 +index 43428fecf9b29cbf53ee18567ac797b9e84da6ad..e3723269a5651d02521da5cc0bca615bb3c81c61 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -1808,7 +1808,7 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -18,7 +18,7 @@ index a58e5dc0b1216f7f8cfc93c7a3f967cdd3b70df0..29260e8898bb68f4bf31e0bb4b7c721e 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 99c8999852f05b92795bbc2f243d7220b0869858..7203384094de96ceea810b3e2da21c145c12a31d 100644 +index aa9c5397361bc109d9d910b9c9510ca7394a4da4..4383b2555cb416fce7b62b046211dbc3e8c75601 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 { @@ -92,7 +92,7 @@ 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 25937f3da809151bddc2d7fa058303d4f7602d65..95fcde9f1e8bb1567e117b386240c68c9a9999e8 100644 +index 78558d24d0434fd6d90af81c38d8d9d03d79253f..292504cb09ac94f593fdde317030c7662f9e500c 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Fox.java +++ b/src/main/java/net/minecraft/world/entity/animal/Fox.java @@ -1385,7 +1385,7 @@ public class Fox extends Animal implements VariantHolder { @@ -131,7 +131,7 @@ index 6fac5dbbbd9600e82b1dd1496680f551ab44313e..fd64a12c7f215f47d366af60882981c2 } 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 f76a96f79e8adac39b31e8a167ef280391571bd9..d276009a7c4f641f565bfaa97774e2c55750f9bd 100644 +index 277e0ef0c5dfd61ea21de7898bfe3ffdb7f7e17b..066dc828681ac665e807038d1a2afccb886c3ca6 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 { @@ -144,7 +144,7 @@ index f76a96f79e8adac39b31e8a167ef280391571bd9..d276009a7c4f641f565bfaa97774e2c5 // 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 935adddc0ba26c93026b079747dd9c3e97d7421b..9acfdc58c93ec06346e717f4a0f80c6dd7f586ee 100644 +index 6bc0713a8bc8ac86f1febe3414bed135c1cd5336..a655c38eccc41d97cfb6d329e104bad6d9ccbc95 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 @@ -157,7 +157,7 @@ index 935adddc0ba26c93026b079747dd9c3e97d7421b..9acfdc58c93ec06346e717f4a0f80c6d j = Mth.floor(this.getX()); int i1 = Mth.floor(this.getZ()); diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -index 9fe10040e67c2679cda4254205217a363c10f883..cfcf37696e2eaf7a8341135fd5c28ad5ebccf80a 100644 +index 1851cd59230447f0d2beed10846de96d497e8a04..4ed9592387531d0880ba322b07ea776cd0b05f03 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java @@ -549,7 +549,15 @@ public class EnderMan extends Monster implements NeutralMob { @@ -208,7 +208,7 @@ index 30a04ea1f66fe5dbbae27a48764e4bd0f66bf0b1..a7e77eae357e0fd146f340f8c3981f1a } else { List list = Evoker.this.level().getNearbyEntities(Sheep.class, this.wololoTargeting, Evoker.this, Evoker.this.getBoundingBox().inflate(16.0D, 4.0D, 16.0D)); diff --git a/src/main/java/net/minecraft/world/entity/monster/Ravager.java b/src/main/java/net/minecraft/world/entity/monster/Ravager.java -index 28795558000d76fd255faabc79cc45600efa2c92..5aa00878c4c7be4a38137a93b1a2cf1c468422ea 100644 +index 226b44ba4cd3a08562c8cb0d79c1d880cfac34ec..056fa8b12368dac5d1a12962b8ee92e87e4149b3 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Ravager.java +++ b/src/main/java/net/minecraft/world/entity/monster/Ravager.java @@ -176,7 +176,7 @@ public class Ravager extends Raider { @@ -243,7 +243,7 @@ index 1738f0a251e4cab2eb3f122e83366afb02201765..49a37d294bac8205ac0a795daa300ccc BlockPos blockposition = BlockPos.containing(this.mob.getX(), this.mob.getY() + 0.5D, this.mob.getZ()).relative(this.selectedDirection); BlockState iblockdata = this.mob.level().getBlockState(blockposition); 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 d9b1bde3ce458b7e50f7645d07ee578d13006a0a..d133820c47ecda733aa8242acdb2cd3ba0f0b677 100644 +index b5e6a48192592e9bc5a7c0a2775e5d78f06cd46a..03b58860ecb72976ecce99f368d16942557236b9 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 @@ -424,7 +424,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento @@ -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 f0a6251cc8f612b898231e505c47fd5b2bbb4973..8e13b5d3e89e49994ad9763be7e4f35dd58a9c5e 100644 +index 2d09d39a5971615a40b33baa0991c3e432f3ca18..f0c72be4a0dacad52ded87fa051b8505c1b79eae 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 { @@ -310,7 +310,7 @@ 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 cdbc925ef61b8b439415f0a89368227890bcecb2..300411e88cdaef7e0ce280edbd5f18fa8d004a33 100644 +index 226fb5c88dd43c8008c5237299ef80db9e847af7..2da00acac01e333c23f7d155594011dceeb50f64 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 { @@ -323,20 +323,20 @@ index cdbc925ef61b8b439415f0a89368227890bcecb2..300411e88cdaef7e0ce280edbd5f18fa if (this.mob.hasActiveRaid() && !this.mob.getCurrentRaid().isOver() && this.mob.canBeLeader() && !ItemStack.matches(this.mob.getItemBySlot(EquipmentSlot.HEAD), Raid.getLeaderBannerInstance())) { diff --git a/src/main/java/net/minecraft/world/level/block/CropBlock.java b/src/main/java/net/minecraft/world/level/block/CropBlock.java -index 9550ce8588c6aa3ba4cbbbb86912eae2b452eb01..059582e872f9f3c47187e12dbe174541aa934787 100644 +index 5b96d1ae4bd8546311e986bc312b1f85883a67f4..07b148fc31aee3ce009d1d768ae16d98268339cc 100644 --- a/src/main/java/net/minecraft/world/level/block/CropBlock.java +++ b/src/main/java/net/minecraft/world/level/block/CropBlock.java @@ -179,7 +179,7 @@ public class CropBlock extends BushBlock implements BonemealableBlock { @Override public void entityInside(BlockState state, Level world, BlockPos pos, Entity entity) { - if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(world, pos)).callEvent()) { return; } // Paper + if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(world, pos)).callEvent()) { return; } // Paper - Add EntityInsideBlockEvent - if (entity instanceof Ravager && CraftEventFactory.callEntityChangeBlockEvent(entity, pos, Blocks.AIR.defaultBlockState(), !world.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING))) { // CraftBukkit + if (entity instanceof Ravager && CraftEventFactory.callEntityChangeBlockEvent(entity, pos, Blocks.AIR.defaultBlockState(), (!world.purpurConfig.ravagerBypassMobGriefing && !world.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)))) { // CraftBukkit // Purpur world.destroyBlock(pos, true, entity); } diff --git a/src/main/java/net/minecraft/world/level/block/FarmBlock.java b/src/main/java/net/minecraft/world/level/block/FarmBlock.java -index 73310204ed1fa4d72d2ec6239bb6e29319bb97cd..bcef88bf7e9d4fa09c4ebec26464b5bfb96d865d 100644 +index 386841341b59f05be0473bbfd2baf14c9b8e94c8..7f2943caa60fd8607fb525b746663a761bf1951c 100644 --- a/src/main/java/net/minecraft/world/level/block/FarmBlock.java +++ b/src/main/java/net/minecraft/world/level/block/FarmBlock.java @@ -110,7 +110,7 @@ public class FarmBlock extends Block { @@ -349,7 +349,7 @@ index 73310204ed1fa4d72d2ec6239bb6e29319bb97cd..bcef88bf7e9d4fa09c4ebec26464b5bf org.bukkit.event.Cancellable cancellable; if (entity instanceof Player) { diff --git a/src/main/java/net/minecraft/world/level/block/PowderSnowBlock.java b/src/main/java/net/minecraft/world/level/block/PowderSnowBlock.java -index f579911b06b66e94e6311d970e93cca33fa089c6..2c63579226409a1823d2e8990e7ffc4250b83afb 100644 +index 0dfcac8cfcbb09fe04486bff60119f7985714454..2dbf71e421156093c8bc387941eae991f5e6c957 100644 --- a/src/main/java/net/minecraft/world/level/block/PowderSnowBlock.java +++ b/src/main/java/net/minecraft/world/level/block/PowderSnowBlock.java @@ -80,7 +80,7 @@ public class PowderSnowBlock extends Block implements BucketPickup { diff --git a/patches/server/0124-Add-EntityTeleportHinderedEvent.patch b/patches/server/0124-Add-EntityTeleportHinderedEvent.patch index 405bcc937..3ab399bbe 100644 --- a/patches/server/0124-Add-EntityTeleportHinderedEvent.patch +++ b/patches/server/0124-Add-EntityTeleportHinderedEvent.patch @@ -17,12 +17,12 @@ 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/level/block/EndPortalBlock.java b/src/main/java/net/minecraft/world/level/block/EndPortalBlock.java -index c82ebcac07033d887af499f81520982fbe5ed4f1..bc73d1051749339b44ff6765162ab6a76663a628 100644 +index a0c1db8cfebaa0344012cc0af18d6231cdcdcbb8..a5a8bd6813b68ab2e913fc3ae30c9950c242beb3 100644 --- a/src/main/java/net/minecraft/world/level/block/EndPortalBlock.java +++ b/src/main/java/net/minecraft/world/level/block/EndPortalBlock.java @@ -54,6 +54,14 @@ public class EndPortalBlock extends BaseEntityBlock { public void entityInside(BlockState state, Level world, BlockPos pos, Entity entity) { - if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(world, pos)).callEvent()) { return; } // Paper + if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(world, pos)).callEvent()) { return; } // Paper - Add EntityInsideBlockEvent if (world instanceof ServerLevel && entity.canChangeDimensions() && Shapes.joinIsNotEmpty(Shapes.create(entity.getBoundingBox().move((double) (-pos.getX()), (double) (-pos.getY()), (double) (-pos.getZ()))), state.getShape(world, pos), BooleanOp.AND)) { + // Purpur start + if (entity.isPassenger() || entity.isVehicle()) { @@ -36,12 +36,12 @@ index c82ebcac07033d887af499f81520982fbe5ed4f1..bc73d1051749339b44ff6765162ab6a7 ServerLevel worldserver = ((ServerLevel) world).getServer().getLevel(resourcekey); diff --git a/src/main/java/net/minecraft/world/level/block/NetherPortalBlock.java b/src/main/java/net/minecraft/world/level/block/NetherPortalBlock.java -index ee998d06804e344ea9d5b84ef0074b84aaba04c2..c51ac562d642061ce60db66ae9a86eecd9d85ecb 100644 +index 1b5cc5d6aa0b4313da980ce175c54145852d0db0..613df7b174ba4cb87314a631ebc7dfeda8ede58f 100644 --- a/src/main/java/net/minecraft/world/level/block/NetherPortalBlock.java +++ b/src/main/java/net/minecraft/world/level/block/NetherPortalBlock.java @@ -92,6 +92,14 @@ public class NetherPortalBlock extends Block { public void entityInside(BlockState state, Level world, BlockPos pos, Entity entity) { - if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(world, pos)).callEvent()) { return; } // Paper + if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(world, pos)).callEvent()) { return; } // Paper - Add EntityInsideBlockEvent if (entity.canChangeDimensions()) { + // Purpur start + if (entity.isPassenger() || entity.isVehicle()) { @@ -55,7 +55,7 @@ index ee998d06804e344ea9d5b84ef0074b84aaba04c2..c51ac562d642061ce60db66ae9a86eec 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 2e264b8b13df9da9163a80b3dd4345af3cff431c..7b27852682909b7d19942bbb517e6107534f61c2 100644 +index f5f464e69bfb00f5ea493d109bdd96e459fcad46..c3d25a26883f7cbe7106c2f3415af0b18f534ee2 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 { @@ -74,7 +74,7 @@ index 2e264b8b13df9da9163a80b3dd4345af3cff431c..7b27852682909b7d19942bbb517e6107 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 1c89cbf1a582604ed4be0849bd65dae5eb17f28a..98d2ef7870c921093a9dbaf0f4de77d86ef81d44 100644 +index 6f7be7d29b4654d463299c62b8a01696ca187eb2..c3880875f5148d869d7e067fe78cbd1b9492b501 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 { @@ -89,7 +89,7 @@ index 1c89cbf1a582604ed4be0849bd65dae5eb17f28a..98d2ef7870c921093a9dbaf0f4de77d8 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 5f8b485ed8e0444c8c7e2a438cb65113d35bec68..df8f06c898155955fed05c0b41b8ce14b13ec920 100644 +index 833d20484c3bd5b59fff64141f2aa352742a3d5f..9cf6f19312242d3efac0b689cc8b31b9256694f0 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -1368,6 +1368,10 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @@ -104,7 +104,7 @@ index 5f8b485ed8e0444c8c7e2a438cb65113d35bec68..df8f06c898155955fed05c0b41b8ce14 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 647b58652a87d1d1b4b022853052ea19afa80152..68a3f2be0b4d99041dcdb9e37c0e1dbcb9c1ae87 100644 +index ed61bb01ef1235df2d89bb8f173cbcda4bb65d44..5f13cfd5ebc40793242136570948a87dce867f59 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -117,6 +117,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0126-Movement-options-for-armor-stands.patch b/patches/server/0126-Movement-options-for-armor-stands.patch index 19b861b14..f9c46c451 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 49770fba1b986769d44793d7fadc8b098dbe6740..645aed66d9b17a6ee30e5f329d8e29b56d48be11 100644 +index cc7cdb842df3a9d9cb9dc86b589c9893e06577ce..7e92c7a9c5792cb0d4c6c4370449aa0cf36d7dc5 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -1876,7 +1876,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -1875,7 +1875,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S return this.isInWater() || flag; } @@ -30,18 +30,18 @@ index 49770fba1b986769d44793d7fadc8b098dbe6740..645aed66d9b17a6ee30e5f329d8e29b5 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 1ce5b80e5d7d50ccc50b7c862c6819a8b0e3c174..69f8fc750d37b14a88aaf41fd20890c58156809d 100644 +index 728814649f8d6837586cd5400b271d25b8306e35..53f36e281e42a2bfc174f06f448f1eb85eb02aff 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 { private boolean noTickPoseDirty = false; private boolean noTickEquipmentDirty = false; - // Paper end + // Paper end - Allow ArmorStands not to tick + public boolean canMovementTick = true; // Purpur public ArmorStand(EntityType type, Level world) { super(type, world); - if (world != null) this.canTick = world.paperConfig().entities.armorStands.tick; // Paper - armour stand ticking + if (world != null) this.canTick = world.paperConfig().entities.armorStands.tick; // Paper - Allow ArmorStands not to tick + if (world != null) this.canMovementTick = world.purpurConfig.armorstandMovement; // Purpur this.handItems = NonNullList.withSize(2, ItemStack.EMPTY); this.armorItems = NonNullList.withSize(4, ItemStack.EMPTY); diff --git a/patches/server/0127-Fix-stuck-in-portals.patch b/patches/server/0127-Fix-stuck-in-portals.patch index 703ca1256..d77c53435 100644 --- a/patches/server/0127-Fix-stuck-in-portals.patch +++ b/patches/server/0127-Fix-stuck-in-portals.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Fix stuck in portals diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index e7b654c1991348a7f73ca8bc950d776e4e708779..487e4ab76e255e10369f7968d73d41956e99ae66 100644 +index 58b531c14c36bec725891c899b3f3586b5c11d9e..921738689a367c231e99eff6bc9fc305ebb31012 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -1271,6 +1271,7 @@ public class ServerPlayer extends Player { @@ -17,10 +17,10 @@ index e7b654c1991348a7f73ca8bc950d776e4e708779..487e4ab76e255e10369f7968d73d4195 // 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 2919e79d24eecb3114d1a32991e12c39ac88f6b8..07a9f53448e6adbb45d941a72759187fefe30313 100644 +index 7e92c7a9c5792cb0d4c6c4370449aa0cf36d7dc5..a040e92c3b3700461e630cd5299ff6c7400c273f 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -3150,12 +3150,15 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3149,12 +3149,15 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S return Vec3.directionFromRotation(this.getRotationVector()); } @@ -37,7 +37,7 @@ index 2919e79d24eecb3114d1a32991e12c39ac88f6b8..07a9f53448e6adbb45d941a72759187f this.isInsidePortal = true; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 08136dfa12437d4d4bf7b5d3d9404db671e6925c..7d576796981ce7b6a292499ed755d86c86bf51db 100644 +index 54775a4c13dd8b03373bb1e47bb591ac0a2f82c7..cd4a14bd5d13b41d02ad68ddf31fd3648f933850 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -333,6 +333,7 @@ public class PurpurWorldConfig { 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 8b1b14af6..c97ac36a7 100644 --- a/patches/server/0128-Toggle-for-water-sensitive-mob-damage.patch +++ b/patches/server/0128-Toggle-for-water-sensitive-mob-damage.patch @@ -21,7 +21,7 @@ index 19f95ddb2fa9dd264947a8b0033dd7437ee66c7f..d04e48d6a0a6dc7825a3e3d4cf854e29 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 92777e7f6c6293c5b5689cfa5f992335629d05eb..39dc169eedc407284452380a883e8a2735cc46cb 100644 +index 8910aaaa1fdabecec4740d6212db3114bd1197fc..3c7db09c5fbcb9d57febc937158b50634d68a082 100644 --- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java +++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java @@ -280,6 +280,11 @@ public class Bat extends AmbientCreature { @@ -37,11 +37,11 @@ index 92777e7f6c6293c5b5689cfa5f992335629d05eb..39dc169eedc407284452380a883e8a27 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 6d3e16e9fb043d538b9c093fb79d092fce90d75a..0db5e35b8e4a186c8ef150a1b0f072e10573136e 100644 +index 2b69a3e860f95d4294dda8d05126f431eb7dd5b6..52a7a8b35cf0f7b52d5de253b21f7713ab261544 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Bee.java +++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java @@ -180,7 +180,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { - // Paper end + // Paper end - Fix MC-167279 this.lookControl = new Bee.BeeLookControl(this); this.setPathfindingMalus(BlockPathTypes.DANGER_FIRE, -1.0F); - this.setPathfindingMalus(BlockPathTypes.WATER, -1.0F); @@ -62,7 +62,7 @@ index 6d3e16e9fb043d538b9c093fb79d092fce90d75a..0db5e35b8e4a186c8ef150a1b0f072e1 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 fff1da136b618ca8b9256b55996dc1d01dacd7b8..9279eb3c7a8affbecba1a8b27ca0685021676f39 100644 +index fba85c1a43b184ada6c1bb499997322030f59665..a4b3d724f30ccf0eddfb41d6997d0aa9b1847b7a 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cat.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cat.java @@ -133,6 +133,11 @@ public class Cat extends TamableAnimal implements VariantHolder { @@ -126,7 +126,7 @@ 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 ff11643193495f0646de4bcf13b7f1e57731e4fb..75585a6b275fafbc5ef112d9de4926b77fcb3781 100644 +index cdbe66bc89a64f8d41ea496f2da85159f48bb8c5..a5759b711d1853ac41713dd9fe11f3da5af286ef 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 { @@ -142,7 +142,7 @@ index ff11643193495f0646de4bcf13b7f1e57731e4fb..75585a6b275fafbc5ef112d9de4926b7 @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 fc3ec667aa2b8c3fe537cda0aeddd2192c0bbedf..c8efa4029136d0cd54a5f73f003e022511cc7c8b 100644 +index 292504cb09ac94f593fdde317030c7662f9e500c..9a34a59300c4ad5dfbd327aa4fd42992f73da89a 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 { @@ -158,7 +158,7 @@ index fc3ec667aa2b8c3fe537cda0aeddd2192c0bbedf..c8efa4029136d0cd54a5f73f003e0225 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 95ff109511c97d603aeaf9e73c49397a841fcbce..58539d29b8e2a8c0676cc574f64e7d61613e1451 100644 +index 46e28d807a72b6d302d29d65c52ab0813cd82b1a..669132fb78d3fd72f73d4c20370f0213879baeaa 100644 --- a/src/main/java/net/minecraft/world/entity/animal/IronGolem.java +++ b/src/main/java/net/minecraft/world/entity/animal/IronGolem.java @@ -88,6 +88,11 @@ public class IronGolem extends AbstractGolem implements NeutralMob { @@ -174,7 +174,7 @@ index 95ff109511c97d603aeaf9e73c49397a841fcbce..58539d29b8e2a8c0676cc574f64e7d61 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 db0170fb22ee8424c29fc0d4f3c93c9eac79611c..7bd539ed5fea0d4db8e97722bd9bd37e6563185d 100644 +index 56427c987439c2d6d5652dae0f2c0a72d4eba26e..f01d93c6f88f543b51420ceca7a4a95829368a20 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 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 93295d9683293121f2267350194f18e97b2421c2..26062173d137e26abdc452f7b2e0be0ee6dddfa3 100644 +index 0282498c7375a73b6982efb02f3cf3215f4211b0..5b3126168e9406f6cbd0607b6b7cc2de4ab68b65 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 @@ -114,6 +114,11 @@ public class Goat extends Animal { @@ -475,7 +475,7 @@ index 0251ded48eb5bdf96f0e67f6456aa15909c8a4ff..f8dbea402f723bf38d7ab3f2468d1b02 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 6045f29c641d1958371c77701e9514d9ca44b85e..58175824dc315134b03b9dabfcae04e192af0b86 100644 +index e11fc274f893d501235422839301a5128268199d..fb2b0ebd9314ab7fc911e842767bd60b1db92b96 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 @@ -145,6 +145,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 624e4007f031b5781e34f4cb6614e8c767999ee2..52a576a16bfeb7dc6ec97280f9a5e0f408d71e46 100644 +index 1bb5eb0f75dc4509377cf54054eba34e4ffd02a9..edc47e077fe44d1b817b791ddde86e052a5bf831 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 { @@ -1085,7 +1085,7 @@ index 624e4007f031b5781e34f4cb6614e8c767999ee2..52a576a16bfeb7dc6ec97280f9a5e0f4 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 b71c47c275a3726eb5028c9524013ebc608a21ea..135ce8822ed7e3d6182755deca37a2c0531960c6 100644 +index 259cbfc821b12663876ff2821635ce0ccd7e33c6..438302f6705bcf3d60f27dde279de010bd95aad4 100644 --- a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java +++ b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java @@ -109,6 +109,11 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { @@ -1101,7 +1101,7 @@ index b71c47c275a3726eb5028c9524013ebc608a21ea..135ce8822ed7e3d6182755deca37a2c0 public boolean jockeyOnlyBaby() { return level().purpurConfig.zombieVillagerJockeyOnlyBaby; 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 b2d77117309e81db60e7e50911247793fa829755..3574a1e641d8af34a0ff7ea8dcfb08641cf6ace0 100644 +index e73fb1027acd592c7e028e1797042fe38c6c04a3..e6b653c75a4c3306e06bfcadb4c4b53bccd5aad2 100644 --- a/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java @@ -86,6 +86,11 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { @@ -1117,7 +1117,7 @@ index b2d77117309e81db60e7e50911247793fa829755..3574a1e641d8af34a0ff7ea8dcfb0864 public boolean jockeyOnlyBaby() { return level().purpurConfig.zombifiedPiglinJockeyOnlyBaby; 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 80f91a11c04763c1c9ed2bd242b88b5a473560d7..d0144c99cf5c755c81fc0f9457b462c98ff3e804 100644 +index fae14f6ab139e7d7a0e8625488c472f0d0c1a1e2..7a167887c40eccea4c216eb906a4a69006f72114 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 @@ -96,6 +96,11 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { @@ -1133,7 +1133,7 @@ index 80f91a11c04763c1c9ed2bd242b88b5a473560d7..d0144c99cf5c755c81fc0f9457b462c9 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 d133820c47ecda733aa8242acdb2cd3ba0f0b677..e506dcf390ecb5cce8ae6993df7ec91b3ebc125e 100644 +index 03b58860ecb72976ecce99f368d16942557236b9..20ecfcbe948d02bb61b8f673f5330d2f9e60c387 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 @@ -118,6 +118,11 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento @@ -1165,7 +1165,7 @@ 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 833db485054338cd4a5e626b35ec050c35f15477..9ed51efc1a42a792b652e7c958c06fa5b572e4bf 100644 +index b8675cb1a69f675585c040b2f47172dfe9235d08..cd59f262572df87b28b33f98a3dc667b4c5b3072 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 @@ -1181,7 +1181,7 @@ index 833db485054338cd4a5e626b35ec050c35f15477..9ed51efc1a42a792b652e7c958c06fa5 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 ad7a32169b0decad1d3a2bd98e25b07731a33d03..5a373ba4d9e404c064bc158718d02c0cd2aca548 100644 +index 8ab868c88e37fad978ffcf151ad527e57bdf4cb5..027e86e504d0e4291deae0641f0e5b40686e6ccb 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 diff --git a/patches/server/0130-End-crystal-explosion-options.patch b/patches/server/0130-End-crystal-explosion-options.patch index 9be626ee7..5f774c9bd 100644 --- a/patches/server/0130-End-crystal-explosion-options.patch +++ b/patches/server/0130-End-crystal-explosion-options.patch @@ -5,7 +5,7 @@ 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 ef0098e46bda8abc456f2bb5929d874c6aeb8698..564d17bc460e2a04947ff9676fbf4c8b1569659c 100644 +index 4f0e1a653a117687b5b330ff424873d01f574bee..9d86ce2012a93d9fb0d52dc6db796ae31d4f0e21 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 { @@ -31,7 +31,7 @@ index ef0098e46bda8abc456f2bb5929d874c6aeb8698..564d17bc460e2a04947ff9676fbf4c8b @Override protected Entity.MovementEmission getMovementEmission() { return Entity.MovementEmission.NONE; -@@ -173,16 +189,18 @@ public class EndCrystal extends Entity { +@@ -130,16 +146,18 @@ public class EndCrystal extends Entity { // CraftBukkit end this.remove(Entity.RemovalReason.KILLED); if (!source.is(DamageTypeTags.IS_EXPLOSION)) { @@ -53,7 +53,7 @@ index ef0098e46bda8abc456f2bb5929d874c6aeb8698..564d17bc460e2a04947ff9676fbf4c8b this.onDestroyedBy(source); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index bab096e2c073510f4e91ab34c4555fad966b7141..f7ca9e256524e1b080631d7cda5ed80edeeaf73b 100644 +index 0d3725563f58b523482bac44134f54e13d017ce8..4d7d111a2cb6f02d3263174af9e70548be0fe971 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -464,6 +464,43 @@ public class PurpurWorldConfig { diff --git a/patches/server/0132-Dont-run-with-scissors.patch b/patches/server/0132-Dont-run-with-scissors.patch index 4742791aa..e36ac453e 100644 --- a/patches/server/0132-Dont-run-with-scissors.patch +++ b/patches/server/0132-Dont-run-with-scissors.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Dont run with scissors! diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 23cc99227c802368a4bfb9e7c6eda43357dd0576..5c933996fe4cf45e3cb072fe2573419cc2fe92af 100644 +index afcf996540d2482b0a1afac5b2656beb53b41619..5f6a3fac5157f2baddff4d83ac56a01172c410d6 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -1647,6 +1647,13 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1642,6 +1642,13 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl this.player.resetFallDistance(); } @@ -22,7 +22,7 @@ index 23cc99227c802368a4bfb9e7c6eda43357dd0576..5c933996fe4cf45e3cb072fe2573419c this.player.checkMovementStatistics(this.player.getX() - d3, this.player.getY() - d4, this.player.getZ() - d5); this.lastGoodX = this.player.getX(); this.lastGoodY = this.player.getY(); -@@ -1698,6 +1705,13 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1693,6 +1700,13 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl return false; } // Paper end - optimise out extra getCubes @@ -53,7 +53,7 @@ index 9c99b2e365aacb8309f29acb9025faccd2c676b3..9e3608650c44ef5fa724c3aea86603d7 } } diff --git a/src/main/java/net/minecraft/world/damagesource/DamageSource.java b/src/main/java/net/minecraft/world/damagesource/DamageSource.java -index 14fcfd7c1d3a62833978e163f4e0d6f9b2203042..33210bc66dcc5fdf03fbf438ce8734b31c4e7975 100644 +index dad8d358e60902eb186cbc5686219f66d3babf89..189664637d3d73b141c84823f0099bcda9b607e3 100644 --- a/src/main/java/net/minecraft/world/damagesource/DamageSource.java +++ b/src/main/java/net/minecraft/world/damagesource/DamageSource.java @@ -54,6 +54,8 @@ public class DamageSource { @@ -66,7 +66,7 @@ index 14fcfd7c1d3a62833978e163f4e0d6f9b2203042..33210bc66dcc5fdf03fbf438ce8734b3 return "DamageSource (" + this.type().msgId() + ")"; } diff --git a/src/main/java/net/minecraft/world/damagesource/DamageSources.java b/src/main/java/net/minecraft/world/damagesource/DamageSources.java -index 4604f8b38460e9113e966889a679d4547f24aff6..813916852774d6482791989252ecb67b945a8f84 100644 +index f339475185645f7be30963e4f980ce81a6f7e536..6a7fe56485f0da9094c816f9fd5aacf7e5946730 100644 --- a/src/main/java/net/minecraft/world/damagesource/DamageSources.java +++ b/src/main/java/net/minecraft/world/damagesource/DamageSources.java @@ -267,4 +267,11 @@ public class DamageSources { 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 959e59a45..cfefd96f6 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 @@ -30,7 +30,7 @@ index af4da25c9b13c114179fab3254aea5323210d7da..f9cd39a4f8ec5cdade311984d863b64f } // CraftBukkit end diff --git a/src/main/java/net/minecraft/world/item/EnderpearlItem.java b/src/main/java/net/minecraft/world/item/EnderpearlItem.java -index 749ab72edc0d2e9c6f1161415ab8d59d3d6ca976..897c202c0905040072a06fdfa2032a7f9461b088 100644 +index 8c8cf8705107c95d9a4eab28b5845ae13c4ffb3c..a0c2650678848416829c7185a530fcd63bb68039 100644 --- a/src/main/java/net/minecraft/world/item/EnderpearlItem.java +++ b/src/main/java/net/minecraft/world/item/EnderpearlItem.java @@ -36,7 +36,7 @@ public class EnderpearlItem extends Item { @@ -40,10 +40,10 @@ index 749ab72edc0d2e9c6f1161415ab8d59d3d6ca976..897c202c0905040072a06fdfa2032a7f - user.getCooldowns().addCooldown(this, 20); + user.getCooldowns().addCooldown(this, user.getAbilities().instabuild ? world.purpurConfig.enderPearlCooldownCreative : world.purpurConfig.enderPearlCooldown); // Purpur } else { - // Paper end + // Paper end - PlayerLaunchProjectileEvent if (user instanceof net.minecraft.server.level.ServerPlayer) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index a58369d384604e37906cc0d15aad40a9e44019da..c4c1e27efbc121f120f68a554cd5bf37443923e1 100644 +index bf2ab21a5390ac0876b0c2c5e6708cc3d6c564da..3a61e40ec6dfc49413a85b059efca9a261373a7c 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -201,6 +201,10 @@ public class PurpurWorldConfig { diff --git a/patches/server/0138-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch b/patches/server/0138-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch index 4a11dbbb0..ab5da3984 100644 --- a/patches/server/0138-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch +++ b/patches/server/0138-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch @@ -7,11 +7,11 @@ Prevents Enderman from becoming aggresive towards players that are wearing a Dra Adds functionality to a useless item! diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -index cf9eb1ac36a5c9d3c73b981e1649bb23c7bfaf39..ca0269c2977b07cf77f7e0e1faa4cb16008ac74d 100644 +index 3fbe607e763910f7520604d3b8b8207086ba7f90..627cbec30c15fa4d11689cb85add6ad61d58b47a 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java @@ -271,7 +271,7 @@ public class EnderMan extends Monster implements NeutralMob { - // Paper end + // Paper end - EndermanAttackPlayerEvent ItemStack itemstack = (ItemStack) player.getInventory().armor.get(3); - if (itemstack.is(Blocks.CARVED_PUMPKIN.asItem())) { @@ -20,7 +20,7 @@ index cf9eb1ac36a5c9d3c73b981e1649bb23c7bfaf39..ca0269c2977b07cf77f7e0e1faa4cb16 } else { Vec3 vec3d = player.getViewVector(1.0F).normalize(); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index f64597083c7505d27b57a0fb31d52ee347151e8a..59a46ebdf7c96d388251ad87b8420088729e94fe 100644 +index 5d1dd1c3572365e2054b0848548fe736d4f21d55..414838cf7fe3796e8d829609ac126e5b9c4afd50 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -999,6 +999,8 @@ public class PurpurWorldConfig { diff --git a/patches/server/0139-Tick-fluids-config.patch b/patches/server/0139-Tick-fluids-config.patch index b921947fb..f1ca89396 100644 --- a/patches/server/0139-Tick-fluids-config.patch +++ b/patches/server/0139-Tick-fluids-config.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Tick fluids config diff --git a/src/main/java/net/minecraft/world/level/block/LiquidBlock.java b/src/main/java/net/minecraft/world/level/block/LiquidBlock.java -index 2bd097203f1e92d3fc343f91dc37220e09dd5066..016fe816819ab9022fd03c50427b62abbcd18b3c 100644 +index 9b3dcf1a4d4cece92a629506d341f6bfe79d13d0..0ed39daf88a98f7fa887fb45d4f7c0348a607551 100644 --- a/src/main/java/net/minecraft/world/level/block/LiquidBlock.java +++ b/src/main/java/net/minecraft/world/level/block/LiquidBlock.java @@ -139,7 +139,7 @@ public class LiquidBlock extends Block implements BucketPickup { @@ -14,7 +14,7 @@ index 2bd097203f1e92d3fc343f91dc37220e09dd5066..016fe816819ab9022fd03c50427b62ab public void onPlace(BlockState state, Level world, BlockPos pos, BlockState oldState, boolean notify) { - if (this.shouldSpreadLiquid(world, pos, state)) { + if (world.purpurConfig.tickFluids && this.shouldSpreadLiquid(world, pos, state)) { // Purpur - world.scheduleTick(pos, state.getFluidState().getType(), this.getFlowSpeed(world, pos)); // Paper + world.scheduleTick(pos, state.getFluidState().getType(), this.getFlowSpeed(world, pos)); // Paper - Configurable speed for water flowing over lava } @@ -167,7 +167,7 @@ public class LiquidBlock extends Block implements BucketPickup { @@ -32,11 +32,11 @@ index 2bd097203f1e92d3fc343f91dc37220e09dd5066..016fe816819ab9022fd03c50427b62ab public void neighborChanged(BlockState state, Level world, BlockPos pos, Block sourceBlock, BlockPos sourcePos, boolean notify) { - if (this.shouldSpreadLiquid(world, pos, state)) { + if (world.purpurConfig.tickFluids && this.shouldSpreadLiquid(world, pos, state)) { // Purpur - world.scheduleTick(pos, state.getFluidState().getType(), this.getFlowSpeed(world, pos)); // Paper + world.scheduleTick(pos, state.getFluidState().getType(), this.getFlowSpeed(world, pos)); // Paper - Configurable speed for water flowing over lava } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 59a46ebdf7c96d388251ad87b8420088729e94fe..90ee419cc60748233ac8b8903ca154182bfe727d 100644 +index 414838cf7fe3796e8d829609ac126e5b9c4afd50..0b60f77cfbe2247586d51999ac94f4f5cb011847 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -129,6 +129,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0142-Configurable-ravager-griefable-blocks-list.patch b/patches/server/0142-Configurable-ravager-griefable-blocks-list.patch index fc17761e7..33aea6975 100644 --- a/patches/server/0142-Configurable-ravager-griefable-blocks-list.patch +++ b/patches/server/0142-Configurable-ravager-griefable-blocks-list.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Configurable ravager griefable blocks list diff --git a/src/main/java/net/minecraft/world/entity/monster/Ravager.java b/src/main/java/net/minecraft/world/entity/monster/Ravager.java -index 0992e3729fdfa945660affb7eb7efcff63f37210..5e717433ef29d02669ee2e95454c69c36cbafc24 100644 +index db5e55f2bca1d0706d24ebf7c0b5c2592b04f0bc..03ed7c56bb7f2d32722ebedb8eb07765ab39079a 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Ravager.java +++ b/src/main/java/net/minecraft/world/entity/monster/Ravager.java @@ -191,7 +191,7 @@ public class Ravager extends Raider { @@ -18,20 +18,20 @@ index 0992e3729fdfa945660affb7eb7efcff63f37210..5e717433ef29d02669ee2e95454c69c3 if (!CraftEventFactory.callEntityChangeBlockEvent(this, blockposition, iblockdata.getFluidState().createLegacyBlock())) { // Paper - fix wrong block state continue; diff --git a/src/main/java/net/minecraft/world/level/block/CropBlock.java b/src/main/java/net/minecraft/world/level/block/CropBlock.java -index 059582e872f9f3c47187e12dbe174541aa934787..0e06958657201806f425990ac01a5f8acc540f3e 100644 +index 07b148fc31aee3ce009d1d768ae16d98268339cc..55e28eef76d9d534037d888d85c0609052478118 100644 --- a/src/main/java/net/minecraft/world/level/block/CropBlock.java +++ b/src/main/java/net/minecraft/world/level/block/CropBlock.java @@ -179,7 +179,7 @@ public class CropBlock extends BushBlock implements BonemealableBlock { @Override public void entityInside(BlockState state, Level world, BlockPos pos, Entity entity) { - if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(world, pos)).callEvent()) { return; } // Paper + if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(world, pos)).callEvent()) { return; } // Paper - Add EntityInsideBlockEvent - if (entity instanceof Ravager && CraftEventFactory.callEntityChangeBlockEvent(entity, pos, Blocks.AIR.defaultBlockState(), (!world.purpurConfig.ravagerBypassMobGriefing && !world.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)))) { // CraftBukkit // Purpur + if (entity instanceof Ravager && world.purpurConfig.ravagerGriefableBlocks.contains(world.getBlockState(pos).getBlock()) && CraftEventFactory.callEntityChangeBlockEvent(entity, pos, Blocks.AIR.defaultBlockState(), (!world.purpurConfig.ravagerBypassMobGriefing && !world.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)))) { // CraftBukkit // Purpur world.destroyBlock(pos, true, entity); } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 44b98e5030bef02ab05a9686fdfc711fa78ec072..a855bb2e4f04a64e47611b20342e1eb484f6bf22 100644 +index b9903d3794fc5f25f5be2e3ebd2c4b7188a507d9..70b740ae9efc960266900a1c5b1d478d1794f5eb 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -1703,6 +1703,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0144-Config-for-skipping-night.patch b/patches/server/0144-Config-for-skipping-night.patch index fbce19347..58c87895f 100644 --- a/patches/server/0144-Config-for-skipping-night.patch +++ b/patches/server/0144-Config-for-skipping-night.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Config for skipping night diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 586a46dc9f9e65e1f88bcfefc2f4e59d9cda55e9..3bce997b0fe372fd4bf172a879bce80996246278 100644 +index d92c809cb8dff4d146e98f20daf286180f0c43a6..5af5a22e725bdae1cc15702b37982f585c46286f 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -845,7 +845,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -840,7 +840,7 @@ public class ServerLevel extends Level implements WorldGenLevel { int i = this.getGameRules().getInt(GameRules.RULE_PLAYERS_SLEEPING_PERCENTAGE); long j; diff --git a/patches/server/0146-Allow-infinity-on-crossbows.patch b/patches/server/0146-Allow-infinity-on-crossbows.patch index fce993e23..07dadfea9 100644 --- a/patches/server/0146-Allow-infinity-on-crossbows.patch +++ b/patches/server/0146-Allow-infinity-on-crossbows.patch @@ -5,15 +5,15 @@ Subject: [PATCH] Allow infinity on crossbows diff --git a/src/main/java/net/minecraft/world/item/CrossbowItem.java b/src/main/java/net/minecraft/world/item/CrossbowItem.java -index eede02c3f125d230af537bb67bebed9b88f7d1b4..1ae5e17b95d994d69b060fc06c0a807c40a90f17 100644 +index 06689ee8799079510a1a4e7b68029b9629e318fb..fdf9972bb9374789b063d191d9d419cca5975b23 100644 --- a/src/main/java/net/minecraft/world/item/CrossbowItem.java +++ b/src/main/java/net/minecraft/world/item/CrossbowItem.java @@ -114,7 +114,7 @@ public class CrossbowItem extends ProjectileWeaponItem implements Vanishable { - // Paper end + // Paper end - Add EntityLoadCrossbowEvent int i = EnchantmentHelper.getItemEnchantmentLevel(Enchantments.MULTISHOT, crossbow); int j = i == 0 ? 1 : 3; -- boolean flag = !consume || shooter instanceof Player && ((Player) shooter).getAbilities().instabuild; // Paper - add consume -+ boolean flag = !consume || shooter instanceof Player && ((Player) shooter).getAbilities().instabuild || (org.purpurmc.purpur.PurpurConfig.allowCrossbowInfinity && EnchantmentHelper.getItemEnchantmentLevel(Enchantments.INFINITY_ARROWS, crossbow) > 0); // Paper - add consume // Purpur +- boolean flag = !consume || shooter instanceof Player && ((Player) shooter).getAbilities().instabuild; // Paper - Add EntityLoadCrossbowEvent ++ boolean flag = !consume || shooter instanceof Player && ((Player) shooter).getAbilities().instabuild || (org.purpurmc.purpur.PurpurConfig.allowCrossbowInfinity && EnchantmentHelper.getItemEnchantmentLevel(Enchantments.INFINITY_ARROWS, crossbow) > 0); // Paper - Add EntityLoadCrossbowEvent // Purpur ItemStack itemstack1 = shooter.getProjectile(crossbow); ItemStack itemstack2 = itemstack1.copy(); @@ -65,7 +65,7 @@ index 246516e67db0b8b197b287c067d5a0163d8bde22..859435f747ceef860cb4e9e825a7353e public abstract boolean canEnchant(Item item); diff --git a/src/main/java/org/bukkit/craftbukkit/enchantments/CraftEnchantment.java b/src/main/java/org/bukkit/craftbukkit/enchantments/CraftEnchantment.java -index 4daf2c54c7127e8e091ffc49362f288594956143..f81faaf6d69b09f635d71491303fca1d494001c5 100644 +index 92465b2a9f1483be76004c9f80a1fe15913b3b8b..37688a6908bbad7455ee2c26bba91f282859d272 100644 --- a/src/main/java/org/bukkit/craftbukkit/enchantments/CraftEnchantment.java +++ b/src/main/java/org/bukkit/craftbukkit/enchantments/CraftEnchantment.java @@ -80,6 +80,7 @@ public class CraftEnchantment extends Enchantment { diff --git a/patches/server/0147-Drowning-Settings.patch b/patches/server/0147-Drowning-Settings.patch index da8844ca6..e09faf044 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 07a9f53448e6adbb45d941a72759187fefe30313..9c4c5aa169b4a9943a096ad84d0bd66fad15c55d 100644 +index a040e92c3b3700461e630cd5299ff6c7400c273f..1bb50f182fa6274cb0c631e0d4e79288443b3a53 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -3399,7 +3399,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3398,7 +3398,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } public int getMaxAirSupply() { @@ -18,7 +18,7 @@ index 07a9f53448e6adbb45d941a72759187fefe30313..9c4c5aa169b4a9943a096ad84d0bd66f 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 4ba269d7c63a8e2df498a5ab7253c3a9fbc44103..385bc1cb2c1b00e80ecfcb0a59a24670407af5cd 100644 +index 06a647ae44423e14f4266c9cc25ff78ee16bc3c8..95a004d6b0581cf9aa6805f08a34a04baefef8fa 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 { @@ -40,7 +40,7 @@ index 4ba269d7c63a8e2df498a5ab7253c3a9fbc44103..385bc1cb2c1b00e80ecfcb0a59a24670 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index fce3d4c4af444860c72b5058fcd7276838299f89..d002bc3c3a99253a990aac0ae117de078475d144 100644 +index 9aa6a3f69afb0fd70ac60ca0d50d564dd7d3fe54..91f224d89bf1af363162e0a39ca61a440bc07b96 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -164,6 +164,15 @@ public class PurpurWorldConfig { diff --git a/patches/server/0148-Break-individual-slabs-when-sneaking.patch b/patches/server/0148-Break-individual-slabs-when-sneaking.patch index 01da86043..c1a8765ef 100644 --- a/patches/server/0148-Break-individual-slabs-when-sneaking.patch +++ b/patches/server/0148-Break-individual-slabs-when-sneaking.patch @@ -5,11 +5,11 @@ Subject: [PATCH] Break individual slabs when sneaking diff --git a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java -index ecf0b6f30d5791f6c7097d352eafa8ecbcdf4aa8..5de06447de2ab2c45debf314aecd39722d4a7af6 100644 +index 4a7134c6da15bd69f7d4e3ffe452e5915abb738e..587bf8027765ab678ea15a24e7953f81dd4e6d64 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java @@ -397,6 +397,7 @@ public class ServerPlayerGameMode { - } else {capturedBlockEntity = true;} // Paper end + } else {capturedBlockEntity = true;} // Paper - Send block entities after destroy prediction return false; } + if (this.player.level().purpurConfig.slabHalfBreak && this.player.isShiftKeyDown() && iblockdata.getBlock() instanceof net.minecraft.world.level.block.SlabBlock && ((net.minecraft.world.level.block.SlabBlock) iblockdata.getBlock()).halfBreak(iblockdata, pos, this.player)) return true; // Purpur @@ -47,7 +47,7 @@ index adc7eba4bb5e8f7c507a16cdbd7497338a7658cf..512c528e0f2f3aa0da0253698a018941 + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index d002bc3c3a99253a990aac0ae117de078475d144..0f13f4727ee854fa66df7ec9f49d33622a05e252 100644 +index 91f224d89bf1af363162e0a39ca61a440bc07b96..1df92111b03b3cb56989dfe17e4c5597c7988c46 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -600,6 +600,11 @@ public class PurpurWorldConfig { diff --git a/patches/server/0154-Projectile-offset-config.patch b/patches/server/0154-Projectile-offset-config.patch index b6de9f1d4..2dd4919d3 100644 --- a/patches/server/0154-Projectile-offset-config.patch +++ b/patches/server/0154-Projectile-offset-config.patch @@ -18,7 +18,7 @@ index 33df0ca406dc8321b76b393f317bbd1c8ebe6366..220513d3fd5645322886522ea4f6b8c5 entityarrow.setCritArrow(true); } diff --git a/src/main/java/net/minecraft/world/item/CrossbowItem.java b/src/main/java/net/minecraft/world/item/CrossbowItem.java -index 1ae5e17b95d994d69b060fc06c0a807c40a90f17..0a0f19f73a6a4e5aece7c17089dc4d31ed2a5299 100644 +index fdf9972bb9374789b063d191d9d419cca5975b23..b112845e94d354bbadff67673ea0b4939672bd3e 100644 --- a/src/main/java/net/minecraft/world/item/CrossbowItem.java +++ b/src/main/java/net/minecraft/world/item/CrossbowItem.java @@ -64,7 +64,7 @@ public class CrossbowItem extends ProjectileWeaponItem implements Vanishable { @@ -31,7 +31,7 @@ index 1ae5e17b95d994d69b060fc06c0a807c40a90f17..0a0f19f73a6a4e5aece7c17089dc4d31 return InteractionResultHolder.consume(itemstack); } else if (!user.getProjectile(itemstack).isEmpty()) { diff --git a/src/main/java/net/minecraft/world/item/EggItem.java b/src/main/java/net/minecraft/world/item/EggItem.java -index 58cb992c5defec2f092755cbde661ff10f38bf9d..52f48681407d23f0925f4c9c072d5f0a2a6b1778 100644 +index a3bd507793994e9cc87a956871a8afbb8ca9460d..ef2197a23aef0a4215fae09bd4618e449e14c64e 100644 --- a/src/main/java/net/minecraft/world/item/EggItem.java +++ b/src/main/java/net/minecraft/world/item/EggItem.java @@ -24,7 +24,7 @@ public class EggItem extends Item { @@ -40,11 +40,11 @@ index 58cb992c5defec2f092755cbde661ff10f38bf9d..52f48681407d23f0925f4c9c072d5f0a entityegg.setItem(itemstack); - entityegg.shootFromRotation(user, user.getXRot(), user.getYRot(), 0.0F, 1.5F, 1.0F); + entityegg.shootFromRotation(user, user.getXRot(), user.getYRot(), 0.0F, 1.5F, (float) world.purpurConfig.eggProjectileOffset); // Purpur - // Paper start + // Paper start - PlayerLaunchProjectileEvent com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent event = new com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent((org.bukkit.entity.Player) user.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemstack), (org.bukkit.entity.Projectile) entityegg.getBukkitEntity()); if (event.callEvent() && world.addFreshEntity(entityegg)) { diff --git a/src/main/java/net/minecraft/world/item/EnderpearlItem.java b/src/main/java/net/minecraft/world/item/EnderpearlItem.java -index 897c202c0905040072a06fdfa2032a7f9461b088..6b27d98d06b163243bb0e1bb979aad03f48d7770 100644 +index a0c2650678848416829c7185a530fcd63bb68039..8031e38c66468676b3b4a7443d6678eec6b1e8a4 100644 --- a/src/main/java/net/minecraft/world/item/EnderpearlItem.java +++ b/src/main/java/net/minecraft/world/item/EnderpearlItem.java @@ -24,7 +24,7 @@ public class EnderpearlItem extends Item { @@ -53,11 +53,11 @@ index 897c202c0905040072a06fdfa2032a7f9461b088..6b27d98d06b163243bb0e1bb979aad03 entityenderpearl.setItem(itemstack); - entityenderpearl.shootFromRotation(user, user.getXRot(), user.getYRot(), 0.0F, 1.5F, 1.0F); + entityenderpearl.shootFromRotation(user, user.getXRot(), user.getYRot(), 0.0F, 1.5F, (float) world.purpurConfig.enderPearlProjectileOffset); // Purpur - // Paper start - com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent event = new com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent((org.bukkit.entity.Player) user.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemstack), (org.bukkit.entity.Projectile) entityenderpearl.getBukkitEntity()); + // Paper start - PlayerLaunchProjectileEvent + com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent event = new com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent((org.bukkit.entity.Player) user.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemstack), (org.bukkit.entity.Projectile) entityenderpearl.getBukkitEntity()); if (event.callEvent() && world.addFreshEntity(entityenderpearl)) { diff --git a/src/main/java/net/minecraft/world/item/SnowballItem.java b/src/main/java/net/minecraft/world/item/SnowballItem.java -index ef3f90a5bcdd7b9815a4053cff166f9d2552f55d..e7e5e1cc92f56e3daba8fa09c59188febec5e8f2 100644 +index bc8186a5bc3a98b35fad570729dd4ba52efab238..caab0c1e2bc5696080750797cbf1c93f57799f7d 100644 --- a/src/main/java/net/minecraft/world/item/SnowballItem.java +++ b/src/main/java/net/minecraft/world/item/SnowballItem.java @@ -25,7 +25,7 @@ public class SnowballItem extends Item { @@ -66,11 +66,11 @@ index ef3f90a5bcdd7b9815a4053cff166f9d2552f55d..e7e5e1cc92f56e3daba8fa09c59188fe entitysnowball.setItem(itemstack); - entitysnowball.shootFromRotation(user, user.getXRot(), user.getYRot(), 0.0F, 1.5F, 1.0F); + entitysnowball.shootFromRotation(user, user.getXRot(), user.getYRot(), 0.0F, 1.5F, (float) world.purpurConfig.snowballProjectileOffset); // Purpur - // Paper start + // Paper start - PlayerLaunchProjectileEvent com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent event = new com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent((org.bukkit.entity.Player) user.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemstack), (org.bukkit.entity.Projectile) entitysnowball.getBukkitEntity()); if (event.callEvent() && world.addFreshEntity(entitysnowball)) { diff --git a/src/main/java/net/minecraft/world/item/ThrowablePotionItem.java b/src/main/java/net/minecraft/world/item/ThrowablePotionItem.java -index de5bdceb4c8578fb972a2fd5ee0dfdae509e46dc..bcf63ccb6e679cb97d658780b2663aafa3568bcb 100644 +index f47f793c62a919fb65c081ddb82d597a978d3b20..3bbb44ae3da68afbd6012df68dee277a7dbf98c0 100644 --- a/src/main/java/net/minecraft/world/item/ThrowablePotionItem.java +++ b/src/main/java/net/minecraft/world/item/ThrowablePotionItem.java @@ -18,7 +18,7 @@ public class ThrowablePotionItem extends PotionItem { @@ -79,11 +79,11 @@ index de5bdceb4c8578fb972a2fd5ee0dfdae509e46dc..bcf63ccb6e679cb97d658780b2663aaf thrownPotion.setItem(itemStack); - thrownPotion.shootFromRotation(user, user.getXRot(), user.getYRot(), -20.0F, 0.5F, 1.0F); + thrownPotion.shootFromRotation(user, user.getXRot(), user.getYRot(), -20.0F, 0.5F, (float) world.purpurConfig.throwablePotionProjectileOffset); // Purpur - // Paper start + // Paper start - PlayerLaunchProjectileEvent com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent event = new com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent((org.bukkit.entity.Player) user.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemStack), (org.bukkit.entity.Projectile) thrownPotion.getBukkitEntity()); if (event.callEvent() && world.addFreshEntity(thrownPotion)) { diff --git a/src/main/java/net/minecraft/world/item/TridentItem.java b/src/main/java/net/minecraft/world/item/TridentItem.java -index f1d6db9382bec49f61657168fe56b06784d02cf5..07695068fafd170ca88ad109d83dea93c387d794 100644 +index 75cf58919ac787b389286b41a9f0b5a945e71649..3f922008f928ed077e9ddfd4384ed7bbf7cb293d 100644 --- a/src/main/java/net/minecraft/world/item/TridentItem.java +++ b/src/main/java/net/minecraft/world/item/TridentItem.java @@ -77,7 +77,7 @@ public class TridentItem extends Item implements Vanishable { @@ -96,7 +96,7 @@ index f1d6db9382bec49f61657168fe56b06784d02cf5..07695068fafd170ca88ad109d83dea93 entitythrowntrident.pickup = AbstractArrow.Pickup.CREATIVE_ONLY; } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index ff6c402f69072ffa781593a28fc7fa0637e7e612..bdac4ecd881b9469a319275f9c0f074ccffe48c2 100644 +index 1de0fbb72819f6de3897d9c165e2f07c3b9a5280..88dd3e74675886789abc29b65bd2931a50c0a9c1 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -422,6 +422,23 @@ 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 083d2122d..d63fc2337 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 6fd094b30b0d8eee70674283ff6523133ee322ba..cc7c2463ef24b44f44575f245a27c5439c0b9be8 100644 +index 1bb50f182fa6274cb0c631e0d4e79288443b3a53..ac0fc8b7184ba1b6d40261cc15d81a7936f728d4 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -503,6 +503,21 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -502,6 +502,21 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S return true; } @@ -32,7 +32,7 @@ index 6fd094b30b0d8eee70674283ff6523133ee322ba..cc7c2463ef24b44f44575f245a27c543 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 4154eb08be0d6492cfba931761671a6384390d1b..338e9bef962f9090070a9c76e565c6aeab66975e 100644 +index d72838fe8a0a9540750bfc3a26202e93493c98f3..6eb7a1398d1ce63ec6c11d9865f4c16b51c361de 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 { @@ -92,7 +92,7 @@ index 4154eb08be0d6492cfba931761671a6384390d1b..338e9bef962f9090070a9c76e565c6ae 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 7203384094de96ceea810b3e2da21c145c12a31d..9caee3db19fa76e8e311ead8f892d0f8bebfe6b2 100644 +index 4383b2555cb416fce7b62b046211dbc3e8c75601..c029752141efbc48005dae0e3c1a071ba039b3a7 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java @@ -1758,17 +1758,7 @@ public abstract class Mob extends LivingEntity implements Targeting { @@ -115,7 +115,7 @@ index 7203384094de96ceea810b3e2da21c145c12a31d..9caee3db19fa76e8e311ead8f892d0f8 @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java b/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java -index d205578dbed88776c6704fec9500299ce1606152..30fae50f81ec09707b0cb3ed469ae11695fbb540 100644 +index 9d259d7e2aa3e44e350eb5927314cfceaffaf3f3..3f9e81c0bdd85bec24a1209ad3fd3dc43d988a4f 100644 --- a/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java +++ b/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java @@ -66,6 +66,7 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo @@ -129,16 +129,16 @@ index d205578dbed88776c6704fec9500299ce1606152..30fae50f81ec09707b0cb3ed469ae116 @@ -101,35 +102,14 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo } - // Paper start + // Paper start - shouldBurnInDay API - private boolean shouldBurnInDay = true; + // private boolean shouldBurnInDay = true; // Purpur - moved to LivingEntity - keep methods for ABI compatibility public boolean shouldBurnInDay() { return shouldBurnInDay; } public void setShouldBurnInDay(boolean shouldBurnInDay) { this.shouldBurnInDay = shouldBurnInDay; } - // Paper end + // Paper end - shouldBurnInDay API @Override public void aiStep() { -- boolean flag = shouldBurnInDay && this.isSunBurnTick(); // Paper - Configurable Burning +- boolean flag = shouldBurnInDay && this.isSunBurnTick(); // Paper - shouldBurnInDay API - - if (flag) { - ItemStack itemstack = this.getItemBySlot(EquipmentSlot.HEAD); @@ -174,12 +174,12 @@ index d205578dbed88776c6704fec9500299ce1606152..30fae50f81ec09707b0cb3ed469ae116 @@ -238,7 +217,7 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo this.reassessWeaponGoal(); - // Paper start + // Paper start - shouldBurnInDay API if (nbt.contains("Paper.ShouldBurnInDay")) { - this.shouldBurnInDay = nbt.getBoolean("Paper.ShouldBurnInDay"); + // this.shouldBurnInDay = nbt.getBoolean("Paper.ShouldBurnInDay"); // Purpur - implemented in LivingEntity } - // Paper end + // Paper end - shouldBurnInDay API } @@ -247,7 +226,7 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo @Override @@ -188,7 +188,7 @@ index d205578dbed88776c6704fec9500299ce1606152..30fae50f81ec09707b0cb3ed469ae116 - nbt.putBoolean("Paper.ShouldBurnInDay", this.shouldBurnInDay); + // nbt.putBoolean("Paper.ShouldBurnInDay", this.shouldBurnInDay); // Purpur - implemented in LivingEntity } - // Paper end + // Paper end - shouldBurnInDay API diff --git a/src/main/java/net/minecraft/world/entity/monster/Husk.java b/src/main/java/net/minecraft/world/entity/monster/Husk.java index f6d6df27c2ca7a33ed3ca8e299725b6a5c4aafc3..5ac87650e357f3ac48e37713b9b0b18ad4d6feb6 100644 @@ -212,7 +212,7 @@ index f6d6df27c2ca7a33ed3ca8e299725b6a5c4aafc3..5ac87650e357f3ac48e37713b9b0b18a @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/Phantom.java b/src/main/java/net/minecraft/world/entity/monster/Phantom.java -index 030b81dd8c52ddb300e73d792f9c4cea4e8a8d46..1d4a292a37069408420ca90b1c2784229781f93f 100644 +index 637b229817f9f2c3ad224f300b56a6bee4c8a341..bcb1912ea218fbb4b849ab84a7025202100b82c3 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Phantom.java +++ b/src/main/java/net/minecraft/world/entity/monster/Phantom.java @@ -61,6 +61,7 @@ public class Phantom extends FlyingMob implements Enemy { @@ -230,9 +230,9 @@ index 030b81dd8c52ddb300e73d792f9c4cea4e8a8d46..1d4a292a37069408420ca90b1c278422 - // Purpur start - boolean burnFromDaylight = this.shouldBurnInDay && this.level().purpurConfig.phantomBurnInDaylight; - boolean burnFromLightSource = this.level().purpurConfig.phantomBurnInLight > 0 && this.level().getMaxLocalRawBrightness(blockPosition()) >= this.level().purpurConfig.phantomBurnInLight; -- if (this.isAlive() && (burnFromDaylight || burnFromLightSource)) { // Paper - Configurable Burning +- if (this.isAlive() && (burnFromDaylight || burnFromLightSource)) { // Paper - shouldBurnInDay API - if (getRider() == null || !this.isControllable()) -- // Purpur end +- // Purpur end - if (getRider() == null || !this.isControllable()) // Purpur - this.setSecondsOnFire(8); - } @@ -259,12 +259,13 @@ index 030b81dd8c52ddb300e73d792f9c4cea4e8a8d46..1d4a292a37069408420ca90b1c278422 // Paper end } -@@ -378,8 +370,14 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -377,8 +369,15 @@ public class Phantom extends FlyingMob implements Enemy { + return spawningEntity; } public void setSpawningEntity(java.util.UUID entity) { this.spawningEntity = entity; } - - private boolean shouldBurnInDay = true; - public boolean shouldBurnInDay() { return shouldBurnInDay; } ++ + // private boolean shouldBurnInDay = true; // Purpur - moved to LivingEntity - keep methods for ABI compatibility + // Purpur start + public boolean shouldBurnInDay() { @@ -277,19 +278,19 @@ index 030b81dd8c52ddb300e73d792f9c4cea4e8a8d46..1d4a292a37069408420ca90b1c278422 // Paper end private static enum AttackPhase { 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 52a576a16bfeb7dc6ec97280f9a5e0f408d71e46..9b1ae2fa1681f1212b6a09d5b10b16634ce65470 100644 +index edc47e077fe44d1b817b791ddde86e052a5bf831..2dad874c0a425cf2d0a385b6061ab79d81b82c86 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java @@ -96,11 +96,12 @@ public class Zombie extends Monster { private int inWaterTime; public int conversionTime; private int lastTick = MinecraftServer.currentTick; // CraftBukkit - add field -- private boolean shouldBurnInDay = true; // Paper -+ // private boolean shouldBurnInDay = true; // Paper // Purpur - implemented in LivingEntity +- private boolean shouldBurnInDay = true; // Paper - Add more Zombie API ++ // private boolean shouldBurnInDay = true; // Paper - Add more Zombie API // Purpur - implemented in LivingEntity public Zombie(EntityType type, Level world) { super(type, world); - this.breakDoorGoal = new BreakDoorGoal(this, com.google.common.base.Predicates.in(world.paperConfig().entities.behavior.doorBreakingDifficulty.getOrDefault(type, world.paperConfig().entities.behavior.doorBreakingDifficulty.get(EntityType.ZOMBIE)))); // Paper + this.breakDoorGoal = new BreakDoorGoal(this, com.google.common.base.Predicates.in(world.paperConfig().entities.behavior.doorBreakingDifficulty.getOrDefault(type, world.paperConfig().entities.behavior.doorBreakingDifficulty.get(EntityType.ZOMBIE)))); // Paper - Configurable door breaking difficulty + this.setShouldBurnInDay(true); // Purpur } @@ -332,28 +333,28 @@ index 52a576a16bfeb7dc6ec97280f9a5e0f408d71e46..9b1ae2fa1681f1212b6a09d5b10b1663 + public boolean shouldBurnInDay() { return isSunSensitive(); } // Purpur - for ABI compatibility public boolean isSunSensitive() { - return this.shouldBurnInDay; // Paper - use api value instead + return this.shouldBurnInDay; // Paper - Add more Zombie API } @@ -486,7 +465,7 @@ public class Zombie extends Monster { nbt.putBoolean("CanBreakDoors", this.canBreakDoors()); nbt.putInt("InWaterTime", this.isInWater() ? this.inWaterTime : -1); nbt.putInt("DrownedConversionTime", this.isUnderWaterConverting() ? this.conversionTime : -1); -- nbt.putBoolean("Paper.ShouldBurnInDay", this.shouldBurnInDay); // Paper -+ // nbt.putBoolean("Paper.ShouldBurnInDay", this.shouldBurnInDay); // Paper // Purpur - implemented in LivingEntity +- nbt.putBoolean("Paper.ShouldBurnInDay", this.shouldBurnInDay); // Paper - Add more Zombie API ++ // nbt.putBoolean("Paper.ShouldBurnInDay", this.shouldBurnInDay); // Paper - Add more Zombie API // Purpur - implemented in LivingEntity } @Override @@ -500,7 +479,7 @@ public class Zombie extends Monster { } - // Paper start + // Paper start - Add more Zombie API if (nbt.contains("Paper.ShouldBurnInDay")) { - this.shouldBurnInDay = nbt.getBoolean("Paper.ShouldBurnInDay"); + // this.shouldBurnInDay = nbt.getBoolean("Paper.ShouldBurnInDay"); // Purpur - implemented in LivingEntity } - // Paper end + // 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 001b9d5aef4c2d9fb272dd187d0d0bd001de5693..ea5ac1f53309fdd30aad40fd4a092f297d76fd61 100644 +index c3880875f5148d869d7e067fe78cbd1b9492b501..2ef6dc2390ed622eda284e3b4c85ec64e057c981 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 { @@ -369,7 +370,7 @@ index 001b9d5aef4c2d9fb272dd187d0d0bd001de5693..ea5ac1f53309fdd30aad40fd4a092f29 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 12c7505c2ce562b3188c079952e57ae1fab5268b..10ca0fdb5b92cc4f1d346540c9129d5c55732985 100644 +index 9bad55be51db41252f60fd976b2c1e54945a5b01..aa45eea710cdb4bd7aa0e12eacc879826b2e98c6 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java @@ -1135,5 +1135,15 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { 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 a81ead1c3..5c5520efb 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 dff80441f192449f8d8e3a666af3e842f77b99ed..a7efbf24ca52d2303323ae2406cfe4beb7a72d4c 100644 +index ac0fc8b7184ba1b6d40261cc15d81a7936f728d4..57376b7c0d281a7950a69348b5aa869e89719232 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -3224,7 +3224,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3223,7 +3223,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } this.processPortalCooldown(); @@ -18,7 +18,7 @@ index dff80441f192449f8d8e3a666af3e842f77b99ed..a7efbf24ca52d2303323ae2406cfe4be } diff --git a/src/main/java/net/minecraft/world/level/block/EndPortalBlock.java b/src/main/java/net/minecraft/world/level/block/EndPortalBlock.java -index bc73d1051749339b44ff6765162ab6a76663a628..0b45bc1db5f57a4381c470a563aa81ac0d3a1be7 100644 +index a5a8bd6813b68ab2e913fc3ae30c9950c242beb3..f277a4a21b15627c45061e51c8f6c0812a176a10 100644 --- a/src/main/java/net/minecraft/world/level/block/EndPortalBlock.java +++ b/src/main/java/net/minecraft/world/level/block/EndPortalBlock.java @@ -69,6 +69,22 @@ public class EndPortalBlock extends BaseEntityBlock { @@ -45,7 +45,7 @@ index bc73d1051749339b44ff6765162ab6a76663a628..0b45bc1db5f57a4381c470a563aa81ac entity.portalWorld = ((ServerLevel)world); entity.portalBlock = pos.immutable(); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 7f69260fc1286c243ecc46311e1188a465f9d481..1e82dea915cdbf09cca47c753dc181c3e51a6fc1 100644 +index 77fa5b91ac5a65d2dce6195214c39dbff4aa6c8b..9940ba58d5f32a4ffe68a99270dda87ff34b977a 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -631,6 +631,11 @@ public class PurpurWorldConfig { diff --git a/patches/server/0178-Make-lightning-rod-range-configurable.patch b/patches/server/0178-Make-lightning-rod-range-configurable.patch index 54f479a80..e76bad449 100644 --- a/patches/server/0178-Make-lightning-rod-range-configurable.patch +++ b/patches/server/0178-Make-lightning-rod-range-configurable.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Make lightning rod range configurable diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 3bce997b0fe372fd4bf172a879bce80996246278..eea2d34a8a0a66ce90e347cd0fb271853098431c 100644 +index 5af5a22e725bdae1cc15702b37982f585c46286f..8a695b29d9c641dbd35d6faa1c2f97c0c83c99bb 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -1197,7 +1197,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1192,7 +1192,7 @@ public class ServerLevel extends Level implements WorldGenLevel { return holder.is(PoiTypes.LIGHTNING_ROD); }, (blockposition1) -> { return blockposition1.getY() == this.getHeight(Heightmap.Types.WORLD_SURFACE, blockposition1.getX(), blockposition1.getZ()) - 1; diff --git a/patches/server/0191-Customizable-sleeping-actionbar-messages.patch b/patches/server/0191-Customizable-sleeping-actionbar-messages.patch index e62103b5d..30f8bb4f7 100644 --- a/patches/server/0191-Customizable-sleeping-actionbar-messages.patch +++ b/patches/server/0191-Customizable-sleeping-actionbar-messages.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Customizable sleeping actionbar messages diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index eea2d34a8a0a66ce90e347cd0fb271853098431c..cb1e59ed73f91a448346820cf47e083ebf81259d 100644 +index 8a695b29d9c641dbd35d6faa1c2f97c0c83c99bb..6971ce789c329d733bbc373422000fa0efff7ef6 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -1246,11 +1246,27 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1241,11 +1241,27 @@ public class ServerLevel extends Level implements WorldGenLevel { if (this.canSleepThroughNights()) { if (!this.getServer().isSingleplayer() || this.getServer().isPublished()) { int i = this.getGameRules().getInt(GameRules.RULE_PLAYERS_SLEEPING_PERCENTAGE); @@ -38,7 +38,7 @@ index eea2d34a8a0a66ce90e347cd0fb271853098431c..cb1e59ed73f91a448346820cf47e083e } diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 386a74f8a6f61fb745a1e36d8955d26bfc2ad78a..71dc8baa9eb93728c982139dde16f1c4567d1925 100644 +index 9e6b399584d21aeca1beeb84e67dee10424e8f19..88a8fda97854e19e658c52434eb25542f3699f35 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -1469,7 +1469,19 @@ public class ServerPlayer extends Player { diff --git a/patches/server/0196-Add-compass-command.patch b/patches/server/0196-Add-compass-command.patch index 16b251891..a48836a9a 100644 --- a/patches/server/0196-Add-compass-command.patch +++ b/patches/server/0196-Add-compass-command.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add compass command diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java -index bf51f5e414ab45e33efa4057ab251120290b43e1..428dd75450bdd5daf902a1fbaca7031a9bc585a8 100644 +index f6d6c3d96056a744fffb4883240e991896348e0c..7e266a126180000dcad4b3bd8606349bdc95c30b 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java @@ -255,6 +255,7 @@ public class Commands { @@ -17,11 +17,11 @@ index bf51f5e414ab45e33efa4057ab251120290b43e1..428dd75450bdd5daf902a1fbaca7031a if (environment.includeIntegrated) { diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 71dc8baa9eb93728c982139dde16f1c4567d1925..cd449e35bbc689ce6d2595693a4fbe1f226998c8 100644 +index 88a8fda97854e19e658c52434eb25542f3699f35..d9911426361684a20e3559f8a6694a52b30d7479 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -283,6 +283,7 @@ public class ServerPlayer extends Player { - public org.bukkit.event.player.PlayerQuitEvent.QuitReason quitReason = null; // Paper - there are a lot of changes to do if we change all methods leading to the event + public org.bukkit.event.player.PlayerQuitEvent.QuitReason quitReason = null; // Paper - Add API for quit reason; there are a lot of changes to do if we change all methods leading to the event public boolean purpurClient = false; // Purpur private boolean tpsBar = false; // Purpur + private boolean compassBar = false; // Purpur @@ -89,7 +89,7 @@ index 6aa225252d1026979fe88c273652e3d9ebdeb5f3..477639dddb7c5ae0c9cc45a6eca73d82 hideHiddenPlayersFromEntitySelector = getBoolean("settings.command.hide-hidden-players-from-entity-selector", hideHiddenPlayersFromEntitySelector); uptimeFormat = getString("settings.command.uptime.format", uptimeFormat); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index f78716c6d8635c21dacb216760a5ba0ebc33b73f..cc5e11524928bdec5402263eb68a51128b0503df 100644 +index f626232a488a38ba6dd2a491afbfa7dbaf4ff3bf..fd07ab7ce9eaec09429ecd75c93c57db437d5aa5 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -222,6 +222,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0209-Added-the-ability-to-add-combustible-items.patch b/patches/server/0209-Added-the-ability-to-add-combustible-items.patch index bc81a285c..7e75b06cd 100644 --- a/patches/server/0209-Added-the-ability-to-add-combustible-items.patch +++ b/patches/server/0209-Added-the-ability-to-add-combustible-items.patch @@ -24,11 +24,11 @@ index 1af7e1548f0648890a1ef2fc0ff4e4c3a56c947c..decea1697c075e7549ccc7501c8e5935 } else if (this.isFuel(itemstack1)) { if (!this.moveItemStackTo(itemstack1, 1, 2, false)) { diff --git a/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java -index 4fa77dbb02b5b2ad679f022ad10702453af0d178..af66c7eec6291b0bc9575f59c8210cd7f697232a 100644 +index acfacda5001ef188acfef8ac0d319d66ce1883fb..1d179e9485df78657ce67ab7ca4c4b1bcaf6c4ea 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java @@ -209,6 +209,22 @@ public abstract class AbstractFurnaceBlockEntity extends BaseContainerBlockEntit - // Paper end + // Paper end - cache burn durations } + // Purpur start @@ -51,7 +51,7 @@ index 4fa77dbb02b5b2ad679f022ad10702453af0d178..af66c7eec6291b0bc9575f59c8210cd7 private int maxStack = MAX_STACK; public List transaction = new java.util.ArrayList(); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index a675368062510a699ef18fb8064f0909930618d5..25105e2de0ac8a0b98212818029dafe2c864f383 100644 +index acf930d1d30e924177e49cde6d41a3ada1f16e5d..c1d1d5b561470e3ff1b75b41d83116ae05bef19e 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -1573,6 +1573,19 @@ public final class CraftServer implements Server { diff --git a/patches/server/0210-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch b/patches/server/0210-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch index 3fb229aba..9d30fb24b 100644 --- a/patches/server/0210-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch +++ b/patches/server/0210-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch @@ -5,23 +5,23 @@ Subject: [PATCH] Option for if rain and thunder should stop on sleep diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index cb1e59ed73f91a448346820cf47e083ebf81259d..6ccbf43edf0177b4d32c080c34d3df3ca35fe957 100644 +index 6971ce789c329d733bbc373422000fa0efff7ef6..e675d7e82245e1b7ef94fc55f393002ab572e2ba 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -1406,6 +1406,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1401,6 +1401,7 @@ public class ServerLevel extends Level implements WorldGenLevel { @VisibleForTesting public void resetWeatherCycle() { // CraftBukkit start + if (this.purpurConfig.rainStopsAfterSleep) // Purpur - this.serverLevelData.setRaining(false, org.bukkit.event.weather.WeatherChangeEvent.Cause.SLEEP); // Paper - when passing the night + this.serverLevelData.setRaining(false, org.bukkit.event.weather.WeatherChangeEvent.Cause.SLEEP); // Paper - Add cause to Weather/ThunderChangeEvents // If we stop due to everyone sleeping we should reset the weather duration to some other random value. // Not that everyone ever manages to get the whole server to sleep at the same time.... -@@ -1413,6 +1414,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1408,6 +1409,7 @@ public class ServerLevel extends Level implements WorldGenLevel { this.serverLevelData.setRainTime(0); } // CraftBukkit end + if (this.purpurConfig.thunderStopsAfterSleep) // Purpur - this.serverLevelData.setThundering(false, org.bukkit.event.weather.ThunderChangeEvent.Cause.SLEEP); // Paper - when passing the night + this.serverLevelData.setThundering(false, org.bukkit.event.weather.ThunderChangeEvent.Cause.SLEEP); // Paper - Add cause to Weather/ThunderChangeEvents // CraftBukkit start // If we stop due to everyone sleeping we should reset the weather duration to some other random value. diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java diff --git a/patches/server/0212-Shift-right-click-to-use-exp-for-mending.patch b/patches/server/0212-Shift-right-click-to-use-exp-for-mending.patch index 6e49ea195..1f5ff8ee0 100644 --- a/patches/server/0212-Shift-right-click-to-use-exp-for-mending.patch +++ b/patches/server/0212-Shift-right-click-to-use-exp-for-mending.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Shift right click to use exp for mending diff --git a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java -index f5cd726ba56f2ecec0a0cf613ad720b8271afead..5e18507e6d799e51f555ffc0a5f14cb76959023d 100644 +index 587bf8027765ab678ea15a24e7953f81dd4e6d64..096884909a21472806592356abf272bb3ddeedf0 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java @@ -517,6 +517,7 @@ public class ServerPlayerGameMode { @@ -36,10 +36,10 @@ index f5cd726ba56f2ecec0a0cf613ad720b8271afead..5e18507e6d799e51f555ffc0a5f14cb7 + // Purpur end } diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 5c933996fe4cf45e3cb072fe2573419cc2fe92af..044b8d517b68cc7103ba7f2a57b26c8c3413b412 100644 +index 5f6a3fac5157f2baddff4d83ac56a01172c410d6..8b0a8bd1dab67ea440fc3af0a1b13c81dd738e25 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -2057,6 +2057,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -2052,6 +2052,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl boolean cancelled; if (movingobjectposition == null || movingobjectposition.getType() != HitResult.Type.BLOCK) { diff --git a/patches/server/0216-Halloween-options-and-optimizations.patch b/patches/server/0216-Halloween-options-and-optimizations.patch index 42e869702..41072497e 100644 --- a/patches/server/0216-Halloween-options-and-optimizations.patch +++ b/patches/server/0216-Halloween-options-and-optimizations.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Halloween options and optimizations 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 39dc169eedc407284452380a883e8a2735cc46cb..980f2426a5052117f03ebb1ed3f7882b236ad86e 100644 +index 3c7db09c5fbcb9d57febc937158b50634d68a082..08190c45b0807079b77c41203502e355ecaf2e14 100644 --- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java +++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java @@ -304,7 +304,7 @@ public class Bat extends AmbientCreature { @@ -26,12 +26,12 @@ index 39dc169eedc407284452380a883e8a2735cc46cb..980f2426a5052117f03ebb1ed3f7882b if (net.minecraft.server.MinecraftServer.currentTick - lastSpookyCheck > ONE_HOUR) { LocalDate localdate = LocalDate.now(); diff --git a/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java b/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java -index f35637a105d5aa12fb57c2456f2b2a7db12a49f0..f3e1fa62d9f067c0fe8aacb88bf30b01ee0562c1 100644 +index 3f9e81c0bdd85bec24a1209ad3fd3dc43d988a4f..cb378b343f721c16868a6673aba59856574c7133 100644 --- a/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java +++ b/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java @@ -143,11 +143,7 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo this.reassessWeaponGoal(); - this.setCanPickUpLoot(this.level().paperConfig().entities.behavior.mobsCanAlwaysPickUpLoot.skeletons || randomsource.nextFloat() < 0.55F * difficulty.getSpecialMultiplier()); // Paper + this.setCanPickUpLoot(this.level().paperConfig().entities.behavior.mobsCanAlwaysPickUpLoot.skeletons || randomsource.nextFloat() < 0.55F * difficulty.getSpecialMultiplier()); // Paper - Add world settings for mobs picking up loot if (this.getItemBySlot(EquipmentSlot.HEAD).isEmpty()) { - LocalDate localdate = LocalDate.now(); - int i = localdate.get(ChronoField.DAY_OF_MONTH); @@ -43,7 +43,7 @@ index f35637a105d5aa12fb57c2456f2b2a7db12a49f0..f3e1fa62d9f067c0fe8aacb88bf30b01 this.armorDropChances[EquipmentSlot.HEAD.getIndex()] = 0.0F; } 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 9b1ae2fa1681f1212b6a09d5b10b16634ce65470..728f4f2d7c37e253b0dab752f627a7b6c4e8339c 100644 +index 2dad874c0a425cf2d0a385b6061ab79d81b82c86..47b5a928574a57107dfaeaecf49459496a64a036 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java @@ -586,11 +586,7 @@ public class Zombie extends Monster { @@ -60,7 +60,7 @@ index 9b1ae2fa1681f1212b6a09d5b10b16634ce65470..728f4f2d7c37e253b0dab752f627a7b6 this.armorDropChances[EquipmentSlot.HEAD.getIndex()] = 0.0F; } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 83e4255059ca68f1fef3a8915662db28a98109b3..285ea8571af68d86579e786912f1145dc0b83955 100644 +index 82522611cbca7ce08b9a12e514fb8286a3280550..9e3181b5f2329d44025f7d811f1865d353cb6a96 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -1684,6 +1684,13 @@ public class PurpurWorldConfig { diff --git a/patches/server/0218-UPnP-Port-Forwarding.patch b/patches/server/0218-UPnP-Port-Forwarding.patch index 0a3ebd1ea..d16085d8e 100644 --- a/patches/server/0218-UPnP-Port-Forwarding.patch +++ b/patches/server/0218-UPnP-Port-Forwarding.patch @@ -5,7 +5,7 @@ Subject: [PATCH] UPnP Port Forwarding diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 22cacc9491edcbbe3f107829d898bc16aab53902..187a529eaaac8ceec54419d6c4886705a2f810f7 100644 +index 2eb14b686effe22721b377c55f5dede050ddd616..dec396d4d8b603d1d5282d9273c0258964b27389 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -309,6 +309,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 16) { return false; diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java diff --git a/patches/server/0234-Give-bee-counts-in-beehives-to-Purpur-clients.patch b/patches/server/0234-Give-bee-counts-in-beehives-to-Purpur-clients.patch index e8979ed0f..3326a0d3d 100644 --- a/patches/server/0234-Give-bee-counts-in-beehives-to-Purpur-clients.patch +++ b/patches/server/0234-Give-bee-counts-in-beehives-to-Purpur-clients.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Give bee counts in beehives to Purpur clients diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 4ac5205cb47dbe9d8fec7da19467f2060436cd9c..878a1d7bd73924b0d311fcc1f3e9fd23dbfa649a 100644 +index dec396d4d8b603d1d5282d9273c0258964b27389..d0391cfb2476ce6d045883bc99907d1c7ceb97ec 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -1065,6 +1065,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop> { - private static final int MAX_PER_TICK = io.papermc.paper.configuration.GlobalConfiguration.get().misc.maxJoinsPerTick; // Paper - private static int joinAttemptsThisTick; // Paper - private static int currTick; // Paper + private static final int MAX_PER_TICK = io.papermc.paper.configuration.GlobalConfiguration.get().misc.maxJoinsPerTick; // Paper - Buffer joins to world + private static int joinAttemptsThisTick; // Paper - Buffer joins to world + private static int currTick; // Paper - Buffer joins to world + private static int tickSecond; // Purpur public void tick() { this.flushQueue(); - // Paper start + // Paper start - Buffer joins to world if (Connection.currTick != net.minecraft.server.MinecraftServer.currentTick) { Connection.currTick = net.minecraft.server.MinecraftServer.currentTick; + // Purpur start @@ -29,7 +29,7 @@ index 2ae08b21c63490bbf8cd870f9585d82ed131f815..b7a6c7e737e7aba0324a5c3c61bbfbcc + // Purpur end Connection.joinAttemptsThisTick = 0; } - // Paper end + // Paper end - Buffer joins to world diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java index 590286e593fec706a3f16f0080b35aa0637ca06d..f17b160b304b1adbde80690ae482986309f3befe 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java diff --git a/patches/server/0241-Configurable-minimum-demand-for-trades.patch b/patches/server/0241-Configurable-minimum-demand-for-trades.patch index 3902f4aa0..97af82010 100644 --- a/patches/server/0241-Configurable-minimum-demand-for-trades.patch +++ b/patches/server/0241-Configurable-minimum-demand-for-trades.patch @@ -9,7 +9,7 @@ This patch adds a config option to allow the minimum demand to instead be configurable. 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 9c86dc4b9cd558f0e8f97b63d6cab746bd30d10c..cb6ca99d429b395c0c79b57b1709eb1b8899da82 100644 +index 4902a2cb7f71e3f2fa6ae22e0d6746ca79ff8623..00e60eacf10b76f9d7020324df436b2c315486be 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java @@ -546,7 +546,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler @@ -22,19 +22,19 @@ index 9c86dc4b9cd558f0e8f97b63d6cab746bd30d10c..cb6ca99d429b395c0c79b57b1709eb1b } diff --git a/src/main/java/net/minecraft/world/item/trading/MerchantOffer.java b/src/main/java/net/minecraft/world/item/trading/MerchantOffer.java -index 4f7457578ab3118d10e0d5dfc23d79c9b20c2f44..e03ce53b93d1b9366f2a7f14f341750a163ae0db 100644 +index 02feea12c998f37098b72becf6bfaf6b27d155de..9c89a85d934955c9388cfe1361f13e70e699d279 100644 --- a/src/main/java/net/minecraft/world/item/trading/MerchantOffer.java +++ b/src/main/java/net/minecraft/world/item/trading/MerchantOffer.java @@ -149,7 +149,12 @@ public class MerchantOffer { } public void updateDemand() { -- this.demand = Math.max(0, this.demand + this.uses - (this.maxUses - this.uses)); // Paper +- this.demand = Math.max(0, this.demand + this.uses - (this.maxUses - this.uses)); // Paper - Fix MC-163962 + // Purpur start + this.updateDemand(0); + } + public void updateDemand(int minimumDemand) { -+ this.demand = Math.max(minimumDemand, this.demand + this.uses - (this.maxUses - this.uses)); ++ this.demand = Math.max(minimumDemand, this.demand + this.uses - (this.maxUses - this.uses)); // Paper - Fix MC-163962 + // Purpur end } diff --git a/patches/server/0244-MC-238526-Fix-spawner-not-spawning-water-animals-cor.patch b/patches/server/0244-MC-238526-Fix-spawner-not-spawning-water-animals-cor.patch index 42734a599..df171ee28 100644 --- a/patches/server/0244-MC-238526-Fix-spawner-not-spawning-water-animals-cor.patch +++ b/patches/server/0244-MC-238526-Fix-spawner-not-spawning-water-animals-cor.patch @@ -5,13 +5,13 @@ Subject: [PATCH] MC-238526 - Fix spawner not spawning water animals correctly diff --git a/src/main/java/net/minecraft/world/entity/animal/WaterAnimal.java b/src/main/java/net/minecraft/world/entity/animal/WaterAnimal.java -index 827912174ee08cd19249797d351887149b25c880..5b02848ea9f14060353014cada2d55397609e5ac 100644 +index 9b897cf53f4bb5d366e6ac88dbed93c59d8fe541..fc61f93e04e5bc893b89c746deb2b89c5be0d602 100644 --- a/src/main/java/net/minecraft/world/entity/animal/WaterAnimal.java +++ b/src/main/java/net/minecraft/world/entity/animal/WaterAnimal.java @@ -77,6 +77,6 @@ public abstract class WaterAnimal extends PathfinderMob { i = world.getMinecraftWorld().paperConfig().entities.spawning.wateranimalSpawnHeight.maximum.or(i); j = world.getMinecraftWorld().paperConfig().entities.spawning.wateranimalSpawnHeight.minimum.or(j); - // Paper end + // Paper end - Make water animal spawn height configurable - return pos.getY() >= j && pos.getY() <= i && world.getFluidState(pos.below()).is(FluidTags.WATER) && world.getBlockState(pos.above()).is(Blocks.WATER); + return ((reason == MobSpawnType.SPAWNER && world.getMinecraftWorld().purpurConfig.spawnerFixMC238526) || (pos.getY() >= j && pos.getY() <= i)) && world.getFluidState(pos.below()).is(FluidTags.WATER) && world.getBlockState(pos.above()).is(Blocks.WATER); // Purpur } diff --git a/patches/server/0257-Option-to-disable-kick-for-out-of-order-chat.patch b/patches/server/0257-Option-to-disable-kick-for-out-of-order-chat.patch index 0ae0570f4..d14c1dbc9 100644 --- a/patches/server/0257-Option-to-disable-kick-for-out-of-order-chat.patch +++ b/patches/server/0257-Option-to-disable-kick-for-out-of-order-chat.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Option to disable kick for out of order chat diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 044b8d517b68cc7103ba7f2a57b26c8c3413b412..1e9e035b873d9d1f5909ea6879f0a47c6eca47f9 100644 +index 8b0a8bd1dab67ea440fc3af0a1b13c81dd738e25..b33d6d1fbf483d9293c7be317f3419e799abe84f 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -1722,7 +1722,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1717,7 +1717,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl do { if (!iterator.hasNext()) { diff --git a/patches/server/0261-Add-toggle-for-RNG-manipulation.patch b/patches/server/0261-Add-toggle-for-RNG-manipulation.patch index 571013346..26a029dea 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 5c9bc22fad1cb8de99fa30d86ac4204960e93d49..f574a59593ccbcf051a1c22756b6e05a8643ab31 100644 +index 57376b7c0d281a7950a69348b5aa869e89719232..376acce7e0fd5dedfdf10fa94ced41bc473b7815 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -600,7 +600,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -599,7 +599,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S this.bb = Entity.INITIAL_AABB; this.stuckSpeedMultiplier = Vec3.ZERO; this.nextStep = 1.0F; diff --git a/patches/server/0264-Remove-Timings.patch b/patches/server/0264-Remove-Timings.patch index b363761dc..34727a3dc 100644 --- a/patches/server/0264-Remove-Timings.patch +++ b/patches/server/0264-Remove-Timings.patch @@ -43,7 +43,7 @@ index b66a7d4aab887309579154815a0d4abf9de506b0..e6f56bc5b129699bab60db9c97c7f73b return executedUnloadTask | canSaveChunk | canSaveEntities | canSavePOI ? new SaveStat(executedUnloadTask || canSaveChunk, canSaveEntities, canSavePOI): null; } diff --git a/src/main/java/net/minecraft/network/protocol/PacketUtils.java b/src/main/java/net/minecraft/network/protocol/PacketUtils.java -index c5c734b9eb80d1cdf0e9fd8a043f2b6d1f4cbffe..21c98c7511faed997c1352b0842c8795719dcc2b 100644 +index 3e2d5dcd62775b6ed7c0ce0ba51a71b635b1d644..166cd0f8e72189d10e56cd7bc095409aa919840e 100644 --- a/src/main/java/net/minecraft/network/protocol/PacketUtils.java +++ b/src/main/java/net/minecraft/network/protocol/PacketUtils.java @@ -50,7 +50,7 @@ public class PacketUtils { @@ -56,7 +56,7 @@ index c5c734b9eb80d1cdf0e9fd8a043f2b6d1f4cbffe..21c98c7511faed997c1352b0842c8795 } catch (Exception exception) { label25: diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 6cfdb98969b1461912c857b6b8ae38f532f3bc9e..5a7f1e27b9e4d36789a0a835fd81ef117c6802c1 100644 +index 01a235831914698850befd777ec8b012006a95ec..1818e844e94522c9239b9a5cad812c09adeba636 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -1427,7 +1427,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop list = Lists.newArrayList(); List list1 = this.level.players(); ObjectIterator objectiterator = this.entityMap.values().iterator(); @@ -297,7 +297,7 @@ index 5996b5ae5b53f2c9ed2c2c9f5a3c25e300f5e90f..c2a1a05ace909576a160574ea98f89d6 ChunkMap.TrackedEntity playerchunkmap_entitytracker; -@@ -1212,17 +1212,17 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -1208,17 +1208,17 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider playerchunkmap_entitytracker.serverEntity.sendChanges(); } } @@ -319,13 +319,13 @@ index 5996b5ae5b53f2c9ed2c2c9f5a3c25e300f5e90f..c2a1a05ace909576a160574ea98f89d6 } diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -index 5cf74fe0214191d42e74fc104eba150a95894e0f..9f438b41b61ee1174d8f23bcb7d93380ad932e9c 100644 +index ad8e79c72841ff80f8af3580d2cdb89c13f6d688..e828f3d14af21318a716b9eba4b9bf80e377b073 100644 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java @@ -296,10 +296,10 @@ public class ServerChunkCache extends ChunkSource { io.papermc.paper.chunk.system.scheduling.ChunkTaskScheduler.pushChunkWait(this.level, x1, z1); // Paper - rewrite chunk system // Paper end - com.destroystokyo.paper.io.SyncLoadFinder.logSyncLoad(this.level, x1, z1); // Paper - sync load info + com.destroystokyo.paper.io.SyncLoadFinder.logSyncLoad(this.level, x1, z1); // Paper - Add debug for sync chunk loads - this.level.timings.syncChunkLoad.startTiming(); // Paper + //this.level.timings.syncChunkLoad.startTiming(); // Paper // Purpur chunkproviderserver_b.managedBlock(completablefuture::isDone); @@ -346,7 +346,7 @@ index 5cf74fe0214191d42e74fc104eba150a95894e0f..9f438b41b61ee1174d8f23bcb7d93380 + //} // Paper - Timings // Purpur } - // Paper start - duplicate save, but call incremental + // Paper start - Incremental chunk and player saving; duplicate save, but call incremental public void saveIncrementally() { this.runDistanceManagerUpdates(); - try (co.aikar.timings.Timing timed = level.timings.chunkSaveData.startTiming()) { // Paper - Timings @@ -355,9 +355,9 @@ index 5cf74fe0214191d42e74fc104eba150a95894e0f..9f438b41b61ee1174d8f23bcb7d93380 - } // Paper - Timings + //} // Paper - Timings // Purpur } - // Paper end + // Paper end - Incremental chunk and player saving -@@ -488,23 +488,23 @@ public class ServerChunkCache extends ChunkSource { +@@ -495,23 +495,23 @@ public class ServerChunkCache extends ChunkSource { @Override public void tick(BooleanSupplier shouldKeepTicking, boolean tickChunks) { this.level.getProfiler().push("purge"); @@ -387,7 +387,7 @@ index 5cf74fe0214191d42e74fc104eba150a95894e0f..9f438b41b61ee1174d8f23bcb7d93380 this.level.getProfiler().pop(); this.clearCache(); } -@@ -520,14 +520,14 @@ public class ServerChunkCache extends ChunkSource { +@@ -527,14 +527,14 @@ public class ServerChunkCache extends ChunkSource { gameprofilerfiller.push("pollingChunks"); gameprofilerfiller.push("filteringLoadedChunks"); // Paper - optimise chunk tick iteration @@ -402,18 +402,18 @@ index 5cf74fe0214191d42e74fc104eba150a95894e0f..9f438b41b61ee1174d8f23bcb7d93380 - this.level.timings.countNaturalMobs.startTiming(); // Paper - timings + //this.level.timings.countNaturalMobs.startTiming(); // Paper - timings // Purpur int k = this.distanceManager.getNaturalSpawnChunkCount(); - // Paper start - per player mob spawning + // Paper start - Optional per player mob spawns int naturalSpawnChunkCount = k; -@@ -557,7 +557,7 @@ public class ServerChunkCache extends ChunkSource { +@@ -564,7 +564,7 @@ public class ServerChunkCache extends ChunkSource { // Pufferfish end } - // Paper end + // Paper end - Optional per player mob spawns - this.level.timings.countNaturalMobs.stopTiming(); // Paper - timings + // this.level.timings.countNaturalMobs.stopTiming(); // Paper - timings // Purpur // this.lastSpawnState = spawnercreature_d; // Pufferfish - this is managed asynchronously gameprofilerfiller.popPush("spawnAndTick"); -@@ -666,19 +666,19 @@ public class ServerChunkCache extends ChunkSource { +@@ -673,19 +673,19 @@ public class ServerChunkCache extends ChunkSource { } } // Paper end - optimise chunk tick iteration @@ -437,7 +437,7 @@ index 5cf74fe0214191d42e74fc104eba150a95894e0f..9f438b41b61ee1174d8f23bcb7d93380 // Paper start - optimise chunk tick iteration if (!this.chunkMap.needsChangeBroadcasting.isEmpty()) { it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet copy = this.chunkMap.needsChangeBroadcasting.clone(); -@@ -692,7 +692,7 @@ public class ServerChunkCache extends ChunkSource { +@@ -699,7 +699,7 @@ public class ServerChunkCache extends ChunkSource { } } // Paper end - optimise chunk tick iteration @@ -447,10 +447,10 @@ index 5cf74fe0214191d42e74fc104eba150a95894e0f..9f438b41b61ee1174d8f23bcb7d93380 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 d81fab38fccaf0e6a6164e2c7bb24fa4d97353a0..25e9bb866bb7c07c0a1f32a85441694acbc5ed3b 100644 +index e2c5a03bcf008db05e6170184c6167d2ca1555fb..0fe2457de7a6f3842ff80512dac1bd2d3bbc04aa 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -871,7 +871,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -866,7 +866,7 @@ public class ServerLevel extends Level implements WorldGenLevel { } gameprofilerfiller.popPush("tickPending"); @@ -459,7 +459,7 @@ index d81fab38fccaf0e6a6164e2c7bb24fa4d97353a0..25e9bb866bb7c07c0a1f32a85441694a if (!this.isDebug() && flag) { j = this.getGameTime(); gameprofilerfiller.push("blockTicks"); -@@ -880,24 +880,24 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -875,24 +875,24 @@ public class ServerLevel extends Level implements WorldGenLevel { this.fluidTicks.tick(j, 65536, this::tickFluid); gameprofilerfiller.pop(); } @@ -491,7 +491,7 @@ index d81fab38fccaf0e6a6164e2c7bb24fa4d97353a0..25e9bb866bb7c07c0a1f32a85441694a } this.handlingTick = false; -@@ -910,7 +910,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -905,7 +905,7 @@ public class ServerLevel extends Level implements WorldGenLevel { if (flag1 || this.emptyTime++ < 300) { gameprofilerfiller.push("entities"); @@ -500,7 +500,7 @@ index d81fab38fccaf0e6a6164e2c7bb24fa4d97353a0..25e9bb866bb7c07c0a1f32a85441694a if (this.dragonFight != null && flag) { gameprofilerfiller.push("dragonFight"); this.dragonFight.tick(); -@@ -918,7 +918,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -913,7 +913,7 @@ public class ServerLevel extends Level implements WorldGenLevel { } org.spigotmc.ActivationRange.activateEntities(this); // Spigot @@ -509,7 +509,7 @@ index d81fab38fccaf0e6a6164e2c7bb24fa4d97353a0..25e9bb866bb7c07c0a1f32a85441694a this.entityTickList.forEach((entity) -> { entity.activatedPriorityReset = false; // Pufferfish - DAB if (!entity.isRemoved()) { -@@ -959,8 +959,8 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -954,8 +954,8 @@ public class ServerLevel extends Level implements WorldGenLevel { } } }); @@ -520,7 +520,7 @@ index d81fab38fccaf0e6a6164e2c7bb24fa4d97353a0..25e9bb866bb7c07c0a1f32a85441694a gameprofilerfiller.pop(); this.tickBlockEntities(); } -@@ -1104,7 +1104,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1099,7 +1099,7 @@ public class ServerLevel extends Level implements WorldGenLevel { } // Paper gameprofilerfiller.popPush("tickBlocks"); @@ -529,7 +529,7 @@ index d81fab38fccaf0e6a6164e2c7bb24fa4d97353a0..25e9bb866bb7c07c0a1f32a85441694a if (randomTickSpeed > 0) { // Paper start - optimize random block ticking LevelChunkSection[] sections = chunk.getSections(); -@@ -1138,7 +1138,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1133,7 +1133,7 @@ public class ServerLevel extends Level implements WorldGenLevel { } // Paper end - optimise random block ticking @@ -538,7 +538,7 @@ index d81fab38fccaf0e6a6164e2c7bb24fa4d97353a0..25e9bb866bb7c07c0a1f32a85441694a gameprofilerfiller.pop(); } -@@ -1482,8 +1482,8 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1477,8 +1477,8 @@ public class ServerLevel extends Level implements WorldGenLevel { // Spigot end // Paper start- timings final boolean isActive = org.spigotmc.ActivationRange.checkIfActive(entity); @@ -549,7 +549,7 @@ index d81fab38fccaf0e6a6164e2c7bb24fa4d97353a0..25e9bb866bb7c07c0a1f32a85441694a // Paper end - timings entity.setOldPosAndRot(); ProfilerFiller gameprofilerfiller = this.getProfiler(); -@@ -1499,7 +1499,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1494,7 +1494,7 @@ public class ServerLevel extends Level implements WorldGenLevel { entity.postTick(); // CraftBukkit } else { entity.inactiveTick(); } // Paper - EAR 2 this.getProfiler().pop(); @@ -558,7 +558,7 @@ index d81fab38fccaf0e6a6164e2c7bb24fa4d97353a0..25e9bb866bb7c07c0a1f32a85441694a Iterator iterator = entity.getPassengers().iterator(); while (iterator.hasNext()) { -@@ -1522,8 +1522,8 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1517,8 +1517,8 @@ public class ServerLevel extends Level implements WorldGenLevel { if (passenger instanceof Player || this.entityTickList.contains(passenger)) { // Paper - EAR 2 final boolean isActive = org.spigotmc.ActivationRange.checkIfActive(passenger); @@ -569,7 +569,7 @@ index d81fab38fccaf0e6a6164e2c7bb24fa4d97353a0..25e9bb866bb7c07c0a1f32a85441694a // Paper end passenger.setOldPosAndRot(); ++passenger.tickCount; -@@ -1553,7 +1553,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1548,7 +1548,7 @@ public class ServerLevel extends Level implements WorldGenLevel { this.tickPassenger(passenger, entity2); } @@ -578,14 +578,14 @@ index d81fab38fccaf0e6a6164e2c7bb24fa4d97353a0..25e9bb866bb7c07c0a1f32a85441694a } } else { passenger.stopRiding(); -@@ -1573,14 +1573,14 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1568,14 +1568,14 @@ public class ServerLevel extends Level implements WorldGenLevel { org.bukkit.Bukkit.getPluginManager().callEvent(new org.bukkit.event.world.WorldSaveEvent(getWorld())); } - try (co.aikar.timings.Timing ignored = this.timings.worldSave.startTiming()) { + //try (co.aikar.timings.Timing ignored = this.timings.worldSave.startTiming()) { // Purpur if (doFull) { - this.saveLevelData(true); // Pufferfish + this.saveLevelData(true); // Paper - Write SavedData IO async } - this.timings.worldSaveChunks.startTiming(); // Paper @@ -596,16 +596,16 @@ index d81fab38fccaf0e6a6164e2c7bb24fa4d97353a0..25e9bb866bb7c07c0a1f32a85441694a // Copied from save() // CraftBukkit start - moved from MinecraftServer.saveChunks -@@ -1592,7 +1592,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1587,7 +1587,7 @@ public class ServerLevel extends Level implements WorldGenLevel { this.convertable.saveDataTag(this.server.registryAccess(), this.serverLevelData, this.server.getPlayerList().getSingleplayerData()); } // CraftBukkit end - } + //} // Purpur } - // Paper end + // Paper end - Incremental chunk and player saving -@@ -1606,7 +1606,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1601,7 +1601,7 @@ public class ServerLevel extends Level implements WorldGenLevel { if (!savingDisabled) { org.bukkit.Bukkit.getPluginManager().callEvent(new org.bukkit.event.world.WorldSaveEvent(this.getWorld())); // CraftBukkit @@ -614,7 +614,7 @@ index d81fab38fccaf0e6a6164e2c7bb24fa4d97353a0..25e9bb866bb7c07c0a1f32a85441694a if (progressListener != null) { progressListener.progressStartNoAbort(Component.translatable("menu.savingLevel")); } -@@ -1616,11 +1616,11 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1611,11 +1611,11 @@ public class ServerLevel extends Level implements WorldGenLevel { progressListener.progressStage(Component.translatable("menu.savingChunks")); } @@ -630,10 +630,10 @@ index d81fab38fccaf0e6a6164e2c7bb24fa4d97353a0..25e9bb866bb7c07c0a1f32a85441694a } 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 1e9e035b873d9d1f5909ea6879f0a47c6eca47f9..35240470ee13099dcd857831cf2e863e53af52a7 100644 +index b33d6d1fbf483d9293c7be317f3419e799abe84f..3451fc27983d6ae2bc53568843d9f87f4e456b57 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -2462,7 +2462,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -2457,7 +2457,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl public void handleCommand(String s) { // Paper - private -> public org.spigotmc.AsyncCatcher.catchOp("Command Dispatched Async: " + s); // Paper - Add async catcher @@ -642,7 +642,7 @@ index 1e9e035b873d9d1f5909ea6879f0a47c6eca47f9..35240470ee13099dcd857831cf2e863e if ( org.spigotmc.SpigotConfig.logCommands ) // Spigot this.LOGGER.info(this.player.getScoreboardName() + " issued server command: " + s); -@@ -2472,7 +2472,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -2467,7 +2467,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl this.cserver.getPluginManager().callEvent(event); if (event.isCancelled()) { @@ -651,7 +651,7 @@ index 1e9e035b873d9d1f5909ea6879f0a47c6eca47f9..35240470ee13099dcd857831cf2e863e return; } -@@ -2485,7 +2485,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -2480,7 +2480,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl java.util.logging.Logger.getLogger(ServerGamePacketListenerImpl.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); return; } finally { @@ -661,7 +661,7 @@ index 1e9e035b873d9d1f5909ea6879f0a47c6eca47f9..35240470ee13099dcd857831cf2e863e } // 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 834d2e66850ea907b48f7c0f0c1f8ecc396762ca..ae8db4b212b85adff85c761b2e2083a6ccce7cea 100644 +index d03b0efd15a77d54f23661ea0426d69dcf5b26aa..e2f58fe299694db1b8975a502b42c832ef23ffb9 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -1274,7 +1274,7 @@ public abstract class PlayerList { @@ -675,7 +675,7 @@ index 834d2e66850ea907b48f7c0f0c1f8ecc396762ca..ae8db4b212b85adff85c761b2e2083a6 for (int i = 0; i < this.players.size(); ++i) { @@ -1285,7 +1285,7 @@ public abstract class PlayerList { } - // Paper end + // Paper end - Incremental chunk and player saving } - MinecraftTimings.savePlayers.stopTiming(); // Paper + //MinecraftTimings.savePlayers.stopTiming(); // Paper // Purpur @@ -683,7 +683,7 @@ index 834d2e66850ea907b48f7c0f0c1f8ecc396762ca..ae8db4b212b85adff85c761b2e2083a6 } diff --git a/src/main/java/net/minecraft/world/entity/ai/behavior/Behavior.java b/src/main/java/net/minecraft/world/entity/ai/behavior/Behavior.java -index 57ef7fbba3028c28231abf7b7ae78aa019323536..651c156dc8a5aad04d461add02e22147af657d07 100644 +index 1e71cde7cb7654f1c21ae5e27e2fad7b58f593eb..4f3a1c2bfaec6787c8fc62c7df13c512dfc2cb7a 100644 --- a/src/main/java/net/minecraft/world/entity/ai/behavior/Behavior.java +++ b/src/main/java/net/minecraft/world/entity/ai/behavior/Behavior.java @@ -58,9 +58,9 @@ public abstract class Behavior implements BehaviorContro @@ -732,10 +732,10 @@ 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 1df81be711afc2adeb6908c86c7952580f3c8f0a..ca3b05db0a1cfdbac1307ff95bacd1acb83cb616 100644 +index 29ff1ca5180aee623cd56c7310c2c0843f9a0b0a..81dcd8d608ff1b882817e3992c8c93b56dff325f 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -1318,15 +1318,15 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1317,15 +1317,15 @@ public abstract class Level implements LevelAccessor, AutoCloseable { ProfilerFiller gameprofilerfiller = this.getProfiler(); gameprofilerfiller.push("blockEntities"); @@ -754,7 +754,7 @@ index 1df81be711afc2adeb6908c86c7952580f3c8f0a..ca3b05db0a1cfdbac1307ff95bacd1ac // Spigot start // Iterator iterator = this.blockEntityTickers.iterator(); boolean flag = this.tickRateManager().runsNormally(); -@@ -1355,7 +1355,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1354,7 +1354,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { } this.blockEntityTickers.removeAll(toRemove); @@ -764,7 +764,7 @@ index 1df81be711afc2adeb6908c86c7952580f3c8f0a..ca3b05db0a1cfdbac1307ff95bacd1ac co.aikar.timings.TimingHistory.tileEntityTicks += this.blockEntityTickers.size(); // Paper gameprofilerfiller.pop(); diff --git a/src/main/java/net/minecraft/world/level/NaturalSpawner.java b/src/main/java/net/minecraft/world/level/NaturalSpawner.java -index 3fb96de68b93e8d33bd5ab9137e5d4facc94d788..9a0a16d09a4cda3c2303dabe70db6c3018f3dd08 100644 +index 2c300e3769acf534ee3bed91663374eca0acf5df..4e786cd3bc65d762c122f61ccb450bcd0887a745 100644 --- a/src/main/java/net/minecraft/world/level/NaturalSpawner.java +++ b/src/main/java/net/minecraft/world/level/NaturalSpawner.java @@ -133,7 +133,7 @@ public final class NaturalSpawner { @@ -786,7 +786,7 @@ index 3fb96de68b93e8d33bd5ab9137e5d4facc94d788..9a0a16d09a4cda3c2303dabe70db6c30 } diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -index 76a4708464d35dd7782b1032288b52d61ee8fffc..757dc4292d371e697f336c4665427b3b4a3aa73b 100644 +index c3fb622845770bcee9ddd6ebbeee174b06ee16eb..134d2d56af71aceb1ca33d7bb708124655c5d319 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java @@ -799,7 +799,7 @@ public class LevelChunk extends ChunkAccess { @@ -903,7 +903,7 @@ index b3e1adeb932da9b3bed16acd94e2f16da48a7c72..d3ec817e95628f1fc8be4a29c9a0f13c // Paper end - add timings for scoreboard search } diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java -index d85982831fabc4643d8273ea27cf6dd0d05fee7c..9357539c71e3a8408b1f055527ffd192b5f9f1d9 100644 +index 1085d90f6db968760a52f9d00a25299618264c5f..9113c8ebff5e71f859a19f024969582052c57546 100644 --- a/src/main/java/org/spigotmc/ActivationRange.java +++ b/src/main/java/org/spigotmc/ActivationRange.java @@ -170,7 +170,7 @@ public class ActivationRange diff --git a/patches/server/0265-Remove-Mojang-Profiler.patch b/patches/server/0265-Remove-Mojang-Profiler.patch index 15ed74547..4cc55f60f 100644 --- a/patches/server/0265-Remove-Mojang-Profiler.patch +++ b/patches/server/0265-Remove-Mojang-Profiler.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Remove Mojang Profiler diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java -index d3646cfc4d694d216dccb41f540a76e44050320a..9c370e3ad78f016c49b62488c9d0c861c4ad31e6 100644 +index 7e266a126180000dcad4b3bd8606349bdc95c30b..819f2cba19e3a0c2a6a8087f2346ebe4782aeb8c 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java @@ -165,7 +165,7 @@ public class Commands { @@ -89,7 +89,7 @@ index 821dc4aeaf48460000682604fba51b340b9738e7..3aa2ce6a2a3d3cdfc372a60419a09f49 } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 5a7f1e27b9e4d36789a0a835fd81ef117c6802c1..9424785e55c8f31bd6c6029e2d3a6f9fa5e571df 100644 +index 1818e844e94522c9239b9a5cad812c09adeba636..c6403274658ccaa2ed27e586cc35d13c760f2040 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -344,13 +344,13 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0; // Paper + worldserver.hasEntityMoveEvent = io.papermc.paper.event.entity.EntityMoveEvent.getHandlerList().getRegisteredListeners().length > 0; // Paper - Add EntityMoveEvent worldserver.hasRidableMoveEvent = org.purpurmc.purpur.event.entity.RidableMoveEvent.getHandlerList().getRegisteredListeners().length > 0; // Purpur - this.profiler.push(() -> { @@ -254,7 +254,7 @@ index 5a7f1e27b9e4d36789a0a835fd81ef117c6802c1..9424785e55c8f31bd6c6029e2d3a6f9f + //this.profiler.pop(); // Purpur worldserver.explosionDensityCache.clear(); // Paper - Optimize explosions } - this.isIteratingOverLevels = false; // Paper + this.isIteratingOverLevels = false; // Paper - Throw exception on world create while being ticked - this.profiler.popPush("connection"); + //this.profiler.popPush("connection"); // Purpur @@ -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 87bbf12563d035b2b63a4d36095dc1cd8b624671..172c7b94830c13835e48d68a039bd66e7e7622b0 100644 +index a9f933cf827f7973e6b881b071108050b99f80f3..6e7e71c7962d43f2d4fbd218f2017557ddd53eb2 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java @@ -545,20 +545,20 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider @@ -477,7 +477,7 @@ index 87bbf12563d035b2b63a4d36095dc1cd8b624671..172c7b94830c13835e48d68a039bd66e public boolean hasWork() { diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -index 9f438b41b61ee1174d8f23bcb7d93380ad932e9c..c3c47857515a7f75d69c718f352d8bae4b2c1d26 100644 +index e828f3d14af21318a716b9eba4b9bf80e377b073..a5067485fb6683e3255681a9c5a6df86c90ce0fa 100644 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java @@ -73,7 +73,7 @@ public class ServerChunkCache extends ChunkSource { @@ -492,7 +492,7 @@ index 9f438b41b61ee1174d8f23bcb7d93380ad932e9c..c3c47857515a7f75d69c718f352d8bae @@ -277,16 +277,16 @@ public class ServerChunkCache extends ChunkSource { return ifLoaded; } - // Paper end + // Paper end - Perf: Optimise getChunkAt calls for loaded chunks - ProfilerFiller gameprofilerfiller = this.level.getProfiler(); + //ProfilerFiller gameprofilerfiller = this.level.getProfiler(); // Purpur @@ -509,7 +509,7 @@ index 9f438b41b61ee1174d8f23bcb7d93380ad932e9c..c3c47857515a7f75d69c718f352d8bae CompletableFuture> completablefuture = this.getChunkFutureMainThread(x, z, leastStatus, create, true); // Paper ServerChunkCache.MainThreadExecutor chunkproviderserver_b = this.mainThreadProcessor; -@@ -475,24 +475,24 @@ public class ServerChunkCache extends ChunkSource { +@@ -482,24 +482,24 @@ public class ServerChunkCache extends ChunkSource { // CraftBukkit start - modelled on below public void purgeUnload() { if (true) return; // Paper - tickets will be removed later, this behavior isn't really well accounted for by the chunk system @@ -539,7 +539,7 @@ index 9f438b41b61ee1174d8f23bcb7d93380ad932e9c..c3c47857515a7f75d69c718f352d8bae if (tickChunks) { //this.level.timings.chunks.startTiming(); // Paper - timings // Purpur this.chunkMap.level.playerChunkLoader.tick(); // Paper - replace player chunk loader - this is mostly required to account for view distance changes -@@ -502,10 +502,10 @@ public class ServerChunkCache extends ChunkSource { +@@ -509,10 +509,10 @@ public class ServerChunkCache extends ChunkSource { } //this.level.timings.doChunkUnload.startTiming(); // Spigot // Purpur @@ -552,7 +552,7 @@ index 9f438b41b61ee1174d8f23bcb7d93380ad932e9c..c3c47857515a7f75d69c718f352d8bae this.clearCache(); } -@@ -515,10 +515,10 @@ public class ServerChunkCache extends ChunkSource { +@@ -522,10 +522,10 @@ public class ServerChunkCache extends ChunkSource { this.lastInhabitedUpdate = i; if (!this.level.isDebug()) { @@ -566,7 +566,7 @@ index 9f438b41b61ee1174d8f23bcb7d93380ad932e9c..c3c47857515a7f75d69c718f352d8bae // Paper - optimise chunk tick iteration //if (this.level.getServer().tickRateManager().runsNormally()) this.level.timings.chunkTicks.startTiming(); // Paper // Purpur -@@ -526,7 +526,7 @@ public class ServerChunkCache extends ChunkSource { +@@ -533,7 +533,7 @@ public class ServerChunkCache extends ChunkSource { this.level.resetIceAndSnowTick(); // Pufferfish - reset ice & snow tick random if (this.level.getServer().tickRateManager().runsNormally()) { @@ -574,8 +574,8 @@ index 9f438b41b61ee1174d8f23bcb7d93380ad932e9c..c3c47857515a7f75d69c718f352d8bae + // gameprofilerfiller.popPush("naturalSpawnCount"); // Purpur //this.level.timings.countNaturalMobs.startTiming(); // Paper - timings // Purpur int k = this.distanceManager.getNaturalSpawnChunkCount(); - // Paper start - per player mob spawning -@@ -560,7 +560,7 @@ public class ServerChunkCache extends ChunkSource { + // Paper start - Optional per player mob spawns +@@ -567,7 +567,7 @@ public class ServerChunkCache extends ChunkSource { // this.level.timings.countNaturalMobs.stopTiming(); // Paper - timings // Purpur // this.lastSpawnState = spawnercreature_d; // Pufferfish - this is managed asynchronously @@ -584,7 +584,7 @@ index 9f438b41b61ee1174d8f23bcb7d93380ad932e9c..c3c47857515a7f75d69c718f352d8bae boolean flag = this.level.getGameRules().getBoolean(GameRules.RULE_DOMOBSPAWNING) && !this.level.players().isEmpty(); // CraftBukkit // Paper start - optimise chunk tick iteration -@@ -668,7 +668,7 @@ public class ServerChunkCache extends ChunkSource { +@@ -675,7 +675,7 @@ public class ServerChunkCache extends ChunkSource { // Paper end - optimise chunk tick iteration // this.level.timings.chunkTicks.stopTiming(); // Paper // Purpur @@ -593,7 +593,7 @@ index 9f438b41b61ee1174d8f23bcb7d93380ad932e9c..c3c47857515a7f75d69c718f352d8bae if (flag) { //try (co.aikar.timings.Timing ignored = this.level.timings.miscMobSpawning.startTiming()) { // Paper - timings // Purpur this.level.tickCustomSpawners(this.spawnEnemies, this.spawnFriendlies); -@@ -676,7 +676,7 @@ public class ServerChunkCache extends ChunkSource { +@@ -683,7 +683,7 @@ public class ServerChunkCache extends ChunkSource { } } @@ -602,7 +602,7 @@ index 9f438b41b61ee1174d8f23bcb7d93380ad932e9c..c3c47857515a7f75d69c718f352d8bae // Paper - optimise chunk tick iteration //this.level.timings.broadcastChunkUpdates.startTiming(); // Paper - timing // Purpur // Paper start - optimise chunk tick iteration -@@ -694,10 +694,10 @@ public class ServerChunkCache extends ChunkSource { +@@ -701,10 +701,10 @@ public class ServerChunkCache extends ChunkSource { // Paper end - optimise chunk tick iteration //this.level.timings.broadcastChunkUpdates.stopTiming(); // Paper - timing // Purpur // Paper - optimise chunk tick iteration @@ -616,7 +616,7 @@ index 9f438b41b61ee1174d8f23bcb7d93380ad932e9c..c3c47857515a7f75d69c718f352d8bae // Pufferfish start - optimize mob spawning if (gg.pufferfish.pufferfish.PufferfishConfig.enableAsyncMobSpawning) { for (ServerPlayer player : this.level.players) { -@@ -901,7 +901,7 @@ public class ServerChunkCache extends ChunkSource { +@@ -908,7 +908,7 @@ public class ServerChunkCache extends ChunkSource { @Override protected void doRunTask(Runnable task) { @@ -626,10 +626,10 @@ index 9f438b41b61ee1174d8f23bcb7d93380ad932e9c..c3c47857515a7f75d69c718f352d8bae } diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 3a06bf55d48ed96556ad9d389ab5ebaefeb078d9..1309c9e63095a0484ee0fa119a41c29ef1da3a01 100644 +index 0fe2457de7a6f3842ff80512dac1bd2d3bbc04aa..65a60983be85707883bd330e79a8c1f03428f2c9 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -829,16 +829,16 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -824,16 +824,16 @@ public class ServerLevel extends Level implements WorldGenLevel { } public void tick(BooleanSupplier shouldKeepTicking) { @@ -649,7 +649,7 @@ index 3a06bf55d48ed96556ad9d389ab5ebaefeb078d9..1309c9e63095a0484ee0fa119a41c29e this.advanceWeatherCycle(); } -@@ -870,30 +870,30 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -865,30 +865,30 @@ public class ServerLevel extends Level implements WorldGenLevel { this.tickTime(); } @@ -687,7 +687,7 @@ index 3a06bf55d48ed96556ad9d389ab5ebaefeb078d9..1309c9e63095a0484ee0fa119a41c29e if (flag) { // this.timings.doSounds.startTiming(); // Spigot // Purpur this.runBlockEvents(); -@@ -901,7 +901,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -896,7 +896,7 @@ public class ServerLevel extends Level implements WorldGenLevel { } this.handlingTick = false; @@ -696,7 +696,7 @@ index 3a06bf55d48ed96556ad9d389ab5ebaefeb078d9..1309c9e63095a0484ee0fa119a41c29e boolean flag1 = true || !this.players.isEmpty() || !this.getForcedChunks().isEmpty(); // CraftBukkit - this prevents entity cleanup, other issues on servers with no players if (flag1) { -@@ -909,12 +909,12 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -904,12 +904,12 @@ public class ServerLevel extends Level implements WorldGenLevel { } if (flag1 || this.emptyTime++ < 300) { @@ -712,7 +712,7 @@ index 3a06bf55d48ed96556ad9d389ab5ebaefeb078d9..1309c9e63095a0484ee0fa119a41c29e } org.spigotmc.ActivationRange.activateEntities(this); // Spigot -@@ -925,9 +925,9 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -920,9 +920,9 @@ public class ServerLevel extends Level implements WorldGenLevel { if (false && this.shouldDiscardEntity(entity)) { // CraftBukkit - We prevent spawning in general, so this butchering is not needed entity.discard(); } else if (!tickratemanager.isEntityFrozen(entity)) { @@ -724,7 +724,7 @@ index 3a06bf55d48ed96556ad9d389ab5ebaefeb078d9..1309c9e63095a0484ee0fa119a41c29e if (true || this.chunkSource.chunkMap.getDistanceManager().inEntityTickingRange(entity.chunkPosition().toLong())) { // Paper - now always true if in the ticking list Entity entity1 = entity.getVehicle(); -@@ -939,7 +939,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -934,7 +934,7 @@ public class ServerLevel extends Level implements WorldGenLevel { entity.stopRiding(); } @@ -733,7 +733,7 @@ index 3a06bf55d48ed96556ad9d389ab5ebaefeb078d9..1309c9e63095a0484ee0fa119a41c29e // Pufferfish start - copied from this.guardEntityTick try { this.tickNonPassenger(entity); // Pufferfish - changed -@@ -954,20 +954,19 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -949,20 +949,19 @@ public class ServerLevel extends Level implements WorldGenLevel { // Paper end } // Pufferfish end @@ -757,7 +757,7 @@ index 3a06bf55d48ed96556ad9d389ab5ebaefeb078d9..1309c9e63095a0484ee0fa119a41c29e } @Override -@@ -1049,9 +1048,9 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1044,9 +1043,9 @@ public class ServerLevel extends Level implements WorldGenLevel { boolean flag = this.isRaining(); int j = chunkcoordintpair.getMinBlockX(); int k = chunkcoordintpair.getMinBlockZ(); @@ -769,7 +769,7 @@ index 3a06bf55d48ed96556ad9d389ab5ebaefeb078d9..1309c9e63095a0484ee0fa119a41c29e final BlockPos.MutableBlockPos blockposition = this.chunkTickMutablePosition; // Paper - use mutable to reduce allocation rate, final to force compile fail on change if (!this.paperConfig().environment.disableThunder && flag && this.isThundering() && this.spigotConfig.thunderChance > 0 && /*this.random.nextInt(this.spigotConfig.thunderChance) == 0 &&*/ chunk.shouldDoLightning(this.random)) { // Spigot // Paper - disable thunder // Pufferfish - replace random with shouldDoLightning -@@ -1090,7 +1089,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1085,7 +1084,7 @@ public class ServerLevel extends Level implements WorldGenLevel { } } @@ -778,7 +778,7 @@ index 3a06bf55d48ed96556ad9d389ab5ebaefeb078d9..1309c9e63095a0484ee0fa119a41c29e if (!this.paperConfig().environment.disableIceAndSnow) { // Paper for (int l = 0; l < randomTickSpeed; ++l) { -@@ -1103,7 +1102,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1098,7 +1097,7 @@ public class ServerLevel extends Level implements WorldGenLevel { } } // Paper @@ -787,7 +787,7 @@ index 3a06bf55d48ed96556ad9d389ab5ebaefeb078d9..1309c9e63095a0484ee0fa119a41c29e //timings.chunkTicksBlocks.startTiming(); // Paper // Purpur if (randomTickSpeed > 0) { // Paper start - optimize random block ticking -@@ -1139,7 +1138,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1134,7 +1133,7 @@ public class ServerLevel extends Level implements WorldGenLevel { // Paper end - optimise random block ticking //timings.chunkTicksBlocks.stopTiming(); // Paper // Purpur @@ -796,7 +796,7 @@ index 3a06bf55d48ed96556ad9d389ab5ebaefeb078d9..1309c9e63095a0484ee0fa119a41c29e } @VisibleForTesting -@@ -1486,19 +1485,19 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1481,19 +1480,19 @@ public class ServerLevel extends Level implements WorldGenLevel { //try { // Purpur // Paper end - timings entity.setOldPosAndRot(); @@ -821,7 +821,7 @@ index 3a06bf55d48ed96556ad9d389ab5ebaefeb078d9..1309c9e63095a0484ee0fa119a41c29e //} finally { timer.stopTiming(); } // Paper - timings // Purpur Iterator iterator = entity.getPassengers().iterator(); -@@ -1527,12 +1526,12 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1522,12 +1521,12 @@ public class ServerLevel extends Level implements WorldGenLevel { // Paper end passenger.setOldPosAndRot(); ++passenger.tickCount; @@ -838,7 +838,7 @@ index 3a06bf55d48ed96556ad9d389ab5ebaefeb078d9..1309c9e63095a0484ee0fa119a41c29e // Paper start - EAR 2 if (isActive) { passenger.rideTick(); -@@ -1544,7 +1543,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1539,7 +1538,7 @@ public class ServerLevel extends Level implements WorldGenLevel { vehicle.positionRider(passenger); } // Paper end - EAR 2 @@ -848,7 +848,7 @@ index 3a06bf55d48ed96556ad9d389ab5ebaefeb078d9..1309c9e63095a0484ee0fa119a41c29e while (iterator.hasNext()) { diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 5ca339100cb311faa87b978b3c8df36d24fea112..97fa5c65bb6fe53bada4c42d54a9f7c22dbfca38 100644 +index 52d0c1e6ae4891bccd08cbd34a36e7fb6afd09d6..516ff3e5141df57938c43adee902a48e07048302 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -1240,7 +1240,7 @@ public class ServerPlayer extends Player { @@ -881,7 +881,7 @@ index 5ca339100cb311faa87b978b3c8df36d24fea112..97fa5c65bb6fe53bada4c42d54a9f7c2 this.connection.send(new ClientboundPlayerAbilitiesPacket(this.getAbilities())); playerlist.sendLevelInfo(this, worldserver); diff --git a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java -index 97914d9c0d8f9ad58fbc79db2afd9cba57bf93b6..da499e0b21eba40d24d95047e3a9220567d4bae7 100644 +index 4ff11fa980b89c8721f792139a5bea0cc31907c2..fa5107deb090a779ddc2fdd0fd6de05e1fcf85b9 100644 --- a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java @@ -222,7 +222,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack @@ -890,7 +890,7 @@ index 97914d9c0d8f9ad58fbc79db2afd9cba57bf93b6..da499e0b21eba40d24d95047e3a92205 protected void keepConnectionAlive() { - this.server.getProfiler().push("keepAlive"); + //this.server.getProfiler().push("keepAlive"); // Purpur - // Paper Start - give clients a longer time to respond to pings as per pre 1.12.2 timings + // Paper start - give clients a longer time to respond to pings as per pre 1.12.2 timings // This should effectively place the keepalive handling back to "as it was" before 1.12.2 long currentTime = Util.getMillis(); @@ -258,7 +258,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack @@ -1107,19 +1107,19 @@ 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 d5f60a9e2557f687d3c1218559601526f349ecbe..ed7bc379d55b7fd8be1d18e388356a7e466bb75e 100644 +index 376acce7e0fd5dedfdf10fa94ced41bc473b7815..805991ef816ad5ae82ed26781ec265173a8f192c 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -852,7 +852,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -851,7 +851,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S // CraftBukkit end public void baseTick() { - this.level().getProfiler().push("entityBaseTick"); + //this.level().getProfiler().push("entityBaseTick"); // Purpur - if (firstTick && this instanceof net.minecraft.world.entity.NeutralMob neutralMob) neutralMob.tickInitialPersistentAnger(level); // Paper - Update last hurt when ticking + 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()) { -@@ -913,7 +913,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -912,7 +912,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } this.firstTick = false; @@ -1128,7 +1128,7 @@ index d5f60a9e2557f687d3c1218559601526f349ecbe..ed7bc379d55b7fd8be1d18e388356a7e } public void setSharedFlagOnFire(boolean onFire) { -@@ -1132,7 +1132,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -1131,7 +1131,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } } @@ -1137,7 +1137,7 @@ index d5f60a9e2557f687d3c1218559601526f349ecbe..ed7bc379d55b7fd8be1d18e388356a7e if (this.stuckSpeedMultiplier.lengthSqr() > 1.0E-7D) { movement = movement.multiply(this.stuckSpeedMultiplier); this.stuckSpeedMultiplier = Vec3.ZERO; -@@ -1141,7 +1141,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -1140,7 +1140,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); @@ -1146,7 +1146,7 @@ index d5f60a9e2557f687d3c1218559601526f349ecbe..ed7bc379d55b7fd8be1d18e388356a7e return; } // Paper end -@@ -1162,8 +1162,8 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -1161,8 +1161,8 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S this.setPos(this.getX() + vec3d1.x, this.getY() + vec3d1.y, this.getZ() + vec3d1.z); } @@ -1157,7 +1157,7 @@ index d5f60a9e2557f687d3c1218559601526f349ecbe..ed7bc379d55b7fd8be1d18e388356a7e boolean flag = !Mth.equal(movement.x, vec3d1.x); boolean flag1 = !Mth.equal(movement.z, vec3d1.z); -@@ -1182,7 +1182,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -1181,7 +1181,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S this.checkFallDamage(vec3d1.y, this.onGround(), iblockdata, blockposition); if (this.isRemoved()) { @@ -1166,7 +1166,7 @@ index d5f60a9e2557f687d3c1218559601526f349ecbe..ed7bc379d55b7fd8be1d18e388356a7e } else { if (this.horizontalCollision) { Vec3 vec3d2 = this.getDeltaMovement(); -@@ -1320,7 +1320,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -1319,7 +1319,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S this.setRemainingFireTicks(-this.getFireImmuneTicks()); } @@ -1175,27 +1175,27 @@ index d5f60a9e2557f687d3c1218559601526f349ecbe..ed7bc379d55b7fd8be1d18e388356a7e } } // Paper start - detailed watchdog information -@@ -3191,7 +3191,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3190,7 +3190,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S ServerLevel worldserver1 = minecraftserver.getLevel(resourcekey); if (true && !this.isPassenger() && this.portalTime++ >= i) { // CraftBukkit - this.level().getProfiler().push("portal"); + //this.level().getProfiler().push("portal"); // Purpur this.portalTime = i; - // Paper start + // 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); -@@ -3209,7 +3209,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3208,7 +3208,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } - } // Paper + } // Paper - Add EntityPortalReadyEvent // CraftBukkit end - this.level().getProfiler().pop(); + //this.level().getProfiler().pop(); // Purpur } this.isInsidePortal = false; -@@ -3684,14 +3684,14 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3683,14 +3683,14 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } - // Paper end + // Paper end - Fix item duplication and teleport issues if (this.level() instanceof ServerLevel && !this.isRemoved()) { - this.level().getProfiler().push("changeDimension"); + //this.level().getProfiler().push("changeDimension"); // Purpur @@ -1210,16 +1210,16 @@ index d5f60a9e2557f687d3c1218559601526f349ecbe..ed7bc379d55b7fd8be1d18e388356a7e 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) { -@@ -3730,7 +3730,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3729,7 +3729,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S this.unRide(); // CraftBukkit end - this.level().getProfiler().popPush("reloading"); + //this.level().getProfiler().popPush("reloading"); // Purpur - // Paper start - Change lead drop timing to prevent dupe + // Paper start - Fix item duplication and teleport issues if (this instanceof Mob) { ((Mob) this).dropLeash(true, true); // Paper drop lead -@@ -3757,10 +3757,10 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3756,10 +3756,10 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } this.removeAfterChangingDimensions(); @@ -1233,7 +1233,7 @@ index d5f60a9e2557f687d3c1218559601526f349ecbe..ed7bc379d55b7fd8be1d18e388356a7e } } else { diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 4c75007bc1b700b9c4b79dce0b63c21fec6a742e..46230c0fbcfd565163abca17313a6f0ea5e63249 100644 +index b6422365998bb6008f2efbae209171da4455e8cf..830998da41f38ab799db863ea088e0476b9fad5c 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 { @@ -1340,11 +1340,11 @@ index 4c75007bc1b700b9c4b79dce0b63c21fec6a742e..46230c0fbcfd565163abca17313a6f0e this.pushEntities(); - this.level().getProfiler().pop(); + //this.level().getProfiler().pop(); // Purpur - // Paper start + // Paper start - Add EntityMoveEvent // 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 9caee3db19fa76e8e311ead8f892d0f8bebfe6b2..4c0d710d20e074ad4a0fdd1cd4c0c3d3383b68a5 100644 +index c029752141efbc48005dae0e3c1a071ba039b3a7..faff4cbeaacf0beaae1ec488f6f233326f415975 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 { @@ -1501,7 +1501,7 @@ index 1635818fc4b1788c0d397085239df6dd75b210ab..02978315bc2b828cc603ce7478408f3f public Set getAvailableGoals() { diff --git a/src/main/java/net/minecraft/world/entity/ai/navigation/PathNavigation.java b/src/main/java/net/minecraft/world/entity/ai/navigation/PathNavigation.java -index b37415d45dda8e658c8995a4519e552dc378bb41..0e36e3e672de4c806e2d534b437489a3a349a722 100644 +index a9922074b6aa6a9898615385bb11d2a758662970..9ffbe784a0d45b494f29ab1555841b4be9f58128 100644 --- a/src/main/java/net/minecraft/world/entity/ai/navigation/PathNavigation.java +++ b/src/main/java/net/minecraft/world/entity/ai/navigation/PathNavigation.java @@ -172,12 +172,12 @@ public abstract class PathNavigation { @@ -1558,7 +1558,7 @@ index 09f796ec491f21520e1fcc454249e4696dad3b1b..9bf06cf7b3706f8883e1a0ceac8b1aeb } diff --git a/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java b/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java -index b7eaa9e99688ae300c2e9176991c29828d1cc800..e4d529825e681bbc656113b1fd44894338e23d21 100644 +index e73d7b47327da59dbf49c2160acd0b3ebb2a4232..472b76d6ec721fa46857097589aa879f237e3e0d 100644 --- a/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java +++ b/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java @@ -315,13 +315,13 @@ public class Axolotl extends Animal implements LerpingModel, VariantHolder optional = this.getBrain().getMemory(MemoryModuleType.PLAY_DEAD_TICKS); 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 30b19b64fdc9b03f15341831235492f4cdd9823a..b46942c5fafe216039426531a4dbb19bda02c084 100644 +index d1ada87d222e5b35c2df5a0e7b0075ec3413fa66..fb50a3f3665cca4bb2e586fbd73c580a5d691f69 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 @@ -158,13 +158,13 @@ public class Camel extends AbstractHorse implements PlayerRideableJumping, Saddl @@ -1645,7 +1645,7 @@ index 3103df74b7ae5a5ed841bf97794284cd43ad59de..14135dac80dec4224715e21cef6556d2 } 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 fba00cab2c4b234dd2e85b5f4dcd0db34183c1a2..806b207e5246db7daa03bebabd7aa574d8b0dab7 100644 +index f7730ec3a6c8818baf2a7a738e5a49a56d17c0e8..566f117ba6742ba17ffb8a2673a8c320c39549f7 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 @@ -226,13 +226,13 @@ public class Goat extends Animal { @@ -1667,7 +1667,7 @@ index fba00cab2c4b234dd2e85b5f4dcd0db34183c1a2..806b207e5246db7daa03bebabd7aa574 } diff --git a/src/main/java/net/minecraft/world/entity/animal/sniffer/Sniffer.java b/src/main/java/net/minecraft/world/entity/animal/sniffer/Sniffer.java -index 42bfc59462f320e95c13075c8541c4c4c98a6879..dcb10e2ea1e0c7d0479adae5bc2ff57ece172aad 100644 +index 4d1071546f523c63b9c981e90a09393e9e4400fa..5e7d76dcdc170b809ab82f6e2259c9b4d3d741be 100644 --- a/src/main/java/net/minecraft/world/entity/animal/sniffer/Sniffer.java +++ b/src/main/java/net/minecraft/world/entity/animal/sniffer/Sniffer.java @@ -517,11 +517,11 @@ public class Sniffer extends Animal { @@ -1721,7 +1721,7 @@ index ab183a7d94a27d5235ff33ce7784c92d66d40b89..94431d5c789a9f558c16c0d1fc8f1f74 } 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 e326e753cc6bca1bd00287d16c9796b9f3dd4d14..9d6c4f13c4a444c6c815c6c4f2114142f166b9bb 100644 +index 510ee1aee1dd106b5129c375ebb59c7950b8b989..5c160d6aa4e3d51c1161f82e92e5e8c1e809a574 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 @@ -168,10 +168,10 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { @@ -1738,7 +1738,7 @@ index e326e753cc6bca1bd00287d16c9796b9f3dd4d14..9d6c4f13c4a444c6c815c6c4f2114142 if (this.isConverting()) { ++this.timeInOverworld; 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 9ca1618ab945ad834c5fc221ada49058f806e79c..8e829d522a6012f409161ad5a9a06721a942d7e4 100644 +index 141fa7d4e1b81e90f4d63a3459c9a72bc595d30b..1422c0f4ff6a3e61f229574cd7b50971bdbd8451 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 @@ -335,10 +335,10 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento @@ -1772,7 +1772,7 @@ index 61e8f2d030fc50840c3f80dfb6fc810797ec440f..856e6e02c9424a6c06e310262cb4f5bd PiglinBruteAi.maybePlayActivitySound(this); super.customServerAiStep(); diff --git a/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java b/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java -index 63e4688d8055cf4a8883477f7943bf63520c0693..22263f219ce9e9f014abb76c43297c528acb36eb 100644 +index 384e7b29215cadfa40af07a183a9c9c6a5b4a80a..bf7ef72a7d92db8f11789a69583270644de0dac7 100644 --- a/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java +++ b/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java @@ -302,10 +302,10 @@ public class Warden extends Monster implements VibrationSystem { @@ -1789,7 +1789,7 @@ index 63e4688d8055cf4a8883477f7943bf63520c0693..22263f219ce9e9f014abb76c43297c52 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 fb8fe6b74bf8c392192c846e05c109dbb364c0a9..27ebfda79d9c4463f157b99c2c56e256839b3a31 100644 +index c8aa886f7f7457ba160b9e29528f9f5d18ed005a..c137f8f1a2566690f2b2e82b16e7186eaa711f38 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java @@ -342,7 +342,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler @@ -1811,7 +1811,7 @@ index fb8fe6b74bf8c392192c846e05c109dbb364c0a9..27ebfda79d9c4463f157b99c2c56e256 this.assignProfessionWhenSpawned = false; } diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java -index 210b6d71207b99e66ba014b176b2c1445053b1d1..82a58ca092371866566bac5f1efcca4964e59e60 100644 +index 1fa02130dcb65b3109fde0cb612b538b1c4cd4cb..353ee2d2ea86ba98052acb2edb5d0b3d9393f3ca 100644 --- a/src/main/java/net/minecraft/world/level/Explosion.java +++ b/src/main/java/net/minecraft/world/level/Explosion.java @@ -659,7 +659,7 @@ public class Explosion { @@ -1833,10 +1833,10 @@ index 210b6d71207b99e66ba014b176b2c1445053b1d1..82a58ca092371866566bac5f1efcca49 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 fd0a9350e4b08daff437d4d054803d72aec5c950..b58402221840a9e72b30a31d884b0fb2d86883fd 100644 +index 81dcd8d608ff1b882817e3992c8c93b56dff325f..f638224f8ae018030fa00962cd3c75fc31ab2488 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -1315,9 +1315,9 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1314,9 +1314,9 @@ public abstract class Level implements LevelAccessor, AutoCloseable { } protected void tickBlockEntities() { @@ -1848,7 +1848,7 @@ index fd0a9350e4b08daff437d4d054803d72aec5c950..b58402221840a9e72b30a31d884b0fb2 //this.timings.tileEntityPending.startTiming(); // Spigot // Purpur this.tickingBlockEntities = true; if (!this.pendingBlockEntityTickers.isEmpty()) { -@@ -1358,7 +1358,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1357,7 +1357,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { //this.timings.tileEntityTick.stopTiming(); // Spigot // Purpur this.tickingBlockEntities = false; co.aikar.timings.TimingHistory.tileEntityTicks += this.blockEntityTickers.size(); // Paper @@ -1857,7 +1857,7 @@ index fd0a9350e4b08daff437d4d054803d72aec5c950..b58402221840a9e72b30a31d884b0fb2 this.spigotConfig.currentPrimedTnt = 0; // Spigot } -@@ -1568,7 +1568,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1567,7 +1567,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { @Override public List getEntities(@Nullable Entity except, AABB box, Predicate predicate) { @@ -1866,7 +1866,7 @@ index fd0a9350e4b08daff437d4d054803d72aec5c950..b58402221840a9e72b30a31d884b0fb2 List list = Lists.newArrayList(); ((ServerLevel)this).getEntityLookup().getEntities(except, box, list, predicate); // Paper - optimise this call return list; -@@ -1587,7 +1587,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1586,7 +1586,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { } public void getEntities(EntityTypeTest filter, AABB box, Predicate predicate, List result, int limit) { @@ -1875,7 +1875,7 @@ index fd0a9350e4b08daff437d4d054803d72aec5c950..b58402221840a9e72b30a31d884b0fb2 // Paper start - optimise this call //TODO use limit if (filter instanceof net.minecraft.world.entity.EntityType entityTypeTest) { -@@ -1846,7 +1846,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1845,7 +1845,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { } public ProfilerFiller getProfiler() { @@ -1885,7 +1885,7 @@ index fd0a9350e4b08daff437d4d054803d72aec5c950..b58402221840a9e72b30a31d884b0fb2 } diff --git a/src/main/java/net/minecraft/world/level/NaturalSpawner.java b/src/main/java/net/minecraft/world/level/NaturalSpawner.java -index 9a0a16d09a4cda3c2303dabe70db6c3018f3dd08..5a31e0e13a49faa96c0a8927aebb131cb30dacbc 100644 +index 4e786cd3bc65d762c122f61ccb450bcd0887a745..de48cdb665a43f1df94bfbe740d32b4e3609eec8 100644 --- a/src/main/java/net/minecraft/world/level/NaturalSpawner.java +++ b/src/main/java/net/minecraft/world/level/NaturalSpawner.java @@ -132,7 +132,7 @@ public final class NaturalSpawner { @@ -1905,9 +1905,9 @@ index 9a0a16d09a4cda3c2303dabe70db6c3018f3dd08..5a31e0e13a49faa96c0a8927aebb131c + //world.getProfiler().pop(); // Purpur } - // Paper start + // Paper start - Add mobcaps commands diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -index 757dc4292d371e697f336c4665427b3b4a3aa73b..c37aa33134b8602caae5ecff00439ad5e0005d18 100644 +index 134d2d56af71aceb1ca33d7bb708124655c5d319..f782fee9243129d0990777dcd2d74735ceb5e64e 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java @@ -457,11 +457,11 @@ public class LevelChunk extends ChunkAccess { @@ -1947,12 +1947,12 @@ index 757dc4292d371e697f336c4665427b3b4a3aa73b..c37aa33134b8602caae5ecff00439ad5 if (throwable instanceof ThreadDeath) throw throwable; // Paper // Paper start - Prevent tile entity and entity crashes diff --git a/src/main/java/net/minecraft/world/level/pathfinder/PathFinder.java b/src/main/java/net/minecraft/world/level/pathfinder/PathFinder.java -index d23481453717f715124156b5d83f6448f720d049..a8af51a25b0f99c3a64d9150fdfcd6b818aa7581 100644 +index eb18494bd7257fa5eb00dea16cf4d5667b796f2b..f039d6109ee6f55542adc8f30476ba9a9e4974bf 100644 --- a/src/main/java/net/minecraft/world/level/pathfinder/PathFinder.java +++ b/src/main/java/net/minecraft/world/level/pathfinder/PathFinder.java @@ -53,8 +53,8 @@ public class PathFinder { @Nullable - // Paper start - optimize collection + // Paper start - Perf: remove streams and optimize collection private Path findPath(ProfilerFiller profiler, Node startNode, List> positions, float followRange, int distance, float rangeMultiplier) { - profiler.push("find_path"); - profiler.markForCharting(MetricCategory.PATH_FINDING); diff --git a/patches/server/0266-Add-more-logger-output-for-invalid-movement-kicks.patch b/patches/server/0266-Add-more-logger-output-for-invalid-movement-kicks.patch index 89e52f4f9..618477cb5 100644 --- a/patches/server/0266-Add-more-logger-output-for-invalid-movement-kicks.patch +++ b/patches/server/0266-Add-more-logger-output-for-invalid-movement-kicks.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add more logger output for invalid movement kicks diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 35240470ee13099dcd857831cf2e863e53af52a7..99d31feec32881c1c5729230ac81a986c2b2baeb 100644 +index 3451fc27983d6ae2bc53568843d9f87f4e456b57..dc2c43794841af062b325a90fd5f68f581b99317 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -737,6 +737,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -734,6 +734,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl if (packet.getId() == this.awaitingTeleport) { if (this.awaitingPositionFromClient == null) { this.disconnect(Component.translatable("multiplayer.disconnect.invalid_player_movement"), org.bukkit.event.player.PlayerKickEvent.Cause.INVALID_PLAYER_MOVEMENT); // Paper - kick event cause @@ -16,7 +16,7 @@ index 35240470ee13099dcd857831cf2e863e53af52a7..99d31feec32881c1c5729230ac81a986 return; } -@@ -1353,8 +1354,16 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1350,8 +1351,16 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl @Override public void handleMovePlayer(ServerboundMovePlayerPacket packet) { PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel()); diff --git a/patches/server/0275-Add-item-packet-serialize-event.patch b/patches/server/0275-Add-item-packet-serialize-event.patch index 63aadd36b..58e0a6159 100644 --- a/patches/server/0275-Add-item-packet-serialize-event.patch +++ b/patches/server/0275-Add-item-packet-serialize-event.patch @@ -36,22 +36,22 @@ index b863249ff7e13cf4939c8961601f0564c62fd661..bdcfd80f937c34956911373905d66424 this.writeId(BuiltInRegistries.ITEM, item); diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 9424785e55c8f31bd6c6029e2d3a6f9fa5e571df..6f94f01da0a2294f6fdc564653dde1fdbf508153 100644 +index c6403274658ccaa2ed27e586cc35d13c760f2040..16b5f59dd3658bb9fc5be629aa4e1bc0ce356243 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -1719,6 +1719,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0; // Purpur - Iterator iterator = this.getAllLevels().iterator(); // Paper - move down + Iterator iterator = this.getAllLevels().iterator(); // Paper - Throw exception on world create while being ticked; move down while (iterator.hasNext()) { ServerLevel worldserver = (ServerLevel) iterator.next(); diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 99d31feec32881c1c5729230ac81a986c2b2baeb..099bc9d4c1bbf677e633377a0b69e234a0685385 100644 +index dc2c43794841af062b325a90fd5f68f581b99317..d7ff08767fe6b14f18386651666c42903a52ec1c 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -3382,6 +3382,12 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -3377,6 +3377,12 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl } } } 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 6b8f51c09..7d1f05d58 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,7 +5,7 @@ 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 8127456194ef6bdd6212553d0d78618519e6a429..e352dc0fa07f0b5431c4d4b2cff95fa3485d31dd 100644 +index 00ec6661f07d9b8dc3744c4d2d128643f680c8d8..56c150d037964e82d9aa3fac2008dc1e14cced8c 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 { @@ -48,7 +48,7 @@ index 220513d3fd5645322886522ea4f6b8c55d043b3c..d45a2f49c82d00801578c34e5f5277fc org.bukkit.event.entity.EntityShootBowEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callEntityShootBowEvent(entityhuman, stack, itemstack1, entityarrow, entityhuman.getUsedItemHand(), f, !flag1); if (event.isCancelled()) { diff --git a/src/main/java/net/minecraft/world/item/CrossbowItem.java b/src/main/java/net/minecraft/world/item/CrossbowItem.java -index 0a0f19f73a6a4e5aece7c17089dc4d31ed2a5299..2c51a73ebfd05af21b0f5d731fc9f1df77fed1a1 100644 +index b112845e94d354bbadff67673ea0b4939672bd3e..62f291abef664d8bccd682db9de8d0ae6fe2b9bd 100644 --- a/src/main/java/net/minecraft/world/item/CrossbowItem.java +++ b/src/main/java/net/minecraft/world/item/CrossbowItem.java @@ -291,6 +291,14 @@ public class CrossbowItem extends ProjectileWeaponItem implements Vanishable { @@ -67,7 +67,7 @@ index 0a0f19f73a6a4e5aece7c17089dc4d31ed2a5299..2c51a73ebfd05af21b0f5d731fc9f1df } diff --git a/src/main/java/net/minecraft/world/item/TridentItem.java b/src/main/java/net/minecraft/world/item/TridentItem.java -index 07695068fafd170ca88ad109d83dea93c387d794..ec5daeef857fdad6c7659130fb42f52cf6eb491f 100644 +index 3f922008f928ed077e9ddfd4384ed7bbf7cb293d..dcd6f241271beecf9601e34547225d7921958c20 100644 --- a/src/main/java/net/minecraft/world/item/TridentItem.java +++ b/src/main/java/net/minecraft/world/item/TridentItem.java @@ -82,6 +82,14 @@ public class TridentItem extends Item implements Vanishable { @@ -83,7 +83,7 @@ index 07695068fafd170ca88ad109d83dea93c387d794..ec5daeef857fdad6c7659130fb42f52c + // Purpur end + // CraftBukkit start - // Paper start + // Paper start - PlayerLaunchProjectileEvent com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent event = new com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent((org.bukkit.entity.Player) entityhuman.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(stack), (org.bukkit.entity.Projectile) entitythrowntrident.getBukkitEntity()); diff --git a/src/main/java/net/minecraft/world/level/storage/loot/functions/LootingEnchantFunction.java b/src/main/java/net/minecraft/world/level/storage/loot/functions/LootingEnchantFunction.java index 3fb1e558c3510243c94981211f9a0e5e0ef1895b..e5177e5ffcac360f935f2139db4554c6586b551e 100644 diff --git a/patches/server/0284-Fire-Immunity-API.patch b/patches/server/0284-Fire-Immunity-API.patch index 4b57f96e5..35678fba8 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 8982bed656387e469e324097d627c892a36907d0..3e08ac7243b8c75ce203252c5bdaebdc540687a3 100644 +index 805991ef816ad5ae82ed26781ec265173a8f192c..66e99e9aceb1c44ecfdecea992bead1e1c42cbed 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -424,6 +424,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -423,6 +423,7 @@ 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 @@ -16,7 +16,7 @@ index 8982bed656387e469e324097d627c892a36907d0..3e08ac7243b8c75ce203252c5bdaebdc public void setOrigin(@javax.annotation.Nonnull Location location) { this.origin = location.toVector(); -@@ -1818,7 +1819,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -1817,7 +1818,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } public boolean fireImmune() { @@ -25,7 +25,7 @@ index 8982bed656387e469e324097d627c892a36907d0..3e08ac7243b8c75ce203252c5bdaebdc } public boolean causeFallDamage(float fallDistance, float damageMultiplier, DamageSource damageSource) { -@@ -2510,6 +2511,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -2509,6 +2510,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S nbttagcompound.putBoolean("Paper.FreezeLock", true); } // Paper end @@ -37,7 +37,7 @@ index 8982bed656387e469e324097d627c892a36907d0..3e08ac7243b8c75ce203252c5bdaebdc return nbttagcompound; } catch (Throwable throwable) { CrashReport crashreport = CrashReport.forThrowable(throwable, "Saving entity NBT"); -@@ -2657,6 +2663,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -2656,6 +2662,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S freezeLocked = nbt.getBoolean("Paper.FreezeLock"); } // Paper end @@ -50,7 +50,7 @@ index 8982bed656387e469e324097d627c892a36907d0..3e08ac7243b8c75ce203252c5bdaebdc } 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 ea5ac1f53309fdd30aad40fd4a092f297d76fd61..315c9be5841d55910500fcc225b5e42f271cf2cb 100644 +index 2ef6dc2390ed622eda284e3b4c85ec64e057c981..6a24595db93c834955df3a5566705b1c5066acc6 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 { @@ -71,7 +71,7 @@ index ea5ac1f53309fdd30aad40fd4a092f297d76fd61..315c9be5841d55910500fcc225b5e42f 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 14d6ff11c8b8b047ada5d308515e9d214cf77b69..ba33fb0b049a670851004022da18fe744dca27eb 100644 +index e99007570a89eebe3c85ad549cf24286514306f8..480adbfdd084a6291ee0108e5350ea418e08ff6f 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 6384f3c2d..169bd45e3 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 3e08ac7243b8c75ce203252c5bdaebdc540687a3..94f1d86a5d2197f55a210084ba913f4403c7d1ab 100644 +index 66e99e9aceb1c44ecfdecea992bead1e1c42cbed..f10933fc78cbb0ead042c1870d93d0447f640896 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -927,6 +927,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -926,6 +926,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 diff --git a/patches/server/0288-End-Crystal-Cramming.patch b/patches/server/0288-End-Crystal-Cramming.patch index f972b87aa..649be02ba 100644 --- a/patches/server/0288-End-Crystal-Cramming.patch +++ b/patches/server/0288-End-Crystal-Cramming.patch @@ -5,17 +5,17 @@ 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 564d17bc460e2a04947ff9676fbf4c8b1569659c..440add62fcfa62d483409e1aecfc91591ba476c3 100644 +index 85ae4790e9079c60a266a029c9c19bd0955300b2..c52b3d9dec7d04305cd4515e0af74d2f201702d4 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 { } } - // Paper end + // Paper end - Fix invulnerable end crystals + if (this.level().purpurConfig.endCrystalCramming > 0 && this.level().getEntitiesOfClass(EndCrystal.class, getBoundingBox()).size() > this.level().purpurConfig.endCrystalCramming) this.hurt(this.damageSources().cramming(), 6.0F); // Purpur } - // Purpur start + } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java index 029e989caeb427997821216d14ef03b2099bcd58..cd0ce2e5e80ab2519247d8e6cfa2084455101034 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java diff --git a/patches/server/0289-Option-to-allow-beacon-effects-when-covered-by-tinte.patch b/patches/server/0289-Option-to-allow-beacon-effects-when-covered-by-tinte.patch index 03fc4c199..a255686cc 100644 --- a/patches/server/0289-Option-to-allow-beacon-effects-when-covered-by-tinte.patch +++ b/patches/server/0289-Option-to-allow-beacon-effects-when-covered-by-tinte.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Option to allow beacon effects when covered by tinted glass diff --git a/src/main/java/net/minecraft/world/level/block/entity/BeaconBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/BeaconBlockEntity.java -index a5f9747be5503dd24abd98f11cfa8229448ca3bf..99ef8d7e3ee0ee9777d12ad825e728c38d886114 100644 +index 39b15512dbff3739f0339278cf350006429fdbbd..4f4568c4ed1c3d6551467a18200f8eafb0a54351 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/BeaconBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/BeaconBlockEntity.java @@ -174,6 +174,7 @@ public class BeaconBlockEntity extends BlockEntity implements MenuProvider, Name @@ -32,7 +32,7 @@ index a5f9747be5503dd24abd98f11cfa8229448ca3bf..99ef8d7e3ee0ee9777d12ad825e728c3 - if (blockEntity.levels > 0 && !blockEntity.beamSections.isEmpty()) { + if (blockEntity.levels > 0 && (!blockEntity.beamSections.isEmpty() || (world.purpurConfig.beaconAllowEffectsWithTintedGlass && isTintedGlass))) { - BeaconBlockEntity.applyEffects(world, pos, blockEntity.levels, blockEntity.primaryPower, blockEntity.secondaryPower, blockEntity); // Paper + BeaconBlockEntity.applyEffects(world, pos, blockEntity.levels, blockEntity.primaryPower, blockEntity.secondaryPower, blockEntity); // Paper - Custom beacon ranges BeaconBlockEntity.playSound(world, pos, SoundEvents.BEACON_AMBIENT); } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java diff --git a/patches/server/0296-Make-GUI-Great-Again.patch b/patches/server/0296-Make-GUI-Great-Again.patch index 42a745a79..bf4761b74 100644 --- a/patches/server/0296-Make-GUI-Great-Again.patch +++ b/patches/server/0296-Make-GUI-Great-Again.patch @@ -96,7 +96,7 @@ index 0000000000000000000000000000000000000000..15a226e3854d731f7724025ea3459c8a + } +} diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java -index d56fab50babe37865d0a40b7088b011c8ff6af88..d21260dd1b7305949f063123b427dec1f5a00ae5 100644 +index 21e7099755b72dbc3489eb9fcb97910b0605e2a2..043a48d8c90e2e008b06fb5a643378a0fa948aaa 100644 --- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java @@ -99,6 +99,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface @@ -108,7 +108,7 @@ index d56fab50babe37865d0a40b7088b011c8ff6af88..d21260dd1b7305949f063123b427dec1 /* jline.console.ConsoleReader bufferedreader = DedicatedServer.this.reader; diff --git a/src/main/java/net/minecraft/server/gui/MinecraftServerGui.java b/src/main/java/net/minecraft/server/gui/MinecraftServerGui.java -index dd9f611efc95f7d06fd3011fedd5d0317b1d0a85..64e12201e164f4dc8070711605dcfcb6e56421f6 100644 +index c42a9949c4d37d45883867a54222a7ab33944b39..7f07ffab0835d45d4d170fe171d7fa996d5913d9 100644 --- a/src/main/java/net/minecraft/server/gui/MinecraftServerGui.java +++ b/src/main/java/net/minecraft/server/gui/MinecraftServerGui.java @@ -43,6 +43,11 @@ public class MinecraftServerGui extends JComponent { @@ -136,10 +136,10 @@ index dd9f611efc95f7d06fd3011fedd5d0317b1d0a85..64e12201e164f4dc8070711605dcfcb6 jframe.pack(); jframe.setLocationRelativeTo((Component) null); jframe.setVisible(true); -- jframe.setName("Minecraft server"); // Paper -+ jframe.setName("Purpur Minecraft server"); // Paper // Purpur +- jframe.setName("Minecraft server"); // Paper - Improve ServerGUI ++ jframe.setName("Purpur Minecraft server"); // Paper - Improve ServerGUI // Purpur - // Paper start - Add logo as frame image + // Paper start - Improve ServerGUI try { @@ -71,7 +76,7 @@ public class MinecraftServerGui extends JComponent { jframe.addWindowListener(new WindowAdapter() { diff --git a/patches/server/0297-Stored-Bee-API.patch b/patches/server/0297-Stored-Bee-API.patch index 4ff9f6b4e..fa37357ce 100644 --- a/patches/server/0297-Stored-Bee-API.patch +++ b/patches/server/0297-Stored-Bee-API.patch @@ -5,7 +5,7 @@ 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 8a163b5d3c7759abe4fe84bfec788a15fddc1e44..f5bcfece7bba52234964da646370bc271043a631 100644 +index 1b47b0ff7b42373ca25d13fdfbaf2bfd92337632..f9b4ac5acaf809e1eb9d10d87dd0e17c63d1e3c5 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 { @@ -54,7 +54,7 @@ index 8a163b5d3c7759abe4fe84bfec788a15fddc1e44..f5bcfece7bba52234964da646370bc27 - final CompoundTag entityData; + public final CompoundTag entityData; // Purpur - make public int ticksInHive; - int exitTickCounter; // Paper - separate counter for checking if bee should exit to reduce exit attempts + int exitTickCounter; // Paper - Fix bees aging inside hives; separate counter for checking if bee should exit to reduce exit attempts final int minOccupationTicks; diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBeehive.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBeehive.java index 2e51fab98d95c93d2095f7be6dbb5d5474158bfb..32285c8e0f42897793759fba85a1e8658750c843 100644 diff --git a/patches/server/0304-Add-hover-lines-API.patch b/patches/server/0304-Add-hover-lines-API.patch index 0bdf3ec07..453474d45 100644 --- a/patches/server/0304-Add-hover-lines-API.patch +++ b/patches/server/0304-Add-hover-lines-API.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add hover lines API diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java -index 090ba0b85fe72419c419cc72b5584ec391c0cfa1..e46018774aa99453f6fbb5dbb19513469d808700 100644 +index 71aac5d4cf29cea9daa378fc8ac584750de4d1ca..0496871db7437322d3932ca3d3504d84af832d90 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java -@@ -597,4 +597,17 @@ public final class CraftItemFactory implements ItemFactory { +@@ -596,4 +596,17 @@ public final class CraftItemFactory implements ItemFactory { return CraftItemStack.asCraftMirror(enchanted); } // Paper end - enchantWithLevels API