mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-08-19 17:40:38 +00:00
this is only used for saving entity data now, and its presence here is allowing plugin devs to keep abusing it.
73 lines
2.3 KiB
PHP
73 lines
2.3 KiB
PHP
<?php
|
|
|
|
/*
|
|
*
|
|
* ____ _ _ __ __ _ __ __ ____
|
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU Lesser General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* @author PocketMine Team
|
|
* @link http://www.pocketmine.net/
|
|
*
|
|
*
|
|
*/
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace pocketmine\entity;
|
|
|
|
use pocketmine\math\Vector3;
|
|
use pocketmine\nbt\NBT;
|
|
use pocketmine\nbt\tag\CompoundTag;
|
|
use pocketmine\nbt\tag\DoubleTag;
|
|
use pocketmine\nbt\tag\FloatTag;
|
|
use pocketmine\nbt\tag\ListTag;
|
|
use pocketmine\world\World;
|
|
use function count;
|
|
|
|
final class EntityDataHelper{
|
|
|
|
private function __construct(){
|
|
//NOOP
|
|
}
|
|
|
|
public static function parseLocation(CompoundTag $nbt, World $world) : Location{
|
|
$pos = self::parseVec3($nbt, "Pos", false);
|
|
|
|
$yawPitch = $nbt->getTag("Rotation");
|
|
if(!($yawPitch instanceof ListTag) or $yawPitch->getTagType() !== NBT::TAG_Float){
|
|
throw new \UnexpectedValueException("'Rotation' should be a List<Float>");
|
|
}
|
|
/** @var FloatTag[] $values */
|
|
$values = $yawPitch->getValue();
|
|
if(count($values) !== 2){
|
|
throw new \UnexpectedValueException("Expected exactly 2 entries for 'Rotation'");
|
|
}
|
|
|
|
return Location::fromObject($pos, $world, $values[0]->getValue(), $values[1]->getValue());
|
|
}
|
|
|
|
public static function parseVec3(CompoundTag $nbt, string $tagName, bool $optional) : Vector3{
|
|
$pos = $nbt->getTag($tagName);
|
|
if($pos === null and $optional){
|
|
return new Vector3(0, 0, 0);
|
|
}
|
|
if(!($pos instanceof ListTag) or $pos->getTagType() !== NBT::TAG_Double){
|
|
throw new \UnexpectedValueException("'$tagName' should be a List<Double>");
|
|
}
|
|
/** @var DoubleTag[] $values */
|
|
$values = $pos->getValue();
|
|
if(count($values) !== 3){
|
|
throw new \UnexpectedValueException("Expected exactly 3 entries in '$tagName' tag");
|
|
}
|
|
return new Vector3($values[0]->getValue(), $values[1]->getValue(), $values[2]->getValue());
|
|
}
|
|
}
|