diff --git a/patches/unapplied/server/0019-Rewrite-chunk-system.patch b/patches/server/0018-Rewrite-chunk-system.patch similarity index 97% rename from patches/unapplied/server/0019-Rewrite-chunk-system.patch rename to patches/server/0018-Rewrite-chunk-system.patch index 4d601f411c..b6178cd634 100644 --- a/patches/unapplied/server/0019-Rewrite-chunk-system.patch +++ b/patches/server/0018-Rewrite-chunk-system.patch @@ -2095,7 +2095,7 @@ index 0000000000000000000000000000000000000000..99f49b5625cf51d6c97640553cf5c420 + } +} diff --git a/src/main/java/io/papermc/paper/chunk/system/ChunkSystem.java b/src/main/java/io/papermc/paper/chunk/system/ChunkSystem.java -index 95eac2e12a16938d81ab512b00e90c5234b42834..8f7bf1f0400aeab8b7801d113d244d0716c5eb84 100644 +index 87ae7d64e67ebae5ab53cc239cdf6580dca31652..56c35149fd142af6ffe31434fec0064cf6ea3be5 100644 --- a/src/main/java/io/papermc/paper/chunk/system/ChunkSystem.java +++ b/src/main/java/io/papermc/paper/chunk/system/ChunkSystem.java @@ -32,191 +32,41 @@ public final class ChunkSystem { @@ -2328,10 +2328,10 @@ index 95eac2e12a16938d81ab512b00e90c5234b42834..8f7bf1f0400aeab8b7801d113d244d07 private ChunkSystem() { diff --git a/src/main/java/io/papermc/paper/chunk/system/RegionizedPlayerChunkLoader.java b/src/main/java/io/papermc/paper/chunk/system/RegionizedPlayerChunkLoader.java new file mode 100644 -index 0000000000000000000000000000000000000000..924539d4ac50c70178ba220424ffacd6ff277c8b +index 0000000000000000000000000000000000000000..842848872b86e5335863d309af956fee74110d52 --- /dev/null +++ b/src/main/java/io/papermc/paper/chunk/system/RegionizedPlayerChunkLoader.java -@@ -0,0 +1,1426 @@ +@@ -0,0 +1,1440 @@ +package io.papermc.paper.chunk.system; + +import ca.spottedleaf.concurrentutil.collection.SRSWLinkedQueue; @@ -2354,9 +2354,11 @@ index 0000000000000000000000000000000000000000..924539d4ac50c70178ba220424ffacd6 +import net.minecraft.network.protocol.game.ClientboundSetChunkCacheRadiusPacket; +import net.minecraft.network.protocol.game.ClientboundSetSimulationDistancePacket; +import net.minecraft.server.level.ChunkMap; ++import net.minecraft.server.level.ChunkTrackingView; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.server.level.TicketType; ++import net.minecraft.server.network.PlayerChunkSender; +import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.GameRules; +import net.minecraft.world.level.chunk.ChunkAccess; @@ -2815,8 +2817,7 @@ index 0000000000000000000000000000000000000000..924539d4ac50c70178ba220424ffacd6 + + private void sendChunk(final int chunkX, final int chunkZ) { + if (this.sentChunks.add(CoordinateUtils.getChunkKey(chunkX, chunkZ))) { -+ this.world.getChunkSource().chunkMap.updateChunkTracking(this.player, -+ new ChunkPos(chunkX, chunkZ), new MutableObject<>(), false, true); // unloaded, loaded ++ PlayerChunkSender.sendChunk(this.player.connection, this.world, this.world.getChunkIfLoaded(chunkX, chunkZ)); + return; + } + throw new IllegalStateException(); @@ -2830,8 +2831,7 @@ index 0000000000000000000000000000000000000000..924539d4ac50c70178ba220424ffacd6 + } + + private void sendUnloadChunkRaw(final int chunkX, final int chunkZ) { -+ this.player.serverLevel().getChunkSource().chunkMap.updateChunkTracking(this.player, -+ new ChunkPos(chunkX, chunkZ), null, true, false); // unloaded, loaded ++ PlayerChunkSender.dropChunkStatic(this.player, new ChunkPos(chunkX, chunkZ)); + } + + private final SingleUserAreaMap broadcastMap = new SingleUserAreaMap<>(this) { @@ -2900,11 +2900,11 @@ index 0000000000000000000000000000000000000000..924539d4ac50c70178ba220424ffacd6 + private static boolean wantChunkLoaded(final int centerX, final int centerZ, final int chunkX, final int chunkZ, + final int sendRadius) { + // expect sendRadius to be = 1 + target viewable radius -+ return ChunkMap.isChunkInRange(chunkX, chunkZ, centerX, centerZ, sendRadius); ++ return ChunkTrackingView.isWithinDistance(centerX, centerZ, sendRadius, chunkX, chunkZ, true); + } + + private static int getClientViewDistance(final ServerPlayer player) { -+ final Integer vd = player.clientViewDistance; ++ final Integer vd = player.requestedViewDistance(); + return vd == null ? -1 : Math.max(0, vd.intValue()); + } + @@ -3122,20 +3122,34 @@ index 0000000000000000000000000000000000000000..924539d4ac50c70178ba220424ffacd6 + // try to push more chunk generations + final long maxGens = Math.max(0L, Math.min(MAX_RATE, Math.min(this.genQueue.size(), this.getMaxChunkGenerates()))); + final int maxGensThisTick = (int)this.chunkGenerateTicketLimiter.takeAllocation(time, genRate, maxGens); -+ for (int i = 0; i < maxGensThisTick; ++i) { -+ final long chunk = this.genQueue.dequeueLong(); -+ final byte prev = this.chunkTicketStage.put(chunk, CHUNK_TICKET_STAGE_GENERATING); ++ int ratedGensThisTick = 0; ++ while (!this.genQueue.isEmpty()) { ++ final long chunkKey = this.genQueue.firstLong(); ++ final int chunkX = CoordinateUtils.getChunkX(chunkKey); ++ final int chunkZ = CoordinateUtils.getChunkZ(chunkKey); ++ final ChunkAccess chunk = this.world.chunkSource.getChunkAtImmediately(chunkX, chunkZ); ++ if (chunk.getStatus() != ChunkStatus.FULL) { ++ // only rate limit actual generations ++ if ((ratedGensThisTick + 1) > maxGensThisTick) { ++ break; ++ } ++ ++ratedGensThisTick; ++ } ++ ++ this.genQueue.dequeueLong(); ++ ++ final byte prev = this.chunkTicketStage.put(chunkKey, CHUNK_TICKET_STAGE_GENERATING); + if (prev != CHUNK_TICKET_STAGE_LOADED) { + throw new IllegalStateException("Previous state should be " + CHUNK_TICKET_STAGE_LOADED + ", not " + prev); + } + this.pushDelayedTicketOp( + ChunkHolderManager.TicketOperation.addAndRemove( -+ chunk, ++ chunkKey, + REGION_PLAYER_TICKET, GENERATED_TICKET_LEVEL, this.idBoxed, + REGION_PLAYER_TICKET, LOADED_TICKET_LEVEL, this.idBoxed + ) + ); -+ this.generatingQueue.enqueue(chunk); ++ this.generatingQueue.enqueue(chunkKey); + } + + // try to pull ticking chunks @@ -3760,10 +3774,10 @@ index 0000000000000000000000000000000000000000..924539d4ac50c70178ba220424ffacd6 +} diff --git a/src/main/java/io/papermc/paper/chunk/system/entity/EntityLookup.java b/src/main/java/io/papermc/paper/chunk/system/entity/EntityLookup.java new file mode 100644 -index 0000000000000000000000000000000000000000..ff7198a03ab0da79c98513f4a1507e854484f4c2 +index 0000000000000000000000000000000000000000..c4d1dbbd39ba0cdc9176ffa6d350d2aa50380211 --- /dev/null +++ b/src/main/java/io/papermc/paper/chunk/system/entity/EntityLookup.java -@@ -0,0 +1,859 @@ +@@ -0,0 +1,894 @@ +package io.papermc.paper.chunk.system.entity; + +import com.destroystokyo.paper.util.maplist.EntityList; @@ -3783,6 +3797,7 @@ index 0000000000000000000000000000000000000000..ff7198a03ab0da79c98513f4a1507e85 +import net.minecraft.util.Mth; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; ++import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.entity.EntityInLevelCallback; +import net.minecraft.world.level.entity.EntityTypeTest; +import net.minecraft.world.level.entity.LevelCallback; @@ -3790,6 +3805,7 @@ index 0000000000000000000000000000000000000000..ff7198a03ab0da79c98513f4a1507e85 +import net.minecraft.world.level.entity.LevelEntityGetter; +import net.minecraft.world.level.entity.Visibility; +import net.minecraft.world.phys.AABB; ++import net.minecraft.world.phys.Vec3; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.slf4j.Logger; @@ -4076,22 +4092,55 @@ index 0000000000000000000000000000000000000000..ff7198a03ab0da79c98513f4a1507e85 + this.getChunk(x, z).updateStatus(newStatus, this); + } + -+ public void addLegacyChunkEntities(final List entities) { -+ for (int i = 0, len = entities.size(); i < len; ++i) { -+ this.addEntity(entities.get(i), true); ++ public void addLegacyChunkEntities(final List entities, final ChunkPos forChunk) { ++ this.addEntityChunk(entities, forChunk, true); ++ } ++ ++ public void addEntityChunkEntities(final List entities, final ChunkPos forChunk) { ++ this.addEntityChunk(entities, forChunk, true); ++ } ++ ++ public void addWorldGenChunkEntities(final List entities, final ChunkPos forChunk) { ++ this.addEntityChunk(entities, forChunk, false); ++ } ++ ++ private void addRecursivelySafe(final Entity root, final boolean fromDisk) { ++ if (!this.addEntity(root, fromDisk)) { ++ // possible we are a passenger, and so should dismount from any valid entity in the world ++ root.stopRiding(true); ++ return; ++ } ++ for (final Entity passenger : root.getPassengers()) { ++ this.addRecursivelySafe(passenger, fromDisk); + } + } + -+ public void addEntityChunkEntities(final List entities) { ++ private void addEntityChunk(final List entities, final ChunkPos forChunk, final boolean fromDisk) { + for (int i = 0, len = entities.size(); i < len; ++i) { -+ this.addEntity(entities.get(i), true); -+ } -+ } ++ final Entity entity = entities.get(i); ++ if (entity.isPassenger()) { ++ continue; ++ } + -+ public void addWorldGenChunkEntities(final List entities) { -+ for (int i = 0, len = entities.size(); i < len; ++i) { -+ this.addEntity(entities.get(i), false); -+ } ++ if (!entity.chunkPosition().equals(forChunk)) { ++ LOGGER.warn("Root entity " + entity + " is outside of serialized chunk " + forChunk); ++ // can't set removed here, as we may not own the chunk position ++ // skip the entity ++ continue; ++ } ++ ++ final Vec3 rootPosition = entity.position(); ++ ++ // always adjust positions before adding passengers in case plugins access the entity, and so that ++ // they are added to the right entity chunk ++ for (final Entity passenger : entity.getIndirectPassengers()) { ++ if (!passenger.chunkPosition().equals(forChunk)) { ++ passenger.setPosRaw(rootPosition.x, rootPosition.y, rootPosition.z, true); ++ } ++ } ++ ++ this.addRecursivelySafe(entity, fromDisk); ++ } + } + + public boolean addNewEntity(final Entity entity) { @@ -6477,7 +6526,7 @@ index 0000000000000000000000000000000000000000..d72041aa814ff179e6e29a45dcd359a9 +} diff --git a/src/main/java/io/papermc/paper/chunk/system/scheduling/ChunkFullTask.java b/src/main/java/io/papermc/paper/chunk/system/scheduling/ChunkFullTask.java new file mode 100644 -index 0000000000000000000000000000000000000000..300700477ee34bc22b31315825c0e40f61070cd5 +index 0000000000000000000000000000000000000000..679ed4d53269e1113035b462cf74ab16a231e22e --- /dev/null +++ b/src/main/java/io/papermc/paper/chunk/system/scheduling/ChunkFullTask.java @@ -0,0 +1,135 @@ @@ -6538,7 +6587,7 @@ index 0000000000000000000000000000000000000000..300700477ee34bc22b31315825c0e40f + final ServerLevel world = this.world; + final ProtoChunk protoChunk = (ProtoChunk)this.fromChunk; + chunk = new LevelChunk(this.world, protoChunk, (final LevelChunk unused) -> { -+ ChunkMap.postLoadProtoChunk(world, protoChunk.getEntities()); ++ ChunkMap.postLoadProtoChunk(world, protoChunk.getEntities(), protoChunk.getPos()); // Paper - rewrite chunk system + }); + } + @@ -10933,7 +10982,7 @@ index 0000000000000000000000000000000000000000..396d72c00e47cf1669ae20dc839c1c96 +} diff --git a/src/main/java/io/papermc/paper/chunk/system/scheduling/NewChunkHolder.java b/src/main/java/io/papermc/paper/chunk/system/scheduling/NewChunkHolder.java new file mode 100644 -index 0000000000000000000000000000000000000000..51304c5cf4b0ac7646693ef97ef4a3847d3342b5 +index 0000000000000000000000000000000000000000..b66a7d4aab887309579154815a0d4abf9de506b0 --- /dev/null +++ b/src/main/java/io/papermc/paper/chunk/system/scheduling/NewChunkHolder.java @@ -0,0 +1,2106 @@ @@ -11054,7 +11103,7 @@ index 0000000000000000000000000000000000000000..51304c5cf4b0ac7646693ef97ef4a384 + if (entityChunk != null) { + final List entities = EntityStorage.readEntities(this.world, entityChunk); + -+ this.world.getEntityLookup().addEntityChunkEntities(entities); ++ this.world.getEntityLookup().addEntityChunkEntities(entities, new ChunkPos(this.chunkX, this.chunkZ)); + } + } + @@ -16770,12 +16819,12 @@ index 0000000000000000000000000000000000000000..7e8dc9e8f381abfdcce2746edc93122d + } +} diff --git a/src/main/java/net/minecraft/network/Connection.java b/src/main/java/net/minecraft/network/Connection.java -index 047b07c7443c0d6a403506b869d63806ec2a85f7..18092ddfd000ef36f0e182ac064c2f667b1e611b 100644 +index e7a124403f2b07c96caaaf97d1c9023f9ec2f9d9..b097bb4855ab724b2c435a9a9db450ff3ce840fe 100644 --- a/src/main/java/net/minecraft/network/Connection.java +++ b/src/main/java/net/minecraft/network/Connection.java -@@ -94,6 +94,28 @@ public class Connection extends SimpleChannelInboundHandler> { +@@ -111,6 +111,28 @@ public class Connection extends SimpleChannelInboundHandler> { @Nullable - private volatile Component delayedDisconnect; + BandwidthDebugMonitor bandwidthDebugMonitor; public String hostname = ""; // CraftBukkit - add field + // Paper start - add pending task queue + private final Queue pendingTasks = new java.util.concurrent.ConcurrentLinkedQueue<>(); @@ -16802,15 +16851,15 @@ index 047b07c7443c0d6a403506b869d63806ec2a85f7..18092ddfd000ef36f0e182ac064c2f66 public Connection(PacketFlow side) { this.receiving = side; -@@ -261,6 +283,7 @@ public class Connection extends SimpleChannelInboundHandler> { +@@ -368,6 +390,7 @@ public class Connection extends SimpleChannelInboundHandler> { } private void flushQueue() { + try { // Paper - add pending task queue if (this.channel != null && this.channel.isOpen()) { - Queue queue = this.queue; + Queue queue = this.pendingActions; -@@ -273,6 +296,12 @@ public class Connection extends SimpleChannelInboundHandler> { +@@ -380,6 +403,12 @@ public class Connection extends SimpleChannelInboundHandler> { } } @@ -16837,10 +16886,10 @@ index a5e438a834826161c52ca9db57d234d9ff80a591..b8bc1b9b8e8a33df90a963f9f9769292 @Override diff --git a/src/main/java/net/minecraft/server/Main.java b/src/main/java/net/minecraft/server/Main.java -index af8afd53b5d3b34be4a5207316ce35abbcdf202d..017395b49d4cc0d12246332cc7d4d0113dcd5c5e 100644 +index ae0b713870976d4b1e469a90cef9b2e282dbcaab..646cd39c46d86899f23c8179c0790e32d03f954f 100644 --- a/src/main/java/net/minecraft/server/Main.java +++ b/src/main/java/net/minecraft/server/Main.java -@@ -282,6 +282,7 @@ public class Main { +@@ -279,6 +279,7 @@ public class Main { convertable_conversionsession.saveDataTag(iregistrycustom_dimension, savedata); */ @@ -16849,10 +16898,10 @@ index af8afd53b5d3b34be4a5207316ce35abbcdf202d..017395b49d4cc0d12246332cc7d4d011 DedicatedServer dedicatedserver1 = new DedicatedServer(optionset, worldLoader.get(), thread, convertable_conversionsession, resourcepackrepository, worldstem, dedicatedserversettings, DataFixers.getDataFixer(), services, LoggerChunkProgressListener::new); diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 73c3070b2e300e0ab29ac1db1631023cef7970f8..f46ae930c6d1609dbefb56e67853f6e8504b749f 100644 +index 0eb3a55cbf2ed2c3f5e809ee60aba3767f7aa01b..151259cc254d4e796e6af810e37eaa30b832daa3 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -299,7 +299,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop S spin(Function serverFactory) { AtomicReference atomicreference = new AtomicReference(); @@ -16861,7 +16910,7 @@ index 73c3070b2e300e0ab29ac1db1631023cef7970f8..f46ae930c6d1609dbefb56e67853f6e8 ((MinecraftServer) atomicreference.get()).runServer(); }, "Server thread"); -@@ -582,7 +582,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 5000L && this.nextTickTime - this.lastOverloadWarning >= 30000L) { // CraftBukkit -@@ -1098,6 +1087,11 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop pendingFullStateConfirmation; +- private CompletableFuture sendSync; + // Paper - rewrite chunk system private final ChunkMap chunkMap; // Paper @@ -17084,7 +17134,7 @@ index 4620e64d8eb81520b75fbfbc64603e5887c7b016..c5389e7f3665c06e487dfde3200b7e22 // Paper start public void onChunkAdd() { -@@ -82,148 +87,130 @@ public class ChunkHolder { +@@ -83,158 +87,143 @@ public class ChunkHolder { } // Paper end @@ -17114,6 +17164,10 @@ index 4620e64d8eb81520b75fbfbc64603e5887c7b016..c5389e7f3665c06e487dfde3200b7e22 + public boolean hasChunkBeenSent() { + return this.playersSentChunkTo.size() != 0; + } ++ ++ public boolean hasBeenSent(ServerPlayer to) { ++ return this.playersSentChunkTo.contains(to); ++ } + // Paper end - replace player chunk loader + public ChunkHolder(ChunkPos pos, LevelHeightAccessor world, LevelLightEngine lightingProvider, ChunkHolder.PlayerProvider playersWatchingChunkProvider, io.papermc.paper.chunk.system.scheduling.NewChunkHolder newChunkHolder) { // Paper - rewrite chunk system + this.newChunkHolder = newChunkHolder; // Paper - rewrite chunk system @@ -17121,6 +17175,7 @@ index 4620e64d8eb81520b75fbfbc64603e5887c7b016..c5389e7f3665c06e487dfde3200b7e22 this.blockChangedLightSectionFilter = new BitSet(); this.skyChangedLightSectionFilter = new BitSet(); - this.pendingFullStateConfirmation = CompletableFuture.completedFuture(null); // CraftBukkit - decompile error +- this.sendSync = CompletableFuture.completedFuture(null); // CraftBukkit - decompile error + // Paper - rewrite chunk system this.pos = pos; this.levelHeightAccessor = world; @@ -17216,6 +17271,17 @@ index 4620e64d8eb81520b75fbfbc64603e5887c7b016..c5389e7f3665c06e487dfde3200b7e22 + // Paper end - rewrite chunk system } + public CompletableFuture getChunkSendSyncFuture() { +- return this.sendSync; ++ throw new UnsupportedOperationException(); // Paper - rewrite chunk system + } + + @Nullable + public LevelChunk getChunkToSend() { +- return !this.sendSync.isDone() ? null : this.getTickingChunk(); ++ return this.getSendingChunk(); // Paper - rewrite chunk system + } + @Nullable public final LevelChunk getFullChunk() { // Paper - final for inline - CompletableFuture> completablefuture = this.getFullChunkFuture(); @@ -17296,7 +17362,7 @@ index 4620e64d8eb81520b75fbfbc64603e5887c7b016..c5389e7f3665c06e487dfde3200b7e22 if (chunk != null) { int i = this.levelHeightAccessor.getSectionIndex(pos.getY()); -@@ -239,16 +226,17 @@ public class ChunkHolder { +@@ -250,16 +239,17 @@ public class ChunkHolder { } public void sectionLightChanged(LightLayer lightType, int y) { @@ -17319,7 +17385,7 @@ index 4620e64d8eb81520b75fbfbc64603e5887c7b016..c5389e7f3665c06e487dfde3200b7e22 int j = this.lightEngine.getMinLightSection(); int k = this.lightEngine.getMaxLightSection(); -@@ -273,7 +261,7 @@ public class ChunkHolder { +@@ -284,7 +274,7 @@ public class ChunkHolder { List list; if (!this.skyChangedLightSectionFilter.isEmpty() || !this.blockChangedLightSectionFilter.isEmpty()) { @@ -17328,7 +17394,7 @@ index 4620e64d8eb81520b75fbfbc64603e5887c7b016..c5389e7f3665c06e487dfde3200b7e22 if (!list.isEmpty()) { ClientboundLightUpdatePacket packetplayoutlightupdate = new ClientboundLightUpdatePacket(chunk.getPos(), this.lightEngine, this.skyChangedLightSectionFilter, this.blockChangedLightSectionFilter); -@@ -285,7 +273,7 @@ public class ChunkHolder { +@@ -296,7 +286,7 @@ public class ChunkHolder { } if (this.hasChangedSections) { @@ -17337,7 +17403,7 @@ index 4620e64d8eb81520b75fbfbc64603e5887c7b016..c5389e7f3665c06e487dfde3200b7e22 for (int i = 0; i < this.changedBlocksPerSection.length; ++i) { ShortSet shortset = this.changedBlocksPerSection[i]; -@@ -343,67 +331,35 @@ public class ChunkHolder { +@@ -354,78 +344,35 @@ public class ChunkHolder { } @@ -17415,15 +17481,25 @@ index 4620e64d8eb81520b75fbfbc64603e5887c7b016..c5389e7f3665c06e487dfde3200b7e22 }); } +- public void addSendDependency(CompletableFuture postProcessingFuture) { +- if (this.sendSync.isDone()) { +- this.sendSync = postProcessingFuture; +- } else { +- this.sendSync = this.sendSync.thenCombine(postProcessingFuture, (object, object1) -> { +- return null; +- }); +- } +- +- } + // Paper - rewrite chunk system -+ + public FullChunkStatus getFullStatus() { - return ChunkLevel.fullStatus(this.ticketLevel); + return this.newChunkHolder.getChunkStatus(); // Paper - rewrite chunk system) { } public final ChunkPos getPos() { // Paper - final for inline -@@ -411,240 +367,17 @@ public class ChunkHolder { +@@ -433,240 +380,17 @@ public class ChunkHolder { } public final int getTicketLevel() { // Paper - final for inline @@ -17668,7 +17744,7 @@ index 4620e64d8eb81520b75fbfbc64603e5887c7b016..c5389e7f3665c06e487dfde3200b7e22 } @FunctionalInterface -@@ -682,15 +415,15 @@ public class ChunkHolder { +@@ -704,15 +428,15 @@ public class ChunkHolder { // Paper start public final boolean isEntityTickingReady() { @@ -17688,11 +17764,11 @@ index 4620e64d8eb81520b75fbfbc64603e5887c7b016..c5389e7f3665c06e487dfde3200b7e22 // Paper end } diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java -index 19bd6f9aee3ccb1af1b010ee51a54aa2d0bf9c84..6f30a16595e352e32375530a0482d8c0ee9c1113 100644 +index 8c84461a5711cb408b0ead397417c31cb2f4d336..ea0b82165e452b7b82d1d9a58eef6059cba30552 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java -@@ -127,10 +127,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider - private static final int MIN_VIEW_DISTANCE = 2; +@@ -118,10 +118,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider + public static final int MIN_VIEW_DISTANCE = 2; public static final int MAX_VIEW_DISTANCE = 32; public static final int FORCED_TICKET_LEVEL = ChunkLevel.byStatus(FullChunkStatus.ENTITY_TICKING); - public final Long2ObjectLinkedOpenHashMap updatingChunkMap = new Long2ObjectLinkedOpenHashMap(); @@ -17703,7 +17779,7 @@ index 19bd6f9aee3ccb1af1b010ee51a54aa2d0bf9c84..6f30a16595e352e32375530a0482d8c0 public final ServerLevel level; private final ThreadedLevelLightEngine lightEngine; public final BlockableEventLoop mainThreadExecutor; // Paper - public -@@ -139,16 +136,14 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -130,16 +127,14 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider private final ChunkGeneratorStructureState chunkGeneratorState; public final Supplier overworldDataStorage; private final PoiManager poiManager; @@ -17723,9 +17799,9 @@ index 19bd6f9aee3ccb1af1b010ee51a54aa2d0bf9c84..6f30a16595e352e32375530a0482d8c0 private final String storageName; private final PlayerMap playerMap; public final Int2ObjectMap entityMap; -@@ -157,37 +152,20 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -148,37 +143,20 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider private final Queue unloadQueue; - int viewDistance; + private int serverViewDistance; - // CraftBukkit start - recursion-safe executor for Chunk loadCallback() and unloadCallback() - public final CallbackExecutor callbackExecutor = new CallbackExecutor(); @@ -17754,8 +17830,8 @@ index 19bd6f9aee3ccb1af1b010ee51a54aa2d0bf9c84..6f30a16595e352e32375530a0482d8c0 void addPlayerToDistanceMaps(ServerPlayer player) { + this.level.playerChunkLoader.addPlayer(player); // Paper - replace chunk loader - int chunkX = MCUtil.getChunkCoordinate(player.getX()); - int chunkZ = MCUtil.getChunkCoordinate(player.getZ()); + int chunkX = io.papermc.paper.util.MCUtil.getChunkCoordinate(player.getX()); + int chunkZ = io.papermc.paper.util.MCUtil.getChunkCoordinate(player.getZ()); // Note: players need to be explicitly added to distance maps before they can be updated } @@ -17764,15 +17840,15 @@ index 19bd6f9aee3ccb1af1b010ee51a54aa2d0bf9c84..6f30a16595e352e32375530a0482d8c0 } -@@ -195,6 +173,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider - int chunkX = MCUtil.getChunkCoordinate(player.getX()); - int chunkZ = MCUtil.getChunkCoordinate(player.getZ()); +@@ -186,6 +164,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider + int chunkX = io.papermc.paper.util.MCUtil.getChunkCoordinate(player.getX()); + int chunkZ = io.papermc.paper.util.MCUtil.getChunkCoordinate(player.getZ()); // Note: players need to be explicitly added to distance maps before they can be updated + this.level.playerChunkLoader.updatePlayer(player); // Paper - replace chunk loader } // Paper end // Paper start -@@ -224,16 +203,13 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -215,16 +194,13 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider } public final ChunkHolder getUnloadingChunkHolder(int chunkX, int chunkZ) { @@ -17791,7 +17867,7 @@ index 19bd6f9aee3ccb1af1b010ee51a54aa2d0bf9c84..6f30a16595e352e32375530a0482d8c0 this.tickingGenerated = new AtomicInteger(); this.playerMap = new PlayerMap(); this.entityMap = new Int2ObjectOpenHashMap(); -@@ -264,19 +240,17 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -255,19 +231,17 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider this.chunkGeneratorState = chunkGenerator.createState(iregistrycustom.lookupOrThrow(Registries.STRUCTURE_SET), this.randomState, j, world.spigotConfig); // Spigot this.mainThreadExecutor = mainThreadExecutor; @@ -17816,7 +17892,37 @@ index 19bd6f9aee3ccb1af1b010ee51a54aa2d0bf9c84..6f30a16595e352e32375530a0482d8c0 this.distanceManager = new ChunkMap.ChunkDistanceManager(executor, mainThreadExecutor); this.overworldDataStorage = persistentStateManagerFactory; this.poiManager = new PoiManager(path.resolve("poi"), dataFixer, dsync, iregistrycustom, world); -@@ -340,20 +314,22 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -311,23 +285,15 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider + } + + boolean isChunkTracked(ServerPlayer player, int chunkX, int chunkZ) { +- return player.getChunkTrackingView().contains(chunkX, chunkZ) && !player.connection.chunkSender.isPending(ChunkPos.asLong(chunkX, chunkZ)); ++ // Paper start - rewrite player chunk loader ++ return this.level.playerChunkLoader.isChunkSent(player, chunkX, chunkZ); ++ // Paper end - rewrite player chunk loader + } + + private boolean isChunkOnTrackedBorder(ServerPlayer player, int chunkX, int chunkZ) { +- if (!this.isChunkTracked(player, chunkX, chunkZ)) { +- return false; +- } else { +- for (int k = -1; k <= 1; ++k) { +- for (int l = -1; l <= 1; ++l) { +- if ((k != 0 || l != 0) && !this.isChunkTracked(player, chunkX + k, chunkZ + l)) { +- return true; +- } +- } +- } +- +- return false; +- } ++ // Paper start - rewrite player chunk loader ++ return this.level.playerChunkLoader.isChunkSent(player, chunkX, chunkZ, true); ++ // Paper end - rewrite player chunk loader + } + + protected ThreadedLevelLightEngine getLightEngine() { +@@ -336,20 +302,22 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider @Nullable protected ChunkHolder getUpdatingChunkIfPresent(long pos) { @@ -17846,7 +17952,16 @@ index 19bd6f9aee3ccb1af1b010ee51a54aa2d0bf9c84..6f30a16595e352e32375530a0482d8c0 } public String getChunkDebugData(ChunkPos chunkPos) { -@@ -391,84 +367,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -379,92 +347,12 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider + + // Paper start + public final int getEffectiveViewDistance() { +- // TODO this needs to be checked on update +- // Mojang currently sets it to +1 of the configured view distance. So subtract one to get the one we really want. +- //TODO check if +0 is correct now +- return this.viewDistance; ++ return this.serverViewDistance; + } // Paper end private CompletableFuture, ChunkHolder.ChunkLoadingFailure>> getChunkRangeFuture(ChunkHolder centerChunk, int margin, IntFunction distanceToStatus) { @@ -17903,7 +18018,7 @@ index 19bd6f9aee3ccb1af1b010ee51a54aa2d0bf9c84..6f30a16595e352e32375530a0482d8c0 - - Optional optional = either.left(); - -- if (!optional.isPresent()) { +- if (optional.isEmpty()) { - return Either.right(new ChunkHolder.ChunkLoadingFailure() { - public String toString() { - ChunkPos chunkcoordintpair2 = new ChunkPos(j + l1 % (margin * 2 + 1), k + l1 / (margin * 2 + 1)); @@ -17932,7 +18047,7 @@ index 19bd6f9aee3ccb1af1b010ee51a54aa2d0bf9c84..6f30a16595e352e32375530a0482d8c0 } public ReportedException debugFuturesAndCreateReportedException(IllegalStateException exception, String details) { -@@ -498,263 +397,72 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -494,263 +382,72 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider } public CompletableFuture> prepareEntityTickingChunk(ChunkHolder chunk) { @@ -18005,7 +18120,7 @@ index 19bd6f9aee3ccb1af1b010ee51a54aa2d0bf9c84..6f30a16595e352e32375530a0482d8c0 protected void saveAllChunks(boolean flush) { - if (flush) { -- List list = (List) io.papermc.paper.chunk.system.ChunkSystem.getVisibleChunkHolders(this.level).stream().filter(ChunkHolder::wasAccessibleSinceLastSave).peek(ChunkHolder::refreshAccessibility).collect(Collectors.toList()); // Paper +- List list = io.papermc.paper.chunk.system.ChunkSystem.getVisibleChunkHolders(this.level).stream().filter(ChunkHolder::wasAccessibleSinceLastSave).peek(ChunkHolder::refreshAccessibility).toList(); // Paper - MutableBoolean mutableboolean = new MutableBoolean(); - - do { @@ -18216,7 +18331,7 @@ index 19bd6f9aee3ccb1af1b010ee51a54aa2d0bf9c84..6f30a16595e352e32375530a0482d8c0 return nbt.contains("Status", 8); } -@@ -790,54 +498,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -786,54 +483,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider } private CompletableFuture> scheduleChunkGeneration(ChunkHolder holder, ChunkStatus requiredStatus) { @@ -18272,7 +18387,7 @@ index 19bd6f9aee3ccb1af1b010ee51a54aa2d0bf9c84..6f30a16595e352e32375530a0482d8c0 } protected void releaseLightTicket(ChunkPos pos) { -@@ -848,7 +509,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -844,7 +494,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider })); } @@ -18281,16 +18396,24 @@ index 19bd6f9aee3ccb1af1b010ee51a54aa2d0bf9c84..6f30a16595e352e32375530a0482d8c0 ChunkStatus chunkstatus1; if (distance == 0) { -@@ -860,7 +521,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -856,7 +506,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider return chunkstatus1; } - private static void postLoadProtoChunk(ServerLevel world, List nbt) { -+ public static void postLoadProtoChunk(ServerLevel world, List nbt) { // Paper - public ++ public static void postLoadProtoChunk(ServerLevel world, List nbt, ChunkPos position) { // Paper - public and add chunk position parameter if (!nbt.isEmpty()) { // CraftBukkit start - these are spawned serialized (DefinedStructure) and we don't call an add event below at the moment due to ordering complexities world.addWorldGenChunkEntities(EntityType.loadEntitiesRecursive(nbt, world).filter((entity) -> { -@@ -882,93 +543,15 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -871,111 +521,27 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider + needsRemoval = true; + } + return !needsRemoval; +- })); ++ }), position); // Paper - rewrite chunk system + // CraftBukkit end + } + } private CompletableFuture> protoChunkToFullChunk(ChunkHolder chunkHolder) { @@ -18351,6 +18474,16 @@ index 19bd6f9aee3ccb1af1b010ee51a54aa2d0bf9c84..6f30a16595e352e32375530a0482d8c0 - return either.ifLeft((chunk) -> { - chunk.postProcessGeneration(); - this.level.startTickingChunk(chunk); +- CompletableFuture completablefuture2 = holder.getChunkSendSyncFuture(); +- +- if (completablefuture2.isDone()) { +- this.onChunkReadyToSend(chunk); +- } else { +- completablefuture2.thenAcceptAsync((object) -> { +- this.onChunkReadyToSend(chunk); +- }, this.mainThreadExecutor); +- } +- - }); - }, this.mainThreadExecutor); - @@ -18358,27 +18491,29 @@ index 19bd6f9aee3ccb1af1b010ee51a54aa2d0bf9c84..6f30a16595e352e32375530a0482d8c0 - this.tickingGenerated.getAndIncrement(); - return null; - }); -- completablefuture1.thenAcceptAsync((either) -> { -- either.ifLeft((chunk) -> { -- MutableObject mutableobject = new MutableObject(); -- -- this.getPlayers(holder.getPos(), false).forEach((entityplayer) -> { -- this.playerLoadedChunk(entityplayer, mutableobject, chunk); -- }); -- }); -- }, (runnable) -> { -- this.mainThreadMailbox.tell(ChunkTaskPriorityQueueSorter.message(holder, runnable)); -- }); - return completablefuture1; + throw new UnsupportedOperationException(); // Paper - rewrite chunk system } + private void onChunkReadyToSend(LevelChunk chunk) { +- ChunkPos chunkcoordintpair = chunk.getPos(); +- Iterator iterator = this.playerMap.getAllPlayers().iterator(); +- +- while (iterator.hasNext()) { +- ServerPlayer entityplayer = (ServerPlayer) iterator.next(); +- +- if (entityplayer.getChunkTrackingView().contains(chunkcoordintpair)) { +- ChunkMap.markChunkPendingToSend(entityplayer, chunk); +- } +- } ++ throw new UnsupportedOperationException(); // Paper - rewrite player chunk loader + + } + public CompletableFuture> prepareAccessibleChunk(ChunkHolder holder) { - return this.getChunkRangeFuture(holder, 1, ChunkStatus::getStatusAroundFullChunk).thenApplyAsync((either) -> { - return either.mapLeft((list) -> { -- LevelChunk chunk = (LevelChunk) list.get(list.size() / 2); -- -- return chunk; +- return (LevelChunk) list.get(list.size() / 2); - }); - }, (runnable) -> { - this.mainThreadMailbox.tell(ChunkTaskPriorityQueueSorter.message(holder, runnable)); @@ -18387,7 +18522,7 @@ index 19bd6f9aee3ccb1af1b010ee51a54aa2d0bf9c84..6f30a16595e352e32375530a0482d8c0 } public int getTickingGenerated() { -@@ -976,94 +559,26 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -983,130 +549,52 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider } private boolean saveChunkIfNeeded(ChunkHolder chunkHolder) { @@ -18474,89 +18609,68 @@ index 19bd6f9aee3ccb1af1b010ee51a54aa2d0bf9c84..6f30a16595e352e32375530a0482d8c0 - this.markPositionReplaceable(pos); - return false; - } -- -- ChunkStatus.ChunkType chunkstatus_type = ChunkSerializer.getChunkTypeFromTag(nbttagcompound); + throw new UnsupportedOperationException(); // Paper - rewrite chunk system + } +- ChunkStatus.ChunkType chunkstatus_type = ChunkSerializer.getChunkTypeFromTag(nbttagcompound); ++ // Paper start - replace player loader system ++ public void setTickViewDistance(int distance) { ++ this.level.playerChunkLoader.setTickDistance(distance); ++ } + - return this.markPosition(pos, chunkstatus_type) == 1; - } -+ // Paper start - replace player loader system -+ public void setTickViewDistance(int distance) { -+ this.level.playerChunkLoader.setTickDistance(distance); - } - + public void setSendViewDistance(int distance) { + this.level.playerChunkLoader.setSendDistance(distance); -+ } + } + // Paper end - replace player loader system - public void setViewDistance(int watchDistance) { + +- protected void setServerViewDistance(int watchDistance) { ++ public void setServerViewDistance(int watchDistance) { // Paper - replace player loader system int j = Mth.clamp(watchDistance, 2, 32); -@@ -1071,35 +586,24 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider - int k = this.viewDistance; - - this.viewDistance = j; -- this.distanceManager.updatePlayerTickets(this.viewDistance); -- Iterator objectiterator = io.papermc.paper.chunk.system.ChunkSystem.getUpdatingChunkHolders(this.level).iterator(); // Paper + if (j != this.serverViewDistance) { + this.serverViewDistance = j; +- this.distanceManager.updatePlayerTickets(this.serverViewDistance); +- Iterator iterator = this.playerMap.getAllPlayers().iterator(); - -- while (objectiterator.hasNext()) { -- ChunkHolder playerchunk = (ChunkHolder) objectiterator.next(); -- ChunkPos chunkcoordintpair = playerchunk.getPos(); -- MutableObject mutableobject = new MutableObject(); +- while (iterator.hasNext()) { +- ServerPlayer entityplayer = (ServerPlayer) iterator.next(); - -- this.getPlayers(chunkcoordintpair, false).forEach((entityplayer) -> { -- SectionPos sectionposition = entityplayer.getLastSectionPos(); -- boolean flag = ChunkMap.isChunkInRange(chunkcoordintpair.x, chunkcoordintpair.z, sectionposition.x(), sectionposition.z(), k); -- boolean flag1 = ChunkMap.isChunkInRange(chunkcoordintpair.x, chunkcoordintpair.z, sectionposition.x(), sectionposition.z(), this.viewDistance); -- -- this.updateChunkTracking(entityplayer, chunkcoordintpair, mutableobject, flag, flag1); -- }); +- this.updateChunkTracking(entityplayer); - } -+ this.level.playerChunkLoader.setLoadDistance(this.viewDistance + 1); // Paper - replace player loader system ++ this.level.playerChunkLoader.setLoadDistance(this.serverViewDistance + 1); // Paper - replace player loader system } } -- protected void updateChunkTracking(ServerPlayer player, ChunkPos pos, MutableObject packet, boolean oldWithinViewDistance, boolean newWithinViewDistance) { -+ public void updateChunkTracking(ServerPlayer player, ChunkPos pos, MutableObject packet, boolean oldWithinViewDistance, boolean newWithinViewDistance) { // Paper - public -+ io.papermc.paper.util.TickThread.ensureTickThread(this.level, pos, "May not update chunk tracking for chunk async"); // Paper - replace chunk loader system -+ io.papermc.paper.util.TickThread.ensureTickThread(player, "May not update chunk tracking for player async"); // Paper - replace chunk loader system - if (player.level() == this.level) { -+ ChunkHolder playerchunk = this.getVisibleChunkIfPresent(pos.toLong()); // Paper - replace chunk loader system - move up - if (newWithinViewDistance && !oldWithinViewDistance) { -- ChunkHolder playerchunk = this.getVisibleChunkIfPresent(pos.toLong()); -+ // Paper - replace chunk loader system - move up - - if (playerchunk != null) { -- LevelChunk chunk = playerchunk.getTickingChunk(); -+ LevelChunk chunk = playerchunk.getSendingChunk(); // Paper - replace chunk loader system - - if (chunk != null) { -+ playerchunk.addPlayer(player); // Paper - replace chunk loader system - this.playerLoadedChunk(player, packet, chunk); - } - -@@ -1108,10 +612,17 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider - } - - if (!newWithinViewDistance && oldWithinViewDistance) { -+ // Paper start - replace chunk loader system -+ if (playerchunk != null) { -+ playerchunk.removePlayer(player); -+ } else { -+ LOGGER.warn("ChunkHolder at " + pos + " in world '" + this.level.getWorld().getName() + "' does not exist to untrack chunk for " + player, new Throwable()); -+ } -+ // Paper end - replace chunk loader system - player.untrackChunk(pos); - } - -- } -+ } else { LOGGER.warn("Mismatch in world for chunk " + pos + " in world '" + this.level.getWorld().getName() + "' for player " + player, new Throwable()); } // Paper - replace chunk loader system + int getPlayerViewDistance(ServerPlayer player) { +- return Mth.clamp(player.requestedViewDistance(), 2, this.serverViewDistance); ++ return io.papermc.paper.chunk.system.ChunkSystem.getSendViewDistance(player); // Paper - per player view distance } - public int size() { -@@ -1127,30 +638,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider + private void markChunkPendingToSend(ServerPlayer player, ChunkPos pos) { +- LevelChunk chunk = this.getChunkToSend(pos.toLong()); +- +- if (chunk != null) { +- ChunkMap.markChunkPendingToSend(player, chunk); +- } ++ throw new UnsupportedOperationException(); // Paper - per player view distance + + } + + private static void markChunkPendingToSend(ServerPlayer player, LevelChunk chunk) { +- player.connection.chunkSender.markChunkPendingToSend(chunk); ++ throw new UnsupportedOperationException(); // Paper - rewrite player chunk loader + } + + private static void dropChunk(ServerPlayer player, ChunkPos pos) { +- player.connection.chunkSender.dropChunk(player, pos); ++ // Paper - rewrite player chunk loader + } + + @Nullable +@@ -1129,30 +617,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider } void dumpChunks(Writer writer) throws IOException { @@ -18588,7 +18702,7 @@ index 19bd6f9aee3ccb1af1b010ee51a54aa2d0bf9c84..6f30a16595e352e32375530a0482d8c0 } private static String printFuture(CompletableFuture> future) { -@@ -1169,6 +657,35 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -1171,6 +636,35 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider } } @@ -18624,91 +18738,94 @@ index 19bd6f9aee3ccb1af1b010ee51a54aa2d0bf9c84..6f30a16595e352e32375530a0482d8c0 private CompletableFuture> readChunk(ChunkPos chunkPos) { return this.read(chunkPos).thenApplyAsync((optional) -> { return optional.map((nbttagcompound) -> this.upgradeChunkTag(nbttagcompound, chunkPos)); // CraftBukkit -@@ -1272,15 +789,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -1260,8 +754,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider + this.distanceManager.addPlayer(SectionPos.of((EntityAccess) player), player); + } + +- player.setChunkTrackingView(ChunkTrackingView.EMPTY); +- this.updateChunkTracking(player); ++ // Paper - handled by player chunk loader + this.addPlayerToDistanceMaps(player); // Paper - distance maps + } else { + SectionPos sectionposition = player.getLastSectionPos(); +@@ -1272,7 +765,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider + } + this.removePlayerFromDistanceMaps(player); // Paper - distance maps +- this.applyChunkTrackingView(player, ChunkTrackingView.EMPTY); ++ // Paper - handled by player chunk loader } -- for (int k = i - this.viewDistance - 1; k <= i + this.viewDistance + 1; ++k) { -- for (int l = j - this.viewDistance - 1; l <= j + this.viewDistance + 1; ++l) { -- if (ChunkMap.isChunkInRange(k, l, i, j, this.viewDistance)) { -- ChunkPos chunkcoordintpair = new ChunkPos(k, l); -- -- this.updateChunkTracking(player, chunkcoordintpair, new MutableObject(), !added, added); -- } -- } -- } -+ // Paper - handled by player chunk loader - } +@@ -1320,73 +813,30 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider + this.playerMap.unIgnorePlayer(player); + } -@@ -1288,7 +797,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider - SectionPos sectionposition = SectionPos.of((EntityAccess) player); - - player.setLastSectionPos(sectionposition); -- player.connection.send(new ClientboundSetChunkCacheCenterPacket(sectionposition.x(), sectionposition.z())); -+ //player.connection.send(new ClientboundSetChunkCacheCenterPacket(sectionposition.x(), sectionposition.z())); // Paper - handled by player chunk loader - return sectionposition; - } - -@@ -1344,44 +853,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider - int l1; - int i2; - -- if (Math.abs(i1 - i) <= k1 * 2 && Math.abs(j1 - j) <= k1 * 2) { -- l1 = Math.min(i, i1) - k1; -- i2 = Math.min(j, j1) - k1; -- int j2 = Math.max(i, i1) + k1; -- int k2 = Math.max(j, j1) + k1; -- -- for (int l2 = l1; l2 <= j2; ++l2) { -- for (int i3 = i2; i3 <= k2; ++i3) { -- boolean flag3 = ChunkMap.isChunkInRange(l2, i3, i1, j1, this.viewDistance); -- boolean flag4 = ChunkMap.isChunkInRange(l2, i3, i, j, this.viewDistance); -- -- this.updateChunkTracking(player, new ChunkPos(l2, i3), new MutableObject(), flag3, flag4); -- } -- } -- } else { -- boolean flag5; -- boolean flag6; -- -- for (l1 = i1 - k1; l1 <= i1 + k1; ++l1) { -- for (i2 = j1 - k1; i2 <= j1 + k1; ++i2) { -- if (ChunkMap.isChunkInRange(l1, i2, i1, j1, this.viewDistance)) { -- flag5 = true; -- flag6 = false; -- this.updateChunkTracking(player, new ChunkPos(l1, i2), new MutableObject(), true, false); -- } -- } -- } -- -- for (l1 = i - k1; l1 <= i + k1; ++l1) { -- for (i2 = j - k1; i2 <= j + k1; ++i2) { -- if (ChunkMap.isChunkInRange(l1, i2, i, j, this.viewDistance)) { -- flag5 = false; -- flag6 = true; -- this.updateChunkTracking(player, new ChunkPos(l1, i2), new MutableObject(), false, true); -- } -- } -- } -- } -+ // Paper - replaced by PlayerChunkLoader +- this.updateChunkTracking(player); ++ // Paper - replaced by PlayerChunkLoader + } this.updateMaps(player); // Paper - distance maps + } -@@ -1389,20 +861,14 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider + private void updateChunkTracking(ServerPlayer player) { +- ChunkPos chunkcoordintpair = player.chunkPosition(); +- int i = this.getPlayerViewDistance(player); +- ChunkTrackingView chunktrackingview = player.getChunkTrackingView(); +- +- if (chunktrackingview instanceof ChunkTrackingView.Positioned) { +- ChunkTrackingView.Positioned chunktrackingview_a = (ChunkTrackingView.Positioned) chunktrackingview; +- +- if (chunktrackingview_a.center().equals(chunkcoordintpair) && chunktrackingview_a.viewDistance() == i) { +- return; +- } +- } +- +- this.applyChunkTrackingView(player, ChunkTrackingView.of(chunkcoordintpair, i)); ++ throw new UnsupportedOperationException(); // Paper - replaced by PlayerChunkLoader + } + + private void applyChunkTrackingView(ServerPlayer player, ChunkTrackingView chunkFilter) { +- if (player.level() == this.level) { +- ChunkTrackingView chunktrackingview1 = player.getChunkTrackingView(); +- +- if (chunkFilter instanceof ChunkTrackingView.Positioned) { +- label15: +- { +- ChunkTrackingView.Positioned chunktrackingview_a = (ChunkTrackingView.Positioned) chunkFilter; +- +- if (chunktrackingview1 instanceof ChunkTrackingView.Positioned) { +- ChunkTrackingView.Positioned chunktrackingview_a1 = (ChunkTrackingView.Positioned) chunktrackingview1; +- +- if (chunktrackingview_a1.center().equals(chunktrackingview_a.center())) { +- break label15; +- } +- } +- +- player.connection.send(new ClientboundSetChunkCacheCenterPacket(chunktrackingview_a.center().x, chunktrackingview_a.center().z)); +- } +- } +- +- ChunkTrackingView.difference(chunktrackingview1, chunkFilter, (chunkcoordintpair) -> { +- this.markChunkPendingToSend(player, chunkcoordintpair); +- }, (chunkcoordintpair) -> { +- ChunkMap.dropChunk(player, chunkcoordintpair); +- }); +- player.setChunkTrackingView(chunkFilter); +- } ++ throw new UnsupportedOperationException(); // Paper - replaced by PlayerChunkLoader + } @Override public List getPlayers(ChunkPos chunkPos, boolean onlyOnWatchDistanceEdge) { -- Set set = this.playerMap.getPlayers(chunkPos.toLong()); +- Set set = this.playerMap.getAllPlayers(); - Builder builder = ImmutableList.builder(); - Iterator iterator = set.iterator(); - - while (iterator.hasNext()) { - ServerPlayer entityplayer = (ServerPlayer) iterator.next(); -- SectionPos sectionposition = entityplayer.getLastSectionPos(); - -- if (onlyOnWatchDistanceEdge && ChunkMap.isChunkOnRangeBorder(chunkPos.x, chunkPos.z, sectionposition.x(), sectionposition.z(), this.viewDistance) || !onlyOnWatchDistanceEdge && ChunkMap.isChunkInRange(chunkPos.x, chunkPos.z, sectionposition.x(), sectionposition.z(), this.viewDistance)) { +- if (onlyOnWatchDistanceEdge && this.isChunkOnTrackedBorder(entityplayer, chunkPos.x, chunkPos.z) || !onlyOnWatchDistanceEdge && this.isChunkTracked(entityplayer, chunkPos.x, chunkPos.z)) { - builder.add(entityplayer); - } + // Paper start - per player view distance @@ -18724,7 +18841,40 @@ index 19bd6f9aee3ccb1af1b010ee51a54aa2d0bf9c84..6f30a16595e352e32375530a0482d8c0 } public void addEntity(Entity entity) { -@@ -1630,7 +1096,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -1450,13 +900,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider + } + + protected void tick() { +- Iterator iterator = this.playerMap.getAllPlayers().iterator(); +- +- while (iterator.hasNext()) { +- ServerPlayer entityplayer = (ServerPlayer) iterator.next(); +- +- this.updateChunkTracking(entityplayer); +- } ++ // Paper - replaced by PlayerChunkLoader + + List list = Lists.newArrayList(); + List list1 = this.level.players(); +@@ -1565,16 +1009,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider + } + + public void waitForLightBeforeSending(ChunkPos centerPos, int radius) { +- int j = radius + 1; +- +- ChunkPos.rangeClosed(centerPos, j).forEach((chunkcoordintpair1) -> { +- ChunkHolder playerchunk = this.getVisibleChunkIfPresent(chunkcoordintpair1.toLong()); +- +- if (playerchunk != null) { +- playerchunk.addSendDependency(this.lightEngine.waitForPendingTasks(chunkcoordintpair1.x, chunkcoordintpair1.z)); +- } +- +- }); ++ // Paper - rewrite player chunk loader + } + + private class ChunkDistanceManager extends DistanceManager { +@@ -1585,7 +1020,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider @Override protected boolean isChunkToRemove(long pos) { @@ -18733,17 +18883,8 @@ index 19bd6f9aee3ccb1af1b010ee51a54aa2d0bf9c84..6f30a16595e352e32375530a0482d8c0 } @Nullable -@@ -1711,7 +1177,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider - org.spigotmc.AsyncCatcher.catchOp("player tracker update"); // Spigot - if (player != this.entity) { - Vec3 vec3d = player.position().subtract(this.entity.position()); -- double d0 = (double) Math.min(this.getEffectiveRange(), ChunkMap.this.viewDistance * 16); -+ double d0 = (double) Math.min(this.getEffectiveRange(), io.papermc.paper.chunk.system.ChunkSystem.getSendViewDistance(player) * 16); // Paper - per player view distance - double d1 = vec3d.x * vec3d.x + vec3d.z * vec3d.z; - double d2 = d0 * d0; - boolean flag = d1 <= d2 && this.entity.broadcastToPlayer(player); diff --git a/src/main/java/net/minecraft/server/level/DistanceManager.java b/src/main/java/net/minecraft/server/level/DistanceManager.java -index f3c9a3dbb6f0e6f825b7477c89ed72ed52845419..c716047fefb51a77ce18df243c517d80c78b6853 100644 +index f3c9a3dbb6f0e6f825b7477c89ed72ed52845419..942042863f0105769c15b865d4d98a09a7053a68 100644 --- a/src/main/java/net/minecraft/server/level/DistanceManager.java +++ b/src/main/java/net/minecraft/server/level/DistanceManager.java @@ -39,65 +39,28 @@ import org.slf4j.Logger; @@ -19048,7 +19189,7 @@ index f3c9a3dbb6f0e6f825b7477c89ed72ed52845419..c716047fefb51a77ce18df243c517d80 protected void updatePlayerTickets(int viewDistance) { - this.playerTicketManager.updateViewDistance(viewDistance); -+ this.chunkMap.setViewDistance(viewDistance);// Paper - route to player chunk manager ++ this.chunkMap.setServerViewDistance(viewDistance);// Paper - route to player chunk manager } // Paper start @@ -19202,7 +19343,7 @@ index f3c9a3dbb6f0e6f825b7477c89ed72ed52845419..c716047fefb51a77ce18df243c517d80 + */ // Paper - rewrite chunk system } diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -index 6d5a160a9fdaa04bb930afae8a0765910f631d23..b0687dcf8af84af627b67e7fbb68170a2fd28da0 100644 +index b1fd6118132ba38f60d2a2b15c09231fa29be8fa..65d447df49d8c4a27de9ae7f9e298bf705c688bc 100644 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java @@ -141,108 +141,7 @@ public class ServerChunkCache extends ChunkSource { @@ -19633,7 +19774,7 @@ index 6d5a160a9fdaa04bb930afae8a0765910f631d23..b0687dcf8af84af627b67e7fbb68170a } diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 7cb5abfa89f842194325d26c6e95b49460c5968f..995be2fd84ce343d7430d9658f91868e653da43d 100644 +index 988a17cd0b960a07795d999dd125eae3a63d4227..0261baddef54c47f7b32f4e2a31ba0172e676d38 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -194,7 +194,7 @@ public class ServerLevel extends Level implements WorldGenLevel { @@ -19645,7 +19786,7 @@ index 7cb5abfa89f842194325d26c6e95b49460c5968f..995be2fd84ce343d7430d9658f91868e private final GameEventDispatcher gameEventDispatcher; public boolean noSave; private final SleepStatus sleepStatus; -@@ -260,50 +260,63 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -260,50 +260,65 @@ public class ServerLevel extends Level implements WorldGenLevel { return true; } @@ -19721,8 +19862,10 @@ index 7cb5abfa89f842194325d26c6e95b49460c5968f..995be2fd84ce343d7430d9658f91868e java.util.function.Consumer consumer = (net.minecraft.world.level.chunk.ChunkAccess chunk) -> { if (chunk != null) { - int ticketLevel = Math.max(33, chunkProvider.chunkMap.getUpdatingChunkIfPresent(chunk.getPos().toLong()).getTicketLevel()); ++ synchronized (ret) { // Folia - region threading - make callback thread-safe TODO rebase ret.add(chunk); - ticketLevels.add(ticketLevel); ++ } // Folia - region threading - make callback thread-safe TODO rebase chunkProvider.addTicketAtLevel(TicketType.FUTURE_AWAIT, chunk.getPos(), ticketLevel, holderIdentifier); } - if (++loadedChunks[0] == requiredChunks) { @@ -19736,7 +19879,7 @@ index 7cb5abfa89f842194325d26c6e95b49460c5968f..995be2fd84ce343d7430d9658f91868e chunkProvider.addTicketAtLevel(TicketType.UNKNOWN, chunkPos, ticketLevel, chunkPos); chunkProvider.removeTicketAtLevel(TicketType.FUTURE_AWAIT, chunkPos, ticketLevel, holderIdentifier); -@@ -315,12 +328,223 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -315,12 +330,223 @@ public class ServerLevel extends Level implements WorldGenLevel { for (int cx = minChunkX; cx <= maxChunkX; ++cx) { for (int cz = minChunkZ; cz <= maxChunkZ; ++cz) { io.papermc.paper.chunk.system.ChunkSystem.scheduleChunkLoad( @@ -19962,7 +20105,7 @@ index 7cb5abfa89f842194325d26c6e95b49460c5968f..995be2fd84ce343d7430d9658f91868e // Add env and gen to constructor, IWorldDataServer -> WorldDataServer public ServerLevel(MinecraftServer minecraftserver, Executor executor, LevelStorageSource.LevelStorageAccess convertable_conversionsession, PrimaryLevelData iworlddataserver, ResourceKey resourcekey, LevelStem worlddimension, ChunkProgressListener worldloadlistener, boolean flag, long i, List list, boolean flag1, @Nullable RandomSequences randomsequences, org.bukkit.World.Environment env, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider) { -@@ -364,16 +588,16 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -364,16 +590,16 @@ public class ServerLevel extends Level implements WorldGenLevel { // CraftBukkit end boolean flag2 = minecraftserver.forceSynchronousWrites(); DataFixer datafixer = minecraftserver.getFixerUpper(); @@ -19984,8 +20127,8 @@ index 7cb5abfa89f842194325d26c6e95b49460c5968f..995be2fd84ce343d7430d9658f91868e return minecraftserver.overworld().getDataStorage(); }); this.chunkSource.getGeneratorState().ensureStructuresGenerated(); -@@ -410,6 +634,9 @@ public class ServerLevel extends Level implements WorldGenLevel { - }, "random_sequences"); +@@ -402,6 +628,9 @@ public class ServerLevel extends Level implements WorldGenLevel { + return (RandomSequences) this.getDataStorage().computeIfAbsent(RandomSequences.factory(l), "random_sequences"); }); this.getCraftServer().addWorld(this.getWorld()); // CraftBukkit + @@ -19994,7 +20137,7 @@ index 7cb5abfa89f842194325d26c6e95b49460c5968f..995be2fd84ce343d7430d9658f91868e } /** @deprecated */ -@@ -520,7 +747,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -512,7 +741,7 @@ public class ServerLevel extends Level implements WorldGenLevel { gameprofilerfiller.push("checkDespawn"); entity.checkDespawn(); gameprofilerfiller.pop(); @@ -20003,7 +20146,7 @@ index 7cb5abfa89f842194325d26c6e95b49460c5968f..995be2fd84ce343d7430d9658f91868e Entity entity1 = entity.getVehicle(); if (entity1 != null) { -@@ -545,13 +772,16 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -537,13 +766,16 @@ public class ServerLevel extends Level implements WorldGenLevel { } gameprofilerfiller.push("entityManagement"); @@ -20022,7 +20165,7 @@ index 7cb5abfa89f842194325d26c6e95b49460c5968f..995be2fd84ce343d7430d9658f91868e } protected void tickTime() { -@@ -1012,6 +1242,11 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1010,6 +1242,11 @@ public class ServerLevel extends Level implements WorldGenLevel { } public void save(@Nullable ProgressListener progressListener, boolean flush, boolean savingDisabled) { @@ -20034,7 +20177,7 @@ index 7cb5abfa89f842194325d26c6e95b49460c5968f..995be2fd84ce343d7430d9658f91868e ServerChunkCache chunkproviderserver = this.getChunkSource(); if (!savingDisabled) { -@@ -1027,16 +1262,13 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1025,16 +1262,13 @@ public class ServerLevel extends Level implements WorldGenLevel { } timings.worldSaveChunks.startTiming(); // Paper @@ -20055,7 +20198,7 @@ index 7cb5abfa89f842194325d26c6e95b49460c5968f..995be2fd84ce343d7430d9658f91868e // CraftBukkit start - moved from MinecraftServer.saveChunks ServerLevel worldserver1 = this; -@@ -1172,7 +1404,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1170,7 +1404,7 @@ public class ServerLevel extends Level implements WorldGenLevel { this.removePlayerImmediately((ServerPlayer) entity, Entity.RemovalReason.DISCARDED); } @@ -20064,7 +20207,7 @@ index 7cb5abfa89f842194325d26c6e95b49460c5968f..995be2fd84ce343d7430d9658f91868e } // CraftBukkit start -@@ -1188,7 +1420,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1186,7 +1420,7 @@ public class ServerLevel extends Level implements WorldGenLevel { } // CraftBukkit end @@ -20073,7 +20216,7 @@ index 7cb5abfa89f842194325d26c6e95b49460c5968f..995be2fd84ce343d7430d9658f91868e } } -@@ -1200,10 +1432,10 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1198,10 +1432,10 @@ public class ServerLevel extends Level implements WorldGenLevel { public boolean tryAddFreshEntityWithPassengers(Entity entity, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason reason) { // CraftBukkit end Stream stream = entity.getSelfAndPassengers().map(Entity::getUUID); // CraftBukkit - decompile error @@ -20087,7 +20230,7 @@ index 7cb5abfa89f842194325d26c6e95b49460c5968f..995be2fd84ce343d7430d9658f91868e return false; } else { this.addFreshEntityWithPassengers(entity, reason); // CraftBukkit -@@ -1723,7 +1955,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1712,7 +1946,7 @@ public class ServerLevel extends Level implements WorldGenLevel { } } @@ -20096,7 +20239,7 @@ index 7cb5abfa89f842194325d26c6e95b49460c5968f..995be2fd84ce343d7430d9658f91868e bufferedwriter.write(String.format(Locale.ROOT, "block_entity_tickers: %d\n", this.blockEntityTickers.size())); bufferedwriter.write(String.format(Locale.ROOT, "block_ticks: %d\n", this.getBlockTicks().count())); bufferedwriter.write(String.format(Locale.ROOT, "fluid_ticks: %d\n", this.getFluidTicks().count())); -@@ -1772,7 +2004,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1761,7 +1995,7 @@ public class ServerLevel extends Level implements WorldGenLevel { BufferedWriter bufferedwriter2 = Files.newBufferedWriter(path1); try { @@ -20105,7 +20248,7 @@ index 7cb5abfa89f842194325d26c6e95b49460c5968f..995be2fd84ce343d7430d9658f91868e } catch (Throwable throwable4) { if (bufferedwriter2 != null) { try { -@@ -1793,7 +2025,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1782,7 +2016,7 @@ public class ServerLevel extends Level implements WorldGenLevel { BufferedWriter bufferedwriter3 = Files.newBufferedWriter(path2); try { @@ -20114,7 +20257,7 @@ index 7cb5abfa89f842194325d26c6e95b49460c5968f..995be2fd84ce343d7430d9658f91868e } catch (Throwable throwable6) { if (bufferedwriter3 != null) { try { -@@ -1935,7 +2167,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1924,7 +2158,7 @@ public class ServerLevel extends Level implements WorldGenLevel { @VisibleForTesting public String getWatchdogStats() { @@ -20123,7 +20266,7 @@ index 7cb5abfa89f842194325d26c6e95b49460c5968f..995be2fd84ce343d7430d9658f91868e return BuiltInRegistries.ENTITY_TYPE.getKey(entity.getType()).toString(); }), this.blockEntityTickers.size(), ServerLevel.getTypeCount(this.blockEntityTickers, TickingBlockEntity::getType), this.getBlockTicks().count(), this.getFluidTicks().count(), this.gatherChunkSourceStats()); } -@@ -1995,15 +2227,15 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1984,15 +2218,15 @@ public class ServerLevel extends Level implements WorldGenLevel { @Override public LevelEntityGetter getEntities() { org.spigotmc.AsyncCatcher.catchOp("Chunk getEntities call"); // Spigot @@ -20131,18 +20274,20 @@ index 7cb5abfa89f842194325d26c6e95b49460c5968f..995be2fd84ce343d7430d9658f91868e + return this.entityLookup; // Paper - rewrite chunk system } - public void addLegacyChunkEntities(Stream entities) { +- public void addLegacyChunkEntities(Stream entities) { - this.entityManager.addLegacyChunkEntities(entities); -+ this.entityLookup.addLegacyChunkEntities(entities.toList()); // Paper - rewrite chunk system ++ public void addLegacyChunkEntities(Stream entities, ChunkPos forChunk) { // Paper - rewrite chunk system ++ this.entityLookup.addLegacyChunkEntities(entities.toList(), forChunk); // Paper - rewrite chunk system } - public void addWorldGenChunkEntities(Stream entities) { +- public void addWorldGenChunkEntities(Stream entities) { - this.entityManager.addWorldGenChunkEntities(entities); -+ this.entityLookup.addWorldGenChunkEntities(entities.toList()); // Paper - rewrite chunk system ++ public void addWorldGenChunkEntities(Stream entities, ChunkPos forChunk) { // Paper - rewrite chunk system ++ this.entityLookup.addWorldGenChunkEntities(entities.toList(), forChunk); // Paper - rewrite chunk system } public void startTickingChunk(LevelChunk chunk) { -@@ -2019,34 +2251,49 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -2008,34 +2242,49 @@ public class ServerLevel extends Level implements WorldGenLevel { @Override public void close() throws IOException { super.close(); @@ -20200,13 +20345,14 @@ index 7cb5abfa89f842194325d26c6e95b49460c5968f..995be2fd84ce343d7430d9658f91868e @Override diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index a0856fc649c50309258f015e623502dd46aeeab4..5a18f4649b64d47f429eb6c1dbb6238aab3eacd2 100644 +index b944cda955c5660d3a9b84e9c92c2b19337a027a..32d79663a30dbbf54b0edf0460193182008f003b 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -260,6 +260,48 @@ public class ServerPlayer extends Player { +@@ -257,6 +257,50 @@ public class ServerPlayer extends Player { public boolean isRealPlayer; // Paper public final com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet cachedSingleHashSet; // Paper ++ // Paper start - replace player chunk loader + private final java.util.concurrent.atomic.AtomicReference viewDistances = new java.util.concurrent.atomic.AtomicReference<>(new io.papermc.paper.chunk.system.RegionizedPlayerChunkLoader.ViewDistances(-1, -1, -1)); + public io.papermc.paper.chunk.system.RegionizedPlayerChunkLoader.PlayerChunkLoaderData chunkLoader; + @@ -20248,12 +20394,13 @@ index a0856fc649c50309258f015e623502dd46aeeab4..5a18f4649b64d47f429eb6c1dbb6238a + return input.setSendViewDistance(distance); + }); + } ++ // Paper end - replace player chunk loader + - public ServerPlayer(MinecraftServer server, ServerLevel world, GameProfile profile) { + public ServerPlayer(MinecraftServer server, ServerLevel world, GameProfile profile, ClientInformation clientOptions) { super(world, world.getSharedSpawnPos(), world.getSharedSpawnAngle(), profile); this.chatVisibility = ChatVisiblity.FULL; diff --git a/src/main/java/net/minecraft/server/level/ThreadedLevelLightEngine.java b/src/main/java/net/minecraft/server/level/ThreadedLevelLightEngine.java -index 6716d9acc8b31f3fc3642b47fa52ce32c5195a3e..76bd323f25d7c2f4e12dd13baa53995fa4f8b27a 100644 +index 97662f8c8c125cb964d46b9095509a0da9796dba..f382d138959b34bfc3a114bc9d96e056cccbfc89 100644 --- a/src/main/java/net/minecraft/server/level/ThreadedLevelLightEngine.java +++ b/src/main/java/net/minecraft/server/level/ThreadedLevelLightEngine.java @@ -37,15 +37,12 @@ import net.minecraft.world.level.chunk.ChunkStatus; @@ -20425,7 +20572,7 @@ index 6716d9acc8b31f3fc3642b47fa52ce32c5195a3e..76bd323f25d7c2f4e12dd13baa53995f + throw new UnsupportedOperationException(); // Paper - rewrite chunk system } - static enum TaskType { + public CompletableFuture waitForPendingTasks(int x, int z) { diff --git a/src/main/java/net/minecraft/server/level/Ticket.java b/src/main/java/net/minecraft/server/level/Ticket.java index b346fa94b23d81da7da073f71dd12e672e0f079c..0edb97617f0c0da8dda901a26891b33c324715c7 100644 --- a/src/main/java/net/minecraft/server/level/Ticket.java @@ -20522,11 +20669,55 @@ index e96a0ca47e4701ba187555bd92c968345bc85677..73b96f804079288e9c5fcc11da54e61e + public void getEntitiesByClass(Class clazz, Entity except, AABB box, List into, Predicate predicate) {} + // Paper end } +diff --git a/src/main/java/net/minecraft/server/network/PlayerChunkSender.java b/src/main/java/net/minecraft/server/network/PlayerChunkSender.java +index c509a1318bcef38fd4927e38b6ee9846853e2d15..0f7ee2eea68a5c910bdf4d6263ed09cbed592516 100644 +--- a/src/main/java/net/minecraft/server/network/PlayerChunkSender.java ++++ b/src/main/java/net/minecraft/server/network/PlayerChunkSender.java +@@ -42,14 +42,21 @@ public class PlayerChunkSender { + this.pendingChunks.add(chunk.getPos().toLong()); + } + ++ // Paper start - rewrite player chunk loader ++ public static void dropChunkStatic(ServerPlayer player, ChunkPos pos) { ++ player.connection.send(new ClientboundForgetLevelChunkPacket(pos)); ++ } ++ // Paper end - rewrite player chunk loader ++ + public void dropChunk(ServerPlayer player, ChunkPos pos) { + if (!this.pendingChunks.remove(pos.toLong()) && player.isAlive()) { +- player.connection.send(new ClientboundForgetLevelChunkPacket(pos)); ++ dropChunkStatic(player, pos); // Paper - rewrite player chunk loader - move into own method + } + + } + + public void sendNextChunks(ServerPlayer player) { ++ if (true) return; // Paper - rewrite player chunk loader + if (this.unacknowledgedBatches < this.maxUnacknowledgedBatches) { + float f = Math.max(1.0F, this.desiredChunksPerTick); + this.batchQuota = Math.min(this.batchQuota + this.desiredChunksPerTick, f); +@@ -75,7 +82,7 @@ public class PlayerChunkSender { + } + } + +- private static void sendChunk(ServerGamePacketListenerImpl handler, ServerLevel world, LevelChunk chunk) { ++ public static void sendChunk(ServerGamePacketListenerImpl handler, ServerLevel world, LevelChunk chunk) { // Paper - rewrite chunk loader - public + handler.send(new ClientboundLevelChunkWithLightPacket(chunk, world.getLightEngine(), (BitSet)null, (BitSet)null)); + ChunkPos chunkPos = chunk.getPos(); + DebugPackets.sendPoiPacketsForChunk(world, chunkPos); +@@ -100,6 +107,7 @@ public class PlayerChunkSender { + } + + public void onChunkBatchReceivedByClient(float desiredBatchSize) { ++ if (true) return; // Paper - rewrite player chunk loader + --this.unacknowledgedBatches; + this.desiredChunksPerTick = Double.isNaN((double)desiredBatchSize) ? 0.01F : Mth.clamp(desiredBatchSize, 0.01F, 64.0F); + if (this.unacknowledgedBatches == 0) { diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 1fa9b13831638ea2bfd5d3073dc31018083c8b6a..2c922afde237ca0e56ee6dc067f2989434d4d08c 100644 +index e85268e4c20371d4264effb70ae9fa8e435f8766..3b11d395bd2c8ca8ec9a2ddb62b57c167a45ba2d 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -790,6 +790,13 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -695,6 +695,13 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl this.disconnect(Component.translatable("disconnect.spam")); return; } @@ -20541,30 +20732,30 @@ index 1fa9b13831638ea2bfd5d3073dc31018083c8b6a..2c922afde237ca0e56ee6dc067f29894 StringReader stringreader = new StringReader(packet.getCommand()); diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index b922654c0b0b1b0d03beb20bb1944b817907f929..b40ddd8fb3e2d2bafaa2ece46714815d0d6d5f75 100644 +index b30128b77d2fe8a8c1db9b5746aab537a9a25430..5ae47b3449df7a83a5c22a266f7b9e4ea681a492 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -262,7 +262,7 @@ public abstract class PlayerList { - boolean flag1 = gamerules.getBoolean(GameRules.RULE_REDUCEDDEBUGINFO); +@@ -251,7 +251,7 @@ public abstract class PlayerList { + boolean flag2 = gamerules.getBoolean(GameRules.RULE_LIMITED_CRAFTING); // Spigot - view distance -- playerconnection.send(new ClientboundLoginPacket(player.getId(), worlddata.isHardcore(), player.gameMode.getGameModeForPlayer(), player.gameMode.getPreviousGameModeForPlayer(), this.server.levelKeys(), this.synchronizedRegistries, worldserver1.dimensionTypeId(), worldserver1.dimension(), BiomeManager.obfuscateSeed(worldserver1.getSeed()), this.getMaxPlayers(), worldserver1.spigotConfig.viewDistance, worldserver1.spigotConfig.simulationDistance, flag1, !flag, worldserver1.isDebug(), worldserver1.isFlat(), player.getLastDeathLocation(), player.getPortalCooldown())); -+ playerconnection.send(new ClientboundLoginPacket(player.getId(), worlddata.isHardcore(), player.gameMode.getGameModeForPlayer(), player.gameMode.getPreviousGameModeForPlayer(), this.server.levelKeys(), this.synchronizedRegistries, worldserver1.dimensionTypeId(), worldserver1.dimension(), BiomeManager.obfuscateSeed(worldserver1.getSeed()), this.getMaxPlayers(), worldserver1.getWorld().getSendViewDistance(), worldserver1.getWorld().getSimulationDistance(), flag1, !flag, worldserver1.isDebug(), worldserver1.isFlat(), player.getLastDeathLocation(), player.getPortalCooldown())); // Paper - replace old player chunk management +- playerconnection.send(new ClientboundLoginPacket(player.getId(), worlddata.isHardcore(), this.server.levelKeys(), this.getMaxPlayers(), worldserver1.spigotConfig.viewDistance, worldserver1.spigotConfig.simulationDistance, flag1, !flag, flag2, player.createCommonSpawnInfo(worldserver1))); ++ playerconnection.send(new ClientboundLoginPacket(player.getId(), worlddata.isHardcore(), this.server.levelKeys(), this.getMaxPlayers(), worldserver1.getWorld().getSendViewDistance(), worldserver1.getWorld().getSimulationDistance(), flag1, !flag, flag2, player.createCommonSpawnInfo(worldserver1))); // Paper - replace old player chunk management player.getBukkitEntity().sendSupportedChannels(); // CraftBukkit - playerconnection.send(new ClientboundUpdateEnabledFeaturesPacket(FeatureFlags.REGISTRY.toNames(worldserver1.enabledFeatures()))); - playerconnection.send(new ClientboundCustomPayloadPacket(ClientboundCustomPayloadPacket.BRAND, (new FriendlyByteBuf(Unpooled.buffer())).writeUtf(this.getServer().getServerModName()))); -@@ -800,8 +800,8 @@ public abstract class PlayerList { - // CraftBukkit start - LevelData worlddata = worldserver1.getLevelData(); - entityplayer1.connection.send(new ClientboundRespawnPacket(worldserver1.dimensionTypeId(), worldserver1.dimension(), BiomeManager.obfuscateSeed(worldserver1.getSeed()), entityplayer1.gameMode.getGameModeForPlayer(), entityplayer1.gameMode.getPreviousGameModeForPlayer(), worldserver1.isDebug(), worldserver1.isFlat(), (byte) i, entityplayer1.getLastDeathLocation(), entityplayer1.getPortalCooldown())); + playerconnection.send(new ClientboundChangeDifficultyPacket(worlddata.getDifficulty(), worlddata.isDifficultyLocked())); + playerconnection.send(new ClientboundPlayerAbilitiesPacket(player.getAbilities())); +@@ -799,8 +799,8 @@ public abstract class PlayerList { + LevelData worlddata = worldserver2.getLevelData(); + + entityplayer1.connection.send(new ClientboundRespawnPacket(entityplayer1.createCommonSpawnInfo(worldserver2), (byte) i)); - entityplayer1.connection.send(new ClientboundSetChunkCacheRadiusPacket(worldserver1.spigotConfig.viewDistance)); // Spigot - entityplayer1.connection.send(new ClientboundSetSimulationDistancePacket(worldserver1.spigotConfig.simulationDistance)); // Spigot + entityplayer1.connection.send(new ClientboundSetChunkCacheRadiusPacket(worldserver1.getWorld().getSendViewDistance())); // Spigot // Paper - replace old player chunk management + entityplayer1.connection.send(new ClientboundSetSimulationDistancePacket(worldserver1.getWorld().getSimulationDistance())); // Spigot // Paper - replace old player chunk management - entityplayer1.spawnIn(worldserver1); - entityplayer1.unsetRemoved(); - entityplayer1.connection.teleport(CraftLocation.toBukkit(entityplayer1.position(), worldserver1.getWorld(), entityplayer1.getYRot(), entityplayer1.getXRot())); -@@ -1297,7 +1297,7 @@ public abstract class PlayerList { + entityplayer1.connection.teleport(CraftLocation.toBukkit(entityplayer1.position(), worldserver2.getWorld(), entityplayer1.getYRot(), entityplayer1.getXRot())); // CraftBukkit + entityplayer1.connection.send(new ClientboundSetDefaultSpawnPositionPacket(worldserver1.getSharedSpawnPos(), worldserver1.getSharedSpawnAngle())); + entityplayer1.connection.send(new ClientboundChangeDifficultyPacket(worlddata.getDifficulty(), worlddata.isDifficultyLocked())); +@@ -1291,7 +1291,7 @@ public abstract class PlayerList { public void setViewDistance(int viewDistance) { this.viewDistance = viewDistance; @@ -20573,7 +20764,7 @@ index b922654c0b0b1b0d03beb20bb1944b817907f929..b40ddd8fb3e2d2bafaa2ece46714815d Iterator iterator = this.server.getAllLevels().iterator(); while (iterator.hasNext()) { -@@ -1312,7 +1312,7 @@ public abstract class PlayerList { +@@ -1306,7 +1306,7 @@ public abstract class PlayerList { public void setSimulationDistance(int simulationDistance) { this.simulationDistance = simulationDistance; @@ -20692,7 +20883,7 @@ index 495b52bfab14478f8285cc5471335a41244c199e..e16ef1b7c0bfe6d6194c09f6787a50fd if (flag1) { ++this.converted; diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 8fdac0e7bb0b9374ebdb82673d0579fff22af5e3..48ac0559e32a1b6b26a00978cf9ef6a1c13e674b 100644 +index 8b3763ba7f5648c41c5bf8a72e5c801d5483e6e0..0e79e92014dd56fc2ba98ce6050463627a0cde9f 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -327,6 +327,58 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { @@ -20754,7 +20945,7 @@ index 8fdac0e7bb0b9374ebdb82673d0579fff22af5e3..48ac0559e32a1b6b26a00978cf9ef6a1 public Entity(EntityType type, Level world) { this.id = Entity.ENTITY_COUNTER.incrementAndGet(); this.passengers = ImmutableList.of(); -@@ -2256,11 +2308,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -2264,11 +2316,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { return InteractionResult.PASS; } @@ -20768,7 +20959,7 @@ index 8fdac0e7bb0b9374ebdb82673d0579fff22af5e3..48ac0559e32a1b6b26a00978cf9ef6a1 return false; } -@@ -3561,6 +3613,16 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -3588,6 +3640,16 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { }; } @@ -20785,7 +20976,7 @@ index 8fdac0e7bb0b9374ebdb82673d0579fff22af5e3..48ac0559e32a1b6b26a00978cf9ef6a1 public boolean hasExactlyOnePlayerPassenger() { return this.getIndirectPassengersStream().filter((entity) -> { return entity instanceof Player; -@@ -3892,6 +3954,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -3919,6 +3981,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { } public final void setPosRaw(double x, double y, double z) { @@ -20798,7 +20989,7 @@ index 8fdac0e7bb0b9374ebdb82673d0579fff22af5e3..48ac0559e32a1b6b26a00978cf9ef6a1 if (this.position.x != x || this.position.y != y || this.position.z != z) { this.position = new Vec3(x, y, z); int i = Mth.floor(x); -@@ -3999,6 +4067,13 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -4026,6 +4094,13 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { @Override public final void setRemoved(Entity.RemovalReason reason) { @@ -20812,7 +21003,7 @@ index 8fdac0e7bb0b9374ebdb82673d0579fff22af5e3..48ac0559e32a1b6b26a00978cf9ef6a1 if (this.removalReason == null) { this.removalReason = reason; } -@@ -4007,7 +4082,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -4034,7 +4109,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { this.stopRiding(); } @@ -20821,7 +21012,7 @@ index 8fdac0e7bb0b9374ebdb82673d0579fff22af5e3..48ac0559e32a1b6b26a00978cf9ef6a1 this.levelCallback.onRemove(reason); } -@@ -4022,7 +4097,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -4049,7 +4124,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { @Override public boolean shouldBeSaved() { @@ -21082,7 +21273,7 @@ index 795a02941d7cecb58ec45b5e79c8d510ff21163a..3fc17817906876e83f040f908b8b1ba6 this.setDirty = updateListener; this.isValid = valid; diff --git a/src/main/java/net/minecraft/world/level/EntityGetter.java b/src/main/java/net/minecraft/world/level/EntityGetter.java -index 127c4ebedb94631ceac92dbdcd465e904217d715..be6e3e21ad62da01e5e2dd78e300cbc8efdbeb42 100644 +index b6a3c75b84d9f768afee33aa0f226207b307c1c0..2ec2b1d9d987c7f31c685aec3d3c87f42758c94b 100644 --- a/src/main/java/net/minecraft/world/level/EntityGetter.java +++ b/src/main/java/net/minecraft/world/level/EntityGetter.java @@ -18,6 +18,18 @@ import net.minecraft.world.phys.shapes.Shapes; @@ -21362,7 +21553,7 @@ index 846ae3fd184a1d63b743aa25e045604576697c96..a907b79fd8291a0e92db138f37239d17 public int getIndex() { diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -index 09999a3f523ce6d652799215d3418284a69042c1..a0c88a15be577d552e61bfa923a6e566b1cfcc49 100644 +index bcdaa86cfd31c2ce4aadad900c348aee0a9e3fc8..a8b2ce0debe54afeb937a4f1215d6b8955037d3d 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java @@ -661,9 +661,26 @@ public class LevelChunk extends ChunkAccess { @@ -21541,7 +21732,7 @@ index 09999a3f523ce6d652799215d3418284a69042c1..a0c88a15be577d552e61bfa923a6e566 public void setFullStatus(Supplier levelTypeProvider) { diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/ChunkSerializer.java b/src/main/java/net/minecraft/world/level/chunk/storage/ChunkSerializer.java -index 24892ae367e19038625e243bcdf1bb694632ede5..a7ee469bb2880a78540b79ae691ea449dfe22ce4 100644 +index 24892ae367e19038625e243bcdf1bb694632ede5..97cdd8cd7749185230471f34f7d1ce3abcd0fd11 100644 --- a/src/main/java/net/minecraft/world/level/chunk/storage/ChunkSerializer.java +++ b/src/main/java/net/minecraft/world/level/chunk/storage/ChunkSerializer.java @@ -94,7 +94,27 @@ public class ChunkSerializer { @@ -21689,6 +21880,15 @@ index 24892ae367e19038625e243bcdf1bb694632ede5..a7ee469bb2880a78540b79ae691ea449 nbttagcompound.put("PostProcessing", ChunkSerializer.packOffsets(chunk.getPostProcessing())); CompoundTag nbttagcompound3 = new CompoundTag(); Iterator iterator1 = chunk.getHeightmaps().iterator(); +@@ -558,7 +631,7 @@ public class ChunkSerializer { + + return nbttaglist == null && nbttaglist1 == null ? null : (chunk) -> { + if (nbttaglist != null) { +- world.addLegacyChunkEntities(EntityType.loadEntitiesRecursive(nbttaglist, world)); ++ world.addLegacyChunkEntities(EntityType.loadEntitiesRecursive(nbttaglist, world), chunk.getPos()); // Paper - rewrite chunk system + } + + if (nbttaglist1 != null) { diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/ChunkStorage.java b/src/main/java/net/minecraft/world/level/chunk/storage/ChunkStorage.java index 6c0f87535ffa95cf82ab4b03bb7bf8f2132d275f..b4e7c9b317d532d4915932f8f79dfebf2b63ff16 100644 --- a/src/main/java/net/minecraft/world/level/chunk/storage/ChunkStorage.java @@ -22019,10 +22219,10 @@ index d9daf07132c46548964a75588b69d7a74680e917..e68205fe7169c7c5b7c6fdada2ee97d8 } diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java -index b9b50c56e79297bb824a92355f437a5d4d7e6760..fe8bb0037bb7f317fc32ac34461f4eb3a1f397f2 100644 +index 1988063a0cac0350ae3b3388b8f2a0c95b8b259f..2b6ba2e30c9a4682d6deb2ab750d6923ad8469e4 100644 --- a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java +++ b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java -@@ -24,30 +24,98 @@ public class RegionFileStorage implements AutoCloseable { +@@ -25,30 +25,98 @@ public class RegionFileStorage implements AutoCloseable { private final Path folder; private final boolean sync; @@ -22126,7 +22326,7 @@ index b9b50c56e79297bb824a92355f437a5d4d7e6760..fe8bb0037bb7f317fc32ac34461f4eb3 return regionfile1; } } -@@ -55,11 +123,12 @@ public class RegionFileStorage implements AutoCloseable { +@@ -56,11 +124,12 @@ public class RegionFileStorage implements AutoCloseable { @Nullable public CompoundTag read(ChunkPos pos) throws IOException { // CraftBukkit start - SPIGOT-5680: There's no good reason to preemptively create files on read, save that for writing @@ -22140,7 +22340,7 @@ index b9b50c56e79297bb824a92355f437a5d4d7e6760..fe8bb0037bb7f317fc32ac34461f4eb3 DataInputStream datainputstream = regionfile.getChunkDataInputStream(pos); CompoundTag nbttagcompound; -@@ -96,6 +165,9 @@ public class RegionFileStorage implements AutoCloseable { +@@ -97,6 +166,9 @@ public class RegionFileStorage implements AutoCloseable { } return nbttagcompound; @@ -22150,7 +22350,7 @@ index b9b50c56e79297bb824a92355f437a5d4d7e6760..fe8bb0037bb7f317fc32ac34461f4eb3 } public void scanChunk(ChunkPos chunkPos, StreamTagVisitor scanner) throws IOException { -@@ -130,7 +202,12 @@ public class RegionFileStorage implements AutoCloseable { +@@ -131,7 +203,12 @@ public class RegionFileStorage implements AutoCloseable { } protected void write(ChunkPos pos, @Nullable CompoundTag nbt) throws IOException { @@ -22164,7 +22364,7 @@ index b9b50c56e79297bb824a92355f437a5d4d7e6760..fe8bb0037bb7f317fc32ac34461f4eb3 if (nbt == null) { regionfile.clear(pos); -@@ -156,9 +233,12 @@ public class RegionFileStorage implements AutoCloseable { +@@ -157,9 +234,12 @@ public class RegionFileStorage implements AutoCloseable { } } @@ -22178,7 +22378,7 @@ index b9b50c56e79297bb824a92355f437a5d4d7e6760..fe8bb0037bb7f317fc32ac34461f4eb3 ExceptionCollector exceptionsuppressor = new ExceptionCollector<>(); ObjectIterator objectiterator = this.regionCache.values().iterator(); -@@ -175,7 +255,7 @@ public class RegionFileStorage implements AutoCloseable { +@@ -176,7 +256,7 @@ public class RegionFileStorage implements AutoCloseable { exceptionsuppressor.throwIfPresent(); } @@ -22188,7 +22388,7 @@ index b9b50c56e79297bb824a92355f437a5d4d7e6760..fe8bb0037bb7f317fc32ac34461f4eb3 while (objectiterator.hasNext()) { diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/SectionStorage.java b/src/main/java/net/minecraft/world/level/chunk/storage/SectionStorage.java -index b0c8a0e64c7a5d41c1b4cc1e39c4399c142b56af..0887cba39bfc4279abec21c6c316abab28beb0a3 100644 +index 56f0e217276b01aed2f20a71f6849826285fc15b..54db563d80bbabd87a2be6f5ead92b482ac07b10 100644 --- a/src/main/java/net/minecraft/world/level/chunk/storage/SectionStorage.java +++ b/src/main/java/net/minecraft/world/level/chunk/storage/SectionStorage.java @@ -34,27 +34,28 @@ import net.minecraft.world.level.ChunkPos; @@ -22684,10 +22884,10 @@ index bf4b2f89d3a7133155c6272379c742318b2c1514..33677ec811ceab939c419bf7d31b9958 @Override diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 42e74be803ad80b78e0db1c8cdd2dd9e45a40985..3704952279358e0a047ce1dccf2d3ef259b33ff1 100644 +index 71a0bad7402ec1ba48dcecb875fcad294af0f70e..e0b8aa7f17d98d7b686faf5422db4b4def12ee90 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1187,7 +1187,7 @@ public final class CraftServer implements Server { +@@ -1161,7 +1161,7 @@ public final class CraftServer implements Server { this.console.addLevel(internal); this.getServer().prepareLevels(internal.getChunkSource().chunkMap.progressListener, internal); @@ -22696,7 +22896,7 @@ index 42e74be803ad80b78e0db1c8cdd2dd9e45a40985..3704952279358e0a047ce1dccf2d3ef2 this.pluginManager.callEvent(new WorldLoadEvent(internal.getWorld())); return internal.getWorld(); -@@ -1231,7 +1231,7 @@ public final class CraftServer implements Server { +@@ -1205,7 +1205,7 @@ public final class CraftServer implements Server { } handle.getChunkSource().close(save); @@ -22705,7 +22905,7 @@ index 42e74be803ad80b78e0db1c8cdd2dd9e45a40985..3704952279358e0a047ce1dccf2d3ef2 handle.convertable.close(); } catch (Exception ex) { this.getLogger().log(Level.SEVERE, null, ex); -@@ -2062,7 +2062,7 @@ public final class CraftServer implements Server { +@@ -2036,7 +2036,7 @@ public final class CraftServer implements Server { @Override public boolean isPrimaryThread() { @@ -22715,7 +22915,7 @@ index 42e74be803ad80b78e0db1c8cdd2dd9e45a40985..3704952279358e0a047ce1dccf2d3ef2 // Paper start - Adventure diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index d01388bbadf3069357cf52463f4104a1be4d2b56..b3dfa35bc41191883814c78693a0d958ff3bf19b 100644 +index d01388bbadf3069357cf52463f4104a1be4d2b56..f4f94185cf699582737aecee1d3623c7857fbbb5 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java @@ -322,10 +322,14 @@ public class CraftWorld extends CraftRegionAccessor implements World { @@ -22798,7 +22998,7 @@ index d01388bbadf3069357cf52463f4104a1be4d2b56..b3dfa35bc41191883814c78693a0d958 + throw new IllegalArgumentException("View distance " + viewDistance + " is out of range of [2, 32]"); + } + net.minecraft.server.level.ChunkMap chunkMap = getHandle().getChunkSource().chunkMap; -+ chunkMap.setViewDistance(viewDistance); ++ chunkMap.setServerViewDistance(viewDistance); + } + + @Override @@ -22834,10 +23034,10 @@ index d01388bbadf3069357cf52463f4104a1be4d2b56..b3dfa35bc41191883814c78693a0d958 // Spigot start private final org.bukkit.World.Spigot spigot = new org.bukkit.World.Spigot() diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index f76db40188007b6ab475d259b4cbe0c7ef804677..49ca3592012cca981b96434c9807440672a8c165 100644 +index aa8ec0a92c8bca78088a2b30f571587823dd79bb..0c716967f19783e8e02c777835b63ed8126a80d9 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -195,6 +195,48 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -197,6 +197,48 @@ public class CraftPlayer extends CraftHumanEntity implements Player { this.firstPlayed = System.currentTimeMillis(); } diff --git a/patches/server/0018-Add-command-line-option-to-load-extra-plugin-jars-no.patch b/patches/server/0019-Add-command-line-option-to-load-extra-plugin-jars-no.patch similarity index 97% rename from patches/server/0018-Add-command-line-option-to-load-extra-plugin-jars-no.patch rename to patches/server/0019-Add-command-line-option-to-load-extra-plugin-jars-no.patch index b2c45575c1..e546480117 100644 --- a/patches/server/0018-Add-command-line-option-to-load-extra-plugin-jars-no.patch +++ b/patches/server/0019-Add-command-line-option-to-load-extra-plugin-jars-no.patch @@ -7,7 +7,7 @@ Subject: [PATCH] Add command line option to load extra plugin jars not in the ex: java -jar paperclip.jar nogui -add-plugin=/path/to/plugin.jar -add-plugin=/path/to/another/plugin_jar.jar diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 71a0bad7402ec1ba48dcecb875fcad294af0f70e..b841302b22d5be19e2ed84a0e9ae34cc4f4ce3ae 100644 +index e0b8aa7f17d98d7b686faf5422db4b4def12ee90..c3d5a05d847ee7d32cfb227b3445a92762df31d0 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -431,6 +431,35 @@ public final class CraftServer implements Server { diff --git a/patches/server/0019-Configurable-cactus-bamboo-and-reed-growth-heights.patch b/patches/server/0020-Configurable-cactus-bamboo-and-reed-growth-heights.patch similarity index 100% rename from patches/server/0019-Configurable-cactus-bamboo-and-reed-growth-heights.patch rename to patches/server/0020-Configurable-cactus-bamboo-and-reed-growth-heights.patch diff --git a/patches/server/0020-Configurable-baby-zombie-movement-speed.patch b/patches/server/0021-Configurable-baby-zombie-movement-speed.patch similarity index 100% rename from patches/server/0020-Configurable-baby-zombie-movement-speed.patch rename to patches/server/0021-Configurable-baby-zombie-movement-speed.patch diff --git a/patches/server/0021-Configurable-fishing-time-ranges.patch b/patches/server/0022-Configurable-fishing-time-ranges.patch similarity index 100% rename from patches/server/0021-Configurable-fishing-time-ranges.patch rename to patches/server/0022-Configurable-fishing-time-ranges.patch diff --git a/patches/server/0022-Allow-nerfed-mobs-to-jump-and-take-water-damage.patch b/patches/server/0023-Allow-nerfed-mobs-to-jump-and-take-water-damage.patch similarity index 100% rename from patches/server/0022-Allow-nerfed-mobs-to-jump-and-take-water-damage.patch rename to patches/server/0023-Allow-nerfed-mobs-to-jump-and-take-water-damage.patch diff --git a/patches/server/0023-Add-configurable-despawn-distances-for-living-entiti.patch b/patches/server/0024-Add-configurable-despawn-distances-for-living-entiti.patch similarity index 100% rename from patches/server/0023-Add-configurable-despawn-distances-for-living-entiti.patch rename to patches/server/0024-Add-configurable-despawn-distances-for-living-entiti.patch diff --git a/patches/server/0024-Allow-for-toggling-of-spawn-chunks.patch b/patches/server/0025-Allow-for-toggling-of-spawn-chunks.patch similarity index 91% rename from patches/server/0024-Allow-for-toggling-of-spawn-chunks.patch rename to patches/server/0025-Allow-for-toggling-of-spawn-chunks.patch index 905a52fbd1..042396c575 100644 --- a/patches/server/0024-Allow-for-toggling-of-spawn-chunks.patch +++ b/patches/server/0025-Allow-for-toggling-of-spawn-chunks.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Allow for toggling of spawn chunks diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index d87f02c748fe2e5b4ea251f6691e8907a152cb6d..f21ba175538436e59c45d5350ef7b2605ed96775 100644 +index 5988c0847af4e8f0094328e91f736f25d567db60..fb78a91d1ab77f909823422c6d4e2ef7ed10c9c3 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java @@ -261,6 +261,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { diff --git a/patches/server/0025-Drop-falling-block-and-tnt-entities-at-the-specified.patch b/patches/server/0026-Drop-falling-block-and-tnt-entities-at-the-specified.patch similarity index 100% rename from patches/server/0025-Drop-falling-block-and-tnt-entities-at-the-specified.patch rename to patches/server/0026-Drop-falling-block-and-tnt-entities-at-the-specified.patch diff --git a/patches/server/0026-Show-Paper-in-client-crashes-server-lists-and-Mojang.patch b/patches/server/0027-Show-Paper-in-client-crashes-server-lists-and-Mojang.patch similarity index 88% rename from patches/server/0026-Show-Paper-in-client-crashes-server-lists-and-Mojang.patch rename to patches/server/0027-Show-Paper-in-client-crashes-server-lists-and-Mojang.patch index 136eba3acb..bf3d04ec74 100644 --- a/patches/server/0026-Show-Paper-in-client-crashes-server-lists-and-Mojang.patch +++ b/patches/server/0027-Show-Paper-in-client-crashes-server-lists-and-Mojang.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Show 'Paper' in client crashes, server lists, and Mojang diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 0eb3a55cbf2ed2c3f5e809ee60aba3767f7aa01b..38896d1beb8adce59d62c6aeefb86ef8fb69ce40 100644 +index 151259cc254d4e796e6af810e37eaa30b832daa3..ce626187e7ffda51a54225fa6e43b817c6c19db8 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1463,7 +1463,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop targetPredicate) { double d = -1.0D; -@@ -99,6 +104,20 @@ public interface EntityGetter { +@@ -111,6 +116,20 @@ public interface EntityGetter { return this.getNearestPlayer(x, y, z, maxDistance, predicate); } @@ -137,10 +137,10 @@ index b6a3c75b84d9f768afee33aa0f226207b307c1c0..a583599e3b49d5ded871252646904a80 for(Player player : this.players()) { if (EntitySelector.NO_SPECTATORS.test(player) && EntitySelector.LIVING_ENTITY_STILL_ALIVE.test(player)) { diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index aa8ec0a92c8bca78088a2b30f571587823dd79bb..19688fa3049603f63a306e5c48c45c80b0030f69 100644 +index 0c716967f19783e8e02c777835b63ed8126a80d9..ce81d9c7e5acea4c045321e82d190aa7be87848b 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -2205,6 +2205,17 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -2247,6 +2247,17 @@ public class CraftPlayer extends CraftHumanEntity implements Player { return this.getHandle().language; } diff --git a/patches/server/0030-Further-improve-server-tick-loop.patch b/patches/server/0031-Further-improve-server-tick-loop.patch similarity index 92% rename from patches/server/0030-Further-improve-server-tick-loop.patch rename to patches/server/0031-Further-improve-server-tick-loop.patch index 7d21f2f470..eb08edc741 100644 --- a/patches/server/0030-Further-improve-server-tick-loop.patch +++ b/patches/server/0031-Further-improve-server-tick-loop.patch @@ -12,7 +12,7 @@ Previous implementation did not calculate TPS correctly. Switch to a realistic rolling average and factor in std deviation as an extra reporting variable diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 38896d1beb8adce59d62c6aeefb86ef8fb69ce40..c8f952998cfa35e043796a88acf555a34ba979c3 100644 +index ce626187e7ffda51a54225fa6e43b817c6c19db8..086be61bfc8a43076b502bbf00e9f2d2785495d3 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -277,7 +277,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 5000L && this.nextTickTime - this.lastOverloadWarning >= 30000L) { // CraftBukkit long j = i / 50L; -@@ -980,12 +1032,18 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 706af1c9ec5c115e727753bf75d1fda01accaeca..06e8a82d2001e2a8dd381f3be20ee7442e1d1178 100644 +index f496c3d95d1cc47cada8f86a99b055f44eb6cd5e..a9584072854fe3f8e946a271504fda70ebab9d2c 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -663,7 +663,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -715,7 +715,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { } public void checkBelowWorld() { diff --git a/patches/server/0035-Check-online-mode-before-converting-and-renaming-pla.patch b/patches/server/0036-Check-online-mode-before-converting-and-renaming-pla.patch similarity index 100% rename from patches/server/0035-Check-online-mode-before-converting-and-renaming-pla.patch rename to patches/server/0036-Check-online-mode-before-converting-and-renaming-pla.patch diff --git a/patches/server/0036-Always-tick-falling-blocks.patch b/patches/server/0037-Always-tick-falling-blocks.patch similarity index 90% rename from patches/server/0036-Always-tick-falling-blocks.patch rename to patches/server/0037-Always-tick-falling-blocks.patch index 694e377a2c..2e80c8ca6a 100644 --- a/patches/server/0036-Always-tick-falling-blocks.patch +++ b/patches/server/0037-Always-tick-falling-blocks.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Always tick falling blocks diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java -index ebd48f9977553174b14bdc7429c07d8352f5a297..d9149580408094784794bc0575a00bebe2e7b4d4 100644 +index 6606a118e7bff01aa51440aea7540ec9feec6cc5..1d9ce6dae17ff572d4528971c69c63d0f85b313c 100644 --- a/src/main/java/org/spigotmc/ActivationRange.java +++ b/src/main/java/org/spigotmc/ActivationRange.java @@ -89,6 +89,7 @@ public class ActivationRange diff --git a/patches/server/0037-Configurable-end-credits.patch b/patches/server/0038-Configurable-end-credits.patch similarity index 86% rename from patches/server/0037-Configurable-end-credits.patch rename to patches/server/0038-Configurable-end-credits.patch index 84af64e3f6..4b685e3509 100644 --- a/patches/server/0037-Configurable-end-credits.patch +++ b/patches/server/0038-Configurable-end-credits.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configurable end credits diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index b944cda955c5660d3a9b84e9c92c2b19337a027a..e978a91636192cd00ef8bab9b8411fda39aebbb7 100644 +index 32d79663a30dbbf54b0edf0460193182008f003b..d0cab48a8743a97c8be6bb84dd1c1a490cf5221c 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -1025,6 +1025,7 @@ public class ServerPlayer extends Player { +@@ -1069,6 +1069,7 @@ public class ServerPlayer extends Player { this.unRide(); this.serverLevel().removePlayerImmediately(this, Entity.RemovalReason.CHANGED_DIMENSION); if (!this.wonGame) { diff --git a/patches/server/0038-Fix-lag-from-explosions-processing-dead-entities.patch b/patches/server/0039-Fix-lag-from-explosions-processing-dead-entities.patch similarity index 100% rename from patches/server/0038-Fix-lag-from-explosions-processing-dead-entities.patch rename to patches/server/0039-Fix-lag-from-explosions-processing-dead-entities.patch diff --git a/patches/server/0039-Optimize-explosions.patch b/patches/server/0040-Optimize-explosions.patch similarity index 95% rename from patches/server/0039-Optimize-explosions.patch rename to patches/server/0040-Optimize-explosions.patch index 3c7e3649b7..0bb6b1001b 100644 --- a/patches/server/0039-Optimize-explosions.patch +++ b/patches/server/0040-Optimize-explosions.patch @@ -10,10 +10,10 @@ This patch adds a per-tick cache that is used for storing and retrieving an entity's exposure during an explosion. diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index c8f952998cfa35e043796a88acf555a34ba979c3..4eb9d3a3de91a7af2930f7e014256eeeafcb4ac7 100644 +index 086be61bfc8a43076b502bbf00e9f2d2785495d3..0e5661716d72ecf57d76443d8c7627e90966ee4d 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1396,6 +1396,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop Co-authored-by: SoSeDiK diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index e85268e4c20371d4264effb70ae9fa8e435f8766..98266c0349d21fc1ebf0d34a3d898825d477d6e5 100644 +index 3b11d395bd2c8ca8ec9a2ddb62b57c167a45ba2d..a3fb406ca9fda0ca6909e2e4f4f486c7de0e5ae3 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -1918,7 +1918,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1925,7 +1925,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl } OutgoingChatMessage outgoing = OutgoingChatMessage.create(original); @@ -29,7 +29,7 @@ index e85268e4c20371d4264effb70ae9fa8e435f8766..98266c0349d21fc1ebf0d34a3d898825 this.handleCommand(s); } else if (this.player.getChatVisibility() == ChatVisiblity.SYSTEM) { // Do nothing, this is coming from a plugin -@@ -2002,7 +2002,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -2009,7 +2009,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl } } @@ -40,7 +40,7 @@ index e85268e4c20371d4264effb70ae9fa8e435f8766..98266c0349d21fc1ebf0d34a3d898825 if ( org.spigotmc.SpigotConfig.logCommands ) // Spigot this.LOGGER.info(this.player.getScoreboardName() + " issued server command: " + s); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index c2289c8ef49c73d662a67eab7a2b8c0cf9bb31a9..3e3c3db4a9a4474af79d2470da2ab133eef7cf4c 100644 +index 9d70513d05515f6ff3f03b5580bd48f127d73ca1..81d2d940fef25a9fb5caccbf4e2c0c9d4ece71c9 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -889,7 +889,7 @@ public final class CraftServer implements Server { @@ -53,10 +53,10 @@ index c2289c8ef49c73d662a67eab7a2b8c0cf9bb31a9..3e3c3db4a9a4474af79d2470da2ab133 if (this.commandMap.dispatch(sender, commandLine)) { return true; diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 5ded753f030cad268f8aaeaf242985c67da2ca8d..965f40d5acb8cfe401e22c4c15efa84b36ac3ace 100644 +index b8fc211d72e860c85ca39b03574db3a7b18e369f..530fba6fa83c3e87ec2501e6aa6997c108dae6d1 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -452,7 +452,20 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -494,7 +494,20 @@ public class CraftPlayer extends CraftHumanEntity implements Player { if (this.getHandle().connection == null) return; diff --git a/patches/server/0052-All-chunks-are-slime-spawn-chunks-toggle.patch b/patches/server/0053-All-chunks-are-slime-spawn-chunks-toggle.patch similarity index 93% rename from patches/server/0052-All-chunks-are-slime-spawn-chunks-toggle.patch rename to patches/server/0053-All-chunks-are-slime-spawn-chunks-toggle.patch index c9b81f3b84..673744942c 100644 --- a/patches/server/0052-All-chunks-are-slime-spawn-chunks-toggle.patch +++ b/patches/server/0053-All-chunks-are-slime-spawn-chunks-toggle.patch @@ -18,10 +18,10 @@ index 2e343d108714bd136ab8e7b20acbf241166177de..382cdfd7d7dceeeffed1cdc34b9e475a if (random.nextInt(10) == 0 && flag && pos.getY() < 40) { return checkMobSpawnRules(type, world, spawnReason, pos, random); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftChunk.java b/src/main/java/org/bukkit/craftbukkit/CraftChunk.java -index bf4b2f89d3a7133155c6272379c742318b2c1514..f07a6b1d782426581c84ffa19447c1375c4cbc07 100644 +index 33677ec811ceab939c419bf7d31b99585e9a1ef1..8ae78690748b2cb5d5186d8859871c1630e10130 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftChunk.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftChunk.java -@@ -213,7 +213,7 @@ public class CraftChunk implements Chunk { +@@ -169,7 +169,7 @@ public class CraftChunk implements Chunk { @Override public boolean isSlimeChunk() { // 987234911L is deterimined in EntitySlime when seeing if a slime can spawn in a chunk diff --git a/patches/server/0053-Expose-server-CommandMap.patch b/patches/server/0054-Expose-server-CommandMap.patch similarity index 87% rename from patches/server/0053-Expose-server-CommandMap.patch rename to patches/server/0054-Expose-server-CommandMap.patch index 09165b75bc..ffe646ca1b 100644 --- a/patches/server/0053-Expose-server-CommandMap.patch +++ b/patches/server/0054-Expose-server-CommandMap.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Expose server CommandMap diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 3e3c3db4a9a4474af79d2470da2ab133eef7cf4c..5f87d8882cec191c6fe1cc194531ff4a24c85987 100644 +index 81d2d940fef25a9fb5caccbf4e2c0c9d4ece71c9..bfcb1e2959e33e4e0cce78e0756cd13253662790 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -2018,6 +2018,7 @@ public final class CraftServer implements Server { diff --git a/patches/server/0054-Be-a-bit-more-informative-in-maxHealth-exception.patch b/patches/server/0055-Be-a-bit-more-informative-in-maxHealth-exception.patch similarity index 100% rename from patches/server/0054-Be-a-bit-more-informative-in-maxHealth-exception.patch rename to patches/server/0055-Be-a-bit-more-informative-in-maxHealth-exception.patch diff --git a/patches/server/0055-Player-Tab-List-and-Title-APIs.patch b/patches/server/0056-Player-Tab-List-and-Title-APIs.patch similarity index 98% rename from patches/server/0055-Player-Tab-List-and-Title-APIs.patch rename to patches/server/0056-Player-Tab-List-and-Title-APIs.patch index 3a003cd429..6db44193b4 100644 --- a/patches/server/0055-Player-Tab-List-and-Title-APIs.patch +++ b/patches/server/0056-Player-Tab-List-and-Title-APIs.patch @@ -63,7 +63,7 @@ index bd808eb312ade7122973a47f4b96505829511da5..bf0f9cab7c66c089f35b851e799ba4a4 // Paper end buf.writeComponent(this.text); diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 965f40d5acb8cfe401e22c4c15efa84b36ac3ace..93b38758645a52f2da7d8e2baba576dc0284a132 100644 +index 530fba6fa83c3e87ec2501e6aa6997c108dae6d1..9c66e4b6f36f634a7fe25b630b9f2e65a7b50153 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -1,5 +1,6 @@ @@ -73,7 +73,7 @@ index 965f40d5acb8cfe401e22c4c15efa84b36ac3ace..93b38758645a52f2da7d8e2baba576dc import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableSet; import com.google.common.io.BaseEncoding; -@@ -294,6 +295,100 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -336,6 +337,100 @@ public class CraftPlayer extends CraftHumanEntity implements Player { } } diff --git a/patches/server/0056-Add-configurable-portal-search-radius.patch b/patches/server/0057-Add-configurable-portal-search-radius.patch similarity index 94% rename from patches/server/0056-Add-configurable-portal-search-radius.patch rename to patches/server/0057-Add-configurable-portal-search-radius.patch index 0c14267615..d93ecc093d 100644 --- a/patches/server/0056-Add-configurable-portal-search-radius.patch +++ b/patches/server/0057-Add-configurable-portal-search-radius.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add configurable portal search radius diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 06e8a82d2001e2a8dd381f3be20ee7442e1d1178..3f627611fe372ab87701fb01e16486b434f77585 100644 +index a9584072854fe3f8e946a271504fda70ebab9d2c..1b301b9b577b632470a1e6d23f34288875c5ffb8 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -3148,7 +3148,13 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -3200,7 +3200,13 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { double d0 = DimensionType.getTeleportationScale(this.level().dimensionType(), destination.dimensionType()); BlockPos blockposition = worldborder.clampToBounds(this.getX() * d0, this.getY(), this.getZ() * d0); // CraftBukkit start diff --git a/patches/server/0057-Add-velocity-warnings.patch b/patches/server/0058-Add-velocity-warnings.patch similarity index 91% rename from patches/server/0057-Add-velocity-warnings.patch rename to patches/server/0058-Add-velocity-warnings.patch index b2e63affe1..1eb5e79e8d 100644 --- a/patches/server/0057-Add-velocity-warnings.patch +++ b/patches/server/0058-Add-velocity-warnings.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add velocity warnings diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 5f87d8882cec191c6fe1cc194531ff4a24c85987..4390e4ded8a88a0dcd57d161f74a276852de4800 100644 +index bfcb1e2959e33e4e0cce78e0756cd13253662790..7ae7ad27e8e6731a81a4bcb3e4dd0ed20d0373de 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -302,6 +302,7 @@ public final class CraftServer implements Server { @@ -62,10 +62,10 @@ index 9b4e28353892240debc2d2d48876c5640d479ae9..5767eefb09d9e0e3a3d5a006242220b8 public double getHeight() { return this.getHandle().getBbHeight(); diff --git a/src/main/java/org/spigotmc/WatchdogThread.java b/src/main/java/org/spigotmc/WatchdogThread.java -index d5863b0b06384b25eaa33572fa02649795463ed8..2693cc933d746e40d8a47d96c6cb6799f0a2472f 100644 +index 11d7ede26b46d0bf9cced65e8c3bcc41c8b66dbf..3ad14bf0697e682a2e777baa8faeb323d127fb13 100644 --- a/src/main/java/org/spigotmc/WatchdogThread.java +++ b/src/main/java/org/spigotmc/WatchdogThread.java -@@ -80,7 +80,19 @@ public class WatchdogThread extends Thread +@@ -80,7 +80,19 @@ public final class WatchdogThread extends io.papermc.paper.util.TickThread // Pa log.log( Level.SEVERE, "During the run of the server, a physics stackoverflow was supressed" ); log.log( Level.SEVERE, "near " + net.minecraft.world.level.Level.lastPhysicsProblem ); } @@ -85,4 +85,4 @@ index d5863b0b06384b25eaa33572fa02649795463ed8..2693cc933d746e40d8a47d96c6cb6799 + // Paper end log.log( Level.SEVERE, "------------------------------" ); log.log( Level.SEVERE, "Server thread dump (Look for plugins here before reporting to Paper!):" ); // Paper - WatchdogThread.dumpThread( ManagementFactory.getThreadMXBean().getThreadInfo( MinecraftServer.getServer().serverThread.getId(), Integer.MAX_VALUE ), log ); + io.papermc.paper.chunk.system.scheduling.ChunkTaskScheduler.dumpAllChunkLoadInfo(isLongTimeout); // Paper // Paper - rewrite chunk system diff --git a/patches/server/0058-Configurable-inter-world-teleportation-safety.patch b/patches/server/0059-Configurable-inter-world-teleportation-safety.patch similarity index 91% rename from patches/server/0058-Configurable-inter-world-teleportation-safety.patch rename to patches/server/0059-Configurable-inter-world-teleportation-safety.patch index a141e85e9f..d6403829a6 100644 --- a/patches/server/0058-Configurable-inter-world-teleportation-safety.patch +++ b/patches/server/0059-Configurable-inter-world-teleportation-safety.patch @@ -16,10 +16,10 @@ The wanted destination was on top of the emerald block however the player ended This only is the case if the player is teleporting between worlds. diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 93b38758645a52f2da7d8e2baba576dc0284a132..c30d2987f4afce8737c5c67b193d9ee3b6e230be 100644 +index 9c66e4b6f36f634a7fe25b630b9f2e65a7b50153..26ca5b2c4216f95c1f7a74245c271bdddd111c4d 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -1120,7 +1120,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -1162,7 +1162,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { entity.connection.teleport(to); } else { // The respawn reason should never be used if the passed location is non null. diff --git a/patches/server/0059-Add-exception-reporting-event.patch b/patches/server/0060-Add-exception-reporting-event.patch similarity index 95% rename from patches/server/0059-Add-exception-reporting-event.patch rename to patches/server/0060-Add-exception-reporting-event.patch index 68114b68e1..0e8fa03642 100644 --- a/patches/server/0059-Add-exception-reporting-event.patch +++ b/patches/server/0060-Add-exception-reporting-event.patch @@ -88,7 +88,7 @@ index c6fb4c33d7ea52b88d8fc0d90748cbab7387c565..fed09b886f4fa0006d160e5f2abb00df } diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 42e81640354c2679570823347b28ee1155e7a00e..a7fb12648c2e655e191d8c805753ae0c05421d17 100644 +index 78041052d7ab2e6b60405ce7e02468458650db22..8149286827d9b609be47a4ded0413ca11f7858de 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java @@ -1,5 +1,10 @@ @@ -102,7 +102,7 @@ index 42e81640354c2679570823347b28ee1155e7a00e..a7fb12648c2e655e191d8c805753ae0c import com.google.common.collect.Lists; import com.mojang.serialization.Codec; import java.io.IOException; -@@ -725,6 +730,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -730,6 +735,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { // Paper start - Prevent tile entity and entity crashes final String msg = String.format("Entity threw exception at %s:%s,%s,%s", entity.level().getWorld().getName(), entity.getX(), entity.getY(), entity.getZ()); MinecraftServer.LOGGER.error(msg, throwable); @@ -131,7 +131,7 @@ index 5d65baba605dd83e5f74d526aeda36d8ede8c014..92e76dd39dc3575e9466031dd799080a } diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -index 28ae0792c6b83580369937673f475f79b1c19576..0b246935d0ad3f8a78e86f0e60f53a05efda8355 100644 +index 515aedcf9969b818dfdc02a16a7f7178b5bb5593..56900156d79781f15357a3d25906d32b615366ce 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java @@ -1,6 +1,7 @@ @@ -163,7 +163,7 @@ index 28ae0792c6b83580369937673f475f79b1c19576..0b246935d0ad3f8a78e86f0e60f53a05 // CraftBukkit end } } -@@ -1060,6 +1067,7 @@ public class LevelChunk extends ChunkAccess { +@@ -1149,6 +1156,7 @@ public class LevelChunk extends ChunkAccess { // Paper start - Prevent tile entity and entity crashes final String msg = String.format("BlockEntity threw exception at %s:%s,%s,%s", LevelChunk.this.getLevel().getWorld().getName(), this.getPos().getX(), this.getPos().getY(), this.getPos().getZ()); net.minecraft.server.MinecraftServer.LOGGER.error(msg, throwable); @@ -172,10 +172,10 @@ index 28ae0792c6b83580369937673f475f79b1c19576..0b246935d0ad3f8a78e86f0e60f53a05 // Paper end // Spigot start diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFile.java b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFile.java -index d9daf07132c46548964a75588b69d7a74680e917..67a2f3c02aa4983b3ec2df073821190ddb36543c 100644 +index e68205fe7169c7c5b7c6fdada2ee97d86107ca97..aa8972fd1a1fade05d60ab69efb8ff24f344508a 100644 --- a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFile.java +++ b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFile.java -@@ -274,6 +274,7 @@ public class RegionFile implements AutoCloseable { +@@ -275,6 +275,7 @@ public class RegionFile implements AutoCloseable { return true; } } catch (IOException ioexception) { @@ -183,7 +183,7 @@ index d9daf07132c46548964a75588b69d7a74680e917..67a2f3c02aa4983b3ec2df073821190d return false; } } -@@ -355,6 +356,7 @@ public class RegionFile implements AutoCloseable { +@@ -356,6 +357,7 @@ public class RegionFile implements AutoCloseable { ((java.nio.Buffer) buf).position(5); // CraftBukkit - decompile error filechannel.write(buf); } catch (Throwable throwable) { diff --git a/patches/server/0060-Don-t-nest-if-we-don-t-need-to-when-cerealising-text.patch b/patches/server/0061-Don-t-nest-if-we-don-t-need-to-when-cerealising-text.patch similarity index 100% rename from patches/server/0060-Don-t-nest-if-we-don-t-need-to-when-cerealising-text.patch rename to patches/server/0061-Don-t-nest-if-we-don-t-need-to-when-cerealising-text.patch diff --git a/patches/server/0061-Disable-Scoreboards-for-non-players-by-default.patch b/patches/server/0062-Disable-Scoreboards-for-non-players-by-default.patch similarity index 92% rename from patches/server/0061-Disable-Scoreboards-for-non-players-by-default.patch rename to patches/server/0062-Disable-Scoreboards-for-non-players-by-default.patch index 5834906cde..1df1030bc9 100644 --- a/patches/server/0061-Disable-Scoreboards-for-non-players-by-default.patch +++ b/patches/server/0062-Disable-Scoreboards-for-non-players-by-default.patch @@ -11,10 +11,10 @@ So avoid looking up scoreboards and short circuit to the "not on a team" logic which is most likely to be true. diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 3f627611fe372ab87701fb01e16486b434f77585..9c17aef67d011f485129aee781aae3bd18eb6c1c 100644 +index 1b301b9b577b632470a1e6d23f34288875c5ffb8..a8608e7b3dae15a54185d720c01a49d3a7e59994 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -2779,6 +2779,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -2831,6 +2831,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { @Nullable public Team getTeam() { diff --git a/patches/server/0062-Add-methods-for-working-with-arrows-stuck-in-living-.patch b/patches/server/0063-Add-methods-for-working-with-arrows-stuck-in-living-.patch similarity index 100% rename from patches/server/0062-Add-methods-for-working-with-arrows-stuck-in-living-.patch rename to patches/server/0063-Add-methods-for-working-with-arrows-stuck-in-living-.patch diff --git a/patches/server/0063-Chunk-Save-Reattempt.patch b/patches/server/0064-Chunk-Save-Reattempt.patch similarity index 77% rename from patches/server/0063-Chunk-Save-Reattempt.patch rename to patches/server/0064-Chunk-Save-Reattempt.patch index cae796dce7..d82deaae7c 100644 --- a/patches/server/0063-Chunk-Save-Reattempt.patch +++ b/patches/server/0064-Chunk-Save-Reattempt.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Chunk Save Reattempt We commonly have "Stream Closed" errors on chunk saving, so this code should re-try to save the chunk in the event of failure and hopefully prevent rollbacks. diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFile.java b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFile.java -index 67a2f3c02aa4983b3ec2df073821190ddb36543c..9e65b56fd2d5af6be305efa08e7c569e6598343a 100644 +index aa8972fd1a1fade05d60ab69efb8ff24f344508a..ddcc212ba83d9365adb842b3d3ced64e3d7dd155 100644 --- a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFile.java +++ b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFile.java -@@ -274,7 +274,7 @@ public class RegionFile implements AutoCloseable { +@@ -275,7 +275,7 @@ public class RegionFile implements AutoCloseable { return true; } } catch (IOException ioexception) { @@ -19,18 +19,18 @@ index 67a2f3c02aa4983b3ec2df073821190ddb36543c..9e65b56fd2d5af6be305efa08e7c569e } } diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java -index 1988063a0cac0350ae3b3388b8f2a0c95b8b259f..ab3145064f0ea3d71e85f3f02cf73d13f548a425 100644 +index 2b6ba2e30c9a4682d6deb2ab750d6923ad8469e4..2d00333f25828ef5912c925d1213a56c564d85c9 100644 --- a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java +++ b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java -@@ -132,6 +132,7 @@ public class RegionFileStorage implements AutoCloseable { - - protected void write(ChunkPos pos, @Nullable CompoundTag nbt) throws IOException { - RegionFile regionfile = this.getRegionFile(pos, false); // CraftBukkit +@@ -209,6 +209,7 @@ public class RegionFileStorage implements AutoCloseable { + } + // Paper end - rewrite chunk system + try { // Paper + int attempts = 0; Exception laste = null; while (attempts++ < 5) { try { // Paper if (nbt == null) { regionfile.clear(pos); -@@ -156,7 +157,18 @@ public class RegionFileStorage implements AutoCloseable { +@@ -233,7 +234,18 @@ public class RegionFileStorage implements AutoCloseable { dataoutputstream.close(); } } @@ -46,6 +46,6 @@ index 1988063a0cac0350ae3b3388b8f2a0c95b8b259f..ab3145064f0ea3d71e85f3f02cf73d13 + net.minecraft.server.MinecraftServer.LOGGER.error("Failed to save chunk " + pos, laste); + } + // Paper end - } - - public void close() throws IOException { + } finally { // Paper start + regionfile.fileLock.unlock(); + } // Paper end diff --git a/patches/server/0064-Complete-resource-pack-API.patch b/patches/server/0065-Complete-resource-pack-API.patch similarity index 96% rename from patches/server/0064-Complete-resource-pack-API.patch rename to patches/server/0065-Complete-resource-pack-API.patch index 696eb450f8..31ea6c68d9 100644 --- a/patches/server/0064-Complete-resource-pack-API.patch +++ b/patches/server/0065-Complete-resource-pack-API.patch @@ -22,7 +22,7 @@ index b9062fe651de34d5b3f9d5f146ae0b4fe29cbfee..e8b12a8ae009023afa2818ecbf398a14 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index c30d2987f4afce8737c5c67b193d9ee3b6e230be..de5d17be3d7dcd9ae1f10918c3d6a3caffe7ef23 100644 +index 26ca5b2c4216f95c1f7a74245c271bdddd111c4d..4a784d3c8454549ddeaba18d36a7182059401c91 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -191,6 +191,10 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @@ -36,7 +36,7 @@ index c30d2987f4afce8737c5c67b193d9ee3b6e230be..de5d17be3d7dcd9ae1f10918c3d6a3ca public CraftPlayer(CraftServer server, ServerPlayer entity) { super(server, entity); -@@ -2326,6 +2330,45 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -2368,6 +2372,45 @@ public class CraftPlayer extends CraftHumanEntity implements Player { public boolean getAffectsSpawning() { return this.getHandle().affectsSpawning; } diff --git a/patches/server/0065-Default-loading-permissions.yml-before-plugins.patch b/patches/server/0066-Default-loading-permissions.yml-before-plugins.patch similarity index 95% rename from patches/server/0065-Default-loading-permissions.yml-before-plugins.patch rename to patches/server/0066-Default-loading-permissions.yml-before-plugins.patch index 66ad35180b..9cd9a40b36 100644 --- a/patches/server/0065-Default-loading-permissions.yml-before-plugins.patch +++ b/patches/server/0066-Default-loading-permissions.yml-before-plugins.patch @@ -16,7 +16,7 @@ modify that. Under the previous logic, plugins were unable (cleanly) override pe A config option has been added for those who depend on the previous behavior, but I don't expect that. diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 4390e4ded8a88a0dcd57d161f74a276852de4800..068cde0c7061b4969e095a4a93cd8a1662079211 100644 +index 7ae7ad27e8e6731a81a4bcb3e4dd0ed20d0373de..311226bce4d6103ae9e8c6e4b49ccb90afcfb64d 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -465,6 +465,7 @@ public final class CraftServer implements Server { diff --git a/patches/server/0066-Allow-Reloading-of-Custom-Permissions.patch b/patches/server/0067-Allow-Reloading-of-Custom-Permissions.patch similarity index 94% rename from patches/server/0066-Allow-Reloading-of-Custom-Permissions.patch rename to patches/server/0067-Allow-Reloading-of-Custom-Permissions.patch index d282533aa3..f3a5dc7766 100644 --- a/patches/server/0066-Allow-Reloading-of-Custom-Permissions.patch +++ b/patches/server/0067-Allow-Reloading-of-Custom-Permissions.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Allow Reloading of Custom Permissions https://github.com/PaperMC/Paper/issues/49 diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 068cde0c7061b4969e095a4a93cd8a1662079211..d0dea86da026827163e36b9fc970bd9ab630b0b8 100644 +index 311226bce4d6103ae9e8c6e4b49ccb90afcfb64d..f101155cf3ae72c0c810714cc4ad319d1116b4e0 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -2622,5 +2622,23 @@ public final class CraftServer implements Server { diff --git a/patches/server/0067-Remove-Metadata-on-reload.patch b/patches/server/0068-Remove-Metadata-on-reload.patch similarity index 93% rename from patches/server/0067-Remove-Metadata-on-reload.patch rename to patches/server/0068-Remove-Metadata-on-reload.patch index 4bae83c9fb..ddc5f1b1d3 100644 --- a/patches/server/0067-Remove-Metadata-on-reload.patch +++ b/patches/server/0068-Remove-Metadata-on-reload.patch @@ -7,7 +7,7 @@ Metadata is not meant to persist reload as things break badly with non primitive This will remove metadata on reload so it does not crash everything if a plugin uses it. diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index d0dea86da026827163e36b9fc970bd9ab630b0b8..6797239634ba90768e55fcfb37cb2c14141b7d28 100644 +index f101155cf3ae72c0c810714cc4ad319d1116b4e0..0476ae7a485c2ac74b39965f0727fbfd372c3be2 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -956,8 +956,16 @@ public final class CraftServer implements Server { diff --git a/patches/server/0068-Handle-Item-Meta-Inconsistencies.patch b/patches/server/0069-Handle-Item-Meta-Inconsistencies.patch similarity index 100% rename from patches/server/0068-Handle-Item-Meta-Inconsistencies.patch rename to patches/server/0069-Handle-Item-Meta-Inconsistencies.patch diff --git a/patches/server/0069-Configurable-Non-Player-Arrow-Despawn-Rate.patch b/patches/server/0070-Configurable-Non-Player-Arrow-Despawn-Rate.patch similarity index 100% rename from patches/server/0069-Configurable-Non-Player-Arrow-Despawn-Rate.patch rename to patches/server/0070-Configurable-Non-Player-Arrow-Despawn-Rate.patch diff --git a/patches/server/0070-Add-World-Util-Methods.patch b/patches/server/0071-Add-World-Util-Methods.patch similarity index 92% rename from patches/server/0070-Add-World-Util-Methods.patch rename to patches/server/0071-Add-World-Util-Methods.patch index 8d92d3ac71..624da03d47 100644 --- a/patches/server/0070-Add-World-Util-Methods.patch +++ b/patches/server/0071-Add-World-Util-Methods.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Add World Util Methods Methods that can be used for other patches to help improve logic. diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 511f27358cad1fa067497914c61855ee6ea3846a..c5974d23eb2c0f0a71a5c438f387762516f7a1d9 100644 +index 35c401b41750748738c8f8aa2b8988377f4e679f..b9d93d802e981139b79ecba91968f56f842acc48 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -221,7 +221,7 @@ public class ServerLevel extends Level implements WorldGenLevel { @@ -19,7 +19,7 @@ index 511f27358cad1fa067497914c61855ee6ea3846a..c5974d23eb2c0f0a71a5c438f3877625 } diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index a7fb12648c2e655e191d8c805753ae0c05421d17..5e4b102e747a053280871879c3c18fc3d3d2d18a 100644 +index 8149286827d9b609be47a4ded0413ca11f7858de..809f7db469583ea90fbb165cf180dc87055c6105 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java @@ -342,6 +342,22 @@ public abstract class Level implements LevelAccessor, AutoCloseable { diff --git a/patches/server/0071-Custom-replacement-for-eaten-items.patch b/patches/server/0072-Custom-replacement-for-eaten-items.patch similarity index 100% rename from patches/server/0071-Custom-replacement-for-eaten-items.patch rename to patches/server/0072-Custom-replacement-for-eaten-items.patch diff --git a/patches/server/0072-Strip-raytracing-for-EntityLiving-hasLineOfSight.patch b/patches/server/0073-Strip-raytracing-for-EntityLiving-hasLineOfSight.patch similarity index 98% rename from patches/server/0072-Strip-raytracing-for-EntityLiving-hasLineOfSight.patch rename to patches/server/0073-Strip-raytracing-for-EntityLiving-hasLineOfSight.patch index 7a6e79726e..6d81cc3915 100644 --- a/patches/server/0072-Strip-raytracing-for-EntityLiving-hasLineOfSight.patch +++ b/patches/server/0073-Strip-raytracing-for-EntityLiving-hasLineOfSight.patch @@ -63,7 +63,7 @@ index d6d8bbc98fc71997cb52521d59ebb59d727d3c22..3b31a1927aaed7fffc1b4f4bcefc1212 default BlockHitResult clip(ClipContext raytrace1, BlockPos blockposition) { BlockState iblockdata = this.getBlockState(blockposition); diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 5e4b102e747a053280871879c3c18fc3d3d2d18a..a64b4eb9bc6437cc143ed6816060b223ce6542e6 100644 +index 809f7db469583ea90fbb165cf180dc87055c6105..37d5abf5a18b90695d1cea9e365c764e93b918bf 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java @@ -283,6 +283,90 @@ public abstract class Level implements LevelAccessor, AutoCloseable { diff --git a/patches/server/0073-handle-NaN-health-absorb-values-and-repair-bad-data.patch b/patches/server/0074-handle-NaN-health-absorb-values-and-repair-bad-data.patch similarity index 94% rename from patches/server/0073-handle-NaN-health-absorb-values-and-repair-bad-data.patch rename to patches/server/0074-handle-NaN-health-absorb-values-and-repair-bad-data.patch index 33db07fbca..dd675859bd 100644 --- a/patches/server/0073-handle-NaN-health-absorb-values-and-repair-bad-data.patch +++ b/patches/server/0074-handle-NaN-health-absorb-values-and-repair-bad-data.patch @@ -44,10 +44,10 @@ index c5d4f36dda7c977b3a7563f4d2d74ebcf7dc61ef..fa03c3a9debe419dd4e60764de4d9544 protected void internalSetAbsorptionAmount(float absorptionAmount) { diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index de5d17be3d7dcd9ae1f10918c3d6a3caffe7ef23..dc436397256cecfb51ed82b0cc654307a8d2e0f6 100644 +index 4a784d3c8454549ddeaba18d36a7182059401c91..bedeae40c7a88b7c13babb9ef8c94983a2ac4fef 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -2123,6 +2123,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -2165,6 +2165,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { } public void setRealHealth(double health) { diff --git a/patches/server/0074-Use-a-Shared-Random-for-Entities.patch b/patches/server/0075-Use-a-Shared-Random-for-Entities.patch similarity index 96% rename from patches/server/0074-Use-a-Shared-Random-for-Entities.patch rename to patches/server/0075-Use-a-Shared-Random-for-Entities.patch index d53f5a439c..2658f7646d 100644 --- a/patches/server/0074-Use-a-Shared-Random-for-Entities.patch +++ b/patches/server/0075-Use-a-Shared-Random-for-Entities.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Use a Shared Random for Entities Reduces memory usage and provides ensures more randomness, Especially since a lot of garbage entity objects get created. diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 9c17aef67d011f485129aee781aae3bd18eb6c1c..6dc250da442ae15a69c40e10af7ea71d9aaf0055 100644 +index a8608e7b3dae15a54185d720c01a49d3a7e59994..fc39c3742e852bc9f4131b1ade62c32b318bdb02 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -162,6 +162,79 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { @@ -89,7 +89,7 @@ index 9c17aef67d011f485129aee781aae3bd18eb6c1c..6dc250da442ae15a69c40e10af7ea71d private CraftEntity bukkitEntity; public CraftEntity getBukkitEntity() { -@@ -354,7 +427,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -406,7 +479,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { this.bb = Entity.INITIAL_AABB; this.stuckSpeedMultiplier = Vec3.ZERO; this.nextStep = 1.0F; diff --git a/patches/server/0075-Configurable-spawn-chances-for-skeleton-horses.patch b/patches/server/0076-Configurable-spawn-chances-for-skeleton-horses.patch similarity index 89% rename from patches/server/0075-Configurable-spawn-chances-for-skeleton-horses.patch rename to patches/server/0076-Configurable-spawn-chances-for-skeleton-horses.patch index 5210f274c0..af6fe09b5c 100644 --- a/patches/server/0075-Configurable-spawn-chances-for-skeleton-horses.patch +++ b/patches/server/0076-Configurable-spawn-chances-for-skeleton-horses.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configurable spawn chances for skeleton horses diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index c5974d23eb2c0f0a71a5c438f387762516f7a1d9..3310ad37178c6397e00291186a518bffce876570 100644 +index b9d93d802e981139b79ecba91968f56f842acc48..d419ff842d1df822e14994e4f1d5b91352579cf1 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -598,7 +598,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -830,7 +830,7 @@ public class ServerLevel extends Level implements WorldGenLevel { if (this.isRainingAt(blockposition)) { DifficultyInstance difficultydamagescaler = this.getCurrentDifficultyAt(blockposition); diff --git a/patches/server/0076-Optimize-isInWorldBounds-and-getBlockState-for-inlin.patch b/patches/server/0077-Optimize-isInWorldBounds-and-getBlockState-for-inlin.patch similarity index 97% rename from patches/server/0076-Optimize-isInWorldBounds-and-getBlockState-for-inlin.patch rename to patches/server/0077-Optimize-isInWorldBounds-and-getBlockState-for-inlin.patch index 0a545c8f02..a4c9a41195 100644 --- a/patches/server/0076-Optimize-isInWorldBounds-and-getBlockState-for-inlin.patch +++ b/patches/server/0077-Optimize-isInWorldBounds-and-getBlockState-for-inlin.patch @@ -29,7 +29,7 @@ index 1b29c6872ebe54351f28c1f1f38b22561ba785ee..40950db0c242c65dfd4de247c8624935 this.x = x; this.y = y; diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index a64b4eb9bc6437cc143ed6816060b223ce6542e6..f96154f86a260ecd8dbd485a1c72703bc5949de2 100644 +index 37d5abf5a18b90695d1cea9e365c764e93b918bf..5502d037279ba876f5e4c6728cc678f128bce9d4 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java @@ -368,7 +368,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { @@ -88,7 +88,7 @@ index 60e760b42dd6471a229dfd45490dcf8c51979d35..4a3ac7dedf5cb1e76f16ec4f18e82afc @Override public FluidState getFluidState(BlockPos pos) { diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -index 0b246935d0ad3f8a78e86f0e60f53a05efda8355..d84b4051ee5177e9916199ec11445fc6c9a18936 100644 +index 56900156d79781f15357a3d25906d32b615366ce..0eedaf7df86b7bdd22623231f9a49da8e798f204 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java @@ -295,12 +295,29 @@ public class LevelChunk extends ChunkAccess { diff --git a/patches/server/0077-Only-process-BlockPhysicsEvent-if-a-plugin-has-a-lis.patch b/patches/server/0078-Only-process-BlockPhysicsEvent-if-a-plugin-has-a-lis.patch similarity index 91% rename from patches/server/0077-Only-process-BlockPhysicsEvent-if-a-plugin-has-a-lis.patch rename to patches/server/0078-Only-process-BlockPhysicsEvent-if-a-plugin-has-a-lis.patch index 1ae76f59e7..9b81d2ddcd 100644 --- a/patches/server/0077-Only-process-BlockPhysicsEvent-if-a-plugin-has-a-lis.patch +++ b/patches/server/0078-Only-process-BlockPhysicsEvent-if-a-plugin-has-a-lis.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Only process BlockPhysicsEvent if a plugin has a listener Saves on some object allocation and processing when no plugin listens to this diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 4eb9d3a3de91a7af2930f7e014256eeeafcb4ac7..19cb043e5c501b664d101b11717b759be9dd4cfd 100644 +index 0e5661716d72ecf57d76443d8c7627e90966ee4d..281884fedf6607581a24fef4b3326dfb81012124 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1357,6 +1357,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { return worldserver + " " + worldserver.dimension().location(); diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 3310ad37178c6397e00291186a518bffce876570..db86df427b604e4a0959181eb2ee161bdda6bfad 100644 +index d419ff842d1df822e14994e4f1d5b91352579cf1..9ee06d9b6eceb5df90275177ea855272fc61b016 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -220,6 +220,7 @@ public class ServerLevel extends Level implements WorldGenLevel { @@ -30,10 +30,10 @@ index 3310ad37178c6397e00291186a518bffce876570..db86df427b604e4a0959181eb2ee161b @Override public LevelChunk getChunkIfLoaded(int x, int z) { // Paper - this was added in world too but keeping here for NMS ABI return this.chunkSource.getChunk(x, z, false); diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index f96154f86a260ecd8dbd485a1c72703bc5949de2..c771ec0e5ebd4a45130b3481fa9d3ba00b95f2ae 100644 +index 5502d037279ba876f5e4c6728cc678f128bce9d4..ba7760b0b478c6f24dcbaa64919a4766e107a720 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -575,7 +575,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -580,7 +580,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { // CraftBukkit start iblockdata1.updateIndirectNeighbourShapes(this, blockposition, k, j - 1); // Don't call an event for the old block to limit event spam CraftWorld world = ((ServerLevel) this).getWorld(); diff --git a/patches/server/0078-Entity-AddTo-RemoveFrom-World-Events.patch b/patches/server/0079-Entity-AddTo-RemoveFrom-World-Events.patch similarity index 83% rename from patches/server/0078-Entity-AddTo-RemoveFrom-World-Events.patch rename to patches/server/0079-Entity-AddTo-RemoveFrom-World-Events.patch index 96eebd1121..cc876dd9b6 100644 --- a/patches/server/0078-Entity-AddTo-RemoveFrom-World-Events.patch +++ b/patches/server/0079-Entity-AddTo-RemoveFrom-World-Events.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Entity AddTo/RemoveFrom World Events diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index db86df427b604e4a0959181eb2ee161bdda6bfad..71e448a44b1d85bba4481fd02612d687aa9df4a1 100644 +index 9ee06d9b6eceb5df90275177ea855272fc61b016..949404f3ac0e853cfc45e28453136dd166ac9563 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -2117,6 +2117,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -2366,6 +2366,7 @@ public class ServerLevel extends Level implements WorldGenLevel { entity.setOrigin(entity.getOriginVector().toLocation(getWorld())); } // Paper end @@ -16,7 +16,7 @@ index db86df427b604e4a0959181eb2ee161bdda6bfad..71e448a44b1d85bba4481fd02612d687 } public void onTrackingEnd(Entity entity) { -@@ -2192,6 +2193,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -2441,6 +2442,7 @@ public class ServerLevel extends Level implements WorldGenLevel { } } // CraftBukkit end diff --git a/patches/server/0079-Configurable-Chunk-Inhabited-Time.patch b/patches/server/0080-Configurable-Chunk-Inhabited-Time.patch similarity index 92% rename from patches/server/0079-Configurable-Chunk-Inhabited-Time.patch rename to patches/server/0080-Configurable-Chunk-Inhabited-Time.patch index 15d5627a38..c046cafc1f 100644 --- a/patches/server/0079-Configurable-Chunk-Inhabited-Time.patch +++ b/patches/server/0080-Configurable-Chunk-Inhabited-Time.patch @@ -11,7 +11,7 @@ For people who want all chunks to be treated equally, you can chose a fixed valu This allows to fine-tune vanilla gameplay. diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -index d84b4051ee5177e9916199ec11445fc6c9a18936..fdb8c2346cb2e444b75f863a8a8199da84f25193 100644 +index 0eedaf7df86b7bdd22623231f9a49da8e798f204..cf910b466a4b75c0b9219abef5c9bff30793d7bf 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java @@ -280,6 +280,13 @@ public class LevelChunk extends ChunkAccess { diff --git a/patches/server/0080-EntityPathfindEvent.patch b/patches/server/0081-EntityPathfindEvent.patch similarity index 100% rename from patches/server/0080-EntityPathfindEvent.patch rename to patches/server/0081-EntityPathfindEvent.patch diff --git a/patches/server/0081-Sanitise-RegionFileCache-and-make-configurable.patch b/patches/server/0082-Sanitise-RegionFileCache-and-make-configurable.patch similarity index 81% rename from patches/server/0081-Sanitise-RegionFileCache-and-make-configurable.patch rename to patches/server/0082-Sanitise-RegionFileCache-and-make-configurable.patch index 5c3c1d34d2..87c1dfbbb9 100644 --- a/patches/server/0081-Sanitise-RegionFileCache-and-make-configurable.patch +++ b/patches/server/0082-Sanitise-RegionFileCache-and-make-configurable.patch @@ -11,13 +11,13 @@ The implementation uses a LinkedHashMap as an LRU cache (modified from HashMap). The maximum size of the RegionFileCache is also made configurable. diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java -index ab3145064f0ea3d71e85f3f02cf73d13f548a425..32880df5c96e77c8db8198c91a0a3efe8968199e 100644 +index 2d00333f25828ef5912c925d1213a56c564d85c9..465ad0bae446a20e941e8f2dbf2d85f2627482b9 100644 --- a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java +++ b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java -@@ -37,7 +37,7 @@ public class RegionFileStorage implements AutoCloseable { - if (regionfile != null) { - return regionfile; - } else { +@@ -92,7 +92,7 @@ public class RegionFileStorage implements AutoCloseable { + return null; + } + // Paper end - cache regionfile does not exist state - if (this.regionCache.size() >= 256) { + if (this.regionCache.size() >= io.papermc.paper.configuration.GlobalConfiguration.get().misc.regionFileCacheSize) { // Paper - configurable ((RegionFile) this.regionCache.removeLast()).close(); diff --git a/patches/server/0082-Do-not-load-chunks-for-Pathfinding.patch b/patches/server/0083-Do-not-load-chunks-for-Pathfinding.patch similarity index 100% rename from patches/server/0082-Do-not-load-chunks-for-Pathfinding.patch rename to patches/server/0083-Do-not-load-chunks-for-Pathfinding.patch diff --git a/patches/server/0083-Add-PlayerUseUnknownEntityEvent.patch b/patches/server/0084-Add-PlayerUseUnknownEntityEvent.patch similarity index 95% rename from patches/server/0083-Add-PlayerUseUnknownEntityEvent.patch rename to patches/server/0084-Add-PlayerUseUnknownEntityEvent.patch index 532519ab03..f2da1fdee9 100644 --- a/patches/server/0083-Add-PlayerUseUnknownEntityEvent.patch +++ b/patches/server/0084-Add-PlayerUseUnknownEntityEvent.patch @@ -28,10 +28,10 @@ index 644a0fdea6576647539b96528717dbaeab498d93..221e64a66ff12a8de5c75992fc26a54a + // Paper end - PlayerUseUnknownEntityEvent } diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 98266c0349d21fc1ebf0d34a3d898825d477d6e5..a4e010b9195d0afeb4724dc64c85964a843eb59a 100644 +index a3fb406ca9fda0ca6909e2e4f4f486c7de0e5ae3..d8a78412d2cfa6aff023ecc8e5cc2121767a9097 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -2385,8 +2385,38 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -2392,8 +2392,38 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl }); } } diff --git a/patches/server/0084-Configurable-Grass-Spread-Tick-Rate.patch b/patches/server/0085-Configurable-Grass-Spread-Tick-Rate.patch similarity index 100% rename from patches/server/0084-Configurable-Grass-Spread-Tick-Rate.patch rename to patches/server/0085-Configurable-Grass-Spread-Tick-Rate.patch diff --git a/patches/server/0085-Fix-Cancelling-BlockPlaceEvent-triggering-physics.patch b/patches/server/0086-Fix-Cancelling-BlockPlaceEvent-triggering-physics.patch similarity index 82% rename from patches/server/0085-Fix-Cancelling-BlockPlaceEvent-triggering-physics.patch rename to patches/server/0086-Fix-Cancelling-BlockPlaceEvent-triggering-physics.patch index ad60a4eac0..46e1468576 100644 --- a/patches/server/0085-Fix-Cancelling-BlockPlaceEvent-triggering-physics.patch +++ b/patches/server/0086-Fix-Cancelling-BlockPlaceEvent-triggering-physics.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Fix Cancelling BlockPlaceEvent triggering physics diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 71e448a44b1d85bba4481fd02612d687aa9df4a1..f0820ab21ff17601c896099d664d18283c759384 100644 +index 949404f3ac0e853cfc45e28453136dd166ac9563..f13e39082638310532a0fd1dab41e809c45287c0 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -1366,6 +1366,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1600,6 +1600,7 @@ public class ServerLevel extends Level implements WorldGenLevel { @Override public void updateNeighborsAt(BlockPos pos, Block sourceBlock) { diff --git a/patches/server/0086-Optimize-DataBits.patch b/patches/server/0087-Optimize-DataBits.patch similarity index 100% rename from patches/server/0086-Optimize-DataBits.patch rename to patches/server/0087-Optimize-DataBits.patch diff --git a/patches/server/0087-Option-to-use-vanilla-per-world-scoreboard-coloring-.patch b/patches/server/0088-Option-to-use-vanilla-per-world-scoreboard-coloring-.patch similarity index 100% rename from patches/server/0087-Option-to-use-vanilla-per-world-scoreboard-coloring-.patch rename to patches/server/0088-Option-to-use-vanilla-per-world-scoreboard-coloring-.patch diff --git a/patches/server/0088-Configurable-Player-Collision.patch b/patches/server/0089-Configurable-Player-Collision.patch similarity index 97% rename from patches/server/0088-Configurable-Player-Collision.patch rename to patches/server/0089-Configurable-Player-Collision.patch index d295cfdc50..8de27b08b0 100644 --- a/patches/server/0088-Configurable-Player-Collision.patch +++ b/patches/server/0089-Configurable-Player-Collision.patch @@ -18,7 +18,7 @@ index 1294b38262505b0d54089e428df9b363219de1f0..ee37ec0de1ca969144824427ae42b0c8 buf.writeComponent(this.playerPrefix); buf.writeComponent(this.playerSuffix); diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 19cb043e5c501b664d101b11717b759be9dd4cfd..c667cf1564011a922f208e671ff293485324b5cd 100644 +index 281884fedf6607581a24fef4b3326dfb81012124..1356d61428a50b4fc09c6c4d4c02e02056b6b38b 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -575,6 +575,20 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { -@@ -2325,9 +2327,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop this.getMinX() && (double) pos.getMinBlockX() < this.getMaxX() && (double) pos.getMaxBlockZ() > this.getMinZ() && (double) pos.getMinBlockZ() < this.getMaxZ(); } diff --git a/src/main/java/net/minecraft/world/level/chunk/ChunkGenerator.java b/src/main/java/net/minecraft/world/level/chunk/ChunkGenerator.java -index f739a175e26f250c652c73b8985158fe37c2823a..d70317d0306a7b55ba88b0d2360c9b190454e049 100644 +index 5f4fa76fe3a1a0a4fc11064fcf57bfab20bd9729..4da303d7e15496f04f0e27bfb613176bc2a72b76 100644 --- a/src/main/java/net/minecraft/world/level/chunk/ChunkGenerator.java +++ b/src/main/java/net/minecraft/world/level/chunk/ChunkGenerator.java @@ -217,6 +217,7 @@ public abstract class ChunkGenerator { diff --git a/patches/server/0118-Configurable-Cartographer-Treasure-Maps.patch b/patches/server/0119-Configurable-Cartographer-Treasure-Maps.patch similarity index 100% rename from patches/server/0118-Configurable-Cartographer-Treasure-Maps.patch rename to patches/server/0119-Configurable-Cartographer-Treasure-Maps.patch diff --git a/patches/server/0119-Add-API-methods-to-control-if-armour-stands-can-move.patch b/patches/server/0120-Add-API-methods-to-control-if-armour-stands-can-move.patch similarity index 100% rename from patches/server/0119-Add-API-methods-to-control-if-armour-stands-can-move.patch rename to patches/server/0120-Add-API-methods-to-control-if-armour-stands-can-move.patch diff --git a/patches/server/0120-String-based-Action-Bar-API.patch b/patches/server/0121-String-based-Action-Bar-API.patch similarity index 94% rename from patches/server/0120-String-based-Action-Bar-API.patch rename to patches/server/0121-String-based-Action-Bar-API.patch index 4809ccb8de..f597ed3118 100644 --- a/patches/server/0120-String-based-Action-Bar-API.patch +++ b/patches/server/0121-String-based-Action-Bar-API.patch @@ -26,10 +26,10 @@ index 32ef3edebe94a2014168b7e438752a80b2687e5f..ab6c58eed6707ab7b0aa3e7549a871ad // Paper end buf.writeComponent(this.text); diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index dc436397256cecfb51ed82b0cc654307a8d2e0f6..75e82bec61c9e20d6ae589664f87cb1f26b0deb5 100644 +index bedeae40c7a88b7c13babb9ef8c94983a2ac4fef..18db64ff86517c7ceb98590c0c91e0c21855db72 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -300,6 +300,29 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -342,6 +342,29 @@ public class CraftPlayer extends CraftHumanEntity implements Player { } // Paper start diff --git a/patches/server/0121-Properly-fix-item-duplication-bug.patch b/patches/server/0122-Properly-fix-item-duplication-bug.patch similarity index 90% rename from patches/server/0121-Properly-fix-item-duplication-bug.patch rename to patches/server/0122-Properly-fix-item-duplication-bug.patch index 5c9d66dc2b..6b92612404 100644 --- a/patches/server/0121-Properly-fix-item-duplication-bug.patch +++ b/patches/server/0122-Properly-fix-item-duplication-bug.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Properly fix item duplication bug Credit to prplz for figuring out the real issue diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index d90748aab21adf9c7f463e31e7d7eb5f9bc0bbbd..40efa19ffe9275748a62e0546c3fd42bbcb0883d 100644 +index 56566c9f74d1ba2539f9d35f61038489650b0792..aee79a46d8fce5e5e80010e0e34f04fc8495d602 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -2352,7 +2352,7 @@ public class ServerPlayer extends Player { +@@ -2396,7 +2396,7 @@ public class ServerPlayer extends Player { @Override public boolean isImmobile() { diff --git a/patches/server/0122-Firework-API-s.patch b/patches/server/0123-Firework-API-s.patch similarity index 100% rename from patches/server/0122-Firework-API-s.patch rename to patches/server/0123-Firework-API-s.patch diff --git a/patches/server/0123-PlayerTeleportEndGatewayEvent.patch b/patches/server/0124-PlayerTeleportEndGatewayEvent.patch similarity index 100% rename from patches/server/0123-PlayerTeleportEndGatewayEvent.patch rename to patches/server/0124-PlayerTeleportEndGatewayEvent.patch diff --git a/patches/server/0124-Provide-E-TE-Chunk-count-stat-methods.patch b/patches/server/0125-Provide-E-TE-Chunk-count-stat-methods.patch similarity index 94% rename from patches/server/0124-Provide-E-TE-Chunk-count-stat-methods.patch rename to patches/server/0125-Provide-E-TE-Chunk-count-stat-methods.patch index 4fa211b968..6324b36515 100644 --- a/patches/server/0124-Provide-E-TE-Chunk-count-stat-methods.patch +++ b/patches/server/0125-Provide-E-TE-Chunk-count-stat-methods.patch @@ -7,7 +7,7 @@ Provides counts without the ineffeciency of using .getEntities().size() which creates copy of the collections. diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 936f21b61589a6bcd9bf19c7466b9b1b9a14f280..776a5a9947c56eb63df7ac9797166be456282af1 100644 +index 7b681914b7f9e7fb6d2ea607e0d63ca7024a7ec3..7cfcbc1e38f5e9145c827dfe26299277a3f14cee 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java @@ -116,7 +116,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { @@ -20,7 +20,7 @@ index 936f21b61589a6bcd9bf19c7466b9b1b9a14f280..776a5a9947c56eb63df7ac9797166be4 private final List pendingBlockEntityTickers = Lists.newArrayList(); private boolean tickingBlockEntities; diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index d01388bbadf3069357cf52463f4104a1be4d2b56..9d79b31baea99d25218e9d3f27ab895d4f73ef8a 100644 +index f4f94185cf699582737aecee1d3623c7857fbbb5..6b0dba6f7211500ba5950a76d2b2252a09f65103 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java @@ -154,6 +154,56 @@ public class CraftWorld extends CraftRegionAccessor implements World { diff --git a/patches/server/0125-Enforce-Sync-Player-Saves.patch b/patches/server/0126-Enforce-Sync-Player-Saves.patch similarity index 92% rename from patches/server/0125-Enforce-Sync-Player-Saves.patch rename to patches/server/0126-Enforce-Sync-Player-Saves.patch index bfd5092167..4bdce0e792 100644 --- a/patches/server/0125-Enforce-Sync-Player-Saves.patch +++ b/patches/server/0126-Enforce-Sync-Player-Saves.patch @@ -7,7 +7,7 @@ Saving players async is extremely dangerous. This will force it to main the same way we handle async chunk loads. diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 5406ac93eaf9b9f9e810bfbbcf4a35e2f38f680c..a2b4e5fc6b3174705f2232abb2df7bf869dc3926 100644 +index 441c187b45bfa20d929fe3c5e8dc25db22c4aad1..bba11f3ad244bf9f3b7e6006128ce5e4228ab531 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -1063,11 +1063,13 @@ public abstract class PlayerList { diff --git a/patches/server/0126-ExperienceOrbs-API-for-Reason-Source-Triggering-play.patch b/patches/server/0127-ExperienceOrbs-API-for-Reason-Source-Triggering-play.patch similarity index 100% rename from patches/server/0126-ExperienceOrbs-API-for-Reason-Source-Triggering-play.patch rename to patches/server/0127-ExperienceOrbs-API-for-Reason-Source-Triggering-play.patch diff --git a/patches/server/0127-Cap-Entity-Collisions.patch b/patches/server/0128-Cap-Entity-Collisions.patch similarity index 95% rename from patches/server/0127-Cap-Entity-Collisions.patch rename to patches/server/0128-Cap-Entity-Collisions.patch index 60f4af0a25..0b9b7754b2 100644 --- a/patches/server/0127-Cap-Entity-Collisions.patch +++ b/patches/server/0128-Cap-Entity-Collisions.patch @@ -12,7 +12,7 @@ just as it does in Vanilla, but entity pushing logic will be capped. You can set this to 0 to disable collisions. diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 468111bb80e7756371d22eb831596c187538f0c1..b4c91cb985d3772c5b105b8d2267b51d7483e005 100644 +index f3db63ddb175f82b6eafee48686065050437fc92..4e71fb3fcbd89c21e5132cfb76dcbf8cec7785dd 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -387,6 +387,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { diff --git a/patches/server/0128-Remove-CraftScheduler-Async-Task-Debugger.patch b/patches/server/0129-Remove-CraftScheduler-Async-Task-Debugger.patch similarity index 100% rename from patches/server/0128-Remove-CraftScheduler-Async-Task-Debugger.patch rename to patches/server/0129-Remove-CraftScheduler-Async-Task-Debugger.patch diff --git a/patches/server/0129-Do-not-let-armorstands-drown.patch b/patches/server/0130-Do-not-let-armorstands-drown.patch similarity index 100% rename from patches/server/0129-Do-not-let-armorstands-drown.patch rename to patches/server/0130-Do-not-let-armorstands-drown.patch diff --git a/patches/server/0130-Properly-handle-async-calls-to-restart-the-server.patch b/patches/server/0131-Properly-handle-async-calls-to-restart-the-server.patch similarity index 97% rename from patches/server/0130-Properly-handle-async-calls-to-restart-the-server.patch rename to patches/server/0131-Properly-handle-async-calls-to-restart-the-server.patch index 5e4cfcbaa0..a12364d7ee 100644 --- a/patches/server/0130-Properly-handle-async-calls-to-restart-the-server.patch +++ b/patches/server/0131-Properly-handle-async-calls-to-restart-the-server.patch @@ -30,7 +30,7 @@ will have plugins and worlds saving to the disk has a high potential to result in corruption/dataloss. diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 8ef6e39e4711d2147e5ad97e9f8028e005588ac5..8a3a8b8ccbf3b5e3b41f33c8b5c6a0834e547131 100644 +index b46cffe141921e499a47dac08318f167f21a5509..092f76d1d248e04c3fa5fa346373ec1f2600ee5c 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -233,6 +233,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 9d700d27d05c6f276b3ca159735fece0a75ca9b1..0fb1fda1aba730e54d9e922e18de3bd048a78a62 100644 +index 845a90426545b554aaf5c278723c107ba9791270..a3c150e9552fbc9b9244c70508c27f03a3834fa2 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -162,8 +162,7 @@ public abstract class PlayerList { @@ -389,7 +389,7 @@ index 9d700d27d05c6f276b3ca159735fece0a75ca9b1..0fb1fda1aba730e54d9e922e18de3bd0 this.bans = new UserBanList(PlayerList.USERBANLIST_FILE); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index a51ab0eddb94263642b0015967cd2e6987ed2619..15d881193f40dda74996932854283e4551742185 100644 +index d3a9b47ab78844e5cb6a04a790e079fe22bf153c..7b019dcb70b430c36112e68c837b2b4aeb1aacc7 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -44,7 +44,6 @@ import java.util.logging.Level; diff --git a/patches/server/0134-provide-a-configurable-option-to-disable-creeper-lin.patch b/patches/server/0135-provide-a-configurable-option-to-disable-creeper-lin.patch similarity index 100% rename from patches/server/0134-provide-a-configurable-option-to-disable-creeper-lin.patch rename to patches/server/0135-provide-a-configurable-option-to-disable-creeper-lin.patch diff --git a/patches/server/0135-Item-canEntityPickup.patch b/patches/server/0136-Item-canEntityPickup.patch similarity index 100% rename from patches/server/0135-Item-canEntityPickup.patch rename to patches/server/0136-Item-canEntityPickup.patch diff --git a/patches/server/0136-PlayerPickupItemEvent-setFlyAtPlayer.patch b/patches/server/0137-PlayerPickupItemEvent-setFlyAtPlayer.patch similarity index 100% rename from patches/server/0136-PlayerPickupItemEvent-setFlyAtPlayer.patch rename to patches/server/0137-PlayerPickupItemEvent-setFlyAtPlayer.patch diff --git a/patches/server/0137-PlayerAttemptPickupItemEvent.patch b/patches/server/0138-PlayerAttemptPickupItemEvent.patch similarity index 100% rename from patches/server/0137-PlayerAttemptPickupItemEvent.patch rename to patches/server/0138-PlayerAttemptPickupItemEvent.patch diff --git a/patches/server/0138-Do-not-submit-profile-lookups-to-worldgen-threads.patch b/patches/server/0139-Do-not-submit-profile-lookups-to-worldgen-threads.patch similarity index 100% rename from patches/server/0138-Do-not-submit-profile-lookups-to-worldgen-threads.patch rename to patches/server/0139-Do-not-submit-profile-lookups-to-worldgen-threads.patch diff --git a/patches/server/0139-Add-UnknownCommandEvent.patch b/patches/server/0140-Add-UnknownCommandEvent.patch similarity index 98% rename from patches/server/0139-Add-UnknownCommandEvent.patch rename to patches/server/0140-Add-UnknownCommandEvent.patch index c347eb344a..98800873f2 100644 --- a/patches/server/0139-Add-UnknownCommandEvent.patch +++ b/patches/server/0140-Add-UnknownCommandEvent.patch @@ -83,7 +83,7 @@ index d1ecf61ffecb8669214ad85334374a4569811de8..e63632f09d608371aaeaf09a6dac57c1 b1 = 0; diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 15d881193f40dda74996932854283e4551742185..c37793f660c0b2a28e4478dfee0582a61a8faf3c 100644 +index 7b019dcb70b430c36112e68c837b2b4aeb1aacc7..66f241411af172e2f44edfc4e8f1b9bda86844e2 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -531,6 +531,7 @@ public final class CraftServer implements Server { diff --git a/patches/server/0140-Basic-PlayerProfile-API.patch b/patches/server/0141-Basic-PlayerProfile-API.patch similarity index 98% rename from patches/server/0140-Basic-PlayerProfile-API.patch rename to patches/server/0141-Basic-PlayerProfile-API.patch index b482ebaaf4..24f2b83526 100644 --- a/patches/server/0140-Basic-PlayerProfile-API.patch +++ b/patches/server/0141-Basic-PlayerProfile-API.patch @@ -548,7 +548,7 @@ index 0000000000000000000000000000000000000000..7ac27392a8647ef7d0dc78efe78703e9 + @NotNull GameProfile buildGameProfile(); +} diff --git a/src/main/java/io/papermc/paper/util/MCUtil.java b/src/main/java/io/papermc/paper/util/MCUtil.java -index 9572294a50110f2452090da1f32e0a73edc3db05..ff8876b7e7cc2172a2cb5e12d6836b9875cc9aa1 100644 +index dc2ab968ed010289125ac08f0a9ea85af6f6e8bb..82a1a87822e3fc323b92e1aa30ddb0cdb351d89c 100644 --- a/src/main/java/io/papermc/paper/util/MCUtil.java +++ b/src/main/java/io/papermc/paper/util/MCUtil.java @@ -1,5 +1,7 @@ @@ -559,15 +559,15 @@ index 9572294a50110f2452090da1f32e0a73edc3db05..ff8876b7e7cc2172a2cb5e12d6836b98 import com.google.common.util.concurrent.ThreadFactoryBuilder; import io.papermc.paper.math.BlockPosition; import io.papermc.paper.math.FinePosition; -@@ -17,6 +19,7 @@ import net.minecraft.world.level.ClipContext; - import net.minecraft.world.level.Level; +@@ -30,6 +32,7 @@ import net.minecraft.world.level.chunk.ChunkAccess; + import net.minecraft.world.level.chunk.ChunkStatus; import net.minecraft.world.phys.Vec3; import org.apache.commons.lang.exception.ExceptionUtils; +import com.mojang.authlib.GameProfile; import org.bukkit.Location; import org.bukkit.block.BlockFace; import org.bukkit.craftbukkit.CraftWorld; -@@ -362,6 +365,10 @@ public final class MCUtil { +@@ -378,6 +381,10 @@ public final class MCUtil { return run.get(); } @@ -579,7 +579,7 @@ index 9572294a50110f2452090da1f32e0a73edc3db05..ff8876b7e7cc2172a2cb5e12d6836b98 * Calculates distance between 2 entities * @param e1 diff --git a/src/main/java/net/minecraft/server/Main.java b/src/main/java/net/minecraft/server/Main.java -index ae0b713870976d4b1e469a90cef9b2e282dbcaab..6c3e0540dce5f810a7822cefe59228ef77528132 100644 +index 646cd39c46d86899f23c8179c0790e32d03f954f..1b97195394161e067312b71c81ddd448b92c5e44 100644 --- a/src/main/java/net/minecraft/server/Main.java +++ b/src/main/java/net/minecraft/server/Main.java @@ -178,7 +178,7 @@ public class Main { @@ -614,7 +614,7 @@ index c70cd016e1978931d115cfca94664897f0158196..eac9658fa4cab7a651e10e4e18c679e0 String s1 = name.toLowerCase(Locale.ROOT); GameProfileCache.GameProfileInfo usercache_usercacheentry = (GameProfileCache.GameProfileInfo) this.profilesByName.get(s1); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index c37793f660c0b2a28e4478dfee0582a61a8faf3c..35dc09187b0bed916c9a10f3cf3a900052926a72 100644 +index 66f241411af172e2f44edfc4e8f1b9bda86844e2..e42555a01a581a094bc4bd41bf4cd8a9a45bf7c1 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -264,6 +264,9 @@ import org.yaml.snakeyaml.error.MarkedYAMLException; diff --git a/patches/server/0141-Shoulder-Entities-Release-API.patch b/patches/server/0142-Shoulder-Entities-Release-API.patch similarity index 100% rename from patches/server/0141-Shoulder-Entities-Release-API.patch rename to patches/server/0142-Shoulder-Entities-Release-API.patch diff --git a/patches/server/0142-Profile-Lookup-Events.patch b/patches/server/0143-Profile-Lookup-Events.patch similarity index 100% rename from patches/server/0142-Profile-Lookup-Events.patch rename to patches/server/0143-Profile-Lookup-Events.patch diff --git a/patches/server/0143-Block-player-logins-during-server-shutdown.patch b/patches/server/0144-Block-player-logins-during-server-shutdown.patch similarity index 100% rename from patches/server/0143-Block-player-logins-during-server-shutdown.patch rename to patches/server/0144-Block-player-logins-during-server-shutdown.patch diff --git a/patches/server/0144-Entity-fromMobSpawner.patch b/patches/server/0145-Entity-fromMobSpawner.patch similarity index 93% rename from patches/server/0144-Entity-fromMobSpawner.patch rename to patches/server/0145-Entity-fromMobSpawner.patch index 393eb7cd61..bae3882cc4 100644 --- a/patches/server/0144-Entity-fromMobSpawner.patch +++ b/patches/server/0145-Entity-fromMobSpawner.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Entity#fromMobSpawner() diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index b4c91cb985d3772c5b105b8d2267b51d7483e005..3fc715e7ceb35e2309ba3ffeb19ae58cfd25fde6 100644 +index 4e71fb3fcbd89c21e5132cfb76dcbf8cec7785dd..1d21c5d5ea84f76d4cafe9d2d22226cf50232ee1 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -388,6 +388,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { @@ -16,7 +16,7 @@ index b4c91cb985d3772c5b105b8d2267b51d7483e005..3fc715e7ceb35e2309ba3ffeb19ae58c @javax.annotation.Nullable private org.bukkit.util.Vector origin; @javax.annotation.Nullable -@@ -2125,6 +2126,10 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -2177,6 +2178,10 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { } nbt.put("Paper.Origin", this.newDoubleList(origin.getX(), origin.getY(), origin.getZ())); } @@ -27,7 +27,7 @@ index b4c91cb985d3772c5b105b8d2267b51d7483e005..3fc715e7ceb35e2309ba3ffeb19ae58c // Paper end return nbt; } catch (Throwable throwable) { -@@ -2265,6 +2270,8 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -2317,6 +2322,8 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { this.originWorld = originWorld; origin = new org.bukkit.util.Vector(originTag.getDouble(0), originTag.getDouble(1), originTag.getDouble(2)); } diff --git a/patches/server/0145-Improve-the-Saddle-API-for-Horses.patch b/patches/server/0146-Improve-the-Saddle-API-for-Horses.patch similarity index 100% rename from patches/server/0145-Improve-the-Saddle-API-for-Horses.patch rename to patches/server/0146-Improve-the-Saddle-API-for-Horses.patch diff --git a/patches/server/0146-Implement-ensureServerConversions-API.patch b/patches/server/0147-Implement-ensureServerConversions-API.patch similarity index 100% rename from patches/server/0146-Implement-ensureServerConversions-API.patch rename to patches/server/0147-Implement-ensureServerConversions-API.patch diff --git a/patches/server/0147-Implement-getI18NDisplayName.patch b/patches/server/0148-Implement-getI18NDisplayName.patch similarity index 100% rename from patches/server/0147-Implement-getI18NDisplayName.patch rename to patches/server/0148-Implement-getI18NDisplayName.patch diff --git a/patches/server/0148-ProfileWhitelistVerifyEvent.patch b/patches/server/0149-ProfileWhitelistVerifyEvent.patch similarity index 97% rename from patches/server/0148-ProfileWhitelistVerifyEvent.patch rename to patches/server/0149-ProfileWhitelistVerifyEvent.patch index 95627cc8cc..e64e46dedb 100644 --- a/patches/server/0148-ProfileWhitelistVerifyEvent.patch +++ b/patches/server/0149-ProfileWhitelistVerifyEvent.patch @@ -5,7 +5,7 @@ Subject: [PATCH] ProfileWhitelistVerifyEvent diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 0fb1fda1aba730e54d9e922e18de3bd048a78a62..0cdab5d4f1b4d368dfee0dc50183a83ca446fc17 100644 +index a3c150e9552fbc9b9244c70508c27f03a3834fa2..e4199b1c4b297db85a99e1e6a1c61ce6d7abc909 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -633,9 +633,9 @@ public abstract class PlayerList { diff --git a/patches/server/0149-Fix-this-stupid-bullshit.patch b/patches/server/0150-Fix-this-stupid-bullshit.patch similarity index 100% rename from patches/server/0149-Fix-this-stupid-bullshit.patch rename to patches/server/0150-Fix-this-stupid-bullshit.patch diff --git a/patches/server/0150-LivingEntity-setKiller.patch b/patches/server/0151-LivingEntity-setKiller.patch similarity index 100% rename from patches/server/0150-LivingEntity-setKiller.patch rename to patches/server/0151-LivingEntity-setKiller.patch diff --git a/patches/server/0151-Ocelot-despawns-should-honor-nametags-and-leash.patch b/patches/server/0152-Ocelot-despawns-should-honor-nametags-and-leash.patch similarity index 100% rename from patches/server/0151-Ocelot-despawns-should-honor-nametags-and-leash.patch rename to patches/server/0152-Ocelot-despawns-should-honor-nametags-and-leash.patch diff --git a/patches/server/0152-Reset-spawner-timer-when-spawner-event-is-cancelled.patch b/patches/server/0153-Reset-spawner-timer-when-spawner-event-is-cancelled.patch similarity index 100% rename from patches/server/0152-Reset-spawner-timer-when-spawner-event-is-cancelled.patch rename to patches/server/0153-Reset-spawner-timer-when-spawner-event-is-cancelled.patch diff --git a/patches/server/0153-Allow-specifying-a-custom-authentication-servers-dow.patch b/patches/server/0154-Allow-specifying-a-custom-authentication-servers-dow.patch similarity index 100% rename from patches/server/0153-Allow-specifying-a-custom-authentication-servers-dow.patch rename to patches/server/0154-Allow-specifying-a-custom-authentication-servers-dow.patch diff --git a/patches/server/0154-Handle-plugin-prefixes-using-Log4J-configuration.patch b/patches/server/0155-Handle-plugin-prefixes-using-Log4J-configuration.patch similarity index 100% rename from patches/server/0154-Handle-plugin-prefixes-using-Log4J-configuration.patch rename to patches/server/0155-Handle-plugin-prefixes-using-Log4J-configuration.patch diff --git a/patches/server/0155-Improve-Log4J-Configuration-Plugin-Loggers.patch b/patches/server/0156-Improve-Log4J-Configuration-Plugin-Loggers.patch similarity index 100% rename from patches/server/0155-Improve-Log4J-Configuration-Plugin-Loggers.patch rename to patches/server/0156-Improve-Log4J-Configuration-Plugin-Loggers.patch diff --git a/patches/server/0156-Add-PlayerJumpEvent.patch b/patches/server/0157-Add-PlayerJumpEvent.patch similarity index 94% rename from patches/server/0156-Add-PlayerJumpEvent.patch rename to patches/server/0157-Add-PlayerJumpEvent.patch index 62a093ea68..c718d20f84 100644 --- a/patches/server/0156-Add-PlayerJumpEvent.patch +++ b/patches/server/0157-Add-PlayerJumpEvent.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add PlayerJumpEvent diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 4f420687d7afc6cdb8175d510c54a0d8dd3847b6..875c98d4f93b3fdd93af3a1087a818f7250515b1 100644 +index bebe7cee0a0a94c1e11b7ac8c79c7496fb6b8edc..592e7d24b27fab4af32d35d0f7c7786c582d9418 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -1192,7 +1192,34 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1199,7 +1199,34 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl boolean flag = d7 > 0.0D; if (this.player.onGround() && !packet.isOnGround() && flag) { diff --git a/patches/server/0157-handle-ServerboundKeepAlivePacket-async.patch b/patches/server/0158-handle-ServerboundKeepAlivePacket-async.patch similarity index 100% rename from patches/server/0157-handle-ServerboundKeepAlivePacket-async.patch rename to patches/server/0158-handle-ServerboundKeepAlivePacket-async.patch diff --git a/patches/server/0158-Expose-client-protocol-version-and-virtual-host.patch b/patches/server/0159-Expose-client-protocol-version-and-virtual-host.patch similarity index 90% rename from patches/server/0158-Expose-client-protocol-version-and-virtual-host.patch rename to patches/server/0159-Expose-client-protocol-version-and-virtual-host.patch index f8a2b76a5a..a35ad62785 100644 --- a/patches/server/0158-Expose-client-protocol-version-and-virtual-host.patch +++ b/patches/server/0159-Expose-client-protocol-version-and-virtual-host.patch @@ -60,13 +60,13 @@ index 0000000000000000000000000000000000000000..a5a7624f1f372a26b982836cd31cff15 + +} diff --git a/src/main/java/net/minecraft/network/Connection.java b/src/main/java/net/minecraft/network/Connection.java -index e7a124403f2b07c96caaaf97d1c9023f9ec2f9d9..e5e4a5fb2c342a249344d207ffea4000cc998710 100644 +index b097bb4855ab724b2c435a9a9db450ff3ce840fe..2c807e8a579de5152f99c75ea272a6483a778f17 100644 --- a/src/main/java/net/minecraft/network/Connection.java +++ b/src/main/java/net/minecraft/network/Connection.java -@@ -111,6 +111,10 @@ public class Connection extends SimpleChannelInboundHandler> { - @Nullable - BandwidthDebugMonitor bandwidthDebugMonitor; - public String hostname = ""; // CraftBukkit - add field +@@ -133,6 +133,10 @@ public class Connection extends SimpleChannelInboundHandler> { + } + } + // Paper end - add pending task queue + // Paper start - NetworkClient implementation + public int protocolVersion; + public java.net.InetSocketAddress virtualHost; @@ -90,10 +90,10 @@ index c1eb9f999c1042da804a3560d12c14f5d67b7953..331af220601127872aff709c8f692fdc @Override diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 75e82bec61c9e20d6ae589664f87cb1f26b0deb5..8106506803d77b88f13ca033eefa3b3f62453650 100644 +index 18db64ff86517c7ceb98590c0c91e0c21855db72..4d324d2fc5f9966a6b27391f856c4efec98692c6 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -246,6 +246,20 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -288,6 +288,20 @@ public class CraftPlayer extends CraftHumanEntity implements Player { } } diff --git a/patches/server/0159-revert-serverside-behavior-of-keepalives.patch b/patches/server/0160-revert-serverside-behavior-of-keepalives.patch similarity index 100% rename from patches/server/0159-revert-serverside-behavior-of-keepalives.patch rename to patches/server/0160-revert-serverside-behavior-of-keepalives.patch diff --git a/patches/server/0160-Send-attack-SoundEffects-only-to-players-who-can-see.patch b/patches/server/0161-Send-attack-SoundEffects-only-to-players-who-can-see.patch similarity index 100% rename from patches/server/0160-Send-attack-SoundEffects-only-to-players-who-can-see.patch rename to patches/server/0161-Send-attack-SoundEffects-only-to-players-who-can-see.patch diff --git a/patches/server/0161-Add-PlayerArmorChangeEvent.patch b/patches/server/0162-Add-PlayerArmorChangeEvent.patch similarity index 100% rename from patches/server/0161-Add-PlayerArmorChangeEvent.patch rename to patches/server/0162-Add-PlayerArmorChangeEvent.patch diff --git a/patches/server/0162-Prevent-logins-from-being-processed-when-the-player-.patch b/patches/server/0163-Prevent-logins-from-being-processed-when-the-player-.patch similarity index 100% rename from patches/server/0162-Prevent-logins-from-being-processed-when-the-player-.patch rename to patches/server/0163-Prevent-logins-from-being-processed-when-the-player-.patch diff --git a/patches/server/0163-Fix-MC-117075-TE-Unload-Lag-Spike.patch b/patches/server/0164-Fix-MC-117075-TE-Unload-Lag-Spike.patch similarity index 88% rename from patches/server/0163-Fix-MC-117075-TE-Unload-Lag-Spike.patch rename to patches/server/0164-Fix-MC-117075-TE-Unload-Lag-Spike.patch index 10951ab2ba..169d912a4b 100644 --- a/patches/server/0163-Fix-MC-117075-TE-Unload-Lag-Spike.patch +++ b/patches/server/0164-Fix-MC-117075-TE-Unload-Lag-Spike.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Fix MC-117075: TE Unload Lag Spike diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 776a5a9947c56eb63df7ac9797166be456282af1..e00e9a6ca14622c2baeba71f54710fedc838ffd7 100644 +index 7cfcbc1e38f5e9145c827dfe26299277a3f14cee..22dab285bbcea77d04a8625b025f054c625cadd4 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -800,6 +800,8 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -805,6 +805,8 @@ public abstract class Level implements LevelAccessor, AutoCloseable { // Spigot start // Iterator iterator = this.blockEntityTickers.iterator(); int tilesThisCycle = 0; @@ -17,7 +17,7 @@ index 776a5a9947c56eb63df7ac9797166be456282af1..e00e9a6ca14622c2baeba71f54710fed for (tileTickPosition = 0; tileTickPosition < this.blockEntityTickers.size(); tileTickPosition++) { // Paper - Disable tick limiters this.tileTickPosition = (this.tileTickPosition < this.blockEntityTickers.size()) ? this.tileTickPosition : 0; TickingBlockEntity tickingblockentity = (TickingBlockEntity) this.blockEntityTickers.get(tileTickPosition); -@@ -807,7 +809,6 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -812,7 +814,6 @@ public abstract class Level implements LevelAccessor, AutoCloseable { if (tickingblockentity == null) { this.getCraftServer().getLogger().severe("Spigot has detected a null entity and has removed it, preventing a crash"); tilesThisCycle--; @@ -25,7 +25,7 @@ index 776a5a9947c56eb63df7ac9797166be456282af1..e00e9a6ca14622c2baeba71f54710fed continue; } // Spigot end -@@ -815,12 +816,13 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -820,12 +821,13 @@ public abstract class Level implements LevelAccessor, AutoCloseable { if (tickingblockentity.isRemoved()) { // Spigot start tilesThisCycle--; diff --git a/patches/server/0164-use-CB-BlockState-implementations-for-captured-block.patch b/patches/server/0165-use-CB-BlockState-implementations-for-captured-block.patch similarity index 95% rename from patches/server/0164-use-CB-BlockState-implementations-for-captured-block.patch rename to patches/server/0165-use-CB-BlockState-implementations-for-captured-block.patch index f2aca08353..c5f6827d65 100644 --- a/patches/server/0164-use-CB-BlockState-implementations-for-captured-block.patch +++ b/patches/server/0165-use-CB-BlockState-implementations-for-captured-block.patch @@ -18,7 +18,7 @@ the blockstate that will be valid for restoration, as opposed to dropping information on restoration when the event is cancelled. diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index e00e9a6ca14622c2baeba71f54710fedc838ffd7..068382daaeae03e67b2859cce7d15e290c92352e 100644 +index 22dab285bbcea77d04a8625b025f054c625cadd4..ce24a52b2b9fb0ae7cfb085a204de8780bc8f5d6 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java @@ -154,7 +154,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { @@ -49,7 +49,7 @@ index e00e9a6ca14622c2baeba71f54710fedc838ffd7..068382daaeae03e67b2859cce7d15e29 this.capturedBlockStates.put(pos.immutable(), blockstate); captured = true; } -@@ -690,7 +691,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -695,7 +696,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { public BlockState getBlockState(BlockPos pos) { // CraftBukkit start - tree generation if (this.captureTreeGeneration) { diff --git a/patches/server/0165-API-to-get-a-BlockState-without-a-snapshot.patch b/patches/server/0166-API-to-get-a-BlockState-without-a-snapshot.patch similarity index 100% rename from patches/server/0165-API-to-get-a-BlockState-without-a-snapshot.patch rename to patches/server/0166-API-to-get-a-BlockState-without-a-snapshot.patch diff --git a/patches/server/0166-AsyncTabCompleteEvent.patch b/patches/server/0167-AsyncTabCompleteEvent.patch similarity index 96% rename from patches/server/0166-AsyncTabCompleteEvent.patch rename to patches/server/0167-AsyncTabCompleteEvent.patch index d1e3c29612..c3a706e77f 100644 --- a/patches/server/0166-AsyncTabCompleteEvent.patch +++ b/patches/server/0167-AsyncTabCompleteEvent.patch @@ -16,10 +16,10 @@ Also adds isCommand and getLocation to the sync TabCompleteEvent Co-authored-by: Aikar diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 875c98d4f93b3fdd93af3a1087a818f7250515b1..c14ebcc46c033834a14de5d6335a4dcc7830069d 100644 +index 592e7d24b27fab4af32d35d0f7c7786c582d9418..c425780ba9867b4ccea9841a8a7dba43f98f5073 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -687,27 +687,58 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -687,12 +687,16 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl } @@ -37,6 +37,10 @@ index 875c98d4f93b3fdd93af3a1087a818f7250515b1..c14ebcc46c033834a14de5d6335a4dcc + server.scheduleOnMain(() -> this.disconnect(Component.translatable("disconnect.spam", new Object[0]))); // Paper return; } + // Paper start +@@ -703,18 +707,45 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl + } + // Paper end // CraftBukkit end + // Paper start - async tab completion + TAB_COMPLETE_EXECUTOR.execute(() -> { @@ -87,7 +91,7 @@ index 875c98d4f93b3fdd93af3a1087a818f7250515b1..c14ebcc46c033834a14de5d6335a4dcc @Override diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 35dc09187b0bed916c9a10f3cf3a900052926a72..659e239a407f793706e4f133f6168a556e9de68b 100644 +index e42555a01a581a094bc4bd41bf4cd8a9a45bf7c1..2c4c8a1a4bb779de970068af5a30505f434029be 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -2132,7 +2132,7 @@ public final class CraftServer implements Server { diff --git a/patches/server/0167-PlayerPickupExperienceEvent.patch b/patches/server/0168-PlayerPickupExperienceEvent.patch similarity index 100% rename from patches/server/0167-PlayerPickupExperienceEvent.patch rename to patches/server/0168-PlayerPickupExperienceEvent.patch diff --git a/patches/server/0168-Ability-to-apply-mending-to-XP-API.patch b/patches/server/0169-Ability-to-apply-mending-to-XP-API.patch similarity index 94% rename from patches/server/0168-Ability-to-apply-mending-to-XP-API.patch rename to patches/server/0169-Ability-to-apply-mending-to-XP-API.patch index be694c6135..524104d241 100644 --- a/patches/server/0168-Ability-to-apply-mending-to-XP-API.patch +++ b/patches/server/0169-Ability-to-apply-mending-to-XP-API.patch @@ -14,10 +14,10 @@ public net.minecraft.world.entity.ExperienceOrb durabilityToXp(I)I public net.minecraft.world.entity.ExperienceOrb xpToDurability(I)I diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 8106506803d77b88f13ca033eefa3b3f62453650..d327ce535c8750b6ee6c993b3643006e0e91a08d 100644 +index 4d324d2fc5f9966a6b27391f856c4efec98692c6..18d7e0ab3c57a3daa819cd20e8ff6cd33b4c2edc 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -1498,7 +1498,37 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -1540,7 +1540,37 @@ public class CraftPlayer extends CraftHumanEntity implements Player { } @Override diff --git a/patches/server/0169-PlayerNaturallySpawnCreaturesEvent.patch b/patches/server/0170-PlayerNaturallySpawnCreaturesEvent.patch similarity index 82% rename from patches/server/0169-PlayerNaturallySpawnCreaturesEvent.patch rename to patches/server/0170-PlayerNaturallySpawnCreaturesEvent.patch index 076442dce8..2bc01a5882 100644 --- a/patches/server/0169-PlayerNaturallySpawnCreaturesEvent.patch +++ b/patches/server/0170-PlayerNaturallySpawnCreaturesEvent.patch @@ -9,10 +9,10 @@ from triggering monster spawns on a server. Also a highly more effecient way to blanket block spawns in a world diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java -index 8c84461a5711cb408b0ead397417c31cb2f4d336..db027a4291131b7f64c32853da4ca5fc71582251 100644 +index ea0b82165e452b7b82d1d9a58eef6059cba30552..cdcad9e1470a0b465ee96d1f2b4b8b31e8c3d219 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java -@@ -1193,7 +1193,9 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -687,7 +687,9 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider chunkRange = (chunkRange > level.spigotConfig.viewDistance) ? (byte) level.spigotConfig.viewDistance : chunkRange; chunkRange = (chunkRange > 8) ? 8 : chunkRange; @@ -23,7 +23,7 @@ index 8c84461a5711cb408b0ead397417c31cb2f4d336..db027a4291131b7f64c32853da4ca5fc // Spigot end if (!this.distanceManager.hasPlayersNearby(chunkcoordintpair.toLong())) { return false; -@@ -1208,6 +1210,15 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -702,6 +704,15 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider } entityplayer = (ServerPlayer) iterator.next(); @@ -40,10 +40,10 @@ index 8c84461a5711cb408b0ead397417c31cb2f4d336..db027a4291131b7f64c32853da4ca5fc return true; diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -index b1fd6118132ba38f60d2a2b15c09231fa29be8fa..0f38bdf2c9a29f2111c27138b8d997c230633bb8 100644 +index 65d447df49d8c4a27de9ae7f9e298bf705c688bc..4649e597b86335b33d9e9227d966dd7ad8208096 100644 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -@@ -718,6 +718,15 @@ public class ServerChunkCache extends ChunkSource { +@@ -565,6 +565,15 @@ public class ServerChunkCache extends ChunkSource { boolean flag2 = this.level.getGameRules().getBoolean(GameRules.RULE_DOMOBSPAWNING) && !this.level.players().isEmpty(); // CraftBukkit Collections.shuffle(list); @@ -60,7 +60,7 @@ index b1fd6118132ba38f60d2a2b15c09231fa29be8fa..0f38bdf2c9a29f2111c27138b8d997c2 while (iterator1.hasNext()) { diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 40efa19ffe9275748a62e0546c3fd42bbcb0883d..491dffdcbb065acf5861dc01b403d1a895c92baa 100644 +index aee79a46d8fce5e5e80010e0e34f04fc8495d602..74249488581e661dda4792348ca1407c1b1df6a9 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -1,5 +1,6 @@ @@ -76,5 +76,5 @@ index 40efa19ffe9275748a62e0546c3fd42bbcb0883d..491dffdcbb065acf5861dc01b403d1a8 public final com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet cachedSingleHashSet; // Paper + public PlayerNaturallySpawnCreaturesEvent playerNaturallySpawnedEvent; // Paper - public ServerPlayer(MinecraftServer server, ServerLevel world, GameProfile profile, ClientInformation clientOptions) { - super(world, world.getSharedSpawnPos(), world.getSharedSpawnAngle(), profile); + // Paper start - replace player chunk loader + private final java.util.concurrent.atomic.AtomicReference viewDistances = new java.util.concurrent.atomic.AtomicReference<>(new io.papermc.paper.chunk.system.RegionizedPlayerChunkLoader.ViewDistances(-1, -1, -1)); diff --git a/patches/server/0170-Add-setPlayerProfile-API-for-Skulls.patch b/patches/server/0171-Add-setPlayerProfile-API-for-Skulls.patch similarity index 100% rename from patches/server/0170-Add-setPlayerProfile-API-for-Skulls.patch rename to patches/server/0171-Add-setPlayerProfile-API-for-Skulls.patch diff --git a/patches/server/0171-PreCreatureSpawnEvent.patch b/patches/server/0172-PreCreatureSpawnEvent.patch similarity index 100% rename from patches/server/0171-PreCreatureSpawnEvent.patch rename to patches/server/0172-PreCreatureSpawnEvent.patch diff --git a/patches/server/0172-Fill-Profile-Property-Events.patch b/patches/server/0173-Fill-Profile-Property-Events.patch similarity index 100% rename from patches/server/0172-Fill-Profile-Property-Events.patch rename to patches/server/0173-Fill-Profile-Property-Events.patch diff --git a/patches/server/0173-PlayerAdvancementCriterionGrantEvent.patch b/patches/server/0174-PlayerAdvancementCriterionGrantEvent.patch similarity index 100% rename from patches/server/0173-PlayerAdvancementCriterionGrantEvent.patch rename to patches/server/0174-PlayerAdvancementCriterionGrantEvent.patch diff --git a/patches/server/0174-Add-ArmorStand-Item-Meta.patch b/patches/server/0175-Add-ArmorStand-Item-Meta.patch similarity index 100% rename from patches/server/0174-Add-ArmorStand-Item-Meta.patch rename to patches/server/0175-Add-ArmorStand-Item-Meta.patch diff --git a/patches/server/0175-Extend-Player-Interact-cancellation.patch b/patches/server/0176-Extend-Player-Interact-cancellation.patch similarity index 100% rename from patches/server/0175-Extend-Player-Interact-cancellation.patch rename to patches/server/0176-Extend-Player-Interact-cancellation.patch diff --git a/patches/server/0176-Tameable-getOwnerUniqueId-API.patch b/patches/server/0177-Tameable-getOwnerUniqueId-API.patch similarity index 100% rename from patches/server/0176-Tameable-getOwnerUniqueId-API.patch rename to patches/server/0177-Tameable-getOwnerUniqueId-API.patch diff --git a/patches/server/0177-Toggleable-player-crits-helps-mitigate-hacked-client.patch b/patches/server/0178-Toggleable-player-crits-helps-mitigate-hacked-client.patch similarity index 100% rename from patches/server/0177-Toggleable-player-crits-helps-mitigate-hacked-client.patch rename to patches/server/0178-Toggleable-player-crits-helps-mitigate-hacked-client.patch diff --git a/patches/server/0178-Disable-Explicit-Network-Manager-Flushing.patch b/patches/server/0179-Disable-Explicit-Network-Manager-Flushing.patch similarity index 86% rename from patches/server/0178-Disable-Explicit-Network-Manager-Flushing.patch rename to patches/server/0179-Disable-Explicit-Network-Manager-Flushing.patch index 70cd06eab6..d269ed5ad4 100644 --- a/patches/server/0178-Disable-Explicit-Network-Manager-Flushing.patch +++ b/patches/server/0179-Disable-Explicit-Network-Manager-Flushing.patch @@ -12,10 +12,10 @@ flushing on the netty event loop, so it won't do the flush on the main thread. Renable flushing by passing -Dpaper.explicit-flush=true diff --git a/src/main/java/net/minecraft/network/Connection.java b/src/main/java/net/minecraft/network/Connection.java -index e5e4a5fb2c342a249344d207ffea4000cc998710..2d7f332910328cef616609dc4c89facafcbe66cc 100644 +index 2c807e8a579de5152f99c75ea272a6483a778f17..837cc21af01e691eb9e877479a67ce94d5b2bc06 100644 --- a/src/main/java/net/minecraft/network/Connection.java +++ b/src/main/java/net/minecraft/network/Connection.java -@@ -114,6 +114,7 @@ public class Connection extends SimpleChannelInboundHandler> { +@@ -136,6 +136,7 @@ public class Connection extends SimpleChannelInboundHandler> { // Paper start - NetworkClient implementation public int protocolVersion; public java.net.InetSocketAddress virtualHost; @@ -23,7 +23,7 @@ index e5e4a5fb2c342a249344d207ffea4000cc998710..2d7f332910328cef616609dc4c89faca // Paper end public Connection(PacketFlow side) { -@@ -401,7 +402,7 @@ public class Connection extends SimpleChannelInboundHandler> { +@@ -430,7 +431,7 @@ public class Connection extends SimpleChannelInboundHandler> { } if (this.channel != null) { diff --git a/patches/server/0179-Implement-extended-PaperServerListPingEvent.patch b/patches/server/0180-Implement-extended-PaperServerListPingEvent.patch similarity index 98% rename from patches/server/0179-Implement-extended-PaperServerListPingEvent.patch rename to patches/server/0180-Implement-extended-PaperServerListPingEvent.patch index eea61eada1..c91d2d9333 100644 --- a/patches/server/0179-Implement-extended-PaperServerListPingEvent.patch +++ b/patches/server/0180-Implement-extended-PaperServerListPingEvent.patch @@ -181,7 +181,7 @@ index 0000000000000000000000000000000000000000..6b0bdc266109cdfb874f08bf74323603 + +} diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index a654f345f55493816c239f296864c9f75ee5247a..76728fd630e103e8e3431c6b54ef944cb62b33fd 100644 +index ee27251b9decc00a0094611cf79644bd83bce5c7..52f5c91d71a8fc86d14c3c4c9e258b9cf70ad57b 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -3,6 +3,9 @@ package net.minecraft.server; @@ -194,7 +194,7 @@ index a654f345f55493816c239f296864c9f75ee5247a..76728fd630e103e8e3431c6b54ef944c import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; -@@ -1334,7 +1337,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop