#!/usr/bin/env bash set -u cd "$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" || exit 1 [[ -f gradle.properties ]] || { echo "[ERROR] gradle.properties tidak ditemukan."; exit 1; } get_prop() { sed -n "s/^$1=//p" gradle.properties | tail -n 1 | tr -d '\r'; } refresh() { MOD_VERSION="$(get_prop mod_version)"; MOD_VERSION="${MOD_VERSION:-unknown}" MINECRAFT_VERSION="$(get_prop minecraft_version)"; MINECRAFT_VERSION="${MINECRAFT_VERSION:-26.2}" ARCHIVES_BASE_NAME="$(get_prop archives_base_name)"; ARCHIVES_BASE_NAME="${ARCHIVES_BASE_NAME:-handcrafted}" JAR_PATH="$PWD/build/libs/$ARCHIVES_BASE_NAME-$MOD_VERSION.jar" TAG="v$MOD_VERSION" } compile_mod() { echo echo "[COMPILE] Building $ARCHIVES_BASE_NAME $MOD_VERSION..." if [[ -f ./compile.sh ]]; then bash ./compile.sh --build-only || return 1 elif [[ -f ./gradlew ]]; then chmod +x ./gradlew 2>/dev/null || true ./gradlew clean build --console=plain || return 1 else echo "[ERROR] compile.sh maupun gradlew tidak ditemukan." return 1 fi [[ -f "$JAR_PATH" ]] || { echo "[ERROR] JAR tidak ditemukan: $JAR_PATH"; return 1; } echo "[OK] JAR: $JAR_PATH" } push_git() { echo echo "[GIT] Push..." command -v git >/dev/null 2>&1 || { echo "[ERROR] Git tidak ditemukan."; return 1; } git rev-parse --is-inside-work-tree >/dev/null 2>&1 || { echo "[ERROR] Folder belum menjadi Git repository." echo "Jalankan: git init" return 1 } git remote get-url origin >/dev/null 2>&1 || { echo "[ERROR] Remote origin belum dikonfigurasi."; return 1; } if [[ -n "$(git status --porcelain)" ]]; then git status --short read -r -p "Commit message [Handcrafted $MOD_VERSION]: " msg msg="${msg:-Handcrafted $MOD_VERSION}" git add -A || return 1 git commit -m "$msg" || return 1 else echo "[INFO] Working tree bersih." fi branch="$(git branch --show-current)" [[ -n "$branch" ]] || { echo "[ERROR] Branch aktif tidak ditemukan."; return 1; } git push origin "$branch" || { echo "[ERROR] Push gagal."; return 1; } echo "[OK] Push selesai." } test_mod() { echo echo "[TEST] Menjalankan Minecraft test client..." if [[ -f ./gradlew ]]; then chmod +x ./gradlew 2>/dev/null || true ./gradlew runClient --console=plain rc=$? [[ $rc -eq 0 ]] || echo "[WARN] Test client selesai dengan exit code $rc." else echo "[ERROR] gradlew tidak ditemukan." return 1 fi return 0 } make_release() { echo [[ -f "$JAR_PATH" ]] || { echo "[ERROR] Release dibatalkan: JAR $MOD_VERSION tidak ditemukan."; return 1; } command -v git >/dev/null 2>&1 || { echo "[ERROR] Git tidak ditemukan."; return 1; } git rev-parse --is-inside-work-tree >/dev/null 2>&1 || { echo "[ERROR] Bukan Git repository."; return 1; } if git rev-parse "$TAG" >/dev/null 2>&1; then echo "[INFO] Tag $TAG sudah ada. Tidak membuat ulang." return 0 fi echo "JAR : $JAR_PATH" echo "Tag : $TAG" read -r -p "Buat release tag $TAG? [Y/N]: " ans [[ "$ans" =~ ^[Yy]$ ]] || return 0 git tag -a "$TAG" -m "Handcrafted v$MOD_VERSION for Fabric $MINECRAFT_VERSION" || return 1 if git remote get-url origin >/dev/null 2>&1; then git push origin "$TAG" || { echo "[WARN] Tag lokal dibuat, tetapi push tag gagal."; return 1; } fi echo "[OK] Release tag $TAG selesai." echo "[INFO] JAR release: $JAR_PATH" } menu4() { echo echo "============================================" echo " Handcrafted Workflow" echo " Minecraft : $MINECRAFT_VERSION" echo " Version : $MOD_VERSION" echo " JAR : ditemukan" echo "============================================" echo "[1] Push Git" echo "[2] Mod Testing" echo "[3] Make Release" echo "[4] Exit" read -r -p "Pilih: " x case "$x" in 1) push_git; after_push ;; 2) test_mod; after_test ;; 3) make_release; after_release ;; *) exit 0 ;; esac } after_push() { while true; do echo; echo "[1] Mod Testing"; echo "[2] Make Release"; echo "[3] Exit" read -r -p "Pilih: " x case "$x" in 1) test_mod; after_test; return ;; 2) make_release; after_release; return ;; *) exit 0 ;; esac done } after_test() { while true; do echo; echo "[1] Push Git"; echo "[2] Make Release"; echo "[3] Exit" read -r -p "Pilih: " x case "$x" in 1) push_git; after_push; return ;; 2) make_release; after_release; return ;; *) exit 0 ;; esac done } after_release() { while true; do echo; echo "[1] Push Git"; echo "[2] Mod Testing"; echo "[3] Exit" read -r -p "Pilih: " x case "$x" in 1) push_git; after_push; return ;; 2) test_mod; after_test; return ;; *) exit 0 ;; esac done } refresh if [[ ! -f "$JAR_PATH" ]]; then echo echo "[INFO] Build $MOD_VERSION belum ditemukan. Compile otomatis..." compile_mod || true fi refresh if [[ -f "$JAR_PATH" ]]; then menu4 else echo echo "Build belum tersedia." echo "[1] Push Git" echo "[2] Mod Testing" echo "[3] Exit" read -r -p "Pilih: " x case "$x" in 1) push_git; after_push ;; 2) test_mod; after_test ;; *) exit 0 ;; esac fi