From eb8bc5ab45c9823372c3f2125d6946c296b925f1 Mon Sep 17 00:00:00 2001 From: Tom Hicks Date: Wed, 6 Aug 2025 19:55:54 -0700 Subject: [PATCH] Adds Powershell scripts to tools. --- tools/powershell/Build-Plugin.ps1 | 20 ++++++++++++ tools/powershell/Deploy-Plugin.ps1 | 49 ++++++++++++++++++++++++++++++ tools/powershell/Start-Server.ps1 | 34 +++++++++++++++++++++ tools/powershell/Stop-Server.ps1 | 25 +++++++++++++++ 4 files changed, 128 insertions(+) create mode 100644 tools/powershell/Build-Plugin.ps1 create mode 100644 tools/powershell/Deploy-Plugin.ps1 create mode 100644 tools/powershell/Start-Server.ps1 create mode 100644 tools/powershell/Stop-Server.ps1 diff --git a/tools/powershell/Build-Plugin.ps1 b/tools/powershell/Build-Plugin.ps1 new file mode 100644 index 0000000..af1e919 --- /dev/null +++ b/tools/powershell/Build-Plugin.ps1 @@ -0,0 +1,20 @@ +#!/usr/bin/env pwsh + +# Set strict mode for better error handling +Set-StrictMode -Version Latest +$ErrorActionPreference = "Stop" + +# Find project root (two directories above this script) +$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path +$ProjectRoot = Split-Path -Parent (Split-Path -Parent $ScriptDir) + +# Save current location and change to project root +Push-Location $ProjectRoot + +try { + # Build the project using Gradle + & ".\gradlew.bat" build +} finally { + # Always restore the original location + Pop-Location +} \ No newline at end of file diff --git a/tools/powershell/Deploy-Plugin.ps1 b/tools/powershell/Deploy-Plugin.ps1 new file mode 100644 index 0000000..db2d6f5 --- /dev/null +++ b/tools/powershell/Deploy-Plugin.ps1 @@ -0,0 +1,49 @@ +#!/usr/bin/env pwsh + +# Set strict mode for better error handling +Set-StrictMode -Version Latest +$ErrorActionPreference = "Stop" + +# Check required environment variable +if (-not $env:MINECRAFT_SERVER_PATH) { + Write-Error "Error: MINECRAFT_SERVER_PATH environment variable is not set." + exit 1 +} + +# Find project root (two directories above this script) +$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path +$ProjectRoot = Split-Path -Parent (Split-Path -Parent $ScriptDir) + +# Find the most recent plugin jar file +$LibsPath = Join-Path $ProjectRoot "build\libs" +$PluginJar = Get-ChildItem -Path "$LibsPath\*.jar" -ErrorAction SilentlyContinue | + Sort-Object LastWriteTime -Descending | + Select-Object -First 1 + +if (-not $PluginJar) { + Write-Error "Error: No plugin jar found in $LibsPath. Build the plugin first." + exit 1 +} + +# Optional: Warn if jar is older than any source file +$SourcePaths = @( + (Join-Path $ProjectRoot "src\main\java"), + (Join-Path $ProjectRoot "src\main\resources") +) + +$NewerSourceFiles = Get-ChildItem -Path $SourcePaths -Recurse -File -ErrorAction SilentlyContinue | + Where-Object { $_.LastWriteTime -gt $PluginJar.LastWriteTime } + +if ($NewerSourceFiles) { + Write-Host "Warning: The built plugin jar is older than some source files. Consider rebuilding." -ForegroundColor Yellow +} + +# Create plugins directory if it doesn't exist +$PluginsPath = Join-Path $env:MINECRAFT_SERVER_PATH "plugins" +if (-not (Test-Path $PluginsPath)) { + New-Item -ItemType Directory -Path $PluginsPath -Force | Out-Null +} + +# Copy the plugin jar to the plugins directory +Copy-Item -Path $PluginJar.FullName -Destination $PluginsPath -Force +Write-Host "Deployed $($PluginJar.Name) to $PluginsPath\" diff --git a/tools/powershell/Start-Server.ps1 b/tools/powershell/Start-Server.ps1 new file mode 100644 index 0000000..042ab77 --- /dev/null +++ b/tools/powershell/Start-Server.ps1 @@ -0,0 +1,34 @@ +#!/usr/bin/env pwsh + +# Set strict mode for better error handling +Set-StrictMode -Version Latest +$ErrorActionPreference = "Stop" + +# Check required environment variables +if (-not $env:MINECRAFT_SERVER_PATH -or -not $env:MINECRAFT_SERVER_JAR) { + Write-Error "Error: MINECRAFT_SERVER_PATH and MINECRAFT_SERVER_JAR must be set." + exit 1 +} + +Push-Location $env:MINECRAFT_SERVER_PATH + +# Find running server process (java with the server jar) +$ServerProcess = Get-Process -Name "java" -ErrorAction SilentlyContinue | Where-Object { + $_.CommandLine -like "*$($env:MINECRAFT_SERVER_JAR)*" +} + +if ($ServerProcess) { + Write-Host "Minecraft server is running (PID: $($ServerProcess.Id)). Stopping it..." + Stop-Process -Id $ServerProcess.Id -Force + Start-Sleep -Seconds 5 +} else { + Write-Host "Minecraft server is not running." +} + +# Start the server in a new window +try { + $ServerJob = Start-Process -FilePath "java" -ArgumentList "-jar", $env:MINECRAFT_SERVER_JAR -PassThru + Write-Host "Minecraft server started in new window with PID: $($ServerJob.Id)" +} finally { + Pop-Location +} diff --git a/tools/powershell/Stop-Server.ps1 b/tools/powershell/Stop-Server.ps1 new file mode 100644 index 0000000..325ce2c --- /dev/null +++ b/tools/powershell/Stop-Server.ps1 @@ -0,0 +1,25 @@ +#!/usr/bin/env pwsh + +# Set strict mode for better error handling +Set-StrictMode -Version Latest +$ErrorActionPreference = "Stop" + +# Check required environment variables +if (-not $env:MINECRAFT_SERVER_PATH -or -not $env:MINECRAFT_SERVER_JAR) { + Write-Error "Error: MINECRAFT_SERVER_PATH and MINECRAFT_SERVER_JAR must be set." + exit 1 +} + +# Find running server process (java with the server jar) +$ServerProcess = Get-Process -Name "java" -ErrorAction SilentlyContinue | Where-Object { + $_.CommandLine -like "*$($env:MINECRAFT_SERVER_JAR)*" +} + +if ($ServerProcess) { + Write-Host "Minecraft server is running (PID: $($ServerProcess.Id)). Stopping it..." + Stop-Process -Id $ServerProcess.Id -Force + Start-Sleep -Seconds 5 + Write-Host "Minecraft server stopped." +} else { + Write-Host "Minecraft server is not running." +}