Compare commits

...

43 Commits

Author SHA1 Message Date
Geoff Bourne
6e1ba3667c Auto-merging via docker-versions-create 2021-05-19 20:18:57 -05:00
itzg
3084a2f409 Auto update markdown TOC 2021-05-20 01:17:12 +00:00
Stealthii
f473cfc6f2 Add support for Canyon server for b1.7.3 (#879) 2021-05-19 20:16:57 -05:00
Geoff Bourne
0c2f8b903b Auto-merging via docker-versions-create 2021-05-15 12:40:56 -05:00
Geoff Bourne
cc204c297f Fixed REMOVE_OLD_MODS with SPIGET_RESOURCES
#834
2021-05-15 12:39:48 -05:00
dependabot[bot]
e5bee8e79b build(deps): bump docker/build-push-action from 2 to 2.4.0 (#866)
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 2 to 2.4.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v2...v2.4.0)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-05-14 17:18:58 -05:00
Geoff Bourne
1b13ddcf32 Added start-server.sh as detected CurseForge entry script 2021-05-14 17:17:07 -05:00
itzg
de707049d4 Auto update markdown TOC 2021-05-14 13:06:27 +00:00
Giles Knap
e95ae2dbbb fix helm chart links (#873) 2021-05-14 08:06:08 -05:00
itzg
4606c27cdc Auto update markdown TOC 2021-05-14 03:52:02 +00:00
W4ff1e
ba88bf72ce Updated examples to version 3.8 (#872) 2021-05-13 22:51:47 -05:00
dependabot[bot]
75967cec02 build(deps): bump actions/cache from 2 to 2.1.5 (#870) 2021-05-14 01:47:19 +00:00
dependabot[bot]
0a35f661bd build(deps): bump actions/checkout from 2.2.0 to 2.3.4 (#869) 2021-05-14 01:45:43 +00:00
dependabot[bot]
f141806fb4 build(deps): bump stefanzweifel/git-auto-commit-action from 4 to 4.11.0 (#868) 2021-05-14 01:39:04 +00:00
dependabot[bot]
d80f40075c build(deps): bump docker/setup-qemu-action from 1 to 1.1.0 (#867) 2021-05-13 02:10:17 +00:00
itzg
44dbe80096 Auto update markdown TOC 2021-05-13 01:59:18 +00:00
Geoff Bourne
c7546ef08a docs: Clarified the default type and version of Minecraft server
#863
2021-05-12 20:59:02 -05:00
itzg
6fe5bb4aa8 Auto update markdown TOC 2021-05-13 01:41:49 +00:00
Geoff Bourne
589a9aa3db Added support for directories in MODS
#871
2021-05-12 20:41:28 -05:00
itzg
34ae93f379 Auto update markdown TOC 2021-05-12 16:29:05 +00:00
Geoff Bourne
bd57d291c1 ci: Preparing for java16 image tag
#864
2021-05-12 11:28:44 -05:00
Geoff Bourne
b9335d9cd6 Auto-merging via docker-versions-create 2021-05-06 20:12:25 -05:00
itzg
bccdc7f5e8 Auto update markdown TOC 2021-05-06 21:27:45 +00:00
picapi
3854526389 Support local paths for modpacks / mods (#858) 2021-05-06 16:27:30 -05:00
Geoff Bourne
74072847ca docs: Added world-copy-compose-project diagram 2021-05-02 18:31:08 -05:00
Geoff Bourne
c5857bfc0b ci: ignore md files for regular build trigger 2021-05-01 17:39:35 -05:00
Geoff Bourne
8b380894f9 ci: gitignore the gh-md-toc script 2021-05-01 17:36:53 -05:00
itzg
b090737162 Auto update markdown TOC 2021-05-01 22:34:32 +00:00
Geoff Bourne
476abc9dad docs: Added table of contents
#845
2021-05-01 17:34:12 -05:00
Geoff Bourne
0d92092b90 Auto-merging via docker-versions-create 2021-04-30 14:27:40 -05:00
Tyler Heucke
9ecb617d2e allow mods with "forge" in name for cf modpacks (#853) 2021-04-30 14:26:05 -05:00
Geoff Bourne
e653a41b3f Auto-merging via docker-versions-create 2021-04-30 11:11:19 -05:00
Tyler Heucke
4be4fc4808 Corrected locating of CF modpack server jar when not using server script (#852) 2021-04-30 11:05:56 -05:00
Geoff Bourne
82e63c54c4 Auto-merging via docker-versions-create 2021-04-28 16:50:55 -05:00
Krzysztof Zdulski
3261fbd7e9 Support FTP servers for file downloads (#850) 2021-04-28 16:44:39 -05:00
Geoff Bourne
7164d2b885 Fixed REMOVE_OLD_MODS when directories not present
#851
2021-04-28 16:29:47 -05:00
Geoff Bourne
f9c573f598 Auto-merging via docker-versions-create 2021-04-26 08:20:41 -05:00
Geoff Bourne
cfb2739cd9 Normalized on TYPE=CURSEFORGE for server properties logic, etc
#843
2021-04-26 08:19:50 -05:00
Geoff Bourne
b1bb3f38f3 Allowed combining of REMOVE_OLD_MODS and SPIGET_RESOURCES with /plugins mount
#834
2021-04-24 14:06:31 -05:00
Geoff Bourne
bf8b9cf20d Auto-merging via docker-versions-create 2021-04-24 13:42:07 -05:00
Geoff Bourne
65b3997e72 Fixed locating of CF modpack server jar when not using server script
#842
2021-04-24 13:41:18 -05:00
Geoff Bourne
0dd5a412d9 Auto-merging via docker-versions-create 2021-04-23 21:02:46 -05:00
Geoff Bourne
5f48a4e5e5 Update FTB/CF handling of SERVER_PROPERTIES to allow spaces
#843
2021-04-23 21:01:50 -05:00
27 changed files with 380 additions and 181 deletions

7
.github/dependabot.yml vendored Normal file
View File

@@ -0,0 +1,7 @@
version: 2
updates:
# Maintain dependencies for GitHub Actions
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"

View File

@@ -3,22 +3,24 @@ on:
push: push:
branches: branches:
- multiarch - multiarch
- java8-multiarch
- multiarch-latest - multiarch-latest
- java15 - java*
- java15-openj9
- test/multiarch/* - test/multiarch/*
tags: tags:
- "[0-9]+.[0-9]+.[0-9]+-multiarch" - "[0-9]+.[0-9]+.[0-9]+-multiarch"
- "[0-9]+.[0-9]+.[0-9]+-multiarch-latest" - "[0-9]+.[0-9]+.[0-9]+-multiarch-latest"
- "[0-9]+.[0-9]+.[0-9]+-java15" - "[0-9]+.[0-9]+.[0-9]+-java*"
paths-ignore:
- "*.md"
- "docs/**"
- "examples/**"
jobs: jobs:
docker-buildx: docker-buildx:
runs-on: ubuntu-20.04 runs-on: ubuntu-20.04
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v2.2.0 uses: actions/checkout@v2.3.4
- name: Prepare - name: Prepare
id: prep id: prep
@@ -44,7 +46,7 @@ jobs:
uses: docker/setup-buildx-action@v1 uses: docker/setup-buildx-action@v1
- name: Cache Docker layers - name: Cache Docker layers
uses: actions/cache@v2 uses: actions/cache@v2.1.5
with: with:
path: /tmp/.buildx-cache path: /tmp/.buildx-cache
key: ${{ runner.os }}-buildx-${{ steps.prep.outputs.cache_version }}-${{ github.sha }} key: ${{ runner.os }}-buildx-${{ steps.prep.outputs.cache_version }}-${{ github.sha }}
@@ -52,7 +54,7 @@ jobs:
${{ runner.os }}-buildx-${{ steps.prep.outputs.cache_version }}- ${{ runner.os }}-buildx-${{ steps.prep.outputs.cache_version }}-
- name: Set up QEMU - name: Set up QEMU
uses: docker/setup-qemu-action@v1 uses: docker/setup-qemu-action@v1.1.0
- name: Login to DockerHub - name: Login to DockerHub
uses: docker/login-action@v1 uses: docker/login-action@v1
@@ -62,7 +64,7 @@ jobs:
- name: Build and push - name: Build and push
id: docker_build id: docker_build
uses: docker/build-push-action@v2 uses: docker/build-push-action@v2.4.0
with: with:
context: . context: .
file: ./Dockerfile file: ./Dockerfile

20
.github/workflows/generate-toc.yml vendored Normal file
View File

@@ -0,0 +1,20 @@
name: Generate README table of contents
on:
push:
branches:
- master
paths:
- README.md
jobs:
generate:
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- uses: actions/checkout@v2.3.4
- run: |
curl https://raw.githubusercontent.com/ekalinin/github-markdown-toc/master/gh-md-toc -o gh-md-toc
chmod a+x gh-md-toc
./gh-md-toc --insert --no-backup README.md
- uses: stefanzweifel/git-auto-commit-action@v4.11.0
with:
commit_message: Auto update markdown TOC

View File

@@ -22,7 +22,7 @@ jobs:
runs-on: ubuntu-20.04 runs-on: ubuntu-20.04
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2.3.4
- name: Run tests - name: Run tests
run: | run: |
@@ -33,7 +33,7 @@ jobs:
runs-on: ubuntu-20.04 runs-on: ubuntu-20.04
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2.3.4
- name: Prepare - name: Prepare
id: prep id: prep
@@ -59,7 +59,7 @@ jobs:
uses: docker/setup-buildx-action@v1 uses: docker/setup-buildx-action@v1
- name: Cache Docker layers - name: Cache Docker layers
uses: actions/cache@v2 uses: actions/cache@v2.1.5
with: with:
path: /tmp/.buildx-cache path: /tmp/.buildx-cache
key: ${{ runner.os }}-buildx-${{ steps.prep.outputs.cache_version }}-${{ github.sha }} key: ${{ runner.os }}-buildx-${{ steps.prep.outputs.cache_version }}-${{ github.sha }}
@@ -75,7 +75,7 @@ jobs:
- name: Build and push - name: Build and push
id: docker_build id: docker_build
uses: docker/build-push-action@v2 uses: docker/build-push-action@v2.4.0
with: with:
context: . context: .
file: ./Dockerfile file: ./Dockerfile

View File

@@ -9,7 +9,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2.3.4
- name: Run tests - name: Run tests
run: | run: |

1
.gitignore vendored
View File

@@ -1,3 +1,4 @@
/data/ /data/
/.idea/ /.idea/
*.iml *.iml
/gh-md-toc

315
README.md
View File

@@ -38,6 +38,115 @@ With that you can easily view the logs, stop, or re-start the container:
> Be sure to always include `-e EULA=TRUE` in your commands, as Mojang/Microsoft requires EULA acceptance. > Be sure to always include `-e EULA=TRUE` in your commands, 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.
**TABLE OF CONTENTS**
<!--ts-->
* [Looking for a Bedrock Dedicated Server](#looking-for-a-bedrock-dedicated-server)
* [Interacting with the server](#interacting-with-the-server)
* [Data Directory](#data-directory)
* [Attaching data directory to host filesystem](#attaching-data-directory-to-host-filesystem)
* [Converting anonymous /data volume to named volume](#converting-anonymous-data-volume-to-named-volume)
* [Versions](#versions)
* [Running Minecraft server on different Java version](#running-minecraft-server-on-different-java-version)
* [Deprecated Image Tags](#deprecated-image-tags)
* [Healthcheck](#healthcheck)
* [Deployment Templates and Examples](#deployment-templates-and-examples)
* [Helm Charts](#helm-charts)
* [Examples](#examples)
* [Amazon Web Services (AWS) Deployment](#amazon-web-services-aws-deployment)
* [Server types](#server-types)
* [Running a Forge Server](#running-a-forge-server)
* [Running a Bukkit/Spigot server](#running-a-bukkitspigot-server)
* [Running a Paper server](#running-a-paper-server)
* [Running a Tuinity server](#running-a-tuinity-server)
* [Running an Airplane server](#running-an-airplane-server)
* [Running a Purpur server](#running-a-purpur-server)
* [Running a Yatopia server](#running-a-yatopia-server)
* [Running a Magma server](#running-a-magma-server)
* [Running a Mohist server](#running-a-mohist-server)
* [Running a Catserver type server](#running-a-catserver-type-server)
* [Running an Canyon server](#running-an-canyon-server)
* [Running a SpongeVanilla server](#running-a-spongevanilla-server)
* [Running a Fabric Server](#running-a-fabric-server)
* [Running a server with a Feed the Beast modpack](#running-a-server-with-a-feed-the-beast-modpack)
* [Environment Variables:](#environment-variables)
* [Upgrading](#upgrading)
* [Example](#example)
* [Running a server with a CurseForge modpack](#running-a-server-with-a-curseforge-modpack)
* [Modpack data directory](#modpack-data-directory)
* [Buggy start scripts](#buggy-start-scripts)
* [Fixing "unable to launch forgemodloader"](#fixing-unable-to-launch-forgemodloader)
* [Optional plugins, mods, and config attach points](#optional-plugins-mods-and-config-attach-points)
* [Auto-downloading SpigotMC/Bukkit/PaperMC plugins](#auto-downloading-spigotmcbukkitpapermc-plugins)
* [Replacing variables inside configs](#replacing-variables-inside-configs)
* [Running with a custom server JAR](#running-with-a-custom-server-jar)
* [Force re-download of the server file](#force-re-download-of-the-server-file)
* [Using Docker Compose](#using-docker-compose)
* [Server configuration](#server-configuration)
* [Server name](#server-name)
* [Server port](#server-port)
* [Difficulty](#difficulty)
* [Whitelist Players](#whitelist-players)
* [Op/Administrator Players](#opadministrator-players)
* [Server icon](#server-icon)
* [Rcon](#rcon)
* [Query](#query)
* [Max players](#max-players)
* [Max world size](#max-world-size)
* [Allow Nether](#allow-nether)
* [Announce Player Achievements](#announce-player-achievements)
* [Enable Command Block](#enable-command-block)
* [Force Gamemode](#force-gamemode)
* [Generate Structures](#generate-structures)
* [Hardcore](#hardcore)
* [Snooper](#snooper)
* [Max Build Height](#max-build-height)
* [Max Tick Time](#max-tick-time)
* [Spawn Animals](#spawn-animals)
* [Spawn Monsters](#spawn-monsters)
* [Spawn NPCs](#spawn-npcs)
* [Set spawn protection](#set-spawn-protection)
* [View Distance](#view-distance)
* [Level Seed](#level-seed)
* [Game Mode](#game-mode)
* [Message of the Day](#message-of-the-day)
* [PVP Mode](#pvp-mode)
* [Level Type and Generator Settings](#level-type-and-generator-settings)
* [Custom Server Resource Pack](#custom-server-resource-pack)
* [World Save Name](#world-save-name)
* [Downloadable world](#downloadable-world)
* [Cloning world from a container path](#cloning-world-from-a-container-path)
* [Overwrite world on start](#overwrite-world-on-start)
* [Downloadable mod/plugin pack for Forge, Bukkit, and Spigot Servers](#downloadable-modplugin-pack-for-forge-bukkit-and-spigot-servers)
* [Remove old mods/plugins](#remove-old-modsplugins)
* [Online mode](#online-mode)
* [Allow flight](#allow-flight)
* [Other server property mappings](#other-server-property-mappings)
* [Miscellaneous Options](#miscellaneous-options)
* [Running as alternate user/group ID](#running-as-alternate-usergroup-id)
* [Memory Limit](#memory-limit)
* [JVM Options](#jvm-options)
* [Interactive and Color Console](#interactive-and-color-console)
* [OpenJ9 Specific Options](#openj9-specific-options)
* [Enabling rolling logs](#enabling-rolling-logs)
* [Timezone Configuration](#timezone-configuration)
* [Enable Remote JMX for Profiling](#enable-remote-jmx-for-profiling)
* [Enable Aikar's Flags](#enable-aikars-flags)
* [HTTP Proxy](#http-proxy)
* [Using "noconsole" option](#using-noconsole-option)
* [Explicitly disable GUI](#explicitly-disable-gui)
* [Stop Duration](#stop-duration)
* [Autopause](#autopause)
* [Description](#description)
* [Enabling Autopause](#enabling-autopause)
* [Running on RaspberryPi](#running-on-raspberrypi)
<!-- Added by: runner, at: Thu May 20 01:17:11 UTC 2021 -->
<!--te-->
## Looking for a Bedrock Dedicated Server ## Looking for a Bedrock Dedicated Server
For Minecraft clients running on consoles, mobile, or native Windows, you'll need to For Minecraft clients running on consoles, mobile, or native Windows, you'll need to
@@ -101,7 +210,7 @@ When attached in this way you can stop the server, edit the configuration under
With Docker Compose, setting up a host attached directory is even easier since relative paths can be configured. For example, with the following `docker-compose.yml` Docker will automatically create/attach the relative directory `minecraft-data` to the container. With Docker Compose, setting up a host attached directory is even easier since relative paths can be configured. For example, with the following `docker-compose.yml` Docker will automatically create/attach the relative directory `minecraft-data` to the container.
```yaml ```yaml
version: "3" version: "3.8"
services: services:
mc: mc:
@@ -159,6 +268,8 @@ the server jar remain in the `/data` directory. It is safe to remove those._
## Running Minecraft server on different Java version ## Running Minecraft server on different Java version
> **NOTE** [as of snapshot 21W19A](https://www.minecraft.net/en-us/article/minecraft-snapshot-21w19a), Java 16 is now required. Please use `itzg/minecraft-server:java16` for that version and newer. Consideration of changing the `latest` will be made after 1.17 releases.
To use a different version of Java, please use a docker tag to run your Minecraft server. To use a different version of Java, please use a docker tag to run your Minecraft server.
| Tag name | Java version | Linux | JVM Type | Architecture | | Tag name | Java version | Linux | JVM Type | Architecture |
@@ -168,6 +279,7 @@ To use a different version of Java, please use a docker tag to run your Minecraf
| java8-multiarch | 8 | Debian | Hotspot | amd64,arm64,armv7 | | java8-multiarch | 8 | Debian | Hotspot | amd64,arm64,armv7 |
| java15 | 15 | Debian | Hotspot | amd64,arm64,armv7 | | java15 | 15 | Debian | Hotspot | amd64,arm64,armv7 |
| java15-openj9 | 15 | Debian | OpenJ9 | amd64,arm64 | | java15-openj9 | 15 | Debian | OpenJ9 | amd64,arm64 |
| java16 | 16 | Debian | Hotspot | amd64,arm64,armv7 |
| adopt11 | 11 | Alpine | Hotspot | amd64 | | adopt11 | 11 | Alpine | Hotspot | amd64 |
| openj9 | 8 | Alpine | OpenJ9 | amd64 | | openj9 | 8 | Alpine | OpenJ9 | amd64 |
| openj9-11 | 11 | Alpine | OpenJ9 | amd64 | | openj9-11 | 11 | Alpine | OpenJ9 | amd64 |
@@ -212,7 +324,9 @@ Some orchestration systems, such as Portainer, don't allow for disabling the def
### Helm Charts ### Helm Charts
- [stable/minecraft](https://hub.helm.sh/charts/stable/minecraft) ([chart source](https://github.com/helm/charts/tree/master/stable/minecraft)) - 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) - [mcsh/server-deployment](https://github.com/mcserverhosting-net/charts)
### Examples ### Examples
@@ -223,13 +337,15 @@ The [examples directory](https://github.com/itzg/docker-minecraft-server/tree/ma
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. 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.
## Running a Forge Server ## Server types
### Running a Forge Server
Enable [Forge server](http://www.minecraftforge.net/wiki/) mode by adding a `-e TYPE=FORGE` to your command-line. Enable [Forge server](http://www.minecraftforge.net/wiki/) mode by adding a `-e TYPE=FORGE` to your command-line.
The overall version is specified by `VERSION`, [as described in the section above](#versions) and will run the recommended Forge version by default. You can also choose to run a specific Forge version with `FORGEVERSION`, such as `-e FORGEVERSION=14.23.5.2854`. The overall version is specified by `VERSION`, [as described in the section above](#versions) and will run the recommended Forge version by default. You can also choose to run a specific Forge version with `FORGEVERSION`, such as `-e FORGEVERSION=14.23.5.2854`.
$ docker run -d -v /path/on/host:/data \ docker run -d -v /path/on/host:/data \
-e TYPE=FORGE \ -e TYPE=FORGE \
-e VERSION=1.12.2 -e FORGEVERSION=14.23.5.2854 \ -e VERSION=1.12.2 -e FORGEVERSION=14.23.5.2854 \
-p 25565:25565 -e EULA=TRUE --name mc itzg/minecraft-server -p 25565:25565 -e EULA=TRUE --name mc itzg/minecraft-server
@@ -237,36 +353,18 @@ The overall version is specified by `VERSION`, [as described in the section abov
To use a pre-downloaded Forge installer, place it in the attached `/data` directory and To use a pre-downloaded Forge installer, place it in the attached `/data` directory and
specify the name of the installer file with `FORGE_INSTALLER`, such as: specify the name of the installer file with `FORGE_INSTALLER`, such as:
$ docker run -d -v /path/on/host:/data ... \ docker run -d -v /path/on/host:/data ... \
-e FORGE_INSTALLER=forge-1.11.2-13.20.0.2228-installer.jar ... -e FORGE_INSTALLER=forge-1.11.2-13.20.0.2228-installer.jar ...
To download a Forge installer from a custom location, such as your own file repository, specify To download a Forge installer from a custom location, such as your own file repository, specify
the URL with `FORGE_INSTALLER_URL`, such as: the URL with `FORGE_INSTALLER_URL`, such as:
$ docker run -d -v /path/on/host:/data ... \ docker run -d -v /path/on/host:/data ... \
-e FORGE_INSTALLER_URL=http://HOST/forge-1.11.2-13.20.0.2228-installer.jar ... -e FORGE_INSTALLER_URL=http://HOST/forge-1.11.2-13.20.0.2228-installer.jar ...
In both of the cases above, there is no need for the `VERSION` or `FORGEVERSION` variables. In both of the cases above, there is no need for the `VERSION` or `FORGEVERSION` variables.
### Managing mods ### Running a Bukkit/Spigot server
In order to manage mods, you have two options:
1. [Attach a host directory to the /data path](#attaching-data-directory-to-host-filesystem) and manage the contents of the `mods` subdirectory
2. Using a mods-mount
If the container paths `/mods` and/or `/config` exist, such as by attaching a docker volume or host path, then any files in either of these directories will be copied over to the respective `/data` subdirectory before starting Minecraft.
If you want old mods to be removed as the `/mods` content is updated, then add `-e REMOVE_OLD_MODS=TRUE`. You can fine tune the removal process by specifying the `REMOVE_OLD_MODS_INCLUDE` and `REMOVE_OLD_MODS_EXCLUDE` variables. By default, everything will be removed. You can also specify the `REMOVE_OLD_MODS_DEPTH` (default is 16) variable to only delete files up to a certain level.
For example: `-e REMOVE_OLD_MODS=TRUE -e REMOVE_OLD_MODS_INCLUDE="*.jar" -e REMOVE_OLD_MODS_DEPTH=1` will remove all old jar files that are directly inside the `plugins/` or `mods/` directory.
You can specify the destination of the files that are copied from `/mods` and `/config` by setting the `COPY_MODS_DEST` and `COPY_CONFIG_DEST`, where the default is `/data/mods` and `/data/config`. For example, `-v ./config:/config -e COPY_CONFIG_DEST=/data` will allow you to copy over files like `bukkit.yml` and so on directly into the server directory.
> NOTE: If a file was updated in the destination path and is newer than the source file from `/config`, then it will not be overwritten.
## Running a Bukkit/Spigot server
Enable Bukkit/Spigot server mode by adding a `-e TYPE=BUKKIT` or `-e TYPE=SPIGOT` to your command-line. Enable Bukkit/Spigot server mode by adding a `-e TYPE=BUKKIT` or `-e TYPE=SPIGOT` to your command-line.
@@ -287,7 +385,7 @@ Plugins can either be managed within the `plugins` subdirectory of the [data dir
> 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. > 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.
## Running a Paper server ### Running a Paper server
Enable Paper server mode by adding a `-e TYPE=PAPER` to your command-line. Enable Paper server mode by adding a `-e TYPE=PAPER` to your command-line.
@@ -309,7 +407,7 @@ If you have attached a host directory to the `/data` volume, then you can instal
[You can also auto-download plugins using `SPIGET_RESOURCES`.](#auto-downloading-spigotmcbukkitpapermc-plugins) [You can also auto-download plugins using `SPIGET_RESOURCES`.](#auto-downloading-spigotmcbukkitpapermc-plugins)
## Running a Tuinity server ### Running a Tuinity server
A [Tuinity](https://github.com/Spottedleaf/Tuinity) server, which is a fork of Paper aimed at improving server performance at high playercounts. A [Tuinity](https://github.com/Spottedleaf/Tuinity) server, which is a fork of Paper aimed at improving server performance at high playercounts.
@@ -317,7 +415,7 @@ A [Tuinity](https://github.com/Spottedleaf/Tuinity) server, which is a fork of P
> **NOTE** only `VERSION=LATEST` is supported > **NOTE** only `VERSION=LATEST` is supported
## Running an Airplane server ### Running an Airplane server
An [Airplane](https://github.com/TECHNOVE/Airplane) server, which is a fork of Tuinity aimed at further improving server performance at high playercounts. An [Airplane](https://github.com/TECHNOVE/Airplane) server, which is a fork of Tuinity aimed at further improving server performance at high playercounts.
@@ -331,7 +429,7 @@ Extra variables:
- `FORCE_REDOWNLOAD=false` : set to true to force the located server jar to be re-downloaded - `FORCE_REDOWNLOAD=false` : set to true to force the located server jar to be re-downloaded
- `USE_FLARE_FLAGS=false` : set to true to add appropriate flags for the [Flare](https://blog.airplane.gg/flare) profiler - `USE_FLARE_FLAGS=false` : set to true to add appropriate flags for the [Flare](https://blog.airplane.gg/flare) profiler
## Running a Purpur server ### Running a Purpur server
A [Purpur](https://purpur.pl3x.net/) server, which is "a fork of Paper, Tuinity, Airplane with the goal of providing new and interesting configuration options". A [Purpur](https://purpur.pl3x.net/) server, which is "a fork of Paper, Tuinity, Airplane with the goal of providing new and interesting configuration options".
@@ -344,7 +442,7 @@ Extra variables:
- `FORCE_REDOWNLOAD=false` : set to true to force the located server jar to be re-downloaded - `FORCE_REDOWNLOAD=false` : set to true to force the located server jar to be re-downloaded
- `USE_FLARE_FLAGS=false` : set to true to add appropriate flags for the [Flare](https://blog.airplane.gg/flare) profiler - `USE_FLARE_FLAGS=false` : set to true to add appropriate flags for the [Flare](https://blog.airplane.gg/flare) profiler
## Running a Yatopia server ### Running a Yatopia server
A [Yatopia](https://github.com/YatopiaMC/Yatopia) server, which is a "blazing fast Tuinity fork with best in class performance". A [Yatopia](https://github.com/YatopiaMC/Yatopia) server, which is a "blazing fast Tuinity fork with best in class performance".
@@ -357,7 +455,7 @@ Extra variables:
- `FORCE_REDOWNLOAD=false` : set to true to force the located server jar to be re-downloaded - `FORCE_REDOWNLOAD=false` : set to true to force the located server jar to be re-downloaded
- `USE_FLARE_FLAGS=false` : set to true to add appropriate flags for the [Flare](https://blog.airplane.gg/flare) profiler - `USE_FLARE_FLAGS=false` : set to true to add appropriate flags for the [Flare](https://blog.airplane.gg/flare) profiler
## Running a Magma server ### Running a Magma server
A [Magma](https://magmafoundation.org/) server, which is a combination of Forge and PaperMC, can be used with A [Magma](https://magmafoundation.org/) server, which is a combination of Forge and PaperMC, can be used with
@@ -366,7 +464,7 @@ A [Magma](https://magmafoundation.org/) server, which is a combination of Forge
> **NOTE** there are limited base versions supported, so you will also need to set `VERSION`, such as "1.12.2" > **NOTE** there are limited base versions supported, so you will also need to set `VERSION`, such as "1.12.2"
## Running a Mohist server ### Running a Mohist server
A [Mohist](https://github.com/Mohist-Community/Mohist) server can be used with A [Mohist](https://github.com/Mohist-Community/Mohist) server can be used with
@@ -378,7 +476,7 @@ By default the latest build will be used; however, a specific build number can b
-e VERSION=1.16.5 -e MOHIST_BUILD=374 -e VERSION=1.16.5 -e MOHIST_BUILD=374
## Running a Catserver type server ### Running a Catserver type server
A [Catserver](http://catserver.moe/) type server can be used with A [Catserver](http://catserver.moe/) type server can be used with
@@ -386,6 +484,63 @@ A [Catserver](http://catserver.moe/) type server can be used with
> **NOTE** Catserver only provides a single release stream, so `VERSION` is ignored > **NOTE** Catserver only provides a single release stream, so `VERSION` is ignored
### Running an Canyon server
[Canyon](https://github.com/canyonmodded/canyon) is a fork of CraftBukkit for Minecraft Beta 1.7.3. It includes multiple enhancements whilst also retaining compatibility with old Bukkit plugins and mods as much as possible.
-e VERSION=b1.7.3 -e TYPE=CANYON
> **NOTE** only `VERSION=b1.7.3` is supported
> **NOTE** only Java 8 is supported
By default the latest build will be used; however, a specific build number can be selected by setting `CANYON_BUILD`, such as
-e CANYON_BUILD=11
### 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.
docker run -d -v /path/on/host:/data -e TYPE=SPONGEVANILLA \
-p 25565:25565 -e EULA=TRUE --name mc itzg/minecraft-server
You can also choose to use the `EXPERIMENTAL` branch.
Just change it with `SPONGEBRANCH`, such as:
$ docker run -d -v /path/on/host:/data ... \
-e TYPE=SPONGEVANILLA -e SPONGEBRANCH=EXPERIMENTAL ...
### Running a Fabric Server
Enable [Fabric server](http://fabricmc.net/use/) mode by adding a `-e TYPE=FABRIC` to your command-line. By default, the container will run the latest version, but you can also choose to run a specific version with `VERSION`.
```
docker run -d -v /path/on/host:/data \
-e TYPE=FABRIC \
-p 25565:25565 -e EULA=TRUE --name mc itzg/minecraft-server
```
A specific installer version can be requested using `FABRIC_INSTALLER_VERSION`.
To use a pre-downloaded Fabric installer, place it in a directory attached into the container, such as the `/data` volume and specify the name of the installer file with `FABRIC_INSTALLER`, such as:
```
docker run -d -v /path/on/host:/data ... \
-e FABRIC_INSTALLER=fabric-installer-0.5.0.32.jar ...
```
To download a Fabric installer from a custom location, such as your own file repository, specify the URL with `FABRIC_INSTALLER_URL`, such as:
```
docker run -d -v /path/on/host:/data ... \
-e FABRIC_INSTALLER_URL=http://HOST/fabric-installer-0.5.0.32.jar ...
```
In order to add mods, you have two options:
## Running a server with a Feed the Beast modpack ## Running a server with a Feed the Beast modpack
> **NOTE** requires one of the Debian based images listed in [the Java versions section](#running-minecraft-server-on-different-java-version). > **NOTE** requires one of the Debian based images listed in [the Java versions section](#running-minecraft-server-on-different-java-version).
@@ -457,76 +612,6 @@ then you apply a workaround by adding this to the run invocation:
-e FTB_LEGACYJAVAFIXER=true -e FTB_LEGACYJAVAFIXER=true
## 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.
docker run -d -v /path/on/host:/data -e TYPE=SPONGEVANILLA \
-p 25565:25565 -e EULA=TRUE --name mc itzg/minecraft-server
You can also choose to use the `EXPERIMENTAL` branch.
Just change it with `SPONGEBRANCH`, such as:
$ docker run -d -v /path/on/host:/data ... \
-e TYPE=SPONGEVANILLA -e SPONGEBRANCH=EXPERIMENTAL ...
## Running a Fabric Server
Enable [Fabric server](http://fabricmc.net/use/) mode by adding a `-e TYPE=FABRIC` to your command-line. By default, the container will run the latest version, but you can also choose to run a specific version with `VERSION`.
```
docker run -d -v /path/on/host:/data \
-e TYPE=FABRIC \
-p 25565:25565 -e EULA=TRUE --name mc itzg/minecraft-server
```
A specific installer version can be requested using `FABRIC_INSTALLER_VERSION`.
To use a pre-downloaded Fabric installer, place it in a directory attached into the container, such as the `/data` volume and specify the name of the installer file with `FABRIC_INSTALLER`, such as:
```
docker run -d -v /path/on/host:/data ... \
-e FABRIC_INSTALLER=fabric-installer-0.5.0.32.jar ...
```
To download a Fabric installer from a custom location, such as your own file repository, specify the URL with `FABRIC_INSTALLER_URL`, such as:
```
docker run -d -v /path/on/host:/data ... \
-e FABRIC_INSTALLER_URL=http://HOST/fabric-installer-0.5.0.32.jar ...
```
In order to add mods, you have two options:
### Using the /data volume
This is the easiest way if you are using a persistent `/data` mount.
To do this, you will need to attach the container's `/data` directory
(see "Attaching data directory to host filesystem”).
Then, you can add mods to the `/path/on/host/mods` folder you chose. From the example above,
the `/path/on/host` folder contents look like:
```
/path/on/host
├── mods
│ └── ... INSTALL MODS HERE ...
├── config
│ └── ... CONFIGURE MODS HERE ...
├── ops.json
├── server.properties
├── whitelist.json
└── ...
```
If you add mods while the container is running, you'll need to restart it to pick those
up:
docker stop mc
docker start mc
## Optional plugins, mods, and config attach points ## Optional plugins, mods, and config attach points
There are optional volume paths that can be attached to supply content to be copied into the data area: There are optional volume paths that can be attached to supply content to be copied into the data area:
@@ -540,8 +625,16 @@ There are optional volume paths that can be attached to supply content to be cop
`/config` `/config`
: contents are copied into `/data/config` by default, but can be changed with `COPY_CONFIG_DEST` : contents are copied into `/data/config` by default, but can be changed with `COPY_CONFIG_DEST`
If you want old mods/plugins to be removed before the content is brought over from those attach points, then add `-e REMOVE_OLD_MODS=TRUE`. You can fine tune the removal process by specifying the `REMOVE_OLD_MODS_INCLUDE` and `REMOVE_OLD_MODS_EXCLUDE` variables. By default, everything will be removed. You can also specify the `REMOVE_OLD_MODS_DEPTH` (default is 16) variable to only delete files up to a certain level.
For example: `-e REMOVE_OLD_MODS=TRUE -e REMOVE_OLD_MODS_INCLUDE="*.jar" -e REMOVE_OLD_MODS_DEPTH=1` will remove all old jar files that are directly inside the `plugins/` or `mods/` directory.
You can specify the destination of the files that are copied from `/mods` and `/config` by setting the `COPY_MODS_DEST` and `COPY_CONFIG_DEST`, where the default is `/data/mods` and `/data/config`. For example, `-v ./config:/config -e COPY_CONFIG_DEST=/data` will allow you to copy over files like `bukkit.yml` and so on directly into the server directory.
These paths work well if you want to have a common set of modules in a separate location, but still have multiple worlds with different server requirements in either persistent volumes or a downloadable archive. These paths work well if you want to have a common set of modules in a separate location, but still have multiple worlds with different server requirements in either persistent volumes or a downloadable archive.
> For more flexibility with mods/plugins preparation, you can declare directories to use in [the `MODS` variable](#downloadable-modplugin-pack-for-forge-bukkit-and-spigot-servers)
## Auto-downloading SpigotMC/Bukkit/PaperMC plugins ## Auto-downloading SpigotMC/Bukkit/PaperMC plugins
The `SPIGET_RESOURCES` variable can be set with a comma-separated list of SpigotMC resource IDs to automatically download [SpigotMC resources/plugins](https://www.spigotmc.org/resources/) using [the spiget API](https://spiget.org/). Resources that are zip files will be expanded into the plugins directory and resources that are simply jar files will be moved there. The `SPIGET_RESOURCES` variable can be set with a comma-separated list of SpigotMC resource IDs to automatically download [SpigotMC resources/plugins](https://www.spigotmc.org/resources/) using [the spiget API](https://spiget.org/). Resources that are zip files will be expanded into the plugins directory and resources that are simply jar files will be moved there.
@@ -612,7 +705,7 @@ database:
This is how your `docker-compose.yml` file could look like: This is how your `docker-compose.yml` file could look like:
```yml ```yml
version: "3" version: "3.8"
# Other docker-compose examples in /examples # Other docker-compose examples in /examples
services: services:
@@ -687,7 +780,9 @@ every time you want to create new Minecraft server, you can now use
[Docker Compose](https://docs.docker.com/compose/). Start with a [Docker Compose](https://docs.docker.com/compose/). Start with a
`docker-compose.yml` file like the following: `docker-compose.yml` file like the following:
``` ```yml
version: "3.8"
minecraft-server: minecraft-server:
image: itzg/minecraft-server image: itzg/minecraft-server
@@ -1016,7 +1111,7 @@ The world will only be downloaded or copied if it doesn't exist already. Set `FO
### Downloadable mod/plugin pack for Forge, Bukkit, and Spigot Servers ### Downloadable mod/plugin pack for Forge, Bukkit, and Spigot Servers
Like the `WORLD` option above, you can specify the URL of a "mod pack" Like the `WORLD` option above, you can specify the URL or path of a "mod pack"
to download and install into `mods` for Forge or `plugins` for Bukkit/Spigot. to download and install into `mods` for Forge or `plugins` for Bukkit/Spigot.
To use this option pass the environment variable `MODPACK`, such as To use this option pass the environment variable `MODPACK`, such as
@@ -1026,10 +1121,12 @@ To use this option pass the environment variable `MODPACK`, such as
top level of the zip archive. Make sure the jars are compatible with the top level of the zip archive. Make sure the jars are compatible with the
particular `TYPE` of server you are running. particular `TYPE` of server you are running.
You may also download individual mods using the `MODS` environment variable and supplying the URL You may also download or copy over individual mods using the `MODS` environment variable. `MODS` contains a comma-separated list of
to the jar files. Multiple mods/plugins should be comma separated. - URL of a jar file
- container path to a jar file
- container path to a directory containing jar files
docker run -d -e MODS=https://www.example.com/mods/mod1.jar,https://www.example.com/mods/mod2.jar ... docker run -d -e MODS=https://www.example.com/mods/mod1.jar,/plugins/common,/plugins/special/mod2.jar ...
### Remove old mods/plugins ### Remove old mods/plugins

View File

@@ -9,6 +9,7 @@ branches_list=(
'adopt11' 'adopt11'
'java15' 'java15'
'java15-openj9' 'java15-openj9'
'java16'
'multiarch' 'multiarch'
'multiarch-latest' 'multiarch-latest'
) )

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

View File

@@ -1,4 +1,4 @@
version: '3' version: '3.8'
services: services:
minecraft: minecraft:

View File

@@ -1,4 +1,4 @@
version: '3.2' version: '3.8'
services: services:
mc: mc:

View File

@@ -1,4 +1,4 @@
version: "3.7" version: "3.8"
services: services:
mc: mc:

View File

@@ -1,4 +1,4 @@
version: "3.7" version: "3.8"
services: services:
mc: mc:

View File

@@ -1,4 +1,4 @@
version: '3.7' version: '3.8'
services: services:
mc: mc:

View File

@@ -1,4 +1,4 @@
version: '3' version: '3.8'
services: services:
mc: mc:

View File

@@ -1,4 +1,4 @@
version: "3" version: "3.8"
services: services:
mc: mc:

View File

@@ -1,4 +1,4 @@
version: '3' version: '3.8'
# Forge with Sponge API support. THIS REQUIRES DOWNLOADING SPONGEFORGE. # Forge with Sponge API support. THIS REQUIRES DOWNLOADING SPONGEFORGE.
# Place the SpongeForge jar file in /data/mods. Other Forge mods go here as well. # Place the SpongeForge jar file in /data/mods. Other Forge mods go here as well.
# Place Sponge mods in /data/mods/plugins. Yes, this is a directory inside the Forge mod directory. Do NOT use /data/plugins. # Place Sponge mods in /data/mods/plugins. Yes, this is a directory inside the Forge mod directory. Do NOT use /data/plugins.

View File

@@ -1,4 +1,4 @@
version: "3.7" version: "3.8"
services: services:
mc: mc:

View File

@@ -152,15 +152,19 @@ case "${TYPE^^}" in
exec ${SCRIPTS:-/}start-deployYatopia "$@" exec ${SCRIPTS:-/}start-deployYatopia "$@"
;; ;;
AIRPLANE) AIRPLANE)
exec ${SCRIPTS:-/}start-deployAirplane "$@" exec ${SCRIPTS:-/}start-deployAirplane "$@"
;; ;;
CANYON)
exec ${SCRIPTS:-/}start-deployCanyon "$@"
;;
*) *)
log "Invalid type: '$TYPE'" log "Invalid type: '$TYPE'"
log "Must be: VANILLA, FORGE, BUKKIT, SPIGOT, PAPER, FTBA (multiarch-only)," log "Must be: VANILLA, FORGE, BUKKIT, SPIGOT, PAPER, FTBA (multiarch-only),"
log " CURSE_INSTANCE, CURSEFORGE, SPONGEVANILLA, TUINITY, PURPUR" log " CURSE_INSTANCE, CURSEFORGE, SPONGEVANILLA, TUINITY, PURPUR"
log " CUSTOM, MAGMA, MOHIST, CATSERVER, YATOPIA, AIRPLANE" log " CUSTOM, MAGMA, MOHIST, CATSERVER, YATOPIA, AIRPLANE, CANYON"
exit 1 exit 1
;; ;;

View File

@@ -27,7 +27,7 @@ isDebugging && set -x
export FTB_BASE_DIR export FTB_BASE_DIR
legacyJavaFixerUrl=https://ftb.forgecdn.net/FTB2/maven/net/minecraftforge/lex/legacyjavafixer/1.0/legacyjavafixer-1.0.jar legacyJavaFixerUrl=https://ftb.forgecdn.net/FTB2/maven/net/minecraftforge/lex/legacyjavafixer/1.0/legacyjavafixer-1.0.jar
export TYPE=FEED-THE-BEAST export TYPE=CURSEFORGE
FTB_SERVER_MOD=${FTB_SERVER_MOD:-$CF_SERVER_MOD} FTB_SERVER_MOD=${FTB_SERVER_MOD:-$CF_SERVER_MOD}
@@ -60,7 +60,7 @@ if ! isTrue ${USE_MODPACK_START_SCRIPT:-true}; then
mkdir -p ${FTB_BASE_DIR} mkdir -p ${FTB_BASE_DIR}
unzip -o "${FTB_SERVER_MOD}" -d ${FTB_BASE_DIR} | awk '{printf "."} END {print ""}' unzip -o "${FTB_SERVER_MOD}" -d ${FTB_BASE_DIR} | awk '{printf "."} END {print ""}'
serverJar=$(find ${FTB_BASE_DIR} -path "*/libraries/*" -prune -type f -o -not -name "forge*installer.jar" -name "forge*.jar") serverJar=$(find ${FTB_BASE_DIR} -type f \( -path "*/libraries/*" -o -path "*/mods/*" \) -prune -o -name "forge*.jar" -not -name "forge*installer.jar" -print)
if [[ -z "$serverJar" ]]; then if [[ -z "$serverJar" ]]; then
if [ -f "${FTB_BASE_DIR}/settings.cfg" ]; then if [ -f "${FTB_BASE_DIR}/settings.cfg" ]; then
@@ -91,7 +91,7 @@ if ! isTrue ${USE_MODPACK_START_SCRIPT:-true}; then
echo "${FTB_SERVER_MOD}" > $installMarker echo "${FTB_SERVER_MOD}" > $installMarker
fi fi
export SERVER=$(find ${FTB_BASE_DIR} -path "*/libraries/*" -prune -type f -o -not -name "forge*installer.jar" -name "forge*.jar") export SERVER=$(find ${FTB_BASE_DIR} -type f \( -path "*/libraries/*" -o -path "*/mods/*" \) -prune -o -name "forge*.jar" -not -name "forge*installer.jar" -print)
if [[ -z "${SERVER}" || ! -f "${SERVER}" ]]; then if [[ -z "${SERVER}" || ! -f "${SERVER}" ]]; then
log "ERROR unable to locate installed forge server jar" log "ERROR unable to locate installed forge server jar"
isDebugging && find ${FTB_BASE_DIR} -name "forge*.jar" isDebugging && find ${FTB_BASE_DIR} -name "forge*.jar"
@@ -109,6 +109,7 @@ entryScriptExpr="
-o -name ServerStartLinux.sh -o -name ServerStartLinux.sh
-o -name LaunchServer.sh -o -name LaunchServer.sh
-o -name server-start.sh -o -name server-start.sh
-o -name start-server.sh
-o -name startserver.sh -o -name startserver.sh
-o -name StartServer.sh -o -name StartServer.sh
" "

54
start-deployCanyon Normal file
View File

@@ -0,0 +1,54 @@
#!/bin/bash
set -euo pipefail
IFS=$'\n\t'
. ${SCRIPTS:-/}start-utils
isDebugging && set -x
: ${CANYON_BUILD:=lastSuccessfulBuild}
JAVA_VER=$(java -version 2>&1 | head -1 | cut -d'"' -f2 | sed '/^1\./s///' | cut -d'.' -f1)
if [ "${JAVA_VER}" != "8" ]; then
log "ERROR: Canyon server type only supports Java version 8"
exit 1
fi
if [ "${VERSION}" != "b1.7.3" ]; then
log "ERROR: Canyon server type only supports VERSION=b1.7.3"
exit 1
fi
canyonJob="https://ci.velocitypowered.com/job/Canyon"
buildRelPath=$(
curl -fsSL "${canyonJob}/${CANYON_BUILD}/api/json" |
jq -r '.artifacts[0].relativePath'
)
buildNumber=$(
curl -fsSL "${canyonJob}/${CANYON_BUILD}/api/json" |
jq -r '.number'
)
baseName=$(basename "${buildRelPath}")
# Add build tag to non-tagged builds for version detection
if [ ${baseName%.*} = 'canyon-server' ]; then
export SERVER=${baseName%.*}_build${buildNumber}.jar
else
export SERVER="${baseName}"
fi
if [ ! -f "$SERVER" ]; then
downloadUrl="${canyonJob}/${CANYON_BUILD}/artifact/${buildRelPath}"
log "Downloading Canyon build ${buildNumber} from $downloadUrl ..."
curl -fsSL -o "$SERVER" "$downloadUrl"
if [ ! -f "$SERVER" ]; then
log "ERROR: failed to download from $downloadUrl (status=$?)"
exit 3
fi
fi
# Normalize on Spigot for later operations
export TYPE=SPIGOT
export SKIP_LOG4J_CONFIG=true
exec ${SCRIPTS:-/}start-spiget "$@"

View File

@@ -11,21 +11,9 @@ fi
CURSE_URL_BASE=${CURSE_URL_BASE:-https://minecraft.curseforge.com/projects} CURSE_URL_BASE=${CURSE_URL_BASE:-https://minecraft.curseforge.com/projects}
# Remove old mods/plugins # Remove old mods/plugins
if isTrue ${REMOVE_OLD_MODS}; then if isTrue ${REMOVE_OLD_MODS:-false}; then
remove_mods_dest="/data/mods" removeOldMods /data/mods
case ${TYPE} in removeOldMods /data/plugins
SPIGOT|BUKKIT|PAPER)
remove_mods_dest="/data/plugins"
;;
esac
# only try to remove existing mods dir
if [ -d "$remove_mods_dest" ]; then
log "Removing old mods in $remove_mods_dest..."
find $remove_mods_dest -mindepth 1 -maxdepth ${REMOVE_OLD_MODS_DEPTH:-16} -wholename "${REMOVE_OLD_MODS_INCLUDE:-*}" -not -wholename "${REMOVE_OLD_MODS_EXCLUDE}" -delete
else
log "Directory $remove_mods_dest does not exist; removing nothing."
fi
fi fi
# If supplied with a URL for a modpack (simple zip of jars), download it and unpack # If supplied with a URL for a modpack (simple zip of jars), download it and unpack
@@ -37,35 +25,39 @@ if [[ "$MODPACK" ]]; then
downloadUrl=$(curl -Ls -o /dev/null -w %{effective_url} $MODPACK) downloadUrl=$(curl -Ls -o /dev/null -w %{effective_url} $MODPACK)
if ! [[ $downloadUrl == *.zip ]]; then if ! [[ $downloadUrl == *.zip ]]; then
log "ERROR Invalid URL given for MODPACK: $downloadUrl resolved from $MODPACK" log "ERROR Invalid URL given for MODPACK: $downloadUrl resolved from $MODPACK"
log " Must be HTTP or HTTPS and a ZIP file" log " Must be HTTP, HTTPS or FTP and a ZIP file"
exit 1 exit 1
fi fi
fi fi
log "Downloading mod/plugin pack via HTTP" log "Downloading mod/plugin pack"
log " from $downloadUrl ..." log " from $downloadUrl ..."
if ! curl -sSL -o /tmp/modpack.zip "$downloadUrl"; then if ! curl -sSL -o /tmp/modpack.zip "$downloadUrl"; then
log "ERROR: failed to download from $downloadUrl" log "ERROR: failed to download from $downloadUrl"
exit 2 exit 2
fi fi
elif [[ "$MODPACK" =~ .*\.zip ]]; then
if [ "$TYPE" = "SPIGOT" ]; then if ! cp $MODPACK /tmp/modpack.zip; then
mkdir -p /data/plugins log "ERROR: failed to copy from $MODPACK"
if ! unzip -o -d /data/plugins /tmp/modpack.zip; then exit 2
log "ERROR: failed to unzip the modpack from $downloadUrl"
fi
else
mkdir -p /data/mods
if ! unzip -o -d /data/mods /tmp/modpack.zip; then
log "ERROR: failed to unzip the modpack from $downloadUrl"
fi
fi fi
rm -f /tmp/modpack.zip
else else
log "ERROR Invalid URL given for MODPACK: $MODPACK" log "ERROR Invalid URL or Path given for MODPACK: $MODPACK"
exit 1 exit 1
fi fi
if [ "$TYPE" = "SPIGOT" ]; then
mkdir -p /data/plugins
if ! unzip -o -d /data/plugins /tmp/modpack.zip; then
log "ERROR: failed to unzip the modpack from $downloadUrl"
fi
else
mkdir -p /data/mods
if ! unzip -o -d /data/mods /tmp/modpack.zip; then
log "ERROR: failed to unzip the modpack from $downloadUrl"
fi
fi
rm -f /tmp/modpack.zip
fi fi
# If supplied with a URL for a plugin download it. # If supplied with a URL for a plugin download it.
@@ -99,8 +91,18 @@ if [[ "$MODS" ]]; then
exit 2 exit 2
fi fi
fi fi
elif [[ -f "$i" && "$i" =~ .*\.jar ]]; then
log "Copying plugin located at $i ..."
out_file=$(basename "$i")
if ! cp "$i" "${out_dir}/$out_file"; then
log "ERROR: failed to copy from $i into $out_dir"
exit 2
fi
elif [[ -d "$i" ]]; then
log "Copying plugin jars from $i ..."
cp "$i"/*.jar "${out_dir}"
else else
log "ERROR Invalid URL given in MODS: $i" log "ERROR Invalid URL or path given in MODS: $i"
exit 2 exit 2
fi fi
done done

View File

@@ -181,8 +181,8 @@ function customizeServerProps {
} }
# Deploy server.properties file # Deploy server.properties file
if [[ ${TYPE} == "FEED-THE-BEAST" ]]; then if [[ ${TYPE} == "CURSEFORGE" ]]; then
export SERVER_PROPERTIES=${FTB_DIR}/server.properties export SERVER_PROPERTIES="${FTB_DIR}/server.properties"
log "detected FTB, changing properties path to ${SERVER_PROPERTIES}" log "detected FTB, changing properties path to ${SERVER_PROPERTIES}"
fi fi
@@ -214,7 +214,7 @@ fi
if isDebugging; then if isDebugging; then
log "DEBUG Dumping server.properties" log "DEBUG Dumping server.properties"
cat /data/server.properties cat "${SERVER_PROPERTIES}"
fi fi
exec ${SCRIPTS:-/}start-finalSetupEnvVariables $@ exec ${SCRIPTS:-/}start-finalSetupEnvVariables $@

View File

@@ -7,7 +7,7 @@ isDebugging && set -x
: ${LEVEL:=world} : ${LEVEL:=world}
export LEVEL export LEVEL
if [ $TYPE = "FEED-THE-BEAST" ]; then if [ $TYPE = "CURSEFORGE" ]; then
worldDest=$FTB_DIR/$LEVEL worldDest=$FTB_DIR/$LEVEL
else else
worldDest=/data/$LEVEL worldDest=/data/$LEVEL

View File

@@ -180,7 +180,7 @@ if [[ ${TYPE} == "CURSE_INSTANCE" ]]; then
exec mc-server-runner ${mcServerRunnerArgs} \ exec mc-server-runner ${mcServerRunnerArgs} \
--cf-instance-file "${CURSE_INSTANCE_JSON}" \ --cf-instance-file "${CURSE_INSTANCE_JSON}" \
java $JVM_XX_OPTS $JVM_OPTS $expandedDOpts -jar _SERVERJAR_ "$@" $EXTRA_ARGS java $JVM_XX_OPTS $JVM_OPTS $expandedDOpts -jar _SERVERJAR_ "$@" $EXTRA_ARGS
elif [[ ${TYPE} == "FEED-THE-BEAST" && "${SERVER}" ]]; then elif [[ ${TYPE} == "CURSEFORGE" && "${SERVER}" ]]; then
copyFilesForCurseForge copyFilesForCurseForge
cd "${FTB_DIR}" cd "${FTB_DIR}"
@@ -189,7 +189,7 @@ elif [[ ${TYPE} == "FEED-THE-BEAST" && "${SERVER}" ]]; then
set -x set -x
fi fi
exec mc-server-runner ${bootstrapArgs} ${mcServerRunnerArgs} java $JVM_XX_OPTS $JVM_OPTS $expandedDOpts -jar $(basename "${SERVER}") "$@" $EXTRA_ARGS exec mc-server-runner ${bootstrapArgs} ${mcServerRunnerArgs} java $JVM_XX_OPTS $JVM_OPTS $expandedDOpts -jar $(basename "${SERVER}") "$@" $EXTRA_ARGS
elif [[ ${TYPE} == "FEED-THE-BEAST" ]]; then elif [[ ${TYPE} == "CURSEFORGE" ]]; then
mcServerRunnerArgs="${mcServerRunnerArgs} --shell bash" mcServerRunnerArgs="${mcServerRunnerArgs} --shell bash"
copyFilesForCurseForge copyFilesForCurseForge

View File

@@ -16,7 +16,7 @@ containsJars() {
if [[ $line =~ $pat ]]; then if [[ $line =~ $pat ]]; then
return 0 return 0
fi fi
done <<< $(unzip -l "$file") done <<<$(unzip -l "$file")
return 1 return 1
} }
@@ -46,10 +46,14 @@ getResourceFromSpiget() {
} }
if [[ ${SPIGET_RESOURCES} ]]; then if [[ ${SPIGET_RESOURCES} ]]; then
if isTrue ${REMOVE_OLD_MODS:-false}; then
removeOldMods /data/plugins
REMOVE_OLD_MODS=false
fi
log "Getting plugins via Spiget" log "Getting plugins via Spiget"
IFS=',' read -r -a resources <<< "${SPIGET_RESOURCES}" IFS=',' read -r -a resources <<<"${SPIGET_RESOURCES}"
for resource in "${resources[@]}" for resource in "${resources[@]}"; do
do
getResourceFromSpiget "${resource}" getResourceFromSpiget "${resource}"
done done
fi fi

View File

@@ -11,7 +11,7 @@ function join_by() {
function isURL() { function isURL() {
local value=$1 local value=$1
if [[ ${value:0:8} == "https://" || ${value:0:7} == "http://" ]]; then if [[ ${value:0:8} == "https://" || ${value:0:7} == "http://" || ${value:0:6} == "ftp://" ]]; then
return 0 return 0
else else
return 1 return 1
@@ -174,3 +174,9 @@ eula=${EULA,,}
exit 2 exit 2
fi fi
} }
function removeOldMods {
if [ -d "$1" ]; then
find "$1" -mindepth 1 -maxdepth ${REMOVE_OLD_MODS_DEPTH:-16} -wholename "${REMOVE_OLD_MODS_INCLUDE:-*}" -not -wholename "${REMOVE_OLD_MODS_EXCLUDE:-}" -delete
fi
}