@echo off setlocal EnableExtensions EnableDelayedExpansion cd /d "%~dp0" set "BUILD_ONLY=0" if /I "%~1"=="--build-only" set "BUILD_ONLY=1" if not exist "gradle.properties" ( echo [ERROR] gradle.properties tidak ditemukan. goto :failed ) for /f "tokens=1,* delims==" %%A in (gradle.properties) do ( if "%%A"=="mod_version" set "MOD_VERSION=%%B" if "%%A"=="minecraft_version" set "MC_VERSION=%%B" if "%%A"=="archives_base_name" set "ARCHIVES_BASE_NAME=%%B" ) if not defined MOD_VERSION goto :properties_failed if not defined MC_VERSION goto :properties_failed if not defined ARCHIVES_BASE_NAME set "ARCHIVES_BASE_NAME=item-despawn-timer" set "PROJECT_VERSION=%MOD_VERSION%+mc%MC_VERSION%" set "JAR_PATH=%CD%\build\libs\%ARCHIVES_BASE_NAME%-%PROJECT_VERSION%.jar" set "GIT_ONLY=0" echo ============================================ echo Item Despawn Timer - Fabric %MC_VERSION% echo Version: %PROJECT_VERSION% echo ============================================ REM Nama JAR Gradle berasal langsung dari gradle.properties/build.gradle. REM Jadi jika JAR versi saat ini sudah ada, jangan compile otomatis. if "%BUILD_ONLY%"=="0" if exist "%JAR_PATH%" ( echo. echo [INFO] Build untuk versi %PROJECT_VERSION% sudah tersedia: echo %JAR_PATH% echo. choice /C CGQ /N /M "[C] Compile ulang / [G] Git saja / [Q] Keluar: " if errorlevel 3 exit /b 0 if errorlevel 2 ( set "GIT_ONLY=1" goto :git_integration ) ) call :check_java if errorlevel 1 goto :failed echo. echo [INFO] Menjalankan clean build... call gradlew.bat clean build if errorlevel 1 goto :build_failed if not exist "%JAR_PATH%" ( echo. echo [ERROR] Gradle selesai tanpa error, tetapi JAR yang diharapkan tidak ditemukan: echo %JAR_PATH% echo [INFO] Isi build\libs: dir /b build\libs\*.jar 2>nul goto :failed ) echo. echo ============================================ echo BUILD SUCCESS echo ============================================ echo JAR: %JAR_PATH% if "%BUILD_ONLY%"=="1" exit /b 0 echo. choice /C YN /N /M "Commit dan push perubahan ke Git? [Y/N]: " if errorlevel 2 goto :success :git_integration echo. echo ============================================ echo Git Integration echo ============================================ if "%GIT_ONLY%"=="1" echo [INFO] Build dilewati karena JAR %PROJECT_VERSION% sudah tersedia. where git.exe >nul 2>&1 if errorlevel 1 ( echo [ERROR] Git tidak ditemukan di PATH. goto :git_failed ) git rev-parse --is-inside-work-tree >nul 2>&1 if errorlevel 1 ( echo [ERROR] Folder ini bukan Git repository. goto :git_failed ) set "HAS_CHANGES=" for /f "delims=" %%G in ('git status --porcelain') do set "HAS_CHANGES=1" if defined HAS_CHANGES ( echo. git status --short echo. set "DEFAULT_MSG=Update Item Despawn Timer v%PROJECT_VERSION%" set "COMMIT_MESSAGE=" set /p "COMMIT_MESSAGE=Commit message [!DEFAULT_MSG!]: " if not defined COMMIT_MESSAGE set "COMMIT_MESSAGE=!DEFAULT_MSG!" git add -A if errorlevel 1 goto :git_failed git commit -m "!COMMIT_MESSAGE!" if errorlevel 1 goto :git_failed ) else ( echo [INFO] Tidak ada perubahan source untuk di-commit. ) for /f "delims=" %%B in ('git branch --show-current') do set "CURRENT_BRANCH=%%B" if not defined CURRENT_BRANCH ( echo [ERROR] Branch aktif tidak dapat ditentukan. goto :git_failed ) git remote get-url origin >nul 2>&1 if errorlevel 1 ( echo [ERROR] Remote 'origin' belum dikonfigurasi. goto :git_failed ) call :push_with_retry if errorlevel 1 goto :git_failed echo. echo [SUCCESS] Git push berhasil. goto :success :check_java where java.exe >nul 2>&1 if errorlevel 1 ( echo [ERROR] Java tidak ditemukan di PATH. exit /b 1 ) set "JAVA_MAJOR=" for /f "tokens=2" %%V in ('java --version 2^>^&1 ^| findstr /R /C:"^openjdk " /C:"^java "') do ( if not defined JAVA_VERSION set "JAVA_VERSION=%%V" ) if not defined JAVA_VERSION ( echo [ERROR] Versi Java tidak dapat dibaca. exit /b 1 ) for /f "tokens=1 delims=." %%M in ("%JAVA_VERSION%") do set "JAVA_MAJOR=%%M" if %JAVA_MAJOR% LSS 25 ( echo [ERROR] Minecraft 26.2 memerlukan Java 25+. Terdeteksi: %JAVA_VERSION% exit /b 1 ) echo [OK] Java %JAVA_VERSION% exit /b 0 :push_with_retry set /a PUSH_ROUND=1 :push_round set /a PUSH_ATTEMPT=1 :push_try echo [INFO] Push attempt !PUSH_ATTEMPT!/3 ^(round !PUSH_ROUND!^)... git push origin "!CURRENT_BRANCH!" if not errorlevel 1 exit /b 0 if !PUSH_ATTEMPT! LSS 3 ( set /a PUSH_ATTEMPT+=1 timeout /t 2 /nobreak >nul goto :push_try ) echo. choice /C YN /N /M "Push gagal 3x. Coba 3x lagi? [Y/N]: " if errorlevel 2 exit /b 1 set /a PUSH_ROUND+=1 goto :push_round :properties_failed echo [ERROR] mod_version atau minecraft_version tidak ditemukan di gradle.properties. goto :failed :build_failed echo. echo ============================================ echo BUILD FAILED echo ============================================ if "%BUILD_ONLY%"=="1" exit /b 1 pause exit /b 1 :git_failed echo. echo ============================================ echo GIT FAILED echo ============================================ echo [INFO] Build/JAR yang sudah ada tetap aman. pause exit /b 2 :success echo. echo ============================================ echo Item Despawn Timer %PROJECT_VERSION% selesai. echo ============================================ pause exit /b 0 :failed echo. echo [ERROR] Proses dihentikan. if "%BUILD_ONLY%"=="1" exit /b 1 pause exit /b 1