2023-09-22 13:13:57 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								From: Spottedleaf <Spottedleaf@users.noreply.github.com>
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								Date: Sun, 18 Jun 2023 23:04:46 -0700
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								Subject: [PATCH] Do not read tile entities in chunks that are positioned
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 outside of the chunk
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								The tile entities are not accessible and so should not be loaded.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								This can happen as a result of users moving regionfiles around,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								which would cause a crash on Folia but would appear to function
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								fine on Paper.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2024-10-24 12:11:32 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/SerializableChunkData.java b/src/main/java/net/minecraft/world/level/chunk/storage/SerializableChunkData.java
 
							 
						 
					
						
							
								
									
										
										
										
											2023-09-22 13:13:57 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
 
							 
						 
					
						
							
								
									
										
										
										
											2024-10-24 12:11:32 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								--- a/src/main/java/net/minecraft/world/level/chunk/storage/SerializableChunkData.java
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+++ b/src/main/java/net/minecraft/world/level/chunk/storage/SerializableChunkData.java
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								@@ -0,0 +0,0 @@ public record SerializableChunkData(Registry<Biome> biomeRegistry, ChunkPos chun
 
							 
						 
					
						
							
								
									
										
										
										
											2023-09-22 13:13:57 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								 
							 
						 
					
						
							
								
									
										
										
										
											2024-10-24 12:11:32 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								             while (iterator2.hasNext()) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                 nbttagcompound = (CompoundTag) iterator2.next();
							 
						 
					
						
							
								
									
										
										
										
											2023-09-22 13:13:57 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								+                // Paper start - do not read tile entities positioned outside the chunk
 
							 
						 
					
						
							
								
									
										
										
										
											2024-10-24 12:11:32 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+                final BlockPos blockposition = BlockEntity.getPosFromTag(nbttagcompound);
 
							 
						 
					
						
							
								
									
										
										
										
											2023-09-22 13:13:57 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								+                if ((blockposition.getX() >> 4) != chunkPos.x || (blockposition.getZ() >> 4) != chunkPos.z) {
 
							 
						 
					
						
							
								
									
										
										
										
											2024-10-24 12:11:32 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+                    LOGGER.warn("Tile entity serialized in chunk {} in world '{}' positioned at {} is located outside of the chunk", chunkPos, world.getWorld().getName(), blockposition);
 
							 
						 
					
						
							
								
									
										
										
										
											2023-09-22 13:13:57 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								+                    continue;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+                }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+                // Paper end - do not read tile entities positioned outside the chunk
 
							 
						 
					
						
							
								
									
										
										
										
											2024-10-24 12:11:32 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                 protochunk1.setBlockEntityNbt(nbttagcompound);
							 
						 
					
						
							
								
									
										
										
										
											2023-09-22 13:13:57 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								             }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 
							 
						 
					
						
							
								
									
										
										
										
											2024-10-24 12:11:32 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								@@ -0,0 +0,0 @@ public record SerializableChunkData(Registry<Biome> biomeRegistry, ChunkPos chun
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                     chunk.setBlockEntityNbt(nbttagcompound);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                 } else {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                     BlockPos blockposition = BlockEntity.getPosFromTag(nbttagcompound);
							 
						 
					
						
							
								
									
										
										
										
											2023-09-22 13:13:57 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								+                    // Paper start - do not read tile entities positioned outside the chunk
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+                    ChunkPos chunkPos = chunk.getPos();
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+                    if ((blockposition.getX() >> 4) != chunkPos.x || (blockposition.getZ() >> 4) != chunkPos.z) {
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+                        LOGGER.warn("Tile entity serialized in chunk " + chunkPos + " in world '" + world.getWorld().getName() + "' positioned at " + blockposition + " is located outside of the chunk");
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+                        continue;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+                    }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+                    // Paper end - do not read tile entities positioned outside the chunk
 
							 
						 
					
						
							
								
									
										
										
										
											2024-10-24 12:11:32 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                     BlockEntity tileentity = BlockEntity.loadStatic(blockposition, chunk.getBlockState(blockposition), nbttagcompound, world.registryAccess());
							 
						 
					
						
							
								
									
										
										
										
											2023-09-22 13:13:57 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								 
							 
						 
					
						
							
								
									
										
										
										
											2024-10-24 12:11:32 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                     if (tileentity != null) {