From a763f221d42c64befe4f612395b0cf80ed521cb5 Mon Sep 17 00:00:00 2001 From: evan Date: Sun, 6 Sep 2026 12:05:08 -0500 Subject: [PATCH] migrate to custom RCON client --- CHANGELOG.md | 4 ++++ Dockerfile | 26 ++++++++++++-------------- README.md | 11 +++++------ scripts/{mcrcon => rcon} | 2 +- scripts/start-server.sh | 3 ++- 5 files changed, 24 insertions(+), 22 deletions(-) rename scripts/{mcrcon => rcon} (67%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 58f82b4..1b01dcf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## v0.2.0 +- Migrate to custom RCON client: https://gitea.jovan04.com/evan/WiRCON +- Upgrade base image to Java 25 + ## v0.1.0 - Initial release - Graceful shutdown via SIGTERM / SIGINT diff --git a/Dockerfile b/Dockerfile index a7fb45c..8640e6b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,26 +1,24 @@ -# extract mcrcon -FROM debian:bookworm-slim AS builder - -ADD https://github.com/Tiiffi/mcrcon/releases/download/v0.7.2/mcrcon-0.7.2-linux-x86-64-static.zip /usr/bin/mcrcon.zip -RUN apt-get update && apt-get install -y unzip - -RUN unzip -j /usr/bin/mcrcon.zip -d /usr/bin/mc-rcon && chmod a+x /usr/bin/mc-rcon/mcrcon - - # actual image FROM eclipse-temurin:25 -# included in case the base image doesn't include wget (known bug 08/2026) -RUN apt-get update && apt-get install -y wget ca-certificates +RUN apt-get update +RUN apt-get install -y wget ca-certificates +RUN apt-get install -y git +RUN apt-get install -y python3 +RUN apt-get install -y build-essential -COPY --from=builder /usr/bin/mc-rcon /usr/bin/mc-rcon +RUN ln -s /usr/bin/python3 /usr/bin/python + +# build the RCON client +RUN git clone https://gitea.jovan04.com/evan/WiRCON && cd WiRCON && make build && mv wircon.pyz /usr/bin/wircon.pyz && cp scripts/restart.py /usr/bin/restart.py COPY scripts/start-server.sh /usr/bin/start-server.sh RUN chmod a+x /usr/bin/start-server.sh -COPY scripts/mcrcon /usr/bin/mcrcon -RUN chmod a+x /usr/bin/mcrcon +COPY scripts/rcon /usr/bin/rcon +RUN chmod a+x /usr/bin/rcon +# default minecraft server files COPY template/ /defaults/ WORKDIR /minecraft_data diff --git a/README.md b/README.md index 74042e5..d49e8d3 100644 --- a/README.md +++ b/README.md @@ -67,19 +67,18 @@ Log into the container: ```sh docker exec -it minecraft_server bash ``` -Use the provided wrapper script (located at `/usr/bin/mcrcon`). The script dynamically reads the password from `/minecraft_data/server.properties`. +Use the provided wrapper script (located at `/usr/bin/rcon`). The script dynamically reads the password from `/minecraft_data/server.properties`. Send a single command: ```sh -mcrcon list -mcrcon stop +rcon -e list ``` -For an interactive console (`Ctrl-C` or `Ctrl-D` to quit): +For an interactive console (`Ctrl-D` to quit): ```sh -mcrcon +rcon ``` -Use this the same as typing into the actual server console +Use this the same as typing into the actual server console. ### Graceful Shutdown Behavior When the container receives SIGTERM or SIGINT: diff --git a/scripts/mcrcon b/scripts/rcon similarity index 67% rename from scripts/mcrcon rename to scripts/rcon index 30c532d..ba9b833 100644 --- a/scripts/mcrcon +++ b/scripts/rcon @@ -1,4 +1,4 @@ #!/bin/bash -exec /usr/bin/mc-rcon/mcrcon -p "$( +exec /usr/bin/wircon.pyz -H localhost -p "$( grep '^rcon.password=' /minecraft_data/server.properties | cut -d= -f2- )" "$@" diff --git a/scripts/start-server.sh b/scripts/start-server.sh index 5c190d7..d41b371 100644 --- a/scripts/start-server.sh +++ b/scripts/start-server.sh @@ -24,12 +24,13 @@ if ! test -f /minecraft_data/eula.txt; then cp /defaults/eula.txt /minecraft_data/eula.txt fi + export MCRCON_PASS=$(grep "^rcon.password=" /minecraft_data/server.properties | cut -d '=' -f 2- | head -n 1) # shutdown process function shutdown { echo "stopping Minecraft server..." - /usr/bin/mc-rcon/mcrcon -p ${MCRCON_PASS} -w 5 "say Server is restarting!" save-all stop + /usr/bin/wircon.pyz -H localhost -p ${MCRCON_PASS} -E /usr/bin/restart.py wait $SERVER_PID }