Skip to content

Commit be0a795

Browse files
authored
Provide option to use existing bedrock server executable (#563)
1 parent 41ef36c commit be0a795

2 files changed

Lines changed: 34 additions & 6 deletions

File tree

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ For Minecraft Java Edition you'll need to use this image instead:
3838
- `VERSION` (default is `LATEST`) : can be set to a specific server version or the following special values can be used:
3939
- `LATEST` : determines the latest (non-preview) version and can be used to auto-upgrade on container start
4040
- `PREVIEW` : determines the latest preview version and will auto-upgrade
41+
- `EXISTING`: use existing bedrock server executable in `/data`. Must be named either `bedrock_server-{version}` or just `bedrock_server`
4142
- otherwise any specific server version can be provided. If it is a preview version, also set `PREVIEW` to "true"
4243
- `UID` (default derived from `/data` owner) : can be set to a specific user ID to run the
4344
bedrock server process

bedrock-entry.sh

Lines changed: 33 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,20 @@ function replace_version_in_url() {
2323
echo "$modified_url"
2424
}
2525

26+
function versionFromExisting() {
27+
# shellcheck disable=SC2012
28+
# since find doesn't support sort by version numbers, -v
29+
if [[ $(ls -rv bedrock_server-* 2> /dev/null|head -1) =~ bedrock_server-(.*) ]]; then
30+
VERSION=${BASH_REMATCH[1]}
31+
return 0
32+
elif ls bedrock_server 2> /dev/null; then
33+
VERSION=none
34+
return 0
35+
else
36+
return 1
37+
fi
38+
}
39+
2640
function lookupVersion() {
2741
platform=${1:?Missing required platform indicator}
2842
customVersion=${2:-}
@@ -74,8 +88,7 @@ function lookupVersion() {
7488
# shellcheck disable=SC2012
7589
if [[ ${DOWNLOAD_URL} =~ http.*/.*-(.*)\.zip ]]; then
7690
VERSION=${BASH_REMATCH[1]}
77-
elif [[ $(ls -rv bedrock_server-* 2> /dev/null|head -1) =~ bedrock_server-(.*) ]]; then
78-
VERSION=${BASH_REMATCH[1]}
91+
elif versionFromExisting; then
7992
echo "WARN Minecraft download page failed, so using existing download of $VERSION"
8093
else
8194
echo "Failed to lookup download URL: ${DOWNLOAD_URL}"
@@ -128,6 +141,14 @@ else # Original logic: if DIRECT_DOWNLOAD_URL is NOT set, proceed with lookup
128141
echo "Looking up latest version..."
129142
lookupVersion serverBedrockLinux
130143
;;
144+
EXISTING)
145+
if versionFromExisting; then
146+
echo "Using existing bedrock server executable"
147+
else
148+
echo "ERROR unable to locate existing bedrock server executable"
149+
exit 1
150+
fi
151+
;;
131152
*)
132153
# use the given version exactly
133154
if isTrue "$PREVIEW"; then
@@ -141,7 +162,13 @@ else # Original logic: if DIRECT_DOWNLOAD_URL is NOT set, proceed with lookup
141162
esac
142163
fi
143164

144-
if [[ ! -f "bedrock_server-${VERSION}" ]]; then
165+
if [[ $VERSION = none ]]; then
166+
SERVER=bedrock_server
167+
else
168+
SERVER="bedrock_server-${VERSION}"
169+
fi
170+
171+
if [[ ! -f "$SERVER" ]]; then
145172

146173
[[ $DOWNLOAD_DIR != /tmp ]] && mkdir -p "$DOWNLOAD_DIR"
147174
TMP_ZIP="$DOWNLOAD_DIR/$(basename "${DOWNLOAD_URL}")"
@@ -199,7 +226,7 @@ if [[ ! -f "bedrock_server-${VERSION}" ]]; then
199226
[[ $DOWNLOAD_DIR != /tmp ]] && rm -rf "$DOWNLOAD_DIR"
200227

201228
chmod +x bedrock_server
202-
mv bedrock_server "bedrock_server-${VERSION}"
229+
mv bedrock_server "$SERVER"
203230
fi
204231

205232
if [[ -n "$OPS" || -n "$MEMBERS" || -n "$VISITORS" ]]; then
@@ -283,7 +310,7 @@ fi
283310

284311
echo "Starting Bedrock server..."
285312
if [[ -f /usr/local/bin/box64 ]] ; then
286-
exec mc-server-runner "${mcServerRunnerArgs[@]}" box64 ./"bedrock_server-${VERSION}"
313+
exec mc-server-runner "${mcServerRunnerArgs[@]}" box64 ./"$SERVER"
287314
else
288-
exec mc-server-runner "${mcServerRunnerArgs[@]}" ./"bedrock_server-${VERSION}"
315+
exec mc-server-runner "${mcServerRunnerArgs[@]}" ./"$SERVER"
289316
fi

0 commit comments

Comments
 (0)