mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-05-15 18:29:46 +00:00
Standardised attributes encoding
This commit is contained in:
parent
713f3facf9
commit
c51c8ae700
@ -57,13 +57,7 @@ class AddEntityPacket extends DataPacket{
|
|||||||
$this->putVector3f($this->speedX, $this->speedY, $this->speedZ);
|
$this->putVector3f($this->speedX, $this->speedY, $this->speedZ);
|
||||||
$this->putLFloat($this->pitch);
|
$this->putLFloat($this->pitch);
|
||||||
$this->putLFloat($this->yaw);
|
$this->putLFloat($this->yaw);
|
||||||
$this->putUnsignedVarInt(count($this->attributes));
|
$this->putAttributeList(...$this->attributes);
|
||||||
foreach($this->attributes as $entry){
|
|
||||||
$this->putString($entry->getName());
|
|
||||||
$this->putLFloat($entry->getMinValue());
|
|
||||||
$this->putLFloat($entry->getValue());
|
|
||||||
$this->putLFloat($entry->getMaxValue());
|
|
||||||
}
|
|
||||||
$this->putEntityMetadata($this->metadata);
|
$this->putEntityMetadata($this->metadata);
|
||||||
$this->putUnsignedVarInt(count($this->links));
|
$this->putUnsignedVarInt(count($this->links));
|
||||||
foreach($this->links as $link){
|
foreach($this->links as $link){
|
||||||
|
@ -23,6 +23,7 @@ namespace pocketmine\network\mcpe\protocol;
|
|||||||
|
|
||||||
#include <rules/DataPacket.h>
|
#include <rules/DataPacket.h>
|
||||||
|
|
||||||
|
use pocketmine\entity\Attribute;
|
||||||
use pocketmine\entity\Entity;
|
use pocketmine\entity\Entity;
|
||||||
use pocketmine\item\Item;
|
use pocketmine\item\Item;
|
||||||
use pocketmine\network\mcpe\NetworkSession;
|
use pocketmine\network\mcpe\NetworkSession;
|
||||||
@ -201,6 +202,54 @@ abstract class DataPacket extends BinaryStream{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reads a list of Attributes from the stream.
|
||||||
|
* @return Attribute[]
|
||||||
|
*
|
||||||
|
* @throws \UnexpectedValueException if reading an attribute with an unrecognized name
|
||||||
|
*/
|
||||||
|
public function getAttributeList() : array{
|
||||||
|
$list = [];
|
||||||
|
$count = $this->getUnsignedVarInt();
|
||||||
|
|
||||||
|
for($i = 0; $i < $count; ++$i){
|
||||||
|
$min = $this->getLFloat();
|
||||||
|
$max = $this->getLFloat();
|
||||||
|
$current = $this->getLFloat();
|
||||||
|
$default = $this->getLFloat();
|
||||||
|
$name = $this->getString();
|
||||||
|
|
||||||
|
$attr = Attribute::getAttributeByName($name);
|
||||||
|
if($attr !== null){
|
||||||
|
$attr->setMinValue($min);
|
||||||
|
$attr->setMaxValue($max);
|
||||||
|
$attr->setValue($current);
|
||||||
|
$attr->setDefaultValue($default);
|
||||||
|
|
||||||
|
$list[] = $attr;
|
||||||
|
}else{
|
||||||
|
throw new \UnexpectedValueException("Unknown attribute type \"$name\"");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $list;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Writes a list of Attributes to the packet buffer using the standard format.
|
||||||
|
* @param Attribute[] ...$attributes
|
||||||
|
*/
|
||||||
|
public function putAttributeList(Attribute ...$attributes){
|
||||||
|
$this->putUnsignedVarInt(count($attributes));
|
||||||
|
foreach($attributes as $attribute){
|
||||||
|
$this->putLFloat($attribute->getMinValue());
|
||||||
|
$this->putLFloat($attribute->getMaxValue());
|
||||||
|
$this->putLFloat($attribute->getValue());
|
||||||
|
$this->putLFloat($attribute->getDefaultValue());
|
||||||
|
$this->putString($attribute->getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reads and returns an EntityUniqueID
|
* Reads and returns an EntityUniqueID
|
||||||
* @return int|string
|
* @return int|string
|
||||||
|
@ -30,7 +30,6 @@ use pocketmine\network\mcpe\NetworkSession;
|
|||||||
class UpdateAttributesPacket extends DataPacket{
|
class UpdateAttributesPacket extends DataPacket{
|
||||||
const NETWORK_ID = ProtocolInfo::UPDATE_ATTRIBUTES_PACKET;
|
const NETWORK_ID = ProtocolInfo::UPDATE_ATTRIBUTES_PACKET;
|
||||||
|
|
||||||
|
|
||||||
public $entityId;
|
public $entityId;
|
||||||
/** @var Attribute[] */
|
/** @var Attribute[] */
|
||||||
public $entries = [];
|
public $entries = [];
|
||||||
@ -42,14 +41,7 @@ class UpdateAttributesPacket extends DataPacket{
|
|||||||
public function encode(){
|
public function encode(){
|
||||||
$this->reset();
|
$this->reset();
|
||||||
$this->putEntityRuntimeId($this->entityId);
|
$this->putEntityRuntimeId($this->entityId);
|
||||||
$this->putUnsignedVarInt(count($this->entries));
|
$this->putAttributeList(...$this->entries);
|
||||||
foreach($this->entries as $entry){
|
|
||||||
$this->putLFloat($entry->getMinValue());
|
|
||||||
$this->putLFloat($entry->getMaxValue());
|
|
||||||
$this->putLFloat($entry->getValue());
|
|
||||||
$this->putLFloat($entry->getDefaultValue());
|
|
||||||
$this->putString($entry->getName());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function handle(NetworkSession $session) : bool{
|
public function handle(NetworkSession $session) : bool{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user