mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-06-07 20:28:31 +00:00
LegacyStringToItemParser: bypass ItemFactory, use GlobalItemDataHandlers directly
This commit is contained in:
parent
2cb722b674
commit
ce6b09291a
@ -23,10 +23,14 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\item;
|
namespace pocketmine\item;
|
||||||
|
|
||||||
|
use pocketmine\data\bedrock\item\ItemDeserializer;
|
||||||
|
use pocketmine\data\bedrock\item\ItemTypeDeserializeException;
|
||||||
|
use pocketmine\data\bedrock\item\upgrade\ItemDataUpgrader;
|
||||||
use pocketmine\data\SavedDataLoadingException;
|
use pocketmine\data\SavedDataLoadingException;
|
||||||
use pocketmine\utils\AssumptionFailedError;
|
use pocketmine\utils\AssumptionFailedError;
|
||||||
use pocketmine\utils\SingletonTrait;
|
use pocketmine\utils\SingletonTrait;
|
||||||
use pocketmine\utils\Utils;
|
use pocketmine\utils\Utils;
|
||||||
|
use pocketmine\world\format\io\GlobalItemDataHandlers;
|
||||||
use Webmozart\PathUtil\Path;
|
use Webmozart\PathUtil\Path;
|
||||||
use function explode;
|
use function explode;
|
||||||
use function file_get_contents;
|
use function file_get_contents;
|
||||||
@ -52,7 +56,10 @@ final class LegacyStringToItemParser{
|
|||||||
use SingletonTrait;
|
use SingletonTrait;
|
||||||
|
|
||||||
private static function make() : self{
|
private static function make() : self{
|
||||||
$result = new self(ItemFactory::getInstance());
|
$result = new self(
|
||||||
|
GlobalItemDataHandlers::getUpgrader(),
|
||||||
|
GlobalItemDataHandlers::getDeserializer()
|
||||||
|
);
|
||||||
|
|
||||||
$mappingsRaw = Utils::assumeNotFalse(@file_get_contents(Path::join(\pocketmine\RESOURCE_PATH, 'item_from_string_bc_map.json')), "Missing required resource file");
|
$mappingsRaw = Utils::assumeNotFalse(@file_get_contents(Path::join(\pocketmine\RESOURCE_PATH, 'item_from_string_bc_map.json')), "Missing required resource file");
|
||||||
|
|
||||||
@ -73,7 +80,10 @@ final class LegacyStringToItemParser{
|
|||||||
*/
|
*/
|
||||||
private array $map = [];
|
private array $map = [];
|
||||||
|
|
||||||
public function __construct(private ItemFactory $itemFactory){}
|
public function __construct(
|
||||||
|
private ItemDataUpgrader $itemDataUpgrader,
|
||||||
|
private ItemDeserializer $itemDeserializer
|
||||||
|
){}
|
||||||
|
|
||||||
public function addMapping(string $alias, int $id) : void{
|
public function addMapping(string $alias, int $id) : void{
|
||||||
$this->map[$alias] = $id;
|
$this->map[$alias] = $id;
|
||||||
@ -109,17 +119,21 @@ final class LegacyStringToItemParser{
|
|||||||
throw new LegacyStringToItemParserException("Unable to parse \"" . $b[1] . "\" from \"" . $input . "\" as a valid meta value");
|
throw new LegacyStringToItemParserException("Unable to parse \"" . $b[1] . "\" from \"" . $input . "\" as a valid meta value");
|
||||||
}
|
}
|
||||||
|
|
||||||
if(isset($this->map[strtolower($b[0])])){
|
$legacyId = $this->map[strtolower($b[0])] ?? null;
|
||||||
try{
|
if($legacyId === null){
|
||||||
$item = $this->itemFactory->get($this->map[strtolower($b[0])], $meta);
|
throw new LegacyStringToItemParserException("Unable to resolve \"" . $input . "\" to a valid item");
|
||||||
}catch(SavedDataLoadingException $e){
|
|
||||||
throw new LegacyStringToItemParserException($e->getMessage(), 0, $e);
|
|
||||||
}
|
}
|
||||||
}else{
|
try{
|
||||||
|
$itemData = $this->itemDataUpgrader->upgradeItemTypeDataInt($legacyId, $meta, 1, null);
|
||||||
|
}catch(SavedDataLoadingException){
|
||||||
throw new LegacyStringToItemParserException("Unable to resolve \"" . $input . "\" to a valid item");
|
throw new LegacyStringToItemParserException("Unable to resolve \"" . $input . "\" to a valid item");
|
||||||
}
|
}
|
||||||
|
|
||||||
return $item;
|
try{
|
||||||
|
return $this->itemDeserializer->deserializeStack($itemData);
|
||||||
|
}catch(ItemTypeDeserializeException $e){
|
||||||
|
throw new LegacyStringToItemParserException($e->getMessage(), 0, $e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function reprocess(string $input) : string{
|
protected function reprocess(string $input) : string{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user