From b2692f787a17c5ec5e31a78f121fdcf7d6c70066 Mon Sep 17 00:00:00 2001 From: Dreeam <61569423+Dreeam-qwq@users.noreply.github.com> Date: Fri, 5 Jul 2024 02:30:31 +0800 Subject: [PATCH] Updated Upstream (Gale/Purpur) --- gradle.properties | 2 +- patches/api/0004-Purpur-API-Changes.patch | 95 ++++++++- .../0001-Purpur-generated-api-Changes.patch | 2 +- patches/server/0001-Rebrand.patch | 6 +- ...fferfish-Dynamic-Activation-of-Brain.patch | 8 +- .../server/0009-Pufferfish-Entity-TTL.patch | 4 +- .../server/0010-Purpur-Server-Changes.patch | 197 +++++++++--------- ...11-Fix-Pufferfish-and-Purpur-patches.patch | 22 +- ...-Purpur-Configurable-server-mod-name.patch | 4 +- patches/server/0014-Remove-Timings.patch | 86 ++++---- .../server/0027-Slice-Smooth-Teleports.patch | 4 +- patches/server/0029-Leaves-Server-Utils.patch | 10 +- .../server/0030-Leaves-Protocol-Core.patch | 6 +- .../0033-Leaves-Xaero-Map-Protocol.patch | 4 +- .../server/0038-Petal-Async-Pathfinding.patch | 24 +-- ...educe-work-done-by-game-event-system.patch | 8 +- patches/server/0041-Reduce-canSee-work.patch | 4 +- .../server/0042-Faster-Natural-Spawning.patch | 19 +- ...g-of-futures-for-chunk-structure-gen.patch | 4 +- ...p-EntityScheduler-s-executeTick-chec.patch | 6 +- patches/server/0057-Fix-MC-2025.patch | 6 +- ...reating-stats-json-bases-on-player-n.patch | 6 +- ...Configurable-chat-message-signatures.patch | 6 +- ...0075-Configurable-connection-message.patch | 4 +- 24 files changed, 319 insertions(+), 218 deletions(-) diff --git a/gradle.properties b/gradle.properties index 514cd0a5..6854bb6b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ group = cn.dreeam.leaf mcVersion = 1.21 version = 1.21-R0.1-SNAPSHOT -galeCommit = ada349d08f048fd80bd55f8bfcb881cd16794832 +galeCommit = b0fa55650a17377380cc2d7ccada3c6f6e9b6ac1 org.gradle.caching = true org.gradle.parallel = true diff --git a/patches/api/0004-Purpur-API-Changes.patch b/patches/api/0004-Purpur-API-Changes.patch index c5f9acf8..b1730cc3 100644 --- a/patches/api/0004-Purpur-API-Changes.patch +++ b/patches/api/0004-Purpur-API-Changes.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Purpur API Changes Original license: MIT Original project: https://github.com/PurpurMC/Purpur -Commit: 39617d5c9df0ed67f4b9c7cbcbc4f23a0dbae37e +Commit: 1ab7990b142ad633a758449d88671ff2a62e71e3 Patches below are removed in this patch: Pufferfish-API-Changes.patch @@ -1240,7 +1240,7 @@ index c60be4fd24c7fdf65251dd6169e5e1ac3b588d95..569deccd2f1cf21da9b5906433ac493c + // Purpur end } diff --git a/src/main/java/org/bukkit/inventory/ItemStack.java b/src/main/java/org/bukkit/inventory/ItemStack.java -index 8bbd98ea729755e7666403b96f277fd419560951..cb37a8af9e54349fc8a3eb70bbe2fddaaa3767d6 100644 +index b3abe3bde05d4a360e31e490bff8a859dc2bd4a6..9b8b958ce181b60eb5db89d4720380153152a2ac 100644 --- a/src/main/java/org/bukkit/inventory/ItemStack.java +++ b/src/main/java/org/bukkit/inventory/ItemStack.java @@ -19,6 +19,17 @@ import org.bukkit.inventory.meta.ItemMeta; @@ -2414,6 +2414,97 @@ index 0000000000000000000000000000000000000000..519809eab5d926dc7b0a7bad5d446d0d + return handlers; + } +} +diff --git a/src/main/java/org/purpurmc/purpur/event/PlayerSetTrialSpawnerTypeWithEggEvent.java b/src/main/java/org/purpurmc/purpur/event/PlayerSetTrialSpawnerTypeWithEggEvent.java +new file mode 100644 +index 0000000000000000000000000000000000000000..c8d206abf8f6a08f746322e63d198a368311f28d +--- /dev/null ++++ b/src/main/java/org/purpurmc/purpur/event/PlayerSetTrialSpawnerTypeWithEggEvent.java +@@ -0,0 +1,85 @@ ++package org.purpurmc.purpur.event; ++ ++import org.bukkit.block.Block; ++import org.bukkit.block.TrialSpawner; ++import org.bukkit.entity.EntityType; ++import org.bukkit.entity.Player; ++import org.bukkit.event.Cancellable; ++import org.bukkit.event.HandlerList; ++import org.bukkit.event.player.PlayerEvent; ++import org.jetbrains.annotations.NotNull; ++ ++public class PlayerSetTrialSpawnerTypeWithEggEvent extends PlayerEvent implements Cancellable { ++ private static final HandlerList handlers = new HandlerList(); ++ private final Block block; ++ private final TrialSpawner spawner; ++ private EntityType type; ++ private boolean cancel; ++ ++ public PlayerSetTrialSpawnerTypeWithEggEvent(@NotNull Player player, @NotNull Block block, @NotNull TrialSpawner spawner, @NotNull EntityType type) { ++ super(player); ++ this.block = block; ++ this.spawner = spawner; ++ this.type = type; ++ } ++ ++ /** ++ * Get the spawner Block in the world ++ * ++ * @return Spawner Block ++ */ ++ @NotNull ++ public Block getBlock() { ++ return block; ++ } ++ ++ /** ++ * Get the spawner state ++ * ++ * @return Spawner state ++ */ ++ @NotNull ++ public TrialSpawner getSpawner() { ++ return spawner; ++ } ++ ++ /** ++ * Gets the EntityType being set on the spawner ++ * ++ * @return EntityType being set ++ */ ++ @NotNull ++ public EntityType getEntityType() { ++ return type; ++ } ++ ++ /** ++ * Sets the EntityType being set on the spawner ++ * ++ * @param type EntityType to set ++ */ ++ public void setEntityType(@NotNull EntityType type) { ++ this.type = type; ++ } ++ ++ @Override ++ public boolean isCancelled() { ++ return cancel; ++ } ++ ++ @Override ++ public void setCancelled(boolean cancel) { ++ this.cancel = cancel; ++ } ++ ++ @Override ++ @NotNull ++ public HandlerList getHandlers() { ++ return handlers; ++ } ++ ++ @NotNull ++ public static HandlerList getHandlerList() { ++ return handlers; ++ } ++} diff --git a/src/main/java/org/purpurmc/purpur/event/PreBlockExplodeEvent.java b/src/main/java/org/purpurmc/purpur/event/PreBlockExplodeEvent.java new file mode 100644 index 0000000000000000000000000000000000000000..8ea97ddceedb7c719e8a50a0dd8f3f0919ca1647 diff --git a/patches/generated-api/0001-Purpur-generated-api-Changes.patch b/patches/generated-api/0001-Purpur-generated-api-Changes.patch index 75509fea..7f73fd6d 100644 --- a/patches/generated-api/0001-Purpur-generated-api-Changes.patch +++ b/patches/generated-api/0001-Purpur-generated-api-Changes.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Purpur generated-api Changes Original license: MIT Original project: https://github.com/PurpurMC/Purpur -Commit: 39617d5c9df0ed67f4b9c7cbcbc4f23a0dbae37e +Commit: 1ab7990b142ad633a758449d88671ff2a62e71e3 diff --git a/com/destroystokyo/paper/entity/ai/VanillaGoal.java b/com/destroystokyo/paper/entity/ai/VanillaGoal.java index 3add91218dd3f07052aa932f0503d1f10ac3799b..3e41a4141095bce989c75e989293deb3f47e8e6d 100644 diff --git a/patches/server/0001-Rebrand.patch b/patches/server/0001-Rebrand.patch index d9922f10..807a919d 100644 --- a/patches/server/0001-Rebrand.patch +++ b/patches/server/0001-Rebrand.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Rebrand diff --git a/build.gradle.kts b/build.gradle.kts -index 13d1908b378e5311d8bb7f9317b4b1c2d82ea042..4c35e52cd78963238a457ba3efece5c8a1bcc260 100644 +index eae5b87677ac577ceafc6371647e92178627116f..955413bc5717b73054777d36c8b06da8817f8271 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -13,7 +13,7 @@ configurations.named(log4jPlugins.compileClasspathConfigurationName) { @@ -150,10 +150,10 @@ index b24265573fdef5d9a964bcd76146f34542c420cf..aa25fd3ee043003f359b2c67a6d0f670 public SystemReport getSystemReport() { diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 25d1b4512f81802c658a5e0a03c8212ad69ac04e..44a9ed9f06818f8bcf4caf673c4e6b02f6ed924e 100644 +index 603c50248cf8ea5b1d55cdd1c84c7d49b1c5f8ff..dd5e21e737ebcec7a69ef66908c50a959786b17e 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -956,7 +956,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop. diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 02d870e451b7eb1cff89a97fee7530b667affd50..7318904311c4b15f4588a61009a2652c140cbf07 100644 +index 0d1c24dc6da1541e934aeb6294f748d0ed358318..9258b0b48ecf76d4227c6851ea15986c6ee4ca1e 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -700,6 +700,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -717,6 +717,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. org.spigotmc.ActivationRange.activateEntities(this); // Spigot this.timings.entityTick.startTiming(); // Spigot this.entityTickList.forEach((entity) -> { @@ -44,10 +44,10 @@ index 02d870e451b7eb1cff89a97fee7530b667affd50..7318904311c4b15f4588a61009a2652c if (false && this.shouldDiscardEntity(entity)) { // CraftBukkit - We prevent spawning in general, so this butchering is not needed entity.discard(); diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 4d7c4907e0b73f63db3d7625b33eaa3439a2b801..e65023682f1527f86c311229646b5b2a7c6d62bb 100644 +index 0170337bc9b2837d542d0235039c15d5e8dffba2..41949355c18e45424ee94107ad09922a13a05a61 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -430,6 +430,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -431,6 +431,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess private UUID originWorld; public boolean freezeLocked = false; // Paper - Freeze Tick Lock API public boolean fixedPose = false; // Paper - Expand Pose API diff --git a/patches/server/0009-Pufferfish-Entity-TTL.patch b/patches/server/0009-Pufferfish-Entity-TTL.patch index 45c7cdbd..48eebaae 100644 --- a/patches/server/0009-Pufferfish-Entity-TTL.patch +++ b/patches/server/0009-Pufferfish-Entity-TTL.patch @@ -7,10 +7,10 @@ Original license: GPL v3 Original project: https://github.com/pufferfish-gg/Pufferfish diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 1fc95388c3391082f19455c5cff65e98c856b797..55f544a7a7253cd6619ef43d26f17b38ccb375ea 100644 +index 41949355c18e45424ee94107ad09922a13a05a61..c820ea4aa07c00bcd3a66616e774662950b65451 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -828,6 +828,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -829,6 +829,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } public void tick() { diff --git a/patches/server/0010-Purpur-Server-Changes.patch b/patches/server/0010-Purpur-Server-Changes.patch index 3f7f77a2..1df4f3eb 100644 --- a/patches/server/0010-Purpur-Server-Changes.patch +++ b/patches/server/0010-Purpur-Server-Changes.patch @@ -8,7 +8,7 @@ TODO - Dreeam: Check Fix-pufferfish-issues.patch Original license: MIT Original project: https://github.com/PurpurMC/Purpur -Commit: 39617d5c9df0ed67f4b9c7cbcbc4f23a0dbae37e +Commit: 1ab7990b142ad633a758449d88671ff2a62e71e3 Patches below are removed in this patch: Brand changes in Rebrand.patch @@ -699,7 +699,7 @@ index 8841f0376a7676922362b6d06c2af752d1319737..207f8f864f0cf5874f8cad9bd15fa5e9 Bootstrap.bootStrap(); Bootstrap.validate(); diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 44a9ed9f06818f8bcf4caf673c4e6b02f6ed924e..b5fd90764d954acd0381cf42c38d5015c200b886 100644 +index dd5e21e737ebcec7a69ef66908c50a959786b17e..200e76648fb98a5d289682c75a2ecb6b614ec4af 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -289,6 +289,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0; // Paper - BlockPhysicsEvent worldserver.hasEntityMoveEvent = io.papermc.paper.event.entity.EntityMoveEvent.getHandlerList().getRegisteredListeners().length > 0; // Paper - Add EntityMoveEvent 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 @@ -1098,7 +1098,7 @@ index 8090e9b6bd8a3e93532322b5a61058545c7c3a6d..c8082ef01f956750565e82b93f3ce383 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/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 7318904311c4b15f4588a61009a2652c140cbf07..4b4529f68e4b2514e05b5403b2dab5672c1af7dd 100644 +index 9258b0b48ecf76d4227c6851ea15986c6ee4ca1e..cf05c216f05a81b5a666aba0d944586d4a3cff05 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -220,6 +220,8 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. @@ -1118,7 +1118,7 @@ index 7318904311c4b15f4588a61009a2652c140cbf07..4b4529f68e4b2514e05b5403b2dab567 public LevelChunk getChunkIfLoaded(int x, int z) { return this.chunkSource.getChunkAtIfLoadedImmediately(x, z); // Paper - Use getChunkIfLoadedImmediately -@@ -519,7 +522,24 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -536,7 +539,24 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. this.dragonParts = new Int2ObjectOpenHashMap(); this.tickTime = flag1; this.server = minecraftserver; @@ -1144,7 +1144,7 @@ index 7318904311c4b15f4588a61009a2652c140cbf07..4b4529f68e4b2514e05b5403b2dab567 this.serverLevelData = iworlddataserver; ChunkGenerator chunkgenerator = worlddimension.generator(); // CraftBukkit start -@@ -590,6 +610,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -607,6 +627,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. this.chunkTaskScheduler = new ca.spottedleaf.moonrise.patches.chunk_system.scheduling.ChunkTaskScheduler((ServerLevel)(Object)this, ca.spottedleaf.moonrise.common.util.MoonriseCommon.WORKER_POOL); // Paper end - rewrite chunk system this.getCraftServer().addWorld(this.getWorld()); // CraftBukkit @@ -1152,7 +1152,7 @@ index 7318904311c4b15f4588a61009a2652c140cbf07..4b4529f68e4b2514e05b5403b2dab567 } // Paper start -@@ -636,7 +657,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -653,7 +674,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. int i = this.getGameRules().getInt(GameRules.RULE_PLAYERS_SLEEPING_PERCENTAGE); long j; @@ -1161,7 +1161,7 @@ index 7318904311c4b15f4588a61009a2652c140cbf07..4b4529f68e4b2514e05b5403b2dab567 // CraftBukkit start j = this.levelData.getDayTime() + 24000L; TimeSkipEvent event = new TimeSkipEvent(this.getWorld(), TimeSkipEvent.SkipReason.NIGHT_SKIP, (j - j % 24000L) - this.getDayTime()); -@@ -758,6 +779,13 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -775,6 +796,13 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. this.serverLevelData.setGameTime(i); this.serverLevelData.getScheduledEvents().tick(this.server, i); if (this.levelData.getGameRules().getBoolean(GameRules.RULE_DAYLIGHT)) { @@ -1175,7 +1175,7 @@ index 7318904311c4b15f4588a61009a2652c140cbf07..4b4529f68e4b2514e05b5403b2dab567 this.setDayTime(this.levelData.getDayTime() + 1L); } -@@ -766,8 +794,22 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -783,8 +811,22 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. public void setDayTime(long timeOfDay) { this.serverLevelData.setDayTime(timeOfDay); @@ -1198,7 +1198,7 @@ index 7318904311c4b15f4588a61009a2652c140cbf07..4b4529f68e4b2514e05b5403b2dab567 public void tickCustomSpawners(boolean spawnMonsters, boolean spawnAnimals) { Iterator iterator = this.customSpawners.iterator(); -@@ -804,10 +846,18 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -828,10 +870,18 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. 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 - Configurable spawn chances for skeleton horses if (flag1) { @@ -1219,7 +1219,7 @@ index 7318904311c4b15f4588a61009a2652c140cbf07..4b4529f68e4b2514e05b5403b2dab567 entityhorseskeleton.setAge(0); entityhorseskeleton.setPos((double) blockposition.getX(), (double) blockposition.getY(), (double) blockposition.getZ()); this.addFreshEntity(entityhorseskeleton, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.LIGHTNING); // CraftBukkit -@@ -912,7 +962,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -951,7 +1001,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. return holder.is(PoiTypes.LIGHTNING_ROD); }, (blockposition1) -> { return blockposition1.getY() == this.getHeight(Heightmap.Types.WORLD_SURFACE, blockposition1.getX(), blockposition1.getZ()) - 1; @@ -1228,7 +1228,7 @@ index 7318904311c4b15f4588a61009a2652c140cbf07..4b4529f68e4b2514e05b5403b2dab567 return optional.map((blockposition1) -> { return blockposition1.above(1); -@@ -961,11 +1011,27 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -1000,11 +1050,27 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. if (this.canSleepThroughNights()) { if (!this.getServer().isSingleplayer() || this.getServer().isPublished()) { int i = this.getGameRules().getInt(GameRules.RULE_PLAYERS_SLEEPING_PERCENTAGE); @@ -1257,7 +1257,7 @@ index 7318904311c4b15f4588a61009a2652c140cbf07..4b4529f68e4b2514e05b5403b2dab567 ichatmutablecomponent = Component.translatable("sleep.players_sleeping", this.sleepStatus.amountSleeping(), this.sleepStatus.sleepersNeeded(i)); } -@@ -1105,6 +1171,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -1144,6 +1210,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. @VisibleForTesting public void resetWeatherCycle() { // CraftBukkit start @@ -1265,7 +1265,7 @@ index 7318904311c4b15f4588a61009a2652c140cbf07..4b4529f68e4b2514e05b5403b2dab567 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.... -@@ -1112,6 +1179,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -1151,6 +1218,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. this.serverLevelData.setRainTime(0); } // CraftBukkit end @@ -1273,7 +1273,7 @@ index 7318904311c4b15f4588a61009a2652c140cbf07..4b4529f68e4b2514e05b5403b2dab567 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. -@@ -2486,7 +2554,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -2535,7 +2603,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. // Spigot Start if (entity.getBukkitEntity() instanceof org.bukkit.inventory.InventoryHolder && (!(entity instanceof ServerPlayer) || entity.getRemovalReason() != Entity.RemovalReason.KILLED)) { // SPIGOT-6876: closeInventory clears death message // Paper start - Fix merchant inventory not closing on entity removal @@ -1886,7 +1886,7 @@ index 1d11d0388b9763a0e0e5f3398425dafa2bb01488..72cf1372a7e685b3ff4cc852c3d38f7d } } catch (AuthenticationUnavailableException authenticationunavailableexception) { diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index b74f809138d657bcfcaa68fc30984e591b1e908b..d2153c3e909e7e75529ce6e41d649bf54b48752b 100644 +index 28354aa3ed55f7a86c210f805b1aecb5ae06b466..811a0c7ed06ecba3d6b4cd5d45a81c2d483bc53b 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -494,6 +494,7 @@ public abstract class PlayerList { @@ -1914,7 +1914,7 @@ index b74f809138d657bcfcaa68fc30984e591b1e908b..d2153c3e909e7e75529ce6e41d649bf5 event.disallow(PlayerLoginEvent.Result.KICK_FULL, net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacySection().deserialize(org.spigotmc.SpigotConfig.serverFullMessage)); // Spigot // Paper - Adventure } } -@@ -1077,6 +1079,20 @@ public abstract class PlayerList { +@@ -1078,6 +1080,20 @@ public abstract class PlayerList { } // CraftBukkit end @@ -1935,7 +1935,7 @@ index b74f809138d657bcfcaa68fc30984e591b1e908b..d2153c3e909e7e75529ce6e41d649bf5 public void broadcastAll(Packet packet, ResourceKey dimension) { Iterator iterator = this.players.iterator(); -@@ -1180,6 +1196,7 @@ public abstract class PlayerList { +@@ -1181,6 +1197,7 @@ public abstract class PlayerList { } else { b0 = (byte) (24 + permissionLevel); } @@ -1943,7 +1943,7 @@ index b74f809138d657bcfcaa68fc30984e591b1e908b..d2153c3e909e7e75529ce6e41d649bf5 player.connection.send(new ClientboundEntityEventPacket(player, b0)); } -@@ -1188,6 +1205,27 @@ public abstract class PlayerList { +@@ -1189,6 +1206,27 @@ public abstract class PlayerList { player.getBukkitEntity().recalculatePermissions(); // CraftBukkit this.server.getCommands().sendCommands(player); } // Paper - Add sendOpLevel API @@ -2228,7 +2228,7 @@ index f43bf280999ff3860cc702def50cc62b131eb1bd..66d9e99a351f5fc6cf58be3bee4397d9 } diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 5210fc4a74dde64bd0e40a4521aa320424bde428..7c3aec4c19954b3823ece1122c779beccdb6dea6 100644 +index c820ea4aa07c00bcd3a66616e774662950b65451..2c669b29d858d8d020484db7a06bf1e132e41529 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -168,7 +168,7 @@ import org.bukkit.plugin.PluginManager; @@ -2240,7 +2240,7 @@ index 5210fc4a74dde64bd0e40a4521aa320424bde428..7c3aec4c19954b3823ece1122c779bec // CraftBukkit start private static final int CURRENT_LEVEL = 2; public boolean preserveMotion = true; // Paper - Fix Entity Teleportation and cancel velocity if teleported; keep initial motion on first setPositionRotation -@@ -344,6 +344,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -345,6 +345,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess public double xOld; public double yOld; public double zOld; @@ -2248,7 +2248,7 @@ index 5210fc4a74dde64bd0e40a4521aa320424bde428..7c3aec4c19954b3823ece1122c779bec public boolean noPhysics; public final RandomSource random; public int tickCount; -@@ -384,7 +385,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -385,7 +386,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess private final Set tags; private final double[] pistonDeltas; private long pistonDeltasGameTime; @@ -2257,7 +2257,7 @@ index 5210fc4a74dde64bd0e40a4521aa320424bde428..7c3aec4c19954b3823ece1122c779bec private float eyeHeight; public boolean isInPowderSnow; public boolean wasInPowderSnow; -@@ -432,6 +433,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -433,6 +434,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess public boolean fixedPose = false; // Paper - Expand Pose API public boolean activatedPriorityReset = false; // Pufferfish - DAB public int activatedPriority = org.dreeam.leaf.config.modules.opt.DynamicActivationofBrain.maximumActivationPrio; // Pufferfish - DAB (golf score) @@ -2265,7 +2265,7 @@ index 5210fc4a74dde64bd0e40a4521aa320424bde428..7c3aec4c19954b3823ece1122c779bec public void setOrigin(@javax.annotation.Nonnull Location location) { this.origin = location.toVector(); -@@ -533,6 +535,27 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -534,6 +536,27 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return this.getIndirectPassengersStream().anyMatch((entity) -> entity instanceof Player); } // Paper end - rewrite chunk system @@ -2293,7 +2293,7 @@ index 5210fc4a74dde64bd0e40a4521aa320424bde428..7c3aec4c19954b3823ece1122c779bec public Entity(EntityType type, Level world) { this.id = Entity.ENTITY_COUNTER.incrementAndGet(); -@@ -541,7 +564,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -542,7 +565,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess this.bb = Entity.INITIAL_AABB; this.stuckSpeedMultiplier = Vec3.ZERO; this.nextStep = 1.0F; @@ -2302,7 +2302,7 @@ index 5210fc4a74dde64bd0e40a4521aa320424bde428..7c3aec4c19954b3823ece1122c779bec this.remainingFireTicks = -this.getFireImmuneTicks(); this.fluidHeight = new Object2DoubleArrayMap(2); this.fluidOnEyes = new HashSet(); -@@ -924,10 +947,11 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -925,10 +948,11 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess public void checkBelowWorld() { // Paper start - Configurable nether ceiling damage @@ -2315,7 +2315,7 @@ index 5210fc4a74dde64bd0e40a4521aa320424bde428..7c3aec4c19954b3823ece1122c779bec this.onBelowWorld(); } -@@ -1763,7 +1787,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1764,7 +1788,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } public boolean fireImmune() { @@ -2324,7 +2324,7 @@ index 5210fc4a74dde64bd0e40a4521aa320424bde428..7c3aec4c19954b3823ece1122c779bec } public boolean causeFallDamage(float fallDistance, float damageMultiplier, DamageSource damageSource) { -@@ -1836,7 +1860,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1837,7 +1861,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return this.isInWater() || flag; } @@ -2333,7 +2333,7 @@ index 5210fc4a74dde64bd0e40a4521aa320424bde428..7c3aec4c19954b3823ece1122c779bec Entity entity = this.getVehicle(); if (entity instanceof Boat entityboat) { -@@ -2482,6 +2506,11 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -2483,6 +2507,11 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess nbttagcompound.putBoolean("Paper.FreezeLock", true); } // Paper end @@ -2345,7 +2345,7 @@ index 5210fc4a74dde64bd0e40a4521aa320424bde428..7c3aec4c19954b3823ece1122c779bec return nbttagcompound; } catch (Throwable throwable) { CrashReport crashreport = CrashReport.forThrowable(throwable, "Saving entity NBT"); -@@ -2629,6 +2658,11 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -2630,6 +2659,11 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess freezeLocked = nbt.getBoolean("Paper.FreezeLock"); } // Paper end @@ -2357,7 +2357,7 @@ index 5210fc4a74dde64bd0e40a4521aa320424bde428..7c3aec4c19954b3823ece1122c779bec } catch (Throwable throwable) { CrashReport crashreport = CrashReport.forThrowable(throwable, "Loading entity NBT"); -@@ -2790,6 +2824,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -2791,6 +2825,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess if (this.isAlive() && this instanceof Leashable leashable) { if (leashable.getLeashHolder() == player) { if (!this.level().isClientSide()) { @@ -2365,7 +2365,7 @@ index 5210fc4a74dde64bd0e40a4521aa320424bde428..7c3aec4c19954b3823ece1122c779bec // CraftBukkit start - fire PlayerUnleashEntityEvent // Paper start - Expand EntityUnleashEvent org.bukkit.event.player.PlayerUnleashEntityEvent event = CraftEventFactory.callPlayerUnleashEntityEvent(this, player, hand, !player.hasInfiniteMaterials()); -@@ -2993,6 +3028,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -2994,6 +3029,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess this.passengers = ImmutableList.copyOf(list); } @@ -2379,7 +2379,7 @@ index 5210fc4a74dde64bd0e40a4521aa320424bde428..7c3aec4c19954b3823ece1122c779bec this.gameEvent(GameEvent.ENTITY_MOUNT, passenger); } } -@@ -3032,6 +3074,14 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3033,6 +3075,14 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return false; } // CraftBukkit end @@ -2394,7 +2394,7 @@ index 5210fc4a74dde64bd0e40a4521aa320424bde428..7c3aec4c19954b3823ece1122c779bec if (this.passengers.size() == 1 && this.passengers.get(0) == entity) { this.passengers = ImmutableList.of(); } else { -@@ -3110,13 +3160,16 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3111,13 +3161,16 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return Vec3.directionFromRotation(this.getRotationVector()); } @@ -2411,7 +2411,7 @@ index 5210fc4a74dde64bd0e40a4521aa320424bde428..7c3aec4c19954b3823ece1122c779bec } else { this.portalProcess = new PortalProcessor(portal, pos.immutable()); } -@@ -3324,7 +3377,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3325,7 +3378,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } public int getMaxAirSupply() { @@ -2420,7 +2420,7 @@ index 5210fc4a74dde64bd0e40a4521aa320424bde428..7c3aec4c19954b3823ece1122c779bec } public int getAirSupply() { -@@ -4054,6 +4107,20 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4055,6 +4108,20 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return SlotAccess.NULL; } @@ -2441,7 +2441,7 @@ index 5210fc4a74dde64bd0e40a4521aa320424bde428..7c3aec4c19954b3823ece1122c779bec @Override public void sendSystemMessage(Component message) {} -@@ -4322,6 +4389,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4323,6 +4390,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return Mth.lerp(delta, this.yRotO, this.yRot); } @@ -2454,7 +2454,7 @@ index 5210fc4a74dde64bd0e40a4521aa320424bde428..7c3aec4c19954b3823ece1122c779bec public boolean updateFluidHeightAndDoFluidPushing(TagKey tag, double speed) { if (false && this.touchingUnloadedChunk()) { // Gale - Airplane - reduce entity fluid lookups if no fluids - cost of a lookup here is the same cost as below, so skip return false; -@@ -4729,7 +4802,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4730,7 +4803,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } public float maxUpStep() { @@ -2463,7 +2463,7 @@ index 5210fc4a74dde64bd0e40a4521aa320424bde428..7c3aec4c19954b3823ece1122c779bec } public void onExplosionHit(@Nullable Entity entity) {} -@@ -4921,4 +4994,44 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4922,4 +4995,44 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return ((net.minecraft.server.level.ServerChunkCache) level.getChunkSource()).isPositionTicking(this); } // Paper end - Expose entity id counter @@ -2647,7 +2647,7 @@ index 09fdea983772612ef3fff6b2da3cf469a34e4ec0..b69d924fa8034eabbf4aab8d3434f4f4 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 88bb6eb1a8c6551cb7fe71893f2e7f3c9db8c7bd..3b1789d448f07060dec6f5e097814057843aa95a 100644 +index 3c13810d03bf1c343195b9366554a046ff6112da..9f4257aaeedd6fcee6d7dc30a98423872c4f8e9b 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -236,9 +236,9 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -2824,7 +2824,7 @@ index 88bb6eb1a8c6551cb7fe71893f2e7f3c9db8c7bd..3b1789d448f07060dec6f5e097814057 LivingEntity entityliving2 = entitywolf.getOwner(); if (entityliving2 instanceof net.minecraft.world.entity.player.Player) { -@@ -1631,6 +1681,18 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1636,6 +1686,18 @@ public abstract class LivingEntity extends Entity implements Attackable { } } @@ -2843,7 +2843,7 @@ index 88bb6eb1a8c6551cb7fe71893f2e7f3c9db8c7bd..3b1789d448f07060dec6f5e097814057 org.bukkit.inventory.EquipmentSlot handSlot = (hand != null) ? org.bukkit.craftbukkit.CraftEquipmentSlot.getHand(hand) : null; EntityResurrectEvent event = new EntityResurrectEvent((org.bukkit.entity.LivingEntity) this.getBukkitEntity(), handSlot); event.setCancelled(itemstack == null); -@@ -1797,7 +1859,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1802,7 +1864,7 @@ public abstract class LivingEntity extends Entity implements Attackable { boolean flag = false; if (this.dead && adversary instanceof WitherBoss) { // Paper @@ -2852,7 +2852,7 @@ index 88bb6eb1a8c6551cb7fe71893f2e7f3c9db8c7bd..3b1789d448f07060dec6f5e097814057 BlockPos blockposition = this.blockPosition(); BlockState iblockdata = Blocks.WITHER_ROSE.defaultBlockState(); -@@ -1833,7 +1895,8 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1838,7 +1900,8 @@ public abstract class LivingEntity extends Entity implements Attackable { boolean flag = this.lastHurtByPlayerTime > 0; this.dropEquipment(); // CraftBukkit - from below @@ -2862,7 +2862,7 @@ index 88bb6eb1a8c6551cb7fe71893f2e7f3c9db8c7bd..3b1789d448f07060dec6f5e097814057 this.dropFromLootTable(damageSource, flag); // Paper start final boolean prev = this.clearEquipmentSlots; -@@ -1842,6 +1905,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1847,6 +1910,7 @@ public abstract class LivingEntity extends Entity implements Attackable { // Paper end this.dropCustomDeathLoot(world, damageSource, flag); this.clearEquipmentSlots = prev; // Paper @@ -2870,7 +2870,7 @@ index 88bb6eb1a8c6551cb7fe71893f2e7f3c9db8c7bd..3b1789d448f07060dec6f5e097814057 } // CraftBukkit start - Call death event // Paper start - call advancement triggers with correct entity equipment org.bukkit.event.entity.EntityDeathEvent deathEvent = CraftEventFactory.callEntityDeathEvent(this, damageSource, this.drops, () -> { -@@ -2614,7 +2678,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -2619,7 +2683,7 @@ public abstract class LivingEntity extends Entity implements Attackable { @Override protected void onBelowWorld() { @@ -2879,7 +2879,7 @@ index 88bb6eb1a8c6551cb7fe71893f2e7f3c9db8c7bd..3b1789d448f07060dec6f5e097814057 } protected void updateSwingTime() { -@@ -2972,6 +3036,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -2977,6 +3041,7 @@ public abstract class LivingEntity extends Entity implements Attackable { if (f3 > 0.0F) { this.playSound(this.getFallDamageSound((int) f3), 1.0F, 1.0F); @@ -2887,7 +2887,7 @@ index 88bb6eb1a8c6551cb7fe71893f2e7f3c9db8c7bd..3b1789d448f07060dec6f5e097814057 this.hurt(this.damageSources().flyIntoWall(), f3); } } -@@ -3526,8 +3591,10 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3531,8 +3596,10 @@ public abstract class LivingEntity extends Entity implements Attackable { this.pushEntities(); // Paper start - Add EntityMoveEvent @@ -2900,7 +2900,7 @@ index 88bb6eb1a8c6551cb7fe71893f2e7f3c9db8c7bd..3b1789d448f07060dec6f5e097814057 Location from = new Location(this.level().getWorld(), this.xo, this.yo, this.zo, this.yRotO, this.xRotO); Location to = new Location(this.level().getWorld(), this.getX(), this.getY(), this.getZ(), this.getYRot(), this.getXRot()); io.papermc.paper.event.entity.EntityMoveEvent event = new io.papermc.paper.event.entity.EntityMoveEvent(this.getBukkitLivingEntity(), from, to.clone()); -@@ -3537,12 +3604,55 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3542,12 +3609,55 @@ public abstract class LivingEntity extends Entity implements Attackable { this.absMoveTo(event.getTo().getX(), event.getTo().getY(), event.getTo().getZ(), event.getTo().getYaw(), event.getTo().getPitch()); } } @@ -2956,7 +2956,7 @@ index 88bb6eb1a8c6551cb7fe71893f2e7f3c9db8c7bd..3b1789d448f07060dec6f5e097814057 } public boolean isSensitiveToWater() { -@@ -3563,7 +3673,16 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3568,7 +3678,16 @@ public abstract class LivingEntity extends Entity implements Attackable { int j = i / 10; if (j % 2 == 0) { @@ -2974,7 +2974,7 @@ index 88bb6eb1a8c6551cb7fe71893f2e7f3c9db8c7bd..3b1789d448f07060dec6f5e097814057 } this.gameEvent(GameEvent.ELYTRA_GLIDE); -@@ -4502,6 +4621,12 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -4507,6 +4626,12 @@ public abstract class LivingEntity extends Entity implements Attackable { return EquipmentSlot.MAINHAND; } @@ -3268,18 +3268,18 @@ index f0703302e7dbbda88de8c648d20d87c55ed9b1e0..a913ebabaa5f443afa987b972355a8f8 } } diff --git a/src/main/java/net/minecraft/world/entity/ai/behavior/AcquirePoi.java b/src/main/java/net/minecraft/world/entity/ai/behavior/AcquirePoi.java -index f053ee19875e6c1586ffe4ebb0284172af5fbb23..848452ba2068c9b0ec6e253da0d0ef10fdec48b0 100644 +index b5242f2d450f863a3eb774d8a14bb00cbe699a16..4a13566621613f28a0a69b925c60fc211231f91e 100644 --- a/src/main/java/net/minecraft/world/entity/ai/behavior/AcquirePoi.java +++ b/src/main/java/net/minecraft/world/entity/ai/behavior/AcquirePoi.java -@@ -81,7 +81,7 @@ public class AcquirePoi { - } +@@ -82,7 +82,7 @@ public class AcquirePoi { }; - Set, BlockPos>> set = poiManager.findAllClosestFirstWithType( -- poiPredicate, predicate2, entity.blockPosition(), 48, PoiManager.Occupancy.HAS_SPACE -+ poiPredicate, predicate2, entity.blockPosition(), world.purpurConfig.villagerAcquirePoiSearchRadius, PoiManager.Occupancy.HAS_SPACE // Purpur - ) - .limit(5L) - .collect(Collectors.toSet()); + // Paper start - optimise POI access + java.util.List, BlockPos>> poiposes = new java.util.ArrayList<>(); +- io.papermc.paper.util.PoiAccess.findNearestPoiPositions(poiManager, poiPredicate, predicate2, entity.blockPosition(), 48, 48*48, PoiManager.Occupancy.HAS_SPACE, false, 5, poiposes); ++ io.papermc.paper.util.PoiAccess.findNearestPoiPositions(poiManager, poiPredicate, predicate2, entity.blockPosition(), world.purpurConfig.villagerAcquirePoiSearchRadius, 48*48, PoiManager.Occupancy.HAS_SPACE, false, 5, poiposes); // Purpur + Set, BlockPos>> set = new java.util.HashSet<>(poiposes); + // Paper end - optimise POI access + Path path = findPathToPois(entity, set); diff --git a/src/main/java/net/minecraft/world/entity/ai/behavior/HarvestFarmland.java b/src/main/java/net/minecraft/world/entity/ai/behavior/HarvestFarmland.java index 2ade08d1466660ee1787fa97908002ef56389712..8d4e206aa05b95b7bfec5d23496085cf55a3e1de 100644 --- a/src/main/java/net/minecraft/world/entity/ai/behavior/HarvestFarmland.java @@ -3604,18 +3604,18 @@ index 13f8c2cb42334ba3b573ca44ace1d3df76e41ff7..baca552e52c728867fcb0527b6c3eb39 @Override diff --git a/src/main/java/net/minecraft/world/entity/ai/sensing/NearestBedSensor.java b/src/main/java/net/minecraft/world/entity/ai/sensing/NearestBedSensor.java -index d5a549f08b98c80a5cf0eef02cb8a389c32dfecb..222c87e80cb089867ce9a7d2dceebe21b4bfe0de 100644 +index 92731b6b593289e9f583c9b705b219e81fcd8e73..51fbe27281a9d5d8af1b0fa19d3ffa44f04dedc3 100644 --- a/src/main/java/net/minecraft/world/entity/ai/sensing/NearestBedSensor.java +++ b/src/main/java/net/minecraft/world/entity/ai/sensing/NearestBedSensor.java -@@ -54,7 +54,7 @@ public class NearestBedSensor extends Sensor { - } - }; - Set, BlockPos>> set = poiManager.findAllWithType( -- holder -> holder.is(PoiTypes.HOME), predicate, entity.blockPosition(), 48, PoiManager.Occupancy.ANY -+ holder -> holder.is(PoiTypes.HOME), predicate, entity.blockPosition(), world.purpurConfig.villagerNearestBedSensorSearchRadius, PoiManager.Occupancy.ANY - ) - .collect(Collectors.toSet()); - Path path = AcquirePoi.findPathToPois(entity, set); +@@ -56,7 +56,7 @@ public class NearestBedSensor extends Sensor { + // Paper start - optimise POI access + java.util.List, BlockPos>> poiposes = new java.util.ArrayList<>(); + // don't ask me why it's unbounded. ask mojang. +- io.papermc.paper.util.PoiAccess.findAnyPoiPositions(poiManager, type -> type.is(PoiTypes.HOME), predicate, entity.blockPosition(), 48, PoiManager.Occupancy.ANY, false, Integer.MAX_VALUE, poiposes); ++ io.papermc.paper.util.PoiAccess.findAnyPoiPositions(poiManager, type -> type.is(PoiTypes.HOME), predicate, entity.blockPosition(), world.purpurConfig.villagerNearestBedSensorSearchRadius, PoiManager.Occupancy.ANY, false, Integer.MAX_VALUE, poiposes); + Path path = AcquirePoi.findPathToPois(entity, new java.util.HashSet<>(poiposes)); + // Paper end - optimise POI access + if (path != null && path.canReach()) { diff --git a/src/main/java/net/minecraft/world/entity/ai/sensing/SecondaryPoiSensor.java b/src/main/java/net/minecraft/world/entity/ai/sensing/SecondaryPoiSensor.java index ce8851c2cacfd3145b1e2c11443140a0759a1b07..9419f230910d0338fc4ac6e2e7b749ee7d5ee362 100644 --- a/src/main/java/net/minecraft/world/entity/ai/sensing/SecondaryPoiSensor.java @@ -6262,7 +6262,7 @@ index 3d03ffe2e12eca82dfa2f414471d12bb362d4552..2d04addd17d2c358fff598012b323cd7 return "entity.minecraft.tropical_fish.predefined." + variant; } diff --git a/src/main/java/net/minecraft/world/entity/animal/Turtle.java b/src/main/java/net/minecraft/world/entity/animal/Turtle.java -index 4bfa947531c4a67989e18032754dabf4c69e989c..55d83c57d76e73d73dca1400f4c0c18661d49a94 100644 +index caf4120721be8f2f7e2d737abbf73296cbe170b5..15a8c4e2772e1529204e3892914e49f9a17852aa 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Turtle.java +++ b/src/main/java/net/minecraft/world/entity/animal/Turtle.java @@ -87,6 +87,44 @@ public class Turtle extends Animal { @@ -6308,7 +6308,7 @@ index 4bfa947531c4a67989e18032754dabf4c69e989c..55d83c57d76e73d73dca1400f4c0c186 + } + public void setHomePos(BlockPos pos) { - this.entityData.set(Turtle.HOME_POS, pos); + this.entityData.set(Turtle.HOME_POS, pos.immutable()); // Paper - called with mutablepos... } @@ -189,6 +227,7 @@ public class Turtle extends Animal { @@ -12997,7 +12997,7 @@ index f403fc311a974558233028663dbe14c27b27d3f9..337bd2011c471361653c317004f8380c Vec3 vec3d5 = this.getDeltaMovement(); double d21 = vec3d5.x; diff --git a/src/main/java/net/minecraft/world/entity/vehicle/Boat.java b/src/main/java/net/minecraft/world/entity/vehicle/Boat.java -index 907f751c859855484151fb5d607acee2f2a35076..c45bb20e5355b0e0f87447572b6f60e8e2ee47be 100644 +index edd30d872d151f953df28c8f6d40efa8d39f5e36..ac4779937eec01c34efe076c21b42bb5c770b756 100644 --- a/src/main/java/net/minecraft/world/entity/vehicle/Boat.java +++ b/src/main/java/net/minecraft/world/entity/vehicle/Boat.java @@ -543,6 +543,7 @@ public class Boat extends VehicleEntity implements Leashable, VariantHolder set = Sets.newHashSet(); boolean flag = true; diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index beedd65eafc386ca9644b149c91f8247a85898e0..fc0c2115781fa7d6adb120f64513462462ec8260 100644 +index 3b94e292881f631656450638592e69b91ae0a39f..2465cc1ea98b48ed8d4564e5f01b1df5c9f9185e 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java @@ -175,6 +175,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl @@ -14431,9 +14440,9 @@ index beedd65eafc386ca9644b149c91f8247a85898e0..fc0c2115781fa7d6adb120f645134624 public final co.aikar.timings.WorldTimingsHandler timings; // Paper public static BlockPos lastPhysicsProblem; // Spigot private org.spigotmc.TickLimiter entityLimiter; -@@ -183,6 +184,49 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl - public final Map explosionDensityCache = new HashMap<>(); // Paper - Optimize explosions - public java.util.ArrayDeque redstoneUpdateInfos; // Paper - Faster redstone torch rapid clock removal; Move from Map in BlockRedstoneTorch to here +@@ -185,6 +186,49 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl + + public final io.papermc.paper.util.math.ThreadUnsafeRandom randomTickRandom = new io.papermc.paper.util.math.ThreadUnsafeRandom(this.random.nextLong()); // Gale - Pufferfish - move random tick random + // Purpur start + private com.google.common.cache.Cache playerBreedingCooldowns; @@ -14481,7 +14490,7 @@ index beedd65eafc386ca9644b149c91f8247a85898e0..fc0c2115781fa7d6adb120f645134624 public CraftWorld getWorld() { return this.world; } -@@ -272,6 +316,8 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl +@@ -279,6 +323,8 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl 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 this.galeConfig = galeWorldConfigCreator.apply(this.spigotConfig); // Gale - Gale configuration @@ -14490,7 +14499,7 @@ index beedd65eafc386ca9644b149c91f8247a85898e0..fc0c2115781fa7d6adb120f645134624 this.generator = gen; this.world = new CraftWorld((ServerLevel) this, gen, biomeProvider, env); -@@ -1589,4 +1635,13 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl +@@ -1612,4 +1658,13 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl return null; } // Paper end - optimize redstone (Alternate Current) @@ -14505,7 +14514,7 @@ index beedd65eafc386ca9644b149c91f8247a85898e0..fc0c2115781fa7d6adb120f645134624 + // Purpur end } diff --git a/src/main/java/net/minecraft/world/level/NaturalSpawner.java b/src/main/java/net/minecraft/world/level/NaturalSpawner.java -index 7e707fe1d800debf1eef8800fe98eb4e1dbd800b..d490429ddbb8cd82aeda5e03540075c9167b095e 100644 +index d0383cef6e204cc806903666d296287e1c530ed3..27fccd091535f7587aaaa1621361dc1835381b89 100644 --- a/src/main/java/net/minecraft/world/level/NaturalSpawner.java +++ b/src/main/java/net/minecraft/world/level/NaturalSpawner.java @@ -251,7 +251,7 @@ public final class NaturalSpawner { @@ -17881,7 +17890,7 @@ index 52649f82351ab4f675c3cc3cd6640956b0f76b91..eb51c88c7a0658190d3a8bfd5d18dca7 DefaultPermissions.registerPermission(CommandPermissions.PREFIX + "seed", "Allows the user to view the seed of the world", PermissionDefault.OP, commands); diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java new file mode 100644 -index 0000000000000000000000000000000000000000..71787e9efaa8a711f4c41849793f01f3087add1a +index 0000000000000000000000000000000000000000..83fabd290d3c64f2766b3244f5cd695e1c674a2f --- /dev/null +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java @@ -0,0 +1,576 @@ @@ -18380,7 +18389,7 @@ index 0000000000000000000000000000000000000000..71787e9efaa8a711f4c41849793f01f3 + + private static void blastResistanceSettings() { + getMap("settings.blast-resistance-overrides", Collections.emptyMap()).forEach((blockId, value) -> { -+ Block block = BuiltInRegistries.BLOCK.get(ResourceLocation.withDefaultNamespace(blockId)); ++ Block block = BuiltInRegistries.BLOCK.get(ResourceLocation.parse(blockId)); + if (block == Blocks.AIR) { + log(Level.SEVERE, "Invalid block for `settings.blast-resistance-overrides`: " + blockId); + return; diff --git a/patches/server/0011-Fix-Pufferfish-and-Purpur-patches.patch b/patches/server/0011-Fix-Pufferfish-and-Purpur-patches.patch index 66eca9ae..0fed4860 100644 --- a/patches/server/0011-Fix-Pufferfish-and-Purpur-patches.patch +++ b/patches/server/0011-Fix-Pufferfish-and-Purpur-patches.patch @@ -27,7 +27,7 @@ index e94224ed280247ee69dfdff8dc960f2b8729be33..5b9725a9a81c0850dc2809c150529e5f for (Component component : formatProviders(spigotPlugins, sender)) { // Purpur diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index b5fd90764d954acd0381cf42c38d5015c200b886..6a652ed876128addfef881903272fc9a891b13b6 100644 +index 200e76648fb98a5d289682c75a2ecb6b614ec4af..19dde0087e9c285191ab6c25d9e505e227be893c 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -300,7 +300,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop S spin(Function serverFactory) { AtomicReference atomicreference = new AtomicReference(); Thread thread = new io.papermc.paper.util.TickThread(() -> { // Paper - rewrite chunk system -@@ -982,6 +984,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop= 0 && this.tickCount >= type.ttl) { @@ -159,7 +159,7 @@ index 7c3aec4c19954b3823ece1122c779beccdb6dea6..747dfc5795cf9e9c5f67ee7478f09f82 } // Pufferfish end - entity TTL diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 3b1789d448f07060dec6f5e097814057843aa95a..8c424f1eb1ff09c7761fd228279dafb9fe538ad0 100644 +index 9f4257aaeedd6fcee6d7dc30a98423872c4f8e9b..a27e39cfa13173fcac62d4bb2e6936e200f2e9f4 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -1043,17 +1043,19 @@ public abstract class LivingEntity extends Entity implements Attackable { diff --git a/patches/server/0012-Purpur-Configurable-server-mod-name.patch b/patches/server/0012-Purpur-Configurable-server-mod-name.patch index 22347024..fd6a8cb6 100644 --- a/patches/server/0012-Purpur-Configurable-server-mod-name.patch +++ b/patches/server/0012-Purpur-Configurable-server-mod-name.patch @@ -7,10 +7,10 @@ Original license: MIT Original project: https://github.com/PurpurMC/Purpur diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 6a652ed876128addfef881903272fc9a891b13b6..12f41f1bc9ea5f5be7e32236aae380f633abee0e 100644 +index 19dde0087e9c285191ab6c25d9e505e227be893c..821e55c3b2de5cf3b7f9539345949d3bd74d1772 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1868,7 +1868,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop implements ServerInfo, ChunkIOErrorReporter, CommandSource, AutoCloseable, ca.spottedleaf.moonrise.patches.chunk_system.server.ChunkSystemMinecraftServer { // Paper - rewrite chunk system public static final int SERVER_THREAD_PRIORITY = Integer.getInteger("gale.thread.priority.server", -1); // Gale - server thread priority environment variable -@@ -975,7 +973,6 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { return !this.canSleepForTickNoOversleep(); // Paper - move oversleep into full server tick -@@ -1545,15 +1541,14 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { entityplayer.connection.suspendFlushing(); }); @@ -984,7 +984,7 @@ index 12f41f1bc9ea5f5be7e32236aae380f633abee0e..0eac388d53d65d6dbd6900040be4d661 // Paper start - Folia scheduler API ((io.papermc.paper.threadedregions.scheduler.FoliaGlobalRegionScheduler) Bukkit.getGlobalRegionScheduler()).tick(); getAllLevels().forEach(level -> { -@@ -1688,20 +1676,15 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop list = Lists.newArrayListWithCapacity(this.chunkMap.size()); Iterator iterator = this.chunkMap.getChunks().iterator(); @@ -1182,7 +1182,7 @@ index 023533e9ea342c8ff0d993544c45416af88bf5ab..c60c9c6eaecadcf6c8ababd803aeeaf4 while (iterator.hasNext()) { ChunkHolder playerchunk = (ChunkHolder) iterator.next(); -@@ -429,7 +420,6 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon +@@ -431,7 +422,6 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon boolean flagAndHasNaturalSpawn = flag && this.anySpawnCategoryIsSpawnedThisTick(); if (flagAndHasNaturalSpawn) { // Gale end - MultiPaper - skip unnecessary mob spawning computations @@ -1190,7 +1190,7 @@ index 023533e9ea342c8ff0d993544c45416af88bf5ab..c60c9c6eaecadcf6c8ababd803aeeaf4 int k = this.distanceManager.getNaturalSpawnChunkCount(); // Paper start - Optional per player mob spawns int naturalSpawnChunkCount = k; -@@ -453,7 +443,6 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon +@@ -455,7 +445,6 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon spawnercreature_d = NaturalSpawner.createState(naturalSpawnChunkCount, this.level.getAllEntities(), this::getFullChunk, !this.level.paperConfig().entities.spawning.perPlayerMobSpawns ? new LocalMobCapCalculator(this.chunkMap) : null, false); } // Paper end - Optional per player mob spawns @@ -1198,7 +1198,7 @@ index 023533e9ea342c8ff0d993544c45416af88bf5ab..c60c9c6eaecadcf6c8ababd803aeeaf4 this.lastSpawnState = spawnercreature_d; // Gale start - MultiPaper - skip unnecessary mob spawning computations -@@ -493,19 +482,14 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon +@@ -500,19 +489,14 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon } } } @@ -1219,7 +1219,7 @@ index 023533e9ea342c8ff0d993544c45416af88bf5ab..c60c9c6eaecadcf6c8ababd803aeeaf4 } } diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index cb97a4de383df7c8fd5af86aade4237893a3a2b7..818da592d23f533d60f0bf5fb7b250f3ba0d311d 100644 +index 0b882b74b01a6d9da90ff9e56dd7ad7d89345459..fe8de1945c4044c7a622d4b326f934fd34506d25 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -1,7 +1,6 @@ @@ -1230,7 +1230,7 @@ index cb97a4de383df7c8fd5af86aade4237893a3a2b7..818da592d23f533d60f0bf5fb7b250f3 import com.google.common.collect.Lists; import com.mojang.datafixers.DataFixer; import com.mojang.datafixers.util.Pair; -@@ -682,27 +681,19 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -699,27 +698,19 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. this.tickTime(); } @@ -1258,7 +1258,7 @@ index cb97a4de383df7c8fd5af86aade4237893a3a2b7..818da592d23f533d60f0bf5fb7b250f3 } this.handlingTick = false; -@@ -713,13 +704,11 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -730,13 +721,11 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. } if (flag1 || this.emptyTime++ < 300) { @@ -1272,7 +1272,7 @@ index cb97a4de383df7c8fd5af86aade4237893a3a2b7..818da592d23f533d60f0bf5fb7b250f3 this.entityTickList.forEach((entity) -> { entity.activatedPriorityReset = false; // Pufferfish - DAB if (!entity.isRemoved()) { -@@ -756,8 +745,6 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -773,8 +762,6 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. } } }); @@ -1281,24 +1281,24 @@ index cb97a4de383df7c8fd5af86aade4237893a3a2b7..818da592d23f533d60f0bf5fb7b250f3 this.tickBlockEntities(); } -@@ -882,7 +869,6 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -909,7 +896,6 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. } } // Paper - Option to disable ice and snow - timings.chunkTicksBlocks.startTiming(); // Paper if (randomTickSpeed > 0) { - LevelChunkSection[] achunksection = chunk.getSections(); - -@@ -912,8 +898,6 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. - } + // Paper start - optimize random block ticking + LevelChunkSection[] sections = chunk.getSections(); +@@ -942,8 +928,6 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. } } + // Paper end - optimise random block ticking - - timings.chunkTicksBlocks.stopTiming(); // Paper } @VisibleForTesting -@@ -1213,31 +1197,21 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -1262,31 +1246,21 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. } public void tickNonPassenger(Entity entity) { @@ -1330,7 +1330,7 @@ index cb97a4de383df7c8fd5af86aade4237893a3a2b7..818da592d23f533d60f0bf5fb7b250f3 Iterator iterator = entity.getPassengers().iterator(); while (iterator.hasNext()) { -@@ -1245,8 +1219,6 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -1294,8 +1268,6 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. this.tickPassenger(entity, entity1); } @@ -1339,7 +1339,7 @@ index cb97a4de383df7c8fd5af86aade4237893a3a2b7..818da592d23f533d60f0bf5fb7b250f3 } private void tickPassenger(Entity vehicle, Entity passenger) { -@@ -1254,9 +1226,6 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -1303,9 +1275,6 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. if (passenger instanceof Player || this.entityTickList.contains(passenger)) { // Paper - EAR 2 final boolean isActive = org.spigotmc.ActivationRange.checkIfActive(passenger); @@ -1349,7 +1349,7 @@ index cb97a4de383df7c8fd5af86aade4237893a3a2b7..818da592d23f533d60f0bf5fb7b250f3 passenger.setOldPosAndRot(); ++passenger.tickCount; -@@ -1278,8 +1247,6 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -1327,8 +1296,6 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. this.tickPassenger(passenger, entity2); } @@ -1358,7 +1358,7 @@ index cb97a4de383df7c8fd5af86aade4237893a3a2b7..818da592d23f533d60f0bf5fb7b250f3 } } else { passenger.stopRiding(); -@@ -1301,7 +1268,6 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -1350,7 +1317,6 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. if (!savingDisabled) { org.bukkit.Bukkit.getPluginManager().callEvent(new org.bukkit.event.world.WorldSaveEvent(this.getWorld())); // CraftBukkit @@ -1366,7 +1366,7 @@ index cb97a4de383df7c8fd5af86aade4237893a3a2b7..818da592d23f533d60f0bf5fb7b250f3 if (progressListener != null) { progressListener.progressStartNoAbort(Component.translatable("menu.savingLevel")); } -@@ -1311,10 +1277,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -1360,10 +1326,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. progressListener.progressStage(Component.translatable("menu.savingChunks")); } @@ -1378,7 +1378,7 @@ index cb97a4de383df7c8fd5af86aade4237893a3a2b7..818da592d23f533d60f0bf5fb7b250f3 } diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index d2153c3e909e7e75529ce6e41d649bf54b48752b..33fd3c88f84a5d6f7f7c0212f364a83870c88fc7 100644 +index 811a0c7ed06ecba3d6b4cd5d45a81c2d483bc53b..75728fe1e02cc7042e30d954bc913fefd107ef94 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -1,6 +1,5 @@ @@ -1388,7 +1388,7 @@ index d2153c3e909e7e75529ce6e41d649bf54b48752b..33fd3c88f84a5d6f7f7c0212f364a838 import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; -@@ -1282,11 +1281,9 @@ public abstract class PlayerList { +@@ -1283,11 +1282,9 @@ public abstract class PlayerList { public void saveAll() { io.papermc.paper.util.MCUtil.ensureMain("Save Players" , () -> { // Paper - Ensure main @@ -1541,7 +1541,7 @@ index 85b4b24361e785acf75571ff98f924c00ae80748..ac67dd7a30616fe70f73426e332972b7 } diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index fc0c2115781fa7d6adb120f64513462462ec8260..bec9696ebca39c96b456ed5f2a6fb06da8362d57 100644 +index 2465cc1ea98b48ed8d4564e5f01b1df5c9f9185e..61d2244031e4cf3116683acc88b0d84b5acf52cb 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java @@ -176,7 +176,6 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl @@ -1552,7 +1552,7 @@ index fc0c2115781fa7d6adb120f64513462462ec8260..bec9696ebca39c96b456ed5f2a6fb06d public static BlockPos lastPhysicsProblem; // Spigot private org.spigotmc.TickLimiter entityLimiter; private org.spigotmc.TickLimiter tileLimiter; -@@ -400,7 +399,6 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl +@@ -407,7 +406,6 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl public void onBorderSetDamageSafeZOne(WorldBorder border, double safeZoneRadius) {} }); // CraftBukkit end @@ -1560,7 +1560,7 @@ index fc0c2115781fa7d6adb120f64513462462ec8260..bec9696ebca39c96b456ed5f2a6fb06d this.entityLimiter = new org.spigotmc.TickLimiter(this.spigotConfig.entityMaxTickTime); this.tileLimiter = new org.spigotmc.TickLimiter(this.spigotConfig.tileMaxTickTime); this.entityLookup = new ca.spottedleaf.moonrise.patches.chunk_system.level.entity.dfl.DefaultEntityLookup(this); // Paper - rewrite chunk system -@@ -999,15 +997,12 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl +@@ -1006,15 +1004,12 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl } protected void tickBlockEntities() { @@ -1576,7 +1576,7 @@ index fc0c2115781fa7d6adb120f64513462462ec8260..bec9696ebca39c96b456ed5f2a6fb06d // Spigot start // Iterator iterator = this.blockEntityTickers.iterator(); boolean flag = this.tickRateManager().runsNormally(); -@@ -1031,9 +1026,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl +@@ -1045,9 +1040,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl } this.blockEntityTickers.removeAll(toRemove); // Paper - Fix MC-117075 @@ -1587,7 +1587,7 @@ index fc0c2115781fa7d6adb120f64513462462ec8260..bec9696ebca39c96b456ed5f2a6fb06d } diff --git a/src/main/java/net/minecraft/world/level/NaturalSpawner.java b/src/main/java/net/minecraft/world/level/NaturalSpawner.java -index d490429ddbb8cd82aeda5e03540075c9167b095e..d556089907bb695a9d87df1961ef0b0ae4382cad 100644 +index 27fccd091535f7587aaaa1621361dc1835381b89..885d7c9ef96dd3c7576c28606e5ab83d2a75de71 100644 --- a/src/main/java/net/minecraft/world/level/NaturalSpawner.java +++ b/src/main/java/net/minecraft/world/level/NaturalSpawner.java @@ -127,7 +127,6 @@ public final class NaturalSpawner { @@ -1645,10 +1645,10 @@ index cd0e43f4c53a746dd6183a8406269f9b11ad3571..54657ac895fb2fa9c58910d5421f0082 private static final CraftPersistentDataTypeRegistry DATA_TYPE_REGISTRY = new CraftPersistentDataTypeRegistry(); public CraftPersistentDataContainer persistentDataContainer; 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 5752576087e5ff411ff8c89fde7a761083945c23..95f306d6d896e6aa4ada7ee20880ed862e0e48d8 100644 +index f15b81fd738825543eecf6eb4afc007fe828090d..873bc6b74b631982eb9ff2e7ce64fe8cfe6d5503 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -@@ -622,7 +622,6 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p +@@ -635,7 +635,6 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p ((ca.spottedleaf.moonrise.patches.chunk_system.level.ChunkSystemServerLevel)this.level).moonrise$getChunkTaskScheduler().chunkHolderManager.getChunkHolder(this.locX, this.locZ).getEntityChunk().callEntitiesLoadEvent(); // Paper - rewrite chunk system if (this.needsDecoration) { @@ -1656,7 +1656,7 @@ index 5752576087e5ff411ff8c89fde7a761083945c23..95f306d6d896e6aa4ada7ee20880ed86 this.needsDecoration = false; java.util.Random random = new java.util.Random(); random.setSeed(this.level.getSeed()); -@@ -642,7 +641,6 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p +@@ -655,7 +654,6 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p } } server.getPluginManager().callEvent(new org.bukkit.event.world.ChunkPopulateEvent(bukkitChunk)); @@ -1664,7 +1664,7 @@ index 5752576087e5ff411ff8c89fde7a761083945c23..95f306d6d896e6aa4ada7ee20880ed86 } } } -@@ -979,7 +977,6 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p +@@ -992,7 +990,6 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p if (LevelChunk.this.isTicking(blockposition)) { try { @@ -1672,7 +1672,7 @@ index 5752576087e5ff411ff8c89fde7a761083945c23..95f306d6d896e6aa4ada7ee20880ed86 BlockState iblockdata = LevelChunk.this.getBlockState(blockposition); if (this.blockEntity.getType().isValid(iblockdata)) { -@@ -1002,14 +999,9 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p +@@ -1015,14 +1012,9 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p net.minecraft.world.level.chunk.LevelChunk.this.level.getCraftServer().getPluginManager().callEvent(new com.destroystokyo.paper.event.server.ServerExceptionEvent(new com.destroystokyo.paper.exception.ServerInternalException(msg, throwable))); // Paper - ServerExceptionEvent LevelChunk.this.removeBlockEntity(this.getPos()); // Paper end - Prevent block entity and entity crashes diff --git a/patches/server/0027-Slice-Smooth-Teleports.patch b/patches/server/0027-Slice-Smooth-Teleports.patch index 3e1cdf02..c56438fe 100644 --- a/patches/server/0027-Slice-Smooth-Teleports.patch +++ b/patches/server/0027-Slice-Smooth-Teleports.patch @@ -19,10 +19,10 @@ index d573ae3fee994614bcc6c699bcbe8210874ca414..30f984553e823b3c928b0e2181baf5d2 // Paper start - rewrite chunk system private ca.spottedleaf.moonrise.patches.chunk_system.player.RegionizedPlayerChunkLoader.PlayerChunkLoaderData chunkLoader; diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 33fd3c88f84a5d6f7f7c0212f364a83870c88fc7..360b52002fe8bc9dd27a4fe3831ed6f5dfe8d6c6 100644 +index 75728fe1e02cc7042e30d954bc913fefd107ef94..5a46f2b5f2903adbb5410c509aac62a5af7dbcc9 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -898,10 +898,10 @@ public abstract class PlayerList { +@@ -899,10 +899,10 @@ public abstract class PlayerList { ServerLevel worldserver1 = entityplayer1.serverLevel(); LevelData worlddata = worldserver1.getLevelData(); diff --git a/patches/server/0029-Leaves-Server-Utils.patch b/patches/server/0029-Leaves-Server-Utils.patch index 4f34ee01..58c8758d 100644 --- a/patches/server/0029-Leaves-Server-Utils.patch +++ b/patches/server/0029-Leaves-Server-Utils.patch @@ -9,10 +9,10 @@ Original project: https://github.com/LeavesMC/Leaves Commit: e234432bd99e1c4b07c24d1dd247977226a7516a diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 747dfc5795cf9e9c5f67ee7478f09f827eba5f79..a270eb3b94ffc439499c0dcf37c7a35f3d5700ac 100644 +index 8ed91095025dd9323d87df9a28c28fc04d8fb306..83ee59ff3d61f65fe354f7429d352929b077f23f 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -434,6 +434,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -435,6 +435,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess public boolean activatedPriorityReset = false; // Pufferfish - DAB public int activatedPriority = org.dreeam.leaf.config.modules.opt.DynamicActivationofBrain.maximumActivationPrio; // Pufferfish - DAB (golf score) public @Nullable Boolean immuneToFire = null; // Purpur - Fire immune API @@ -20,7 +20,7 @@ index 747dfc5795cf9e9c5f67ee7478f09f827eba5f79..a270eb3b94ffc439499c0dcf37c7a35f public void setOrigin(@javax.annotation.Nonnull Location location) { this.origin = location.toVector(); -@@ -2527,6 +2528,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -2528,6 +2529,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess nbttagcompound.putBoolean("Purpur.FireImmune", immuneToFire); } // Purpur end @@ -28,7 +28,7 @@ index 747dfc5795cf9e9c5f67ee7478f09f827eba5f79..a270eb3b94ffc439499c0dcf37c7a35f return nbttagcompound; } catch (Throwable throwable) { CrashReport crashreport = CrashReport.forThrowable(throwable, "Saving entity NBT"); -@@ -2679,6 +2681,11 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -2680,6 +2682,11 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess immuneToFire = nbt.getBoolean("Purpur.FireImmune"); } // Purpur end @@ -40,7 +40,7 @@ index 747dfc5795cf9e9c5f67ee7478f09f827eba5f79..a270eb3b94ffc439499c0dcf37c7a35f } catch (Throwable throwable) { CrashReport crashreport = CrashReport.forThrowable(throwable, "Loading entity NBT"); -@@ -5050,4 +5057,10 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -5051,4 +5058,10 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return false; } // Purpur end diff --git a/patches/server/0030-Leaves-Protocol-Core.patch b/patches/server/0030-Leaves-Protocol-Core.patch index 4dc994fd..049de5da 100644 --- a/patches/server/0030-Leaves-Protocol-Core.patch +++ b/patches/server/0030-Leaves-Protocol-Core.patch @@ -40,10 +40,10 @@ index a4f9de18d40d5d85a809af3777b00eb75b1af027..b2048639f652cb16358901052af0c6c6 }; } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 0eac388d53d65d6dbd6900040be4d661cc799765..3d6be33c3310da2bfacba887e8ba12840d2f811c 100644 +index e1ba263d890f1030c6ab38e91bd951bdedb88802..a43a139100bb69e4aef0e85933146dfcf88f03ca 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1739,6 +1739,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop, BlockPos>> set = new java.util.HashSet<>(poiposes); + // Paper end - optimise POI access + // Kaiiju start - petal - Async path processing + if (org.dreeam.leaf.config.modules.async.AsyncPathfinding.enabled) { + // await on path async @@ -468,16 +468,16 @@ index ce7398a617abe6e800c1e014b3ac5c970eb15c8a..dbf43209417d8453ff39839392eba45b } diff --git a/src/main/java/net/minecraft/world/entity/ai/sensing/NearestBedSensor.java b/src/main/java/net/minecraft/world/entity/ai/sensing/NearestBedSensor.java -index 222c87e80cb089867ce9a7d2dceebe21b4bfe0de..e57b60f1656d80d1307f0c9b000358a2598b7c75 100644 +index 51fbe27281a9d5d8af1b0fa19d3ffa44f04dedc3..2258eedf6d58097782f092ffda5e6cc954530935 100644 --- a/src/main/java/net/minecraft/world/entity/ai/sensing/NearestBedSensor.java +++ b/src/main/java/net/minecraft/world/entity/ai/sensing/NearestBedSensor.java @@ -57,6 +57,25 @@ public class NearestBedSensor extends Sensor { - holder -> holder.is(PoiTypes.HOME), predicate, entity.blockPosition(), world.purpurConfig.villagerNearestBedSensorSearchRadius, PoiManager.Occupancy.ANY - ) - .collect(Collectors.toSet()); + java.util.List, BlockPos>> poiposes = new java.util.ArrayList<>(); + // don't ask me why it's unbounded. ask mojang. + io.papermc.paper.util.PoiAccess.findAnyPoiPositions(poiManager, type -> type.is(PoiTypes.HOME), predicate, entity.blockPosition(), world.purpurConfig.villagerNearestBedSensorSearchRadius, PoiManager.Occupancy.ANY, false, Integer.MAX_VALUE, poiposes); + // Kaiiju start - await on async path processing + if (org.dreeam.leaf.config.modules.async.AsyncPathfinding.enabled) { -+ Path possiblePath = AcquirePoi.findPathToPois(entity, set); ++ Path possiblePath = AcquirePoi.findPathToPois(entity, new java.util.HashSet<>(poiposes)); + org.dreeam.leaf.async.path.AsyncPathProcessor.awaitProcessing(entity, possiblePath, path -> { + // read canReach check + if ((path == null || !path.canReach()) && this.triedCount < 5) { @@ -494,10 +494,10 @@ index 222c87e80cb089867ce9a7d2dceebe21b4bfe0de..e57b60f1656d80d1307f0c9b000358a2 + }); + } else { + // Kaiiju end - Path path = AcquirePoi.findPathToPois(entity, set); + Path path = AcquirePoi.findPathToPois(entity, new java.util.HashSet<>(poiposes)); + // Paper end - optimise POI access if (path != null && path.canReach()) { - BlockPos blockPos = path.getTarget(); -@@ -67,6 +86,7 @@ public class NearestBedSensor extends Sensor { +@@ -68,6 +87,7 @@ public class NearestBedSensor extends Sensor { } else if (this.triedCount < 5) { this.batchCache.long2LongEntrySet().removeIf(entry -> entry.getLongValue() < this.lastUpdate); } diff --git a/patches/server/0039-Petal-reduce-work-done-by-game-event-system.patch b/patches/server/0039-Petal-reduce-work-done-by-game-event-system.patch index b1fe611e..4f5e3746 100644 --- a/patches/server/0039-Petal-reduce-work-done-by-game-event-system.patch +++ b/patches/server/0039-Petal-reduce-work-done-by-game-event-system.patch @@ -38,7 +38,7 @@ index a74732902c0494c67e6acf2fc04581ff9c46b832..8b60c922750e71f526976782a1f156e9 LivingEntity entityliving1 = deadEntity.getLastHurtByMob(); 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 95f306d6d896e6aa4ada7ee20880ed862e0e48d8..b30badb7c7806ef2f1672a0a89b0e3f4287ff382 100644 +index 873bc6b74b631982eb9ff2e7ce64fe8cfe6d5503..353f33b9562f87498ba6d0e303774c67bcf56189 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java @@ -81,7 +81,18 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p @@ -61,7 +61,7 @@ index 95f306d6d896e6aa4ada7ee20880ed862e0e48d8..b30badb7c7806ef2f1672a0a89b0e3f4 private final LevelChunkTicks blockTicks; private final LevelChunkTicks fluidTicks; -@@ -93,7 +104,7 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p +@@ -105,7 +116,7 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p super(pos, upgradeData, world, net.minecraft.server.MinecraftServer.getServer().registryAccess().registryOrThrow(Registries.BIOME), inhabitedTime, sectionArrayInitializer, blendingData); // Paper - Anti-Xray - The world isn't ready yet, use server singleton for registry this.tickersInLevel = Maps.newHashMap(); this.level = (ServerLevel) world; // CraftBukkit - type @@ -70,7 +70,7 @@ index 95f306d6d896e6aa4ada7ee20880ed862e0e48d8..b30badb7c7806ef2f1672a0a89b0e3f4 Heightmap.Types[] aheightmap_type = Heightmap.Types.values(); int j = aheightmap_type.length; -@@ -197,9 +208,23 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p +@@ -210,9 +221,23 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p Level world = this.level; if (world instanceof ServerLevel worldserver) { @@ -97,7 +97,7 @@ index 95f306d6d896e6aa4ada7ee20880ed862e0e48d8..b30badb7c7806ef2f1672a0a89b0e3f4 } else { return super.getListenerRegistry(ySectionCoord); } -@@ -583,7 +608,7 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p +@@ -596,7 +621,7 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p } private void removeGameEventListenerRegistry(int ySectionCoord) { diff --git a/patches/server/0041-Reduce-canSee-work.patch b/patches/server/0041-Reduce-canSee-work.patch index eb7ec94a..b6aa008d 100644 --- a/patches/server/0041-Reduce-canSee-work.patch +++ b/patches/server/0041-Reduce-canSee-work.patch @@ -7,10 +7,10 @@ Co-authored by: Martijn Muijsers Co-authored by: MachineBreaker diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index e49a3c0d803caf00070b21422bfa97bdc9ba30bc..338a8b4eff661e18892c3f044e53f0ed4436be6c 100644 +index 61d2244031e4cf3116683acc88b0d84b5acf52cb..0d7ee7ab6cf9f91a46a03d8741917282fe2b966f 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -424,17 +424,19 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl +@@ -431,17 +431,19 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl for (int i = 0, len = entities.size(); i < len; ++i) { Entity entity = entities.get(i); diff --git a/patches/server/0042-Faster-Natural-Spawning.patch b/patches/server/0042-Faster-Natural-Spawning.patch index 581ecc22..cffe6888 100644 --- a/patches/server/0042-Faster-Natural-Spawning.patch +++ b/patches/server/0042-Faster-Natural-Spawning.patch @@ -22,7 +22,7 @@ index 9c6f5b55b1f1376fa75e216cd366ee47c79fafc4..7762c8186035fdf60e11d9f1844516b6 static RandomSource createThreadSafe() { return new ThreadSafeLegacyRandomSource(RandomSupport.generateUniqueSeed()); diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 338a8b4eff661e18892c3f044e53f0ed4436be6c..8c6ec4d8f30aa67f5fc3277d3286e33874aaf395 100644 +index 0d7ee7ab6cf9f91a46a03d8741917282fe2b966f..e3c7627e69679d50c3b288d9993f02ba57079b29 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java @@ -127,6 +127,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl @@ -34,22 +34,23 @@ index 338a8b4eff661e18892c3f044e53f0ed4436be6c..8c6ec4d8f30aa67f5fc3277d3286e338 @Deprecated private final RandomSource threadSafeRandom = RandomSource.createThreadSafe(); diff --git a/src/main/java/net/minecraft/world/level/NaturalSpawner.java b/src/main/java/net/minecraft/world/level/NaturalSpawner.java -index d556089907bb695a9d87df1961ef0b0ae4382cad..bac9e491f18edaec4d441e415938db2a1f0ba503 100644 +index 885d7c9ef96dd3c7576c28606e5ab83d2a75de71..455e7958ddec5f6c2f3090aa3d6994385e9482bc 100644 --- a/src/main/java/net/minecraft/world/level/NaturalSpawner.java +++ b/src/main/java/net/minecraft/world/level/NaturalSpawner.java -@@ -405,11 +405,12 @@ public final class NaturalSpawner { +@@ -405,12 +405,14 @@ public final class NaturalSpawner { - private static BlockPos getRandomPosWithin(Level world, LevelChunk chunk) { + private static BlockPos getRandomPosWithin(ServerLevel world, LevelChunk chunk) { // Gale - Airplane - Use ThreadUnsafeRandom for mob spawning - accept ServerLevel ChunkPos chunkcoordintpair = chunk.getPos(); -- int i = chunkcoordintpair.getMinBlockX() + world.random.nextInt(16); -- int j = chunkcoordintpair.getMinBlockZ() + world.random.nextInt(16); + // Leaf start - Generate random seed faster + // Gale start - Airplane - Use ThreadUnsafeRandom for mob spawning - use ThreadUnsafeRandom +- int i = chunkcoordintpair.getMinBlockX() + world.randomTickRandom.nextInt(16); +- int j = chunkcoordintpair.getMinBlockZ() + world.randomTickRandom.nextInt(16); + int i = chunkcoordintpair.getMinBlockX() + world.randomFaster.nextInt(16); + int j = chunkcoordintpair.getMinBlockZ() + world.randomFaster.nextInt(16); + // Gale end - Airplane - Use ThreadUnsafeRandom for mob spawning - use ThreadUnsafeRandom int k = chunk.getHeight(Heightmap.Types.WORLD_SURFACE, i, j) + 1; -- int l = Mth.randomBetweenInclusive(world.random, world.getMinBuildHeight(), k); -- -+ int l = Mth.randomBetweenInclusive(world.randomFaster, world.getMinBuildHeight(), k); +- int l = Mth.randomBetweenInclusive(world.randomTickRandom, world.getMinBuildHeight(), k); // Gale - Airplane - Use ThreadUnsafeRandom for mob spawning - use ThreadUnsafeRandom ++ int l = Mth.randomBetweenInclusive(world.randomFaster, world.getMinBuildHeight(), k); // Gale - Airplane - Use ThreadUnsafeRandom for mob spawning - use ThreadUnsafeRandom + // Leaf end - Generate random seed faster return new BlockPos(i, l, j); } diff --git a/patches/server/0045-Faster-sequencing-of-futures-for-chunk-structure-gen.patch b/patches/server/0045-Faster-sequencing-of-futures-for-chunk-structure-gen.patch index 7f60a16b..6955856a 100644 --- a/patches/server/0045-Faster-sequencing-of-futures-for-chunk-structure-gen.patch +++ b/patches/server/0045-Faster-sequencing-of-futures-for-chunk-structure-gen.patch @@ -7,10 +7,10 @@ Replace `thenApply` with `thenCompose`. Once one task is completed then the next to prevent blocking threads while waiting to complete all tasks. But may cause the sequence of future compose disorder. diff --git a/src/main/java/net/minecraft/Util.java b/src/main/java/net/minecraft/Util.java -index 42d7ecfab6f72517904451d9df3f0404b176fdb2..37888505f6f4af5e6ecf76396531439bce63644e 100644 +index 5869f2f5c72f736e6b077683327c64b9e0e0c733..ad40341f7a2cbed895b25d8de288f034626ed417 100644 --- a/src/main/java/net/minecraft/Util.java +++ b/src/main/java/net/minecraft/Util.java -@@ -489,13 +489,27 @@ public class Util { +@@ -490,13 +490,27 @@ public class Util { return object; } diff --git a/patches/server/0053-SparklyPaper-Skip-EntityScheduler-s-executeTick-chec.patch b/patches/server/0053-SparklyPaper-Skip-EntityScheduler-s-executeTick-chec.patch index 62f39e88..dc8100c2 100644 --- a/patches/server/0053-SparklyPaper-Skip-EntityScheduler-s-executeTick-chec.patch +++ b/patches/server/0053-SparklyPaper-Skip-EntityScheduler-s-executeTick-chec.patch @@ -75,7 +75,7 @@ index 62484ebf4550b05182f693a3180bbac5d5fd906d..67800e426445060a8343e27a7452b8d7 throw new IllegalStateException("Ticking retired scheduler"); } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 3d6be33c3310da2bfacba887e8ba12840d2f811c..ef14203da6f9d0f5cad4335c98095522209023cd 100644 +index a43a139100bb69e4aef0e85933146dfcf88f03ca..2cf519e48ded94a23579120d65169f09a2889f8a 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -311,6 +311,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop S spin(Function serverFactory) { AtomicReference atomicreference = new AtomicReference(); -@@ -1663,6 +1664,18 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { for (final Entity entity : level.moonrise$getEntityLookup().getAllCopy()) { // Paper - rewrite chunk system if (entity.isRemoved()) { -@@ -1674,6 +1687,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop public diff --git a/patches/server/0075-Configurable-connection-message.patch b/patches/server/0075-Configurable-connection-message.patch index 42897eb1..4c295054 100644 --- a/patches/server/0075-Configurable-connection-message.patch +++ b/patches/server/0075-Configurable-connection-message.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Configurable connection message diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 230eef32faed2c7744447e23f5608790c1d491a8..180b50c9c23c6934d3e99500a25635df32f7169c 100644 +index b665969cf7232a4bbc060c91b1cf802df3b0c908..44b05a126360072f1966d7f0d2a822fd84ada921 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -26,6 +26,7 @@ import java.util.UUID; @@ -43,7 +43,7 @@ index 230eef32faed2c7744447e23f5608790c1d491a8..180b50c9c23c6934d3e99500a25635df this.cserver.getPluginManager().callEvent(playerQuitEvent); entityplayer.getBukkitEntity().disconnect(playerQuitEvent.getQuitMessage()); -@@ -1645,4 +1646,29 @@ public abstract class PlayerList { +@@ -1646,4 +1647,29 @@ public abstract class PlayerList { public boolean isAllowCommandsForAllPlayers() { return this.allowCommandsForAllPlayers; }