NetworkSession: seal up actor removal behind API

This commit is contained in:
Dylan K. Taylor 2020-04-29 17:00:47 +01:00
parent adadd5423d
commit c8c0a1533c
2 changed files with 6 additions and 2 deletions

View File

@ -47,7 +47,6 @@ use pocketmine\network\mcpe\protocol\ActorEventPacket;
use pocketmine\network\mcpe\protocol\AddActorPacket; use pocketmine\network\mcpe\protocol\AddActorPacket;
use pocketmine\network\mcpe\protocol\AnimatePacket; use pocketmine\network\mcpe\protocol\AnimatePacket;
use pocketmine\network\mcpe\protocol\MoveActorAbsolutePacket; use pocketmine\network\mcpe\protocol\MoveActorAbsolutePacket;
use pocketmine\network\mcpe\protocol\RemoveActorPacket;
use pocketmine\network\mcpe\protocol\SetActorMotionPacket; use pocketmine\network\mcpe\protocol\SetActorMotionPacket;
use pocketmine\network\mcpe\protocol\types\entity\Attribute as NetworkAttribute; use pocketmine\network\mcpe\protocol\types\entity\Attribute as NetworkAttribute;
use pocketmine\network\mcpe\protocol\types\entity\EntityMetadataCollection; use pocketmine\network\mcpe\protocol\types\entity\EntityMetadataCollection;
@ -1560,7 +1559,7 @@ abstract class Entity{
$id = spl_object_id($player); $id = spl_object_id($player);
if(isset($this->hasSpawned[$id])){ if(isset($this->hasSpawned[$id])){
if($send){ if($send){
$player->getNetworkSession()->sendDataPacket(RemoveActorPacket::create($this->id)); $player->getNetworkSession()->onEntityRemoved($this);
} }
unset($this->hasSpawned[$id]); unset($this->hasSpawned[$id]);
} }

View File

@ -67,6 +67,7 @@ use pocketmine\network\mcpe\protocol\PacketDecodeException;
use pocketmine\network\mcpe\protocol\PacketPool; use pocketmine\network\mcpe\protocol\PacketPool;
use pocketmine\network\mcpe\protocol\PlayerListPacket; use pocketmine\network\mcpe\protocol\PlayerListPacket;
use pocketmine\network\mcpe\protocol\PlayStatusPacket; use pocketmine\network\mcpe\protocol\PlayStatusPacket;
use pocketmine\network\mcpe\protocol\RemoveActorPacket;
use pocketmine\network\mcpe\protocol\serializer\PacketBatch; use pocketmine\network\mcpe\protocol\serializer\PacketBatch;
use pocketmine\network\mcpe\protocol\ServerboundPacket; use pocketmine\network\mcpe\protocol\ServerboundPacket;
use pocketmine\network\mcpe\protocol\ServerToClientHandshakePacket; use pocketmine\network\mcpe\protocol\ServerToClientHandshakePacket;
@ -709,6 +710,10 @@ class NetworkSession{
$this->sendDataPacket(MobEffectPacket::remove($entity->getId(), $effect->getId())); $this->sendDataPacket(MobEffectPacket::remove($entity->getId(), $effect->getId()));
} }
public function onEntityRemoved(Entity $entity) : void{
$this->sendDataPacket(RemoveActorPacket::create($entity->getId()));
}
public function syncAvailableCommands() : void{ public function syncAvailableCommands() : void{
$pk = new AvailableCommandsPacket(); $pk = new AvailableCommandsPacket();
foreach($this->server->getCommandMap()->getCommands() as $name => $command){ foreach($this->server->getCommandMap()->getCommands() as $name => $command){