EntityFactory: drop automatic provisioning of short class name as save ID

This commit is contained in:
Dylan K. Taylor 2020-06-19 21:56:50 +01:00
parent 012acdd4cb
commit 1a3445f4b5

View File

@ -55,7 +55,6 @@ use pocketmine\utils\SingletonTrait;
use pocketmine\utils\Utils; use pocketmine\utils\Utils;
use pocketmine\world\World; use pocketmine\world\World;
use function count; use function count;
use function in_array;
use function reset; use function reset;
/** /**
@ -190,26 +189,24 @@ final class EntityFactory{
* *
* @param string $className Class that extends Entity * @param string $className Class that extends Entity
* @param \Closure $creationFunc * @param \Closure $creationFunc
* @param string[] $saveNames An array of save names which this entity might be saved under. Defaults to the short name of the class itself if empty. * @param string[] $saveNames An array of save names which this entity might be saved under.
* @phpstan-param class-string<Entity> $className * @phpstan-param class-string<Entity> $className
* @phpstan-param list<string> $saveNames
* @phpstan-param \Closure(World $world, CompoundTag $nbt) : Entity $creationFunc * @phpstan-param \Closure(World $world, CompoundTag $nbt) : Entity $creationFunc
* *
* NOTE: The first save name in the $saveNames array will be used when saving the entity to disk. The reflection * NOTE: The first save name in the $saveNames array will be used when saving the entity to disk.
* name of the class will be appended to the end and only used if no other save names are specified.
* *
* @throws \InvalidArgumentException * @throws \InvalidArgumentException
*/ */
public function register(string $className, \Closure $creationFunc, array $saveNames, ?int $legacyMcpeSaveId = null) : void{ public function register(string $className, \Closure $creationFunc, array $saveNames, ?int $legacyMcpeSaveId = null) : void{
if(count($saveNames) === 0){
throw new \InvalidArgumentException("At least one save name must be provided");
}
Utils::testValidInstance($className, Entity::class); Utils::testValidInstance($className, Entity::class);
self::validateCreationFunc($className, $creationFunc); self::validateCreationFunc($className, $creationFunc);
$this->creationFuncs[$className] = $creationFunc; $this->creationFuncs[$className] = $creationFunc;
$shortName = (new \ReflectionClass($className))->getShortName();
if(!in_array($shortName, $saveNames, true)){
$saveNames[] = $shortName;
}
foreach($saveNames as $name){ foreach($saveNames as $name){
$this->knownEntities[$name] = $className; $this->knownEntities[$name] = $className;
} }