Moved creative inventory sync to NetworkSession

This commit is contained in:
Dylan K. Taylor 2019-06-10 19:54:24 +01:00
parent dd45753fa9
commit f0d56f25b6
4 changed files with 14 additions and 20 deletions

View File

@ -1302,7 +1302,7 @@ class Player extends Human implements CommandSender, ChunkLoader, ChunkListener,
} }
$this->networkSession->syncAdventureSettings($this); $this->networkSession->syncAdventureSettings($this);
$this->inventory->sendCreativeContents(); $this->networkSession->syncCreativeInventoryContents();
return true; return true;
} }

View File

@ -25,7 +25,6 @@ namespace pocketmine\inventory;
use pocketmine\entity\Human; use pocketmine\entity\Human;
use pocketmine\item\Item; use pocketmine\item\Item;
use pocketmine\network\mcpe\protocol\InventoryContentPacket;
use pocketmine\network\mcpe\protocol\MobEquipmentPacket; use pocketmine\network\mcpe\protocol\MobEquipmentPacket;
use pocketmine\network\mcpe\protocol\types\ContainerIds; use pocketmine\network\mcpe\protocol\types\ContainerIds;
use pocketmine\Player; use pocketmine\Player;
@ -156,23 +155,6 @@ class PlayerInventory extends BaseInventory{
return 9; return 9;
} }
public function sendCreativeContents() : void{
//TODO: this mess shouldn't be in here
$holder = $this->getHolder();
if(!($holder instanceof Player)){
throw new \LogicException("Cannot send creative inventory contents to non-player inventory holder");
}
$items = [];
if(!$holder->isSpectator()){ //fill it for all gamemodes except spectator
foreach(CreativeInventory::getAll() as $i => $item){
$items[$i] = clone $item;
}
}
$holder->sendDataPacket(InventoryContentPacket::create(ContainerIds::CREATIVE, $items));
}
/** /**
* This override is here for documentation and code completion purposes only. * This override is here for documentation and code completion purposes only.
* @return Human|Player * @return Human|Player

View File

@ -30,6 +30,7 @@ use pocketmine\event\server\DataPacketReceiveEvent;
use pocketmine\event\server\DataPacketSendEvent; use pocketmine\event\server\DataPacketSendEvent;
use pocketmine\form\Form; use pocketmine\form\Form;
use pocketmine\GameMode; use pocketmine\GameMode;
use pocketmine\inventory\CreativeInventory;
use pocketmine\inventory\Inventory; use pocketmine\inventory\Inventory;
use pocketmine\math\Vector3; use pocketmine\math\Vector3;
use pocketmine\network\BadPacketException; use pocketmine\network\BadPacketException;
@ -774,6 +775,17 @@ class NetworkSession{
} }
} }
public function syncCreativeInventoryContents() : void{
$items = [];
if(!$this->player->isSpectator()){ //fill it for all gamemodes except spectator
foreach(CreativeInventory::getAll() as $i => $item){
$items[$i] = clone $item;
}
}
$this->sendDataPacket(InventoryContentPacket::create(ContainerIds::CREATIVE, $items));
}
public function onMobArmorChange(Living $mob) : void{ public function onMobArmorChange(Living $mob) : void{
$inv = $mob->getArmorInventory(); $inv = $mob->getArmorInventory();
$this->sendDataPacket(MobArmorEquipmentPacket::create($mob->getId(), $inv->getHelmet(), $inv->getChestplate(), $inv->getLeggings(), $inv->getBoots())); $this->sendDataPacket(MobArmorEquipmentPacket::create($mob->getId(), $inv->getHelmet(), $inv->getChestplate(), $inv->getLeggings(), $inv->getBoots()));

View File

@ -92,7 +92,7 @@ class PreSpawnSessionHandler extends SessionHandler{
$this->player->sendData($this->player); $this->player->sendData($this->player);
$this->session->syncAllInventoryContents(); $this->session->syncAllInventoryContents();
$this->player->getInventory()->sendCreativeContents(); $this->session->syncCreativeInventoryContents();
$this->player->getInventory()->sendHeldItem($this->player); $this->player->getInventory()->sendHeldItem($this->player);
$this->session->queueCompressed($this->server->getCraftingManager()->getCraftingDataPacket()); $this->session->queueCompressed($this->server->getCraftingManager()->getCraftingDataPacket());