aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaroline Larimore <caroline@larimo.re>2025-08-18 00:10:34 -0700
committerCaroline Larimore <caroline@larimo.re>2025-08-18 00:12:28 -0700
commit591559558a699f64bc8252df5bb68390bcafa7c4 (patch)
tree76ec27666a2333bf48ac552d4b908613101560b5
parent233183f4dc1121ec7c5ffef4d7ea8d98f6b2d281 (diff)
feat: parameterize directories
-rwxr-xr-xmcsh.sh61
-rw-r--r--meta.jq13
2 files changed, 46 insertions, 28 deletions
diff --git a/mcsh.sh b/mcsh.sh
index fc60ec4..a3cbdb0 100755
--- a/mcsh.sh
+++ b/mcsh.sh
@@ -2,64 +2,81 @@
set -euo pipefail
IFS=$'\n\t'
+VERSIONS_DIR="versions"
+LIBRARIES_DIR="libraries"
+NATIVES_DIR="natives"
+ASSETS_DIR="assets"
+GAME_DIR="run"
+
VERSION="1.21.8"
function update_metadata {
printf 'updating version manifest\n'
- mkdir -p versions
- curl --silent "https://piston-meta.mojang.com/mc/game/version_manifest_v2.json" | jq '{"latest": .latest, "versions": [.versions[] | {"key": .id, "value": .url}] | from_entries}' > versions/manifest.json
+ mkdir -p "$VERSIONS_DIR"
+ curl --silent "https://piston-meta.mojang.com/mc/game/version_manifest_v2.json" | jq '{"latest": .latest, "versions": [.versions[] | {"key": .id, "value": .url}] | from_entries}' > "$VERSIONS_DIR/manifest.json"
printf 'updating %s meta %s\n' "$VERSION"
- mkdir -p "versions/$VERSION"
- curl --silent -o "versions/$VERSION/meta.json" "$(jq -r --arg version "$VERSION" '.versions[$version]' versions/manifest.json)"
- meta="$(jq -c --slurpfile info info.json --slurpfile auth auth.json -f meta.jq "versions/$VERSION/meta.json")"
+ mkdir -p "$VERSIONS_DIR/$VERSION"
+ curl --silent -o "$VERSIONS_DIR/$VERSION/meta.json" "$(jq -r --arg version "$VERSION" '.versions[$version]' $VERSIONS_DIR/manifest.json)"
+ meta="$(jq -c --slurpfile info info.json --slurpfile auth auth.json -f meta.jq "$VERSIONS_DIR/$VERSION/meta.json")"
printf 'updating %s asset index...\n' "$VERSION"
- mkdir -p assets/indexes
+ mkdir -p "$ASSETS_DIR/indexes"
assets_url="$(<<<"$meta" jq -r '.asset_index')"
- curl --silent -o "assets/indexes/$(basename "$assets_url")" "$assets_url"
+ curl --silent -o "$ASSETS_DIR/indexes/$(basename "$assets_url")" "$assets_url"
}
-function launch {
+function launch (
update_metadata
+ export LIBRARIES_DIR
function download_library {
- if ! [[ -e "${2:-}" ]]; then
+ if ! [[ -e "$LIBRARIES_DIR/${2:-}" ]]; then
printf '%s\n' "${1:-}"
- mkdir -p "$(dirname "${2:-}")"
- curl --silent -o "${2:-}" "${3:-}"
+ mkdir -p "$(dirname "$LIBRARIES_DIR/${2:-}")"
+ curl --silent -o "$LIBRARIES_DIR/${2:-}" "${3:-}"
fi
}
export -f download_library
+ export ASSETS_DIR
function download_asset {
- if ! [[ -e "assets/objects/${2:-}" ]]; then
+ if ! [[ -e "$ASSETS_DIR/objects/${2:-}" ]]; then
printf '%s\n' "${1:-}"
- mkdir -p "$(dirname "assets/objects/${2:-}")"
- curl --silent -o "assets/objects/${2:-}" "https://resources.download.minecraft.net/${2:-}"
+ mkdir -p "$(dirname "$ASSETS_DIR/objects/${2:-}")"
+ curl --silent -o "$ASSETS_DIR/objects/${2:-}" "https://resources.download.minecraft.net/${2:-}"
fi
}
export -f download_asset
#TODO: check hash
- if ! [[ -e "versions/$VERSION/client.jar" ]]; then
+ if ! [[ -e "$VERSIONS_DIR/$VERSION/client.jar" ]]; then
printf 'downloading %s client jar...\n' "$VERSION"
- <<<"$meta" jq -r '.client_url' | xargs curl --silent -o "versions/$VERSION/client.jar"
+ <<<"$meta" jq -r '.client_url' | xargs curl --silent -o "$VERSIONS_DIR/$VERSION/client.jar"
fi
printf 'downloading libraries...\n'
- <<<"$meta" jq -r '.libraries[] | "\(.name) libraries/\(.path) \(.url)"' | xargs -I {} "$SHELL" -c "download_library {}"
+ <<<"$meta" jq -r '.libraries[] | "\(.name) \(.path) \(.url)"' | xargs -I {} "$SHELL" -c "download_library {}"
printf 'downloading assets...\n'
- jq -r '.objects | to_entries[] | "\(.key) \(.value.hash[:2])/\(.value.hash)"' "assets/indexes/$(basename "$assets_url")" | xargs -P 10 -I {} "$SHELL" -c "download_asset {}"
+ jq -r '.objects | to_entries[] | "\(.key) \(.value.hash[:2])/\(.value.hash)"' "$ASSETS_DIR/indexes/$(basename "$assets_url")" | xargs -P 10 -I {} "$SHELL" -c "download_asset {}"
- # if ! [[ -e "versions/$VERSION/log4j.xml" ]]; then
+ # if ! [[ -e "$VERSIONS_DIR/$VERSION/log4j.xml" ]]; then
# printf 'downloading %s log4j config...\n' "$VERSION"
- # <<<"$meta" jq -r '.logging_config' | xargs curl --silent -o "versions/$VERSION/log4j.xml"
+ # <<<"$meta" jq -r '.logging_config' | xargs curl --silent -o "$VERSIONS_DIR/$VERSION/log4j.xml"
# fi
+ function replace_placeholders {
+ cat - | sed \
+ -e "s/\${versions_directory}/$VERSIONS_DIR/g" \
+ -e "s/\${libraries_directory}/$LIBRARIES_DIR/g" \
+ -e "s/\${natives_directory}/$NATIVES_DIR/g" \
+ -e "s/\${assets_directory}/$ASSETS_DIR/g" \
+ -e "s/\${game_directory}/$GAME_DIR/g"
+ }
+
printf 'starting game :3\n'
- <<<"$meta" jq -r '.args.jvm + [.main_class] + .args.game | join(" ")' | xargs java
-}
+ <<<"$meta" jq -r '.args.jvm + [.main_class] + .args.game | join(" ")' | replace_placeholders | xargs java
+)
launch
diff --git a/meta.jq b/meta.jq
index 2dd6a54..44de571 100644
--- a/meta.jq
+++ b/meta.jq
@@ -24,17 +24,18 @@ def replace_placeholders: {
"version_type": .type,
"assets_index_name": .assets,
- "assets_root": "assets",
- "game_directory": "run",
- "natives_directory": "natives",
+
+ "assets_root": "${assets_directory}",
+ #"game_directory": "run",
+ #"natives_directory": "natives",
"classpath": (. as $root | [
- .libraries[] | apply_optional | "libraries/" + .downloads.artifact.path
- ] + ["versions/\($root.id)/client.jar"] | join(":")),
+ .libraries[] | apply_optional | "${libraries_directory}/" + .downloads.artifact.path
+ ] + ["${versions_directory}/\($root.id)/client.jar"] | join(":")),
"clientid": "idfk",
# log4j config path
- "path": "versions/\(.id)/log4j.xml",
+ "path": "${versions_directory}/\(.id)/log4j.xml",
"launcher_name": "mcsh",
"launcher_version": "v0.1.0"