Compare commits
12 Commits
Author | SHA1 | Date | |
---|---|---|---|
095ec61214 | |||
7812b19878 | |||
13ca75a3bf | |||
a0778de28a | |||
53782a2988 | |||
23bb1c0fd6 | |||
8d43f69367 | |||
682d57c954 | |||
a051590826 | |||
2461420f15 | |||
a05035089a | |||
060c13a068 |
|
@ -2,7 +2,7 @@ root = true
|
|||
|
||||
[*]
|
||||
indent_style = space
|
||||
indent_size = 4
|
||||
indent_size = 2
|
||||
end_of_line = lf
|
||||
charset = utf-8
|
||||
trim_trailing_whitespace = true
|
||||
|
@ -10,8 +10,10 @@ insert_final_newline = true
|
|||
|
||||
[{*.c,*.h}]
|
||||
indent_style = space
|
||||
indent_size = 4
|
||||
|
||||
[Makefile]
|
||||
indent_style = tab
|
||||
indent_size = 4
|
||||
|
||||
[.gitmodules]
|
||||
indent_style = tab
|
||||
|
|
9
.gitignore
vendored
9
.gitignore
vendored
|
@ -1,4 +1,5 @@
|
|||
conan.lock
|
||||
conanbuild*
|
||||
conaninfo.txt
|
||||
graph_info.json
|
||||
mc-libs-string
|
||||
|
||||
# export data
|
||||
*.json
|
||||
*.txt
|
||||
|
|
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
[submodule "cJSON"]
|
||||
path = cJSON
|
||||
url = https://github.com/DaveGamble/cJSON
|
15
HISTORY.md
15
HISTORY.md
|
@ -8,6 +8,19 @@
|
|||
|
||||
> This project use Semantic Versioning 2.0.0 https://semver.org/
|
||||
|
||||
## 13/09/2022 - (1.0.1)
|
||||
## 31/07/2023 - (1.0.3)
|
||||
- ♻️ - Format code via `clang-format --style=LLVM`
|
||||
- ♻️ - Changed arguments order
|
||||
|
||||
## 31/07/2023 - (1.0.2)
|
||||
- ♻️ - Update software executable name
|
||||
- ♻️ - Update Makefile
|
||||
- ♻️ - Format code via `indent`
|
||||
- ➕ - Added cJSON library as submodule
|
||||
- ➕ - Added building with `tcc`
|
||||
- ❌ - Removed Conan building system
|
||||
|
||||
## 14/09/2022 - (1.0.1)
|
||||
- ➕ - Added [Conan](https://conan.io/) for Windows
|
||||
- ✔️ - Fixed bad returned value of `assets_version`
|
||||
- ♻️ - Changed the letter argument of the program to return version information from `s` to `i`
|
||||
|
|
23
Makefile
23
Makefile
|
@ -1,15 +1,18 @@
|
|||
include conanbuildinfo.mak
|
||||
|
||||
CC = clang
|
||||
CFLAGS = -O2
|
||||
CC = gcc
|
||||
CFLAGS = -O3
|
||||
LIBS = -lcjson
|
||||
EXEC = mc-libs-string
|
||||
|
||||
all: make-libs-list
|
||||
all: $(EXEC)
|
||||
|
||||
make-libs-list:
|
||||
$(CC) $(CFLAGS) make-libs-list.c \
|
||||
$(LIBS) -I$(CONAN_INCLUDE_DIRS_CJSON) -L$(CONAN_LIB_DIRS_CJSON) \
|
||||
-o $@
|
||||
$(EXEC):
|
||||
$(CC) $(CFLAGS) -o $(EXEC) ./src/main.c $(LIBS)
|
||||
|
||||
tcc:
|
||||
tcc -O3 -o $(EXEC) ./src/main.c $(LIBS)
|
||||
|
||||
tcc-static:
|
||||
tcc -O3 -o $(EXEC) ./src/main.c ./cJSON/libcjson.a
|
||||
|
||||
clean:
|
||||
rm make-libs-list
|
||||
rm $(EXEC)
|
||||
|
|
68
README.md
68
README.md
|
@ -1,18 +1,11 @@
|
|||
# Parse `version.json` file and return libs
|
||||
# Parse `version.json` file and return libraries list
|
||||
|
||||
## English
|
||||
[Russian](README.ru.md) |
|
||||
[English](README.md)
|
||||
|
||||
**About:**
|
||||
|
||||
Utility parse Minecraft JE game version file (`version.json`) and returns
|
||||
libraries list for specified operation system.
|
||||
|
||||
**How to build from source:**
|
||||
|
||||
```sh
|
||||
conan install .
|
||||
make
|
||||
```
|
||||
Utility for parse Minecraft JE game version file (`version.json`).
|
||||
|
||||
**How to use:**
|
||||
|
||||
|
@ -20,63 +13,24 @@ make
|
|||
Minecraft Libraries List Generator
|
||||
|
||||
Usage:
|
||||
make-libs-string <version.json> <system>
|
||||
mc-libs-string <system> <version.json>
|
||||
|
||||
<system> - w|l|x (windows or linux or osx)
|
||||
|
||||
Other:
|
||||
make-libs-string <version.json> i - to get version info
|
||||
mc-libs-string i <version.json> - to get version info
|
||||
```
|
||||
|
||||
Utility has two required arguments,
|
||||
`<version.json>` and `<system>`.
|
||||
|
||||
* `version.json` - takes the path to the file.
|
||||
* `system` - takes one of three values `w` `l` `x`, the letter of which corresponds to one of the operating systems.
|
||||
* `system` - takes one of three values `w, l, x`, the letter of which corresponds to one of the operating systems.
|
||||
|
||||
_**version.json**_ example for 1.19.2 version.
|
||||
**Example for
|
||||
[1.20.1](https://piston-meta.mojang.com/v1/packages/715ccf3330885e75b205124f09f8712542cbe7e0/1.20.1.json)
|
||||
version:**
|
||||
|
||||
```sh
|
||||
wget https://piston-meta.mojang.com/v1/packages/68cded4616fba9fbefb3f895033c261126c5f89c/1.19.2.json
|
||||
```
|
||||
|
||||
|
||||
## Русский
|
||||
|
||||
**Описание:**
|
||||
|
||||
Утилита парсит файл версий (`version.json`) Minecraft JE и возвращает
|
||||
список библиотек для указанной операционной системы.
|
||||
|
||||
**Как скомпилировать:**
|
||||
|
||||
```sh
|
||||
conan install .
|
||||
make
|
||||
```
|
||||
|
||||
**Как использовать:**
|
||||
|
||||
```
|
||||
Minecraft Libraries List Generator
|
||||
|
||||
Usage:
|
||||
make-libs-string <version.json> <system>
|
||||
|
||||
<system> - w|l|x (windows or linux or osx)
|
||||
|
||||
Other:
|
||||
make-libs-string <version.json> i - to get version info
|
||||
```
|
||||
|
||||
Программа имеет два обязательных аргумента,
|
||||
`<version.json>` и `<system>`.
|
||||
|
||||
* `version.json` - принимает путь к файлу
|
||||
* `system` - принимает одно из трёх значений `w` `l` `x`, буква которых соответствует одной из операционных систем.
|
||||
|
||||
Пример _**version.json**_ для версии 1.19.2.
|
||||
|
||||
```sh
|
||||
wget https://piston-meta.mojang.com/v1/packages/68cded4616fba9fbefb3f895033c261126c5f89c/1.19.2.json
|
||||
./mc-libs-string ./1.20.1.json x
|
||||
```
|
||||
|
|
35
README.ru.md
Normal file
35
README.ru.md
Normal file
|
@ -0,0 +1,35 @@
|
|||
# Парсит файла `version.json` и вовращает список библиотек
|
||||
|
||||
[English](README.md) |
|
||||
[Russian](README.ru.md)
|
||||
|
||||
**Описание:**
|
||||
|
||||
Утилита для парсинга файлов версий Minecraft JE (`version.json`).
|
||||
|
||||
**Как использовать:**
|
||||
|
||||
```
|
||||
Minecraft Libraries List Generator
|
||||
|
||||
Usage:
|
||||
mc-libs-string <system> <version.json>
|
||||
|
||||
<system> - w|l|x (windows or linux or osx)
|
||||
|
||||
Other:
|
||||
mc-libs-string i <version.json> - to get version info
|
||||
```
|
||||
|
||||
Программа имеет два обязательных аргумента,
|
||||
`<version.json>` и `<system>`.
|
||||
|
||||
* `version.json` - принимает путь к файлу
|
||||
* `system` - принимает одно из трёх значений `w, l, x`, буква которых соответствует одной из операционных систем.
|
||||
|
||||
**Пример для версии
|
||||
[1.20.1](https://piston-meta.mojang.com/v1/packages/715ccf3330885e75b205124f09f8712542cbe7e0/1.20.1.json)**:
|
||||
|
||||
```sh
|
||||
./mc-libs-string ./1.20.1.json x
|
||||
```
|
1
cJSON
Submodule
1
cJSON
Submodule
|
@ -0,0 +1 @@
|
|||
Subproject commit cb8693b058ba302f4829ec6d03f609ac6f848546
|
|
@ -1,5 +0,0 @@
|
|||
[requires]
|
||||
cjson/1.7.15
|
||||
|
||||
[generators]
|
||||
make
|
10
format-code
Executable file
10
format-code
Executable file
|
@ -0,0 +1,10 @@
|
|||
#!/bin/sh
|
||||
|
||||
files=(
|
||||
"src/main.c"
|
||||
)
|
||||
|
||||
for file in "${files[@]}"
|
||||
do
|
||||
clang-format -i --style=LLVM --sort-includes=false $file
|
||||
done
|
147
make-libs-list.c
147
make-libs-list.c
|
@ -1,147 +0,0 @@
|
|||
/*
|
||||
AUTHOR: Alexander Popov <iiiypuk {at} fastmail.fm>
|
||||
LICENSE: MIT-0
|
||||
REPO: https://git.a2s.su/iiiypuk/minecraft-launcher-libs
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <cjson/cJSON.h>
|
||||
|
||||
#define VERSION "1.0.1" // software version
|
||||
|
||||
void usage();
|
||||
void info(cJSON *json);
|
||||
void generate_library_list(cJSON *input_json, cJSON *output_json, char output_system);
|
||||
|
||||
int main(int argc, char const *argv[])
|
||||
{
|
||||
if (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, argv[2][0]);
|
||||
int libraries_array_size = cJSON_GetArraySize(libraries);
|
||||
|
||||
switch (argv[2][0])
|
||||
{
|
||||
default:
|
||||
usage();
|
||||
break;
|
||||
case 'i':
|
||||
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\n", "%MC_DIR%/versions/%GAME_VERSION%/%GAME_VERSION%.jar");
|
||||
break;
|
||||
case 'l':
|
||||
case 'x':
|
||||
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\n", "$MC_DIR/versions/$GAME_VERSION/$GAME_VERSION.jar");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void usage()
|
||||
{
|
||||
printf("%s\n%s: %s\n\n", "Minecraft Libraries List Generator",
|
||||
"Version", VERSION);
|
||||
printf("%s\n", "Usage:");
|
||||
printf(" %s\n\n", "make-libs-string <version.json> <system>");
|
||||
printf(" %s\n\n", "<system> - w|l|x (windows or linux or osx)");
|
||||
printf("%s\n", "Other:");
|
||||
printf(" %s\n", "make-libs-string <version.json> i - to get version info");
|
||||
}
|
||||
|
||||
void info(cJSON *json)
|
||||
{
|
||||
char *minecraft_version = cJSON_GetStringValue(cJSON_GetObjectItem(json, "id"));
|
||||
printf("Minecraft Version: %s\n", minecraft_version);
|
||||
|
||||
char *assets_version = cJSON_GetStringValue(cJSON_GetObjectItem(json, "assets"));
|
||||
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, char output_system)
|
||||
{
|
||||
cJSON *input_libraries = cJSON_GetObjectItem(input_json, "libraries");
|
||||
cJSON *output_libraries = cJSON_GetObjectItem(output_json, "libraries");
|
||||
int libraries_array_size = cJSON_GetArraySize(input_libraries);
|
||||
|
||||
char *output_system_name;
|
||||
|
||||
switch (output_system)
|
||||
{
|
||||
case 'w':
|
||||
output_system_name = "windows";
|
||||
break;
|
||||
case 'l':
|
||||
output_system_name = "linux";
|
||||
break;
|
||||
case 'x':
|
||||
output_system_name = "osx";
|
||||
break;
|
||||
}
|
||||
|
||||
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");
|
||||
|
||||
cJSON *rules = cJSON_GetObjectItem(library, "rules");
|
||||
cJSON *rules_item = cJSON_GetArrayItem(rules, 0);
|
||||
cJSON *os_type = cJSON_GetObjectItem(rules_item, "os");
|
||||
char *os_name = cJSON_GetStringValue(cJSON_GetObjectItem(os_type, "name"));
|
||||
|
||||
if (os_name != 0) {
|
||||
char *library_path = cJSON_GetStringValue(cJSON_GetObjectItem(artifact, "path"));
|
||||
|
||||
if (strcmp(output_system_name, os_name) == 0) {
|
||||
cJSON_AddItemToArray(output_libraries, cJSON_CreateString(library_path));
|
||||
}
|
||||
}
|
||||
else {
|
||||
char *library_path = cJSON_GetStringValue(cJSON_GetObjectItem(artifact, "path"));
|
||||
cJSON_AddItemToArray(output_libraries, cJSON_CreateString(library_path));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -25,20 +25,13 @@
|
|||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<Link>
|
||||
<AdditionalLibraryDirectories>.\</AdditionalLibraryDirectories>
|
||||
<AdditionalDependencies>cjson.lib</AdditionalDependencies>
|
||||
</Link>
|
||||
<ClCompile>
|
||||
<AdditionalIncludeDirectories>.\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ItemGroup>
|
||||
<ClInclude Include="cjson/cjson.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="make-libs-list.c" />
|
||||
<ClCompile Include="src\main.c" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Targets" />
|
||||
</Project>
|
142
src/main.c
Normal file
142
src/main.c
Normal file
|
@ -0,0 +1,142 @@
|
|||
/*
|
||||
AUTHOR: Alexander Popov <iiiypuk {at} fastmail.fm>
|
||||
LICENSE: MIT-0
|
||||
REPO: https://git.a2s.su/iiiypuk/minecraft-launcher-libs
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <cjson/cJSON.h>
|
||||
|
||||
#define VERSION "1.1.0" // software version
|
||||
|
||||
void usage();
|
||||
void info(cJSON *json);
|
||||
void generate_library_list(cJSON *input_json, cJSON *output_json,
|
||||
char output_system);
|
||||
|
||||
int main(int argc, char const *argv[]) {
|
||||
if (argc != 3) {
|
||||
usage();
|
||||
} else {
|
||||
FILE *fp;
|
||||
char str[900000];
|
||||
char buffer[100];
|
||||
|
||||
fp = fopen(argv[2], "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, argv[2][0]);
|
||||
int libraries_array_size = cJSON_GetArraySize(libraries);
|
||||
|
||||
switch (argv[1][0]) {
|
||||
default:
|
||||
usage();
|
||||
break;
|
||||
case 'i':
|
||||
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\n", "%MC_DIR%/versions/%GAME_VERSION%/%GAME_VERSION%.jar");
|
||||
break;
|
||||
case 'l':
|
||||
case 'x':
|
||||
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\n", "$MC_DIR/versions/$GAME_VERSION/$GAME_VERSION.jar");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void usage() {
|
||||
printf("%s\n%s: %s\n\n", "Minecraft Libraries List Generator", "Version",
|
||||
VERSION);
|
||||
printf("%s\n", "Usage:");
|
||||
printf(" %s\n\n", "mc-libs-string <system> <version.json>");
|
||||
printf(" %s\n\n", "<system> - w|l|x (windows or linux or osx)");
|
||||
printf("%s\n", "Other:");
|
||||
printf(" %s\n", "mc-libs-string i <version.json> - to get version info");
|
||||
}
|
||||
|
||||
void info(cJSON *json) {
|
||||
char *minecraft_version =
|
||||
cJSON_GetStringValue(cJSON_GetObjectItem(json, "id"));
|
||||
printf("Minecraft Version: %s\n", minecraft_version);
|
||||
|
||||
char *assets_version =
|
||||
cJSON_GetStringValue(cJSON_GetObjectItem(json, "assets"));
|
||||
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,
|
||||
char output_system) {
|
||||
cJSON *input_libraries = cJSON_GetObjectItem(input_json, "libraries");
|
||||
cJSON *output_libraries = cJSON_GetObjectItem(output_json, "libraries");
|
||||
int libraries_array_size = cJSON_GetArraySize(input_libraries);
|
||||
|
||||
char *output_system_name;
|
||||
|
||||
switch (output_system) {
|
||||
case 'w':
|
||||
output_system_name = "windows";
|
||||
break;
|
||||
case 'l':
|
||||
output_system_name = "linux";
|
||||
break;
|
||||
case 'x':
|
||||
output_system_name = "osx";
|
||||
break;
|
||||
}
|
||||
|
||||
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");
|
||||
|
||||
cJSON *rules = cJSON_GetObjectItem(library, "rules");
|
||||
cJSON *rules_item = cJSON_GetArrayItem(rules, 0);
|
||||
cJSON *os_type = cJSON_GetObjectItem(rules_item, "os");
|
||||
char *os_name =
|
||||
cJSON_GetStringValue(cJSON_GetObjectItem(os_type, "name"));
|
||||
|
||||
if (os_name != 0) {
|
||||
char *library_path =
|
||||
cJSON_GetStringValue(cJSON_GetObjectItem(artifact, "path"));
|
||||
|
||||
if (strcmp(output_system_name, os_name) == 0) {
|
||||
cJSON_AddItemToArray(output_libraries,
|
||||
cJSON_CreateString(library_path));
|
||||
}
|
||||
} else {
|
||||
char *library_path =
|
||||
cJSON_GetStringValue(cJSON_GetObjectItem(artifact, "path"));
|
||||
cJSON_AddItemToArray(output_libraries,
|
||||
cJSON_CreateString(library_path));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user