mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-07-12 12:55:21 +00:00
BlockStateUpgrader: extract state remap to its own function
This commit is contained in:
parent
dbc7105e5b
commit
ac8dbf8640
@ -69,8 +69,42 @@ final class BlockStateUpgrader{
|
|||||||
//didn't always bump the blockstate version when changing it :(
|
//didn't always bump the blockstate version when changing it :(
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$newStateData = $this->applyStateRemapped($schema, $blockStateData);
|
||||||
|
if($newStateData !== null){
|
||||||
|
$blockStateData = $newStateData;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$oldName = $blockStateData->getName();
|
||||||
|
$newName = $schema->renamedIds[$oldName] ?? null;
|
||||||
|
|
||||||
|
$stateChanges = 0;
|
||||||
|
$states = $blockStateData->getStates();
|
||||||
|
|
||||||
|
$states = $this->applyPropertyAdded($schema, $oldName, $states, $stateChanges);
|
||||||
|
$states = $this->applyPropertyRemoved($schema, $oldName, $states, $stateChanges);
|
||||||
|
$states = $this->applyPropertyRenamedOrValueChanged($schema, $oldName, $states, $stateChanges);
|
||||||
|
$states = $this->applyPropertyValueChanged($schema, $oldName, $states, $stateChanges);
|
||||||
|
|
||||||
|
if($newName !== null || $stateChanges > 0){
|
||||||
|
$blockStateData = new BlockStateData($newName ?? $oldName, $states, $resultVersion);
|
||||||
|
//don't break out; we may need to further upgrade the state
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if($highestVersion > $version){
|
||||||
|
//always update the version number of the blockstate, even if it didn't change - this is needed for
|
||||||
|
//external tools
|
||||||
|
$blockStateData = new BlockStateData($blockStateData->getName(), $blockStateData->getStates(), $highestVersion);
|
||||||
|
}
|
||||||
|
return $blockStateData;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function applyStateRemapped(BlockStateUpgradeSchema $schema, BlockStateData $blockStateData) : ?BlockStateData{
|
||||||
$oldName = $blockStateData->getName();
|
$oldName = $blockStateData->getName();
|
||||||
$oldState = $blockStateData->getStates();
|
$oldState = $blockStateData->getStates();
|
||||||
|
|
||||||
if(isset($schema->remappedStates[$oldName])){
|
if(isset($schema->remappedStates[$oldName])){
|
||||||
foreach($schema->remappedStates[$oldName] as $remap){
|
foreach($schema->remappedStates[$oldName] as $remap){
|
||||||
if(count($remap->oldState) > count($oldState)){
|
if(count($remap->oldState) > count($oldState)){
|
||||||
@ -103,32 +137,11 @@ final class BlockStateUpgrader{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$blockStateData = new BlockStateData($newName, $newState, $resultVersion);
|
return new BlockStateData($newName, $newState, $schema->getVersionId());
|
||||||
continue 2; //try next schema
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$newName = $schema->renamedIds[$oldName] ?? null;
|
|
||||||
|
|
||||||
$stateChanges = 0;
|
|
||||||
$states = $blockStateData->getStates();
|
|
||||||
|
|
||||||
$states = $this->applyPropertyAdded($schema, $oldName, $states, $stateChanges);
|
|
||||||
$states = $this->applyPropertyRemoved($schema, $oldName, $states, $stateChanges);
|
|
||||||
$states = $this->applyPropertyRenamedOrValueChanged($schema, $oldName, $states, $stateChanges);
|
|
||||||
$states = $this->applyPropertyValueChanged($schema, $oldName, $states, $stateChanges);
|
|
||||||
|
|
||||||
if($newName !== null || $stateChanges > 0){
|
|
||||||
$blockStateData = new BlockStateData($newName ?? $oldName, $states, $resultVersion);
|
|
||||||
//don't break out; we may need to further upgrade the state
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if($highestVersion > $version){
|
return null;
|
||||||
//always update the version number of the blockstate, even if it didn't change - this is needed for
|
|
||||||
//external tools
|
|
||||||
$blockStateData = new BlockStateData($blockStateData->getName(), $blockStateData->getStates(), $highestVersion);
|
|
||||||
}
|
|
||||||
return $blockStateData;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user