mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-05-16 18:59:00 +00:00
Player: clean up container close handling
This commit is contained in:
parent
e16f20affa
commit
25cfcada26
@ -104,7 +104,6 @@ use pocketmine\network\mcpe\protocol\BlockEntityDataPacket;
|
||||
use pocketmine\network\mcpe\protocol\BlockPickRequestPacket;
|
||||
use pocketmine\network\mcpe\protocol\BookEditPacket;
|
||||
use pocketmine\network\mcpe\protocol\ChunkRadiusUpdatedPacket;
|
||||
use pocketmine\network\mcpe\protocol\ContainerClosePacket;
|
||||
use pocketmine\network\mcpe\protocol\DataPacket;
|
||||
use pocketmine\network\mcpe\protocol\EntityEventPacket;
|
||||
use pocketmine\network\mcpe\protocol\InteractPacket;
|
||||
@ -2840,25 +2839,6 @@ class Player extends Human implements CommandSender, ChunkLoader, IPlayer{
|
||||
return true;
|
||||
}
|
||||
|
||||
public function handleContainerClose(ContainerClosePacket $packet) : bool{
|
||||
if(!$this->spawned or $packet->windowId === 0){
|
||||
return true;
|
||||
}
|
||||
|
||||
$this->doCloseInventory();
|
||||
|
||||
if(isset($this->windowIndex[$packet->windowId])){
|
||||
$this->server->getPluginManager()->callEvent(new InventoryCloseEvent($this->windowIndex[$packet->windowId], $this));
|
||||
$this->removeWindow($this->windowIndex[$packet->windowId]);
|
||||
return true;
|
||||
}elseif($packet->windowId === 255){
|
||||
//Closed a fake window
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public function handleAdventureSettings(AdventureSettingsPacket $packet) : bool{
|
||||
if($packet->entityUniqueId !== $this->getId()){
|
||||
return false; //TODO
|
||||
@ -3752,6 +3732,10 @@ class Player extends Human implements CommandSender, ChunkLoader, IPlayer{
|
||||
$this->craftingGrid = $grid;
|
||||
}
|
||||
|
||||
/**
|
||||
* @internal Called to clean up crafting grid and cursor inventory when it is detected that the player closed their
|
||||
* inventory.
|
||||
*/
|
||||
public function doCloseInventory() : void{
|
||||
/** @var Inventory[] $inventories */
|
||||
$inventories = [$this->craftingGrid, $this->cursorInventory];
|
||||
@ -3772,6 +3756,33 @@ class Player extends Human implements CommandSender, ChunkLoader, IPlayer{
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @internal Called by the network session when a player closes a window.
|
||||
*
|
||||
* @param int $windowId
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function doCloseWindow(int $windowId) : bool{
|
||||
if(!$this->spawned or $windowId === 0){
|
||||
return false;
|
||||
}
|
||||
|
||||
$this->doCloseInventory();
|
||||
|
||||
if(isset($this->windowIndex[$windowId])){
|
||||
$this->server->getPluginManager()->callEvent(new InventoryCloseEvent($this->windowIndex[$windowId], $this));
|
||||
$this->removeWindow($this->windowIndex[$windowId]);
|
||||
return true;
|
||||
}
|
||||
if($windowId === 255){
|
||||
//Closed a fake window
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the window ID which the inventory has for this player, or -1 if the window is not open to the player.
|
||||
*
|
||||
|
@ -146,7 +146,7 @@ class SimpleSessionHandler extends SessionHandler{
|
||||
}
|
||||
|
||||
public function handleContainerClose(ContainerClosePacket $packet) : bool{
|
||||
return $this->player->handleContainerClose($packet);
|
||||
return $this->player->doCloseWindow($packet->windowId);
|
||||
}
|
||||
|
||||
public function handlePlayerHotbar(PlayerHotbarPacket $packet) : bool{
|
||||
|
Loading…
x
Reference in New Issue
Block a user