mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-07-12 04:45:12 +00:00
ContainerTrait: avoid absurdly inefficient use of setItem()
this substantially improves the performance of loading containers such as chests.
This commit is contained in:
parent
72f2c794ab
commit
3c6146b5e0
@ -48,11 +48,14 @@ trait ContainerTrait{
|
|||||||
$inventory = $this->getRealInventory();
|
$inventory = $this->getRealInventory();
|
||||||
$listeners = $inventory->getListeners()->toArray();
|
$listeners = $inventory->getListeners()->toArray();
|
||||||
$inventory->getListeners()->remove(...$listeners); //prevent any events being fired by initialization
|
$inventory->getListeners()->remove(...$listeners); //prevent any events being fired by initialization
|
||||||
$inventory->clearAll();
|
|
||||||
|
$newContents = [];
|
||||||
/** @var CompoundTag $itemNBT */
|
/** @var CompoundTag $itemNBT */
|
||||||
foreach($inventoryTag as $itemNBT){
|
foreach($inventoryTag as $itemNBT){
|
||||||
$inventory->setItem($itemNBT->getByte("Slot"), Item::nbtDeserialize($itemNBT));
|
$newContents[$itemNBT->getByte("Slot")] = Item::nbtDeserialize($itemNBT);
|
||||||
}
|
}
|
||||||
|
$inventory->setContents($newContents);
|
||||||
|
|
||||||
$inventory->getListeners()->add(...$listeners);
|
$inventory->getListeners()->add(...$listeners);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user