mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-04-18 15:05:56 +00:00
Reduce the size of ItemStackData when json-encoded
Many items need only the name, so we can just place the name directly in this case. JsonMapper supports hydrating the object directly from the string using the pre-existing constructor for this.
This commit is contained in:
parent
67272f8f2b
commit
becee92e7d
@ -162,7 +162,7 @@ final class CraftingManagerFromDataHelper{
|
||||
}
|
||||
|
||||
$mapper = new \JsonMapper();
|
||||
$mapper->bStrictObjectTypeChecking = true;
|
||||
$mapper->bStrictObjectTypeChecking = false; //to allow hydrating ItemStackData - since this is only used for offline data it's safe
|
||||
$mapper->bExceptionOnUndefinedProperty = true;
|
||||
$mapper->bExceptionOnMissingData = true;
|
||||
|
||||
|
@ -23,7 +23,9 @@ declare(strict_types=1);
|
||||
|
||||
namespace pocketmine\crafting\json;
|
||||
|
||||
final class ItemStackData{
|
||||
use function count;
|
||||
|
||||
final class ItemStackData implements \JsonSerializable{
|
||||
|
||||
/** @required */
|
||||
public string $name;
|
||||
@ -40,4 +42,15 @@ final class ItemStackData{
|
||||
public function __construct(string $name){
|
||||
$this->name = $name;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return mixed[]|string
|
||||
*/
|
||||
public function jsonSerialize() : array|string{
|
||||
$result = (array) $this;
|
||||
if(count($result) === 1 && isset($result["name"])){
|
||||
return $this->name;
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
|
@ -108,6 +108,12 @@ parameters:
|
||||
count: 1
|
||||
path: ../../../src/crafting/ShapedRecipe.php
|
||||
|
||||
-
|
||||
message: '#^Offset ''name'' on \*NEVER\* in isset\(\) always exists and is not nullable\.$#'
|
||||
identifier: isset.offset
|
||||
count: 1
|
||||
path: ../../../src/crafting/json/ItemStackData.php
|
||||
|
||||
-
|
||||
message: '#^Property pocketmine\\crash\\CrashDumpData\:\:\$parameters \(list\<string\>\) does not accept array\.$#'
|
||||
identifier: assign.propertyType
|
||||
|
@ -207,11 +207,18 @@ class ParserPacketHandler extends PacketHandler{
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return mixed[]
|
||||
*/
|
||||
private static function objectToOrderedArray(object $object) : array{
|
||||
$result = (array) ($object instanceof \JsonSerializable ? $object->jsonSerialize() : $object);
|
||||
private static function objectToOrderedArray(object $object) : mixed{
|
||||
if($object instanceof \JsonSerializable){
|
||||
$result = $object->jsonSerialize();
|
||||
if(is_object($result)){
|
||||
$result = (array) $result;
|
||||
}elseif(!is_array($result)){
|
||||
return $result;
|
||||
}
|
||||
}else{
|
||||
$result = (array) $object;
|
||||
}
|
||||
|
||||
ksort($result, SORT_STRING);
|
||||
|
||||
foreach(Utils::promoteKeys($result) as $property => $value){
|
||||
@ -278,7 +285,7 @@ class ParserPacketHandler extends PacketHandler{
|
||||
file_put_contents($this->bedrockDataPath . '/required_item_list.json', json_encode($table, JSON_PRETTY_PRINT) . "\n");
|
||||
|
||||
echo "updating item registry\n";
|
||||
$items = array_map(function(ItemTypeEntry $entry) : array{
|
||||
$items = array_map(function(ItemTypeEntry $entry) : mixed{
|
||||
return self::objectToOrderedArray($entry);
|
||||
}, $packet->getEntries());
|
||||
file_put_contents($this->bedrockDataPath . '/item_registry.json', json_encode($items, JSON_PRETTY_PRINT) . "\n");
|
||||
|
Loading…
x
Reference in New Issue
Block a user