mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-09-06 17:59:48 +00:00
Introduce and use TransactionBuilder for inventory evacuations
This commit is contained in:
@ -85,7 +85,7 @@ use pocketmine\inventory\PlayerCursorInventory;
|
||||
use pocketmine\inventory\TemporaryInventory;
|
||||
use pocketmine\inventory\transaction\action\DropItemAction;
|
||||
use pocketmine\inventory\transaction\InventoryTransaction;
|
||||
use pocketmine\inventory\transaction\TransactionBuilderInventory;
|
||||
use pocketmine\inventory\transaction\TransactionBuilder;
|
||||
use pocketmine\inventory\transaction\TransactionCancelledException;
|
||||
use pocketmine\inventory\transaction\TransactionValidationException;
|
||||
use pocketmine\item\ConsumableItem;
|
||||
@ -2436,29 +2436,23 @@ class Player extends Human implements CommandSender, ChunkListener, IPlayer{
|
||||
$inventories[] = $this->currentWindow;
|
||||
}
|
||||
|
||||
$transaction = new InventoryTransaction($this);
|
||||
$mainInventoryTransactionBuilder = new TransactionBuilderInventory($this->inventory);
|
||||
$builder = new TransactionBuilder();
|
||||
foreach($inventories as $inventory){
|
||||
$contents = $inventory->getContents();
|
||||
|
||||
if(count($contents) > 0){
|
||||
$drops = $mainInventoryTransactionBuilder->addItem(...$contents);
|
||||
$drops = $builder->getInventory($this->inventory)->addItem(...$contents);
|
||||
foreach($drops as $drop){
|
||||
$transaction->addAction(new DropItemAction($drop));
|
||||
$builder->addAction(new DropItemAction($drop));
|
||||
}
|
||||
|
||||
$clearedInventoryTransactionBuilder = new TransactionBuilderInventory($inventory);
|
||||
$clearedInventoryTransactionBuilder->clearAll();
|
||||
foreach($clearedInventoryTransactionBuilder->generateActions() as $action){
|
||||
$transaction->addAction($action);
|
||||
}
|
||||
$builder->getInventory($inventory)->clearAll();
|
||||
}
|
||||
}
|
||||
foreach($mainInventoryTransactionBuilder->generateActions() as $action){
|
||||
$transaction->addAction($action);
|
||||
}
|
||||
|
||||
if(count($transaction->getActions()) !== 0){
|
||||
$actions = $builder->generateActions();
|
||||
if(count($actions) !== 0){
|
||||
$transaction = new InventoryTransaction($this, $actions);
|
||||
try{
|
||||
$transaction->execute();
|
||||
$this->logger->debug("Successfully evacuated items from temporary inventories");
|
||||
|
Reference in New Issue
Block a user