mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-06-07 12:18:46 +00:00
Merge branch 'master' of https://github.com/pmmp/pocketmine-mp
This commit is contained in:
commit
2a97c7032e
@ -90,6 +90,8 @@ abstract class BaseInventory implements Inventory{
|
||||
$items = array_slice($items, 0, $this->getSize(), true);
|
||||
}
|
||||
|
||||
$oldContents = $this->slots->toArray();
|
||||
|
||||
$listeners = $this->listeners;
|
||||
$this->listeners = [];
|
||||
$viewers = $this->viewers;
|
||||
@ -109,7 +111,7 @@ abstract class BaseInventory implements Inventory{
|
||||
}
|
||||
|
||||
foreach($this->listeners as $listener){
|
||||
$listener->onContentChange($this);
|
||||
$listener->onContentChange($this, $oldContents);
|
||||
}
|
||||
|
||||
foreach($this->getViewers() as $viewer){
|
||||
@ -359,7 +361,7 @@ abstract class BaseInventory implements Inventory{
|
||||
|
||||
protected function onSlotChange(int $index, Item $before) : void{
|
||||
foreach($this->listeners as $listener){
|
||||
$listener->onSlotChange($this, $index);
|
||||
$listener->onSlotChange($this, $index, $before);
|
||||
}
|
||||
foreach($this->viewers as $viewer){
|
||||
$viewer->getNetworkSession()->getInvManager()->syncSlot($this, $index);
|
||||
|
@ -23,6 +23,7 @@ declare(strict_types=1);
|
||||
|
||||
namespace pocketmine\inventory;
|
||||
|
||||
use pocketmine\item\Item;
|
||||
use pocketmine\utils\Utils;
|
||||
|
||||
class CallbackInventoryChangeListener implements InventoryChangeListener{
|
||||
@ -31,25 +32,25 @@ class CallbackInventoryChangeListener implements InventoryChangeListener{
|
||||
|
||||
/**
|
||||
* @var \Closure|null
|
||||
* @phpstan-var (\Closure(Inventory, int) : void)|null
|
||||
* @phpstan-var (\Closure(Inventory, int, Item) : void)|null
|
||||
*/
|
||||
private $onSlotChangeCallback;
|
||||
/**
|
||||
* @var \Closure|null
|
||||
* @phpstan-var (\Closure(Inventory) : void)|null
|
||||
* @phpstan-var (\Closure(Inventory, Item[]) : void)|null
|
||||
*/
|
||||
private $onContentChangeCallback;
|
||||
|
||||
/**
|
||||
* @phpstan-param (\Closure(Inventory, int) : void)|null $onSlotChange
|
||||
* @phpstan-param (\Closure(Inventory) : void)|null $onContentChange
|
||||
* @phpstan-param (\Closure(Inventory, int, Item) : void)|null $onSlotChange
|
||||
* @phpstan-param (\Closure(Inventory, Item[]) : void)|null $onContentChange
|
||||
*/
|
||||
public function __construct(?\Closure $onSlotChange, ?\Closure $onContentChange){
|
||||
if($onSlotChange !== null){
|
||||
Utils::validateCallableSignature(function(Inventory $inventory, int $slot) : void{}, $onSlotChange);
|
||||
Utils::validateCallableSignature(function(Inventory $inventory, int $slot, Item $oldItem) : void{}, $onSlotChange);
|
||||
}
|
||||
if($onContentChange !== null){
|
||||
Utils::validateCallableSignature(function(Inventory $inventory) : void{}, $onContentChange);
|
||||
Utils::validateCallableSignature(function(Inventory $inventory, array $oldContents) : void{}, $onContentChange);
|
||||
}
|
||||
|
||||
$this->onSlotChangeCallback = $onSlotChange;
|
||||
@ -61,20 +62,23 @@ class CallbackInventoryChangeListener implements InventoryChangeListener{
|
||||
*/
|
||||
public static function onAnyChange(\Closure $onChange) : self{
|
||||
return new self(
|
||||
static function(Inventory $inventory, int $unused) use ($onChange) : void{
|
||||
static function(Inventory $inventory, int $unused, Item $unusedB) use ($onChange) : void{
|
||||
$onChange($inventory);
|
||||
},
|
||||
static function(Inventory $inventory) use ($onChange) : void{
|
||||
static function(Inventory $inventory, array $unused) use ($onChange) : void{
|
||||
$onChange($inventory);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
public function onSlotChange(Inventory $inventory, int $slot) : void{
|
||||
($this->onSlotChangeCallback)($inventory, $slot);
|
||||
public function onSlotChange(Inventory $inventory, int $slot, Item $oldItem) : void{
|
||||
($this->onSlotChangeCallback)($inventory, $slot, $oldItem);
|
||||
}
|
||||
|
||||
public function onContentChange(Inventory $inventory) : void{
|
||||
($this->onContentChangeCallback)($inventory);
|
||||
/**
|
||||
* @param Item[] $oldContents
|
||||
*/
|
||||
public function onContentChange(Inventory $inventory, array $oldContents) : void{
|
||||
($this->onContentChangeCallback)($inventory, $oldContents);
|
||||
}
|
||||
}
|
||||
|
@ -23,6 +23,8 @@ declare(strict_types=1);
|
||||
|
||||
namespace pocketmine\inventory;
|
||||
|
||||
use pocketmine\item\Item;
|
||||
|
||||
/**
|
||||
* Classes implementing this interface can be injected into inventories to receive notifications when content changes
|
||||
* occur.
|
||||
@ -32,7 +34,10 @@ namespace pocketmine\inventory;
|
||||
*/
|
||||
interface InventoryChangeListener{
|
||||
|
||||
public function onSlotChange(Inventory $inventory, int $slot) : void;
|
||||
public function onSlotChange(Inventory $inventory, int $slot, Item $oldItem) : void;
|
||||
|
||||
public function onContentChange(Inventory $inventory) : void;
|
||||
/**
|
||||
* @param Item[] $oldContents
|
||||
*/
|
||||
public function onContentChange(Inventory $inventory, array $oldContents) : void;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user