@@ -25,6 +25,15 @@ class MinecraftModrinthService
2525
2626 public function getMinecraftVersion (Server $ server ): ?string
2727 {
28+ $ server ->loadMissing ('egg ' );
29+
30+ $ tags = $ server ->egg ->tags ?? [];
31+
32+ // Proxies are not tied to a specific minecraft version
33+ if (in_array ('proxy ' , $ tags )) {
34+ return null ;
35+ }
36+
2837 $ version = $ server ->variables ()->where (fn ($ builder ) => $ builder ->where ('env_variable ' , 'MINECRAFT_VERSION ' )->orWhere ('env_variable ' , 'MC_VERSION ' ))->first ()?->server_value;
2938
3039 if (!$ version || $ version === 'latest ' ) {
@@ -120,10 +129,18 @@ public function getProjects(Server $server, ModrinthProjectType $modrinthProject
120129 $ minecraftVersion = $ this ->getMinecraftVersion ($ server );
121130 $ minecraftLoader = $ minecraftLoader ['name ' ];
122131
132+ $ facets = '[["categories: ' . $ minecraftLoader . '"] ' ;
133+
134+ if ($ minecraftVersion ) {
135+ $ facets .= ',["versions: ' . $ minecraftVersion . '"]] ' ;
136+ }
137+
138+ $ facets .= ',["project_type:mod","project_type:plugin"]] ' ;
139+
123140 $ data = [
124141 'offset ' => ($ page - 1 ) * 20 ,
125142 'limit ' => 20 ,
126- 'facets ' => " [[ \" categories: $ minecraftLoader \" ],[ \" versions: $ minecraftVersion \" ],[ \" project_type: { $ modrinthProjectType }\" ]] " ,
143+ 'facets ' => $ facets ,
127144 ];
128145
129146 $ key = "modrinth_projects: {$ modrinthProjectType }: $ minecraftVersion: $ minecraftLoader: $ page " ;
@@ -261,13 +278,18 @@ protected function getVersionsCacheKey(string $projectId, ?string $minecraftVers
261278 return "modrinth_versions: $ projectId: $ minecraftVersion: $ minecraftLoader " ;
262279 }
263280
264- /** @return array{game_versions: string, loaders: string} */
281+ /** @return array< string, string> */
265282 protected function getVersionsQuery (?string $ minecraftVersion , string $ minecraftLoader ): array
266283 {
267- return [
268- 'game_versions ' => "[ \"$ minecraftVersion \"] " ,
269- 'loaders ' => "[ \"$ minecraftLoader \"] " ,
284+ $ query = [
285+ 'loaders ' => '[" ' . $ minecraftLoader . '"] ' ,
270286 ];
287+
288+ if ($ minecraftVersion ) {
289+ $ query ['game_versions ' ] = '[" ' . $ minecraftVersion . '"] ' ;
290+ }
291+
292+ return $ query ;
271293 }
272294
273295 /** @param array<int, mixed> $versions */
@@ -350,7 +372,6 @@ public function getProjectVersionsBulk(array $projectIds, Server $server): array
350372
351373 $ minecraftVersion = $ this ->getMinecraftVersion ($ server );
352374 $ minecraftLoader = $ minecraftLoader ['name ' ];
353- $ query = $ this ->getVersionsQuery ($ minecraftVersion , $ minecraftLoader );
354375
355376 $ results = [];
356377 $ missing = [];
@@ -375,7 +396,7 @@ public function getProjectVersionsBulk(array $projectIds, Server $server): array
375396 ->asJson ()
376397 ->timeout (10 )
377398 ->connectTimeout (5 )
378- ->get ("https://api.modrinth.com/v2/project/ $ projectId/version " , $ query ),
399+ ->get ("https://api.modrinth.com/v2/project/ $ projectId/version " , $ this -> getVersionsQuery ( $ minecraftVersion , $ minecraftLoader ) ),
379400 $ missing
380401 ));
381402 } catch (Exception $ exception ) {
0 commit comments