# Builds rsx-plugin-api into dist\. # # The API is the way a plugin talks to the server. It is a separate module on # purpose: the server and the plugin both compile against it, and neither # needs the other. # # NOTE: ASCII on purpose. Windows PowerShell 5.1 reads a .ps1 with no byte order # mark using the system ANSI code page, which mangles UTF-8 and breaks the # parser. Keep script messages English. $ErrorActionPreference = 'Stop' $Repo = Split-Path -Parent $PSScriptRoot if (-not $Repo) { $Repo = $PSCommandPath | Split-Path -Parent | Split-Path -Parent } $Workspace = Split-Path -Parent $Repo $Dist = Join-Path $Repo 'dist' $Out = Join-Path $Repo 'build' function Say($text) { Write-Host " $text" -ForegroundColor Cyan } if (-not (Get-Command javac -ErrorAction SilentlyContinue)) { Write-Host ' A JDK (javac) is required.' -ForegroundColor Red exit 1 } New-Item -ItemType Directory -Force -Path $Dist, $Out | Out-Null # The API speaks about items and boxes, so it is compiled against the # protocol: the same jar the server and the client use. $Protocol = Join-Path $Workspace 'rsx-protocol\build\classes' if (-not (Test-Path $Protocol)) { Write-Host " Missing dependency: $Protocol" -ForegroundColor Red Write-Host ' Build rsx-protocol first.' -ForegroundColor Red exit 1 } $mainOut = Join-Path $Out 'classes' Remove-Item $mainOut -Recurse -Force -ErrorAction SilentlyContinue New-Item -ItemType Directory -Force -Path $mainOut | Out-Null $mainFiles = @(Get-ChildItem (Join-Path $Repo 'src\main\java') -Recurse -Filter '*.java' | ForEach-Object { $_.FullName }) if ($mainFiles.Count -eq 0) { Write-Host ' No sources found.' -ForegroundColor Red exit 1 } & javac -encoding UTF-8 --release 17 -Xlint:-options -nowarn -cp $Protocol -d $mainOut $mainFiles if ($LASTEXITCODE -ne 0) { Write-Host ' The plugin API failed to compile.' -ForegroundColor Red exit 1 } Say "plugin API compiled ($($mainFiles.Count) files)" $manifest = Join-Path $Out 'manifest.txt' @" Manifest-Version: 1.0 Implementation-Title: RustNotMC plugin API Implementation-Version: 0.1.0 "@ | Set-Content -LiteralPath $manifest -Encoding ASCII $jar = Join-Path $Dist 'rsx-plugin-api.jar' if (Test-Path -LiteralPath $jar) { Remove-Item -LiteralPath $jar -Force } & jar cfm $jar $manifest -C $mainOut . if ($LASTEXITCODE -ne 0) { Write-Host ' Could not package the jar.' -ForegroundColor Red exit 1 } Say "rsx-plugin-api.jar ($((Get-Item $jar).Length) bytes)" Write-Host '' Write-Host ' Done:' -ForegroundColor Green Write-Host " $jar"