diff --git a/gradle.properties b/gradle.properties index f479e30d..924d0b45 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ group=cn.dreeam.leaf mcVersion=1.21.5 version=1.21.5-R0.1-SNAPSHOT -paperCommit=db8c646d00d3ede50650ae27c89fd66be3be89e6 +paperCommit=71ccae077355f854d5be0ece38a300d0499721b4 org.gradle.configuration-cache=true org.gradle.caching=true diff --git a/leaf-api/paper-patches/features/0017-PlayerInventoryOverflowEvent.patch b/leaf-api/paper-patches/features/0018-PlayerInventoryOverflowEvent.patch similarity index 100% rename from leaf-api/paper-patches/features/0017-PlayerInventoryOverflowEvent.patch rename to leaf-api/paper-patches/features/0018-PlayerInventoryOverflowEvent.patch diff --git a/leaf-api/paper-patches/features/0018-Raytrace-AntiXray-SDK-integration.patch b/leaf-api/paper-patches/features/0019-Raytrace-AntiXray-SDK-integration.patch similarity index 100% rename from leaf-api/paper-patches/features/0018-Raytrace-AntiXray-SDK-integration.patch rename to leaf-api/paper-patches/features/0019-Raytrace-AntiXray-SDK-integration.patch diff --git a/leaf-server/minecraft-patches/features/0001-Rebrand.patch b/leaf-server/minecraft-patches/features/0001-Rebrand.patch index 13d4b901..0afdba4b 100644 --- a/leaf-server/minecraft-patches/features/0001-Rebrand.patch +++ b/leaf-server/minecraft-patches/features/0001-Rebrand.patch @@ -48,10 +48,10 @@ index bb021fc9de91f8c4f79e6a753d57fa157efbbda7..9926848124f0b74ebb615fbbc45d95eb final DamageSource damageSource = this.copy(); damageSource.eventEntityDamager = entity; diff --git a/net/minecraft/world/level/chunk/storage/RegionFileStorage.java b/net/minecraft/world/level/chunk/storage/RegionFileStorage.java -index 763879cdc389fc4d80135b38aa96a5bec448ae9e..c7cec4a8a32e0c978a198904dbaf9920649ec879 100644 +index f3ea8b9e8f4510112ec5e41727ebc0cf9ecee195..77f16166588b0d07fb08b9c8f060a3d076b479de 100644 --- a/net/minecraft/world/level/chunk/storage/RegionFileStorage.java +++ b/net/minecraft/world/level/chunk/storage/RegionFileStorage.java -@@ -49,7 +49,7 @@ public final class RegionFileStorage implements AutoCloseable { +@@ -283,7 +283,7 @@ public class RegionFileStorage implements AutoCloseable, ca.spottedleaf.moonrise // Paper start private static void printOversizedLog(String msg, Path file, int x, int z) { diff --git a/leaf-server/minecraft-patches/features/0002-Gale-configuration.patch b/leaf-server/minecraft-patches/features/0002-Gale-configuration.patch index e965528e..deeb591e 100644 --- a/leaf-server/minecraft-patches/features/0002-Gale-configuration.patch +++ b/leaf-server/minecraft-patches/features/0002-Gale-configuration.patch @@ -13,7 +13,7 @@ As part of: Paper (https://github.com/PaperMC/Paper) Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index 7e880b68e6d071d555381af05a3e964fb68904ed..240722d96e8122269efb12c706e39bba54243872 100644 +index f1373fd5fdebb9f4600ba7f32a5df6188de3a0e9..96d34149b1009b1522335784bc1858f61bb59cd1 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java @@ -299,6 +299,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop pluginsBlockingSleep = new java.util.HashSet<>(); // Paper - API to allow/disallow tick sleeping public static final long SERVER_INIT = System.nanoTime(); // Paper - Lag compensation -@@ -398,6 +399,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop, AutoCl +@@ -159,6 +159,12 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl return this.paperConfig; } // Paper end - add paper world config @@ -122,7 +122,7 @@ index 30d1c676cbbba6713a36a2b62ff2a01bd11a8bcd..dbbf6fc4ef52d179ac694b0cfff92132 public static @Nullable BlockPos lastPhysicsProblem; // Spigot private int tileTickPosition; -@@ -202,10 +208,13 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl +@@ -827,6 +833,8 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl org.bukkit.World.Environment env, // CraftBukkit java.util.function.Function paperWorldConfigCreator, // Paper - create paper world config @@ -130,6 +130,9 @@ index 30d1c676cbbba6713a36a2b62ff2a01bd11a8bcd..dbbf6fc4ef52d179ac694b0cfff92132 + org.galemc.gale.configuration.GaleWorldConfiguration> galeWorldConfigCreator, // Gale - Gale configuration java.util.concurrent.Executor executor // Paper - Anti-Xray ) { + // Paper start - getblock optimisations - cache world height/sections +@@ -840,6 +848,7 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl + // Paper end - getblock optimisations - cache world height/sections this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) levelData).getLevelName()); // Spigot this.paperConfig = paperWorldConfigCreator.apply(this.spigotConfig); // Paper - create paper world config + this.galeConfig = galeWorldConfigCreator.apply(this.spigotConfig); // Gale - Gale configuration diff --git a/leaf-server/minecraft-patches/features/0003-Leaf-config.patch b/leaf-server/minecraft-patches/features/0003-Leaf-config.patch index 5518aa80..be211990 100644 --- a/leaf-server/minecraft-patches/features/0003-Leaf-config.patch +++ b/leaf-server/minecraft-patches/features/0003-Leaf-config.patch @@ -11,7 +11,7 @@ Add per world config Add config reload diff --git a/net/minecraft/server/Main.java b/net/minecraft/server/Main.java -index 58be6e1d1607a3af5e28f851718b82321f2feb25..a5aa3d415486ef262383ab738eb7dd80b3fecb5e 100644 +index 9c9b601a3f903bebb0dd1bda0e24745587229727..6c65122fe15e08c352885c7dfd3ddf496f0c00c4 100644 --- a/net/minecraft/server/Main.java +++ b/net/minecraft/server/Main.java @@ -108,10 +108,12 @@ public class Main { @@ -28,10 +28,10 @@ index 58be6e1d1607a3af5e28f851718b82321f2feb25..a5aa3d415486ef262383ab738eb7dd80 DedicatedServerSettings dedicatedServerSettings = new DedicatedServerSettings(optionSet); // CraftBukkit - CLI argument support dedicatedServerSettings.forceSave(); diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index 5bb1b96390671fb4eb59a8d795a97e8fb061cc0d..ba5962b04a61e21ae81c2c212de6945585981ddd 100644 +index 96d34149b1009b1522335784bc1858f61bb59cd1..d8179f1b7441679a96ac8ccbd67c2cb1c4fc4fd6 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java -@@ -1102,6 +1102,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop false : this::haveTime); + // Paper start - rewrite chunk system +@@ -1258,7 +1230,6 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop serverPlayer1.connection.suspendFlushing()); this.server.getScheduler().mainThreadHeartbeat(); // CraftBukkit // Paper start - Folia scheduler API -@@ -1565,9 +1524,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0; // Paper - BlockPhysicsEvent +@@ -1710,7 +1667,6 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0; // Paper - Add EntityMoveEvent serverLevel.updateLagCompensationTick(); // Paper - lag compensation + net.minecraft.world.level.block.entity.HopperBlockEntity.skipHopperEvents = serverLevel.paperConfig().hopper.disableMoveEvent || org.bukkit.event.inventory.InventoryMoveItemEvent.getHandlerList().getRegisteredListeners().length == 0; // Paper - Perf: Optimize Hoppers - profilerFiller.push(() -> serverLevel + " " + serverLevel.dimension().location()); /* Drop global time updates if (this.tickCount % 20 == 0) { profilerFiller.push("timeSync"); -@@ -1610,8 +1566,6 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop)completableFuture1, (optional, object) -> optional - ) - .thenApplyAsync(optional -> { -- Profiler.get().incrementCounter("chunkLoad"); - if (optional.isPresent()) { - ChunkAccess chunkAccess = optional.get().read(this.level, this.poiManager, this.storageInfo(), chunkPos); - this.markPosition(chunkPos, chunkAccess.getPersistedStatus().getChunkType()); -@@ -817,7 +809,6 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider - } - } - -- Profiler.get().incrementCounter("chunkSave"); - this.activeChunkWrites.incrementAndGet(); - SerializableChunkData serializableChunkData = SerializableChunkData.copyOf(this.level, chunk); - CompletableFuture completableFuture = CompletableFuture.supplyAsync(serializableChunkData::write, Util.backgroundExecutor()); diff --git a/net/minecraft/server/level/ServerChunkCache.java b/net/minecraft/server/level/ServerChunkCache.java -index c50a1a01d167696134bd65b2d28db323d81d6ebd..51c636b3bb5088b5caf0f93ec34987efe7e55e5f 100644 +index 59e8a5e1b35c81883c9b1ca00c6e55d77584d8cc..4167b46148fc370f20b35c2a261e38c0698855d4 100644 --- a/net/minecraft/server/level/ServerChunkCache.java +++ b/net/minecraft/server/level/ServerChunkCache.java @@ -26,8 +26,6 @@ import net.minecraft.network.protocol.Packet; @@ -764,39 +752,10 @@ index c50a1a01d167696134bd65b2d28db323d81d6ebd..51c636b3bb5088b5caf0f93ec34987ef import net.minecraft.util.thread.BlockableEventLoop; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.MobCategory; -@@ -230,8 +228,6 @@ public class ServerChunkCache extends ChunkSource { - return ifLoaded; - } - // Paper end - Perf: Optimise getChunkAt calls for loaded chunks -- ProfilerFiller profilerFiller = Profiler.get(); -- profilerFiller.incrementCounter("getChunk"); - long packedChunkPos = ChunkPos.asLong(x, z); - - for (int i = 0; i < 4; i++) { -@@ -243,7 +239,6 @@ public class ServerChunkCache extends ChunkSource { - } - } - -- profilerFiller.incrementCounter("getChunkCacheMiss"); - CompletableFuture> chunkFutureMainThread = this.getChunkFutureMainThread(x, z, chunkStatus, requireChunk); - this.mainThreadProcessor.managedBlock(chunkFutureMainThread::isDone); - // com.destroystokyo.paper.io.SyncLoadFinder.logSyncLoad(this.level, x, z); // Paper - Add debug for sync chunk loads -@@ -306,11 +301,8 @@ public class ServerChunkCache extends ChunkSource { - // CraftBukkit end - this.addTicket(new Ticket(TicketType.UNKNOWN, i), chunkPos); - if (this.chunkAbsent(visibleChunkIfPresent, i)) { -- ProfilerFiller profilerFiller = Profiler.get(); -- profilerFiller.push("chunkLoad"); - this.runDistanceManagerUpdates(); - visibleChunkIfPresent = this.getVisibleChunkIfPresent(packedChunkPos); -- profilerFiller.pop(); - if (this.chunkAbsent(visibleChunkIfPresent, i)) { - throw (IllegalStateException)Util.pauseInIde(new IllegalStateException("No chunk holder after ticket has been added")); - } -@@ -394,36 +386,26 @@ public class ServerChunkCache extends ChunkSource { - +@@ -472,37 +470,27 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon // CraftBukkit start - modelled on below public void purgeUnload() { + if (true) return; // Paper - rewrite chunk system - ProfilerFiller gameprofilerfiller = Profiler.get(); - - gameprofilerfiller.push("purge"); @@ -820,6 +779,7 @@ index c50a1a01d167696134bd65b2d28db323d81d6ebd..51c636b3bb5088b5caf0f93ec34987ef this.runDistanceManagerUpdates(); - profilerFiller.popPush("chunks"); if (tickChunks) { + ((ca.spottedleaf.moonrise.patches.chunk_system.level.ChunkSystemServerLevel)this.level).moonrise$getPlayerChunkLoader().tick(); // Paper - rewrite chunk system this.tickChunks(); this.chunkMap.tick(); } @@ -830,7 +790,7 @@ index c50a1a01d167696134bd65b2d28db323d81d6ebd..51c636b3bb5088b5caf0f93ec34987ef this.clearCache(); } -@@ -432,22 +414,15 @@ public class ServerChunkCache extends ChunkSource { +@@ -511,22 +499,15 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon long l = gameTime - this.lastInhabitedUpdate; this.lastInhabitedUpdate = gameTime; if (!this.level.isDebug()) { @@ -854,9 +814,9 @@ index c50a1a01d167696134bd65b2d28db323d81d6ebd..51c636b3bb5088b5caf0f93ec34987ef - + private void broadcastChangedChunks() { // Gale - Purpur - remove vanilla profiler for (ChunkHolder chunkHolder : this.chunkHoldersToBroadcast) { - LevelChunk tickingChunk = chunkHolder.getTickingChunk(); + LevelChunk tickingChunk = chunkHolder.getChunkToSend(); // Paper - rewrite chunk system if (tickingChunk != null) { -@@ -456,17 +431,14 @@ public class ServerChunkCache extends ChunkSource { +@@ -535,11 +516,9 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon } this.chunkHoldersToBroadcast.clear(); @@ -867,38 +827,43 @@ index c50a1a01d167696134bd65b2d28db323d81d6ebd..51c636b3bb5088b5caf0f93ec34987ef - profiler.popPush("naturalSpawnCount"); + private void tickChunks(long timeInhabited) { // Gale - Purpur - remove vanilla profiler int naturalSpawnChunkCount = this.distanceManager.getNaturalSpawnChunkCount(); - NaturalSpawner.SpawnState spawnState = NaturalSpawner.createState( - naturalSpawnChunkCount, this.level.getAllEntities(), this::getFullChunk, new LocalMobCapCalculator(this.chunkMap) - ); + // Paper start - Optional per player mob spawns + NaturalSpawner.SpawnState spawnState; +@@ -564,7 +543,6 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon + } + // Paper end - Optional per player mob spawns this.lastSpawnState = spawnState; - profiler.popPush("spawnAndTick"); boolean _boolean = this.level.getGameRules().getBoolean(GameRules.RULE_DOMOBSPAWNING) && !this.level.players().isEmpty(); // CraftBukkit int _int = this.level.getGameRules().getInt(GameRules.RULE_RANDOMTICKING); List filteredSpawningCategories; -@@ -488,11 +460,8 @@ public class ServerChunkCache extends ChunkSource { +@@ -586,14 +564,11 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon List list = this.spawningChunks; try { - profiler.push("filteringSpawningChunks"); this.chunkMap.collectSpawningChunks(list); - profiler.popPush("shuffleSpawningChunks"); - Util.shuffle(list, this.level.random); + // Paper start - chunk tick iteration optimisation + this.shuffleRandom.setSeed(this.level.random.nextLong()); + if (!this.level.paperConfig().entities.spawning.perPlayerMobSpawns) Util.shuffle(list, this.shuffleRandom); // Paper - Optional per player mob spawns; do not need this when per-player is enabled + // Paper end - chunk tick iteration optimisation - profiler.popPush("tickSpawningChunks"); for (LevelChunk levelChunk : list) { this.tickSpawningChunk(levelChunk, timeInhabited, filteredSpawningCategories, spawnState); -@@ -501,10 +470,7 @@ public class ServerChunkCache extends ChunkSource { +@@ -602,10 +577,7 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon list.clear(); } - profiler.popPush("tickTickingChunks"); - this.chunkMap.forEachBlockTickingChunk(levelChunk1 -> this.level.tickChunk(levelChunk1, _int)); + this.iterateTickingChunksFaster(); // Paper - chunk tick iteration optimisations - profiler.pop(); - profiler.popPush("customSpawners"); if (_boolean) { this.level.tickCustomSpawners(this.spawnEnemies, this.spawnFriendlies); } -@@ -704,7 +670,6 @@ public class ServerChunkCache extends ChunkSource { +@@ -814,7 +786,6 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon @Override protected void doRunTask(Runnable task) { @@ -907,7 +872,7 @@ index c50a1a01d167696134bd65b2d28db323d81d6ebd..51c636b3bb5088b5caf0f93ec34987ef } diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index 3d614c00886278514197374c3e24a8f871fda321..47cd1b3b5f7a74dcff147a744420c622ec750e7a 100644 +index 845d03dc893df2200327e9ee2710474874750c93..1d53c0b96ff781765155aac29256f4493f7d7c58 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java @@ -74,8 +74,6 @@ import net.minecraft.util.Mth; @@ -919,7 +884,7 @@ index 3d614c00886278514197374c3e24a8f871fda321..47cd1b3b5f7a74dcff147a744420c622 import net.minecraft.util.valueproviders.IntProvider; import net.minecraft.util.valueproviders.UniformInt; import net.minecraft.world.DifficultyInstance; -@@ -464,16 +462,12 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -704,16 +702,12 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe } public void tick(BooleanSupplier hasTimeLeft) { @@ -936,7 +901,7 @@ index 3d614c00886278514197374c3e24a8f871fda321..47cd1b3b5f7a74dcff147a744420c622 } int _int = this.getGameRules().getInt(GameRules.RULE_PLAYERS_SLEEPING_PERCENTAGE); -@@ -507,41 +501,30 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -747,41 +741,30 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe this.tickTime(); } @@ -978,17 +943,17 @@ index 3d614c00886278514197374c3e24a8f871fda321..47cd1b3b5f7a74dcff147a744420c622 } io.papermc.paper.entity.activation.ActivationRange.activateEntities(this); // Paper - EAR -@@ -550,9 +533,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -790,9 +773,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe entity -> { if (!entity.isRemoved()) { if (!tickRateManager.isEntityFrozen(entity)) { - profilerFiller.push("checkDespawn"); entity.checkDespawn(); - profilerFiller.pop(); - if (entity instanceof ServerPlayer - || this.chunkSource.chunkMap.getDistanceManager().inEntityTickingRange(entity.chunkPosition().toLong())) { + if (true) { // Paper - rewrite chunk system Entity vehicle = entity.getVehicle(); -@@ -564,21 +545,16 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe + if (vehicle != null) { +@@ -803,21 +784,15 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe entity.stopRiding(); } @@ -1003,14 +968,14 @@ index 3d614c00886278514197374c3e24a8f871fda321..47cd1b3b5f7a74dcff147a744420c622 - profilerFiller.pop(); this.tickBlockEntities(); } - +- - profilerFiller.push("entityManagement"); - this.entityManager.tick(); + // Paper - rewrite chunk system - profilerFiller.pop(); } @Override -@@ -590,9 +566,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -832,9 +807,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe if (this.tickTime) { long l = this.levelData.getGameTime() + 1L; this.serverLevelData.setGameTime(l); @@ -1020,7 +985,7 @@ index 3d614c00886278514197374c3e24a8f871fda321..47cd1b3b5f7a74dcff147a744420c622 if (this.serverLevelData.getGameRules().getBoolean(GameRules.RULE_DAYLIGHT)) { this.setDayTime(this.levelData.getDayTime() + 1L); } -@@ -618,8 +592,6 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -913,8 +886,6 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe ChunkPos pos = chunk.getPos(); int minBlockX = pos.getMinBlockX(); int minBlockZ = pos.getMinBlockZ(); @@ -1029,38 +994,20 @@ index 3d614c00886278514197374c3e24a8f871fda321..47cd1b3b5f7a74dcff147a744420c622 if (!this.paperConfig().environment.disableIceAndSnow) { // Paper - Option to disable ice and snow for (int i = 0; i < randomTickSpeed; i++) { -@@ -629,7 +601,6 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -924,12 +895,9 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe } } // Paper - Option to disable ice and snow - profilerFiller.popPush("tickBlocks"); if (randomTickSpeed > 0) { - LevelChunkSection[] sections = chunk.getSections(); - -@@ -641,7 +612,6 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe - - for (int i2 = 0; i2 < randomTickSpeed; i2++) { - BlockPos blockRandomPos = this.getBlockRandomPos(minBlockX, blockPosCoord, minBlockZ, 15); -- profilerFiller.push("randomTick"); - BlockState blockState = levelChunkSection.getBlockState( - blockRandomPos.getX() - minBlockX, blockRandomPos.getY() - blockPosCoord, blockRandomPos.getZ() - minBlockZ - ); -@@ -653,14 +623,10 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe - if (fluidState.isRandomlyTicking()) { - fluidState.randomTick(this, blockRandomPos, this.random); - } -- -- profilerFiller.pop(); - } - } - } + this.optimiseRandomTick(chunk, randomTickSpeed); // Paper - optimise random ticking } - - profilerFiller.pop(); } public void tickThunder(LevelChunk chunk) { -@@ -668,8 +634,6 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -937,8 +905,6 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe boolean isRaining = this.isRaining(); int minBlockX = pos.getMinBlockX(); int minBlockZ = pos.getMinBlockZ(); @@ -1069,7 +1016,7 @@ index 3d614c00886278514197374c3e24a8f871fda321..47cd1b3b5f7a74dcff147a744420c622 if (!this.paperConfig().environment.disableThunder && isRaining && this.isThundering() && this.spigotConfig.thunderChance > 0 && this.random.nextInt(this.spigotConfig.thunderChance) == 0) { // Spigot // Paper - Option to disable thunder BlockPos blockPos = this.findLightningTargetAround(this.getBlockRandomPos(minBlockX, 0, minBlockZ, 15)); if (this.isRainingAt(blockPos)) { -@@ -695,8 +659,6 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -964,8 +930,6 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe } } } @@ -1078,7 +1025,7 @@ index 3d614c00886278514197374c3e24a8f871fda321..47cd1b3b5f7a74dcff147a744420c622 } @VisibleForTesting -@@ -978,17 +940,13 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -1259,17 +1223,13 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe } // Paper end - log detailed entity tick information entity.setOldPosAndRot(); @@ -1096,7 +1043,7 @@ index 3d614c00886278514197374c3e24a8f871fda321..47cd1b3b5f7a74dcff147a744420c622 for (Entity entity1 : entity.getPassengers()) { this.tickPassenger(entity, entity1, isActive); // Paper - EAR 2 -@@ -1009,9 +967,6 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -1290,9 +1250,6 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe passengerEntity.setOldPosAndRot(); passengerEntity.tickCount++; passengerEntity.totalEntityAge++; // Paper - age-like counter for all entities @@ -1106,7 +1053,7 @@ index 3d614c00886278514197374c3e24a8f871fda321..47cd1b3b5f7a74dcff147a744420c622 // Paper start - EAR 2 if (isActive) { passengerEntity.rideTick(); -@@ -1023,7 +978,6 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -1304,7 +1261,6 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe ridingEntity.positionRider(passengerEntity); } // Paper end - EAR 2 @@ -1115,7 +1062,7 @@ index 3d614c00886278514197374c3e24a8f871fda321..47cd1b3b5f7a74dcff147a744420c622 for (Entity entity : passengerEntity.getPassengers()) { this.tickPassenger(passengerEntity, entity, isActive); // Paper - EAR 2 diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java -index 9b3fea1260c46496b118fcec5d3556c77a973589..aa27b21deb786c15b193654bd3889e9f0a862b0b 100644 +index 6457f41fe7882d8c532e16851400c37a67e8cd52..d6826e878efb3e5532d23f04cc8e951a937cf29f 100644 --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java @@ -104,8 +104,6 @@ import net.minecraft.util.HashOps; @@ -1127,7 +1074,7 @@ index 9b3fea1260c46496b118fcec5d3556c77a973589..aa27b21deb786c15b193654bd3889e9f import net.minecraft.world.Container; import net.minecraft.world.Difficulty; import net.minecraft.world.InteractionHand; -@@ -1340,14 +1338,10 @@ public class ServerPlayer extends Player { +@@ -1376,14 +1374,10 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc this.unsetRemoved(); */ // CraftBukkit end @@ -1142,7 +1089,7 @@ index 9b3fea1260c46496b118fcec5d3556c77a973589..aa27b21deb786c15b193654bd3889e9f // CraftBukkit start this.isChangingDimension = true; // CraftBukkit - Set teleport invulnerability only if player changing worlds LevelData worlddata = level.getLevelData(); -@@ -1364,7 +1358,6 @@ public class ServerPlayer extends Player { +@@ -1400,7 +1394,6 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc this.connection.internalTeleport(PositionMoveRotation.of(teleportTransition), teleportTransition.relatives()); // CraftBukkit - use internal teleport without event this.connection.resetPosition(); level.addDuringTeleport(this); @@ -1270,7 +1217,7 @@ index 64b0508ef21952c65b0b967b756b2a4c64d96899..b6b03fbbd669e6331b30255df5419611 protected abstract T prepare(ResourceManager resourceManager, ProfilerFiller profiler); diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index 6e854244ccb4c84de907934c952b33fd8d2ef6ee..46c8358e61ca2e1e7e63e301dc8a9604e0ec6f97 100644 +index 9a0334134d8020e9d52e542859f29b5c6efad643..a8be25542f63d6166cbed065e5006cbf27253d49 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java @@ -82,8 +82,6 @@ import net.minecraft.tags.FluidTags; @@ -1282,7 +1229,7 @@ index 6e854244ccb4c84de907934c952b33fd8d2ef6ee..46c8358e61ca2e1e7e63e301dc8a9604 import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.Nameable; -@@ -706,8 +704,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -812,8 +810,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess // CraftBukkit end public void baseTick() { @@ -1291,7 +1238,7 @@ index 6e854244ccb4c84de907934c952b33fd8d2ef6ee..46c8358e61ca2e1e7e63e301dc8a9604 if (firstTick && this instanceof net.minecraft.world.entity.NeutralMob neutralMob) neutralMob.tickInitialPersistentAnger(level); // Paper - Prevent entity loading causing async lookups this.inBlockState = null; if (this.isPassenger() && this.getVehicle().isRemoved()) { -@@ -764,8 +760,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -870,8 +866,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess if (this.level() instanceof ServerLevel serverLevelx && this instanceof Leashable) { Leashable.tickLeash(serverLevelx, (Entity & Leashable)this); } @@ -1300,7 +1247,7 @@ index 6e854244ccb4c84de907934c952b33fd8d2ef6ee..46c8358e61ca2e1e7e63e301dc8a9604 } public void setSharedFlagOnFire(boolean isOnFire) { -@@ -985,8 +979,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1091,8 +1085,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } } @@ -1309,7 +1256,7 @@ index 6e854244ccb4c84de907934c952b33fd8d2ef6ee..46c8358e61ca2e1e7e63e301dc8a9604 if (this.stuckSpeedMultiplier.lengthSqr() > 1.0E-7) { movement = movement.multiply(this.stuckSpeedMultiplier); this.stuckSpeedMultiplier = Vec3.ZERO; -@@ -995,7 +987,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1101,7 +1093,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess // Paper start - ignore movement changes while inactive. if (isTemporarilyActive && !(this instanceof ItemEntity) && movement == getDeltaMovement() && type == MoverType.SELF) { setDeltaMovement(Vec3.ZERO); @@ -1317,7 +1264,7 @@ index 6e854244ccb4c84de907934c952b33fd8d2ef6ee..46c8358e61ca2e1e7e63e301dc8a9604 return; } // Paper end -@@ -1030,8 +1021,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1136,8 +1127,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess this.setPos(vec31); } @@ -1326,7 +1273,7 @@ index 6e854244ccb4c84de907934c952b33fd8d2ef6ee..46c8358e61ca2e1e7e63e301dc8a9604 boolean flag = !Mth.equal(movement.x, vec3.x); boolean flag1 = !Mth.equal(movement.z, vec3.z); this.horizontalCollision = flag || flag1; -@@ -1054,7 +1043,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1160,7 +1149,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } if (this.isRemoved()) { @@ -1334,7 +1281,7 @@ index 6e854244ccb4c84de907934c952b33fd8d2ef6ee..46c8358e61ca2e1e7e63e301dc8a9604 } else { if (this.horizontalCollision) { Vec3 deltaMovement = this.getDeltaMovement(); -@@ -1098,7 +1086,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1204,7 +1192,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess float blockSpeedFactor = this.getBlockSpeedFactor(); this.setDeltaMovement(this.getDeltaMovement().multiply(blockSpeedFactor, 1.0, blockSpeedFactor)); @@ -1342,7 +1289,7 @@ index 6e854244ccb4c84de907934c952b33fd8d2ef6ee..46c8358e61ca2e1e7e63e301dc8a9604 } } // Paper start - detailed watchdog information -@@ -2954,8 +2941,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3191,8 +3178,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess this.processPortalCooldown(); if (this.portalProcess != null) { if (this.portalProcess.processPortalTeleportation(serverLevel, this, this.canUsePortal(false))) { @@ -1351,7 +1298,7 @@ index 6e854244ccb4c84de907934c952b33fd8d2ef6ee..46c8358e61ca2e1e7e63e301dc8a9604 this.setPortalCooldown(); TeleportTransition portalDestination = this.portalProcess.getPortalDestination(serverLevel, this); if (portalDestination != null) { -@@ -2966,7 +2951,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3203,7 +3188,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } } @@ -1359,7 +1306,7 @@ index 6e854244ccb4c84de907934c952b33fd8d2ef6ee..46c8358e61ca2e1e7e63e301dc8a9604 } else if (this.portalProcess.hasExpired()) { this.portalProcess = null; } -@@ -3521,15 +3505,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3758,15 +3742,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess entity.teleport(this.calculatePassengerTransition(teleportTransition, entity)); } @@ -1375,7 +1322,7 @@ index 6e854244ccb4c84de907934c952b33fd8d2ef6ee..46c8358e61ca2e1e7e63e301dc8a9604 return this; } -@@ -3545,11 +3526,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3782,11 +3763,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } } @@ -1387,7 +1334,7 @@ index 6e854244ccb4c84de907934c952b33fd8d2ef6ee..46c8358e61ca2e1e7e63e301dc8a9604 return null; } else { // Paper start - Fix item duplication and teleport issues -@@ -3568,7 +3546,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3805,7 +3783,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess level.resetEmptyTime(); teleportTransition.postTeleportTransition().onTransition(entityx); @@ -2110,7 +2057,7 @@ index e0e0d2ea7fc60e3142c675404d152eca60263240..09d559adb603e3d34bb82b944a2a3e8c this.assignProfessionWhenSpawned = false; } diff --git a/net/minecraft/world/level/Level.java b/net/minecraft/world/level/Level.java -index dbbf6fc4ef52d179ac694b0cfff921323e0c758b..800e12ac2ca850fbd4e2a7df84295ceff758fdac 100644 +index e2829222337ed5a5061b60a153c8224eb53de9e8..78b368886648f034b7f1a97a922b97cc62b2fa02 100644 --- a/net/minecraft/world/level/Level.java +++ b/net/minecraft/world/level/Level.java @@ -35,8 +35,6 @@ import net.minecraft.util.AbortableIterationConsumer; @@ -2122,7 +2069,7 @@ index dbbf6fc4ef52d179ac694b0cfff921323e0c758b..800e12ac2ca850fbd4e2a7df84295cef import net.minecraft.world.DifficultyInstance; import net.minecraft.world.TickRateManager; import net.minecraft.world.damagesource.DamageSource; -@@ -817,8 +815,6 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl +@@ -1452,8 +1450,6 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl } protected void tickBlockEntities() { @@ -2131,7 +2078,7 @@ index dbbf6fc4ef52d179ac694b0cfff921323e0c758b..800e12ac2ca850fbd4e2a7df84295cef this.tickingBlockEntities = true; if (!this.pendingBlockEntityTickers.isEmpty()) { this.blockEntityTickers.addAll(this.pendingBlockEntityTickers); -@@ -842,7 +838,6 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl +@@ -1483,7 +1479,6 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl this.blockEntityTickers.removeAll(toRemove); // Paper - Fix MC-117075 this.tickingBlockEntities = false; @@ -2139,24 +2086,25 @@ index dbbf6fc4ef52d179ac694b0cfff921323e0c758b..800e12ac2ca850fbd4e2a7df84295cef this.spigotConfig.currentPrimedTnt = 0; // Spigot } -@@ -1093,7 +1088,6 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl +@@ -1742,7 +1737,6 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl @Override public List getEntities(@Nullable Entity entity, AABB boundingBox, Predicate predicate) { - Profiler.get().incrementCounter("getEntities"); List list = Lists.newArrayList(); - this.getEntities().get(boundingBox, entity1 -> { - if (entity1 != entity && predicate.test(entity1)) { -@@ -1127,7 +1121,6 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl - public void getEntities( - EntityTypeTest entityTypeTest, AABB bounds, Predicate predicate, List output, int maxResults - ) { + + // Paper start - rewrite chunk system +@@ -1771,8 +1765,6 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl + public void getEntities(final EntityTypeTest entityTypeTest, + final AABB boundingBox, final Predicate predicate, + final List into, final int maxCount) { - Profiler.get().incrementCounter("getEntities"); - this.getEntities().get(entityTypeTest, bounds, entity -> { - if (predicate.test(entity)) { - output.add(entity); +- + if (entityTypeTest instanceof net.minecraft.world.entity.EntityType byType) { + if (maxCount != Integer.MAX_VALUE) { + ((ca.spottedleaf.moonrise.patches.chunk_system.level.ChunkSystemLevel)this).moonrise$getEntityLookup().getEntities(byType, boundingBox, into, predicate, maxCount); diff --git a/net/minecraft/world/level/NaturalSpawner.java b/net/minecraft/world/level/NaturalSpawner.java -index 3a864c568cd66a680760bb4df2cb020e323e9a9d..3888e174963c2e95f1cd2258c4c1d6ec4a85d267 100644 +index 14a2514a408a66a83f7b5fb43b4c4dc8f23fd5f4..ec32d77447dd250857a2af1d8cc3e6e233aa3e6e 100644 --- a/net/minecraft/world/level/NaturalSpawner.java +++ b/net/minecraft/world/level/NaturalSpawner.java @@ -23,8 +23,6 @@ import net.minecraft.tags.BlockTags; @@ -2168,7 +2116,7 @@ index 3a864c568cd66a680760bb4df2cb020e323e9a9d..3888e174963c2e95f1cd2258c4c1d6ec import net.minecraft.util.random.WeightedList; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntitySpawnReason; -@@ -139,16 +137,11 @@ public final class NaturalSpawner { +@@ -152,9 +150,6 @@ public final class NaturalSpawner { } public static void spawnForChunk(ServerLevel level, LevelChunk chunk, NaturalSpawner.SpawnState spawnState, List categories) { @@ -2176,8 +2124,10 @@ index 3a864c568cd66a680760bb4df2cb020e323e9a9d..3888e174963c2e95f1cd2258c4c1d6ec - profilerFiller.push("spawner"); - for (MobCategory mobCategory : categories) { - if (spawnState.canSpawnForCategoryLocal(mobCategory, chunk.getPos())) { - spawnCategoryForChunk(mobCategory, level, chunk, spawnState::canSpawn, spawnState::afterSpawn); + // Paper start - Optional per player mob spawns + final boolean canSpawn; +@@ -189,8 +184,6 @@ public final class NaturalSpawner { + // Paper end - Optional per player mob spawns } } - @@ -2186,7 +2136,7 @@ index 3a864c568cd66a680760bb4df2cb020e323e9a9d..3888e174963c2e95f1cd2258c4c1d6ec // Paper start - Add mobcaps commands diff --git a/net/minecraft/world/level/ServerExplosion.java b/net/minecraft/world/level/ServerExplosion.java -index 01083cf32b4b0bd57d1b0ac83eb4e43d9d90fa98..5b839c2a682595ecedf15ab08fecbf8861a9caa5 100644 +index ec4b63a574e7ff2c807c283c9f4b402229864e51..63d0b83d648ab1a6e7c84a49f7e2e825076904ad 100644 --- a/net/minecraft/world/level/ServerExplosion.java +++ b/net/minecraft/world/level/ServerExplosion.java @@ -13,8 +13,6 @@ import net.minecraft.Util; @@ -2198,7 +2148,7 @@ index 01083cf32b4b0bd57d1b0ac83eb4e43d9d90fa98..5b839c2a682595ecedf15ab08fecbf88 import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; -@@ -364,10 +362,7 @@ public class ServerExplosion implements Explosion { +@@ -654,10 +652,7 @@ public class ServerExplosion implements Explosion { List list = this.calculateExplodedPositions(); this.hurtEntities(); if (this.interactsWithBlocks()) { @@ -2210,7 +2160,7 @@ index 01083cf32b4b0bd57d1b0ac83eb4e43d9d90fa98..5b839c2a682595ecedf15ab08fecbf88 if (this.fire) { diff --git a/net/minecraft/world/level/chunk/LevelChunk.java b/net/minecraft/world/level/chunk/LevelChunk.java -index 08e2442f6965cc6eaab67bdf9340a5152c08db2a..626e87d9c1862fe0c896172ee240844e50d7902f 100644 +index 5d3fc807221392d378fec283bfdefb8747fb8376..61fa8f2bf018b8892a11acec058f36914c5a1573 100644 --- a/net/minecraft/world/level/chunk/LevelChunk.java +++ b/net/minecraft/world/level/chunk/LevelChunk.java @@ -23,8 +23,6 @@ import net.minecraft.network.FriendlyByteBuf; @@ -2222,20 +2172,20 @@ index 08e2442f6965cc6eaab67bdf9340a5152c08db2a..626e87d9c1862fe0c896172ee240844e import net.minecraft.world.entity.Entity; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.Level; -@@ -336,12 +334,8 @@ public class LevelChunk extends ChunkAccess { +@@ -383,12 +381,8 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p } if (LightEngine.hasDifferentLightProperties(blockState, state)) { - ProfilerFiller profilerFiller = Profiler.get(); - profilerFiller.push("updateSkyLightSources"); - this.skyLightSources.update(this, i, y, i2); + // Paper - rewrite chunk system - profilerFiller.popPush("queueCheckLight"); this.level.getChunkSource().getLightEngine().checkBlock(pos); - profilerFiller.pop(); } boolean flag = !blockState.is(block); -@@ -840,8 +834,6 @@ public class LevelChunk extends ChunkAccess { +@@ -915,8 +909,6 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p BlockPos blockPos = this.blockEntity.getBlockPos(); if (LevelChunk.this.isTicking(blockPos)) { try { @@ -2244,7 +2194,7 @@ index 08e2442f6965cc6eaab67bdf9340a5152c08db2a..626e87d9c1862fe0c896172ee240844e BlockState blockState = LevelChunk.this.getBlockState(blockPos); if (this.blockEntity.getType().isValid(blockState)) { this.ticker.tick(LevelChunk.this.level, this.blockEntity.getBlockPos(), blockState, this.blockEntity); -@@ -855,8 +847,6 @@ public class LevelChunk extends ChunkAccess { +@@ -930,8 +922,6 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p } // Paper end - Remove the Block Entity if it's invalid } diff --git a/leaf-server/minecraft-patches/features/0008-Simpler-ShapelessRecipe-comparison-for-vanilla.patch b/leaf-server/minecraft-patches/features/0008-Simpler-ShapelessRecipe-comparison-for-vanilla.patch index ac1c3a4f..c445a7a1 100644 --- a/leaf-server/minecraft-patches/features/0008-Simpler-ShapelessRecipe-comparison-for-vanilla.patch +++ b/leaf-server/minecraft-patches/features/0008-Simpler-ShapelessRecipe-comparison-for-vanilla.patch @@ -37,7 +37,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . diff --git a/net/minecraft/world/item/crafting/ShapelessRecipe.java b/net/minecraft/world/item/crafting/ShapelessRecipe.java -index fb317eafeed39adff793bffa8f6b21c37a32086c..0d84f807cf806ae2951d5074bf4fcaa8dbbb044a 100644 +index d601b54b1de2f2ae44fe2b20c8116c71a6340e45..6a53e97d27d746621892ced4ca5b4a56b6bc4c23 100644 --- a/net/minecraft/world/item/crafting/ShapelessRecipe.java +++ b/net/minecraft/world/item/crafting/ShapelessRecipe.java @@ -23,8 +23,16 @@ public class ShapelessRecipe implements CraftingRecipe { @@ -84,6 +84,6 @@ index fb317eafeed39adff793bffa8f6b21c37a32086c..0d84f807cf806ae2951d5074bf4fcaa8 + return ingredients.isEmpty(); + } + // Gale end - Airplane - simpler ShapelessRecipe comparison for vanilla + // Paper start - Improve exact choice recipe ingredients & unwrap ternary if (input.ingredientCount() != this.ingredients.size()) { return false; - } else { diff --git a/leaf-server/minecraft-patches/features/0016-Better-checking-for-useless-move-packets.patch b/leaf-server/minecraft-patches/features/0016-Better-checking-for-useless-move-packets.patch index f194c2af..842da3f6 100644 --- a/leaf-server/minecraft-patches/features/0016-Better-checking-for-useless-move-packets.patch +++ b/leaf-server/minecraft-patches/features/0016-Better-checking-for-useless-move-packets.patch @@ -31,10 +31,10 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . diff --git a/net/minecraft/server/level/ServerEntity.java b/net/minecraft/server/level/ServerEntity.java -index 3f83a589442a80e9c16b5e9cd0f50792defd12bc..e945564034f1f0a83dcdd39b8889c7aa61bfd199 100644 +index 257ecbcf7d463eefb951867a5426eaf24e356305..bcbc25c6dc5a2063b1ad410194a25b0d5ff7c8d8 100644 --- a/net/minecraft/server/level/ServerEntity.java +++ b/net/minecraft/server/level/ServerEntity.java -@@ -172,19 +172,25 @@ public class ServerEntity { +@@ -184,19 +184,25 @@ public class ServerEntity { packet = ClientboundEntityPositionSyncPacket.of(this.entity); flag3 = true; flag4 = true; diff --git a/leaf-server/minecraft-patches/features/0019-Remove-lambda-from-ticking-guard.patch b/leaf-server/minecraft-patches/features/0019-Remove-lambda-from-ticking-guard.patch index 6202b335..04336b70 100644 --- a/leaf-server/minecraft-patches/features/0019-Remove-lambda-from-ticking-guard.patch +++ b/leaf-server/minecraft-patches/features/0019-Remove-lambda-from-ticking-guard.patch @@ -31,10 +31,10 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index 47cd1b3b5f7a74dcff147a744420c622ec750e7a..39cf21effb3ffd1230c5874c5a95771d8e6a42c9 100644 +index 1d53c0b96ff781765155aac29256f4493f7d7c58..eb2a6b82dc38989bcc155281aaafaced6fce78a0 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java -@@ -545,7 +545,19 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -784,7 +784,19 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe entity.stopRiding(); } @@ -56,10 +56,10 @@ index 47cd1b3b5f7a74dcff147a744420c622ec750e7a..39cf21effb3ffd1230c5874c5a95771d } } diff --git a/net/minecraft/world/level/Level.java b/net/minecraft/world/level/Level.java -index 800e12ac2ca850fbd4e2a7df84295ceff758fdac..270720ac00b0dc4ccbe08b789728dd09d0a9f1e3 100644 +index 78b368886648f034b7f1a97a922b97cc62b2fa02..fb213dc889abafaaf35a69b06b1c35041ac65b46 100644 --- a/net/minecraft/world/level/Level.java +++ b/net/minecraft/world/level/Level.java -@@ -849,8 +849,9 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl +@@ -1490,8 +1490,9 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl final String msg = String.format("Entity threw exception at %s:%s,%s,%s", entity.level().getWorld().getName(), entity.getX(), entity.getY(), entity.getZ()); MinecraftServer.LOGGER.error(msg, var6); getCraftServer().getPluginManager().callEvent(new com.destroystokyo.paper.event.server.ServerExceptionEvent(new com.destroystokyo.paper.exception.ServerInternalException(msg, var6))); // Paper - ServerExceptionEvent @@ -68,5 +68,5 @@ index 800e12ac2ca850fbd4e2a7df84295ceff758fdac..270720ac00b0dc4ccbe08b789728dd09 // Paper end - Prevent block entity and entity crashes + //this.moonrise$midTickTasks(); // Paper - rewrite chunk system // Gale - Airplane - remove lambda from ticking guard - diff on change ServerLevel#tick } + this.moonrise$midTickTasks(); // Paper - rewrite chunk system } - diff --git a/leaf-server/minecraft-patches/features/0026-Reduce-hopper-item-checks.patch b/leaf-server/minecraft-patches/features/0026-Reduce-hopper-item-checks.patch index 58302e30..f269e436 100644 --- a/leaf-server/minecraft-patches/features/0026-Reduce-hopper-item-checks.patch +++ b/leaf-server/minecraft-patches/features/0026-Reduce-hopper-item-checks.patch @@ -105,10 +105,10 @@ index 484c2ba2752fbf3ad929e46c2f078e906f6f0637..6ced5a7e27703a7cf5a7495dc3a1a290 double getLevelY(); diff --git a/net/minecraft/world/level/block/entity/HopperBlockEntity.java b/net/minecraft/world/level/block/entity/HopperBlockEntity.java -index 9a03934dd4d96184f37b9ff5661eb7bd76150464..c7591bb0b4755f28dffc2b3e6c4600d22480bbf1 100644 +index 15d4f60942c0cc612c1468b4c0fda886867a67cb..c2c7832fbb207ecfd23c7a086ef72db9648f48f9 100644 --- a/net/minecraft/world/level/block/entity/HopperBlockEntity.java +++ b/net/minecraft/world/level/block/entity/HopperBlockEntity.java -@@ -302,7 +302,7 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen +@@ -544,7 +544,7 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen return false; } else { boolean flag = hopper.isGridAligned() && blockState.isCollisionShapeFullBlock(level, blockPos) && !blockState.is(BlockTags.DOES_NOT_BLOCK_HOPPERS); @@ -117,8 +117,8 @@ index 9a03934dd4d96184f37b9ff5661eb7bd76150464..c7591bb0b4755f28dffc2b3e6c4600d2 for (ItemEntity itemEntity : getItemsAtAndAbove(level, hopper)) { if (addItem(hopper, itemEntity)) { return true; -@@ -565,6 +565,34 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen - return stack1.getCount() <= stack1.getMaxStackSize() && ItemStack.isSameItemSameComponents(stack1, stack2); +@@ -820,6 +820,34 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen + return stack1.getCount() < stack1.getMaxStackSize() && ItemStack.isSameItemSameComponents(stack1, stack2); // Paper - Perf: Optimize Hoppers; used to return true for full itemstacks?! } + // Gale start - EMC - reduce hopper item checks diff --git a/leaf-server/minecraft-patches/features/0029-Do-not-process-chat-commands-before-player-has-joine.patch b/leaf-server/minecraft-patches/features/0029-Do-not-process-chat-commands-before-player-has-joine.patch index c74a6a78..ab67f28b 100644 --- a/leaf-server/minecraft-patches/features/0029-Do-not-process-chat-commands-before-player-has-joine.patch +++ b/leaf-server/minecraft-patches/features/0029-Do-not-process-chat-commands-before-player-has-joine.patch @@ -13,10 +13,10 @@ As part of: EmpireCraft (https://github.com/starlis/empirecraft) Licensed under: MIT (https://opensource.org/licenses/MIT) diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java -index 20b6cfe278f2bd87dfe2cbf7befef745d36bb845..4973de0813f07d657a1e7b1930af7ab583a39f65 100644 +index d6826e878efb3e5532d23f04cc8e951a937cf29f..62e49f844c477c92894d77b469c1537b05fa7677 100644 --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java -@@ -416,6 +416,7 @@ public class ServerPlayer extends Player { +@@ -422,6 +422,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc public boolean sentListPacket = false; public boolean supressTrackerForLogin = false; // Paper - Fire PlayerJoinEvent when Player is actually ready // CraftBukkit end @@ -38,7 +38,7 @@ index df7142bbfec170966373dcf4ac50e4bbc5ba4e53..dea2a849a1d1f2dcfc1e63eb873ada99 // CraftBukkit start if (sync) { diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java -index 48eae4ea5999aee4faa5b24a72e7b0b51c598fc8..2726f72c86368fe804dce43dc6c337bfe213cc58 100644 +index 7517812d79c44358f2824dce29326d2d2d3b178e..818e7c6f5b2b06c901463fda296cb4673f6d271b 100644 --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java @@ -334,6 +334,8 @@ public abstract class PlayerList { diff --git a/leaf-server/minecraft-patches/features/0033-Do-not-log-setBlock-in-far-chunks.patch b/leaf-server/minecraft-patches/features/0033-Do-not-log-setBlock-in-far-chunks.patch index 61527f1e..e6ab9df7 100644 --- a/leaf-server/minecraft-patches/features/0033-Do-not-log-setBlock-in-far-chunks.patch +++ b/leaf-server/minecraft-patches/features/0033-Do-not-log-setBlock-in-far-chunks.patch @@ -37,10 +37,10 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/net/minecraft/server/level/WorldGenRegion.java b/net/minecraft/server/level/WorldGenRegion.java -index b30f56fbc1fd17259a1d05dc9155fffcab292ca1..1aa26a70177e4ecf9d859fca44adc6a96b853c30 100644 +index 11fed81a4696ba18440e755c3b8a5ca39ed8a6b1..e1bc9ee6cce51a8909bf48eb8faeaf7e247c9fc9 100644 --- a/net/minecraft/server/level/WorldGenRegion.java +++ b/net/minecraft/server/level/WorldGenRegion.java -@@ -284,7 +284,7 @@ public class WorldGenRegion implements WorldGenLevel { +@@ -314,7 +314,7 @@ public class WorldGenRegion implements WorldGenLevel { return true; } else { // Paper start - Buffer OOB setBlock calls diff --git a/leaf-server/minecraft-patches/features/0036-Do-not-log-Not-Secure-marker.patch b/leaf-server/minecraft-patches/features/0036-Do-not-log-Not-Secure-marker.patch index 75dcd20b..09af5b13 100644 --- a/leaf-server/minecraft-patches/features/0036-Do-not-log-Not-Secure-marker.patch +++ b/leaf-server/minecraft-patches/features/0036-Do-not-log-Not-Secure-marker.patch @@ -7,10 +7,10 @@ License: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) Gale - https://galemc.org diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java -index 2726f72c86368fe804dce43dc6c337bfe213cc58..5abc0655ffc68ce81248467e7420051b2a2f0359 100644 +index 818e7c6f5b2b06c901463fda296cb4673f6d271b..29904ffc7aa1b60ceb94cd2e4f7c86d26e398e6c 100644 --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java -@@ -1252,7 +1252,7 @@ public abstract class PlayerList { +@@ -1267,7 +1267,7 @@ public abstract class PlayerList { public void broadcastChatMessage(PlayerChatMessage message, Predicate shouldFilterMessageTo, @Nullable ServerPlayer sender, ChatType.Bound boundChatType, @Nullable Function unsignedFunction) { // Paper end boolean flag = this.verifyChatTrusted(message); diff --git a/leaf-server/minecraft-patches/features/0045-Reduce-array-allocations.patch b/leaf-server/minecraft-patches/features/0045-Reduce-array-allocations.patch index 50c73c16..87fd352f 100644 --- a/leaf-server/minecraft-patches/features/0045-Reduce-array-allocations.patch +++ b/leaf-server/minecraft-patches/features/0045-Reduce-array-allocations.patch @@ -80,10 +80,10 @@ index 8ef16f98996b1ec0c9c3f158248ac95f1b07328f..6780b2493d625603b74e635c4996bb83 private static final Codec ARG_CODEC = Codec.either(PRIMITIVE_ARG_CODEC, ComponentSerialization.CODEC) .xmap( diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index 679c94142eac06ec0bc6f3b819ee4f7e831c4626..0d8fe6a658c1ad15f6243af5d2562505c41e3e8d 100644 +index eb2a6b82dc38989bcc155281aaafaced6fce78a0..866671513a598737cb618d149a96eecce5e36184 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java -@@ -937,7 +937,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -1220,7 +1220,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe public static List getCurrentlyTickingEntities() { Entity ticking = currentlyTickingEntity.get(); @@ -119,7 +119,7 @@ index d445e8f126f077d8419c52fa5436ea963a1a42a4..39483f7b453d6faedeccc1ab1eda7666 public boolean isEmpty() { diff --git a/net/minecraft/util/ZeroBitStorage.java b/net/minecraft/util/ZeroBitStorage.java -index 8cc5c0716392ba06501542ff5cbe71ee43979e5d..64945449807e49115b9115ee114cd3acad3d1ef8 100644 +index 09fd99c9cbd23b5f3c899bfb00c9b89651948ed8..5c1103ef028e5ffe6ce0eadc861dd3b2c8f3ed9f 100644 --- a/net/minecraft/util/ZeroBitStorage.java +++ b/net/minecraft/util/ZeroBitStorage.java @@ -5,7 +5,7 @@ import java.util.function.IntConsumer; @@ -164,10 +164,10 @@ index 381e0a1c0af7e339713ed1df1c2f21121c1bbd0f..4e847c3f9d761da5dda11dec60582d9d equipmentSlotGroup -> equipmentSlotGroup.id, values(), ByIdMap.OutOfBoundsStrategy.ZERO ); diff --git a/net/minecraft/world/item/ItemStack.java b/net/minecraft/world/item/ItemStack.java -index c206187e2e4a3600681caadd4efd6293e42a9177..3958cd983242fc60c1868ce2a3ec804047d118c0 100644 +index 77c4bf12c8344dd3699142decaec42330100f1e7..25c806ca9abebdaa6031e3f350fdf1c7deac7c4e 100644 --- a/net/minecraft/world/item/ItemStack.java +++ b/net/minecraft/world/item/ItemStack.java -@@ -1168,7 +1168,7 @@ public final class ItemStack implements DataComponentHolder { +@@ -1174,7 +1174,7 @@ public final class ItemStack implements DataComponentHolder { private void addAttributeTooltips(Consumer tooltipAdder, TooltipDisplay tooltipDisplay, @Nullable Player player) { if (tooltipDisplay.shows(DataComponents.ATTRIBUTE_MODIFIERS)) { diff --git a/leaf-server/minecraft-patches/features/0046-Optimize-sun-burn-tick.patch b/leaf-server/minecraft-patches/features/0046-Optimize-sun-burn-tick.patch index 43261cb8..752cd6cc 100644 --- a/leaf-server/minecraft-patches/features/0046-Optimize-sun-burn-tick.patch +++ b/leaf-server/minecraft-patches/features/0046-Optimize-sun-burn-tick.patch @@ -13,10 +13,10 @@ As part of: JettPack (https://gitlab.com/Titaniumtown/JettPack) Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index c3c480cb21f7f952cc09b36e24c462822b663b28..91185d7f8f2206fea9cb1d96611b8409f82694f2 100644 +index a8be25542f63d6166cbed065e5006cbf27253d49..c51776867d87640c20cd317a33dc5c654f1e7a51 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java -@@ -1865,10 +1865,20 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -2013,10 +2013,20 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @Deprecated public float getLightLevelDependentMagicValue() { diff --git a/leaf-server/minecraft-patches/features/0054-Cache-BlockStatePairKey-hash.patch b/leaf-server/minecraft-patches/features/0054-Cache-BlockStatePairKey-hash.patch index 140ddadb..94ca608f 100644 --- a/leaf-server/minecraft-patches/features/0054-Cache-BlockStatePairKey-hash.patch +++ b/leaf-server/minecraft-patches/features/0054-Cache-BlockStatePairKey-hash.patch @@ -13,10 +13,10 @@ As part of: Lithium (https://github.com/CaffeineMC/lithium-fabric) Licensed under: LGPL-3.0 (https://www.gnu.org/licenses/lgpl-3.0.html) diff --git a/net/minecraft/world/level/material/FlowingFluid.java b/net/minecraft/world/level/material/FlowingFluid.java -index ab8babd32b7d71bc14049c8778525499e715bd12..95ffd0195b9e0792c6b84115d1a1196231b39cec 100644 +index 6bac3fb751e114855b9b072a7880ab370f111218..91567d45fd809f2fee7ab9abbd27f43869b71016 100644 --- a/net/minecraft/world/level/material/FlowingFluid.java +++ b/net/minecraft/world/level/material/FlowingFluid.java -@@ -484,7 +484,26 @@ public abstract class FlowingFluid extends Fluid { +@@ -536,7 +536,26 @@ public abstract class FlowingFluid extends Fluid { : this.shapes.computeIfAbsent(state, fluidState -> Shapes.box(0.0, 0.0, 0.0, 1.0, fluidState.getHeight(level, pos), 1.0)); } @@ -44,7 +44,7 @@ index ab8babd32b7d71bc14049c8778525499e715bd12..95ffd0195b9e0792c6b84115d1a11962 @Override public boolean equals(Object object) { return object instanceof FlowingFluid.BlockStatePairKey blockStatePairKey -@@ -495,9 +514,7 @@ public abstract class FlowingFluid extends Fluid { +@@ -547,9 +566,7 @@ public abstract class FlowingFluid extends Fluid { @Override public int hashCode() { diff --git a/leaf-server/minecraft-patches/features/0059-Faster-chunk-serialization.patch b/leaf-server/minecraft-patches/features/0059-Faster-chunk-serialization.patch index ad4ea671..f6cfe2d3 100644 --- a/leaf-server/minecraft-patches/features/0059-Faster-chunk-serialization.patch +++ b/leaf-server/minecraft-patches/features/0059-Faster-chunk-serialization.patch @@ -16,21 +16,21 @@ As part of: Lithium (https://github.com/CaffeineMC/lithium-fabric) Licensed under: LGPL-3.0 (https://www.gnu.org/licenses/lgpl-3.0.html) diff --git a/net/minecraft/util/BitStorage.java b/net/minecraft/util/BitStorage.java -index 32fe9b22e1d3a422dd80c64d61156dbc7241ba20..00e56ccb9dc2b8a6c83ba9b7e44f61deb5dc24f3 100644 +index 02502d50f0255f5bbcc0ecb965abb48cc1a112da..e1f4ca261d106d176298b2afc016f5168abaa06b 100644 --- a/net/minecraft/util/BitStorage.java +++ b/net/minecraft/util/BitStorage.java -@@ -20,4 +20,6 @@ public interface BitStorage { - void unpack(int[] array); - - BitStorage copy(); +@@ -38,4 +38,6 @@ public interface BitStorage extends ca.spottedleaf.moonrise.patches.block_counti + return ret; + } + // Paper end - block counting + + void compact(net.minecraft.world.level.chunk.Palette srcPalette, net.minecraft.world.level.chunk.Palette dstPalette, short[] out); // Gale - Lithium - faster chunk serialization } diff --git a/net/minecraft/util/SimpleBitStorage.java b/net/minecraft/util/SimpleBitStorage.java -index 6fb3a3f167d8cbaa78135af0c180b592661e2c1d..10db8a7bfab5a305a2a3f4ff7c3cd55066e7d1a9 100644 +index e6306a68c8652d4c5d22d5ecb1416f5f931f76ee..8091f0c0a536047ead4966e70785962e87faad9a 100644 --- a/net/minecraft/util/SimpleBitStorage.java +++ b/net/minecraft/util/SimpleBitStorage.java -@@ -360,4 +360,45 @@ public class SimpleBitStorage implements BitStorage { +@@ -465,4 +465,45 @@ public class SimpleBitStorage implements BitStorage { super(message); } } @@ -77,18 +77,18 @@ index 6fb3a3f167d8cbaa78135af0c180b592661e2c1d..10db8a7bfab5a305a2a3f4ff7c3cd550 + } diff --git a/net/minecraft/util/ZeroBitStorage.java b/net/minecraft/util/ZeroBitStorage.java -index 64945449807e49115b9115ee114cd3acad3d1ef8..41cd253abf87807167e24a537a6e5bbe52f7daee 100644 +index 5c1103ef028e5ffe6ce0eadc861dd3b2c8f3ed9f..828ced8aa5665c6f5d0b121947719c4e2ba591fe 100644 --- a/net/minecraft/util/ZeroBitStorage.java +++ b/net/minecraft/util/ZeroBitStorage.java -@@ -62,4 +62,6 @@ public class ZeroBitStorage implements BitStorage { - public BitStorage copy() { - return this; +@@ -80,4 +80,6 @@ public class ZeroBitStorage implements BitStorage { + return ret; } + // Paper end - block counting + + @Override public void compact(net.minecraft.world.level.chunk.Palette srcPalette, net.minecraft.world.level.chunk.Palette dstPalette, short[] out) {} // Gale - Lithium - faster chunk serialization } diff --git a/net/minecraft/world/level/chunk/PalettedContainer.java b/net/minecraft/world/level/chunk/PalettedContainer.java -index 6781df510906f4e7e51ea852f3d2f6dcbea42b3b..8ea91b6437cdc4fe53a7c5e944109a8b6f372908 100644 +index 95b5249fbd7e255a115403c3fbe88d402444b3cb..9dcbc18634302916abe8fe3ecd035b9c7966ec7f 100644 --- a/net/minecraft/world/level/chunk/PalettedContainer.java +++ b/net/minecraft/world/level/chunk/PalettedContainer.java @@ -25,6 +25,22 @@ import net.minecraft.util.ThreadingDetector; @@ -114,7 +114,7 @@ index 6781df510906f4e7e51ea852f3d2f6dcbea42b3b..8ea91b6437cdc4fe53a7c5e944109a8b private static final int MIN_PALETTE_BITS = 0; private final PaletteResize dummyPaletteResize = (bits, objectAdded) -> 0; public final IdMap registry; -@@ -307,28 +323,54 @@ public class PalettedContainer implements PaletteResize, PalettedContainer +@@ -344,28 +360,54 @@ public class PalettedContainer implements PaletteResize, PalettedContainer public synchronized PalettedContainerRO.PackedData pack(IdMap registry, PalettedContainer.Strategy strategy) { // Paper - synchronize this.acquire(); @@ -184,7 +184,7 @@ index 6781df510906f4e7e51ea852f3d2f6dcbea42b3b..8ea91b6437cdc4fe53a7c5e944109a8b } private static void swapPalette(int[] bits, IntUnaryOperator operator) { -@@ -368,13 +410,33 @@ public class PalettedContainer implements PaletteResize, PalettedContainer +@@ -405,13 +447,33 @@ public class PalettedContainer implements PaletteResize, PalettedContainer @Override public void count(PalettedContainer.CountConsumer countConsumer) { diff --git a/leaf-server/minecraft-patches/features/0062-Skip-entity-move-if-movement-is-zero.patch b/leaf-server/minecraft-patches/features/0062-Skip-entity-move-if-movement-is-zero.patch index e8fcde05..edcddc65 100644 --- a/leaf-server/minecraft-patches/features/0062-Skip-entity-move-if-movement-is-zero.patch +++ b/leaf-server/minecraft-patches/features/0062-Skip-entity-move-if-movement-is-zero.patch @@ -13,10 +13,10 @@ As part of: VMP (https://github.com/RelativityMC/VMP-fabric) Licensed under: MIT (https://opensource.org/licenses/MIT) diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index 91185d7f8f2206fea9cb1d96611b8409f82694f2..42120b8721a56d6fb8ac6149267beff795b4e963 100644 +index c51776867d87640c20cd317a33dc5c654f1e7a51..33f1381569612996f87b25c6d9009f9784517238 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java -@@ -284,6 +284,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -240,6 +240,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess public float yRotO; public float xRotO; private AABB bb = INITIAL_AABB; @@ -24,7 +24,7 @@ index 91185d7f8f2206fea9cb1d96611b8409f82694f2..42120b8721a56d6fb8ac6149267beff7 public boolean onGround; public boolean horizontalCollision; public boolean verticalCollision; -@@ -954,6 +955,11 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1060,6 +1061,11 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess // Paper end - detailed watchdog information public void move(MoverType type, Vec3 movement) { @@ -36,7 +36,7 @@ index 91185d7f8f2206fea9cb1d96611b8409f82694f2..42120b8721a56d6fb8ac6149267beff7 final Vec3 originalMovement = movement; // Paper - Expose pre-collision velocity // Paper start - detailed watchdog information ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread("Cannot move an entity off-main"); -@@ -3897,6 +3903,11 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4134,6 +4140,11 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } public final void setBoundingBox(AABB bb) { diff --git a/leaf-server/minecraft-patches/features/0064-Use-linked-map-for-entity-trackers.patch b/leaf-server/minecraft-patches/features/0064-Use-linked-map-for-entity-trackers.patch index 1cc5c14f..0091a523 100644 --- a/leaf-server/minecraft-patches/features/0064-Use-linked-map-for-entity-trackers.patch +++ b/leaf-server/minecraft-patches/features/0064-Use-linked-map-for-entity-trackers.patch @@ -13,15 +13,15 @@ As part of: VMP (https://github.com/RelativityMC/VMP-fabric) Licensed under: MIT (https://opensource.org/licenses/MIT) diff --git a/net/minecraft/server/level/ChunkMap.java b/net/minecraft/server/level/ChunkMap.java -index bbd21c296e0b9bb000a9c47be1ec27ea553d3b40..63eaf8a4aa462a94d12535dbfabe74fe02314c5c 100644 +index b28d19b2fcdff9250e95db05f6e428db54a771e6..a95feb65b392a971ac570dd3fd771b6ff89a2684 100644 --- a/net/minecraft/server/level/ChunkMap.java +++ b/net/minecraft/server/level/ChunkMap.java -@@ -136,7 +136,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider - private final AtomicInteger tickingGenerated = new AtomicInteger(); +@@ -132,7 +132,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider + public final AtomicInteger tickingGenerated = new AtomicInteger(); // Paper - public private final String storageName; private final PlayerMap playerMap = new PlayerMap(); - public final Int2ObjectMap entityMap = new Int2ObjectOpenHashMap<>(); + public final Int2ObjectMap entityMap = new it.unimi.dsi.fastutil.ints.Int2ObjectLinkedOpenHashMap<>(); // Gale - VMP - use linked map for entity trackers - provides faster iteration private final Long2ByteMap chunkTypeCache = new Long2ByteOpenHashMap(); - private final Long2LongMap nextChunkSaveTime = new Long2LongOpenHashMap(); - private final LongSet chunksToEagerlySave = new LongLinkedOpenHashSet(); + // Paper - rewrite chunk system + public int serverViewDistance; diff --git a/leaf-server/minecraft-patches/features/0067-Hide-flames-on-entities-with-fire-resistance.patch b/leaf-server/minecraft-patches/features/0067-Hide-flames-on-entities-with-fire-resistance.patch index e0868f77..ea805fc1 100644 --- a/leaf-server/minecraft-patches/features/0067-Hide-flames-on-entities-with-fire-resistance.patch +++ b/leaf-server/minecraft-patches/features/0067-Hide-flames-on-entities-with-fire-resistance.patch @@ -13,10 +13,10 @@ As part of: Slice (https://github.com/Cryptite/Slice) Licensed under: MIT (https://opensource.org/licenses/MIT) diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index 42120b8721a56d6fb8ac6149267beff795b4e963..fbea49d6c12ce570ef4f1850edad45d424183d63 100644 +index 33f1381569612996f87b25c6d9009f9784517238..466d70b679059bdbe850033547d999c88063d1c2 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java -@@ -754,7 +754,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -860,7 +860,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess this.checkBelowWorld(); if (!this.level().isClientSide) { diff --git a/leaf-server/minecraft-patches/features/0069-Reduce-block-destruction-packet-allocations.patch b/leaf-server/minecraft-patches/features/0069-Reduce-block-destruction-packet-allocations.patch index fbe2865d..35dc126c 100644 --- a/leaf-server/minecraft-patches/features/0069-Reduce-block-destruction-packet-allocations.patch +++ b/leaf-server/minecraft-patches/features/0069-Reduce-block-destruction-packet-allocations.patch @@ -13,10 +13,10 @@ As part of: SportPaper (https://github.com/Electroid/SportPaper) Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index 0d8fe6a658c1ad15f6243af5d2562505c41e3e8d..b0fa30ec3c612e50502e4a94dccc328926c83038 100644 +index 866671513a598737cb618d149a96eecce5e36184..0531622d5f21bf82eef6dc7614765085388f3978 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java -@@ -1242,6 +1242,15 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -1557,6 +1557,15 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @Override public void destroyBlockProgress(int breakerId, BlockPos pos, int progress) { @@ -32,7 +32,7 @@ index 0d8fe6a658c1ad15f6243af5d2562505c41e3e8d..b0fa30ec3c612e50502e4a94dccc3289 // CraftBukkit start Player breakerPlayer = null; Entity entity = this.getEntity(breakerId); -@@ -1258,7 +1267,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -1573,7 +1582,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe .callEvent(); } // Paper end - Add BlockBreakProgressUpdateEvent @@ -41,7 +41,7 @@ index 0d8fe6a658c1ad15f6243af5d2562505c41e3e8d..b0fa30ec3c612e50502e4a94dccc3289 if (serverPlayer != null && serverPlayer.level() == this && serverPlayer.getId() != breakerId) { double d = pos.getX() - serverPlayer.getX(); double d1 = pos.getY() - serverPlayer.getY(); -@@ -1269,7 +1278,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -1584,7 +1593,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe } // CraftBukkit end if (d * d + d1 * d1 + d2 * d2 < 1024.0) { diff --git a/leaf-server/minecraft-patches/features/0070-Spread-out-sending-all-player-info.patch b/leaf-server/minecraft-patches/features/0070-Spread-out-sending-all-player-info.patch index 5d4b80f1..0289ef7a 100644 --- a/leaf-server/minecraft-patches/features/0070-Spread-out-sending-all-player-info.patch +++ b/leaf-server/minecraft-patches/features/0070-Spread-out-sending-all-player-info.patch @@ -37,7 +37,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java -index 029003ccbd4820b60369894b2c3d4bd47f697d93..c522c051bddbde2484741e882b2d58a86caf93aa 100644 +index 2bfff6cc34bc94402fb349d2641efadf380c241a..d57b677cfe5282a5601e4ec8083fd476ccc16422 100644 --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java @@ -114,6 +114,7 @@ public abstract class PlayerList { @@ -56,7 +56,7 @@ index 029003ccbd4820b60369894b2c3d4bd47f697d93..c522c051bddbde2484741e882b2d58a8 // this.broadcastAll(ClientboundPlayerInfoUpdatePacket.createPlayerInitializing(List.of(player))); // CraftBukkit - replaced with loop below // Paper start - Fire PlayerJoinEvent when Player is actually ready; correctly register player BEFORE PlayerJoinEvent, so the entity is valid and doesn't require tick delay hacks player.supressTrackerForLogin = true; -@@ -581,6 +583,7 @@ public abstract class PlayerList { +@@ -582,6 +584,7 @@ public abstract class PlayerList { player.getAdvancements().stopListening(); this.players.remove(player); this.playersByName.remove(player.getScoreboardName().toLowerCase(java.util.Locale.ROOT)); // Spigot @@ -64,7 +64,7 @@ index 029003ccbd4820b60369894b2c3d4bd47f697d93..c522c051bddbde2484741e882b2d58a8 this.server.getCustomBossEvents().onPlayerDisconnect(player); UUID uuid = player.getUUID(); ServerPlayer serverPlayer = this.playersByUUID.get(uuid); -@@ -723,6 +726,7 @@ public abstract class PlayerList { +@@ -724,6 +727,7 @@ public abstract class PlayerList { player.stopRiding(); // CraftBukkit this.players.remove(player); this.playersByName.remove(player.getScoreboardName().toLowerCase(java.util.Locale.ROOT)); // Spigot @@ -72,7 +72,7 @@ index 029003ccbd4820b60369894b2c3d4bd47f697d93..c522c051bddbde2484741e882b2d58a8 player.serverLevel().removePlayerImmediately(player, reason); // TeleportTransition teleportTransition = player.findRespawnPositionAndUseSpawnBlock(!keepInventory, TeleportTransition.DO_NOTHING); // ServerLevel level = teleportTransition.newLevel(); -@@ -800,6 +804,7 @@ public abstract class PlayerList { +@@ -801,6 +805,7 @@ public abstract class PlayerList { this.players.add(serverPlayer); this.playersByName.put(serverPlayer.getScoreboardName().toLowerCase(java.util.Locale.ROOT), serverPlayer); // Spigot this.playersByUUID.put(serverPlayer.getUUID(), serverPlayer); @@ -80,7 +80,7 @@ index 029003ccbd4820b60369894b2c3d4bd47f697d93..c522c051bddbde2484741e882b2d58a8 } // serverPlayer.initInventoryMenu(); serverPlayer.setHealth(serverPlayer.getHealth()); -@@ -891,18 +896,58 @@ public abstract class PlayerList { +@@ -892,18 +897,58 @@ public abstract class PlayerList { } public void tick() { diff --git a/leaf-server/minecraft-patches/features/0071-Optimize-player-list-for-sending-player-info.patch b/leaf-server/minecraft-patches/features/0071-Optimize-player-list-for-sending-player-info.patch index 9c287b03..da7ba92a 100644 --- a/leaf-server/minecraft-patches/features/0071-Optimize-player-list-for-sending-player-info.patch +++ b/leaf-server/minecraft-patches/features/0071-Optimize-player-list-for-sending-player-info.patch @@ -37,10 +37,10 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java -index c522c051bddbde2484741e882b2d58a86caf93aa..cab616d4e088a41152423ce4e3ba643876341384 100644 +index d57b677cfe5282a5601e4ec8083fd476ccc16422..0c80d22ac19e8507a54e3ea0b3df5fa5ee853f89 100644 --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java -@@ -900,10 +900,19 @@ public abstract class PlayerList { +@@ -901,10 +901,19 @@ public abstract class PlayerList { ServerPlayer[] sendAllPlayerInfoBucket = this.sendAllPlayerInfoBuckets[this.sendAllPlayerInfoIn]; if (sendAllPlayerInfoBucket != null) { diff --git a/leaf-server/minecraft-patches/features/0076-Don-t-load-chunks-to-activate-climbing-entities.patch b/leaf-server/minecraft-patches/features/0076-Don-t-load-chunks-to-activate-climbing-entities.patch index 48a92917..6f7beb72 100644 --- a/leaf-server/minecraft-patches/features/0076-Don-t-load-chunks-to-activate-climbing-entities.patch +++ b/leaf-server/minecraft-patches/features/0076-Don-t-load-chunks-to-activate-climbing-entities.patch @@ -7,10 +7,10 @@ License: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) Gale - https://galemc.org diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index fbea49d6c12ce570ef4f1850edad45d424183d63..2e8fdf640aeb2750eba40f1c9711ece2b79b0d07 100644 +index 466d70b679059bdbe850033547d999c88063d1c2..d85d70fe5bfa63f0b188663d7ea11b56ff265a18 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java -@@ -4346,6 +4346,16 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4644,6 +4644,16 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return this.inBlockState; } diff --git a/leaf-server/minecraft-patches/features/0077-Broadcast-crit-animations-as-the-entity-being-critte.patch b/leaf-server/minecraft-patches/features/0077-Broadcast-crit-animations-as-the-entity-being-critte.patch index 7b804e6c..8b6e5702 100644 --- a/leaf-server/minecraft-patches/features/0077-Broadcast-crit-animations-as-the-entity-being-critte.patch +++ b/leaf-server/minecraft-patches/features/0077-Broadcast-crit-animations-as-the-entity-being-critte.patch @@ -13,10 +13,10 @@ As part of: MultiPaper (https://github.com/MultiPaper/MultiPaper) Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java -index 44ba108f99aa983d869ff87f95bb48867a83d392..7bb5d545155c2ffa7828488bc8b61c395fc17461 100644 +index 62e49f844c477c92894d77b469c1537b05fa7677..ccbfb6ad7de454a622c55395b8876ac8cef0d5a8 100644 --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java -@@ -2044,12 +2044,18 @@ public class ServerPlayer extends Player { +@@ -2080,12 +2080,18 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc @Override public void crit(Entity entityHit) { diff --git a/leaf-server/minecraft-patches/features/0082-5-second-TPS-average.patch b/leaf-server/minecraft-patches/features/0082-5-second-TPS-average.patch index c3be9f43..26cde3bc 100644 --- a/leaf-server/minecraft-patches/features/0082-5-second-TPS-average.patch +++ b/leaf-server/minecraft-patches/features/0082-5-second-TPS-average.patch @@ -37,10 +37,10 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index 5ba734fc868a9658ac39d9b22e91e48abc6b3ddb..fe301eaccc675a133919a74abc901f2e7d46db0a 100644 +index 20fd5ea3922b93a00e4f55cfd33af1ce3363e09a..c26db575eb421115cc236f553e47871bcf9cf11f 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java -@@ -1011,6 +1011,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop false : this::haveTime); + lastTickProperTime = (System.nanoTime() - tickProperStart) / 1_000_000L; // Gale - YAPFA - last tick time - this.tickFrame.end(); - this.mayHaveDelayedTasks = true; - this.delayedTasksMaxNextTickTimeNanos = Math.max(Util.getNanos() + l, this.nextTickTimeNanos); -@@ -1265,11 +1272,13 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 2147483647L ? Integer.MAX_VALUE : (int)l1; int coprime = this.getCoprime(i); diff --git a/leaf-server/minecraft-patches/features/0094-Pufferfish-Dynamic-Activation-of-Brain.patch b/leaf-server/minecraft-patches/features/0094-Pufferfish-Dynamic-Activation-of-Brain.patch index 23224617..82cbef49 100644 --- a/leaf-server/minecraft-patches/features/0094-Pufferfish-Dynamic-Activation-of-Brain.patch +++ b/leaf-server/minecraft-patches/features/0094-Pufferfish-Dynamic-Activation-of-Brain.patch @@ -73,10 +73,10 @@ index bdbbbc5e0c06c71584e7514623d0c8be168befd7..f3ca86e09a4a076d143fb21eac529967 } } diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index 2f0de213559ad558767335e5d7d1aa7d12221454..88a12eb570572e5449e430f75267304e8ea3f318 100644 +index 0531622d5f21bf82eef6dc7614765085388f3978..4d8666d430df8d1ca7e9591e479c68ca7fd19d1a 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java -@@ -531,6 +531,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -771,6 +771,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe this.entityTickList .forEach( entity -> { @@ -85,10 +85,10 @@ index 2f0de213559ad558767335e5d7d1aa7d12221454..88a12eb570572e5449e430f75267304e if (!tickRateManager.isEntityFrozen(entity)) { entity.checkDespawn(); diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index 9631ab544eb73b1d2502732a5771e2f231815589..42237b270ccb27b204ec0ad3b2157667f88b7062 100644 +index 12eb1e3ed2472ecdd783c8062c99428115d9526a..209d897fdf5a5d19990f6dd8ee11d42d74bd0e92 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java -@@ -387,6 +387,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -343,6 +343,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess public boolean fixedPose = false; // Paper - Expand Pose API private final int despawnTime; // Paper - entity despawn time limit public int totalEntityAge; // Paper - age-like counter for all entities @@ -98,7 +98,7 @@ index 9631ab544eb73b1d2502732a5771e2f231815589..42237b270ccb27b204ec0ad3b2157667 // Paper start - EAR 2 public final boolean defaultActivationState; diff --git a/net/minecraft/world/entity/EntityType.java b/net/minecraft/world/entity/EntityType.java -index d49aad855441c2eac707b22714b06321bfefd9ee..7ff59cd74951722184211c40ca97aa004635cc5d 100644 +index ed11697d81789ee6cd48ee2de2c9fcb8ff2be0d4..a1379aa8eaf84868ceb8b3762f7ca3b87a2d7785 100644 --- a/net/minecraft/world/entity/EntityType.java +++ b/net/minecraft/world/entity/EntityType.java @@ -1075,6 +1075,7 @@ public class EntityType implements FeatureElement, EntityTypeT diff --git a/leaf-server/minecraft-patches/features/0096-Purpur-Configurable-server-mod-name.patch b/leaf-server/minecraft-patches/features/0096-Purpur-Configurable-server-mod-name.patch index 0c17c98c..609b400c 100644 --- a/leaf-server/minecraft-patches/features/0096-Purpur-Configurable-server-mod-name.patch +++ b/leaf-server/minecraft-patches/features/0096-Purpur-Configurable-server-mod-name.patch @@ -7,10 +7,10 @@ Original license: MIT Original project: https://github.com/PurpurMC/Purpur diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index 4499bdd23b6d12538e2b17f1b36f39b18872de54..227ca3c06c451c6256f6f66dc0a47bcf53bafec3 100644 +index 0442e47bf445ae6d8e7348b5aaec3fbdacff9e3e..fc0588b98087e04e486b822507c1d98851005923 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java -@@ -1697,7 +1697,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java -index 1d7e48a8bea7356982b9c4bf1f4dd4877a8d9f44..50278223ec57f32a75bf413f57529f365267a4ee 100644 +index 9d5051a65dcbd87b7d29db4643fa2b070717845b..d32acdf38a35d569669b272560c72651240178db 100644 --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java -@@ -421,6 +421,7 @@ public class ServerPlayer extends Player { +@@ -427,6 +427,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc public @Nullable com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent playerNaturallySpawnedEvent; // Paper - PlayerNaturallySpawnCreaturesEvent public @Nullable String clientBrandName = null; // Paper - Brand support public @Nullable 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 smoothWorldTeleport; // Slice - public ServerPlayer(MinecraftServer server, ServerLevel level, GameProfile gameProfile, ClientInformation clientInformation) { - super(level, level.getSharedSpawnPos(), level.getSharedSpawnAngle(), gameProfile); + // Paper start - rewrite chunk system + private ca.spottedleaf.moonrise.patches.chunk_system.player.RegionizedPlayerChunkLoader.PlayerChunkLoaderData chunkLoader; diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java -index e62f24dcdc5f09ce9c316615f2c67778570bcc6e..2d932aa5a90cf00bbe4756f7108c7601561677d3 100644 +index 11015e8c0f2b5f8bd2eb083d8e093beb72c43cf0..8bbf8d660a68c8c74204e101ec3ec0b775883090 100644 --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java -@@ -794,11 +794,11 @@ public abstract class PlayerList { +@@ -795,11 +795,11 @@ public abstract class PlayerList { byte b = (byte)(keepInventory ? 1 : 0); ServerLevel serverLevel = serverPlayer.serverLevel(); LevelData levelData = serverLevel.getLevelData(); @@ -38,7 +38,7 @@ index e62f24dcdc5f09ce9c316615f2c67778570bcc6e..2d932aa5a90cf00bbe4756f7108c7601 serverPlayer.connection.send(new ClientboundSetDefaultSpawnPositionPacket(level.getSharedSpawnPos(), level.getSharedSpawnAngle())); serverPlayer.connection.send(new ClientboundChangeDifficultyPacket(levelData.getDifficulty(), levelData.isDifficultyLocked())); serverPlayer.connection -@@ -875,6 +875,8 @@ public abstract class PlayerList { +@@ -876,6 +876,8 @@ public abstract class PlayerList { return serverPlayer; } diff --git a/leaf-server/minecraft-patches/features/0107-Petal-Async-Pathfinding.patch b/leaf-server/minecraft-patches/features/0107-Petal-Async-Pathfinding.patch index eb50ea62..4b701522 100644 --- a/leaf-server/minecraft-patches/features/0107-Petal-Async-Pathfinding.patch +++ b/leaf-server/minecraft-patches/features/0107-Petal-Async-Pathfinding.patch @@ -31,13 +31,13 @@ index 92ebc61aa7f6f70292a384b56bd8ef77a15e485c..a1ecb7c5ee0e1fe1164e277d8991d6d9 } diff --git a/net/minecraft/world/entity/ai/behavior/AcquirePoi.java b/net/minecraft/world/entity/ai/behavior/AcquirePoi.java -index 7470150b5c613ae31d94170d9f5eedac67add63d..5bcc53eef44faa1d3dccb72d1fd4be476c2f3793 100644 +index 751e91a922b20c96f27885c3eb085ec4ae39091b..455662f0718365f466bc52bdaa228954e42d7216 100644 --- a/net/minecraft/world/entity/ai/behavior/AcquirePoi.java +++ b/net/minecraft/world/entity/ai/behavior/AcquirePoi.java -@@ -98,21 +98,20 @@ public class AcquirePoi { - .limit(5L) - .filter(pair1 -> predicate.test(level, pair1.getSecond())) - .collect(Collectors.toSet()); +@@ -102,21 +102,20 @@ public class AcquirePoi { + } + } + // Paper end - optimise POI access - Path path = findPathToPois(mob, set); - if (path != null && path.canReach()) { - BlockPos target = path.getTarget(); @@ -54,7 +54,7 @@ index 7470150b5c613ae31d94170d9f5eedac67add63d..5bcc53eef44faa1d3dccb72d1fd4be47 + + // wait on the path to be processed + org.dreeam.leaf.async.path.AsyncPathProcessor.awaitProcessing(possiblePath, path -> { -+ processPath(acquirablePois, entityEventId, (Long2ObjectMap) map, memoryAccessor, level, mob, time, poiManager, set, path); ++ processPath(acquirablePois, entityEventId, map, memoryAccessor, level, mob, time, poiManager, set, path); }); } else { - for (Pair, BlockPos> pair : set) { @@ -67,7 +67,7 @@ index 7470150b5c613ae31d94170d9f5eedac67add63d..5bcc53eef44faa1d3dccb72d1fd4be47 return true; } -@@ -124,6 +123,34 @@ public class AcquirePoi { +@@ -128,6 +127,34 @@ public class AcquirePoi { : BehaviorBuilder.create(instance -> instance.group(instance.absent(existingAbsentMemory)).apply(instance, memoryAccessor -> oneShot)); } @@ -81,7 +81,7 @@ index 7470150b5c613ae31d94170d9f5eedac67add63d..5bcc53eef44faa1d3dccb72d1fd4be47 + long time, + PoiManager poiManager, + Set, BlockPos>> set, -+ Path path) { ++ @org.jetbrains.annotations.Nullable Path path) { + if (path != null && path.canReach()) { + BlockPos target = path.getTarget(); + poiManager.getType(target).ifPresent(holder -> { @@ -514,14 +514,15 @@ index 2979846853898d78a2df19df2287da16dbe4ae71..1289a6e85f3fdb9187323343b6c20e17 } diff --git a/net/minecraft/world/entity/ai/sensing/NearestBedSensor.java b/net/minecraft/world/entity/ai/sensing/NearestBedSensor.java -index 6e9325f0800a35637fdec5edb8a514ea03741762..7ee85d8e9035093484f67437ec80755169436a88 100644 +index 066faa704338c573472381e1ebd063e0d52aaaa4..8629b89401e4cb06dd8a658d1d3f189178c544d8 100644 --- a/net/minecraft/world/entity/ai/sensing/NearestBedSensor.java +++ b/net/minecraft/world/entity/ai/sensing/NearestBedSensor.java -@@ -57,16 +57,31 @@ public class NearestBedSensor extends Sensor { - holder -> holder.is(PoiTypes.HOME), predicate, entity.blockPosition(), 48, PoiManager.Occupancy.ANY - ) - .collect(Collectors.toSet()); -- Path path = AcquirePoi.findPathToPois(entity, set); +@@ -57,17 +57,32 @@ public class NearestBedSensor extends Sensor { + 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); +- Path path = AcquirePoi.findPathToPois(entity, new java.util.HashSet<>(poiposes)); + // Paper end - optimise POI access - if (path != null && path.canReach()) { - BlockPos target = path.getTarget(); - Optional> type = poiManager.getType(target); @@ -532,13 +533,13 @@ index 6e9325f0800a35637fdec5edb8a514ea03741762..7ee85d8e9035093484f67437ec807551 - this.batchCache.long2LongEntrySet().removeIf(entry -> entry.getLongValue() < this.lastUpdate); + // Kaiiju start - await on async path processing + if (org.dreeam.leaf.config.modules.async.AsyncPathfinding.enabled) { -+ Path possiblePath = AcquirePoi.findPathToPois(entity, new java.util.HashSet<>(set)); ++ Path possiblePath = AcquirePoi.findPathToPois(entity, new java.util.HashSet<>(poiposes)); + org.dreeam.leaf.async.path.AsyncPathProcessor.awaitProcessing(possiblePath, path -> { + processPath(entity, poiManager, path); + }); + } else { + // Kaiiju end -+ Path path = AcquirePoi.findPathToPois(entity, new java.util.HashSet<>(set)); ++ Path path = AcquirePoi.findPathToPois(entity, new java.util.HashSet<>(poiposes)); + processPath(entity, poiManager, path); + } // Kaiiju - async path processing + } diff --git a/leaf-server/minecraft-patches/features/0108-Petal-reduce-work-done-by-game-event-system.patch b/leaf-server/minecraft-patches/features/0108-Petal-reduce-work-done-by-game-event-system.patch index 95e7f9d5..81a65fad 100644 --- a/leaf-server/minecraft-patches/features/0108-Petal-reduce-work-done-by-game-event-system.patch +++ b/leaf-server/minecraft-patches/features/0108-Petal-reduce-work-done-by-game-event-system.patch @@ -38,10 +38,10 @@ index 2627583ab12d886b1fba0b1d1e599f942926b499..440d70811d96f97d3463c6aff131cbc5 if (entity.getLastHurtByMob() instanceof ServerPlayer serverPlayer) { DamageSource damageSource = entity.getLastDamageSource() == null diff --git a/net/minecraft/world/level/chunk/LevelChunk.java b/net/minecraft/world/level/chunk/LevelChunk.java -index 626e87d9c1862fe0c896172ee240844e50d7902f..f5a627d900298218e8dbbf12d5950dc8a01bd39e 100644 +index 61fa8f2bf018b8892a11acec058f36914c5a1573..54322b76e59f749ea9bbe6a8e0bfa78bb00f063a 100644 --- a/net/minecraft/world/level/chunk/LevelChunk.java +++ b/net/minecraft/world/level/chunk/LevelChunk.java -@@ -80,7 +80,19 @@ public class LevelChunk extends ChunkAccess { +@@ -80,7 +80,19 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p private Supplier fullStatus; @Nullable private LevelChunk.PostLoadProcessor postLoad; @@ -62,7 +62,7 @@ index 626e87d9c1862fe0c896172ee240844e50d7902f..f5a627d900298218e8dbbf12d5950dc8 private final LevelChunkTicks blockTicks; private final LevelChunkTicks fluidTicks; private LevelChunk.UnsavedListener unsavedListener = chunkPos -> {}; -@@ -110,7 +122,7 @@ public class LevelChunk extends ChunkAccess { +@@ -143,7 +155,7 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p ) { super(pos, data, level, net.minecraft.server.MinecraftServer.getServer().registryAccess().lookupOrThrow(Registries.BIOME), inhabitedTime, sections, blendingData); // Paper - Anti-Xray - The world isn't ready yet, use server singleton for registry this.level = (ServerLevel) level; // CraftBukkit - type @@ -71,7 +71,7 @@ index 626e87d9c1862fe0c896172ee240844e50d7902f..f5a627d900298218e8dbbf12d5950dc8 for (Heightmap.Types types : Heightmap.Types.values()) { if (ChunkStatus.FULL.heightmapsAfter().contains(types)) { -@@ -206,10 +218,27 @@ public class LevelChunk extends ChunkAccess { +@@ -253,10 +265,27 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p @Override public GameEventListenerRegistry getListenerRegistry(int sectionY) { @@ -103,7 +103,7 @@ index 626e87d9c1862fe0c896172ee240844e50d7902f..f5a627d900298218e8dbbf12d5950dc8 } // Paper start - Perf: Reduce instructions and provide final method -@@ -556,7 +585,7 @@ public class LevelChunk extends ChunkAccess { +@@ -603,7 +632,7 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p } private void removeGameEventListenerRegistry(int sectionY) { diff --git a/leaf-server/minecraft-patches/features/0109-Reduce-canSee-work.patch b/leaf-server/minecraft-patches/features/0109-Reduce-canSee-work.patch index 94318af0..47538897 100644 --- a/leaf-server/minecraft-patches/features/0109-Reduce-canSee-work.patch +++ b/leaf-server/minecraft-patches/features/0109-Reduce-canSee-work.patch @@ -7,10 +7,10 @@ Co-authored by: Martijn Muijsers Co-authored by: MachineBreaker diff --git a/net/minecraft/world/level/Level.java b/net/minecraft/world/level/Level.java -index 270720ac00b0dc4ccbe08b789728dd09d0a9f1e3..c0c0c095154a8c7910df27ee4f0641ac60df637c 100644 +index fb213dc889abafaaf35a69b06b1c35041ac65b46..4e9a050517cdbcdd08a970d8c163e8dbcb818944 100644 --- a/net/minecraft/world/level/Level.java +++ b/net/minecraft/world/level/Level.java -@@ -308,17 +308,19 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl +@@ -943,17 +943,19 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl for (int i = 0, len = entities.size(); i < len; ++i) { Entity entity = entities.get(i); diff --git a/leaf-server/paper-patches/features/0001-Rebrand.patch b/leaf-server/paper-patches/features/0001-Rebrand.patch index 046c14ff..6ecaf4af 100644 --- a/leaf-server/paper-patches/features/0001-Rebrand.patch +++ b/leaf-server/paper-patches/features/0001-Rebrand.patch @@ -429,10 +429,10 @@ index 1354ccfbf525e5e64483ac5f443cc2325ba63850..f6f787db016f4d1ac14648ebf2b8e162 // (async tasks must live with race-conditions if they attempt to cancel between these few lines of code) } diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -index d8b138d03d20a1ff5af902bc977f900fb2a43a71..e90a8069c71725e4501cf407e7520064ecdfe5d6 100644 +index 41b2026c87dea247d39c73b0e3eae892fb729cd5..498a642d243925eefa11d5997dc999bb9aa2fcda 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java +++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -@@ -479,7 +479,7 @@ public final class CraftMagicNumbers implements UnsafeValues { +@@ -481,7 +481,7 @@ public final class CraftMagicNumbers implements UnsafeValues { @Override public com.destroystokyo.paper.util.VersionFetcher getVersionFetcher() { diff --git a/leaf-server/paper-patches/features/0041-EMC-Don-t-use-snapshots-for-acquiring-blockstate.patch b/leaf-server/paper-patches/features/0041-EMC-Don-t-use-snapshots-for-acquiring-blockstate.patch index f1aa8c4c..6114b45d 100644 --- a/leaf-server/paper-patches/features/0041-EMC-Don-t-use-snapshots-for-acquiring-blockstate.patch +++ b/leaf-server/paper-patches/features/0041-EMC-Don-t-use-snapshots-for-acquiring-blockstate.patch @@ -7,10 +7,10 @@ Original license: MIT Original project: https://github.com/starlis/empirecraft diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java -index 4a709355acab59c5ded1ffdc321be3252482bd0b..c8f0b24fd9336259e42c4746061793e156978ad3 100644 +index bbaaea8e03e3eb80c53161968ff75efd39b57ba5..5f04b2dcff7c0e967647bde9dfa0f35f59e8524c 100644 --- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java +++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java -@@ -333,7 +333,7 @@ public class CraftBlock implements Block { +@@ -332,7 +332,7 @@ public class CraftBlock implements Block { @Override public BlockState getState() { @@ -19,11 +19,11 @@ index 4a709355acab59c5ded1ffdc321be3252482bd0b..c8f0b24fd9336259e42c4746061793e1 } // Paper start -diff --git a/src/main/java/org/bukkit/craftbukkit/block/state/CraftBlockStates.java b/src/main/java/org/bukkit/craftbukkit/block/state/CraftBlockStates.java -index 5da891112402b758ca618967c4662027efbe14dc..23d0c901c1261de30748654b34a7ce6c51ad9c24 100644 ---- a/src/main/java/org/bukkit/craftbukkit/block/state/CraftBlockStates.java -+++ b/src/main/java/org/bukkit/craftbukkit/block/state/CraftBlockStates.java -@@ -186,7 +186,7 @@ public final class CraftBlockStates { +diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlockStates.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlockStates.java +index 2338e7c115037430cefae26a571ded71f77983c4..321280d7c9c3c828cbf2eb19d2fd196a1f84d4c3 100644 +--- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlockStates.java ++++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlockStates.java +@@ -185,7 +185,7 @@ public final class CraftBlockStates { } public static BlockState getBlockState(Block block) { diff --git a/leaf-server/paper-patches/features/0046-SparklyPaper-Parallel-world-ticking.patch b/leaf-server/paper-patches/features/0046-SparklyPaper-Parallel-world-ticking.patch index 06a96eda..edc06e0d 100644 --- a/leaf-server/paper-patches/features/0046-SparklyPaper-Parallel-world-ticking.patch +++ b/leaf-server/paper-patches/features/0046-SparklyPaper-Parallel-world-ticking.patch @@ -263,7 +263,7 @@ index 196fddeab452e7bc89ef6758635e1d07074e7416..55a2ffa0fff6ef66b9bd5069300c09e9 } else if (!event.isAsynchronous() && !this.server.isPrimaryThread() && !this.server.isStopping()) { // Leaf start - Multithreaded tracker diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index 2538a0de7fd6b1026fff51e5d066c5b0811b7cda..c114dfd419177cf45f02617acde86ea4abcbdc96 100644 +index 9e09f14033818fcf9df161941e316c16d913705b..8d68b49ff0b1c4c829d97cd8ebe81be79ee856f6 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java @@ -456,7 +456,12 @@ public class CraftWorld extends CraftRegionAccessor implements World { @@ -349,10 +349,10 @@ index 2538a0de7fd6b1026fff51e5d066c5b0811b7cda..c114dfd419177cf45f02617acde86ea4 } // Paper end diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java -index c8f0b24fd9336259e42c4746061793e156978ad3..2b2d1819b0d953800c1757ad7c92de4f781efa0d 100644 +index 5f04b2dcff7c0e967647bde9dfa0f35f59e8524c..3d26df068b449aeafd882b9b93722aa9705d2fd5 100644 --- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java +++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java -@@ -76,6 +76,11 @@ public class CraftBlock implements Block { +@@ -75,6 +75,11 @@ public class CraftBlock implements Block { } public net.minecraft.world.level.block.state.BlockState getNMS() { @@ -364,7 +364,7 @@ index c8f0b24fd9336259e42c4746061793e156978ad3..2b2d1819b0d953800c1757ad7c92de4f return this.world.getBlockState(this.position); } -@@ -156,6 +161,11 @@ public class CraftBlock implements Block { +@@ -155,6 +160,11 @@ public class CraftBlock implements Block { } private void setData(final byte data, int flags) { @@ -376,7 +376,7 @@ index c8f0b24fd9336259e42c4746061793e156978ad3..2b2d1819b0d953800c1757ad7c92de4f this.world.setBlock(this.position, CraftMagicNumbers.getBlock(this.getType(), data), flags); } -@@ -197,6 +207,11 @@ public class CraftBlock implements Block { +@@ -196,6 +206,11 @@ public class CraftBlock implements Block { } public static boolean setBlockState(LevelAccessor world, BlockPos pos, net.minecraft.world.level.block.state.BlockState oldState, net.minecraft.world.level.block.state.BlockState newState, boolean applyPhysics) { @@ -388,7 +388,7 @@ index c8f0b24fd9336259e42c4746061793e156978ad3..2b2d1819b0d953800c1757ad7c92de4f // SPIGOT-611: need to do this to prevent glitchiness. Easier to handle this here (like /setblock) than to fix weirdness in block entity cleanup if (oldState.hasBlockEntity() && newState.getBlock() != oldState.getBlock()) { // SPIGOT-3725 remove old block entity if block changes // SPIGOT-4612: faster - just clear tile -@@ -345,18 +360,33 @@ public class CraftBlock implements Block { +@@ -344,18 +359,33 @@ public class CraftBlock implements Block { @Override public Biome getBiome() { @@ -422,7 +422,7 @@ index c8f0b24fd9336259e42c4746061793e156978ad3..2b2d1819b0d953800c1757ad7c92de4f this.getWorld().setBiome(this.getX(), this.getY(), this.getZ(), bio); } -@@ -377,6 +407,11 @@ public class CraftBlock implements Block { +@@ -376,6 +406,11 @@ public class CraftBlock implements Block { @Override public boolean isBlockIndirectlyPowered() { @@ -434,7 +434,7 @@ index c8f0b24fd9336259e42c4746061793e156978ad3..2b2d1819b0d953800c1757ad7c92de4f return this.world.getMinecraftWorld().hasNeighborSignal(this.position); } -@@ -416,6 +451,11 @@ public class CraftBlock implements Block { +@@ -415,6 +450,11 @@ public class CraftBlock implements Block { @Override public int getBlockPower(BlockFace face) { @@ -446,7 +446,7 @@ index c8f0b24fd9336259e42c4746061793e156978ad3..2b2d1819b0d953800c1757ad7c92de4f int power = 0; net.minecraft.world.level.Level world = this.world.getMinecraftWorld(); int x = this.getX(); -@@ -484,6 +524,11 @@ public class CraftBlock implements Block { +@@ -483,6 +523,11 @@ public class CraftBlock implements Block { @Override public boolean breakNaturally() { @@ -458,7 +458,7 @@ index c8f0b24fd9336259e42c4746061793e156978ad3..2b2d1819b0d953800c1757ad7c92de4f return this.breakNaturally(null); } -@@ -543,6 +588,11 @@ public class CraftBlock implements Block { +@@ -542,6 +587,11 @@ public class CraftBlock implements Block { @Override public boolean applyBoneMeal(BlockFace face) { @@ -470,7 +470,7 @@ index c8f0b24fd9336259e42c4746061793e156978ad3..2b2d1819b0d953800c1757ad7c92de4f Direction direction = CraftBlock.blockFaceToNotch(face); BlockFertilizeEvent event = null; ServerLevel world = this.getCraftWorld().getHandle(); -@@ -554,8 +604,8 @@ public class CraftBlock implements Block { +@@ -553,8 +603,8 @@ public class CraftBlock implements Block { world.captureTreeGeneration = false; if (!world.capturedBlockStates.isEmpty()) { @@ -481,7 +481,7 @@ index c8f0b24fd9336259e42c4746061793e156978ad3..2b2d1819b0d953800c1757ad7c92de4f List states = new ArrayList<>(world.capturedBlockStates.values()); world.capturedBlockStates.clear(); StructureGrowEvent structureEvent = null; -@@ -645,6 +695,11 @@ public class CraftBlock implements Block { +@@ -644,6 +694,11 @@ public class CraftBlock implements Block { @Override public RayTraceResult rayTrace(Location start, Vector direction, double maxDistance, FluidCollisionMode fluidCollisionMode) { @@ -493,7 +493,7 @@ index c8f0b24fd9336259e42c4746061793e156978ad3..2b2d1819b0d953800c1757ad7c92de4f Preconditions.checkArgument(start != null, "Location start cannot be null"); Preconditions.checkArgument(this.getWorld().equals(start.getWorld()), "Location start cannot be a different world"); start.checkFinite(); -@@ -686,6 +741,11 @@ public class CraftBlock implements Block { +@@ -685,6 +740,11 @@ public class CraftBlock implements Block { @Override public boolean canPlace(BlockData data) { @@ -505,7 +505,7 @@ index c8f0b24fd9336259e42c4746061793e156978ad3..2b2d1819b0d953800c1757ad7c92de4f Preconditions.checkArgument(data != null, "BlockData cannot be null"); net.minecraft.world.level.block.state.BlockState iblockdata = ((CraftBlockData) data).getState(); net.minecraft.world.level.Level world = this.world.getMinecraftWorld(); -@@ -720,6 +780,11 @@ public class CraftBlock implements Block { +@@ -719,6 +779,11 @@ public class CraftBlock implements Block { @Override public void tick() { @@ -517,10 +517,10 @@ index c8f0b24fd9336259e42c4746061793e156978ad3..2b2d1819b0d953800c1757ad7c92de4f final ServerLevel level = this.world.getMinecraftWorld(); this.getNMS().tick(level, this.position, level.random); } -diff --git a/src/main/java/org/bukkit/craftbukkit/block/state/CraftBlockEntityState.java b/src/main/java/org/bukkit/craftbukkit/block/state/CraftBlockEntityState.java -index 7d3a4669ccd6fbfaf8716dc19c538c6ba17a5ffe..333b05d4ad4baecb02c548f5c48650770d61b95a 100644 ---- a/src/main/java/org/bukkit/craftbukkit/block/state/CraftBlockEntityState.java -+++ b/src/main/java/org/bukkit/craftbukkit/block/state/CraftBlockEntityState.java +diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlockEntityState.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlockEntityState.java +index 3422970353dcd886934b9ee906467769d39abbde..13c91223bbb4841cab0e491037a36113a33faf15 100644 +--- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlockEntityState.java ++++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlockEntityState.java @@ -26,6 +26,27 @@ public abstract class CraftBlockEntityState extends Craft private final T snapshot; public boolean snapshotDisabled; // Paper @@ -560,11 +560,11 @@ index 7d3a4669ccd6fbfaf8716dc19c538c6ba17a5ffe..333b05d4ad4baecb02c548f5c4865077 this.snapshot = this.blockEntity; } else { this.snapshot = this.createSnapshot(blockEntity); -diff --git a/src/main/java/org/bukkit/craftbukkit/block/state/CraftBlockState.java b/src/main/java/org/bukkit/craftbukkit/block/state/CraftBlockState.java -index 647c1edd3338ce4f80e48ea769ed381cd158758d..07cf2e9412da5d307a7ca5edc202f8286e5ae25a 100644 ---- a/src/main/java/org/bukkit/craftbukkit/block/state/CraftBlockState.java -+++ b/src/main/java/org/bukkit/craftbukkit/block/state/CraftBlockState.java -@@ -219,6 +219,12 @@ public class CraftBlockState implements BlockState { +diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java +index c0a7659776a9f0fb82bb8563acbf3286b318fe03..69fc25b20cc84a2cd89cb0927aceba05df405e2a 100644 +--- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java ++++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java +@@ -217,6 +217,12 @@ public class CraftBlockState implements BlockState { LevelAccessor access = this.getWorldHandle(); CraftBlock block = this.getBlock(); @@ -577,7 +577,7 @@ index 647c1edd3338ce4f80e48ea769ed381cd158758d..07cf2e9412da5d307a7ca5edc202f828 if (block.getType() != this.getType()) { if (!force) { return false; -@@ -367,6 +373,8 @@ public class CraftBlockState implements BlockState { +@@ -365,6 +371,8 @@ public class CraftBlockState implements BlockState { @Override public java.util.Collection getDrops(org.bukkit.inventory.ItemStack item, org.bukkit.entity.Entity entity) { @@ -586,11 +586,11 @@ index 647c1edd3338ce4f80e48ea769ed381cd158758d..07cf2e9412da5d307a7ca5edc202f828 this.requirePlaced(); net.minecraft.world.item.ItemStack nms = org.bukkit.craftbukkit.inventory.CraftItemStack.asNMSCopy(item); -diff --git a/src/main/java/org/bukkit/craftbukkit/block/state/CraftBlockStates.java b/src/main/java/org/bukkit/craftbukkit/block/state/CraftBlockStates.java -index 23d0c901c1261de30748654b34a7ce6c51ad9c24..ca5edb79379ee74cb66e6eb7f63fe725a689170a 100644 ---- a/src/main/java/org/bukkit/craftbukkit/block/state/CraftBlockStates.java -+++ b/src/main/java/org/bukkit/craftbukkit/block/state/CraftBlockStates.java -@@ -196,14 +196,14 @@ public final class CraftBlockStates { +diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlockStates.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlockStates.java +index 321280d7c9c3c828cbf2eb19d2fd196a1f84d4c3..cd8f771e08cee5d00c53a8e70f0fe37cf393cd52 100644 +--- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlockStates.java ++++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlockStates.java +@@ -195,14 +195,14 @@ public final class CraftBlockStates { BlockPos pos = craftBlock.getPosition(); net.minecraft.world.level.block.state.BlockState state = craftBlock.getNMS(); BlockEntity blockEntity = craftBlock.getHandle().getBlockEntity(pos); @@ -609,7 +609,7 @@ index 23d0c901c1261de30748654b34a7ce6c51ad9c24..ca5edb79379ee74cb66e6eb7f63fe725 } diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index 7d22c1ee7fa98fc2d04d353fe19387ca3334f52a..cfe328104a57410204504721f1d8840f4819344b 100644 +index 5a1b37a408ebede6367ca90ad5d13c29b7b1a6b3..7042d684bc345925f1755fec2b463b487db71cc5 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java @@ -809,6 +809,28 @@ public class CraftEventFactory {