diff --git a/README.md b/README.md index 5206ecaf..b63afa3c 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ where, in this case, the standard server port 25565, will be exposed on your hos > Be sure to always include `-e EULA=TRUE` in your commands and container definitions, as Mojang/Microsoft requires EULA acceptance. -By default, the container will download the latest version of the "vanilla" [Minecraft: Java Edition server](https://www.minecraft.net/en-us/download/server) provided by Mojang. The [`VERSION`](#versions) and the [`TYPE`](#server-types) can be configured to create many variations of desired Minecraft server. +By default, the container will download the latest version of the "vanilla" [Minecraft: Java Edition server](https://www.minecraft.net/en-us/download/server) provided by Mojang. The [`VERSION`](#versions) and the [`TYPE`](#server-types) can be configured to create many variations of desired Minecraft server. **TABLE OF CONTENTS** @@ -175,7 +175,7 @@ docker exec mc rcon-cli stop _The `-i` is not needed in this case._ -If rcon is disabled you can send commands by passing them as arguments to the packaged `mc-send-to-console` script. For example, a player can be op'ed in the container `mc` with: +If rcon is disabled you can send commands by passing them as arguments to the packaged `mc-send-to-console` script. For example, a player can be op'ed in the container `mc` with: ```shell docker exec mc mc-send-to-console op player @@ -206,7 +206,7 @@ Everything the container manages is located under the **container's** `/data` pa ![](docs/level-vs-world.drawio.png) -> NOTE: The container path `/data` is pre-declared as a volume, so if you do nothing then it will be allocated as an anonymous volume. As such, it is subject to removal when the container is removed. +> NOTE: The container path `/data` is pre-declared as a volume, so if you do nothing then it will be allocated as an anonymous volume. As such, it is subject to removal when the container is removed. ### Attaching data directory to host filesystem @@ -300,7 +300,7 @@ For example, to use Java version 8 on any supported architecture: docker run --name mc itzg/minecraft-server:java8-multiarch > Keep in mind that some versions of Minecraft server, such as Forge before 1.17, can't work on the newest versions of Java. Instead, one of the Java 8 images should be used. Also, FORGE doesn't support openj9 JVM implementation. -> +> > Some versions of vanilla Minecraft, such as 1.10, also do not run correctly with Java 17. If in doubt, use `java8-multiarch` for any version less than 1.17. ### Deprecated Image Tags @@ -559,12 +559,12 @@ By default, the latest build will be used; however, a specific build number can ### Running a SpongeVanilla server Enable SpongeVanilla server mode by adding a `-e TYPE=SPONGEVANILLA` to your command-line. - + By default the container will run the latest `STABLE` version. If you want to run a specific version, you can add `-e SPONGEVERSION=1.11.2-6.1.0-BETA-19` to your command-line. Beware that current [Sponge](https://www.spongepowered.org) `STABLE` versions for Minecraft 1.12 require using [the Java 8 tag](#running-minecraft-server-on-different-java-version): - + docker run -d -v /path/on/host:/data -e TYPE=SPONGEVANILLA \ -p 25565:25565 -e EULA=TRUE --name mc itzg/minecraft-server:java8-multiarch @@ -588,7 +588,7 @@ Configuration options with defaults: - `LIMBO_SCHEMA_FILENAME`=default.schem - `LEVEL`="Default;${LIMBO_SCHEMA_FILENAME}" -> 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.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. ### Running a Crucible server @@ -760,7 +760,7 @@ Parameters to use the ForgeAPI: * `REMOVE_OLD_DATAPACKS_DEPTH` - Default is 1 * `REMOVE_OLD_DATAPACKS_INCLUDE` - Default is *.jar -Example of expected forge api project ids, releases, and key: +Example of expected forge api project ids, releases, and key: ```yaml MODS_FORGEAPI_PROJECTIDS: 306612,256717 @@ -787,11 +787,11 @@ Example of expected ForgeAPI file format: **Note**: name is currently unused, bu ### Generic pack file -To install all of the server content (jars, mods, plugins, configs, etc) from a zip file, such as a CurseForge modpack that is missing a server start script, then set `GENERIC_PACK` to the container path of the zip file. That, combined with `TYPE`, allows for custom content along with container managed server download and install. +To install all of the server content (jars, mods, plugins, configs, etc) from a zip file, such as a CurseForge modpack that is missing a server start script, then set `GENERIC_PACK` to the container path of the zip file. That, combined with `TYPE`, allows for custom content along with container managed server download and install. If multiple generic packs need to be applied together, set `GENERIC_PACKS` instead, with a comma separated list of zip file paths and/or URLs to zip files. -### Mod/Plugin URL Listing File +### Mod/Plugin URL Listing File As an alternative to `MODS`, the variable `MODS_FILE` can be set with the path to a text file listing a mod/plugin URL on each line. For example, the following @@ -855,11 +855,11 @@ The following diagram shows how this option can be used in a compose deployment The world will only be downloaded or copied if it doesn't exist already. Set `FORCE_WORLD_COPY=TRUE` to force overwrite the world on every server start. ### Datapacks -Datapacks can be installed in a similar manner to mods/plugins. There are many environment variables which function in the same way they do for [mods](#working-with-mods-and-plugins): +Datapacks can be installed in a similar manner to mods/plugins. There are many environment variables which function in the same way they do for [mods](#working-with-mods-and-plugins): * `DATAPACKS` -* `DATAPACKS_FILE` -* `REMOVE_OLD_DATAPACKS` -* `REMOVE_OLD_DATAPACKS_DEPTH` +* `DATAPACKS_FILE` +* `REMOVE_OLD_DATAPACKS` +* `REMOVE_OLD_DATAPACKS_DEPTH` * `REMOVE_OLD_DATAPACKS_INCLUDE` * `REMOVE_OLD_DATAPACKS_EXCLUDE` Datapacks will be placed in `/data/$LEVEL/datapacks` @@ -877,7 +877,7 @@ Accepted Parameters: - `REMOVE_OLD_VANILLATWEAKS_INCLUDE` - `REMOVE_OLD_VANILLATWEAKS_EXCLUDE` -Example of expected Vanillatweaks sharecode: +Example of expected Vanillatweaks sharecode: ```yaml VANILLATWEAKS_SHARECODE: MGr52E @@ -899,12 +899,6 @@ Example of expected Vanillatweaks file format: "coordinates hud" ], "items": ["armored elytra"] - }, - "craftingtweaks": { - "quality of life": [ - "rotten flesh to leather", - "back to blocks" - ] } } ``` @@ -923,7 +917,7 @@ This will reset any manual configuration of the `server.properties` file, so if In the opposite case, you can skip the startup script's creation of `server.properties`, by setting `SKIP_SERVER_PROPERTIES` to "true". -> 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. +> 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. ### Message of the Day @@ -960,9 +954,9 @@ values. > **NOTE** it is very important to set this with servers exposed to the internet where you want only limited players to join. To whitelist players for your Minecraft server, you can: -- Provide the url or path to a whitelist file via `WHITELIST_FILE` environment variable +- Provide the url or path to a whitelist file via `WHITELIST_FILE` environment variable `docker run -d -e WHITELIST_FILE=/extra/whitelist.json ...` -- Provide a list of usernames and/or UUIDs separated by commas via the `WHITELIST` environment variable +- Provide a list of usernames and/or UUIDs separated by commas via the `WHITELIST` environment variable `docker run -d -e WHITELIST=user1,uuid2 ...` To enforce the whitelist and auto-kick players not included in whitelist configuration, set `ENFORCE_WHITELIST=TRUE`. **By default** any user can join your Minecraft server if it's publicly accessible, regardless of your whitelist configuration. @@ -980,9 +974,9 @@ If either `WHITELIST_FILE` or `WHITELIST` is provided, the server property `whit ### Op/Administrator Players Similar to the whitelist, to add users as operators (aka adminstrators) to your Minecraft server, you can: -- Provide te url or path to an ops file via `OPS_FILE` environment variable +- Provide te url or path to an ops file via `OPS_FILE` environment variable `docker run -d -e OPS_FILE=https://config.example.com/extra/ops.json ...` -- Provide a list of usernames and/or UUIDs separated by commas via the `OPS` environment variable +- Provide a list of usernames and/or UUIDs separated by commas via the `OPS` environment variable `docker run -d -e OPS=user1,uuid2 ...` If ops configuration already exists, `OPS_FILE` will not be retrieved and any usernames in `OPS` are **added** to the ops configuration. You can enforce regeneration of the ops configuration on each server startup by setting `OVERRIDE_OPS` to "true". This will delete the ops file before processing ops configuration. @@ -1262,7 +1256,7 @@ in your config files after the container starts. For those cases there is the option to replace defined variables inside your configs with environment variables defined at container runtime. -When the environment variable `REPLACE_ENV_IN_PLACE` is set to `true` (the default), the startup script will go through all files inside the container's `/data` path and replace variables that match the container's environment variables. Variables can instead (or in addition to) be replaced in files sync'ed from `/plugins`, `/mods`, and `/config` by setting `REPLACE_ENV_DURING_SYNC` to `true` (defaults to `false`). +When the environment variable `REPLACE_ENV_IN_PLACE` is set to `true` (the default), the startup script will go through all files inside the container's `/data` path and replace variables that match the container's environment variables. Variables can instead (or in addition to) be replaced in files sync'ed from `/plugins`, `/mods`, and `/config` by setting `REPLACE_ENV_DURING_SYNC` to `true` (defaults to `false`). Variables that you want to replace need to be declared inside curly brackets and prefixed with a dollar sign, such as `${CFG_YOUR_VARIABLE}`, which is same as many scripting languages. @@ -1440,10 +1434,10 @@ If you would like to `docker attach` to the Minecraft server console with color > **NOTES** > -> This feature doesn't work via rcon, so you will need to `docker attach` to the container. Use the sequence Ctrl-P, Ctrl-Q to detach. -> +> This feature doesn't work via rcon, so you will need to `docker attach` to the container. Use the sequence Ctrl-P, Ctrl-Q to detach. +> > This will bypass graceful server shutdown handling when using `docker stop`, so be sure the server console's `stop` command. -> +> > Make to enable stdin and tty with `-it` when using `docker run` or `stdin_open: true` and `tty: true` when using docker compose. > > This feature is incompatible with Autopause and cannot be set when `ENABLE_AUTOPAUSE=true`. @@ -1530,14 +1524,14 @@ When the container is signalled to stop, the Minecraft process wrapper will atte ### Setup only -If you are using a host-attached data directory, then you can have the image setup the Minecraft server files and stop prior to launching the server process by setting `SETUP_ONLY` to `true`. - +If you are using a host-attached data directory, then you can have the image setup the Minecraft server files and stop prior to launching the server process by setting `SETUP_ONLY` to `true`. + ### Enable Flare Flags - + To enable the JVM flags required to fully support the [Flare profiling suite](https://blog.airplane.gg/flare), set the following variable: - + -e USE_FLARE_FLAGS=true - + Flare is built-in to Airplane/Pufferfish/Purpur, and is available in [plugin form](https://github.com/TECHNOVE/FlarePlugin) for other server types. ## Autopause @@ -1615,5 +1609,5 @@ To run this image on a RaspberryPi 3 B+, 4, or newer, use any of the image tags > If experiencing issues such as "sleep: cannot read realtime clock: Operation not permitted", ensure `libseccomp` is up to date on your host. In some cases adding `:Z` flag to the `/data` mount may be needed, [but use cautiously](https://docs.docker.com/storage/bind-mounts/#configure-the-selinux-label). ## Contributing - + See [Development](DEVELOPMENT.md) and [Building](BUILDING.md). diff --git a/scripts/start-setupVanillaTweaks b/scripts/start-setupVanillaTweaks index 54d2044f..4da67423 100644 --- a/scripts/start-setupVanillaTweaks +++ b/scripts/start-setupVanillaTweaks @@ -33,7 +33,7 @@ if [[ "$VANILLATWEAKS_SHARECODE" ]]; then fi fi -# Use vanillatweaks file to specify VT and datapacks and crafting tweaks +# Use vanillatweaks file to specify VT and datapacks if [[ "$VANILLATWEAKS_FILE" ]]; then if [ ! -f "$VANILLATWEAKS_FILE" ]; then log "ERROR: given VANILLATWEAKS_FILE file does not exist" @@ -41,10 +41,8 @@ if [[ "$VANILLATWEAKS_FILE" ]]; then fi PACKS=$(jq -jc '.packs' $VANILLATWEAKS_FILE) - CRAFTING_TWEAKS=$(jq -jc '.craftingtweaks' $VANILLATWEAKS_FILE) - - if [ ! "$PACKS" ] && [ ! "$CRAFTING_TWEAKS" ]; then - log "ERROR: unable to retrieve packs or crafting tweaks from $VANILLATWEAKS_FILE" + if [ ! "$PACKS" ]; then + log "ERROR: unable to retrieve packs from $VANILLATWEAKS_FILE" exit 2 fi @@ -60,19 +58,19 @@ if [[ "$PACKS" ]] && [[ "$VT_VERSION" ]]; then VT_ZIPDATA_URL=https://vanillatweaks.net/assets/server/zipdatapacks.php DOWNLOAD_URL=$(curl -X POST -F "packs=${PACKS}" -F "version=${VT_VERSION}" $VT_ZIPDATA_URL | jq -r '.link') if [ ! "$DOWNLOAD_URL" ]; then - log "ERROR: unable to retrieve datapack DOWNLOAD_URL from vanillatweaks.net!" + log "ERROR: unable to retrieve DOWNLOAD_URL from vanillatweaks.net!" exit 2 fi TEMPZIP=/tmp/vanillatweaks.zip - if ! get -o $TEMPZIP "https://vanillatweaks.net${DOWNLOAD_URL}"; then - log "ERROR: failed to download datapacks from ${DOWNLOAD_URL}" + if ! get -o $TEMPZIP "https://vanillatweaks.net${DOWNLOAD_URL}"; then + log "ERROR: failed to download from ${DOWNLOAD_URL}" exit 2 fi mkdir -p "$out_dir" if ! unzip -o -d "$out_dir" $TEMPZIP; then - log "ERROR: failed to unzip the datapacks ${PACKS} from ${$TEMPZIP}" + log "ERROR: failed to unzip the ${PACKS} from ${$TEMPZIP}" fi # clean up files time! @@ -83,20 +81,4 @@ if [[ "$PACKS" ]] && [[ "$VT_VERSION" ]]; then fi fi -# Download and move crafting tweaks -if [[ "$CRAFTING_TWEAKS" ]] && [[ "$VT_VERSION" ]]; then - VT_ZIPDATA_URL=https://vanillatweaks.net/assets/server/zipcraftingtweaks.php - DOWNLOAD_URL=$(curl -X POST -F "packs=${CRAFTING_TWEAKS}" -F "version=${VT_VERSION}" $VT_ZIPDATA_URL | jq -r '.link') - if [ ! "$DOWNLOAD_URL" ]; then - log "ERROR: unable to retrieve crafting tweak DOWNLOAD_URL from vanillatweaks.net!" - exit 2 - fi - - mkdir -p "$out_dir" - if ! get -o $out_dir/crafting_tweaks.zip "https://vanillatweaks.net${DOWNLOAD_URL}"; then - log "ERROR: failed to download crafting tweaks from ${DOWNLOAD_URL}" - exit 2 - fi -fi - exec "${SCRIPTS:-/}start-setupDatapack" "$@"