mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-10-16 03:51:37 +00:00
Separate block legacy data upgrading from block deserialization
this commit provides a central place where all block data can go to be upgraded to the latest version (currently 1.19), irrespective of how old it is. Previously I had issues during debugging, because it wasn't possible to just upgrade a block without deserializing it into a Block object, which isn't currently supported for many blocks. This commit solves that problem by separating the upgrading from the deserialization.
This commit is contained in:
@@ -65,12 +65,9 @@ class FallingBlock extends Entity{
|
||||
public static function parseBlockNBT(BlockFactory $factory, CompoundTag $nbt) : Block{
|
||||
|
||||
//TODO: 1.8+ save format
|
||||
$blockDataUpgrader = GlobalBlockStateHandlers::getUpgrader();
|
||||
if(($fallingBlockTag = $nbt->getCompoundTag(self::TAG_FALLING_BLOCK)) !== null){
|
||||
try{
|
||||
$blockStateData = GlobalBlockStateHandlers::nbtToBlockStateData($fallingBlockTag);
|
||||
}catch(BlockStateDeserializeException $e){
|
||||
throw new SavedDataLoadingException($e->getMessage(), 0, $e);
|
||||
}
|
||||
$blockStateData = $blockDataUpgrader->upgradeBlockStateNbt($fallingBlockTag);
|
||||
}else{
|
||||
if(($tileIdTag = $nbt->getTag("TileID")) instanceof IntTag){
|
||||
$blockId = $tileIdTag->getValue();
|
||||
@@ -81,10 +78,10 @@ class FallingBlock extends Entity{
|
||||
}
|
||||
$damage = $nbt->getByte("Data", 0);
|
||||
|
||||
$blockStateData = GlobalBlockStateHandlers::getLegacyBlockStateMapper()->fromIntIdMeta($blockId, $damage);
|
||||
if($blockStateData === null){
|
||||
throw new SavedDataLoadingException("Invalid legacy falling block");
|
||||
}
|
||||
$blockStateData = $blockDataUpgrader->upgradeIntIdMeta($blockId, $damage);
|
||||
}
|
||||
if($blockStateData === null){
|
||||
throw new SavedDataLoadingException("Invalid legacy falling block");
|
||||
}
|
||||
|
||||
try{
|
||||
|
Reference in New Issue
Block a user