diff --git a/.github/workflows/build-multiarch.yml b/.github/workflows/build-multiarch.yml index 76307c28..1a466445 100644 --- a/.github/workflows/build-multiarch.yml +++ b/.github/workflows/build-multiarch.yml @@ -12,6 +12,10 @@ on: - "[0-9]+.[0-9]+.[0-9]+-multiarch" - "[0-9]+.[0-9]+.[0-9]+-multiarch-latest" - "[0-9]+.[0-9]+.[0-9]+-java15" + paths-ignore: + - "*.md" + - "docs/**" + - "examples/**" jobs: docker-buildx: diff --git a/.github/workflows/generate-toc.yml b/.github/workflows/generate-toc.yml new file mode 100644 index 00000000..976746fc --- /dev/null +++ b/.github/workflows/generate-toc.yml @@ -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 + - 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 + with: + commit_message: Auto update markdown TOC \ No newline at end of file diff --git a/.gitignore b/.gitignore index 4092689f..574e0d91 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ /data/ /.idea/ -*.iml \ No newline at end of file +*.iml +/gh-md-toc \ No newline at end of file diff --git a/README.md b/README.md index 7d772c44..1e3c4fe3 100644 --- a/README.md +++ b/README.md @@ -38,6 +38,113 @@ 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. +**TABLE OF CONTENTS** + + + * [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) + * [Running a Forge Server](#running-a-forge-server) + * [Managing mods](#managing-mods) + * [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 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) + * [Running a SpongeVanilla server](#running-a-spongevanilla-server) + * [Running a Fabric Server](#running-a-fabric-server) + * [Using the /data volume](#using-the-data-volume) + * [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) + + + + + ## Looking for a Bedrock Dedicated Server For Minecraft clients running on consoles, mobile, or native Windows, you'll need to @@ -1016,7 +1123,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 -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 use this option pass the environment variable `MODPACK`, such as @@ -1026,7 +1133,7 @@ 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 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 individual mods using the `MODS` environment variable and supplying the URL or path to the jar files. Multiple mods/plugins should be comma separated. docker run -d -e MODS=https://www.example.com/mods/mod1.jar,https://www.example.com/mods/mod2.jar ... diff --git a/docs/world-copy-compose-project.drawio.png b/docs/world-copy-compose-project.drawio.png new file mode 100644 index 00000000..64976e9c Binary files /dev/null and b/docs/world-copy-compose-project.drawio.png differ diff --git a/start-finalSetupModpack b/start-finalSetupModpack index 869d8c22..c854ebb7 100644 --- a/start-finalSetupModpack +++ b/start-finalSetupModpack @@ -36,24 +36,28 @@ if [[ "$MODPACK" ]]; then log "ERROR: failed to download from $downloadUrl" exit 2 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 + elif [[ "$MODPACK" =~ .*\.zip ]]; then + if ! cp $MODPACK /tmp/modpack.zip; then + log "ERROR: failed to copy from $MODPACK" + exit 2 fi - rm -f /tmp/modpack.zip - else - log "ERROR Invalid URL given for MODPACK: $MODPACK" + log "ERROR Invalid URL or Path given for MODPACK: $MODPACK" exit 1 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 # If supplied with a URL for a plugin download it. @@ -87,8 +91,15 @@ if [[ "$MODS" ]]; then exit 2 fi fi + elif [[ "$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 else - log "ERROR Invalid URL given in MODS: $i" + log "ERROR Invalid URL or Path given in MODS: $i" exit 2 fi done