> */ public function realms(): Collection { $cacheSeconds = max(0, (int) config('moonwell.launcher.realm_status_cache', 15)); if ($cacheSeconds === 0) { return $this->loadRealms(); } return Cache::remember( 'launcher.realm-status', now()->addSeconds($cacheSeconds), fn (): Collection => $this->loadRealms(), ); } /** * @return Collection> */ private function loadRealms(): Collection { return DB::connection(config('moonwell.auth_connection')) ->table('realmlist') ->orderBy('id') ->get([ 'id', 'name', 'address', 'port', 'icon', 'flag', 'timezone', 'population', ]) ->map(function (object $realm): array { $probeAddress = trim((string) config('moonwell.launcher.realm_status_host')); $online = $this->statusProbe->isOnline( $probeAddress !== '' ? $probeAddress : (string) $realm->address, (int) $realm->port, ); return [ 'id' => (int) $realm->id, 'name' => (string) $realm->name, 'address' => (string) $realm->address, 'port' => (int) $realm->port, 'icon' => (int) $realm->icon, 'flag' => (int) $realm->flag, 'timezone' => (int) $realm->timezone, 'population' => (float) $realm->population, 'online' => $online, 'status' => $online ? 'online' : 'offline', ]; }) ->values(); } }