mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-09-08 19:02:59 +00:00
Separate held item index change listener logic from PlayerInventory
This commit is contained in:
@ -76,6 +76,8 @@ class InventoryManager{
|
||||
* @phpstan-var array<int, array<int, Item>>
|
||||
*/
|
||||
private $initiatedSlotChanges = [];
|
||||
/** @var int */
|
||||
private $clientSelectedHotbarSlot = -1;
|
||||
|
||||
public function __construct(Player $player, NetworkSession $session){
|
||||
$this->player = $player;
|
||||
@ -84,6 +86,10 @@ class InventoryManager{
|
||||
$this->add(ContainerIds::INVENTORY, $this->player->getInventory());
|
||||
$this->add(ContainerIds::ARMOR, $this->player->getArmorInventory());
|
||||
$this->add(ContainerIds::UI, $this->player->getCursorInventory());
|
||||
|
||||
$this->player->getInventory()->getHeldItemIndexChangeListeners()->add(function() : void{
|
||||
$this->syncSelectedHotbarSlot();
|
||||
});
|
||||
}
|
||||
|
||||
private function add(int $id, Inventory $inventory) : void{
|
||||
@ -206,13 +212,21 @@ class InventoryManager{
|
||||
}
|
||||
}
|
||||
|
||||
public function onClientSelectHotbarSlot(int $slot) : void{
|
||||
$this->clientSelectedHotbarSlot = $slot;
|
||||
}
|
||||
|
||||
public function syncSelectedHotbarSlot() : void{
|
||||
$this->session->sendDataPacket(MobEquipmentPacket::create(
|
||||
$this->player->getId(),
|
||||
TypeConverter::getInstance()->coreItemStackToNet($this->player->getInventory()->getItemInHand()),
|
||||
$this->player->getInventory()->getHeldItemIndex(),
|
||||
ContainerIds::INVENTORY
|
||||
));
|
||||
$selected = $this->player->getInventory()->getHeldItemIndex();
|
||||
if($selected !== $this->clientSelectedHotbarSlot){
|
||||
$this->session->sendDataPacket(MobEquipmentPacket::create(
|
||||
$this->player->getId(),
|
||||
TypeConverter::getInstance()->coreItemStackToNet($this->player->getInventory()->getItemInHand()),
|
||||
$selected,
|
||||
ContainerIds::INVENTORY
|
||||
));
|
||||
$this->clientSelectedHotbarSlot = $selected;
|
||||
}
|
||||
}
|
||||
|
||||
public function syncCreative() : void{
|
||||
|
@ -448,6 +448,7 @@ class InGamePacketHandler extends PacketHandler{
|
||||
}
|
||||
|
||||
public function handleMobEquipment(MobEquipmentPacket $packet) : bool{
|
||||
$this->session->getInvManager()->onClientSelectHotbarSlot($packet->hotbarSlot);
|
||||
if(!$this->player->selectHotbarSlot($packet->hotbarSlot)){
|
||||
$this->session->getInvManager()->syncSelectedHotbarSlot();
|
||||
}
|
||||
|
Reference in New Issue
Block a user