mostly rewrite internal entity metadata handling

- Only sync the metadata set when needed for sending
- Don't use metadata set for storing data, add properties instead
- Use objects inside metadata sets instead of arrays
This commit is contained in:
Dylan K. Taylor
2019-07-28 19:40:47 +01:00
parent 6c0ae6bf0b
commit e06ab0869a
32 changed files with 958 additions and 450 deletions

View File

@ -32,7 +32,8 @@ use pocketmine\network\mcpe\protocol\PlayerListPacket;
use pocketmine\network\mcpe\protocol\RemoveActorPacket;
use pocketmine\network\mcpe\protocol\types\entity\EntityMetadataFlags;
use pocketmine\network\mcpe\protocol\types\entity\EntityMetadataProperties;
use pocketmine\network\mcpe\protocol\types\entity\EntityMetadataTypes;
use pocketmine\network\mcpe\protocol\types\entity\FloatMetadataProperty;
use pocketmine\network\mcpe\protocol\types\entity\LongMetadataProperty;
use pocketmine\network\mcpe\protocol\types\PlayerListEntry;
use pocketmine\utils\UUID;
use function str_repeat;
@ -104,8 +105,8 @@ class FloatingTextParticle implements Particle{
1 << EntityMetadataFlags::IMMOBILE
);
$pk->metadata = [
EntityMetadataProperties::FLAGS => [EntityMetadataTypes::LONG, $flags],
EntityMetadataProperties::SCALE => [EntityMetadataTypes::FLOAT, 0.01] //zero causes problems on debug builds
EntityMetadataProperties::FLAGS => new LongMetadataProperty($flags),
EntityMetadataProperties::SCALE => new FloatMetadataProperty(0.01) //zero causes problems on debug builds
];
$p[] = $pk;