mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-06-12 14:35:35 +00:00
Improved handling of temporary inventory windows
evacuation behaviour is now consistent regardless of who is doing it
This commit is contained in:
parent
6efb1db107
commit
ab002ca06d
@ -24,10 +24,10 @@ declare(strict_types=1);
|
|||||||
namespace pocketmine\block\inventory;
|
namespace pocketmine\block\inventory;
|
||||||
|
|
||||||
use pocketmine\inventory\SimpleInventory;
|
use pocketmine\inventory\SimpleInventory;
|
||||||
use pocketmine\player\Player;
|
use pocketmine\inventory\TemporaryInventory;
|
||||||
use pocketmine\world\Position;
|
use pocketmine\world\Position;
|
||||||
|
|
||||||
class AnvilInventory extends SimpleInventory implements BlockInventory{
|
class AnvilInventory extends SimpleInventory implements BlockInventory, TemporaryInventory{
|
||||||
use BlockInventoryTrait;
|
use BlockInventoryTrait;
|
||||||
|
|
||||||
public const SLOT_INPUT = 0;
|
public const SLOT_INPUT = 0;
|
||||||
@ -37,13 +37,4 @@ class AnvilInventory extends SimpleInventory implements BlockInventory{
|
|||||||
$this->holder = $holder;
|
$this->holder = $holder;
|
||||||
parent::__construct(2);
|
parent::__construct(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function onClose(Player $who) : void{
|
|
||||||
parent::onClose($who);
|
|
||||||
|
|
||||||
foreach($this->getContents() as $item){
|
|
||||||
$who->dropItem($item);
|
|
||||||
}
|
|
||||||
$this->clearAll();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -24,23 +24,14 @@ declare(strict_types=1);
|
|||||||
namespace pocketmine\block\inventory;
|
namespace pocketmine\block\inventory;
|
||||||
|
|
||||||
use pocketmine\crafting\CraftingGrid;
|
use pocketmine\crafting\CraftingGrid;
|
||||||
use pocketmine\player\Player;
|
use pocketmine\inventory\TemporaryInventory;
|
||||||
use pocketmine\world\Position;
|
use pocketmine\world\Position;
|
||||||
|
|
||||||
final class CraftingTableInventory extends CraftingGrid implements BlockInventory{
|
final class CraftingTableInventory extends CraftingGrid implements BlockInventory, TemporaryInventory{
|
||||||
use BlockInventoryTrait;
|
use BlockInventoryTrait;
|
||||||
|
|
||||||
public function __construct(Position $holder){
|
public function __construct(Position $holder){
|
||||||
$this->holder = $holder;
|
$this->holder = $holder;
|
||||||
parent::__construct(CraftingGrid::SIZE_BIG);
|
parent::__construct(CraftingGrid::SIZE_BIG);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function onClose(Player $who) : void{
|
|
||||||
parent::onClose($who);
|
|
||||||
|
|
||||||
foreach($this->getContents() as $item){
|
|
||||||
$who->dropItem($item);
|
|
||||||
}
|
|
||||||
$this->clearAll();
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -24,10 +24,10 @@ declare(strict_types=1);
|
|||||||
namespace pocketmine\block\inventory;
|
namespace pocketmine\block\inventory;
|
||||||
|
|
||||||
use pocketmine\inventory\SimpleInventory;
|
use pocketmine\inventory\SimpleInventory;
|
||||||
use pocketmine\player\Player;
|
use pocketmine\inventory\TemporaryInventory;
|
||||||
use pocketmine\world\Position;
|
use pocketmine\world\Position;
|
||||||
|
|
||||||
class EnchantInventory extends SimpleInventory implements BlockInventory{
|
class EnchantInventory extends SimpleInventory implements BlockInventory, TemporaryInventory{
|
||||||
use BlockInventoryTrait;
|
use BlockInventoryTrait;
|
||||||
|
|
||||||
public const SLOT_INPUT = 0;
|
public const SLOT_INPUT = 0;
|
||||||
@ -37,13 +37,4 @@ class EnchantInventory extends SimpleInventory implements BlockInventory{
|
|||||||
$this->holder = $holder;
|
$this->holder = $holder;
|
||||||
parent::__construct(2);
|
parent::__construct(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function onClose(Player $who) : void{
|
|
||||||
parent::onClose($who);
|
|
||||||
|
|
||||||
foreach($this->getContents() as $item){
|
|
||||||
$who->dropItem($item);
|
|
||||||
}
|
|
||||||
$this->clearAll();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -24,10 +24,11 @@ declare(strict_types=1);
|
|||||||
namespace pocketmine\block\inventory;
|
namespace pocketmine\block\inventory;
|
||||||
|
|
||||||
use pocketmine\inventory\SimpleInventory;
|
use pocketmine\inventory\SimpleInventory;
|
||||||
|
use pocketmine\inventory\TemporaryInventory;
|
||||||
use pocketmine\player\Player;
|
use pocketmine\player\Player;
|
||||||
use pocketmine\world\Position;
|
use pocketmine\world\Position;
|
||||||
|
|
||||||
final class LoomInventory extends SimpleInventory implements BlockInventory{
|
final class LoomInventory extends SimpleInventory implements BlockInventory, TemporaryInventory{
|
||||||
use BlockInventoryTrait;
|
use BlockInventoryTrait;
|
||||||
|
|
||||||
public const SLOT_BANNER = 0;
|
public const SLOT_BANNER = 0;
|
||||||
@ -38,13 +39,4 @@ final class LoomInventory extends SimpleInventory implements BlockInventory{
|
|||||||
$this->holder = $holder;
|
$this->holder = $holder;
|
||||||
parent::__construct($size);
|
parent::__construct($size);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function onClose(Player $who) : void{
|
|
||||||
parent::onClose($who);
|
|
||||||
|
|
||||||
foreach($this->getContents() as $item){
|
|
||||||
$who->dropItem($item);
|
|
||||||
}
|
|
||||||
$this->clearAll();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -26,7 +26,7 @@ namespace pocketmine\inventory;
|
|||||||
use pocketmine\crafting\CraftingGrid;
|
use pocketmine\crafting\CraftingGrid;
|
||||||
use pocketmine\player\Player;
|
use pocketmine\player\Player;
|
||||||
|
|
||||||
final class PlayerCraftingInventory extends CraftingGrid{
|
final class PlayerCraftingInventory extends CraftingGrid implements TemporaryInventory{
|
||||||
|
|
||||||
public function __construct(private Player $holder){
|
public function __construct(private Player $holder){
|
||||||
parent::__construct(CraftingGrid::SIZE_SMALL);
|
parent::__construct(CraftingGrid::SIZE_SMALL);
|
||||||
|
@ -25,7 +25,7 @@ namespace pocketmine\inventory;
|
|||||||
|
|
||||||
use pocketmine\player\Player;
|
use pocketmine\player\Player;
|
||||||
|
|
||||||
class PlayerCursorInventory extends SimpleInventory{
|
class PlayerCursorInventory extends SimpleInventory implements TemporaryInventory{
|
||||||
/** @var Player */
|
/** @var Player */
|
||||||
protected $holder;
|
protected $holder;
|
||||||
|
|
||||||
|
@ -77,6 +77,7 @@ use pocketmine\inventory\CallbackInventoryListener;
|
|||||||
use pocketmine\inventory\Inventory;
|
use pocketmine\inventory\Inventory;
|
||||||
use pocketmine\inventory\PlayerCraftingInventory;
|
use pocketmine\inventory\PlayerCraftingInventory;
|
||||||
use pocketmine\inventory\PlayerCursorInventory;
|
use pocketmine\inventory\PlayerCursorInventory;
|
||||||
|
use pocketmine\inventory\TemporaryInventory;
|
||||||
use pocketmine\inventory\transaction\action\DropItemAction;
|
use pocketmine\inventory\transaction\action\DropItemAction;
|
||||||
use pocketmine\inventory\transaction\InventoryTransaction;
|
use pocketmine\inventory\transaction\InventoryTransaction;
|
||||||
use pocketmine\inventory\transaction\TransactionBuilderInventory;
|
use pocketmine\inventory\transaction\TransactionBuilderInventory;
|
||||||
@ -2322,8 +2323,10 @@ class Player extends Human implements CommandSender, ChunkListener, IPlayer{
|
|||||||
* inventory.
|
* inventory.
|
||||||
*/
|
*/
|
||||||
public function doCloseInventory() : void{
|
public function doCloseInventory() : void{
|
||||||
/** @var Inventory[] $inventories */
|
|
||||||
$inventories = [$this->craftingGrid, $this->cursorInventory];
|
$inventories = [$this->craftingGrid, $this->cursorInventory];
|
||||||
|
if($this->currentWindow instanceof TemporaryInventory){
|
||||||
|
$inventories[] = $this->currentWindow;
|
||||||
|
}
|
||||||
|
|
||||||
$transaction = new InventoryTransaction($this);
|
$transaction = new InventoryTransaction($this);
|
||||||
$mainInventoryTransactionBuilder = new TransactionBuilderInventory($this->inventory);
|
$mainInventoryTransactionBuilder = new TransactionBuilderInventory($this->inventory);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user