diff --git a/README.md b/README.md index d21128e..58fe431 100644 --- a/README.md +++ b/README.md @@ -21,13 +21,14 @@ Double-click `compile.bat` atau jalankan: .\compile.bat ``` -Atau langsung: +Linux/macOS: -```powershell -.\compile.ps1 +```bash +chmod +x compile.sh release.sh +./compile.sh ``` -Kedua script membaca `mod_version` dan `minecraft_version` langsung dari `gradle.properties`. Header build akan menampilkan versi yang sedang di-compile, misalnya: +`compile.bat` dan `compile.sh` membaca `mod_version` dan `minecraft_version` langsung dari `gradle.properties`. Setelah `BUILD SUCCESS`, script akan menanyakan apakah source ingin di-commit dan di-push ke Git/Gitea. Header build akan menampilkan versi yang sedang di-compile, misalnya: ```text ============================================ @@ -46,6 +47,39 @@ build/libs/lobby-systems-1.2.0.jar `*-sources.jar` hanya source archive dan tidak perlu dipasang ke server. + +## Membuat Gitea Release + +Gunakan `release.bat` di Windows atau `./release.sh` di Linux/macOS. Release script akan: + +1. menjalankan build melalui mode `--build-only`; +2. memastikan source sudah di-commit/push; +3. membuat/push tag `v`; +4. membuat Gitea Release melalui API; +5. mengupload `build/libs/lobby-systems-.jar` sebagai release asset. + +Default repository release: + +```text +https://git.darto.id/dartokloning/lobby-systems +``` + +API release membutuhkan Gitea Personal Access Token. Jangan simpan token di repository. Anda dapat memasukkan token ketika script meminta, atau menyediakan environment variable `GITEA_TOKEN`. + +## Console state logging + +State penting Lobby Systems memakai separator agar mudah terlihat di server console, antara lain startup, config load, player-position store ready, portal load, reload, player join/disconnect, portal create/delete, dan teleport. Contoh: + +```text +============================================ + Lobby Systems - READY + Version: 1.2.0 + Minecraft: 26.2 + Config directory: config/lobby + WorldEdit: available +============================================ +``` + ## Struktur konfigurasi v1.2.0 ```text diff --git a/compile.bat b/compile.bat index c47fa5c..daeb8f0 100644 --- a/compile.bat +++ b/compile.bat @@ -4,17 +4,13 @@ setlocal EnableExtensions EnableDelayedExpansion REM ============================================================ REM Lobby Systems - Fabric Build Script REM Windows -REM -REM Features: -REM - Read version from gradle.properties -REM - Check Java 25 -REM - Download Gradle 9.5.1 automatically if needed -REM - Clean build -REM - Ask for Git commit + push ONLY after BUILD SUCCESS REM ============================================================ cd /d "%~dp0" +set "BUILD_ONLY=0" +if /I "%~1"=="--build-only" set "BUILD_ONLY=1" + set "GRADLE_PROPERTIES=%CD%\gradle.properties" set "LOCAL_GRADLE_DIR=%CD%\.gradle-local" set "GRADLE_VERSION=9.5.1" @@ -25,10 +21,6 @@ set "MOD_VERSION=" set "MINECRAFT_VERSION=" set "MAVEN_GROUP=" -REM ============================================================ -REM Read gradle.properties -REM ============================================================ - if not exist "%GRADLE_PROPERTIES%" ( echo [ERROR] gradle.properties tidak ditemukan. goto :failed @@ -51,12 +43,7 @@ echo Namespace: id.dartokloning.lobbysystems echo Mod ID: dartokloning echo ============================================ -REM ============================================================ -REM Check Java -REM ============================================================ - where java.exe >nul 2>&1 - if errorlevel 1 ( echo [ERROR] Java tidak ditemukan di PATH. echo Install JDK 25, buka terminal baru, lalu jalankan script lagi. @@ -69,11 +56,9 @@ for /f "delims=" %%J in ('where java.exe 2^>nul') do ( ) :java_path_found - echo [INFO] Java executable: %JAVA_PATH% set "JAVA_VERSION=" - 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" ) @@ -83,9 +68,7 @@ if not defined JAVA_VERSION ( goto :failed ) -for /f "tokens=1 delims=." %%M in ("%JAVA_VERSION%") do ( - set "JAVA_MAJOR=%%M" -) +for /f "tokens=1 delims=." %%M in ("%JAVA_VERSION%") do set "JAVA_MAJOR=%%M" if not "%JAVA_MAJOR%"=="25" ( echo [ERROR] Java 25 diperlukan. @@ -95,42 +78,30 @@ if not "%JAVA_MAJOR%"=="25" ( echo [OK] Java 25 terdeteksi. -REM ============================================================ -REM Prepare Gradle -REM ============================================================ - if exist "%GRADLE_BIN%" goto :gradle_ready echo [INFO] Gradle %GRADLE_VERSION% belum tersedia. echo [INFO] Mengunduh distribusi resmi... -if not exist "%LOCAL_GRADLE_DIR%" ( - mkdir "%LOCAL_GRADLE_DIR%" -) +if not exist "%LOCAL_GRADLE_DIR%" mkdir "%LOCAL_GRADLE_DIR%" set "GRADLE_ZIP=%LOCAL_GRADLE_DIR%\gradle-%GRADLE_VERSION%-bin.zip" set "GRADLE_URL=https://services.gradle.org/distributions/gradle-%GRADLE_VERSION%-bin.zip" where curl.exe >nul 2>&1 - if errorlevel 1 ( echo [ERROR] curl.exe tidak ditemukan. - echo Windows 10/11 biasanya sudah menyediakan curl. goto :failed ) curl.exe -L --fail --progress-bar "%GRADLE_URL%" -o "%GRADLE_ZIP%" - if errorlevel 1 ( echo [ERROR] Gagal mengunduh Gradle %GRADLE_VERSION%. goto :failed ) echo [INFO] Mengekstrak Gradle %GRADLE_VERSION%... - -powershell.exe -NoProfile -ExecutionPolicy Bypass -Command ^ - "Expand-Archive -LiteralPath '%GRADLE_ZIP%' -DestinationPath '%LOCAL_GRADLE_DIR%' -Force" - +powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "Expand-Archive -LiteralPath '%GRADLE_ZIP%' -DestinationPath '%LOCAL_GRADLE_DIR%' -Force" if errorlevel 1 ( echo [ERROR] Gagal mengekstrak Gradle. goto :failed @@ -144,31 +115,19 @@ if not exist "%GRADLE_BIN%" ( ) :gradle_ready - echo [OK] Gradle %GRADLE_VERSION% tersedia. - -REM ============================================================ -REM Build -REM ============================================================ - echo [INFO] Menjalankan clean build Lobby Systems v%MOD_VERSION%... echo. call "%GRADLE_BIN%" clean build --no-daemon - if errorlevel 1 goto :build_failed -REM ============================================================ -REM BUILD SUCCESS -REM ============================================================ - echo. echo ============================================ echo BUILD SUCCESS echo ============================================ set "JAR_PATH=%CD%\build\libs\lobby-systems-%MOD_VERSION%.jar" - if exist "%JAR_PATH%" ( echo JAR: echo %JAR_PATH% @@ -177,26 +136,21 @@ if exist "%JAR_PATH%" ( echo %JAR_PATH% ) +REM release.bat memakai mode ini supaya prompt Git tidak muncul dua kali. +if "%BUILD_ONLY%"=="1" exit /b 0 + echo. - -REM ============================================================ -REM Ask whether to continue to Git -REM ============================================================ - choice /C YN /N /M "Commit dan push perubahan ke Git/Gitea? [Y/N]: " - if errorlevel 2 goto :skip_git if errorlevel 1 goto :git_integration :git_integration - echo. echo ============================================ echo Git Integration echo ============================================ where git.exe >nul 2>&1 - if errorlevel 1 ( echo [ERROR] Git tidak ditemukan di PATH. echo Build tetap berhasil, tetapi Git tidak dapat dijalankan. @@ -204,7 +158,6 @@ if errorlevel 1 ( ) git rev-parse --is-inside-work-tree >nul 2>&1 - if errorlevel 1 ( echo [ERROR] Folder ini belum menjadi Git repository. echo. @@ -217,12 +170,8 @@ if errorlevel 1 ( ) echo [INFO] Memeriksa perubahan... - set "HAS_CHANGES=" - -for /f "delims=" %%G in ('git status --porcelain') do ( - set "HAS_CHANGES=1" -) +for /f "delims=" %%G in ('git status --porcelain') do set "HAS_CHANGES=1" if defined HAS_CHANGES ( echo. @@ -231,76 +180,45 @@ if defined HAS_CHANGES ( echo. set "COMMIT_MESSAGE=" - set /p "COMMIT_MESSAGE=Commit message [Lobby Systems v%MOD_VERSION% build]: " - - if not defined COMMIT_MESSAGE ( - for /f "tokens=1-3 delims=/ " %%A in ("%date%") do ( - set "DATESTAMP=%date%" - ) - - set "COMMIT_MESSAGE=Lobby Systems v%MOD_VERSION% build" - ) + if not defined COMMIT_MESSAGE set "COMMIT_MESSAGE=Lobby Systems v%MOD_VERSION% build" echo. echo [INFO] Menambahkan perubahan ke staging... - git add -A - if errorlevel 1 ( echo [ERROR] git add gagal. goto :git_failed ) echo [INFO] Membuat commit... - git commit -m "!COMMIT_MESSAGE!" - if errorlevel 1 ( echo [ERROR] git commit gagal. goto :git_failed ) - ) else ( echo [INFO] Tidak ada perubahan source yang perlu di-commit. echo [INFO] Akan mencoba push commit yang sudah ada. ) -REM ============================================================ -REM Determine current branch -REM ============================================================ - set "CURRENT_BRANCH=" - -for /f "delims=" %%B in ('git branch --show-current') do ( - set "CURRENT_BRANCH=%%B" -) +for /f "delims=" %%B in ('git branch --show-current') do set "CURRENT_BRANCH=%%B" if not defined CURRENT_BRANCH ( echo [ERROR] Tidak dapat menentukan branch Git aktif. goto :git_failed ) -REM ============================================================ -REM Check origin -REM ============================================================ - git remote get-url origin >nul 2>&1 - if errorlevel 1 ( echo [ERROR] Remote Git 'origin' belum dikonfigurasi. - echo. - echo Tambahkan Gitea dengan: - echo git remote add origin ^ - echo. echo Commit lokal tetap tersimpan. goto :git_failed ) echo [INFO] Push ke origin/!CURRENT_BRANCH!... - git push origin "!CURRENT_BRANCH!" - if errorlevel 1 ( echo [ERROR] Git push gagal. echo [INFO] Commit lokal tetap tersimpan. @@ -311,22 +229,12 @@ echo. echo [SUCCESS] Push ke Git/Gitea berhasil. goto :success -REM ============================================================ -REM Skip Git -REM ============================================================ - :skip_git - echo. echo [INFO] Git commit/push dilewati. goto :success -REM ============================================================ -REM Success -REM ============================================================ - :success - echo. echo ============================================ echo Lobby Systems v%MOD_VERSION% selesai. @@ -335,13 +243,7 @@ echo. pause exit /b 0 -REM ============================================================ -REM Build failed -REM Git section is NEVER reached -REM ============================================================ - :build_failed - echo. echo ============================================ echo BUILD FAILED @@ -350,11 +252,11 @@ echo. echo [ERROR] Build gagal. echo [INFO] Git Integration tidak dijalankan. echo. +if "%BUILD_ONLY%"=="1" exit /b 1 pause exit /b 1 :git_failed - echo. echo ============================================ echo GIT FAILED @@ -367,9 +269,9 @@ pause exit /b 2 :failed - echo. echo Build gagal. echo. +if "%BUILD_ONLY%"=="1" exit /b 1 pause -exit /b 1 \ No newline at end of file +exit /b 1 diff --git a/compile.sh b/compile.sh index 5e22b27..b711945 100644 --- a/compile.sh +++ b/compile.sh @@ -3,63 +3,33 @@ # ============================================================ # Lobby Systems - Fabric Build Script # Linux / macOS -# -# Features: -# - Read version from gradle.properties -# - Check Java 25 -# - Download Gradle 9.5.1 automatically if needed -# - Clean build -# - Ask for Git commit + push ONLY after BUILD SUCCESS # ============================================================ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "$SCRIPT_DIR" || exit 1 +BUILD_ONLY=0 +if [[ "${1:-}" == "--build-only" ]]; then + BUILD_ONLY=1 +fi + GRADLE_PROPERTIES="$SCRIPT_DIR/gradle.properties" - LOCAL_GRADLE_DIR="$SCRIPT_DIR/.gradle-local" - GRADLE_VERSION="9.5.1" GRADLE_HOME="$LOCAL_GRADLE_DIR/gradle-$GRADLE_VERSION" GRADLE_BIN="$GRADLE_HOME/bin/gradle" -# ============================================================ -# Helper functions -# ============================================================ - -info() { - echo "[INFO] $1" -} - -ok() { - echo "[OK] $1" -} - -warn() { - echo "[WARN] $1" -} - -error() { - echo "[ERROR] $1" -} - -separator() { - echo "============================================" -} +info() { echo "[INFO] $1"; } +ok() { echo "[OK] $1"; } +warn() { echo "[WARN] $1"; } +error() { echo "[ERROR] $1"; } +separator() { echo "============================================"; } read_property() { local key="$1" - - grep -E "^${key}=" "$GRADLE_PROPERTIES" \ - | head -n 1 \ - | cut -d'=' -f2- \ - | tr -d '\r' + grep -E "^${key}=" "$GRADLE_PROPERTIES" | head -n 1 | cut -d'=' -f2- | tr -d '\r' } -# ============================================================ -# Read gradle.properties -# ============================================================ - if [[ ! -f "$GRADLE_PROPERTIES" ]]; then error "gradle.properties tidak ditemukan." exit 1 @@ -69,17 +39,9 @@ MOD_VERSION="$(read_property "mod_version")" MINECRAFT_VERSION="$(read_property "minecraft_version")" MAVEN_GROUP="$(read_property "maven_group")" -if [[ -z "$MOD_VERSION" ]]; then - MOD_VERSION="unknown" -fi - -if [[ -z "$MINECRAFT_VERSION" ]]; then - MINECRAFT_VERSION="26.2" -fi - -if [[ -z "$MAVEN_GROUP" ]]; then - MAVEN_GROUP="id.dartokloning" -fi +[[ -z "$MOD_VERSION" ]] && MOD_VERSION="unknown" +[[ -z "$MINECRAFT_VERSION" ]] && MINECRAFT_VERSION="26.2" +[[ -z "$MAVEN_GROUP" ]] && MAVEN_GROUP="id.dartokloning" separator echo " Lobby Systems - Fabric $MINECRAFT_VERSION Build" @@ -88,10 +50,6 @@ echo " Namespace: id.dartokloning.lobbysystems" echo " Mod ID: dartokloning" separator -# ============================================================ -# Check Java -# ============================================================ - if ! command -v java >/dev/null 2>&1; then error "Java tidak ditemukan di PATH." echo "Install JDK 25 lalu jalankan script lagi." @@ -99,13 +57,10 @@ if ! command -v java >/dev/null 2>&1; then fi JAVA_PATH="$(command -v java)" - info "Java executable: $JAVA_PATH" JAVA_VERSION_OUTPUT="$(java --version 2>&1 | head -n 1)" - JAVA_VERSION="$(echo "$JAVA_VERSION_OUTPUT" | awk '{print $2}')" - JAVA_MAJOR="$(echo "$JAVA_VERSION" | cut -d'.' -f1)" if [[ "$JAVA_MAJOR" != "25" ]]; then @@ -117,45 +72,24 @@ fi ok "Java 25 terdeteksi." -# ============================================================ -# Prepare Gradle -# ============================================================ - if [[ ! -x "$GRADLE_BIN" ]]; then - info "Gradle $GRADLE_VERSION belum tersedia." info "Mengunduh distribusi resmi..." mkdir -p "$LOCAL_GRADLE_DIR" GRADLE_ZIP="$LOCAL_GRADLE_DIR/gradle-$GRADLE_VERSION-bin.zip" - GRADLE_URL="https://services.gradle.org/distributions/gradle-$GRADLE_VERSION-bin.zip" if command -v curl >/dev/null 2>&1; then - - curl \ - -L \ - --fail \ - --progress-bar \ - "$GRADLE_URL" \ - -o "$GRADLE_ZIP" - + curl -L --fail --progress-bar "$GRADLE_URL" -o "$GRADLE_ZIP" DOWNLOAD_RESULT=$? - elif command -v wget >/dev/null 2>&1; then - - wget \ - "$GRADLE_URL" \ - -O "$GRADLE_ZIP" - + wget "$GRADLE_URL" -O "$GRADLE_ZIP" DOWNLOAD_RESULT=$? - else - error "curl atau wget tidak ditemukan." exit 1 - fi if [[ $DOWNLOAD_RESULT -ne 0 ]]; then @@ -170,12 +104,7 @@ if [[ ! -x "$GRADLE_BIN" ]]; then exit 1 fi - unzip \ - -q \ - -o \ - "$GRADLE_ZIP" \ - -d "$LOCAL_GRADLE_DIR" - + unzip -q -o "$GRADLE_ZIP" -d "$LOCAL_GRADLE_DIR" EXTRACT_RESULT=$? if [[ $EXTRACT_RESULT -ne 0 ]]; then @@ -194,40 +123,23 @@ fi ok "Gradle $GRADLE_VERSION tersedia." -# ============================================================ -# Build -# ============================================================ - info "Menjalankan clean build Lobby Systems v$MOD_VERSION..." - echo "$GRADLE_BIN" clean build --no-daemon - BUILD_RESULT=$? -# ============================================================ -# BUILD FAILED -# ============================================================ - if [[ $BUILD_RESULT -ne 0 ]]; then - echo separator echo " BUILD FAILED" separator echo - error "Build gagal dengan exit code $BUILD_RESULT." info "Git Integration tidak dijalankan." - exit "$BUILD_RESULT" fi -# ============================================================ -# BUILD SUCCESS -# ============================================================ - echo separator echo " BUILD SUCCESS" @@ -236,210 +148,123 @@ separator JAR_PATH="$SCRIPT_DIR/build/libs/lobby-systems-$MOD_VERSION.jar" if [[ -f "$JAR_PATH" ]]; then - echo "JAR:" echo "$JAR_PATH" - else - warn "Build berhasil, tetapi JAR utama tidak ditemukan pada:" echo "$JAR_PATH" - fi -# ============================================================ -# Ask whether to use Git -# ============================================================ +# release.sh memakai mode ini supaya build tidak menampilkan prompt Git dua kali. +if [[ $BUILD_ONLY -eq 1 ]]; then + exit 0 +fi echo - read -r -p "Commit dan push perubahan ke Git/Gitea? [Y/N]: " GIT_CONFIRM case "$GIT_CONFIRM" in - - y|Y|yes|YES|Yes) - ;; - + y|Y|yes|YES|Yes) ;; *) echo info "Git commit/push dilewati." - echo separator echo " Lobby Systems v$MOD_VERSION selesai." separator - exit 0 ;; esac -# ============================================================ -# Git Integration -# ============================================================ - echo separator echo " Git Integration" separator -# ------------------------------------------------------------ -# Check Git -# ------------------------------------------------------------ - if ! command -v git >/dev/null 2>&1; then - error "Git tidak ditemukan di PATH." info "Build tetap berhasil." - exit 0 fi -# ------------------------------------------------------------ -# Check repository -# ------------------------------------------------------------ - if ! git rev-parse --is-inside-work-tree >/dev/null 2>&1; then - error "Folder ini belum menjadi Git repository." - echo echo "Jalankan terlebih dahulu:" - echo echo " git init" echo " git branch -M main" echo " git remote add origin " echo - exit 0 fi -# ------------------------------------------------------------ -# Check source changes -# ------------------------------------------------------------ - info "Memeriksa perubahan Git..." - CHANGES="$(git status --porcelain)" if [[ -n "$CHANGES" ]]; then - echo echo "Perubahan ditemukan:" echo - git status --short - echo - read -r -p \ - "Commit message [Lobby Systems v$MOD_VERSION build]: " \ - COMMIT_MESSAGE + read -r -p "Commit message [Lobby Systems v$MOD_VERSION build]: " COMMIT_MESSAGE if [[ -z "$COMMIT_MESSAGE" ]]; then - TIMESTAMP="$(date '+%Y-%m-%d %H:%M:%S')" - COMMIT_MESSAGE="Lobby Systems v$MOD_VERSION build - $TIMESTAMP" - fi - # -------------------------------------------------------- - # Git Add - # -------------------------------------------------------- - info "Menambahkan perubahan ke staging..." - if ! git add -A; then - error "git add gagal." exit 2 - fi - # -------------------------------------------------------- - # Git Commit - # -------------------------------------------------------- - info "Membuat commit..." - if ! git commit -m "$COMMIT_MESSAGE"; then - error "git commit gagal." exit 2 - fi - else - info "Tidak ada perubahan source yang perlu di-commit." info "Akan mencoba push commit yang sudah ada." - fi -# ============================================================ -# Determine current branch -# ============================================================ - CURRENT_BRANCH="$(git branch --show-current)" if [[ -z "$CURRENT_BRANCH" ]]; then - error "Tidak dapat menentukan branch Git aktif." exit 2 - fi info "Branch aktif: $CURRENT_BRANCH" -# ============================================================ -# Check origin -# ============================================================ - if ! git remote get-url origin >/dev/null 2>&1; then - error "Remote Git 'origin' belum dikonfigurasi." - echo echo "Tambahkan remote Gitea dengan:" - echo echo " git remote add origin " echo - info "Commit lokal tetap tersimpan." - exit 2 fi REMOTE_URL="$(git remote get-url origin)" - info "Remote origin: $REMOTE_URL" - -# ============================================================ -# Git Push -# ============================================================ - info "Push ke origin/$CURRENT_BRANCH..." if ! git push origin "$CURRENT_BRANCH"; then - echo error "Git push gagal." info "Commit lokal tetap tersimpan." - exit 2 - fi -# ============================================================ -# Complete -# ============================================================ - echo ok "Push ke Git/Gitea berhasil." - echo separator echo " Lobby Systems v$MOD_VERSION selesai." separator - -exit 0 \ No newline at end of file +exit 0 diff --git a/gradle.properties b/gradle.properties index e756702..d3a12f0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,6 +5,6 @@ minecraft_version=26.2 loader_version=0.19.3 loom_version=1.17-SNAPSHOT fabric_api_version=0.156.0+26.2 -mod_version=1.2.0 +mod_version=1.2.1 maven_group=id.dartokloning archives_base_name=lobby-systems diff --git a/release.bat b/release.bat new file mode 100644 index 0000000..d56cfba --- /dev/null +++ b/release.bat @@ -0,0 +1,242 @@ +@echo off +setlocal EnableExtensions EnableDelayedExpansion + +REM ============================================================ +REM Lobby Systems - Gitea Release Script +REM Windows +REM ============================================================ + +cd /d "%~dp0" + +if not defined GITEA_BASE_URL set "GITEA_BASE_URL=https://git.darto.id" +if not defined GITEA_OWNER set "GITEA_OWNER=dartokloning" +if not defined GITEA_REPO set "GITEA_REPO=lobby-systems" + +set "MOD_VERSION=" +set "MINECRAFT_VERSION=" + +for /f "usebackq tokens=1,* delims==" %%A in ("gradle.properties") do ( + if "%%A"=="mod_version" set "MOD_VERSION=%%B" + if "%%A"=="minecraft_version" set "MINECRAFT_VERSION=%%B" +) + +if not defined MOD_VERSION ( + echo [ERROR] mod_version tidak ditemukan di gradle.properties. + exit /b 1 +) + +set "TAG=v%MOD_VERSION%" +set "JAR_NAME=lobby-systems-%MOD_VERSION%.jar" +set "JAR_PATH=%CD%\build\libs\%JAR_NAME%" + +echo ============================================ +echo Lobby Systems - Release %TAG% +echo Minecraft: %MINECRAFT_VERSION% +echo Gitea: %GITEA_BASE_URL%/%GITEA_OWNER%/%GITEA_REPO% +echo ============================================ +echo. +echo [INFO] Menjalankan build terlebih dahulu... + +call "%CD%\compile.bat" --build-only +if errorlevel 1 ( + echo [ERROR] Release dibatalkan karena build gagal. + exit /b 1 +) + +if not exist "%JAR_PATH%" ( + echo [ERROR] JAR release tidak ditemukan: + echo %JAR_PATH% + exit /b 1 +) + +where git.exe >nul 2>&1 +if errorlevel 1 ( + echo [ERROR] Git tidak ditemukan di PATH. + exit /b 1 +) + +where curl.exe >nul 2>&1 +if errorlevel 1 ( + echo [ERROR] curl.exe tidak ditemukan di PATH. + exit /b 1 +) + +git rev-parse --is-inside-work-tree >nul 2>&1 +if errorlevel 1 ( + echo [ERROR] Folder ini bukan Git repository. + exit /b 1 +) + +set "CURRENT_BRANCH=" +for /f "delims=" %%B in ('git branch --show-current') do set "CURRENT_BRANCH=%%B" +if not defined CURRENT_BRANCH ( + echo [ERROR] Tidak dapat menentukan branch Git aktif. + exit /b 1 +) + +git remote get-url origin >nul 2>&1 +if errorlevel 1 ( + echo [ERROR] Remote 'origin' belum dikonfigurasi. + exit /b 1 +) + +echo. +echo ============================================ +echo Git Release Preparation +echo ============================================ + +set "HAS_CHANGES=" +for /f "delims=" %%G in ('git status --porcelain') do set "HAS_CHANGES=1" + +if defined HAS_CHANGES ( + echo. + echo Perubahan source belum di-commit: + git status --short + echo. + choice /C YN /N /M "Commit dan push perubahan sebelum membuat release? [Y/N]: " + if errorlevel 2 ( + echo [WARN] Release dibatalkan. Source harus bersih agar tag sesuai dengan build. + exit /b 0 + ) + + set "COMMIT_MESSAGE=" + set /p "COMMIT_MESSAGE=Commit message [Prepare Lobby Systems %TAG% release]: " + if not defined COMMIT_MESSAGE set "COMMIT_MESSAGE=Prepare Lobby Systems %TAG% release" + + git add -A + if errorlevel 1 exit /b 2 + + git commit -m "!COMMIT_MESSAGE!" + if errorlevel 1 exit /b 2 +) + +echo [INFO] Push branch !CURRENT_BRANCH! ke origin... +git push origin "!CURRENT_BRANCH!" +if errorlevel 1 ( + echo [ERROR] Push branch gagal. Release dibatalkan. + exit /b 2 +) + +set "HEAD_COMMIT=" +for /f "delims=" %%H in ('git rev-parse HEAD') do set "HEAD_COMMIT=%%H" + +set "TAG_COMMIT=" +for /f "delims=" %%T in ('git rev-list -n 1 "%TAG%" 2^>nul') do set "TAG_COMMIT=%%T" + +if defined TAG_COMMIT ( + if /I not "!TAG_COMMIT!"=="!HEAD_COMMIT!" ( + echo [ERROR] Tag %TAG% sudah ada tetapi menunjuk commit lain. + echo Tag : !TAG_COMMIT! + echo HEAD: !HEAD_COMMIT! + echo Naikkan mod_version sebelum membuat release baru. + exit /b 2 + ) + echo [INFO] Tag lokal %TAG% sudah ada pada commit saat ini. +) else ( + echo [INFO] Membuat tag %TAG%... + git tag -a "%TAG%" -m "Lobby Systems %TAG%" + if errorlevel 1 exit /b 2 +) + +git ls-remote --exit-code --tags origin "refs/tags/%TAG%" >nul 2>&1 +if errorlevel 1 ( + echo [INFO] Push tag %TAG% ke origin... + git push origin "%TAG%" + if errorlevel 1 exit /b 2 +) else ( + echo [INFO] Tag %TAG% sudah ada di origin. +) + +echo. +echo ============================================ +echo Gitea Release +echo ============================================ +choice /C YN /N /M "Buat Release %TAG% dan upload %JAR_NAME%? [Y/N]: " +if errorlevel 2 ( + echo [INFO] Pembuatan Gitea Release dilewati. Tag %TAG% tetap sudah tersimpan. + exit /b 0 +) + +if not defined GITEA_TOKEN ( + echo. + set /p "GITEA_TOKEN=Gitea Personal Access Token: " +) + +if not defined GITEA_TOKEN ( + echo [ERROR] Token Gitea kosong. + exit /b 2 +) + +set "API_BASE=%GITEA_BASE_URL%/api/v1/repos/%GITEA_OWNER%/%GITEA_REPO%" +set "RELEASE_JSON=%TEMP%\lobby-release-%RANDOM%.json" +set "CREATE_JSON=%TEMP%\lobby-create-%RANDOM%.json" +set "ASSET_JSON=%TEMP%\lobby-asset-%RANDOM%.json" + +set "HTTP_CODE=" +for /f "delims=" %%H in ('curl.exe -sS -o "!RELEASE_JSON!" -w "%%{http_code}" -H "Authorization: token !GITEA_TOKEN!" "!API_BASE!/releases/tags/%TAG%"') do set "HTTP_CODE=%%H" + +if "!HTTP_CODE!"=="200" ( + echo [INFO] Release %TAG% sudah ada. Akan menggunakan release tersebut. +) else if "!HTTP_CODE!"=="404" ( + >"!CREATE_JSON!" echo { + >>"!CREATE_JSON!" echo "tag_name": "%TAG%", + >>"!CREATE_JSON!" echo "target_commitish": "!CURRENT_BRANCH!", + >>"!CREATE_JSON!" echo "name": "Lobby Systems %TAG%", + >>"!CREATE_JSON!" echo "body": "Lobby Systems %TAG% untuk Minecraft %MINECRAFT_VERSION%.", + >>"!CREATE_JSON!" echo "draft": false, + >>"!CREATE_JSON!" echo "prerelease": false + >>"!CREATE_JSON!" echo } + + echo [INFO] Membuat Release %TAG% di Gitea... + set "HTTP_CODE=" + for /f "delims=" %%H in ('curl.exe -sS -o "!RELEASE_JSON!" -w "%%{http_code}" -X POST -H "Authorization: token !GITEA_TOKEN!" -H "Content-Type: application/json" --data-binary "@!CREATE_JSON!" "!API_BASE!/releases"') do set "HTTP_CODE=%%H" + + if not "!HTTP_CODE!"=="201" ( + echo [ERROR] Gitea gagal membuat release. HTTP !HTTP_CODE! + type "!RELEASE_JSON!" + del /q "!RELEASE_JSON!" "!CREATE_JSON!" "!ASSET_JSON!" >nul 2>&1 + exit /b 2 + ) +) else ( + echo [ERROR] Gagal memeriksa release. HTTP !HTTP_CODE! + type "!RELEASE_JSON!" + del /q "!RELEASE_JSON!" "!CREATE_JSON!" "!ASSET_JSON!" >nul 2>&1 + exit /b 2 +) + +set "RELEASE_ID=" +for /f "delims=" %%I in ('powershell.exe -NoProfile -Command "$r=Get-Content -Raw -LiteralPath '!RELEASE_JSON!' ^| ConvertFrom-Json; $r.id"') do set "RELEASE_ID=%%I" + +if not defined RELEASE_ID ( + echo [ERROR] Tidak dapat membaca release ID dari response Gitea. + type "!RELEASE_JSON!" + exit /b 2 +) + +echo [INFO] Release ID: !RELEASE_ID! +echo [INFO] Mengupload %JAR_NAME%... + +set "ASSET_CODE=" +for /f "delims=" %%H in ('curl.exe -sS -o "!ASSET_JSON!" -w "%%{http_code}" -X POST -H "Authorization: token !GITEA_TOKEN!" -F "attachment=@%JAR_PATH%" "!API_BASE!/releases/!RELEASE_ID!/assets?name=%JAR_NAME%"') do set "ASSET_CODE=%%H" + +if "!ASSET_CODE!"=="201" ( + echo. + echo [SUCCESS] Release %TAG% berhasil dibuat dan JAR berhasil diupload. +) else if "!ASSET_CODE!"=="409" ( + echo. + echo [WARN] Release sudah ada dan asset %JAR_NAME% tampaknya sudah terupload. +) else ( + echo [ERROR] Upload JAR gagal. HTTP !ASSET_CODE! + type "!ASSET_JSON!" + exit /b 2 +) + +del /q "!RELEASE_JSON!" "!CREATE_JSON!" "!ASSET_JSON!" >nul 2>&1 + +echo. +echo ============================================ +echo RELEASE SUCCESS +echo Tag: %TAG% +echo Asset: %JAR_NAME% +echo ============================================ +exit /b 0 diff --git a/release.sh b/release.sh new file mode 100644 index 0000000..2dae35a --- /dev/null +++ b/release.sh @@ -0,0 +1,237 @@ +#!/usr/bin/env bash + +# ============================================================ +# Lobby Systems - Gitea Release Script +# Linux / macOS +# ============================================================ + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +cd "$SCRIPT_DIR" || exit 1 + +GITEA_BASE_URL="${GITEA_BASE_URL:-https://git.darto.id}" +GITEA_OWNER="${GITEA_OWNER:-dartokloning}" +GITEA_REPO="${GITEA_REPO:-lobby-systems}" +GRADLE_PROPERTIES="$SCRIPT_DIR/gradle.properties" + +info() { echo "[INFO] $1"; } +ok() { echo "[OK] $1"; } +warn() { echo "[WARN] $1"; } +error() { echo "[ERROR] $1"; } +separator() { echo "============================================"; } +read_property() { grep -E "^${1}=" "$GRADLE_PROPERTIES" | head -n 1 | cut -d'=' -f2- | tr -d '\r'; } + +MOD_VERSION="$(read_property mod_version)" +MINECRAFT_VERSION="$(read_property minecraft_version)" +TAG="v$MOD_VERSION" +JAR_PATH="$SCRIPT_DIR/build/libs/lobby-systems-$MOD_VERSION.jar" +JAR_NAME="lobby-systems-$MOD_VERSION.jar" + +separator +echo " Lobby Systems - Release $TAG" +echo " Minecraft: $MINECRAFT_VERSION" +echo " Gitea: $GITEA_BASE_URL/$GITEA_OWNER/$GITEA_REPO" +separator + +echo +info "Menjalankan build terlebih dahulu..." +"$SCRIPT_DIR/compile.sh" --build-only +BUILD_RESULT=$? + +if [[ $BUILD_RESULT -ne 0 ]]; then + error "Release dibatalkan karena build gagal." + exit "$BUILD_RESULT" +fi + +if [[ ! -f "$JAR_PATH" ]]; then + error "JAR release tidak ditemukan: $JAR_PATH" + exit 1 +fi + +if ! command -v git >/dev/null 2>&1; then + error "Git tidak ditemukan di PATH." + exit 1 +fi + +if ! command -v curl >/dev/null 2>&1; then + error "curl tidak ditemukan di PATH." + exit 1 +fi + +if ! git rev-parse --is-inside-work-tree >/dev/null 2>&1; then + error "Folder ini bukan Git repository." + exit 1 +fi + +CURRENT_BRANCH="$(git branch --show-current)" +if [[ -z "$CURRENT_BRANCH" ]]; then + error "Tidak dapat menentukan branch Git aktif." + exit 1 +fi + +if ! git remote get-url origin >/dev/null 2>&1; then + error "Remote 'origin' belum dikonfigurasi." + exit 1 +fi + +echo +separator +echo " Git Release Preparation" +separator + +CHANGES="$(git status --porcelain)" +if [[ -n "$CHANGES" ]]; then + echo + echo "Perubahan source belum di-commit:" + git status --short + echo + read -r -p "Commit dan push perubahan sebelum membuat release? [Y/N]: " SYNC_CONFIRM + case "$SYNC_CONFIRM" in + y|Y|yes|YES|Yes) ;; + *) + warn "Release dibatalkan. Source harus bersih agar tag sesuai dengan build." + exit 0 + ;; + esac + + read -r -p "Commit message [Prepare Lobby Systems $TAG release]: " COMMIT_MESSAGE + [[ -z "$COMMIT_MESSAGE" ]] && COMMIT_MESSAGE="Prepare Lobby Systems $TAG release" + + git add -A || exit 2 + git commit -m "$COMMIT_MESSAGE" || exit 2 +fi + +info "Push branch $CURRENT_BRANCH ke origin..." +if ! git push origin "$CURRENT_BRANCH"; then + error "Push branch gagal. Release dibatalkan." + exit 2 +fi + +HEAD_COMMIT="$(git rev-parse HEAD)" + +if git rev-parse "$TAG" >/dev/null 2>&1; then + TAG_COMMIT="$(git rev-list -n 1 "$TAG")" + if [[ "$TAG_COMMIT" != "$HEAD_COMMIT" ]]; then + error "Tag $TAG sudah ada tetapi menunjuk commit lain." + echo "Tag : $TAG_COMMIT" + echo "HEAD: $HEAD_COMMIT" + echo "Naikkan mod_version sebelum membuat release baru." + exit 2 + fi + info "Tag lokal $TAG sudah ada pada commit saat ini." +else + info "Membuat tag $TAG..." + git tag -a "$TAG" -m "Lobby Systems $TAG" || exit 2 +fi + +if git ls-remote --exit-code --tags origin "refs/tags/$TAG" >/dev/null 2>&1; then + info "Tag $TAG sudah ada di origin." +else + info "Push tag $TAG ke origin..." + git push origin "$TAG" || exit 2 +fi + +echo +separator +echo " Gitea Release" +separator + +read -r -p "Buat Release $TAG dan upload $JAR_NAME? [Y/N]: " RELEASE_CONFIRM +case "$RELEASE_CONFIRM" in + y|Y|yes|YES|Yes) ;; + *) + info "Pembuatan Gitea Release dilewati. Tag $TAG tetap sudah tersimpan." + exit 0 + ;; +esac + +if [[ -z "${GITEA_TOKEN:-}" ]]; then + echo + read -r -s -p "Gitea Personal Access Token: " GITEA_TOKEN + echo +fi + +if [[ -z "$GITEA_TOKEN" ]]; then + error "Token Gitea kosong." + exit 2 +fi + +API_BASE="$GITEA_BASE_URL/api/v1/repos/$GITEA_OWNER/$GITEA_REPO" +TMP_DIR="$(mktemp -d)" +trap 'rm -rf "$TMP_DIR"' EXIT +RELEASE_JSON="$TMP_DIR/release.json" +CREATE_JSON="$TMP_DIR/create.json" +ASSET_JSON="$TMP_DIR/asset.json" + +info "Memeriksa apakah Release $TAG sudah ada..." +HTTP_CODE="$(curl -sS -o "$RELEASE_JSON" -w '%{http_code}' \ + -H "Authorization: token $GITEA_TOKEN" \ + "$API_BASE/releases/tags/$TAG")" + +if [[ "$HTTP_CODE" == "200" ]]; then + info "Release $TAG sudah ada. Akan menggunakan release tersebut." +elif [[ "$HTTP_CODE" == "404" ]]; then + cat > "$CREATE_JSON" < {}", label, source, target); + LobbyLog.state("LEGACY CONFIG MIGRATED", "Type: " + label, "From: " + source, "To: " + target); } catch (Exception moveError) { try { Files.copy(source, target, StandardCopyOption.REPLACE_EXISTING); LobbySystemsMod.LOGGER.info("Copied legacy {}: {} -> {}", label, source, target); + LobbyLog.state("LEGACY CONFIG COPIED", "Type: " + label, "From: " + source, "To: " + target); } catch (Exception copyError) { LobbySystemsMod.LOGGER.error("Failed to migrate legacy {} from {} to {}", label, source, target, copyError); + LobbyLog.state("LEGACY MIGRATION FAILED", "Type: " + label, "From: " + source, "To: " + target); } } } diff --git a/src/main/java/id/dartokloning/lobbysystems/LobbyLog.java b/src/main/java/id/dartokloning/lobbysystems/LobbyLog.java new file mode 100644 index 0000000..9b3ea39 --- /dev/null +++ b/src/main/java/id/dartokloning/lobbysystems/LobbyLog.java @@ -0,0 +1,46 @@ +package id.dartokloning.lobbysystems; + +import net.fabricmc.loader.api.FabricLoader; + +/** + * Logger visual untuk state penting Lobby Systems. + * Separator sengaja dipakai agar state mod mudah terlihat di console server. + */ +public final class LobbyLog { + private static final String SEPARATOR = "============================================"; + + private LobbyLog() {} + + public static String modVersion() { + return FabricLoader.getInstance() + .getModContainer(LobbySystemsMod.MOD_ID) + .map(container -> container.getMetadata().getVersion().getFriendlyString()) + .orElse("unknown"); + } + + public static String minecraftVersion() { + return FabricLoader.getInstance() + .getModContainer("minecraft") + .map(container -> container.getMetadata().getVersion().getFriendlyString()) + .orElse("unknown"); + } + + public static void state(String title, String... details) { + LobbySystemsMod.LOGGER.info(SEPARATOR); + LobbySystemsMod.LOGGER.info(" Lobby Systems - {}", title); + for (String detail : details) { + LobbySystemsMod.LOGGER.info(" {}", detail); + } + LobbySystemsMod.LOGGER.info(SEPARATOR); + } + + public static void startup() { + state( + "STARTING", + "Version: " + modVersion(), + "Minecraft: " + minecraftVersion(), + "Namespace: id.dartokloning.lobbysystems", + "Mod ID: " + LobbySystemsMod.MOD_ID + ); + } +} diff --git a/src/main/java/id/dartokloning/lobbysystems/LobbySystemsMod.java b/src/main/java/id/dartokloning/lobbysystems/LobbySystemsMod.java index c3d9d48..0dbe4c0 100644 --- a/src/main/java/id/dartokloning/lobbysystems/LobbySystemsMod.java +++ b/src/main/java/id/dartokloning/lobbysystems/LobbySystemsMod.java @@ -1,7 +1,6 @@ package id.dartokloning.lobbysystems; import com.mojang.brigadier.arguments.StringArgumentType; -import com.mojang.logging.LogUtils; import net.fabricmc.api.ModInitializer; import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents; @@ -19,10 +18,11 @@ import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.level.Level; import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public final class LobbySystemsMod implements ModInitializer { public static final String MOD_ID = "dartokloning"; - public static final Logger LOGGER = LogUtils.getLogger(); + public static final Logger LOGGER = LoggerFactory.getLogger("Lobby Systems"); private static final ConfigManager CONFIG = new ConfigManager(); private static final SessionTracker SESSIONS = new SessionTracker(); @@ -33,18 +33,43 @@ public final class LobbySystemsMod implements ModInitializer { @Override public void onInitialize() { + LobbyLog.startup(); + LegacyConfigMigrator.migrate(); - CONFIG.load(); + + boolean configLoaded = CONFIG.load(); + LobbyLog.state( + configLoaded ? "CONFIG LOADED" : "CONFIG LOAD FAILED", + "File: " + CONFIG.path(), + "Lobby dimension: " + CONFIG.get().lobbyDimension + ); + POSITIONS.load(); POSITIONS.setExcludedDimension(lobbyKey()); - PORTALS.load(); + LobbyLog.state( + "PLAYER POSITIONS READY", + "File: " + ConfigPaths.PLAYER_POSITIONS, + "Lobby persistence: excluded" + ); + + boolean portalsLoaded = PORTALS.load(); + LobbyLog.state( + portalsLoaded ? "PORTALS LOADED" : "PORTAL LOAD FAILED", + "File: " + ConfigPaths.PORTALS, + "Portals: " + PORTALS.size() + ); ServerPlayConnectionEvents.JOIN.register((listener, sender, server) -> { ServerPlayer player = listener.getPlayer(); server.execute(() -> { POSITIONS.captureCurrent(player); TELEPORTS.scheduleJoinToLobby(player); - LOGGER.info("Scheduled lobby login teleport for {} ({})", player.getName().getString(), player.getUUID()); + LobbyLog.state( + "PLAYER JOIN", + "Player: " + player.getName().getString(), + "UUID: " + player.getUUID(), + "Lobby teleport: scheduled" + ); }); }); @@ -54,6 +79,12 @@ public final class LobbySystemsMod implements ModInitializer { SESSIONS.onDisconnect(player.getUUID()); TELEPORTS.onDisconnect(player.getUUID()); PORTALS.onDisconnect(player.getUUID()); + LobbyLog.state( + "PLAYER DISCONNECT", + "Player: " + player.getName().getString(), + "UUID: " + player.getUUID(), + "Session state: saved/cleared" + ); }); ServerTickEvents.END_SERVER_TICK.register(server -> { @@ -128,8 +159,15 @@ public final class LobbySystemsMod implements ModInitializer { ); }); - LOGGER.info("Lobby Systems v1.2.0 initialized for Minecraft 26.2. Config directory: {}", ConfigPaths.DIRECTORY); - LOGGER.info("WorldEdit integration: {}", WorldEditSelectionBridge.isAvailable() ? "available" : "not installed (saved portals still work)"); + LobbyLog.state( + "READY", + "Version: " + LobbyLog.modVersion(), + "Minecraft: " + LobbyLog.minecraftVersion(), + "Config directory: " + ConfigPaths.DIRECTORY, + "WorldEdit: " + (WorldEditSelectionBridge.isAvailable() + ? "available" + : "not installed (saved portals still work)") + ); } private static int handleLobbyCommand(ServerPlayer player, MinecraftServer server) { @@ -154,7 +192,14 @@ public final class LobbySystemsMod implements ModInitializer { } private static int reloadAll(MinecraftServer server, CommandSourceStack source) { + LobbyLog.state( + "RELOAD START", + "Config: " + ConfigPaths.CONFIG, + "Portals: " + ConfigPaths.PORTALS + ); + if (!CONFIG.load()) { + LobbyLog.state("RELOAD FAILED", "Reason: config.json gagal dibaca"); source.sendFailure(Component.literal("§cLobby Systems: reload config gagal. Cek console untuk detail JSON.")); return 0; } @@ -164,10 +209,12 @@ public final class LobbySystemsMod implements ModInitializer { key = lobbyKey(); if (server.getLevel(key) == null) { source.sendFailure(Component.literal("§eConfig terbaca, tetapi lobbyDimension '" + CONFIG.get().lobbyDimension + "' tidak sedang ter-load.")); + LobbyLog.state("RELOAD FAILED", "Reason: lobby dimension tidak ter-load", "Lobby: " + CONFIG.get().lobbyDimension); return 0; } } catch (Exception e) { source.sendFailure(Component.literal("§cConfig terbaca, tetapi lobbyDimension tidak valid: " + CONFIG.get().lobbyDimension)); + LobbyLog.state("RELOAD FAILED", "Reason: lobbyDimension tidak valid", "Lobby: " + CONFIG.get().lobbyDimension); return 0; } @@ -175,6 +222,7 @@ public final class LobbySystemsMod implements ModInitializer { boolean portalOk = PORTALS.load(); if (!portalOk) { source.sendFailure(Component.literal("§eConfig utama direload, tetapi portals.json bermasalah. Cek console.")); + LobbyLog.state("RELOAD FAILED", "Reason: portals.json gagal dibaca"); return 0; } @@ -182,6 +230,13 @@ public final class LobbySystemsMod implements ModInitializer { "§aLobby Systems direload. §7Lobby: §f" + CONFIG.get().lobbyDimension + " §7| Minimum play: §f" + CONFIG.get().minimumPlaySeconds + "s" + " §7| Portals: §f" + PORTALS.size()), false); + LobbyLog.state( + "RELOAD COMPLETE", + "Lobby: " + CONFIG.get().lobbyDimension, + "Minimum play: " + CONFIG.get().minimumPlaySeconds + "s", + "Portals: " + PORTALS.size(), + "Player positions lobby exclusion: active" + ); return 1; } @@ -218,6 +273,12 @@ public final class LobbySystemsMod implements ModInitializer { PORTALS.suppress(player.getUUID(), Math.max(CONFIG.get().portalCooldownTicks, 100)); player.sendSystemMessage(Component.literal( "§aPortal §f" + name + "§a dibuat. §7" + portal.sourceDimension + " §8→ §f" + targetId)); + LobbyLog.state( + "PORTAL CREATED", + "Name: " + name, + "Source: " + portal.sourceDimension, + "Target: " + targetId + ); return 1; } catch (Exception e) { LOGGER.warn("Failed to read WorldEdit selection for {}", player.getUUID(), e); @@ -233,6 +294,7 @@ public final class LobbySystemsMod implements ModInitializer { return 0; } source.sendSuccess(() -> Component.literal("§aPortal §f" + key + "§a dihapus."), false); + LobbyLog.state("PORTAL DELETED", "Name: " + key); return 1; } diff --git a/src/main/java/id/dartokloning/lobbysystems/TeleportCoordinator.java b/src/main/java/id/dartokloning/lobbysystems/TeleportCoordinator.java index 557fb04..0c5ffed 100644 --- a/src/main/java/id/dartokloning/lobbysystems/TeleportCoordinator.java +++ b/src/main/java/id/dartokloning/lobbysystems/TeleportCoordinator.java @@ -83,17 +83,26 @@ public final class TeleportCoordinator { TeleportTransition.DO_NOTHING ); - LobbySystemsMod.LOGGER.info( - "Teleporting {} ({}): {} -> {} @ [{}, {}, {}]", - player.getName().getString(), player.getUUID(), - from.identifier(), to.identifier(), - String.format("%.2f", x), String.format("%.2f", y), String.format("%.2f", z) + LobbyLog.state( + "TELEPORT", + "Player: " + player.getName().getString() + " (" + player.getUUID() + ")", + "From: " + from.identifier(), + "To: " + to.identifier(), + "Position: [" + String.format("%.2f", x) + ", " + + String.format("%.2f", y) + ", " + + String.format("%.2f", z) + "]" ); ServerPlayer result = player.teleport(transition); if (result == null) { lockedUntilTick.remove(player.getUUID()); LobbySystemsMod.LOGGER.warn("Teleport failed for {}: {} -> {}", player.getUUID(), from.identifier(), to.identifier()); + LobbyLog.state( + "TELEPORT FAILED", + "Player: " + player.getName().getString() + " (" + player.getUUID() + ")", + "From: " + from.identifier(), + "To: " + to.identifier() + ); return false; }