From 9c052667abbe78b338d917b3c73fd36a58c91d54 Mon Sep 17 00:00:00 2001 From: makepeaceJ Date: Fri, 24 Apr 2026 15:01:25 -0400 Subject: [PATCH 1/5] Added Palworld schema. Adjusted to handle looking at servers env settings for admin password. --- .../Query/Schemas/PalworldQueryTypeSchema.php | 71 +++++++++++++++++++ .../ServerAwareQueryTypeSchemaInterface.php | 11 +++ player-counter/src/Models/GameQuery.php | 8 ++- .../Providers/PlayerCounterPluginProvider.php | 2 + 4 files changed, 91 insertions(+), 1 deletion(-) create mode 100644 player-counter/src/Extensions/Query/Schemas/PalworldQueryTypeSchema.php create mode 100644 player-counter/src/Extensions/Query/ServerAwareQueryTypeSchemaInterface.php diff --git a/player-counter/src/Extensions/Query/Schemas/PalworldQueryTypeSchema.php b/player-counter/src/Extensions/Query/Schemas/PalworldQueryTypeSchema.php new file mode 100644 index 00000000..55ee193e --- /dev/null +++ b/player-counter/src/Extensions/Query/Schemas/PalworldQueryTypeSchema.php @@ -0,0 +1,71 @@ +variables() + ->where('env_variable', 'ADMIN_PASSWORD') + ->first()?->server_value; + + if (!$adminPassword) { + return null; + } + + try { + $response = Http::timeout(5) + ->withBasicAuth('admin', $adminPassword) + ->get("http://{$ip}:{$port}/v1/api/players"); + + if (!$response->ok()) { + return null; + } + + $data = $response->json(); + $players = array_map(fn ($p) => [ + 'id' => $p['playeruid'] ?? $p['steamid'] ?? '', + 'name' => $p['name'] ?? '', + ], $data['players'] ?? []); + + // Fetch metrics for servername and max_players + $metrics = Http::timeout(5) + ->withBasicAuth('admin', $adminPassword) + ->get("http://{$ip}:{$port}/v1/api/metrics") + ->json(); + + return [ + 'hostname' => $metrics['servername'] ?? $server->name, + 'map' => 'Palpagos Islands', + 'current_players' => count($players), + 'max_players' => $metrics['maxplayers'] ?? 32, + 'players' => $players, + ]; + } catch (\Throwable $e) { + report($e); + return null; + } + } +} + diff --git a/player-counter/src/Extensions/Query/ServerAwareQueryTypeSchemaInterface.php b/player-counter/src/Extensions/Query/ServerAwareQueryTypeSchemaInterface.php new file mode 100644 index 00000000..9b222e5d --- /dev/null +++ b/player-counter/src/Extensions/Query/ServerAwareQueryTypeSchemaInterface.php @@ -0,0 +1,11 @@ +} */ + public function processWithServer(Server $server, string $ip, int $port): ?array; +} diff --git a/player-counter/src/Models/GameQuery.php b/player-counter/src/Models/GameQuery.php index a284b016..463b1a8f 100644 --- a/player-counter/src/Models/GameQuery.php +++ b/player-counter/src/Models/GameQuery.php @@ -6,6 +6,7 @@ use App\Models\Egg; use App\Models\Server; use Boy132\PlayerCounter\Extensions\Query\QueryTypeService; +use Boy132\PlayerCounter\Extensions\Query\ServerAwareQueryTypeSchemaInterface; use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsToMany; @@ -59,7 +60,12 @@ public function runQuery(Server $server): ?array /** @var QueryTypeService $service */ $service = app(QueryTypeService::class); - return $service->get($this->query_type)?->process($ip, $port); + $schema = $service->get($this->query_type); + if ($schema instanceof ServerAwareQueryTypeSchemaInterface) { + return $schema->processWithServer($server, $ip, $port); + } + + return $schema?->process($ip, $port); } public static function canRunQuery(?Allocation $allocation): bool diff --git a/player-counter/src/Providers/PlayerCounterPluginProvider.php b/player-counter/src/Providers/PlayerCounterPluginProvider.php index 0f90c67d..5ee32eab 100644 --- a/player-counter/src/Providers/PlayerCounterPluginProvider.php +++ b/player-counter/src/Providers/PlayerCounterPluginProvider.php @@ -11,6 +11,7 @@ use Boy132\PlayerCounter\Extensions\Query\Schemas\GoldSourceQueryTypeSchema; use Boy132\PlayerCounter\Extensions\Query\Schemas\MinecraftBedrockQueryTypeSchema; use Boy132\PlayerCounter\Extensions\Query\Schemas\MinecraftJavaQueryTypeSchema; +use Boy132\PlayerCounter\Extensions\Query\Schemas\PalworldQueryTypeSchema; use Boy132\PlayerCounter\Extensions\Query\Schemas\SourceQueryTypeSchema; use Boy132\PlayerCounter\Filament\Server\Widgets\ServerPlayerWidget; use Boy132\PlayerCounter\Models\EggGameQuery; @@ -35,6 +36,7 @@ public function register(): void $service->register(new MinecraftJavaQueryTypeSchema()); $service->register(new MinecraftBedrockQueryTypeSchema()); $service->register(new CitizenFXQueryTypeSchema()); + $service->register(new PalworldQueryTypeSchema()); return $service; }); From 54873b2451086a7a0bdcd44ec9fbaf216df9baee Mon Sep 17 00:00:00 2001 From: makepeaceJ Date: Fri, 24 Apr 2026 15:35:21 -0400 Subject: [PATCH 2/5] Fix incorrect Palworld metrics API field names - hostname now uses $server->name directly (metrics has no servername field) - max_players now reads maxplayernum from metrics (not maxplayers) Co-Authored-By: Claude Sonnet 4.6 --- .../src/Extensions/Query/Schemas/PalworldQueryTypeSchema.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/player-counter/src/Extensions/Query/Schemas/PalworldQueryTypeSchema.php b/player-counter/src/Extensions/Query/Schemas/PalworldQueryTypeSchema.php index 55ee193e..e8a69bfd 100644 --- a/player-counter/src/Extensions/Query/Schemas/PalworldQueryTypeSchema.php +++ b/player-counter/src/Extensions/Query/Schemas/PalworldQueryTypeSchema.php @@ -56,10 +56,10 @@ public function processWithServer(Server $server, string $ip, int $port): ?array ->json(); return [ - 'hostname' => $metrics['servername'] ?? $server->name, + 'hostname' => $server->name, 'map' => 'Palpagos Islands', 'current_players' => count($players), - 'max_players' => $metrics['maxplayers'] ?? 32, + 'max_players' => $metrics['maxplayernum'] ?? 32, 'players' => $players, ]; } catch (\Throwable $e) { From 63ccc361d59899c440cd8fccd038136f972ead6b Mon Sep 17 00:00:00 2001 From: makepeaceJ Date: Fri, 24 Apr 2026 15:36:28 -0400 Subject: [PATCH 3/5] Fix Pint style violations: remove aligned => operators --- .../Query/Schemas/PalworldQueryTypeSchema.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/player-counter/src/Extensions/Query/Schemas/PalworldQueryTypeSchema.php b/player-counter/src/Extensions/Query/Schemas/PalworldQueryTypeSchema.php index e8a69bfd..6fb086a7 100644 --- a/player-counter/src/Extensions/Query/Schemas/PalworldQueryTypeSchema.php +++ b/player-counter/src/Extensions/Query/Schemas/PalworldQueryTypeSchema.php @@ -45,22 +45,22 @@ public function processWithServer(Server $server, string $ip, int $port): ?array $data = $response->json(); $players = array_map(fn ($p) => [ - 'id' => $p['playeruid'] ?? $p['steamid'] ?? '', + 'id' => $p['playeruid'] ?? $p['steamid'] ?? '', 'name' => $p['name'] ?? '', ], $data['players'] ?? []); - // Fetch metrics for servername and max_players + // Fetch metrics for max_players $metrics = Http::timeout(5) ->withBasicAuth('admin', $adminPassword) ->get("http://{$ip}:{$port}/v1/api/metrics") ->json(); return [ - 'hostname' => $server->name, - 'map' => 'Palpagos Islands', + 'hostname' => $server->name, + 'map' => 'Palpagos Islands', 'current_players' => count($players), - 'max_players' => $metrics['maxplayernum'] ?? 32, - 'players' => $players, + 'max_players' => $metrics['maxplayernum'] ?? 32, + 'players' => $players, ]; } catch (\Throwable $e) { report($e); From 0c332f01771f342165dd21855b019f954d74debb Mon Sep 17 00:00:00 2001 From: makepeaceJ Date: Sat, 25 Apr 2026 11:00:19 -0400 Subject: [PATCH 4/5] Updated palworld query schema to check for ok response --- .../Extensions/Query/Schemas/PalworldQueryTypeSchema.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/player-counter/src/Extensions/Query/Schemas/PalworldQueryTypeSchema.php b/player-counter/src/Extensions/Query/Schemas/PalworldQueryTypeSchema.php index 6fb086a7..3ab62537 100644 --- a/player-counter/src/Extensions/Query/Schemas/PalworldQueryTypeSchema.php +++ b/player-counter/src/Extensions/Query/Schemas/PalworldQueryTypeSchema.php @@ -50,16 +50,17 @@ public function processWithServer(Server $server, string $ip, int $port): ?array ], $data['players'] ?? []); // Fetch metrics for max_players - $metrics = Http::timeout(5) + $metricsResponse = Http::timeout(5) ->withBasicAuth('admin', $adminPassword) - ->get("http://{$ip}:{$port}/v1/api/metrics") - ->json(); + ->get("http://{$ip}:{$port}/v1/api/metrics"); + + $maxPlayers = $metricsResponse->ok() ? ($metricsResponse->json()['maxplayernum'] ?? 32) : 32; return [ 'hostname' => $server->name, 'map' => 'Palpagos Islands', 'current_players' => count($players), - 'max_players' => $metrics['maxplayernum'] ?? 32, + 'max_players' => $maxPlayers, 'players' => $players, ]; } catch (\Throwable $e) { From 6389ca550089d0d7acc039b9e6afe0e97fe82c54 Mon Sep 17 00:00:00 2001 From: makepeaceJ Date: Sat, 25 Apr 2026 11:19:29 -0400 Subject: [PATCH 5/5] adjusted some spacing for pint --- .../src/Extensions/Query/Schemas/PalworldQueryTypeSchema.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/player-counter/src/Extensions/Query/Schemas/PalworldQueryTypeSchema.php b/player-counter/src/Extensions/Query/Schemas/PalworldQueryTypeSchema.php index 3ab62537..b358bb9f 100644 --- a/player-counter/src/Extensions/Query/Schemas/PalworldQueryTypeSchema.php +++ b/player-counter/src/Extensions/Query/Schemas/PalworldQueryTypeSchema.php @@ -65,8 +65,8 @@ public function processWithServer(Server $server, string $ip, int $port): ?array ]; } catch (\Throwable $e) { report($e); + return null; } } } -