libs\ — общая библиотека для всех модов
Загрузчик игры даёт каждому моду свой class loader, поэтому моды не видят друг друга напрямую. Но у всех этих загрузчиков родителем является системный, а значит всё, что добавлено в его classpath, видно каждому моду. Агент теперь на старте дописывает все jar из <home>\libs\ в системный classpath. Одна копия библиотеки на всех, модам не нужно ничего вшивать в себя. Проверено стендом: библиотека testlib лежит в libs\, мод её использует, и в jar мода её нет.
This commit is contained in:
+41
-3
@@ -127,13 +127,51 @@ Copy-Item (Join-Path $Repo 'mod-template\src\main\java\com\example\ExampleMod.ja
|
||||
Copy-Item (Join-Path $Dist 'rsx-api.jar') "$tpl\libs\" -Force
|
||||
@'
|
||||
@echo off
|
||||
rem Builds this mod and drops the jar into the client's mods folder.
|
||||
rem Builds the mod and drops the jar into the client's mods folder.
|
||||
rem Only a JDK is needed: no Gradle, no network, nothing but javac and jar.
|
||||
setlocal
|
||||
cd /d "%~dp0"
|
||||
call gradle jar
|
||||
|
||||
if not exist "build\classes" mkdir "build\classes"
|
||||
if not exist "build\mods" mkdir "build\mods"
|
||||
|
||||
set ENTRY=com.example.ExampleMod
|
||||
|
||||
rem where the modloader looks for mods; override with set MODS_DIR=...
|
||||
if "%MODS_DIR%"=="" set MODS_DIR=%LOCALAPPDATA%\rsx-mod\mods
|
||||
|
||||
echo [1/3] compiling...
|
||||
dir /s /b src\main\java\*.java > build\sources.txt
|
||||
javac -encoding UTF-8 --release 8 -nowarn -cp libs\rsx-api.jar -d build\classes @build\sources.txt
|
||||
if errorlevel 1 (
|
||||
echo.
|
||||
echo Сборка не удалась.
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
echo [2/3] packaging example-mod.jar...
|
||||
if exist "build\mods\example-mod.jar" del "build\mods\example-mod.jar"
|
||||
jar cfm "build\mods\example-mod.jar" manifest.txt -C build/classes .
|
||||
if errorlevel 1 exit /b 1
|
||||
|
||||
echo [3/3] installing...
|
||||
if not exist "%MODS_DIR%" (
|
||||
echo.
|
||||
echo Папка модов не найдена: %MODS_DIR%
|
||||
echo Скопируй build\mods\example-mod.jar в неё сам.
|
||||
exit /b 0
|
||||
)
|
||||
copy /y "build\mods\example-mod.jar" "%MODS_DIR%\" >nul
|
||||
echo.
|
||||
echo Скопируй build\libs\example-mod.jar в working_dir\mods
|
||||
echo Готово: build\mods\example-mod.jar скопирован в %MODS_DIR%
|
||||
'@ | Set-Content -LiteralPath (Join-Path $tpl 'build.cmd') -Encoding ASCII
|
||||
|
||||
# the manifest carries the entry point the bridge looks for
|
||||
$entry = (Select-String -LiteralPath "$tpl\src\main\java\com\example\ExampleMod.java" `
|
||||
-Pattern '^package\s+([\w.]+)' | ForEach-Object { $_.Matches[0].Groups[1].Value })
|
||||
"Manifest-Version: 1.0`r`nRsx-Mod-Entrypoint: $entry.ExampleMod`r`n`r`n" |
|
||||
Set-Content -LiteralPath (Join-Path $tpl 'manifest.txt') -Encoding ASCII
|
||||
|
||||
Say 'mod-template готов'
|
||||
|
||||
Write-Host ''
|
||||
|
||||
Reference in New Issue
Block a user