mirror of
https://github.com/itzg/docker-minecraft-server.git
synced 2026-02-18 07:26:24 +00:00
Compare commits
50 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
92947c92dc | ||
|
|
e8ffa0fc0d | ||
|
|
4c0bd61faf | ||
|
|
85a957fe6f | ||
|
|
37a5d50f70 | ||
|
|
eb279d0fa0 | ||
|
|
aba27ad444 | ||
|
|
f5c332736d | ||
|
|
bf621356c1 | ||
|
|
19948065d5 | ||
|
|
3b7ddcdbbd | ||
|
|
8c74fc34cb | ||
|
|
89889c556b | ||
|
|
951a55707d | ||
|
|
377273e5a3 | ||
|
|
78fd5457d4 | ||
|
|
2e07ba431d | ||
|
|
2dca9220e2 | ||
|
|
8ee9d6d2eb | ||
|
|
8faf560721 | ||
|
|
a1d0830a8e | ||
|
|
5642b8db35 | ||
|
|
ee562599f4 | ||
|
|
1ffcb5c221 | ||
|
|
8cdf4d0072 | ||
|
|
1545236cc6 | ||
|
|
2ebcc0fe00 | ||
|
|
e5f818bdf1 | ||
|
|
df497ce3d8 | ||
|
|
f7ff2779d9 | ||
|
|
c9e14864f5 | ||
|
|
ec539a5dd2 | ||
|
|
7427bc9043 | ||
|
|
8ab104f6b7 | ||
|
|
f15cbb4ca1 | ||
|
|
fa235e97c5 | ||
|
|
d5e315bba8 | ||
|
|
91ad2974ec | ||
|
|
59902566f3 | ||
|
|
411391baa1 | ||
|
|
cadc48b41a | ||
|
|
1396a1ef6c | ||
|
|
0cf5195fc5 | ||
|
|
17e2f90b91 | ||
|
|
a079dd0ff0 | ||
|
|
c4d8972a83 | ||
|
|
b494124a2d | ||
|
|
d8ad2e5721 | ||
|
|
ec7bd14451 | ||
|
|
2097702daa |
8
.github/dependabot.yml
vendored
8
.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:
|
||||
@@ -14,3 +21,4 @@ updates:
|
||||
- "*"
|
||||
update-types:
|
||||
- patch
|
||||
- minor
|
||||
|
||||
43
.github/workflows/build-multiarch.yml
vendored
43
.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:
|
||||
- java20
|
||||
- java20-alpine
|
||||
- java21-graalvm
|
||||
- java21
|
||||
- java21-alpine
|
||||
- java17
|
||||
- java17-graalvm-ce
|
||||
- java17-graalvm
|
||||
- java17-jdk
|
||||
- java17-openj9
|
||||
- java17-alpine
|
||||
@@ -34,13 +35,17 @@ jobs:
|
||||
- java11-openj9
|
||||
- java11-jdk
|
||||
include:
|
||||
# JAVA 20:
|
||||
- variant: java20
|
||||
baseImage: eclipse-temurin:20-jre
|
||||
# JAVA 21:
|
||||
- variant: java21-graalvm
|
||||
baseImage: container-registry.oracle.com/graalvm/jdk:21-ol8
|
||||
platforms: linux/amd64,linux/arm64
|
||||
mcVersion: 1.20.2
|
||||
- variant: java21
|
||||
baseImage: eclipse-temurin:21-jre
|
||||
platforms: linux/amd64,linux/arm64
|
||||
mcVersion: 1.19.3
|
||||
- variant: java20-alpine
|
||||
baseImage: eclipse-temurin:20-jre-alpine
|
||||
- variant: java21-alpine
|
||||
baseImage: eclipse-temurin:21-jre-alpine
|
||||
platforms: linux/amd64
|
||||
mcVersion: 1.19.3
|
||||
# JAVA 17:
|
||||
@@ -49,8 +54,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 +111,14 @@ jobs:
|
||||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4.1.1
|
||||
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 +144,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 +173,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 +188,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 }}
|
||||
|
||||
16
.github/workflows/verify-pr.yml
vendored
16
.github/workflows/verify-pr.yml
vendored
@@ -16,14 +16,14 @@ jobs:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
variant:
|
||||
- java20
|
||||
- java21
|
||||
- java17
|
||||
- java17-alpine
|
||||
- java8-multiarch
|
||||
include:
|
||||
# JAVA 20:
|
||||
- variant: java20
|
||||
baseImage: eclipse-temurin:20-jre
|
||||
# JAVA 21:
|
||||
- variant: java21
|
||||
baseImage: eclipse-temurin:21-jre
|
||||
platforms: linux/amd64,linux/arm64
|
||||
mcVersion: 1.19.4
|
||||
# JAVA 17:
|
||||
@@ -45,16 +45,16 @@ jobs:
|
||||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4.1.1
|
||||
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"
|
||||
|
||||
16
Dockerfile
16
Dockerfile
@@ -22,27 +22,27 @@ COPY --chmod=644 files/sudoers* /etc/sudoers.d
|
||||
|
||||
EXPOSE 25565
|
||||
|
||||
ARG EASY_ADD_VER=0.8.0
|
||||
ARG EASY_ADD_VER=0.8.1
|
||||
ADD https://github.com/itzg/easy-add/releases/download/${EASY_ADD_VER}/easy-add_${TARGETOS}_${TARGETARCH}${TARGETVARIANT} /usr/bin/easy-add
|
||||
RUN chmod +x /usr/bin/easy-add
|
||||
|
||||
RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \
|
||||
--var version=1.7.0 --var app=restify --file {{.app}} \
|
||||
--var version=1.7.1 --var app=restify --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.6.2 --var app=rcon-cli --file {{.app}} \
|
||||
--var version=1.6.3 --var app=rcon-cli --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=0.12.2 --var app=mc-monitor --file {{.app}} \
|
||||
--var version=0.12.5 --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}} \
|
||||
--var version=1.9.1 --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.9
|
||||
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 +61,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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -62,11 +62,30 @@ you can use
|
||||
|
||||
## Enable Remote JMX for Profiling
|
||||
|
||||
To enable remote JMX, such as for profiling with VisualVM or JMC, add the environment variable `ENABLE_JMX=true`, set `JMX_HOST` to the IP/host running the Docker container, and add a port forwarding of TCP port 7091, such as:
|
||||
To enable remote JMX, such as for profiling with VisualVM or JMC, set the environment variable `ENABLE_JMX` to "true", set `JMX_HOST` to the IP/host running the Docker container, and add a port forwarding of TCP port 7091, such as:
|
||||
|
||||
```
|
||||
-e ENABLE_JMX=true -e JMX_HOST=$HOSTNAME -p 7091:7091
|
||||
```
|
||||
!!! example
|
||||
|
||||
With `docker run`
|
||||
|
||||
```
|
||||
-e ENABLE_JMX=true -e JMX_HOST=$HOSTNAME -p 7091:7091
|
||||
```
|
||||
|
||||
If needing to map to a different port, then also set the environment variable `JMX_PORT` to the desired host port.
|
||||
|
||||
!!! example
|
||||
|
||||
With a compose file:
|
||||
|
||||
```yaml
|
||||
environment:
|
||||
ENABLE_JMX: true
|
||||
JMX_HOST: ${HOSTNAME}
|
||||
JMX_PORT: "7092"
|
||||
ports:
|
||||
- "7092:7092"
|
||||
```
|
||||
|
||||
## Enable Aikar's Flags
|
||||
|
||||
|
||||
@@ -4,6 +4,37 @@ If you prefer to manually manage the `server.properties` file, set `OVERRIDE_SER
|
||||
|
||||
> NOTE: to clear a server property, set the variable to an empty string, such as `-e RESOURCE_PACK=""`. A variables that maps to a server property that is unset, is ignored and the existing `server.property` is left unchanged.
|
||||
|
||||
## Placeholders
|
||||
|
||||
When declaring a server properties via container environment variables, those values may contain placeholders that are processed when the `server.properties` file is updated.
|
||||
|
||||
The syntax of placeholders is DOS-style, `%VAR%`, to avoid being processed by Docker or the shell and the following options are available:
|
||||
|
||||
`%VAR%` or `%env:VAR%`
|
||||
|
||||
: Replaced with the resolved value or the environment variable `VAR`
|
||||
|
||||
`%date:FMT%`
|
||||
|
||||
: Formats the current date/time with the given `FMT` string processed by [Java's DateTimeFormatter](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/time/format/DateTimeFormatter.html).
|
||||
|
||||
Any declared or resolved environment variable may be referenced, such as `VERSION` and `TYPE`. Additionally, [Modrinth](../types-and-platforms/mod-platforms/modrinth-modpacks.md) and [Auto CurseForge](../types-and-platforms/mod-platforms/auto-curseforge.md) modpacks will expose the environment variables `MODPACK_NAME` and `MODPACK_VERSION`. The originally declared version, such as "LATEST" or "SNAPSHOT", is available in the variable `DECLARED_VERSION`
|
||||
|
||||
!!! example
|
||||
|
||||
As a compose file environment entry:
|
||||
|
||||
```yaml
|
||||
MOTD: Running %MODPACK_NAME% version %env:MODPACK_VERSION%
|
||||
LEVEL: world-%date:yyyy-MM-dd%
|
||||
```
|
||||
|
||||
!!! warning
|
||||
|
||||
Placeholders are not supported when manually managing `server.properties`
|
||||
|
||||
## Properties
|
||||
|
||||
### Message of the Day
|
||||
|
||||
The message of the day, shown below each server entry in the client UI, can be changed with the `MOTD` environment variable, such as
|
||||
@@ -16,7 +47,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"
|
||||
|
||||
@@ -24,9 +55,13 @@ renders
|
||||
|
||||

|
||||
|
||||
To produce a multi-line MOTD, you will need to double escape the newline such as
|
||||
!!! note "Escape unicode"
|
||||
|
||||
-e MOTD="Line one\\nLine two"
|
||||
For Minecraft versions less than 1.20, unicode characters in `server.properties` will be escaped as `\uXXXX`, by default. That behavior can be altered by setting `SERVER_PROPERTIES_ESCAPE_UNICODE` to "true" or "false".
|
||||
|
||||
To produce a multi-line MOTD, embed a newline character as `\n` in the string, such as
|
||||
|
||||
-e MOTD="Line one\nLine two"
|
||||
|
||||
### Difficulty
|
||||
|
||||
@@ -40,6 +75,8 @@ Valid values are: `peaceful`, `easy`, `normal`, and `hard`, and an
|
||||
error message will be output in the logs if it's not one of these
|
||||
values.
|
||||
|
||||
Refer to [the Minecraft wiki](https://minecraft.wiki/w/Difficulty)
|
||||
|
||||
### Whitelist Players
|
||||
|
||||
!!! warning "For public servers"
|
||||
@@ -62,7 +99,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 +119,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 +316,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 +338,45 @@ 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.
|
||||
|
||||
To configure the `GENERATOR_SEETINGS` you need to add the appropriate `GeneratorOptions` JSON configuration. In the case of a superflat world, you may omit the `flat_world_options`.
|
||||
|
||||
The layers are applied from -64 and up and are added in the order of the list
|
||||
|
||||
Example for a superflat world:
|
||||
|
||||
- 1x bedrock
|
||||
- 2x stone
|
||||
- 15x sandstone
|
||||
- Desert biome
|
||||
|
||||
```yaml
|
||||
LEVEL_TYPE: FLAT
|
||||
GENERATOR_SETTINGS: >-4
|
||||
{
|
||||
"layers": [
|
||||
{
|
||||
"block": "minecraft:bedrock",
|
||||
"height": 1
|
||||
},
|
||||
{
|
||||
"block": "minecraft:stone",
|
||||
"height": 2
|
||||
},
|
||||
{
|
||||
"block": "minecraft:sandstone",
|
||||
"height": 15
|
||||
}
|
||||
],
|
||||
"biome": "minecraft:desert"
|
||||
}
|
||||
|
||||
|
||||
```
|
||||
For more details, check the [official wiki](https://minecraft.wiki/w/Java_Edition_level_format#generatorOptions_tag_format).
|
||||
|
||||
### Custom Server Resource Pack
|
||||
|
||||
@@ -353,10 +426,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 |
|
||||
|
||||
@@ -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 -p 8008`
|
||||
|
||||
```shell
|
||||
--build-arg MC_HELPER_VERSION=1.8.1-SNAPSHOT \
|
||||
--build-arg MC_HELPER_BASE_URL=http://host.docker.internal:8008
|
||||
|
||||
@@ -1,12 +1,22 @@
|
||||
# More Deployment Info
|
||||
|
||||
## Using Helm
|
||||
## On Kubernetes
|
||||
|
||||
### Using Helm
|
||||
|
||||
- itzg Helm Chart:
|
||||
- [GitHub repo](https://github.com/itzg/minecraft-server-charts)
|
||||
- [Helm Chart repo](https://itzg.github.io/minecraft-server-charts/)
|
||||
- [mcsh/server-deployment](https://github.com/mcserverhosting-net/charts)
|
||||
|
||||
### Using Shulker
|
||||
|
||||
[Shulker](https://github.com/jeremylvln/Shulker) is a Kubernetes operator for managing complex and dynamic Minecraft infrastructures, including game servers and proxies. It uses the docker-minecraft-server and docker-bungeecord images under-the-hood.
|
||||
|
||||
## On CloudFormation (AWS)
|
||||
|
||||
If you're looking for a simple way to deploy this to the Amazon Web Services Cloud, check out the [Minecraft Server Deployment (CloudFormation) repository](https://github.com/vatertime/minecraft-spot-pricing). This repository contains a CloudFormation template that will get you up and running in AWS in a matter of minutes. Optionally it uses Spot Pricing so the server is very cheap, and you can easily turn it off when not in use.
|
||||
|
||||
## Supporting Articles
|
||||
|
||||
Below are supporting articles for server deployment.
|
||||
@@ -16,7 +26,3 @@ Below are supporting articles for server deployment.
|
||||
https://dev.to/rela-v/zero-to-minecraft-server-with-docker-desktop-and-compose-500a
|
||||
|
||||
- This is a reference guide/tutorial on how to set up a vanilla Minecraft server using this project, including step-by-step instructions, and information on topics such as port-forwarding.
|
||||
|
||||
## Deploying onto AWS
|
||||
|
||||
If you're looking for a simple way to deploy this to the Amazon Web Services Cloud, check out the [Minecraft Server Deployment (CloudFormation) repository](https://github.com/vatertime/minecraft-spot-pricing). This repository contains a CloudFormation template that will get you up and running in AWS in a matter of minutes. Optionally it uses Spot Pricing so the server is very cheap, and you can easily turn it off when not in use.
|
||||
|
||||
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.3
|
||||
mkdocs-material == 9.4.8
|
||||
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.2.0
|
||||
@@ -56,13 +56,6 @@ For example:
|
||||
-e TYPE=AUTO_CURSEFORGE -e CF_SLUG=all-the-mods-8
|
||||
```
|
||||
|
||||
For mod, modpacks, and world files that are not allowed for automated download, the container path `/downloads` can be attached and matching files will be retrieved from there. The subdirectories `mods`, `modpacks`, and `worlds` will also be checked accordingly. To change the source location of downloaded files, set `CF_DOWNLOADS_REPO` to an existing container path. To disable this feature, set `CF_DOWNLOADS_REPO` to an empty string.
|
||||
|
||||
!!! note "Mods need download report"
|
||||
A file called `MODS_NEED_DOWNLOAD.txt` will be created in the `/data` directory that lists the mods that need to be manually downloaded and where to get them.
|
||||
|
||||
If you wish to use a unpublished modpack zip, set the container path to the file in `CF_MODPACK_ZIP`. Similarly, the container path to a modpack manifest JSON can be passed to `CF_MODPACK_MANIFEST`. In either case, **the modpack slug or page URL must still be provided**.
|
||||
|
||||
The latest file will be located and used by default, but if a specific version is desired you can use one of the following options. With any of these options **do not select a server file** -- they lack the required manifest and defeat the ability to consistently automate startup.
|
||||
|
||||
- Use `CF_PAGE_URL`, but include the full URL to a specific file
|
||||
@@ -75,17 +68,30 @@ The following shows where to get the URL to the specific file and also shows whe
|
||||
|
||||
The following examples all refer to version 1.0.7 of ATM8:
|
||||
|
||||
```
|
||||
-e CF_PAGE_URL=https://www.curseforge.com/minecraft/modpacks/all-the-mods-8/files/4248390
|
||||
```yaml
|
||||
CF_PAGE_URL: https://www.curseforge.com/minecraft/modpacks/all-the-mods-8/files/4248390
|
||||
```
|
||||
|
||||
```
|
||||
-e CF_SLUG=all-the-mods-8 -e CF_FILE_ID=4248390
|
||||
```yaml
|
||||
CF_SLUG: all-the-mods-8
|
||||
CF_FILE_ID: "4248390"
|
||||
```
|
||||
|
||||
```yaml
|
||||
CF_SLUG: all-the-mods-8
|
||||
CF_FILENAME_MATCHER: 1.0.7
|
||||
```
|
||||
-e CF_SLUG=all-the-mods-8 -e CF_FILENAME_MATCHER=1.0.7
|
||||
```
|
||||
|
||||
## Manual Downloads
|
||||
|
||||
For mod, modpacks, and world files that are not allowed for automated download, the container path `/downloads` can be attached and matching files will be retrieved from there. The subdirectories `mods`, `modpacks`, and `worlds` will also be checked accordingly. To change the source location of downloaded files, set `CF_DOWNLOADS_REPO` to an existing container path. To disable this feature, set `CF_DOWNLOADS_REPO` to an empty string.
|
||||
|
||||
!!! note "Mods need download report"
|
||||
A file called `MODS_NEED_DOWNLOAD.txt` will be created in the `/data` directory that lists the mods that need to be manually downloaded and where to get them.
|
||||
|
||||
## Unpublished Modpacks
|
||||
|
||||
If you wish to use a unpublished modpack zip, set the container path to the file in `CF_MODPACK_ZIP`. Similarly, the container path to a modpack manifest JSON can be passed to `CF_MODPACK_MANIFEST`. In either case, **the modpack slug or page URL must still be provided**.
|
||||
|
||||
## Exclude client mods
|
||||
|
||||
@@ -103,12 +109,44 @@ If needing to iterate on the options above, set `CF_FORCE_SYNCHRONIZE` to "true"
|
||||
!!! important
|
||||
These options are provided to empower you to get your server up and running quickly. Please help out by reporting an issue with the respective mod project. Ideally mod developers should [use correct registrations for one-sided client mods](https://docs.minecraftforge.net/en/latest/concepts/sides/#writing-one-sided-mods). Understandably, those code changes may be non-trivial, so mod authors can also add "Client" to the game versions when publishing.
|
||||
|
||||
## Extra options
|
||||
## Excluding Overrides Files
|
||||
|
||||
Modpack zip files typically include an `overrides` subdirectory that may contain config files, world data, and extra mod files. All of those files will be extracted into the `/data` path of the container. If any of those files, such as incompatible mods, need to be excluded from extraction, then the `CF_OVERRIDES_EXCLUSIONS` variable can be set with a comma or newline delimited list of ant-style paths ([see below](#ant-style-paths)) to exclude, relative to the overrides (or `/data`) directory.
|
||||
|
||||
### Ant-style paths
|
||||
|
||||
Ant-style paths can include the following globbing/wildcard symbols:
|
||||
|
||||
| Symbol | Behavior |
|
||||
|--------|---------------------------------------------------------|
|
||||
| `*` | Matches zero, one, or many characters except a slash |
|
||||
| `**` | Matches zero, one, or many characters including slashes |
|
||||
| `?` | Matches one character |
|
||||
|
||||
!!! example
|
||||
|
||||
The following compose `environment` entries show how to exclude Iris and Sodium mods from the overrides
|
||||
|
||||
```yaml
|
||||
CF_OVERRIDES_EXCLUSIONS: mods/iris*.jar,mods/sodium*.jar
|
||||
```
|
||||
|
||||
or using newline delimiter, which improves maintainability
|
||||
|
||||
```yaml
|
||||
CF_OVERRIDES_EXCLUSIONS: |
|
||||
mods/iris*.jar
|
||||
mods/sodium*.jar
|
||||
```
|
||||
|
||||
## World/Level Data
|
||||
|
||||
Some modpacks come with world/save data via a worlds file and/or the overrides provided with the modpack. Either approach can be selected to set the `LEVEL` to the resulting saves directory by setting `CF_SET_LEVEL_FROM` to either:
|
||||
- `WORLD_FILE`
|
||||
- `OVERRIDES`
|
||||
|
||||
## Extra options
|
||||
|
||||
Other configuration available:
|
||||
- `CF_PARALLEL_DOWNLOADS` (default is 4): specify how many parallel mod downloads to perform
|
||||
- `CF_OVERRIDES_SKIP_EXISTING` (default is false): if set, files in the overrides that already exist in the data directory are skipped. **NOTE** world data is always skipped, if present.
|
||||
|
||||
@@ -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 |
|
||||
| java21-alpine | 21 | Alpine | Hotspot | amd64 |
|
||||
| java21 | 21 | 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, java20, java20-alpine
|
||||
|
||||
@@ -19,6 +19,7 @@ spec:
|
||||
containers:
|
||||
- name: mc
|
||||
image: itzg/minecraft-server
|
||||
imagePullPolicy: Always
|
||||
env:
|
||||
- name: EULA
|
||||
value: "TRUE"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
"defensive-measures",
|
||||
"ding",
|
||||
"dynamiclights-reforged",
|
||||
"embeddium",
|
||||
"enchantment-descriptions",
|
||||
"entity-texture-features-fabric",
|
||||
"entityculling",
|
||||
|
||||
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"}
|
||||
}
|
||||
@@ -113,7 +113,8 @@ fi
|
||||
|
||||
cd /data || exit 1
|
||||
|
||||
export ORIGINAL_TYPE=${TYPE^^}
|
||||
export DECLARED_TYPE=${TYPE^^}
|
||||
export DECLARED_VERSION="$VERSION"
|
||||
|
||||
if isTrue "${ENABLE_AUTOPAUSE}"; then
|
||||
"${SCRIPTS:-/}start-autopause"
|
||||
@@ -185,6 +186,10 @@ case "${TYPE^^}" in
|
||||
exec "${SCRIPTS:-/}start-deployForge" "$@"
|
||||
;;
|
||||
|
||||
NEOFORGE|NEOFORGED)
|
||||
exec "${SCRIPTS:-/}start-deployNeoForge" "$@"
|
||||
;;
|
||||
|
||||
FABRIC)
|
||||
exec "${SCRIPTS:-/}start-deployFabric" "$@"
|
||||
;;
|
||||
|
||||
@@ -15,6 +15,7 @@ set -eu
|
||||
: "${CF_FORCE_INCLUDE_MODS:=}"
|
||||
: "${CF_SET_LEVEL_FROM:=}" # --set-level-from
|
||||
: "${CF_OVERRIDES_SKIP_EXISTING:=false}" # --overrides-skip-existing
|
||||
: "${CF_OVERRIDES_EXCLUSIONS:=}" # --overrides-exclusions
|
||||
: "${CF_DOWNLOADS_REPO=$([ -d /downloads ] && echo '/downloads' || echo '')}"
|
||||
: "${CF_MODPACK_MANIFEST:=}"
|
||||
|
||||
@@ -43,6 +44,9 @@ fi
|
||||
if [[ ${CF_SET_LEVEL_FROM} ]]; then
|
||||
args+=(--set-level-from="$CF_SET_LEVEL_FROM")
|
||||
fi
|
||||
if [[ ${CF_OVERRIDES_EXCLUSIONS} ]]; then
|
||||
args+=(--overrides-exclusions="$CF_OVERRIDES_EXCLUSIONS")
|
||||
fi
|
||||
args+=(
|
||||
--force-synchronize="$CF_FORCE_SYNCHRONIZE"
|
||||
--overrides-skip-existing="$CF_OVERRIDES_SKIP_EXISTING"
|
||||
|
||||
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,16 +229,17 @@ 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
|
||||
loader=forge
|
||||
elif isFamily FABRIC; then
|
||||
loader=fabric
|
||||
else
|
||||
# we're left with Bukkit/Spigot down-lines where plugins seem to be
|
||||
loader="${TYPE,,}"
|
||||
fi
|
||||
mc-image-helper modrinth \
|
||||
@@ -246,7 +247,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
|
||||
}
|
||||
|
||||
@@ -5,6 +5,10 @@ IFS=$'\n\t'
|
||||
: "${EXISTING_OPS_FILE:=SKIP}"
|
||||
: "${EXISTING_WHITELIST_FILE:=SKIP}"
|
||||
|
||||
# shellcheck source=start-utils
|
||||
. "${SCRIPTS:-/}start-utils"
|
||||
isDebugging && set -x
|
||||
|
||||
if [[ -v APPEND_OPS ]] && isTrue "${APPEND_OPS}"; then
|
||||
EXISTING_OPS_FILE=MERGE
|
||||
elif [[ -v OVERRIDE_OPS ]] && isTrue "${OVERRIDE_OPS}"; then
|
||||
@@ -17,14 +21,7 @@ elif [[ -v OVERRIDE_WHITELIST ]] && isTrue "${OVERRIDE_WHITELIST}"; then
|
||||
EXISTING_WHITELIST_FILE=SYNCHRONIZE
|
||||
fi
|
||||
|
||||
# shellcheck source=start-utils
|
||||
. "${SCRIPTS:-/}start-utils"
|
||||
isDebugging && set -x
|
||||
|
||||
sharedArgs=(--version="$VERSION")
|
||||
if isFalse "${ONLINE_MODE:-true}"; then
|
||||
sharedArgs+=( --offline )
|
||||
fi
|
||||
|
||||
if [[ -v OPS_FILE ]]; then
|
||||
existing="$EXISTING_OPS_FILE"
|
||||
|
||||
@@ -8,152 +8,29 @@
|
||||
: "${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
|
||||
if [[ ${TYPE^^} = LIMBO ]]; then
|
||||
if [[ $MOTD ]] && ! [[ $MOTD =~ ^{ ]]; then
|
||||
# shellcheck disable=SC2089
|
||||
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"
|
||||
fi
|
||||
|
||||
if [ -n "$MODE" ]; then
|
||||
if [[ -v MODE ]]; then
|
||||
log "Setting mode"
|
||||
case ${MODE,,} in
|
||||
su*|0)
|
||||
@@ -189,8 +66,69 @@ 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
|
||||
if [[ -v SERVER_PROPERTIES_ESCAPE_UNICODE ]]; then
|
||||
if isTrue "$SERVER_PROPERTIES_ESCAPE_UNICODE"; then
|
||||
setPropertiesArgs+=(--escape-unicode)
|
||||
fi
|
||||
elif versionLessThan '1.20'; then
|
||||
setPropertiesArgs+=(--escape-unicode)
|
||||
fi
|
||||
|
||||
handleDebugMode
|
||||
if ! mc-image-helper set-properties "${setPropertiesArgs[@]}" "$SERVER_PROPERTIES"; then
|
||||
log "ERROR: failed to update server.properties"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
# Deploy server.properties file
|
||||
@@ -207,10 +145,10 @@ if ! isTrue "${SKIP_SERVER_PROPERTIES}"; then
|
||||
# which shows up in the server listing in the client
|
||||
if ! [ -v MOTD ]; then
|
||||
# snapshot is the odd case where we have to look at version to identify that label
|
||||
if [[ ${ORIGINAL_TYPE} == "VANILLA" && ${VERSION} == "SNAPSHOT" ]]; then
|
||||
if [[ ${DECLARED_TYPE} == "VANILLA" && ${VERSION} == "SNAPSHOT" ]]; then
|
||||
label=SNAPSHOT
|
||||
else
|
||||
label=${ORIGINAL_TYPE}
|
||||
label=${DECLARED_TYPE}
|
||||
fi
|
||||
|
||||
# Convert label to title-case
|
||||
|
||||
0
tests/setuponlytests/cf_files/require.sh
Normal file → Executable file
0
tests/setuponlytests/cf_files/require.sh
Normal file → Executable file
0
tests/setuponlytests/conflicting_world_for_spigot_server/require.sh
Normal file → Executable file
0
tests/setuponlytests/conflicting_world_for_spigot_server/require.sh
Normal file → Executable file
0
tests/setuponlytests/conflicting_world_for_vanilla_server/require.sh
Normal file → Executable file
0
tests/setuponlytests/conflicting_world_for_vanilla_server/require.sh
Normal file → Executable file
0
tests/setuponlytests/curseforge/require.sh
Normal file → Executable file
0
tests/setuponlytests/curseforge/require.sh
Normal file → Executable file
0
tests/setuponlytests/icon-file-exact/require.sh
Normal file → Executable file
0
tests/setuponlytests/icon-file-exact/require.sh
Normal file → Executable file
0
tests/setuponlytests/icon-gif-multiframe/require.sh
Normal file → Executable file
0
tests/setuponlytests/icon-gif-multiframe/require.sh
Normal file → Executable file
0
tests/setuponlytests/icon-png-atscale/require.sh
Normal file → Executable file
0
tests/setuponlytests/icon-png-atscale/require.sh
Normal file → Executable file
0
tests/setuponlytests/pufferfish/require.sh
Normal file → Executable file
0
tests/setuponlytests/pufferfish/require.sh
Normal file → Executable file
0
tests/setuponlytests/quilt/require.sh
Normal file → Executable file
0
tests/setuponlytests/quilt/require.sh
Normal file → Executable file
1
tests/setuponlytests/spiget/require.sh
Executable file
1
tests/setuponlytests/spiget/require.sh
Executable file
@@ -0,0 +1 @@
|
||||
[[ $EXTENDED_TESTS ]] || exit 1
|
||||
0
tests/setuponlytests/spigot_world_for_vanilla_server/require.sh
Normal file → Executable file
0
tests/setuponlytests/spigot_world_for_vanilla_server/require.sh
Normal file → Executable file
0
tests/setuponlytests/spongevanilla_version_compare/require.sh
Normal file → Executable file
0
tests/setuponlytests/spongevanilla_version_compare/require.sh
Normal file → Executable file
0
tests/setuponlytests/test.sh
Normal file → Executable file
0
tests/setuponlytests/test.sh
Normal file → Executable file
0
tests/setuponlytests/vanilla_world_for_spigot_server/require.sh
Normal file → Executable file
0
tests/setuponlytests/vanilla_world_for_spigot_server/require.sh
Normal file → Executable file
0
tests/setuponlytests/vanillatweaks_sharecode/require.sh
Normal file → Executable file
0
tests/setuponlytests/vanillatweaks_sharecode/require.sh
Normal file → Executable file
0
tests/setuponlytests/world_from_tar/require.sh
Normal file → Executable file
0
tests/setuponlytests/world_from_tar/require.sh
Normal file → Executable file
0
tests/setuponlytests/world_from_tarbz2/require.sh
Normal file → Executable file
0
tests/setuponlytests/world_from_tarbz2/require.sh
Normal file → Executable file
0
tests/setuponlytests/world_from_tarzst/require.sh
Normal file → Executable file
0
tests/setuponlytests/world_from_tarzst/require.sh
Normal file → Executable file
Reference in New Issue
Block a user