Hello, I'm working on better world generator for PocketMine. For better generator I need structures as village, igloos, etc. I've used NBT files from BDS to use default textures. NBT has 2 main list tags, palette and blocks. Pallete has format Code: [$index => (CompoundTag) [Name => "minecraft:blockname"], $index => ...] . I've tried to use ids from vanilla resources (block_id_map.json). However they were incomplete. How can I build same map with all the blocknames? Missing for example minecraft:dark_oak_log, minecraft:birch_planks or minecraft:dark_oak_planks Spoiler: Code PHP: private function load() { $data = (new BigEndianNBTStream())->readCompressed(file_get_contents($this->path)); /** @var array $compound */ $compounds = $data->getValue(); /** * @var int[] $palette * * stateId => pmmpId */ $palette = []; /** @var CompoundTag $state */ foreach ($compounds["palette"] as $state) { // $this->getBlockMap() returns pocketmine/resources/vanilla/block_id_map.json as array $palette[] = $this->getBlockMap()[$state->getString("Name")] ?? 0; } /** @var CompoundTag $blockData */ foreach ($compounds["blocks"] as $blockData) { $pos = $blockData->getListTag("pos"); $state = $blockData->getInt("state"); $this->data[] = [$pos->offsetGet(0), $pos->offsetGet(1), $pos->offsetGet(2), $palette[$state]]; } if(isset($compounds["size"])) { /** @var ListTag $list */ $list = $compounds["size"]; $this->axisVector = new Vector3($list->offsetGet(0), $list->offsetGet(1), $list->offsetGet(2)); } } Spoiler: NBT Structure After first test I've got this result.