mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-06-11 05:55:33 +00:00
InventoryTransaction: Shuffle actions on execution to prevent plugins relying on the order
closes #2955
This commit is contained in:
parent
96d3f4f78b
commit
b6f3f6120b
@ -29,10 +29,12 @@ use pocketmine\inventory\transaction\action\InventoryAction;
|
|||||||
use pocketmine\inventory\transaction\action\SlotChangeAction;
|
use pocketmine\inventory\transaction\action\SlotChangeAction;
|
||||||
use pocketmine\item\Item;
|
use pocketmine\item\Item;
|
||||||
use pocketmine\Player;
|
use pocketmine\Player;
|
||||||
|
use function array_keys;
|
||||||
use function assert;
|
use function assert;
|
||||||
use function count;
|
use function count;
|
||||||
use function get_class;
|
use function get_class;
|
||||||
use function min;
|
use function min;
|
||||||
|
use function shuffle;
|
||||||
use function spl_object_hash;
|
use function spl_object_hash;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -110,6 +112,19 @@ class InventoryTransaction{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shuffles actions in the transaction to prevent external things relying on any implicit ordering.
|
||||||
|
*/
|
||||||
|
private function shuffleActions() : void{
|
||||||
|
$keys = array_keys($this->actions);
|
||||||
|
shuffle($keys);
|
||||||
|
$actions = [];
|
||||||
|
foreach($keys as $key){
|
||||||
|
$actions[$key] = $this->actions[$key];
|
||||||
|
}
|
||||||
|
$this->actions = $actions;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @internal This method should not be used by plugins, it's used to add tracked inventories for InventoryActions
|
* @internal This method should not be used by plugins, it's used to add tracked inventories for InventoryActions
|
||||||
* involving inventories.
|
* involving inventories.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user