public function getClip($name)
 {
     $result = $this->db->query("SELECT * FROM clipboard_blocks WHERE name = '{$this->db->escape_string($name)}';");
     $blocks = [];
     while (is_array($data = $result->fetch_assoc())) {
         $blocks[Clip::key(new Vector3($data["x"], $data["y"], $data["z"]))] = Block::get($data["id"], $data["damage"]);
         $rname = $data["name"];
         // restore the cases
     }
     $result->close();
     if (!isset($rname)) {
         return null;
     }
     $clip = new Clip($blocks, null, $rname);
     return $clip;
 }
 public static function parse(StringReader $reader)
 {
     $name = $reader->readBString();
     $length = $reader->readLong(false);
     $blocks = [];
     for ($i = 0; $i < $length; $i++) {
         if ($reader->feof()) {
             throw new \Exception("Unexpected end of file");
         }
         $x = $reader->readInt();
         $y = $reader->readShort();
         $z = $reader->readInt();
         $v = new Vector3($x, $y, $z);
         $blocks[Clip::key($v)] = Block::get($reader->readByte(false), $reader->readByte(false));
     }
     return new Clip($blocks, null, $name);
 }