Inline EntityDataHelper::createBaseNBT()

this is only used for saving entity data now, and its presence here is allowing plugin devs to keep abusing it.
This commit is contained in:
Dylan K. Taylor 2021-06-19 18:45:21 +01:00
parent 745f455bd2
commit 11b483f2dc
No known key found for this signature in database
GPG Key ID: 8927471A91CAFD3D
2 changed files with 18 additions and 22 deletions

View File

@ -40,6 +40,9 @@ use pocketmine\math\Facing;
use pocketmine\math\Vector2;
use pocketmine\math\Vector3;
use pocketmine\nbt\tag\CompoundTag;
use pocketmine\nbt\tag\DoubleTag;
use pocketmine\nbt\tag\FloatTag;
use pocketmine\nbt\tag\ListTag;
use pocketmine\nbt\tag\StringTag;
use pocketmine\network\mcpe\protocol\AddActorPacket;
use pocketmine\network\mcpe\protocol\MoveActorAbsolutePacket;
@ -459,7 +462,21 @@ abstract class Entity{
}
public function saveNBT() : CompoundTag{
$nbt = EntityDataHelper::createBaseNBT($this->location, $this->motion, $this->location->yaw, $this->location->pitch);
$nbt = CompoundTag::create()
->setTag("Pos", new ListTag([
new DoubleTag($this->location->x),
new DoubleTag($this->location->y),
new DoubleTag($this->location->z)
]))
->setTag("Motion", new ListTag([
new DoubleTag($this->motion->x),
new DoubleTag($this->motion->y),
new DoubleTag($this->motion->z)
]))
->setTag("Rotation", new ListTag([
new FloatTag($this->location->yaw),
new FloatTag($this->location->pitch)
]));
if(!($this instanceof Player)){
EntityFactory::getInstance()->injectSaveId(get_class($this), $nbt);

View File

@ -69,25 +69,4 @@ final class EntityDataHelper{
}
return new Vector3($values[0]->getValue(), $values[1]->getValue(), $values[2]->getValue());
}
/**
* Helper function which creates minimal NBT needed to spawn an entity.
*/
public static function createBaseNBT(Vector3 $pos, ?Vector3 $motion = null, float $yaw = 0.0, float $pitch = 0.0) : CompoundTag{
return CompoundTag::create()
->setTag("Pos", new ListTag([
new DoubleTag($pos->x),
new DoubleTag($pos->y),
new DoubleTag($pos->z)
]))
->setTag("Motion", new ListTag([
new DoubleTag($motion !== null ? $motion->x : 0.0),
new DoubleTag($motion !== null ? $motion->y : 0.0),
new DoubleTag($motion !== null ? $motion->z : 0.0)
]))
->setTag("Rotation", new ListTag([
new FloatTag($yaw),
new FloatTag($pitch)
]));
}
}