mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-04-22 08:44:01 +00:00
Allow limiting max schema ID loaded for item ID upgrading
This commit is contained in:
parent
0e15a8698a
commit
e9b994cbc3
@ -64,10 +64,10 @@ final class ItemDataUpgrader{
|
||||
}
|
||||
|
||||
public function addIdMetaUpgradeSchema(ItemIdMetaUpgradeSchema $schema) : void{
|
||||
if(isset($this->idMetaUpgradeSchemas[$schema->getPriority()])){
|
||||
throw new \InvalidArgumentException("Already have a schema with priority " . $schema->getPriority());
|
||||
if(isset($this->idMetaUpgradeSchemas[$schema->getSchemaId()])){
|
||||
throw new \InvalidArgumentException("Already have a schema with priority " . $schema->getSchemaId());
|
||||
}
|
||||
$this->idMetaUpgradeSchemas[$schema->getPriority()] = $schema;
|
||||
$this->idMetaUpgradeSchemas[$schema->getSchemaId()] = $schema;
|
||||
ksort($this->idMetaUpgradeSchemas, SORT_NUMERIC);
|
||||
}
|
||||
|
||||
|
@ -36,10 +36,10 @@ final class ItemIdMetaUpgradeSchema{
|
||||
public function __construct(
|
||||
private array $renamedIds,
|
||||
private array $remappedMetas,
|
||||
private int $priority
|
||||
private int $schemaId
|
||||
){}
|
||||
|
||||
public function getPriority() : int{ return $this->priority; }
|
||||
public function getSchemaId() : int{ return $this->schemaId; }
|
||||
|
||||
public function renameId(string $id) : ?string{
|
||||
return $this->renamedIds[mb_strtolower($id, 'US-ASCII')] ?? null;
|
||||
|
@ -39,7 +39,7 @@ final class ItemIdMetaUpgradeSchemaUtils{
|
||||
* @return ItemIdMetaUpgradeSchema[]
|
||||
* @phpstan-return array<int, ItemIdMetaUpgradeSchema>
|
||||
*/
|
||||
public static function loadSchemas(string $path) : array{
|
||||
public static function loadSchemas(string $path, int $maxSchemaId) : array{
|
||||
$iterator = new \RegexIterator(
|
||||
new \FilesystemIterator(
|
||||
$path,
|
||||
@ -55,26 +55,29 @@ final class ItemIdMetaUpgradeSchemaUtils{
|
||||
/** @var string[] $matches */
|
||||
foreach($iterator as $matches){
|
||||
$filename = $matches[0];
|
||||
$priority = (int) $matches[1];
|
||||
$schemaId = (int) $matches[1];
|
||||
if($schemaId > $maxSchemaId){
|
||||
continue;
|
||||
}
|
||||
|
||||
$fullPath = Path::join($path, $filename);
|
||||
|
||||
$raw = Filesystem::fileGetContents($fullPath);
|
||||
|
||||
try{
|
||||
$schema = self::loadSchemaFromString($raw, $priority);
|
||||
$schema = self::loadSchemaFromString($raw, $schemaId);
|
||||
}catch(\RuntimeException $e){
|
||||
throw new \RuntimeException("Loading schema file $fullPath: " . $e->getMessage(), 0, $e);
|
||||
}
|
||||
|
||||
$result[$priority] = $schema;
|
||||
$result[$schemaId] = $schema;
|
||||
}
|
||||
|
||||
ksort($result, SORT_NUMERIC);
|
||||
return $result;
|
||||
}
|
||||
|
||||
public static function loadSchemaFromString(string $raw, int $priority) : ItemIdMetaUpgradeSchema{
|
||||
public static function loadSchemaFromString(string $raw, int $schemaId) : ItemIdMetaUpgradeSchema{
|
||||
try{
|
||||
$json = json_decode($raw, false, flags: JSON_THROW_ON_ERROR);
|
||||
}catch(\JsonException $e){
|
||||
@ -91,6 +94,6 @@ final class ItemIdMetaUpgradeSchemaUtils{
|
||||
throw new \RuntimeException($e->getMessage(), 0, $e);
|
||||
}
|
||||
|
||||
return new ItemIdMetaUpgradeSchema($model->renamedIds, $model->remappedMetas, $priority);
|
||||
return new ItemIdMetaUpgradeSchema($model->renamedIds, $model->remappedMetas, $schemaId);
|
||||
}
|
||||
}
|
||||
|
@ -33,6 +33,7 @@ use Symfony\Component\Filesystem\Path;
|
||||
use const pocketmine\BEDROCK_ITEM_UPGRADE_SCHEMA_PATH;
|
||||
|
||||
final class GlobalItemDataHandlers{
|
||||
public const MAX_ITEM_ID_UPGRADE_SCHEMA_ID = 81; //0081_1.18.30_to_1.19.30.34_beta.json
|
||||
|
||||
private static ?ItemSerializer $itemSerializer = null;
|
||||
|
||||
@ -53,7 +54,7 @@ final class GlobalItemDataHandlers{
|
||||
LegacyItemIdToStringIdMap::getInstance(),
|
||||
R12ItemIdToBlockIdMap::getInstance(),
|
||||
GlobalBlockStateHandlers::getUpgrader(),
|
||||
ItemIdMetaUpgradeSchemaUtils::loadSchemas(Path::join(BEDROCK_ITEM_UPGRADE_SCHEMA_PATH, 'id_meta_upgrade_schema'))
|
||||
ItemIdMetaUpgradeSchemaUtils::loadSchemas(Path::join(BEDROCK_ITEM_UPGRADE_SCHEMA_PATH, 'id_meta_upgrade_schema'), self::MAX_ITEM_ID_UPGRADE_SCHEMA_ID)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user