mirror of
https://github.com/itzg/docker-minecraft-server.git
synced 2026-02-17 15:13:55 +00:00
Compare commits
21 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c3ccdcac9e | ||
|
|
6fce520004 | ||
|
|
ec539a5dd2 | ||
|
|
7427bc9043 | ||
|
|
8ab104f6b7 | ||
|
|
f15cbb4ca1 | ||
|
|
fa235e97c5 | ||
|
|
d5e315bba8 | ||
|
|
91ad2974ec | ||
|
|
59902566f3 | ||
|
|
411391baa1 | ||
|
|
cadc48b41a | ||
|
|
1396a1ef6c | ||
|
|
0cf5195fc5 | ||
|
|
17e2f90b91 | ||
|
|
a079dd0ff0 | ||
|
|
c4d8972a83 | ||
|
|
b494124a2d | ||
|
|
d8ad2e5721 | ||
|
|
ec7bd14451 | ||
|
|
2097702daa |
7
.github/dependabot.yml
vendored
7
.github/dependabot.yml
vendored
@@ -4,6 +4,13 @@ updates:
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
groups:
|
||||
updates:
|
||||
patterns:
|
||||
- "*"
|
||||
update-types:
|
||||
- patch
|
||||
- minor
|
||||
- package-ecosystem: pip
|
||||
directory: "/docs"
|
||||
schedule:
|
||||
|
||||
30
.github/workflows/build-multiarch.yml
vendored
30
.github/workflows/build-multiarch.yml
vendored
@@ -1,4 +1,4 @@
|
||||
name: Test and Build multi-architecture
|
||||
name: Build and Publish
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
@@ -18,10 +18,11 @@ jobs:
|
||||
matrix:
|
||||
# NOTE: the "latest" variant is identified in the Docker meta step's 'latest' config
|
||||
variant:
|
||||
- java21-graalvm
|
||||
- java20
|
||||
- java20-alpine
|
||||
- java17
|
||||
- java17-graalvm-ce
|
||||
- java17-graalvm
|
||||
- java17-jdk
|
||||
- java17-openj9
|
||||
- java17-alpine
|
||||
@@ -34,6 +35,11 @@ jobs:
|
||||
- java11-openj9
|
||||
- java11-jdk
|
||||
include:
|
||||
# JAVA 21:
|
||||
- variant: java21-graalvm
|
||||
baseImage: container-registry.oracle.com/graalvm/jdk:21-ol8
|
||||
platforms: linux/amd64,linux/arm64
|
||||
mcVersion: 1.20.2
|
||||
# JAVA 20:
|
||||
- variant: java20
|
||||
baseImage: eclipse-temurin:20-jre
|
||||
@@ -49,8 +55,8 @@ jobs:
|
||||
baseImage: eclipse-temurin:17-jre-focal
|
||||
platforms: linux/amd64,linux/arm/v7,linux/arm64
|
||||
mcVersion: 1.18.2
|
||||
- variant: java17-graalvm-ce
|
||||
baseImage: ghcr.io/graalvm/graalvm-ce:ol8-java17
|
||||
- variant: java17-graalvm
|
||||
baseImage: container-registry.oracle.com/graalvm/jdk:17-ol8
|
||||
platforms: linux/amd64,linux/arm64
|
||||
mcVersion: 1.18.2
|
||||
- variant: java17-jdk
|
||||
@@ -106,14 +112,14 @@ jobs:
|
||||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4.1.0
|
||||
with:
|
||||
# for build-files step
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Docker meta
|
||||
id: meta
|
||||
uses: docker/metadata-action@v4
|
||||
uses: docker/metadata-action@v5.0.0
|
||||
with:
|
||||
# NOTE for forks: if your Docker Hub organization doesn't match your Github repo's,
|
||||
# then the use of ${{ github.repository_owner }} will need to be replaced.
|
||||
@@ -139,13 +145,13 @@ jobs:
|
||||
org.opencontainers.image.authors=Geoff Bourne <itzgeoff@gmail.com>
|
||||
|
||||
- name: Setup Docker Buildx
|
||||
uses: docker/setup-buildx-action@v2
|
||||
uses: docker/setup-buildx-action@v3.0.0
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v2.2.0
|
||||
uses: docker/setup-qemu-action@v3.0.0
|
||||
|
||||
- name: Build for test
|
||||
uses: docker/build-push-action@v4.1.1
|
||||
uses: docker/build-push-action@v5.0.0
|
||||
with:
|
||||
platforms: linux/amd64
|
||||
tags: ${{ env.IMAGE_TO_TEST }}
|
||||
@@ -168,14 +174,14 @@ jobs:
|
||||
tests/test.sh
|
||||
|
||||
- name: Login to DockerHub
|
||||
uses: docker/login-action@v2
|
||||
uses: docker/login-action@v3.0.0
|
||||
if: env.HAS_IMAGE_REPO_ACCESS
|
||||
with:
|
||||
username: ${{ secrets.DOCKER_USER }}
|
||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||
|
||||
- name: Login to GHCR
|
||||
uses: docker/login-action@v2
|
||||
uses: docker/login-action@v3.0.0
|
||||
if: env.HAS_IMAGE_REPO_ACCESS
|
||||
with:
|
||||
registry: ghcr.io
|
||||
@@ -183,7 +189,7 @@ jobs:
|
||||
password: ${{ github.token }}
|
||||
|
||||
- name: Build and push
|
||||
uses: docker/build-push-action@v4.1.1
|
||||
uses: docker/build-push-action@v5.0.0
|
||||
if: github.actor == github.repository_owner
|
||||
with:
|
||||
platforms: ${{ matrix.platforms }}
|
||||
|
||||
8
.github/workflows/verify-pr.yml
vendored
8
.github/workflows/verify-pr.yml
vendored
@@ -45,16 +45,16 @@ jobs:
|
||||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4.1.0
|
||||
with:
|
||||
# for build-files step
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Setup Docker Buildx
|
||||
uses: docker/setup-buildx-action@v2
|
||||
uses: docker/setup-buildx-action@v3.0.0
|
||||
|
||||
- name: Confirm multi-arch build
|
||||
uses: docker/build-push-action@v4.1.1
|
||||
uses: docker/build-push-action@v5.0.0
|
||||
with:
|
||||
platforms: ${{ matrix.platforms }}
|
||||
# ensure latest base image is used
|
||||
@@ -64,7 +64,7 @@ jobs:
|
||||
cache-from: type=gha,scope=${{ matrix.variant }}
|
||||
|
||||
- name: Build for test
|
||||
uses: docker/build-push-action@v4.1.1
|
||||
uses: docker/build-push-action@v5.0.0
|
||||
with:
|
||||
# Only build single platform since loading multi-arch image into daemon fails with
|
||||
# "docker exporter does not currently support exporting manifest lists"
|
||||
|
||||
15
Dockerfile
15
Dockerfile
@@ -9,14 +9,11 @@ ARG TARGETOS
|
||||
ARG TARGETARCH
|
||||
ARG TARGETVARIANT
|
||||
|
||||
# CI system should set this to a hash or git revision of the build directory and it's contents to
|
||||
# ensure consistent cache updates.
|
||||
ARG BUILD_FILES_REV=1
|
||||
RUN --mount=target=/build,source=build \
|
||||
REV=${BUILD_FILES_REV} TARGET=${TARGETARCH}${TARGETVARIANT} /build/run.sh install-packages
|
||||
/build/run.sh setup-user
|
||||
|
||||
RUN --mount=target=/build,source=build \
|
||||
REV=${BUILD_FILES_REV} /build/run.sh setup-user
|
||||
TARGET=${TARGETARCH}${TARGETVARIANT} /build/run.sh install-packages
|
||||
|
||||
COPY --chmod=644 files/sudoers* /etc/sudoers.d
|
||||
|
||||
@@ -35,14 +32,14 @@ RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \
|
||||
--from https://github.com/itzg/{{.app}}/releases/download/{{.version}}/{{.app}}_{{.version}}_{{.os}}_{{.arch}}.tar.gz
|
||||
|
||||
RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \
|
||||
--var version=0.12.2 --var app=mc-monitor --file {{.app}} \
|
||||
--var version=0.12.3 --var app=mc-monitor --file {{.app}} \
|
||||
--from https://github.com/itzg/{{.app}}/releases/download/{{.version}}/{{.app}}_{{.version}}_{{.os}}_{{.arch}}.tar.gz
|
||||
|
||||
RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \
|
||||
--var version=1.9.0 --var app=mc-server-runner --file {{.app}} \
|
||||
--from https://github.com/itzg/{{.app}}/releases/download/{{.version}}/{{.app}}_{{.version}}_{{.os}}_{{.arch}}.tar.gz
|
||||
|
||||
ARG MC_HELPER_VERSION=1.34.7
|
||||
ARG MC_HELPER_VERSION=1.36.1
|
||||
ARG MC_HELPER_BASE_URL=https://github.com/itzg/mc-image-helper/releases/download/${MC_HELPER_VERSION}
|
||||
# used for cache busting local copy of mc-image-helper
|
||||
ARG MC_HELPER_REV=1
|
||||
@@ -61,9 +58,7 @@ ENV TYPE=VANILLA VERSION=LATEST EULA="" UID=1000 GID=1000
|
||||
COPY --chmod=755 scripts/start* /
|
||||
COPY --chmod=755 bin/ /usr/local/bin/
|
||||
COPY --chmod=755 bin/mc-health /health.sh
|
||||
COPY --chmod=644 files/log4j2.xml /image/log4j2.xml
|
||||
# By default this file gets retrieved from repo, but bundle in image as potential fallback
|
||||
COPY --chmod=644 files/cf-exclude-include.json /image/cf-exclude-include.json
|
||||
COPY --chmod=644 files/* /image/
|
||||
COPY --chmod=755 files/auto /auto
|
||||
|
||||
RUN curl -fsSL -o /image/Log4jPatcher.jar https://github.com/CreeperHost/Log4jPatcher/releases/download/v1.0.1/Log4jPatcher-1.0.1.jar
|
||||
|
||||
16
README.md
16
README.md
@@ -2,7 +2,7 @@
|
||||
[](https://hub.docker.com/r/itzg/minecraft-server/)
|
||||
[](https://github.com/itzg/docker-minecraft-server/issues)
|
||||
[](https://discord.gg/DXfKpjB)
|
||||
[](https://github.com/itzg/docker-minecraft-server/actions)
|
||||
[](https://github.com/itzg/docker-minecraft-server/actions/workflows/build-multiarch.yml)
|
||||
[](https://www.buymeacoffee.com/itzg)
|
||||
[](https://docker-minecraft-server.readthedocs.io/en/latest/?badge=latest)
|
||||
|
||||
@@ -585,7 +585,7 @@ Configuration options with defaults:
|
||||
|
||||
NAME}"
|
||||
|
||||
> NOTE: instead of using format codes in the MOTD, Limbo requires [JSON chat content](https://minecraft.fandom.com/wiki/Raw_JSON_text_format#Java_Edition). If a plain string is provided, which is the default, then it gets converted into the required JSON structure.
|
||||
> NOTE: instead of using format codes in the MOTD, Limbo requires [JSON chat content](https://minecraft.wiki/w/Raw_JSON_text_format#Java_Edition). If a plain string is provided, which is the default, then it gets converted into the required JSON structure.
|
||||
|
||||
### Running a Crucible server
|
||||
|
||||
@@ -1090,7 +1090,7 @@ If you leave it off, a default is computed from the server type and version, suc
|
||||
|
||||
That way you can easily differentiate between several servers you may have started.
|
||||
|
||||
The section symbol (§) and other unicode characters are automatically converted to allow [formatting codes](https://minecraft.fandom.com/wiki/Formatting_codes) to be used consistently with all server versions. For example,
|
||||
The section symbol (§) and other unicode characters are automatically converted to allow [formatting codes](https://minecraft.wiki/w/Formatting_codes) to be used consistently with all server versions. For example,
|
||||
|
||||
-e MOTD="A §l§cMinecraft§r §nserver"
|
||||
|
||||
@@ -1122,7 +1122,7 @@ To whitelist players for your Minecraft server, you can:
|
||||
- Provide the url or path to a whitelist file via `WHITELIST_FILE` environment variable
|
||||
`docker run -d -e WHITELIST_FILE=/extra/whitelist.json ...`
|
||||
|
||||
When either is set, [whitelisting of connecting users](https://minecraft.fandom.com/wiki/Server.properties#white-list) is enabled . If managing the list manually, `ENABLE_WHITELIST` can be set to "true" to set the `white-list` property.
|
||||
When either is set, [whitelisting of connecting users](https://minecraft.wiki/w/Server.properties#white-list) is enabled . If managing the list manually, `ENABLE_WHITELIST` can be set to "true" to set the `white-list` property.
|
||||
|
||||
If whitelist configuration already exists, `WHITELIST_FILE` will not be retrieved and any usernames in `WHITELIST` are **added** to the whitelist configuration. You can enforce regeneration of the whitelist on each server startup by setting `OVERRIDE_WHITELIST` to "true". This will delete the whitelist file before processing whitelist configuration.
|
||||
|
||||
@@ -1132,7 +1132,7 @@ If whitelist configuration already exists, `WHITELIST_FILE` will not be retrieve
|
||||
|
||||
> If running Minecraft 1.7.5 or earlier, these variables will apply to `white-list.txt`, with 1.7.6 implementing support for `whitelist.json`. Make sure your `WHITELIST_FILE` is in the appropriate format.
|
||||
|
||||
To [enforce the whitelist changes immediately](https://minecraft.fandom.com/wiki/Server.properties#enforce-whitelist) when whitelist commands are used , set `ENFORCE_WHITELIST` to "true".
|
||||
To [enforce the whitelist changes immediately](https://minecraft.wiki/w/Server.properties#enforce-whitelist) when whitelist commands are used , set `ENFORCE_WHITELIST` to "true".
|
||||
|
||||
### Op/Administrator Players
|
||||
|
||||
@@ -1303,7 +1303,7 @@ If using a negative value for the seed, make sure to quote the value such as:
|
||||
|
||||
By default, Minecraft servers are configured to run in Survival mode. You can
|
||||
change the mode using `MODE` where you can either provide the [standard
|
||||
numerical values](http://minecraft.gamepedia.com/Game_mode#Game_modes) or the
|
||||
numerical values](http://minecraft.wiki/Game_mode#Game_modes) or the
|
||||
shortcut values:
|
||||
|
||||
- creative
|
||||
@@ -1325,9 +1325,9 @@ environment variable set to `false`, such as
|
||||
### Level Type and Generator Settings
|
||||
|
||||
By default, a standard world is generated with hills, valleys, water, etc. A different level type can
|
||||
be configured by setting `LEVEL_TYPE` to [an expected type listed here](https://minecraft.fandom.com/wiki/Server.properties#level-type).
|
||||
be configured by setting `LEVEL_TYPE` to [an expected type listed here](https://minecraft.wiki/w/Server.properties#level-type).
|
||||
|
||||
For some of the level types, `GENERATOR_SETTINGS` can be used to further customize the world generation [as described here](https://minecraft.fandom.com/wiki/Server.properties#generator-settings).
|
||||
For some of the level types, `GENERATOR_SETTINGS` can be used to further customize the world generation [as described here](https://minecraft.wiki/w/Server.properties#generator-settings).
|
||||
|
||||
### Custom Server Resource Pack
|
||||
|
||||
|
||||
@@ -26,9 +26,12 @@ apk add --no-cache -U \
|
||||
zstd \
|
||||
nfs-utils \
|
||||
libpcap \
|
||||
libwebp
|
||||
libwebp \
|
||||
libcap
|
||||
|
||||
# Patched knockd
|
||||
curl -fsSL -o /tmp/knock.tar.gz https://github.com/Metalcape/knock/releases/download/0.8.1/knock-0.8.1-alpine-amd64.tar.gz
|
||||
tar -xf /tmp/knock.tar.gz -C /usr/local/ && rm /tmp/knock.tar.gz
|
||||
ln -s /usr/local/sbin/knockd /usr/sbin/knockd
|
||||
setcap cap_net_raw=ep /usr/local/sbin/knockd
|
||||
chown minecraft /usr/local/sbin/knockd
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [[ $(uname -m) == "aarch64" ]]; then
|
||||
curl -sL -o /bin/gosu https://github.com/tianon/gosu/releases/download/1.14/gosu-arm64
|
||||
curl -sL -o /bin/gosu https://github.com/tianon/gosu/releases/download/1.16/gosu-arm64
|
||||
chmod +x /bin/gosu
|
||||
elif [[ $(uname -m) == "x86_64" ]]; then
|
||||
curl -sL -o /bin/gosu https://github.com/tianon/gosu/releases/download/1.14/gosu-amd64
|
||||
curl -sL -o /bin/gosu https://github.com/tianon/gosu/releases/download/1.16/gosu-amd64
|
||||
chmod +x /bin/gosu
|
||||
else
|
||||
echo "Not supported!"
|
||||
|
||||
@@ -36,7 +36,9 @@ dnf install -y ImageMagick \
|
||||
zstd \
|
||||
lbzip2 \
|
||||
libpcap \
|
||||
libwebp
|
||||
libwebp \
|
||||
findutils \
|
||||
which
|
||||
|
||||
bash /build/ol/install-gosu.sh
|
||||
|
||||
@@ -44,3 +46,5 @@ bash /build/ol/install-gosu.sh
|
||||
curl -fsSL -o /tmp/knock.tar.gz https://github.com/Metalcape/knock/releases/download/0.8.1/knock-0.8.1-$TARGET.tar.gz
|
||||
tar -xf /tmp/knock.tar.gz -C /usr/local/ && rm /tmp/knock.tar.gz
|
||||
ln -s /usr/local/sbin/knockd /usr/sbin/knockd
|
||||
setcap cap_net_raw=ep /usr/local/sbin/knockd
|
||||
chown minecraft /usr/local/sbin/knockd
|
||||
|
||||
@@ -35,4 +35,6 @@ apt-get clean
|
||||
curl -fsSL -o /tmp/knock.tar.gz https://github.com/Metalcape/knock/releases/download/0.8.1/knock-0.8.1-$TARGET.tar.gz
|
||||
tar -xf /tmp/knock.tar.gz -C /usr/local/ && rm /tmp/knock.tar.gz
|
||||
ln -s /usr/local/sbin/knockd /usr/sbin/knockd
|
||||
setcap cap_net_raw=ep /usr/local/sbin/knockd
|
||||
chown minecraft /usr/local/sbin/knockd
|
||||
find /usr/lib -name 'libpcap.so.0.8' -execdir cp '{}' libpcap.so.1 \;
|
||||
|
||||
@@ -16,7 +16,7 @@ If you leave it off, a default is computed from the server type and version, suc
|
||||
|
||||
That way you can easily differentiate between several servers you may have started.
|
||||
|
||||
The section symbol (§) and other unicode characters are automatically converted to allow [formatting codes](https://minecraft.fandom.com/wiki/Formatting_codes) to be used consistently with all server versions. For example,
|
||||
The section symbol (§) and other unicode characters are automatically converted to allow [formatting codes](https://minecraft.wiki/w/Formatting_codes) to be used consistently with all server versions. For example,
|
||||
|
||||
-e MOTD="A §l§cMinecraft§r §nserver"
|
||||
|
||||
@@ -62,7 +62,7 @@ To whitelist players for your Minecraft server, you can:
|
||||
user3
|
||||
```
|
||||
|
||||
When either is set, [whitelisting of connecting users](https://minecraft.fandom.com/wiki/Server.properties#white-list) is enabled.
|
||||
When either is set, [whitelisting of connecting users](https://minecraft.wiki/w/Server.properties#white-list) is enabled.
|
||||
|
||||
To change the behavior when the whitelist file already exists, set the variable `EXISTING_WHITELIST_FILE` to one of the following options:
|
||||
|
||||
@@ -82,7 +82,7 @@ To change the behavior when the whitelist file already exists, set the variable
|
||||
|
||||
For versions prior to 1.7.3, `white-list.txt` will be maintained instead. Only usernames are supported for those versions.
|
||||
|
||||
To [enforce the whitelist changes immediately](https://minecraft.fandom.com/wiki/Server.properties#enforce-whitelist) when whitelist commands are used , set `ENFORCE_WHITELIST` to "true". If managing the whitelist file manually, `ENABLE_WHITELIST` can be set to "true" to set the `white-list` property.
|
||||
To [enforce the whitelist changes immediately](https://minecraft.wiki/w/Server.properties#enforce-whitelist) when whitelist commands are used , set `ENFORCE_WHITELIST` to "true". If managing the whitelist file manually, `ENABLE_WHITELIST` can be set to "true" to set the `white-list` property.
|
||||
|
||||
### Op/Administrator Players
|
||||
|
||||
@@ -279,7 +279,7 @@ If using a negative value for the seed, make sure to quote the value such as:
|
||||
|
||||
By default, Minecraft servers are configured to run in Survival mode. You can
|
||||
change the mode using `MODE` where you can either provide the [standard
|
||||
numerical values](http://minecraft.gamepedia.com/Game_mode#Game_modes) or the
|
||||
numerical values](http://minecraft.wiki/Game_mode#Game_modes) or the
|
||||
shortcut values:
|
||||
|
||||
- creative
|
||||
@@ -301,9 +301,9 @@ environment variable set to `false`, such as
|
||||
### Level Type and Generator Settings
|
||||
|
||||
By default, a standard world is generated with hills, valleys, water, etc. A different level type can
|
||||
be configured by setting `LEVEL_TYPE` to [an expected type listed here](https://minecraft.fandom.com/wiki/Server.properties#level-type).
|
||||
be configured by setting `LEVEL_TYPE` to [an expected type listed here](https://minecraft.wiki/w/Server.properties#level-type).
|
||||
|
||||
For some of the level types, `GENERATOR_SETTINGS` can be used to further customize the world generation [as described here](https://minecraft.fandom.com/wiki/Server.properties#generator-settings).
|
||||
For some of the level types, `GENERATOR_SETTINGS` can be used to further customize the world generation [as described here](https://minecraft.wiki/w/Server.properties#generator-settings).
|
||||
|
||||
### Custom Server Resource Pack
|
||||
|
||||
@@ -353,10 +353,28 @@ If you must, the server port can be set like:
|
||||
|
||||
**however**, be sure to change your port mapping accordingly and be prepared for some features to break.
|
||||
|
||||
### Custom server properties
|
||||
|
||||
Some mods/plugins utilize custom `server.properties` entries which can be declared via the `CUSTOM_SERVER_PROPERTIES` environment variable. The contents must be newline delimited `name=value` pairs.
|
||||
|
||||
Within a compose file, newline delimited entries can be declared as shown here:
|
||||
|
||||
```yaml
|
||||
CUSTOM_SERVER_PROPERTIES: |
|
||||
custom1=value1
|
||||
defaultworldgenerator-port=f8c04631-f744-11ec-b260-f02f74b094e0
|
||||
```
|
||||
|
||||
When using `docker run` from a bash shell, the entries must be quoted with the `$'` syntax, such as
|
||||
|
||||
```
|
||||
-e CUSTOM_SERVER_PROPERTIES=$'k1=v1\nk2=v2'
|
||||
```
|
||||
|
||||
### Other server property mappings
|
||||
|
||||
| Environment Variable | Server Property |
|
||||
| --------------------------------- | --------------------------------- |
|
||||
|-----------------------------------|-----------------------------------|
|
||||
| BROADCAST_CONSOLE_TO_OPS | broadcast-console-to-ops |
|
||||
| BROADCAST_RCON_TO_OPS | broadcast-rcon-to-ops |
|
||||
| ENABLE_STATUS | enable-status |
|
||||
|
||||
@@ -38,6 +38,8 @@ The following environment variables define the behaviour of auto-pausing:
|
||||
describes period of the daemonized state machine, that handles the pausing of the process (resuming is done independently)
|
||||
- `AUTOPAUSE_KNOCK_INTERFACE`, default `eth0`
|
||||
<br>Describes the interface passed to the `knockd` daemon. If the default interface does not work, run the `ifconfig` command inside the container and derive the interface receiving the incoming connection from its output. The passed interface must exist inside the container. Using the loopback interface (`lo`) does likely not yield the desired results.
|
||||
- `AUTOPAUSE_SUDO`, default "true"
|
||||
specifies if the knockd service should be run via sudo in order to elevate its privileges
|
||||
|
||||
!!! tip
|
||||
|
||||
|
||||
@@ -83,6 +83,8 @@ cd build/distributions
|
||||
jwebserver -b 0.0.0.0 -p 8008
|
||||
```
|
||||
|
||||
If `jwebserver` is not available, try `java -m jdk.httpserver`
|
||||
|
||||
```shell
|
||||
--build-arg MC_HELPER_VERSION=1.8.1-SNAPSHOT \
|
||||
--build-arg MC_HELPER_BASE_URL=http://host.docker.internal:8008
|
||||
|
||||
28
docs/misc/examples.md
Normal file
28
docs/misc/examples.md
Normal file
@@ -0,0 +1,28 @@
|
||||
# Examples
|
||||
|
||||
Various examples are [maintained in the repository](https://github.com/itzg/docker-minecraft-server/tree/master/examples). The sections below highlight a few particular ones.
|
||||
|
||||
## Bedrock compatible server
|
||||
|
||||
Using the [GeyserMC plugin](https://geysermc.org/) with a Paper server (or similar) "enables clients from Minecraft Bedrock Edition to join your Minecraft Java server". The example also includes [Floodgate](https://wiki.geysermc.org/floodgate/) which "allows Xbox Live authenticated Bedrock users to join without a Java Edition account".
|
||||
|
||||
```yaml
|
||||
version: "3.8"
|
||||
|
||||
services:
|
||||
mc:
|
||||
image: itzg/minecraft-server
|
||||
environment:
|
||||
EULA: "true"
|
||||
TYPE: "PAPER"
|
||||
PLUGINS: |
|
||||
https://download.geysermc.org/v2/projects/geyser/versions/latest/builds/latest/downloads/spigot
|
||||
https://download.geysermc.org/v2/projects/floodgate/versions/latest/builds/latest/downloads/spigot
|
||||
ports:
|
||||
- "25565:25565"
|
||||
- "19132:19132/udp"
|
||||
volumes:
|
||||
- ./data:/data
|
||||
```
|
||||
|
||||
[Source](https://github.com/itzg/docker-minecraft-server/blob/master/examples/geyser/docker-compose.yml)
|
||||
@@ -22,8 +22,8 @@
|
||||
|
||||
## Extra options
|
||||
|
||||
`MODRINTH_DOWNLOAD_OPTIONAL_DEPENDENCIES`
|
||||
: Required dependencies of the project will _always_ be downloaded and optional dependencies can also be downloaded by setting this to `true`. The default is "true"
|
||||
`MODRINTH_DOWNLOAD_DEPENDENCIES`
|
||||
: Can be set to `none` (the default), `required`, or `optional` to download required and/or optional dependencies.
|
||||
|
||||
`MODRINTH_ALLOWED_VERSION_TYPE`
|
||||
: The version type is used to determine the newest version to use from each project. The allowed values are `release` (default), `beta`, `alpha`.
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
mkdocs == 1.5.2
|
||||
mkdocs-material-extensions == 1.1.1
|
||||
mkdocs-material == 9.2.7
|
||||
mkdocs == 1.5.3
|
||||
mkdocs-material-extensions == 1.2
|
||||
mkdocs-material == 9.4.3
|
||||
mkdocs-autorefs == 0.5.0
|
||||
mkdocstrings == 0.23.0
|
||||
mkdocs-literate-nav == 0.6.0
|
||||
mkdocs-literate-nav == 0.6.1
|
||||
mdx-gh-links == 0.3.1
|
||||
mkdocs-click == 0.8.0
|
||||
mkdocs-static-i18n == 1.0.2
|
||||
mkdocs-click == 0.8.1
|
||||
mkdocs-static-i18n == 1.0.6
|
||||
@@ -1,12 +1,20 @@
|
||||
# Bukkit/Spigot
|
||||
|
||||
Enable Bukkit/Spigot server mode by adding a `-e TYPE=BUKKIT` or `-e TYPE=SPIGOT` to your command-line.
|
||||
Run a Bukkit/Spigot server type by setting the environment variable `TYPE` to "BUKKIT" or "SPIGOT".
|
||||
|
||||
```
|
||||
docker run -d -v /path/on/host:/data \
|
||||
-e TYPE=SPIGOT \
|
||||
-p 25565:25565 -e EULA=TRUE --name mc itzg/minecraft-server
|
||||
```
|
||||
!!! example
|
||||
|
||||
Command-line
|
||||
```
|
||||
docker run ... -e TYPE=SPIGOT ...
|
||||
```
|
||||
|
||||
Compose
|
||||
```yaml
|
||||
environment:
|
||||
...
|
||||
TYPE: SPIGOT
|
||||
```
|
||||
|
||||
If the downloaded server jar is corrupted, set `FORCE_REDOWNLOAD` to "true" to force a re-download during next container startup. After successfully re-downloading, you should remove that or set to "false".
|
||||
|
||||
@@ -15,16 +23,14 @@ If you are hosting your own copy of Bukkit/Spigot you can override the download
|
||||
- -e BUKKIT_DOWNLOAD_URL=<url>
|
||||
- -e SPIGOT_DOWNLOAD_URL=<url>
|
||||
|
||||
You can build spigot from source by adding `-e BUILD_FROM_SOURCE=true`
|
||||
|
||||
Plugins can either be managed within the `plugins` subdirectory of the [data directory](../../data-directory.md) or you can also [attach a `/plugins` volume](../../mods-and-plugins/index.md#optional-plugins-mods-and-config-attach-points). If you add plugins while the container is running, you'll need to restart it to pick those up.
|
||||
|
||||
[You can also auto-download plugins using `SPIGET_RESOURCES`.](../../mods-and-plugins/spiget.md)
|
||||
|
||||
!!! note
|
||||
|
||||
Some of the `VERSION` values are not as intuitive as you would think, so make sure to click into the version entry to find the **exact** version needed for the download. For example, "1.8" is not sufficient since their download naming expects `1.8-R0.1-SNAPSHOT-latest` exactly.
|
||||
|
||||
## Build from source
|
||||
|
||||
You can build spigot from source by setting the environment variable `BUILD_FROM_SOURCE` to "true".
|
||||
|
||||
## Alternatives
|
||||
|
||||
### Canyon
|
||||
|
||||
@@ -35,3 +35,23 @@ In both of the cases above, there is no need for the `VERSION` or `FORGE_VERSION
|
||||
!!! note
|
||||
|
||||
If an error occurred while installing Forge, it might be possible to resolve by temporarily setting `FORGE_FORCE_REINSTALL` to "true". Be sure to remove that variable after successfully starting the server.
|
||||
|
||||
## Alternatives
|
||||
|
||||
### NeoForge
|
||||
|
||||
Support for [NeoForge](https://neoforged.net/) is also provided. A NeoForge server can be automatically managed by setting `TYPE` to "NEOFORGE". `VERSION` specifies the Minecraft version and `NEOFORGE_VERSION` can be set to select a specific sub-version. By default, the latest NeoForge version available for the requested Minecraft version will be used.
|
||||
|
||||
!!! example
|
||||
|
||||
```
|
||||
docker run -e TYPE=NEOFORGE -e VERSION=1.20.1 -e NEOFORGE_VERSION=47.1.79 ...
|
||||
```
|
||||
|
||||
or in a compose file
|
||||
```yaml
|
||||
environment:
|
||||
TYPE: NEOFORGE
|
||||
VERSION: "1.20.1"
|
||||
NEOFORGE_VERSION: "47.1.79"
|
||||
```
|
||||
|
||||
@@ -37,7 +37,7 @@ Configuration options with defaults:
|
||||
|
||||
!!! note
|
||||
|
||||
Instead of using format codes in the MOTD, Limbo requires [JSON chat content](https://minecraft.fandom.com/wiki/Raw_JSON_text_format#Java_Edition). If a plain string is provided, which is the default, then it gets converted into the required JSON structure.
|
||||
Instead of using format codes in the MOTD, Limbo requires [JSON chat content](https://minecraft.wiki/w/Raw_JSON_text_format#Java_Edition). If a plain string is provided, which is the default, then it gets converted into the required JSON structure.
|
||||
|
||||
## Crucible
|
||||
|
||||
|
||||
@@ -48,7 +48,7 @@ alternatively, you can mount: <code>/etc/localtime:/etc/localtime:ro
|
||||
|
||||
/etc/timezone:/etc/timezone:ro</code>
|
||||
</td>
|
||||
<td><code>1G</code></td>
|
||||
<td><code>UTC</code></td>
|
||||
<td>⬜️</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@@ -260,7 +260,7 @@ alternatively, you can mount: <code>/etc/localtime:/etc/localtime:ro
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>MODE</code></td>
|
||||
<td>Minecraft servers are configured to run in Survival mode by default. You can change the mode using MODE where you can either provide the <a href="http://minecraft.gamepedia.com/Game_mode#Game_modes">standard numerical values</a> or the shortcut values:<br />
|
||||
<td>Minecraft servers are configured to run in Survival mode by default. You can change the mode using MODE where you can either provide the <a href="http://minecraft.wiki/Game_mode#Game_modes">standard numerical values</a> or the shortcut values:<br />
|
||||
<ul>
|
||||
<li>creative</li>
|
||||
<li>survival</li>
|
||||
@@ -278,14 +278,14 @@ alternatively, you can mount: <code>/etc/localtime:/etc/localtime:ro
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>LEVEL_TYPE</code></td>
|
||||
<td>By default, a standard world is generated with hills, valleys, water, etc. A different level type can be configured by setting LEVEL_TYPE to <a href="https://minecraft.fandom.com/wiki/Server.properties#level-type">an expected type listed here</a>.
|
||||
<td>By default, a standard world is generated with hills, valleys, water, etc. A different level type can be configured by setting LEVEL_TYPE to <a href="https://minecraft.wiki/w/Server.properties#level-type">an expected type listed here</a>.
|
||||
</td>
|
||||
<td><code>minecraft:default</code></td>
|
||||
<td>⬜️</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>GENERATOR_SETTINGS</code></td>
|
||||
<td>For some of the level types, <code>GENERATOR_SETTINGS</code> can be used to further customize the world generation <a href="https://minecraft.fandom.com/wiki/Server.properties#generator-settings">as described here</a>.</td>
|
||||
<td>For some of the level types, <code>GENERATOR_SETTINGS</code> can be used to further customize the world generation <a href="https://minecraft.wiki/w/Server.properties#generator-settings">as described here</a>.</td>
|
||||
<td><code></code></td>
|
||||
<td>⬜️</td>
|
||||
</tr>
|
||||
|
||||
@@ -13,25 +13,26 @@
|
||||
|
||||
When using the image `itzg/minecraft-server` without a tag, the `latest` image tag is implied from the table below. To use a different version of Java, please use an alternate tag to run your Minecraft server container. The `stable` tag is similar to `latest`; however, it tracks [the most recent repository release/tag](https://github.com/itzg/docker-minecraft-server/releases/latest).
|
||||
|
||||
| Tag name | Java version | Linux | JVM Type | Architecture |
|
||||
|-------------------|--------------|--------|-------------|-------------------|
|
||||
| latest | 17 | Ubuntu | Hotspot | amd64,arm64,armv7 |
|
||||
| stable | 17 | Ubuntu | Hotspot | amd64,arm64,armv7 |
|
||||
| java8 | 8 | Alpine | Hotspot | amd64 |
|
||||
| java8-jdk | 8 | Ubuntu | Hotspot+JDK | amd64 |
|
||||
| java8-multiarch | 8 | Ubuntu | Hotspot | amd64,arm64,armv7 |
|
||||
| java8-openj9 | 8 | Debian | OpenJ9 | amd64 |
|
||||
| java8-graalvm-ce | 8 | Oracle | GraalVM CE | amd64 |
|
||||
| java11 | 11 | Ubuntu | Hotspot | amd64,arm64,armv7 |
|
||||
| java11-jdk | 11 | Ubuntu | Hotspot+JDK | amd64,arm64,armv7 |
|
||||
| java11-openj9 | 11 | Debian | OpenJ9 | amd64 |
|
||||
| java17 | 17 | Ubuntu | Hotspot | amd64,arm64,armv7 |
|
||||
| java17-jdk | 17 | Ubuntu | Hotspot+JDK | amd64,arm64,armv7 |
|
||||
| java17-openj9 | 17 | Debian | OpenJ9 | amd64 |
|
||||
| java17-graalvm-ce | 17 | Oracle | GraalVM CE | amd64,arm64 |
|
||||
| java17-alpine | 17 | Alpine | Hotspot | amd64 |
|
||||
| java20-alpine | 20 | Alpine | Hotspot | amd64 |
|
||||
| java20 | 20 | Ubuntu | Hotspot | amd64,arm64 |
|
||||
| Tag name | Java version | Linux | JVM Type | Architecture |
|
||||
|------------------|--------------|--------|----------------|-------------------|
|
||||
| latest | 17 | Ubuntu | Hotspot | amd64,arm64,armv7 |
|
||||
| stable | 17 | Ubuntu | Hotspot | amd64,arm64,armv7 |
|
||||
| java8 | 8 | Alpine | Hotspot | amd64 |
|
||||
| java8-jdk | 8 | Ubuntu | Hotspot+JDK | amd64 |
|
||||
| java8-multiarch | 8 | Ubuntu | Hotspot | amd64,arm64,armv7 |
|
||||
| java8-openj9 | 8 | Debian | OpenJ9 | amd64 |
|
||||
| java8-graalvm-ce | 8 | Oracle | GraalVM CE | amd64 |
|
||||
| java11 | 11 | Ubuntu | Hotspot | amd64,arm64,armv7 |
|
||||
| java11-jdk | 11 | Ubuntu | Hotspot+JDK | amd64,arm64,armv7 |
|
||||
| java11-openj9 | 11 | Debian | OpenJ9 | amd64 |
|
||||
| java17 | 17 | Ubuntu | Hotspot | amd64,arm64,armv7 |
|
||||
| java17-jdk | 17 | Ubuntu | Hotspot+JDK | amd64,arm64,armv7 |
|
||||
| java17-openj9 | 17 | Debian | OpenJ9 | amd64 |
|
||||
| java17-graalvm | 17 | Oracle | Oracle GraalVM | amd64,arm64 |
|
||||
| java17-alpine | 17 | Alpine | Hotspot | amd64 |
|
||||
| java20-alpine | 20 | Alpine | Hotspot | amd64 |
|
||||
| java20 | 20 | Ubuntu | Hotspot | amd64,arm64 |
|
||||
| java21-graalvm | 21 | Oracle | Oracle GraalVM | amd64,arm64 |
|
||||
|
||||
For example, to use Java version 8 on any supported architecture:
|
||||
|
||||
@@ -53,3 +54,5 @@ The following image tags have been deprecated and are no longer receiving update
|
||||
- openj9-nightly
|
||||
- multiarch-latest
|
||||
- java16/java16-openj9
|
||||
- java17-graalvm-ce
|
||||
- java20-graalvm
|
||||
|
||||
@@ -706,5 +706,5 @@ update-client-command-list: true
|
||||
register-command-list-data: true
|
||||
|
||||
# If LuckPerms should attempt to resolve Vanilla command target selectors for LP commands.
|
||||
# See here for more info: https://minecraft.gamepedia.com/Commands#Target_selectors
|
||||
# See here for more info: https://minecraft.wiki/Commands#Target_selectors
|
||||
resolve-command-selectors: false
|
||||
|
||||
@@ -45,7 +45,11 @@ if isTrue "${DEBUG_AUTOPAUSE}"; then
|
||||
knockdArgs+=(-D)
|
||||
fi
|
||||
|
||||
sudo /usr/local/sbin/knockd "${knockdArgs[@]}"
|
||||
if isTrue "${AUTOPAUSE_SUDO:-true}"; then
|
||||
sudo /usr/local/sbin/knockd "${knockdArgs[@]}"
|
||||
else
|
||||
/usr/local/sbin/knockd "${knockdArgs[@]}"
|
||||
fi
|
||||
if [ $? -ne 0 ] ; then
|
||||
logAutopause "Failed to start knockd daemon."
|
||||
logAutopause "Probable cause: Unable to attach to interface \"$AUTOPAUSE_KNOCK_INTERFACE\"."
|
||||
|
||||
58
files/property-definitions.json
Normal file
58
files/property-definitions.json
Normal file
@@ -0,0 +1,58 @@
|
||||
{
|
||||
"motd": {"env": "MOTD"},
|
||||
"gamemode": {"env": "MODE"},
|
||||
"difficulty": {"env": "DIFFICULTY"},
|
||||
"white-list": {"env": "WHITELIST_PROP"},
|
||||
"enforce-whitelist": {"env": "ENFORCE_WHITELIST"},
|
||||
"level-type": {"env": "LEVEL_TYPE"},
|
||||
"server-name": {"env": "SERVER_NAME"},
|
||||
"server-ip": {"env": "SERVER_IP"},
|
||||
"server-port": {"env": "SERVER_PORT"},
|
||||
"allow-nether": {"env": "ALLOW_NETHER"},
|
||||
"announce-player-achievements": {"env": "ANNOUNCE_PLAYER_ACHIEVEMENTS"},
|
||||
"enable-command-block": {"env": "ENABLE_COMMAND_BLOCK"},
|
||||
"spawn-animals": {"env": "SPAWN_ANIMALS"},
|
||||
"spawn-monsters": {"env": "SPAWN_MONSTERS"},
|
||||
"spawn-npcs": {"env": "SPAWN_NPCS"},
|
||||
"spawn-protection": {"env": "SPAWN_PROTECTION"},
|
||||
"generate-structures": {"env": "GENERATE_STRUCTURES"},
|
||||
"view-distance": {"env": "VIEW_DISTANCE"},
|
||||
"hardcore": {"env": "HARDCORE"},
|
||||
"snooper-enabled": {"env": "SNOOPER_ENABLED"},
|
||||
"max-build-height": {"env": "MAX_BUILD_HEIGHT"},
|
||||
"force-gamemode": {"env": "FORCE_GAMEMODE"},
|
||||
"max-tick-time": {"env": "MAX_TICK_TIME"},
|
||||
"enable-query": {"env": "ENABLE_QUERY"},
|
||||
"query.port": {"env": "QUERY_PORT"},
|
||||
"enable-rcon": {"env": "ENABLE_RCON"},
|
||||
"rcon.password": {"env": "RCON_PASSWORD"},
|
||||
"rcon.port": {"env": "RCON_PORT"},
|
||||
"max-players": {"env": "MAX_PLAYERS"},
|
||||
"max-world-size": {"env": "MAX_WORLD_SIZE"},
|
||||
"level-name": {"env": "LEVEL"},
|
||||
"level-seed": {"env": "SEED"},
|
||||
"pvp": {"env": "PVP"},
|
||||
"generator-settings": {"env": "GENERATOR_SETTINGS"},
|
||||
"online-mode": {"env": "ONLINE_MODE"},
|
||||
"allow-flight": {"env": "ALLOW_FLIGHT"},
|
||||
"resource-pack": {"env": "RESOURCE_PACK"},
|
||||
"resource-pack-sha1": {"env": "RESOURCE_PACK_SHA1"},
|
||||
"require-resource-pack": {"env": "RESOURCE_PACK_ENFORCE"},
|
||||
"player-idle-timeout": {"env": "PLAYER_IDLE_TIMEOUT"},
|
||||
"broadcast-console-to-ops": {"env": "BROADCAST_CONSOLE_TO_OPS"},
|
||||
"broadcast-rcon-to-ops": {"env": "BROADCAST_RCON_TO_OPS"},
|
||||
"enable-jmx-monitoring": {"env": "ENABLE_JMX"},
|
||||
"sync-chunk-writes": {"env": "SYNC_CHUNK_WRITES"},
|
||||
"enable-status": {"env": "ENABLE_STATUS"},
|
||||
"entity-broadcast-range-percentage": {"env": "ENTITY_BROADCAST_RANGE_PERCENTAGE"},
|
||||
"function-permission-level": {"env": "FUNCTION_PERMISSION_LEVEL"},
|
||||
"network-compression-threshold": {"env": "NETWORK_COMPRESSION_THRESHOLD"},
|
||||
"op-permission-level": {"env": "OP_PERMISSION_LEVEL"},
|
||||
"prevent-proxy-connections": {"env": "PREVENT_PROXY_CONNECTIONS"},
|
||||
"use-native-transport": {"env": "USE_NATIVE_TRANSPORT"},
|
||||
"simulation-distance": {"env": "SIMULATION_DISTANCE"},
|
||||
"previews-chat": {"env": "PREVIEWS_CHAT"},
|
||||
"enforce-secure-profile": {"env": "ENFORCE_SECURE_PROFILE"},
|
||||
"initial-enabled-packs": {"env": "INITIAL_ENABLED_PACKS"},
|
||||
"initial-disabled-packs": {"env": "INITIAL_DISABLED_PACKS"}
|
||||
}
|
||||
@@ -185,6 +185,10 @@ case "${TYPE^^}" in
|
||||
exec "${SCRIPTS:-/}start-deployForge" "$@"
|
||||
;;
|
||||
|
||||
NEOFORGE|NEOFORGED)
|
||||
exec "${SCRIPTS:-/}start-deployNeoForge" "$@"
|
||||
;;
|
||||
|
||||
FABRIC)
|
||||
exec "${SCRIPTS:-/}start-deployFabric" "$@"
|
||||
;;
|
||||
|
||||
30
scripts/start-deployNeoForge
Normal file
30
scripts/start-deployNeoForge
Normal file
@@ -0,0 +1,30 @@
|
||||
#!/bin/bash
|
||||
|
||||
: "${NEOFORGE_VERSION:=latest}"
|
||||
: "${NEOFORGE_FORCE_REINSTALL:=false}}"
|
||||
|
||||
# shellcheck source=start-utils
|
||||
. "${SCRIPTS:-$(dirname "$0")}/start-utils"
|
||||
isDebugging && set -x
|
||||
|
||||
resultsFile=/data/.run-neoforge.env
|
||||
|
||||
if ! mc-image-helper install-neoforge \
|
||||
--output-directory=/data \
|
||||
--results-file=${resultsFile} \
|
||||
--minecraft-version="${VERSION}" \
|
||||
--neoforge-version="${NEOFORGE_VERSION}" \
|
||||
--force-reinstall="${NEOFORGE_FORCE_REINSTALL}"; then
|
||||
log "ERROR failed to install Forge"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# grab SERVER and export it
|
||||
set -a
|
||||
# shellcheck disable=SC1090
|
||||
source ${resultsFile}
|
||||
set +a
|
||||
|
||||
export FAMILY=FORGE
|
||||
|
||||
exec "${SCRIPTS:-/}start-setupWorld" "$@"
|
||||
@@ -229,8 +229,12 @@ function handleGenericPacks() {
|
||||
|
||||
function handleModrinthProjects() {
|
||||
: "${MODRINTH_PROJECTS:=}"
|
||||
: "${MODRINTH_DOWNLOAD_OPTIONAL_DEPENDENCIES:=true}"
|
||||
: "${MODRINTH_ALLOWED_VERSION_TYPE:=release}"
|
||||
: "${MODRINTH_DOWNLOAD_DEPENDENCIES:=none}"
|
||||
if [[ -v MODRINTH_DOWNLOAD_OPTIONAL_DEPENDENCIES ]]; then
|
||||
log "WARNING The variable MODRINTH_DOWNLOAD_OPTIONAL_DEPENDENCIES is removed."
|
||||
log " Use MODRINTH_DOWNLOAD_DEPENDENCIES=optional instead"
|
||||
fi
|
||||
|
||||
if [[ $MODRINTH_PROJECTS ]] && isFamily HYBRID FORGE FABRIC SPIGOT; then
|
||||
if isFamily HYBRID FORGE; then
|
||||
@@ -246,7 +250,7 @@ function handleModrinthProjects() {
|
||||
--projects="${MODRINTH_PROJECTS}" \
|
||||
--game-version="${VERSION}" \
|
||||
--loader="$loader" \
|
||||
--download-optional-dependencies="$MODRINTH_DOWNLOAD_OPTIONAL_DEPENDENCIES" \
|
||||
--download-dependencies="$MODRINTH_DOWNLOAD_DEPENDENCIES" \
|
||||
--allowed-version-type="$MODRINTH_ALLOWED_VERSION_TYPE"
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -8,49 +8,18 @@
|
||||
: "${SKIP_SERVER_PROPERTIES:=false}"
|
||||
: "${ENABLE_WHITELIST:=}"
|
||||
|
||||
# FUNCTIONS
|
||||
function setServerPropValue {
|
||||
local prop=$1
|
||||
local value=$2
|
||||
# normalize booleans
|
||||
case ${value^^} in
|
||||
TRUE|FALSE)
|
||||
value=${value,,} ;;
|
||||
esac
|
||||
if [[ $prop =~ password ]]; then
|
||||
showValue="*****"
|
||||
else
|
||||
showValue="$value"
|
||||
fi
|
||||
if [ -f "$SERVER_PROPERTIES" ] && grep "${prop}" "$SERVER_PROPERTIES" > /dev/null; then
|
||||
debug "Setting ${prop} to '${showValue}' in ${SERVER_PROPERTIES}"
|
||||
sed -i "/^${prop}\s*=/ c ${prop}=${value//\\/\\\\}" "$SERVER_PROPERTIES"
|
||||
else
|
||||
debug "Adding ${prop} with '${showValue}' in ${SERVER_PROPERTIES}"
|
||||
echo "${prop}=${value}" >> "$SERVER_PROPERTIES"
|
||||
fi
|
||||
}
|
||||
|
||||
function setServerProp {
|
||||
local prop=$1
|
||||
local varName=$2
|
||||
|
||||
if [ -v $varName ]; then
|
||||
setServerPropValue "$prop" "${!varName}"
|
||||
fi
|
||||
}
|
||||
|
||||
function customizeServerProps {
|
||||
local firstSetup=$1
|
||||
# Whitelist processing
|
||||
if [ -n "$WHITELIST" ] || [ -n "$WHITELIST_FILE" ] || isTrue "${ENABLE_WHITELIST}"; then
|
||||
log "Enabling whitelist functionality"
|
||||
setServerPropValue "white-list" "true"
|
||||
setServerPropValue "enforce-whitelist" "true"
|
||||
WHITELIST_PROP=true
|
||||
ENFORCE_WHITELIST=true
|
||||
export WHITELIST_PROP ENFORCE_WHITELIST
|
||||
elif isTrue "$firstSetup" || isFalse "${ENABLE_WHITELIST}"; then
|
||||
log "Disabling whitelist functionality"
|
||||
setServerPropValue "white-list" "false"
|
||||
setServerProp "enforce-whitelist" ENFORCE_WHITELIST
|
||||
WHITELIST_PROP=false
|
||||
export WHITELIST_PROP
|
||||
fi
|
||||
|
||||
# normalize MOTD
|
||||
@@ -59,101 +28,11 @@ function customizeServerProps {
|
||||
MOTD="{\"text\":\"${MOTD}\"}"
|
||||
fi
|
||||
fi
|
||||
|
||||
setServerProp "server-name" SERVER_NAME
|
||||
setServerProp "server-ip" SERVER_IP
|
||||
setServerProp "server-port" SERVER_PORT
|
||||
setServerProp "allow-nether" ALLOW_NETHER
|
||||
setServerProp "announce-player-achievements" ANNOUNCE_PLAYER_ACHIEVEMENTS
|
||||
setServerProp "enable-command-block" ENABLE_COMMAND_BLOCK
|
||||
setServerProp "spawn-animals" SPAWN_ANIMALS
|
||||
setServerProp "spawn-monsters" SPAWN_MONSTERS
|
||||
setServerProp "spawn-npcs" SPAWN_NPCS
|
||||
setServerProp "spawn-protection" SPAWN_PROTECTION
|
||||
setServerProp "generate-structures" GENERATE_STRUCTURES
|
||||
setServerProp "view-distance" VIEW_DISTANCE
|
||||
setServerProp "hardcore" HARDCORE
|
||||
setServerProp "snooper-enabled" SNOOPER_ENABLED
|
||||
setServerProp "max-build-height" MAX_BUILD_HEIGHT
|
||||
setServerProp "force-gamemode" FORCE_GAMEMODE
|
||||
setServerProp "max-tick-time" MAX_TICK_TIME
|
||||
setServerProp "enable-query" ENABLE_QUERY
|
||||
setServerProp "query.port" QUERY_PORT
|
||||
setServerProp "enable-rcon" ENABLE_RCON
|
||||
setServerProp "rcon.password" RCON_PASSWORD
|
||||
setServerProp "rcon.port" RCON_PORT
|
||||
setServerProp "max-players" MAX_PLAYERS
|
||||
setServerProp "max-world-size" MAX_WORLD_SIZE
|
||||
setServerProp "level-name" LEVEL
|
||||
setServerProp "level-seed" SEED
|
||||
setServerProp "pvp" PVP
|
||||
setServerProp "generator-settings" GENERATOR_SETTINGS
|
||||
setServerProp "online-mode" ONLINE_MODE
|
||||
setServerProp "allow-flight" ALLOW_FLIGHT
|
||||
setServerProp "resource-pack" RESOURCE_PACK
|
||||
setServerProp "resource-pack-sha1" RESOURCE_PACK_SHA1
|
||||
setServerProp "require-resource-pack" RESOURCE_PACK_ENFORCE
|
||||
setServerProp "player-idle-timeout" PLAYER_IDLE_TIMEOUT
|
||||
setServerProp "broadcast-console-to-ops" BROADCAST_CONSOLE_TO_OPS
|
||||
setServerProp "broadcast-rcon-to-ops" BROADCAST_RCON_TO_OPS
|
||||
setServerProp "enable-jmx-monitoring" ENABLE_JMX
|
||||
setServerProp "sync-chunk-writes" SYNC_CHUNK_WRITES
|
||||
setServerProp "enable-status" ENABLE_STATUS
|
||||
setServerProp "entity-broadcast-range-percentage" ENTITY_BROADCAST_RANGE_PERCENTAGE
|
||||
setServerProp "function-permission-level" FUNCTION_PERMISSION_LEVEL
|
||||
setServerProp "network-compression-threshold" NETWORK_COMPRESSION_THRESHOLD
|
||||
setServerProp "op-permission-level" OP_PERMISSION_LEVEL
|
||||
setServerProp "prevent-proxy-connections" PREVENT_PROXY_CONNECTIONS
|
||||
setServerProp "use-native-transport" USE_NATIVE_TRANSPORT
|
||||
setServerProp "simulation-distance" SIMULATION_DISTANCE
|
||||
setServerProp "previews-chat" PREVIEWS_CHAT
|
||||
setServerProp "enforce-secure-profile" ENFORCE_SECURE_PROFILE
|
||||
setServerProp "initial-enabled-packs" INITIAL_ENABLED_PACKS
|
||||
setServerProp "initial-disabled-packs" INITIAL_DISABLED_PACKS
|
||||
if [[ $MOTD ]]; then
|
||||
setServerPropValue "motd" "$(echo "$MOTD" | mc-image-helper asciify)"
|
||||
fi
|
||||
[[ $LEVEL_TYPE ]] && setServerPropValue "level-type" "${LEVEL_TYPE^^}"
|
||||
|
||||
if [ -n "$DIFFICULTY" ]; then
|
||||
case ${DIFFICULTY,,} in
|
||||
peaceful|0)
|
||||
if versionLessThan 1.13; then
|
||||
DIFFICULTY=0
|
||||
else
|
||||
DIFFICULTY=peaceful
|
||||
fi
|
||||
;;
|
||||
easy|1)
|
||||
if versionLessThan 1.13; then
|
||||
DIFFICULTY=1
|
||||
else
|
||||
DIFFICULTY=easy
|
||||
fi
|
||||
;;
|
||||
normal|2)
|
||||
if versionLessThan 1.13; then
|
||||
DIFFICULTY=2
|
||||
else
|
||||
DIFFICULTY=normal
|
||||
fi
|
||||
;;
|
||||
hard|3)
|
||||
if versionLessThan 1.13; then
|
||||
DIFFICULTY=3
|
||||
else
|
||||
DIFFICULTY=hard
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
log "DIFFICULTY must be peaceful, easy, normal, or hard."
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
setServerPropValue "difficulty" "$DIFFICULTY"
|
||||
MOTD="$(echo "$MOTD" | mc-image-helper asciify)"
|
||||
fi
|
||||
|
||||
if [ -n "$MODE" ]; then
|
||||
if [[ -v MODE ]]; then
|
||||
log "Setting mode"
|
||||
case ${MODE,,} in
|
||||
su*|0)
|
||||
@@ -189,8 +68,58 @@ function customizeServerProps {
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
setServerPropValue "gamemode" "$MODE"
|
||||
fi
|
||||
|
||||
if [[ -v DIFFICULTY ]]; then
|
||||
case ${DIFFICULTY,,} in
|
||||
peaceful|0)
|
||||
if versionLessThan 1.13; then
|
||||
DIFFICULTY=0
|
||||
else
|
||||
DIFFICULTY=peaceful
|
||||
fi
|
||||
;;
|
||||
easy|1)
|
||||
if versionLessThan 1.13; then
|
||||
DIFFICULTY=1
|
||||
else
|
||||
DIFFICULTY=easy
|
||||
fi
|
||||
;;
|
||||
normal|2)
|
||||
if versionLessThan 1.13; then
|
||||
DIFFICULTY=2
|
||||
else
|
||||
DIFFICULTY=normal
|
||||
fi
|
||||
;;
|
||||
hard|3)
|
||||
if versionLessThan 1.13; then
|
||||
DIFFICULTY=3
|
||||
else
|
||||
DIFFICULTY=hard
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
log "DIFFICULTY must be peaceful, easy, normal, or hard."
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
if [[ -v LEVEL_TYPE ]]; then
|
||||
LEVEL_TYPE="${LEVEL_TYPE^^}"
|
||||
fi
|
||||
|
||||
setPropertiesArgs=(
|
||||
--definitions "/image/property-definitions.json"
|
||||
)
|
||||
if [[ -v CUSTOM_SERVER_PROPERTIES ]]; then
|
||||
setPropertiesArgs+=(--custom-properties "$CUSTOM_SERVER_PROPERTIES")
|
||||
fi
|
||||
|
||||
mc-image-helper set-properties "${setPropertiesArgs[@]}" "$SERVER_PROPERTIES"
|
||||
|
||||
}
|
||||
|
||||
# Deploy server.properties file
|
||||
|
||||
Reference in New Issue
Block a user