RuntimeBlockMapping: avoid unnecessary PacketSerializer usage

This commit is contained in:
Dylan K. Taylor 2023-03-11 22:16:24 +00:00
parent fa7c38276c
commit 8e280ebb8b
No known key found for this signature in database
GPG Key ID: 8927471A91CAFD3D

View File

@ -29,8 +29,7 @@ use pocketmine\data\bedrock\BedrockDataFiles;
use pocketmine\data\bedrock\LegacyBlockIdToStringIdMap; use pocketmine\data\bedrock\LegacyBlockIdToStringIdMap;
use pocketmine\nbt\tag\CompoundTag; use pocketmine\nbt\tag\CompoundTag;
use pocketmine\network\mcpe\protocol\serializer\NetworkNbtSerializer; use pocketmine\network\mcpe\protocol\serializer\NetworkNbtSerializer;
use pocketmine\network\mcpe\protocol\serializer\PacketSerializer; use pocketmine\utils\BinaryStream;
use pocketmine\network\mcpe\protocol\serializer\PacketSerializerContext;
use pocketmine\utils\Filesystem; use pocketmine\utils\Filesystem;
use pocketmine\utils\SingletonTrait; use pocketmine\utils\SingletonTrait;
@ -55,14 +54,14 @@ final class RuntimeBlockMapping{
} }
public function __construct(string $canonicalBlockStatesFile, string $r12ToCurrentBlockMapFile){ public function __construct(string $canonicalBlockStatesFile, string $r12ToCurrentBlockMapFile){
$stream = PacketSerializer::decoder( $stream = new BinaryStream(Filesystem::fileGetContents($canonicalBlockStatesFile));
Filesystem::fileGetContents($canonicalBlockStatesFile),
0,
new PacketSerializerContext(GlobalItemTypeDictionary::getInstance()->getDictionary())
);
$list = []; $list = [];
$nbtReader = new NetworkNbtSerializer();
while(!$stream->feof()){ while(!$stream->feof()){
$list[] = $stream->getNbtCompoundRoot(); $offset = $stream->getOffset();
$blockState = $nbtReader->read($stream->getBuffer(), $offset)->mustGetCompoundTag();
$stream->setOffset($offset);
$list[] = $blockState;
} }
$this->bedrockKnownStates = $list; $this->bedrockKnownStates = $list;
@ -73,14 +72,10 @@ final class RuntimeBlockMapping{
$legacyIdMap = LegacyBlockIdToStringIdMap::getInstance(); $legacyIdMap = LegacyBlockIdToStringIdMap::getInstance();
/** @var R12ToCurrentBlockMapEntry[] $legacyStateMap */ /** @var R12ToCurrentBlockMapEntry[] $legacyStateMap */
$legacyStateMap = []; $legacyStateMap = [];
$legacyStateMapReader = PacketSerializer::decoder( $legacyStateMapReader = new BinaryStream(Filesystem::fileGetContents($r12ToCurrentBlockMapFile));
Filesystem::fileGetContents($r12ToCurrentBlockMapFile),
0,
new PacketSerializerContext(GlobalItemTypeDictionary::getInstance()->getDictionary())
);
$nbtReader = new NetworkNbtSerializer(); $nbtReader = new NetworkNbtSerializer();
while(!$legacyStateMapReader->feof()){ while(!$legacyStateMapReader->feof()){
$id = $legacyStateMapReader->getString(); $id = $legacyStateMapReader->get($legacyStateMapReader->getUnsignedVarInt());
$meta = $legacyStateMapReader->getLShort(); $meta = $legacyStateMapReader->getLShort();
$offset = $legacyStateMapReader->getOffset(); $offset = $legacyStateMapReader->getOffset();