private static function parseCompound($str, &$offset = 0)
{
$len = strlen($str);
$data = [];
for (; $offset < $len; ++$offset) {
if ($str[$offset - 1] === "}") {
break;
} elseif ($str[$offset] === "}") {
++$offset;
break;
}
$key = self::readKey($str, $offset);
$value = self::readValue($str, $offset, $type);
switch ($type) {
case NBT::TAG_Byte:
$data[$key] = new ByteTag($key, $value);
break;
case NBT::TAG_Short:
$data[$key] = new ShortTag($key, $value);
break;
case NBT::TAG_Int:
$data[$key] = new IntTag($key, $value);
break;
case NBT::TAG_Long:
$data[$key] = new LongTag($key, $value);
break;
case NBT::TAG_Float:
$data[$key] = new FloatTag($key, $value);
break;
case NBT::TAG_Double:
$data[$key] = new DoubleTag($key, $value);
break;
case NBT::TAG_ByteArray:
$data[$key] = new ByteArrayTag($key, $value);
break;
case NBT::TAG_String:
$data[$key] = new StringTag($key, $value);
break;
case NBT::TAG_List:
$data[$key] = new ListTag($key, $value);
break;
case NBT::TAG_Compound:
$data[$key] = new CompoundTag($key, $value);
break;
case NBT::TAG_IntArray:
$data[$key] = new IntArrayTag($key, $value);
break;
}
}
return $data;
}