public function setBlockIdAt(int $x, int $y, int $z, int $id)
{
unset($this->blockCache[Level::blockHash($x, $y, $z)]);
$this->getChunk($x >> 4, $z >> 4, true)->setBlockId($x & 0xf, $y & 0x7f, $z & 0xf, $id & 0xff);
if (!isset($this->changedBlocks[$index = Level::chunkHash($x >> 4, $z >> 4)])) {
$this->changedBlocks[$index] = [];
}
$this->changedBlocks[$index][Level::blockHash($x, $y, $z)] = $v = new Vector3($x, $y, $z);
foreach ($this->getChunkLoaders($x >> 4, $z >> 4) as $loader) {
$loader->onBlockChanged($v);
}
}