--- ../src-base/minecraft/net/minecraftforge/common/chunkio/ChunkIOProvider.java +++ ../src-work/minecraft/net/minecraftforge/common/chunkio/ChunkIOProvider.java @@ -9,7 +9,10 @@ import java.io.IOException; import java.util.concurrent.atomic.AtomicInteger; -class ChunkIOProvider implements AsynchronousExecutor.CallBackProvider { +import org.bukkit.Server; +import org.bukkit.craftbukkit.util.LongHash; + +class ChunkIOProvider implements AsynchronousExecutor.CallBackProvider { private final AtomicInteger threadNumber = new AtomicInteger(1); // async stuff @@ -41,19 +44,41 @@ queuedChunk.loader.loadEntities(queuedChunk.world, queuedChunk.compound.getCompoundTag("Level"), chunk); MinecraftForge.EVENT_BUS.post(new ChunkDataEvent.Load(chunk, queuedChunk.compound)); // Don't call ChunkDataEvent.Load async chunk.lastSaveTime = queuedChunk.provider.worldObj.getTotalWorldTime(); - queuedChunk.provider.loadedChunkHashMap.add(ChunkCoordIntPair.chunkXZ2Int(queuedChunk.x, queuedChunk.z), chunk); + queuedChunk.provider.chunkManager.putChunk(chunk, queuedChunk.x, queuedChunk.z); // KCauldron queuedChunk.provider.loadedChunks.add(chunk); chunk.onChunkLoad(); if (queuedChunk.provider.currentChunkProvider != null) { + queuedChunk.provider.worldObj.timings.syncChunkLoadStructuresTimer.startTiming(); // Spigot queuedChunk.provider.currentChunkProvider.recreateStructures(queuedChunk.x, queuedChunk.z); + queuedChunk.provider.worldObj.timings.syncChunkLoadStructuresTimer.stopTiming(); // Spigot } + + Server server = queuedChunk.provider.worldObj.getServer(); + if (server != null) { + server.getPluginManager().callEvent(new org.bukkit.event.world.ChunkLoadEvent(chunk.bukkitChunk, false)); + } + // Update neighbor counts + for (int x = -2; x < 3; x++) { + for (int z = -2; z < 3; z++) { + if (x == 0 && z == 0) { + continue; + } + + net.minecraft.world.chunk.Chunk neighbor = queuedChunk.provider.getChunkIfLoaded(chunk.xPosition + x, chunk.zPosition + z); + if (neighbor != null) { + neighbor.setNeighborLoaded(-x, -z); + chunk.setNeighborLoaded(x, z); + } + } + } + chunk.populateChunk(queuedChunk.provider, queuedChunk.provider, queuedChunk.x, queuedChunk.z); } - public void callStage3(QueuedChunk queuedChunk, net.minecraft.world.chunk.Chunk chunk, Runnable runnable) throws RuntimeException { - runnable.run(); + public void callStage3(QueuedChunk queuedChunk, net.minecraft.world.chunk.Chunk chunk, kcauldron.ChunkCallback callback) throws RuntimeException { + callback.onChunkLoaded(chunk); } public Thread newThread(Runnable runnable) {