 | @echo off
chcp 950 >nul 2>&1 :: 切換至繁體中文編碼(Big5),避免亂碼
setlocal enabledelayedexpansion :: 啟用延遲變數擴充
:: ===================== 設定區(請根據實際路徑修改)=====================
set "TARGET_JDK_VERSION=1.8" :: 目標Java版本(天堂服務端通常依賴1.8)
set "PREFERRED_JAVA_PATH=D:\381古龍天堂\jdk1.8.0_20" :: 優先使用的Java路徑
set "ZJ_HOME=D:\381古龍天堂\jdk1.8.0_20\jdk-1"
set "SERVER_JAR=381server.jar"
set "UPDATE_DIR=update"
set "RESTART_BAT=New_381啟動.bat"
set "TITLE_SUFFIX=版本458512-天堂"
:: ===================== 視窗配置 =====================
:colors
color %1 >nul 2>&1 || color 0A :: 若參數無效,預設黑底綠字
Title %TITLE_SUFFIX% [啟動時間]: %date% %time:~0,8%
cls
goto :eof :: 結束標籤呼叫
:: ===================== 自動搜尋Java環境 =====================
echo [資訊] 開始偵測Java環境(目標版本:%TARGET_JDK_VERSION%)...
:: 第一步:檢查優先路徑
if exist "%PREFERRED_JAVA_PATH%\bin\java.exe" (
set "JAVA_HOME=%PREFERRED_JAVA_PATH%"
echo [成功] 優先路徑偵測到Java:%JAVA_HOME%
goto :java_check_success
)
:: 第二步:從登錄檔搜尋已安裝的JDK 1.8(32/64位元)
set "JAVA_REG_PATH=HKLM\SOFTWARE\JavaSoft\JDK"
set "JAVA_HOME="
for /f "tokens=2*" %%a in ('reg query "%JAVA_REG_PATH%" /s /f "JavaHome" 2^>nul ^| findstr /i "JavaHome"') do (
set "REG_JAVA_HOME=%%b"
:: 驗證版本是否為1.8
for /f "tokens=3" %%v in ('"!REG_JAVA_HOME!\bin\java.exe" -version 2^>^&1 ^| findstr /i "version"') do (
set "JAVA_VER=%%v"
set "JAVA_VER=!JAVA_VER:"=!" :: 移除版本號引號
if "!JAVA_VER:~0,3!"=="%TARGET_JDK_VERSION%" (
set "JAVA_HOME=!REG_JAVA_HOME!"
goto :java_reg_found
)
)
)
:java_reg_found
if defined JAVA_HOME (
echo [成功] 登錄檔偵測到Java %TARGET_JDK_VERSION%:%JAVA_HOME%
goto :java_check_success
)
:: 第三步:全域搜尋java.exe(最後兜底方案)
echo [資訊] 登錄檔未找到,開始全域搜尋Java...
for /f "delims=" %%a in ('where /r C:\ java.exe 2^>nul ^| findstr /i "jdk1.8"') do (
set "JAVA_EXE=%%a"
set "JAVA_HOME=!JAVA_EXE:\bin\java.exe=!"
:: 驗證版本
for /f "tokens=3" %%v in ('"!JAVA_EXE!" -version 2^>^&1 ^| findstr /i "version"') do (
set "JAVA_VER=%%v"
set "JAVA_VER=!JAVA_VER:"=!"
if "!JAVA_VER:~0,3!"=="%TARGET_JDK_VERSION%" (
echo [成功] 全域搜尋到Java %TARGET_JDK_VERSION%:!JAVA_HOME!
goto :java_check_success
)
)
)
:: 未找到Java的處理
echo [錯誤] 未偵測到Java %TARGET_JDK_VERSION%,請手動安裝或配置路徑!
pause
exit /b 1
:java_check_success
:: 最終驗證java.exe是否存在
if not exist "%JAVA_HOME%\bin\java.exe" (
echo [錯誤] Java路徑無效:%JAVA_HOME%
pause
exit /b 1
)
:: ===================== 顏色與標題設定 =====================
call :colors 17
:: ===================== 核心更新檢查 =====================
echo [資訊] 檢查核心更新...
if exist "%UPDATE_DIR%\%SERVER_JAR%" (
echo [資訊] 發現更新包,開始替換...
del /f /q "%SERVER_JAR%" >nul 2>&1 :: 強制刪除舊檔案
move /y "%UPDATE_DIR%\%SERVER_JAR%" "%SERVER_JAR%" >nul 2>&1
if exist "%SERVER_JAR%" (
echo [成功] 更新核心成功!
del /f /q "%UPDATE_DIR%\%SERVER_JAR%" >nul 2>&1 :: 清理更新包
) else (
echo [錯誤] 更新核心失敗!
pause
exit /b 1
)
) else (
echo [資訊] 無核心更新,使用當前版本...
)
:: ===================== 啟動服務端 =====================
echo [資訊] 啟動天堂服務端...
echo [資訊] JVM參數:-Xms8g -Xmx8g -Xmn2024m -XX:+UseConcMarkSweepGC...
start "" /abovenormal /wait "%JAVA_HOME%\bin\java.exe" ^
-agentpath:"%ZJ_HOME%\jvmlib.dll" ^
-Xoptimize ^
-Xms8g -Xmx8g -Xmn2024m ^
-XX:+UseConcMarkSweepGC ^
-XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=512m ^
-cp "%SERVER_JAR%" com.lineage.Server
:: ===================== 重啟邏輯 =====================
echo [資訊] 服務端程序退出,準備重啟...
timeout /t 5 /nobreak >nul :: 延遲5秒重啟,避免過度頻繁重啟
if exist "%RESTART_BAT%" (
call "%RESTART_BAT%" :: 呼叫重啟腳本
) else (
echo [錯誤] 重啟腳本不存在:%RESTART_BAT%
pause
exit /b 1
)
endlocal
| |