#include "command.h" #include "commands.h" #include "digest/digest.h" #include "version.h" #include "l2su.h" #include "macros.h" #include "args.h" #include #include #include unsigned cmd_version_list_remote(struct l2_context_node *ctx, char **args) { unsigned res; L2_UNUSED(ctx); if (*args) { CMD_FATAL(CMD_MSG_UNKNOWN_ARGUMENT, *args); } res = l2_version_load_remote(); if (res != VERSION_SUCCESS) { CMD_FATAL("Failed to load versions: %s", l2_version_strerror(res)); } for (struct l2_version_remote *rv = l2_state.ver_remote_head; rv; rv = rv->next) { printf("%s\n", rv->id); } return CMD_RESULT_SUCCESS; } unsigned cmd_version_list_local(struct l2_context_node *ctx, char **args) { return CMD_RESULT_SUCCESS; } bool feat_match_cb(const char *name, json_t *js) { L2_UNUSED(name); L2_UNUSED(js); return false; } int l2_assets__load_index(json_t *version, json_t **asset_index); int l2_assets__download_assets(json_t *asset_index, char **path); unsigned cmd_version_install(struct l2_context_node *ctx, char **args) { unsigned res = l2_version_load_remote(); char *jarpath = NULL; if (res != VERSION_SUCCESS) { CMD_FATAL("failed to load versions: %s", l2_version_strerror(res)); } json_t *js; res = l2_version_load_local(*args, &js); if (res != VERSION_SUCCESS) { CMD_FATAL("failed to load 1.8.9: %s", l2_version_strerror(res)); } CMD_INFO0("Retrieving library list..."); struct l2_version_library *libs = NULL; if ((res = l2_version_collect_libraries(js, &libs, &feat_match_cb)) != VERSION_SUCCESS) { CMD_FATAL("Failed to collect library list: %s", l2_version_strerror(res)); } CMD_INFO0("Downloading libraries..."); if ((res = l2_version_download_libraries(libs)) != VERSION_SUCCESS) { CMD_FATAL("Failed to download libraries: %s", l2_version_strerror(res)); } CMD_INFO0("Downloading client jar..."); if ((res = l2_version_download_jar(js, "client", &jarpath)) != VERSION_SUCCESS) { CMD_FATAL("Failed to download client jar: %s", l2_version_strerror(res)); } CMD_INFO0("Downloading asset index..."); json_t *assets = NULL; if (l2_assets__load_index(js, &assets) < 0) { CMD_FATAL0("Failed to load asset index."); } CMD_INFO0("Downloading assets..."); char *assetsbase = NULL; if (l2_assets__download_assets(assets, &assetsbase) < 0) { CMD_FATAL0("Failed to download assets."); } char *nativesdir = NULL; CMD_INFO0("Extracting natives..."); if ((res = l2_version_extract_natives(libs, &nativesdir)) != VERSION_SUCCESS) { CMD_FATAL("Failed to extract natives: %s", l2_version_strerror(res)); } char **game_args; size_t ngame_args; l2_subst_t *st; l2_subst_init(&st); l2_subst_add(st, "version_name", "1.8.9"); if (l2_args_get_game_args(js, st, &feat_match_cb, &game_args, &ngame_args) < 0) { CMD_FATAL0("Failed to find game arguments"); } for (size_t n = 0; n < ngame_args; ++n) { CMD_DEBUG("arg: %s", game_args[n]); free(game_args[n]); } free(game_args); if (l2_args_get_jvm_args(js, st, &feat_match_cb, &game_args, &ngame_args) < 0) { CMD_FATAL0("Failed to find JVM arguments"); } for (size_t n = 0; n < ngame_args; ++n) { CMD_DEBUG("jvm arg: %s", game_args[n]); free(game_args[n]); } free(game_args); l2_subst_free(st); CMD_INFO("Assets base: %s", assetsbase); free(assetsbase); json_decref(assets); l2_version_free_libraries(libs); free(jarpath); json_decref(js); return CMD_RESULT_SUCCESS; }