This commit is contained in:
Alexander Popov 2022-06-05 02:56:46 +03:00
commit e505fd8cfc
Signed by: iiiypuk
GPG Key ID: 3F76816AEE08F908
5 changed files with 150 additions and 0 deletions

17
.editorconfig Normal file
View File

@ -0,0 +1,17 @@
root = true
[*]
indent_style = space
indent_size = 4
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
[{*.c,*.h}]
indent_style = space
indent_size = 4
[Makefile]
indent_style = tab
indent_size = 4

16
LICENSE Normal file
View File

@ -0,0 +1,16 @@
MIT No Attribution
Copyright 2022 Alexander Popov
Permission is hereby granted, free of charge, to any person obtaining a copy of this
software and associated documentation files (the "Software"), to deal in the Software
without restriction, including without limitation the rights to use, copy, modify,
merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

8
Makefile Normal file
View File

@ -0,0 +1,8 @@
CC = clang
CFLAGS = -O2 -lcjson
all:
${CC} -O2 -lcjson main.c -o make-libs-string
clean:
rm -f *.o

3
README.md Normal file
View File

@ -0,0 +1,3 @@
Parse `version.json` file and return libs
Паритет с версией на [Python](https://github.com/iiiypuk/minecraft-libs-parser)

106
main.c Normal file
View File

@ -0,0 +1,106 @@
#include <stdio.h>
#include <string.h>
#include <cjson/cJSON.h>
void usage();
void info(cJSON *json);
void generate_library_list(cJSON *input_json, cJSON *output_json);
int main(int argc, char const *argv[])
{
if (argc < 2 || argc > 3)
{
usage();
}
else
{
FILE *fp;
char str[900000];
char buffer[100];
fp = fopen(argv[1], "r");
while (fgets(buffer, sizeof(buffer), fp)) {
strcat(str, buffer);
}
fclose(fp);
cJSON *json = cJSON_Parse(str);
cJSON *launcher_libraries = cJSON_CreateObject();
cJSON *libraries = cJSON_CreateArray();
cJSON_AddItemToObject(launcher_libraries, "libraries", libraries);
generate_library_list(json, launcher_libraries);
int libraries_array_size = cJSON_GetArraySize(libraries);
switch (argv[2][0])
{
default:
usage();
break;
case 's':
info(json);
break;
case 'w':
for (int i = 0; i < libraries_array_size; ++i)
{
cJSON *library = cJSON_GetArrayItem(libraries, i);
printf("%%MC_DIR%%/libraries/%s;", cJSON_GetStringValue(library));
}
printf("%s", "%MC_DIR%/versions/%GAME_VERSION%/%GAME_VERSION%.jar");
break;
case 'u':
for (int i = 0; i < libraries_array_size; ++i)
{
cJSON *library = cJSON_GetArrayItem(libraries, i);
printf("$MC_DIR/libraries/%s:", cJSON_GetStringValue(library));
}
printf("%s", "$MC_DIR/versions/$GAME_VERSION/$GAME_VERSION.jar");
break;
}
}
return 0;
}
void usage()
{
printf("%s\n\n", "Minecraft Libraries List Generator");
printf("%s\n", "Usage:");
printf(" %s\n\n", "make-libs-string <version.json> <system>");
printf(" %s\n\n", "<system> - w|u (windows or unix)");
printf("%s\n", "Other:");
printf(" %s\n", "make-libs-string <version.json> s - to get info");
}
void info(cJSON *json)
{
char *assets_version = cJSON_GetStringValue(cJSON_GetObjectItem(json, "id"));
printf("Minecraft Assets Version: %s\n", assets_version);
cJSON *libraries = cJSON_GetObjectItem(json, "libraries");
int libraries_array_size = cJSON_GetArraySize(libraries);
printf("Minecraft libraries count: %d\n", libraries_array_size);
}
void generate_library_list(cJSON *input_json, cJSON *output_json)
{
cJSON *input_libraries = cJSON_GetObjectItem(input_json, "libraries");
cJSON *output_libraries = cJSON_GetObjectItem(output_json, "libraries");
int libraries_array_size = cJSON_GetArraySize(input_libraries);
for (int i = 0; i < libraries_array_size; i++)
{
cJSON *library = cJSON_GetArrayItem(input_libraries, i);
if (library != NULL)
{
cJSON *downloads = cJSON_GetObjectItem(library, "downloads");
cJSON *artifact = cJSON_GetObjectItem(downloads, "artifact");
char *library_path = cJSON_GetStringValue(cJSON_GetObjectItem(artifact, "path"));
cJSON_AddItemToArray(output_libraries, cJSON_CreateString(library_path));
}
}
}