public Chunk getOrLoadEmptyChunk(WorldChunkKey key) { World world = key.getWorld(); int chunkX = key.getChunkX(); int chunkZ = key.getChunkZ(); Chunk chunk = key.getChunk(); if (chunk != null) { return chunk; } ServerLevel serverLevel = ((CraftWorld) world).getHandle(); LevelChunkSection[] sections = new LevelChunkSection[serverLevel.getSectionsCount()]; int index = 0; for (int sectionIndex = serverLevel.getMinSectionY(); sectionIndex < serverLevel.getMaxSectionY(); sectionIndex++) { sections[index++] = new LevelChunkSection( serverLevel.registryAccess().lookupOrThrow(Registries.BIOME), serverLevel, new ChunkPos(chunkX, chunkZ), sectionIndex ); } LevelChunk emptyChunk = new LevelChunk( serverLevel, new ChunkPos(chunkX, chunkZ), UpgradeData.EMPTY, new LevelChunkTicks<>(), new LevelChunkTicks<>(), 0L, sections, null, null ); emptyChunk.setLoaded(true); emptyChunk.setUnsavedListener(serverLevel.chunkSource.chunkMap.worldGenContext.unsavedListener()); emptyChunk.registerAllBlockEntitiesAfterLevelLoad(); emptyChunk.registerTickContainerInLevel(serverLevel); serverLevel.chunkSource.moonrise$setFullChunk(chunkX, chunkZ, emptyChunk); for (LevelChunkSection section : emptyChunk.getSections()) { section.setBlockState(0, 0, 0, Blocks.STONE.defaultBlockState(), false); } CraftChunk wrapper = new CraftChunk(emptyChunk); Chunk worldChunk = world.getChunkAt(chunkX, chunkZ); System.out.println(worldChunk.getBlock(0, 0, 0)); return wrapper; }