diff --git a/src/pocketmine/level/Level.php b/src/pocketmine/level/Level.php index 01a57634a..a7284afaa 100644 --- a/src/pocketmine/level/Level.php +++ b/src/pocketmine/level/Level.php @@ -2487,8 +2487,9 @@ class Level implements ChunkManager, Metadatable{ if(!($chunk instanceof Chunk)){ throw new ChunkException("Invalid Chunk sent"); } + assert($chunk->getX() === $x and $chunk->getZ() === $z, "Chunk coordinate mismatch: expected $x $z, but chunk has coordinates " . $chunk->getX() . " " . $chunk->getZ() . ", did you forget to clone a chunk before setting?"); - $this->server->getAsyncPool()->submitTask(new ChunkRequestTask($this, $chunk)); + $this->server->getAsyncPool()->submitTask(new ChunkRequestTask($this, $x, $z, $chunk)); $this->timings->syncChunkSendPrepareTimer->stopTiming(); } diff --git a/src/pocketmine/level/format/io/ChunkRequestTask.php b/src/pocketmine/level/format/io/ChunkRequestTask.php index 3effbd0e0..834e5d61f 100644 --- a/src/pocketmine/level/format/io/ChunkRequestTask.php +++ b/src/pocketmine/level/format/io/ChunkRequestTask.php @@ -43,13 +43,13 @@ class ChunkRequestTask extends AsyncTask{ protected $compressionLevel; - public function __construct(Level $level, Chunk $chunk){ + public function __construct(Level $level, int $chunkX, int $chunkZ, Chunk $chunk){ $this->levelId = $level->getId(); $this->compressionLevel = $level->getServer()->networkCompressionLevel; $this->chunk = $chunk->fastSerialize(); - $this->chunkX = $chunk->getX(); - $this->chunkZ = $chunk->getZ(); + $this->chunkX = $chunkX; + $this->chunkZ = $chunkZ; //TODO: serialize tiles with chunks $tiles = "";