#!/bin/bash
# natekins smp - one-time setup for Mac (TLauncher or the official launcher).
# Installs Fabric 26.3 (loader 0.19.5) + Fabric API + Dream Displays into your Minecraft folder.
# Nothing else on your computer is changed. Safe to run again.
set -euo pipefail

MC="${MC_DIR:-$HOME/Library/Application Support/minecraft}"
MCVER="26.3"; LOADER="0.19.5"; PROFILE="fabric-loader-$LOADER-$MCVER"
MODS=(
  "fabric-api-0.161.0+26.3.jar|https://cdn.modrinth.com/data/P7dR8mSH/versions/bNnaTiuM/fabric-api-0.161.0%2B26.3.jar|ed6b2586d6fde11fde8472f5a527c51e99b67026e46f94d4bfd85e7e28ce5ee299173ee16ad576ceb51f39f98d30a811086a6deb1a86a524859cc16e12da109d"
  "dreamdisplays-fabric-26.3-1.10.0-preview.3.jar|https://cdn.modrinth.com/data/4IIKQyBu/versions/KTMURrrQ/dreamdisplays-fabric-26.3-1.10.0-preview.3.jar|8d36a6439f373227cdc647bdbe3572fd681d21340e12682a94e2703b00d3fa7d53255e852ffc9a5e9d0b46c4035a8e8a82cd020ec1fda96a9094f94f9a6b5f7a"
)

echo "== natekins smp setup =="
if [ ! -f "$MC/versions/$MCVER/$MCVER.json" ]; then
  echo "Minecraft $MCVER isn't installed yet."
  echo "Open TLauncher, pick version $MCVER, start it once, close it, then run this again."
  read -r -p "Press Enter to close..." _; exit 1
fi

echo "-> Fabric $MCVER (loader $LOADER)"
mkdir -p "$MC/versions/$PROFILE"
curl -fsSL "https://meta.fabricmc.net/v2/versions/loader/$MCVER/$LOADER/profile/json" -o "$MC/versions/$PROFILE/$PROFILE.json"
# Download the loader's libraries so the launcher doesn't have to.
osascript -l JavaScript -e '
  ObjC.import("Foundation");
  function run(argv) {
    var s = $.NSString.stringWithContentsOfFileEncodingError(argv[0], $.NSUTF8StringEncoding, null).js;
    return JSON.parse(s).libraries.map(function (l) { return l.name + " " + l.url; }).join("\n");
  }' "$MC/versions/$PROFILE/$PROFILE.json" | while read -r name url; do
  IFS=: read -r group artifact version classifier <<< "$name"
  file="$artifact-$version${classifier:+-$classifier}.jar"
  path="${group//.//}/$artifact/$version/$file"
  if [ ! -s "$MC/libraries/$path" ]; then
    mkdir -p "$(dirname "$MC/libraries/$path")"
    curl -fsSL "$url$path" -o "$MC/libraries/$path"
  fi
done

echo "-> Mods"
mkdir -p "$MC/mods"
rm -f "$MC/mods"/fabric-api-*.jar "$MC/mods"/dreamdisplays-*.jar
for m in "${MODS[@]}"; do
  IFS='|' read -r file url sha <<< "$m"
  curl -fsSL "$url" -o "$MC/mods/$file"
  got=$(shasum -a 512 "$MC/mods/$file" | cut -d' ' -f1)
  if [ "$got" != "$sha" ]; then rm -f "$MC/mods/$file"; echo "Download of $file was corrupted - run this again."; exit 1; fi
  echo "   $file"
done

echo
echo "Done! In TLauncher pick:  $PROFILE  (may show as 'Fabric $MCVER')"
echo "Then join:  mc.esraelnate.com"
read -r -p "Press Enter to close..." _ || true
