Rename RuntimeBlockMapping -> BlockTranslator

This commit is contained in:
Dylan K. Taylor 2023-05-03 22:18:27 +01:00
parent 01f340985a
commit 32e6fdd95a
No known key found for this signature in database
GPG Key ID: 8927471A91CAFD3D
6 changed files with 23 additions and 23 deletions

View File

@ -32,7 +32,7 @@ use pocketmine\utils\AssumptionFailedError;
/** /**
* @internal * @internal
*/ */
final class RuntimeBlockMapping{ final class BlockTranslator{
/** /**
* @var int[] * @var int[]
* @phpstan-var array<int, int> * @phpstan-var array<int, int>

View File

@ -58,7 +58,7 @@ class TypeConverter{
private const RECIPE_INPUT_WILDCARD_META = 0x7fff; private const RECIPE_INPUT_WILDCARD_META = 0x7fff;
private BlockItemIdMap $blockItemIdMap; private BlockItemIdMap $blockItemIdMap;
private RuntimeBlockMapping $blockTranslator; private BlockTranslator $blockTranslator;
private ItemTranslator $itemTranslator; private ItemTranslator $itemTranslator;
private ItemTypeDictionary $itemTypeDictionary; private ItemTypeDictionary $itemTypeDictionary;
private int $shieldRuntimeId; private int $shieldRuntimeId;
@ -69,7 +69,7 @@ class TypeConverter{
$canonicalBlockStatesRaw = Filesystem::fileGetContents(BedrockDataFiles::CANONICAL_BLOCK_STATES_NBT); $canonicalBlockStatesRaw = Filesystem::fileGetContents(BedrockDataFiles::CANONICAL_BLOCK_STATES_NBT);
$metaMappingRaw = Filesystem::fileGetContents(BedrockDataFiles::BLOCK_STATE_META_MAP_JSON); $metaMappingRaw = Filesystem::fileGetContents(BedrockDataFiles::BLOCK_STATE_META_MAP_JSON);
$this->blockTranslator = new RuntimeBlockMapping( $this->blockTranslator = new BlockTranslator(
BlockStateDictionary::loadFromString($canonicalBlockStatesRaw, $metaMappingRaw), BlockStateDictionary::loadFromString($canonicalBlockStatesRaw, $metaMappingRaw),
GlobalBlockStateHandlers::getSerializer() GlobalBlockStateHandlers::getSerializer()
); );
@ -85,7 +85,7 @@ class TypeConverter{
); );
} }
public function getBlockTranslator() : RuntimeBlockMapping{ return $this->blockTranslator; } public function getBlockTranslator() : BlockTranslator{ return $this->blockTranslator; }
public function getItemTypeDictionary() : ItemTypeDictionary{ return $this->itemTypeDictionary; } public function getItemTypeDictionary() : ItemTypeDictionary{ return $this->itemTypeDictionary; }

View File

@ -27,7 +27,7 @@ use pocketmine\block\tile\Spawnable;
use pocketmine\data\bedrock\BiomeIds; use pocketmine\data\bedrock\BiomeIds;
use pocketmine\data\bedrock\LegacyBiomeIdToStringIdMap; use pocketmine\data\bedrock\LegacyBiomeIdToStringIdMap;
use pocketmine\nbt\TreeRoot; use pocketmine\nbt\TreeRoot;
use pocketmine\network\mcpe\convert\RuntimeBlockMapping; use pocketmine\network\mcpe\convert\BlockTranslator;
use pocketmine\network\mcpe\protocol\serializer\NetworkNbtSerializer; use pocketmine\network\mcpe\protocol\serializer\NetworkNbtSerializer;
use pocketmine\network\mcpe\protocol\serializer\PacketSerializer; use pocketmine\network\mcpe\protocol\serializer\PacketSerializer;
use pocketmine\network\mcpe\protocol\serializer\PacketSerializerContext; use pocketmine\network\mcpe\protocol\serializer\PacketSerializerContext;
@ -58,13 +58,13 @@ final class ChunkSerializer{
return 0; return 0;
} }
public static function serializeFullChunk(Chunk $chunk, RuntimeBlockMapping $blockMapper, PacketSerializerContext $encoderContext, ?string $tiles = null) : string{ public static function serializeFullChunk(Chunk $chunk, BlockTranslator $blockTranslator, PacketSerializerContext $encoderContext, ?string $tiles = null) : string{
$stream = PacketSerializer::encoder($encoderContext); $stream = PacketSerializer::encoder($encoderContext);
$subChunkCount = self::getSubChunkCount($chunk); $subChunkCount = self::getSubChunkCount($chunk);
$writtenCount = 0; $writtenCount = 0;
for($y = Chunk::MIN_SUBCHUNK_INDEX; $writtenCount < $subChunkCount; ++$y, ++$writtenCount){ for($y = Chunk::MIN_SUBCHUNK_INDEX; $writtenCount < $subChunkCount; ++$y, ++$writtenCount){
self::serializeSubChunk($chunk->getSubChunk($y), $blockMapper, $stream, false); self::serializeSubChunk($chunk->getSubChunk($y), $blockTranslator, $stream, false);
} }
$biomeIdMap = LegacyBiomeIdToStringIdMap::getInstance(); $biomeIdMap = LegacyBiomeIdToStringIdMap::getInstance();
@ -84,13 +84,13 @@ final class ChunkSerializer{
return $stream->getBuffer(); return $stream->getBuffer();
} }
public static function serializeSubChunk(SubChunk $subChunk, RuntimeBlockMapping $blockMapper, PacketSerializer $stream, bool $persistentBlockStates) : void{ public static function serializeSubChunk(SubChunk $subChunk, BlockTranslator $blockTranslator, PacketSerializer $stream, bool $persistentBlockStates) : void{
$layers = $subChunk->getBlockLayers(); $layers = $subChunk->getBlockLayers();
$stream->putByte(8); //version $stream->putByte(8); //version
$stream->putByte(count($layers)); $stream->putByte(count($layers));
$blockStateDictionary = $blockMapper->getBlockStateDictionary(); $blockStateDictionary = $blockTranslator->getBlockStateDictionary();
foreach($layers as $blocks){ foreach($layers as $blocks){
$bitsPerBlock = $blocks->getBitsPerBlock(); $bitsPerBlock = $blocks->getBitsPerBlock();
@ -109,16 +109,16 @@ final class ChunkSerializer{
$nbtSerializer = new NetworkNbtSerializer(); $nbtSerializer = new NetworkNbtSerializer();
foreach($palette as $p){ foreach($palette as $p){
//TODO: introduce a binary cache for this //TODO: introduce a binary cache for this
$state = $blockStateDictionary->getDataFromStateId($blockMapper->toRuntimeId($p)); $state = $blockStateDictionary->getDataFromStateId($blockTranslator->toRuntimeId($p));
if($state === null){ if($state === null){
$state = $blockMapper->getFallbackStateData(); $state = $blockTranslator->getFallbackStateData();
} }
$stream->put($nbtSerializer->write(new TreeRoot($state->toNbt()))); $stream->put($nbtSerializer->write(new TreeRoot($state->toNbt())));
} }
}else{ }else{
foreach($palette as $p){ foreach($palette as $p){
$stream->put(Binary::writeUnsignedVarInt($blockMapper->toRuntimeId($p) << 1)); $stream->put(Binary::writeUnsignedVarInt($blockTranslator->toRuntimeId($p) << 1));
} }
} }
} }

View File

@ -1062,7 +1062,7 @@ class World implements ChunkManager{
public function createBlockUpdatePackets(array $blocks) : array{ public function createBlockUpdatePackets(array $blocks) : array{
$packets = []; $packets = [];
$blockMapping = TypeConverter::getInstance()->getBlockTranslator(); $blockTranslator = TypeConverter::getInstance()->getBlockTranslator();
foreach($blocks as $b){ foreach($blocks as $b){
if(!($b instanceof Vector3)){ if(!($b instanceof Vector3)){
@ -1074,7 +1074,7 @@ class World implements ChunkManager{
$tile = $this->getTileAt($b->x, $b->y, $b->z); $tile = $this->getTileAt($b->x, $b->y, $b->z);
if($tile instanceof Spawnable && count($fakeStateProperties = $tile->getRenderUpdateBugWorkaroundStateProperties($fullBlock)) > 0){ if($tile instanceof Spawnable && count($fakeStateProperties = $tile->getRenderUpdateBugWorkaroundStateProperties($fullBlock)) > 0){
$originalStateData = $blockMapping->toStateData($fullBlock->getStateId()); $originalStateData = $blockTranslator->toStateData($fullBlock->getStateId());
$fakeStateData = new BlockStateData( $fakeStateData = new BlockStateData(
$originalStateData->getName(), $originalStateData->getName(),
array_merge($originalStateData->getStates(), $fakeStateProperties), array_merge($originalStateData->getStates(), $fakeStateProperties),
@ -1082,14 +1082,14 @@ class World implements ChunkManager{
); );
$packets[] = UpdateBlockPacket::create( $packets[] = UpdateBlockPacket::create(
$blockPosition, $blockPosition,
$blockMapping->getBlockStateDictionary()->lookupStateIdFromData($fakeStateData) ?? throw new AssumptionFailedError("Unmapped fake blockstate data: " . $fakeStateData->toNbt()), $blockTranslator->getBlockStateDictionary()->lookupStateIdFromData($fakeStateData) ?? throw new AssumptionFailedError("Unmapped fake blockstate data: " . $fakeStateData->toNbt()),
UpdateBlockPacket::FLAG_NETWORK, UpdateBlockPacket::FLAG_NETWORK,
UpdateBlockPacket::DATA_LAYER_NORMAL UpdateBlockPacket::DATA_LAYER_NORMAL
); );
} }
$packets[] = UpdateBlockPacket::create( $packets[] = UpdateBlockPacket::create(
$blockPosition, $blockPosition,
$blockMapping->toRuntimeId($fullBlock->getStateId()), $blockTranslator->toRuntimeId($fullBlock->getStateId()),
UpdateBlockPacket::FLAG_NETWORK, UpdateBlockPacket::FLAG_NETWORK,
UpdateBlockPacket::DATA_LAYER_NORMAL UpdateBlockPacket::DATA_LAYER_NORMAL
); );

View File

@ -26,7 +26,7 @@ namespace pocketmine\network\mcpe\convert;
use PHPUnit\Framework\TestCase; use PHPUnit\Framework\TestCase;
use pocketmine\block\RuntimeBlockStateRegistry; use pocketmine\block\RuntimeBlockStateRegistry;
class RuntimeBlockMappingTest extends TestCase{ class BlockTranslatorTest extends TestCase{
/** /**
* @doesNotPerformAssertions * @doesNotPerformAssertions

View File

@ -39,7 +39,7 @@ use pocketmine\nbt\tag\CompoundTag;
use pocketmine\nbt\tag\ListTag; use pocketmine\nbt\tag\ListTag;
use pocketmine\nbt\TreeRoot; use pocketmine\nbt\TreeRoot;
use pocketmine\network\mcpe\convert\BlockStateDictionary; use pocketmine\network\mcpe\convert\BlockStateDictionary;
use pocketmine\network\mcpe\convert\RuntimeBlockMapping; use pocketmine\network\mcpe\convert\BlockTranslator;
use pocketmine\network\mcpe\handler\PacketHandler; use pocketmine\network\mcpe\handler\PacketHandler;
use pocketmine\network\mcpe\protocol\AvailableActorIdentifiersPacket; use pocketmine\network\mcpe\protocol\AvailableActorIdentifiersPacket;
use pocketmine\network\mcpe\protocol\BiomeDefinitionListPacket; use pocketmine\network\mcpe\protocol\BiomeDefinitionListPacket;
@ -109,10 +109,10 @@ require dirname(__DIR__) . '/vendor/autoload.php';
class ParserPacketHandler extends PacketHandler{ class ParserPacketHandler extends PacketHandler{
public ?ItemTypeDictionary $itemTypeDictionary = null; public ?ItemTypeDictionary $itemTypeDictionary = null;
private RuntimeBlockMapping $blockMapping; private BlockTranslator $blockTranslator;
public function __construct(private string $bedrockDataPath){ public function __construct(private string $bedrockDataPath){
$this->blockMapping = new RuntimeBlockMapping( $this->blockTranslator = new BlockTranslator(
BlockStateDictionary::loadFromString( BlockStateDictionary::loadFromString(
Filesystem::fileGetContents(Path::join($this->bedrockDataPath, "canonical_block_states.nbt")), Filesystem::fileGetContents(Path::join($this->bedrockDataPath, "canonical_block_states.nbt")),
Filesystem::fileGetContents(Path::join($this->bedrockDataPath, "block_state_meta_map.json")), Filesystem::fileGetContents(Path::join($this->bedrockDataPath, "block_state_meta_map.json")),
@ -150,7 +150,7 @@ class ParserPacketHandler extends PacketHandler{
if($meta !== 0){ if($meta !== 0){
throw new PacketHandlingException("Unexpected non-zero blockitem meta"); throw new PacketHandlingException("Unexpected non-zero blockitem meta");
} }
$blockState = $this->blockMapping->getBlockStateDictionary()->getDataFromStateId($itemStack->getBlockRuntimeId()) ?? null; $blockState = $this->blockTranslator->getBlockStateDictionary()->getDataFromStateId($itemStack->getBlockRuntimeId()) ?? null;
if($blockState === null){ if($blockState === null){
throw new PacketHandlingException("Unmapped blockstate ID " . $itemStack->getBlockRuntimeId()); throw new PacketHandlingException("Unmapped blockstate ID " . $itemStack->getBlockRuntimeId());
} }
@ -268,9 +268,9 @@ class ParserPacketHandler extends PacketHandler{
} }
$meta = $descriptor->getMeta(); $meta = $descriptor->getMeta();
if($meta !== 32767){ if($meta !== 32767){
$blockStateId = $this->blockMapping->getBlockStateDictionary()->lookupStateIdFromIdMeta($data->name, $meta); $blockStateId = $this->blockTranslator->getBlockStateDictionary()->lookupStateIdFromIdMeta($data->name, $meta);
if($blockStateId !== null){ if($blockStateId !== null){
$blockState = $this->blockMapping->getBlockStateDictionary()->getDataFromStateId($blockStateId); $blockState = $this->blockTranslator->getBlockStateDictionary()->getDataFromStateId($blockStateId);
if($blockState !== null && count($blockState->getStates()) > 0){ if($blockState !== null && count($blockState->getStates()) > 0){
$data->block_states = self::blockStatePropertiesToString($blockState); $data->block_states = self::blockStatePropertiesToString($blockState);
} }