diff --git a/src/data/bedrock/block/upgrade/BlockDataUpgrader.php b/src/data/bedrock/block/upgrade/BlockDataUpgrader.php new file mode 100644 index 000000000..63faa3532 --- /dev/null +++ b/src/data/bedrock/block/upgrade/BlockDataUpgrader.php @@ -0,0 +1,63 @@ +legacyBlockStateMapper->fromIntIdMeta($id, $meta); + } + + public function upgradeStringIdMeta(string $id, int $meta) : ?BlockStateData{ + return $this->legacyBlockStateMapper->fromStringIdMeta($id, $meta); + } + + public function upgradeBlockStateNbt(CompoundTag $tag) : ?BlockStateData{ + if($tag->getTag("name") !== null && $tag->getTag("val") !== null){ + //Legacy (pre-1.13) blockstate - upgrade it to a version we understand + $id = $tag->getString("name"); + $data = $tag->getShort("val"); + + $blockStateData = $this->upgradeStringIdMeta($id, $data); + if($blockStateData === null){ + //unknown block, invalid ID + $blockStateData = new BlockStateData(BlockTypeNames::INFO_UPDATE, CompoundTag::create(), BlockStateData::CURRENT_VERSION); + } + }else{ + //Modern (post-1.13) blockstate + $blockStateData = BlockStateData::fromNbt($tag); + } + + return $this->blockStateUpgrader->upgrade($blockStateData); + } +}