#!/usr/bin/env bash set -u cd "$(dirname "$0")" || exit 1 BUILD_ONLY=0 [[ "${1:-}" == "--build-only" ]] && BUILD_ONLY=1 prop() { sed -n "s/^$1=//p" gradle.properties | tail -n 1 | tr -d '\r'; } [[ -f gradle.properties ]] || { echo "[ERROR] gradle.properties tidak ditemukan."; exit 1; } MOD_VERSION="$(prop mod_version)" MC_VERSION="$(prop minecraft_version)" ARCHIVES_BASE_NAME="$(prop archives_base_name)" ARCHIVES_BASE_NAME="${ARCHIVES_BASE_NAME:-item-despawn-timer}" [[ -n "$MOD_VERSION" && -n "$MC_VERSION" ]] || { echo "[ERROR] Versi tidak lengkap di gradle.properties."; exit 1; } PROJECT_VERSION="${MOD_VERSION}+mc${MC_VERSION}" JAR_PATH="$PWD/build/libs/${ARCHIVES_BASE_NAME}-${PROJECT_VERSION}.jar" echo "============================================" echo " Item Despawn Timer - Fabric $MC_VERSION" echo " Version: $PROJECT_VERSION" echo "============================================" git_integration() { command -v git >/dev/null || { echo "[ERROR] Git tidak ditemukan."; return 2; } git rev-parse --is-inside-work-tree >/dev/null 2>&1 || { echo "[ERROR] Bukan Git repository."; return 2; } if [[ -n "$(git status --porcelain)" ]]; then git status --short default="Update Item Despawn Timer v$PROJECT_VERSION" read -r -p "Commit message [$default]: " msg msg="${msg:-$default}" git add -A || return 2 git commit -m "$msg" || return 2 else echo "[INFO] Tidak ada perubahan source untuk di-commit." fi branch="$(git branch --show-current)" [[ -n "$branch" ]] || { echo "[ERROR] Branch aktif tidak ditemukan."; return 2; } git remote get-url origin >/dev/null 2>&1 || { echo "[ERROR] Remote origin belum dikonfigurasi."; return 2; } local round=1 while true; do local attempt=1 while (( attempt <= 3 )); do echo "[INFO] Push attempt $attempt/3 (round $round)..." git push origin "$branch" && return 0 ((attempt++)) (( attempt <= 3 )) && sleep 2 done read -r -p "Push gagal 3x. Coba 3x lagi? [y/N]: " again [[ "$again" =~ ^[Yy]$ ]] || return 2 ((round++)) done } if (( BUILD_ONLY == 0 )) && [[ -f "$JAR_PATH" ]]; then echo echo "[INFO] Build untuk versi $PROJECT_VERSION sudah tersedia:" echo " $JAR_PATH" while true; do read -r -p "[C] Compile ulang / [G] Git saja / [Q] Keluar: " action case "$action" in C|c) break ;; G|g) git_integration; exit $? ;; Q|q) exit 0 ;; esac done fi command -v java >/dev/null || { echo "[ERROR] Java tidak ditemukan."; exit 1; } JAVA_MAJOR="$(java --version 2>&1 | head -n1 | sed -E 's/.* ([0-9]+)(\..*)? .*/\1/')" [[ "$JAVA_MAJOR" =~ ^[0-9]+$ ]] && (( JAVA_MAJOR >= 25 )) || { echo "[ERROR] Java 25+ diperlukan."; exit 1; } chmod +x gradlew 2>/dev/null || true ./gradlew clean build || { echo "[ERROR] Build gagal."; exit 1; } [[ -f "$JAR_PATH" ]] || { echo "[ERROR] Build selesai tetapi JAR yang diharapkan tidak ditemukan:" echo " $JAR_PATH" ls -1 build/libs/*.jar 2>/dev/null || true exit 1 } echo echo "BUILD SUCCESS" echo "JAR: $JAR_PATH" (( BUILD_ONLY == 1 )) && exit 0 read -r -p "Commit dan push perubahan ke Git? [y/N]: " push [[ "$push" =~ ^[Yy]$ ]] && git_integration exit $?