public static function deactive(Block $source, $updateLevel) { $queue = new \SplPriorityQueue(); $queue->setExtractFlags(\SplPriorityQueue::EXTR_BOTH); if (!$source->isPowerSource()) { return; } self::addToDeactiveQueue($queue, $source, $updateLevel); while (!$queue->isEmpty()) { $ex = $queue->extract(); $updating = $ex["data"]; $power = $ex["priority"]; /** @var Block $updating */ $updating->setPowerLevel(0); $updating->level->setBlock($updating, $updating, true); self::addToDeactiveQueue($queue, $updating, $power); } }