diff --git a/.env.dist b/.env.dist index 295befa..8b919af 100644 --- a/.env.dist +++ b/.env.dist @@ -1,15 +1,16 @@ # GLOBAL SERVER ################################################## -BASE_DIR=/data/compose/minecraft +BASE_DIR=/opt/docker/minecraft BASE_TIMEZONE=Europe/Berlin SERVER_TYPE=FABRIC -SERVER_MC_VERSION="1.20.1" -SERVER_NAME=1201-network +SERVER_MC_VERSION="26.1.2" +SERVER_NAME=26_1_2-network SERVER_MOTD="§4[WARNING]§r Please connect to the correct server." SERVER_VIEW_DISTANCE=14 -# For the CF_API_KEY >> every '$' has to be escaped with another '$' character !!! -SERVER_CF_API_KEY=CHANGE-ME + +# CurseForge API Key: Every '$' has to be escaped with another '$' character !!! +SERVER_CURSEFORGE_API_KEY=CHANGE-ME # SERVICES ################################################## @@ -23,15 +24,18 @@ DB_PASSWORD=CHANGE-ME REDIS_PORT=6379 REDIS_PASSWORD=CHANGE-ME +SERVICE_VSCODE_PORT=8443 SERVICE_VSCODE_PASSWORD=CHANGE-ME SERVICE_VSCODE_SUDO_PASSWORD=CHANGE-ME SERVICE_VSCODE_PROXY_DOMAIN=mcdev.waldinet.de # PROXY ################################################## -PROXY_TYPE=velocity +PROXY_TYPE=velocity # currently only velocity is supported PROXY_PORT=1337 -PROXY_PLUGINS="https://github.com/Lorenzo0111/RocketJoin/releases/download/2.4.1/RocketJoin-velocity-2.4.1.jar" +MODRINTH_DOWNLOAD_DEPENDENCIES="required" +PROXY_MODRINTH_PROJECTS="simple-voice-chat:5SU8XYFw" +PROXY_PLUGINS="https://github.com/Lorenzo0111/RocketJoin/releases/download/2.5/RocketJoin-velocity-2.5.jar" # https://cdn-raw.modrinth.com/data/16vhQOQN/versions/OQpVrXXW/minimotd-velocity-2.0.13.jar # https://ci.dmulloy2.net/job/ProtocolLib/668/artifact/build/libs/ProtocolLib.ja # https://github.com/oddlama/vane/releases/download/v1.12.3/vane-velocity-1.12.3.jar @@ -41,7 +45,7 @@ PROXY_PLUGINS="https://github.com/Lorenzo0111/RocketJoin/releases/download/2.4.1 # SERVER - SMP ################################################## -MC_SMP_NAME=smp +MC_SMP_NAME=waldicraft MC_SMP_SEED=-7754207215465818387 MC_SMP_SERVER_PORT=1338 MC_SMP_MAX_MEMORY="4G" @@ -49,9 +53,9 @@ MC_SMP_MAX_PLAYERS=10 MC_SMP_DIFFICULTY=normal MC_SMP_RCON_PASSWORD=CHANGE-ME MC_SMP_RCON_PORT=25575 -MC_SMP_DATAPACKS="https://github.com/WaldiNet/Towers_Of_The_Wild_Reworked/releases/download/v4.2.1/Towers_Of_The_Wild_Reworked_v4.2.1_Fabric_Waystones.zip, https://cdn.modrinth.com/data/yID404Mu/versions/BBiCd6GO/scorched-v1.1.3b.zip, https://cdn.modrinth.com/data/HQsBdHGd/versions/ohkYIBHw/Ender%20Dragon%20Fight%20Remastered%20Data%20And%20Resource%20Pack-v4.3.zip" -MC_SMP_MODRINTH_PROJECTS="fabric-api:pYtlDijL, mysql-jdbc:94JxXm7O, luckperms:7PNj6nCm, amplified-nether:QXFvBT1u, appleskin:CxnVG86Y, architectury-api:Sbew3kXe, chunky:t8SbUchF, dynmap:vqx7tUUt, fabric-seasons:uMEzKato, fwaystones:wNz9DqWv, fabricproxy-lite:XJmDAnj5, lithium:ZSNsJrPI, nullscape:O0uQyKki, rei:kq4TOe4i, simple-voice-chat:I0UEW6B0, travelersbackpack:XFdxMe7g, trinkets:e563ycts" -MC_SMP_CURSEFORGE_FILES="worldedit:4586218" +MC_SMP_DATAPACKS= +MC_SMP_MODRINTH_PROJECTS="fabric-api:BLz7ETCw, waystones:crPXnQlJ, balm:ySr8K68c, shogi:2Xg13Gfy, luckperms:fTIdfb46, amplified-nether:rp2A0tDf, appleskin:HwaLJe3v, chunky:4Eotm6ov, fabricproxy-lite:CsEpiziv, mc-data-bridge:N02wJcbK, lithium:R7MxYvuW, nullscape:E4kh5rGD, midnightlib:jcj4Ev6D, repurposed-structures-fabric:Jvol4Hh2, terralith:FCzSjHeG, travelersbackpack:Q6rEigkb, forge-config-api-port:mwAOaKnn, simple-voice-chat:gVPjsMto, worldedit:gjsLvJfW" +MC_SMP_CURSEFORGE_FILES= MC_SMP_SPIGET_RESOURCES= # SERVER - EXPEDITION @@ -64,9 +68,9 @@ MC_EXPEDITION_MAX_PLAYERS=10 MC_EXPEDITION_DIFFICULTY=normal MC_EXPEDITION_RCON_PASSWORD=CHANGE-ME MC_EXPEDITION_RCON_PORT=25580 -MC_EXPEDITION_DATAPACKS="https://github.com/WaldiNet/Towers_Of_The_Wild_Reworked/releases/download/v4.2.1/Towers_Of_The_Wild_Reworked_v4.2.1_Fabric_Waystones.zip, https://cdn.modrinth.com/data/yID404Mu/versions/BBiCd6GO/scorched-v1.1.3b.zip, https://cdn.modrinth.com/data/HQsBdHGd/versions/ohkYIBHw/Ender%20Dragon%20Fight%20Remastered%20Data%20And%20Resource%20Pack-v4.3.zip" -MC_EXPEDITION_MODRINTH_PROJECTS="fabric-api:pYtlDijL, luckperms:7PNj6nCm, amplified-nether:QXFvBT1u, appleskin:CxnVG86Y, architectury-api:Sbew3kXe, chunky:t8SbUchF, dynmap:vqx7tUUt, fabric-seasons:uMEzKato, fwaystones:wNz9DqWv, fabricproxy-lite:XJmDAnj5, lithium:ZSNsJrPI, midnightlib:YXz8kIQl, nullscape:O0uQyKki, oxidizing-lightning-rods:zaW5MOC0, rei:kq4TOe4i, repurposed-structures-fabric:UUsn75P9, simple-voice-chat:I0UEW6B0, terralith:hYoo0DKV, travelersbackpack:XFdxMe7g, trinkets:e563ycts" -MC_EXPEDITION_CURSEFORGE_FILES="worldedit:4586218" +MC_EXPEDITION_DATAPACKS= +MC_EXPEDITION_MODRINTH_PROJECTS="fabric-api:BLz7ETCw, waystones:crPXnQlJ, balm:ySr8K68c, shogi:2Xg13Gfy, luckperms:fTIdfb46, amplified-nether:rp2A0tDf, appleskin:HwaLJe3v, chunky:4Eotm6ov, fabricproxy-lite:CsEpiziv, mc-data-bridge:N02wJcbK, lithium:R7MxYvuW, nullscape:E4kh5rGD, midnightlib:jcj4Ev6D, repurposed-structures-fabric:Jvol4Hh2, terralith:FCzSjHeG, travelersbackpack:Q6rEigkb, forge-config-api-port:mwAOaKnn, simple-voice-chat:gVPjsMto, worldedit:gjsLvJfW" +MC_EXPEDITION_CURSEFORGE_FILES= MC_EXPEDITION_SPIGET_RESOURCES= # SERVER - TESTING @@ -79,8 +83,8 @@ MC_TESTING_MAX_PLAYERS=10 MC_TESTING_RCON_PORT=25581 MC_TESTING_RCON_PASSWORD=CHANGE-ME MC_TESTING_DATAPACKS= -MC_TESTING_MODRINTH_PROJECTS="fabric-api:pYtlDijL, luckperms:7PNj6nCm, architectury-api:Sbew3kXe, chunky:t8SbUchF, dynmap:vqx7tUUt, fwaystones:wNz9DqWv, fabricproxy-lite:XJmDAnj5, lithium:ZSNsJrPI, rei:kq4TOe4i, simple-voice-chat:I0UEW6B0" -MC_TESTING_CURSEFORGE_FILES="worldedit:4586218" +MC_TESTING_MODRINTH_PROJECTS="fabric-api:BLz7ETCw, waystones:crPXnQlJ, balm:ySr8K68c, shogi:2Xg13Gfy, luckperms:fTIdfb46, chunky:4Eotm6ov, fabricproxy-lite:CsEpiziv, lithium:R7MxYvuW, simple-voice-chat:gVPjsMto, worldedit:gjsLvJfW" +MC_TESTING_CURSEFORGE_FILES= MC_TESTING_SPIGET_RESOURCES= # MODS diff --git a/.github/workflows/opencode.yml b/.github/workflows/opencode.yml index e9f6ec5..2e2de20 100644 --- a/.github/workflows/opencode.yml +++ b/.github/workflows/opencode.yml @@ -1,33 +1,33 @@ -name: opencode - -on: - issue_comment: - types: [created] - pull_request_review_comment: - types: [created] - -jobs: - opencode: - if: | - contains(github.event.comment.body, ' /oc') || - startsWith(github.event.comment.body, '/oc') || - contains(github.event.comment.body, ' /opencode') || - startsWith(github.event.comment.body, '/opencode') - runs-on: ubuntu-latest - permissions: - id-token: write - contents: read - pull-requests: read - issues: read - steps: - - name: Checkout repository - uses: actions/checkout@v6 - with: - persist-credentials: false - - - name: Run opencode - uses: anomalyco/opencode/github@latest - env: - OPENCODE_API_KEY: ${{ secrets.OPENCODE_API_KEY }} - with: - model: opencode-go/deepseek-v4-pro \ No newline at end of file +name: opencode + +on: + issue_comment: + types: [created] + pull_request_review_comment: + types: [created] + +jobs: + opencode: + if: | + contains(github.event.comment.body, ' /oc') || + startsWith(github.event.comment.body, '/oc') || + contains(github.event.comment.body, ' /opencode') || + startsWith(github.event.comment.body, '/opencode') + runs-on: ubuntu-latest + permissions: + id-token: write + contents: read + pull-requests: read + issues: read + steps: + - name: Checkout repository + uses: actions/checkout@v6 + with: + persist-credentials: false + + - name: Run opencode + uses: anomalyco/opencode/github@latest + env: + OPENCODE_API_KEY: ${{ secrets.OPENCODE_API_KEY }} + with: + model: opencode-go/deepseek-v4-flash \ No newline at end of file diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..6c48b3f --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,101 @@ +# AGENTS.md + +## Project type + +Docker Compose infrastructure for a Minecraft server network. No code, no build, no tests, no lint. + +## Prerequisites + +Only **Docker** is required. No language runtime. + +## Setup and run + +```bash +cp .env.dist .env # required first step — .env is gitignored +docker compose up -d +docker compose down +``` + +The `.env.dist` is the template. The `.env` file must exist at runtime and is never committed. + +## .env quirks + +- `SERVER_CURSEFORGE_API_KEY` must be set if any `_CURSEFORGE_FILES` variables are used. +- Mod lists use `_MODRINTH_PROJECTS` (slug:version-id format) and `_CURSEFORGE_FILES` (project-id:file-id format), per the itzg docs. + +## Architecture + +- **1 proxy** (Velocity via [`itzg/bungeecord`](https://github.com/itzg/docker-mc-proxy)) + **3 backend servers** (Fabric via [`itzg/minecraft-server`](https://github.com/itzg/docker-minecraft-server)). +- **3 backup containers** ([`itzg/mc-backup`](https://github.com/itzg/docker-mc-backup)) — one per server instance. +- **1 code-server** for in-browser editing (exposes the whole repo at `/config/workspace`). + +### Server instances + +| Instance | Container | Game mode | Memory | +|-------------|--------------------|--------------|--------| +| `waldicraft` | `server-smp` | survival | 4G | +| `expedition` | `server-expedition`| survival | 8G | +| `testing` | `server-testing` | creative/flat| 2G | + +Each instance directory (`server//`) has three subdirs: +- `config/` — mounted read-only, committed to git +- `data/` — world data, mostly gitignored (only `ops.json`, `whitelist.json`, and `dynmap/` config are tracked) +- `mods/` — mod JARs, entirely gitignored (downloaded at container startup from Modrinth/CurseForge URLs in `.env`) + +### Proxy/server forwarding + +- Velocity uses `modern` forwarding mode with `forwarding.secret` (committed). +- Backend servers run `ONLINE_MODE=false` and use **FabricProxy-Lite** with hack settings for player info forwarding. +- Velocity `velocity.toml` maps server names to internal Docker hostnames: + ``` + waldicraft = "server-smp:25565" + expedition = "server-expedition:25565" + testing = "server-testing:25565" + ``` + +## Adding or modifying mods + +Mod JARs are **never committed**. They are downloaded at container startup. To change mods: + +1. Edit the relevant `_MODRINTH_PROJECTS`, `_CURSEFORGE_FILES`, or `_DATAPACKS` variable in `.env.dist` (and update `.env`). +2. For mods not on Modrinth/CurseForge, place JARs manually in `server//mods/`. +3. Mod config files go in `server//config/` and **are** committed. + +## Key files for configuration changes + +- `.env.dist` — environment variables (ports, seeds, mods, memory, RCON passwords) +- `proxy/velocity/config/velocity.toml` — proxy routing and server list +- `server//config/` — per-server mod configs +- `docker-compose.yaml` — service definitions + +## Optional services + +Four additional services exist in `docker-compose.yaml` but are **commented out**. To enable them, uncomment the service definition, verify paths/variables, and configure `.env` values. Only code-server is active by default. + +### Nginx (`service-nginx`) + +Serves the **LiveAtlas** web map UI plus dynmap tiles for all three servers. Required because all dynmap configs have `disable-webserver: true` and use `org.dynmap.JsonFileClientUpdateComponent` — the internal dynmap web server is off; data is written as JSON/tiles to the filesystem for an external web server to serve. + +- Web root: `services/nginx/www/` — contains `index.html` (pre-configured LiveAtlas app) + `live-atlas/` (built JS/CSS assets) +- Mounts dynmap output from each server: `server//data/dynmap/web/standalone` and `…/tiles` +- LiveAtlas is pre-configured for all three servers in `index.html` using the filetree/JSON approach + +### PHP-FPM (`service-php-fpm`) + +Required by Nginx to handle PHP endpoints for LiveAtlas — chat sending, login, and register. The nginx config (`docker/nginx/conf.d/default.conf`) proxies `*.php` requests to `service-php-fpm:9000`. Must be enabled alongside Nginx. + +### MySQL (`service-mysql`) + +Alternative dynmap storage backend. The current dynmap configs use `type: filetree`; MySQL is the commented-out option (`type: mysql`) in each `configuration.txt`. + +- Init script (`.docker/mysql/init/01-databases.sql`) creates a `dynmap` database and grants access to the `minecraft` user +- LiveAtlas `index.html` includes commented-out `MySQL_*.php` endpoint URLs for when MySQL is used +- Data volume `services/mysql/` is gitignored (see `services/.gitignore`) + +### Redis (`service-redis`) + +Available as a Redis 7.2 cache instance. No config in this repo references a specific Redis consumer — intended as infrastructure for a mod or plugin that needs it. + +## CI + +A single GitHub Actions workflow (`.github/workflows/opencode.yml`) triggers OpenCode AI on issue/PR comments containing `/oc` or `/opencode`. diff --git a/docker-compose.yaml b/docker-compose.yaml index 6e69ec0..be18741 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -1,35 +1,46 @@ -version: "3.8" +x-arcane: + icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/minecraft.svg + urls: + - https://github.com/WaldiNet/minecraft-network + services: # https://github.com/itzg/docker-bungeecord/ proxy: - image: itzg/bungeecord:java17 + image: itzg/bungeecord:java25 container_name: mc-proxy restart: unless-stopped ports: - ${PROXY_PORT:-25565}:25577 + networks: + - mc-proxy environment: TYPE: ${PROXY_TYPE} DEBUG: "false" ENABLE_RCON: "true" PLUGINS: ${PROXY_PLUGINS} + MODRINTH_PROJECTS: ${PROXY_MODRINTH_PROJECTS} + MINECRAFT_VERSION: ${SERVER_MC_VERSION} volumes: - /etc/timezone:/etc/timezone:ro - - ${BASE_DIR}/${SERVER_NAME}/proxy/${PROXY_TYPE}/server:/server - - ${BASE_DIR}/${SERVER_NAME}/proxy/${PROXY_TYPE}/plugins:/plugins - - ${BASE_DIR}/${SERVER_NAME}/proxy/${PROXY_TYPE}/config:/config + - ./proxy/${PROXY_TYPE}/server:/server + - ./proxy/${PROXY_TYPE}/plugins:/plugins + - ./proxy/${PROXY_TYPE}/config:/config labels: - com.centurylinklabs.watchtower.enable: "false" - com.centurylinklabs.watchtower.monitor-only: "true" + com.getarcaneapp.arcane.icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/papermc-velocity.svg + com.getarcaneapp.arcane.updater: false # https://docker-minecraft-server.readthedocs.io/ server-smp: - image: itzg/minecraft-server:java20-alpine + image: itzg/minecraft-server:java25-alpine container_name: mc-server-smp restart: unless-stopped ports: - ${MC_SMP_SERVER_PORT:-25566}:25565 - ${MOD_VOICECHAT_PORT_SMP:-24455}:24454/udp # Voicechat + networks: + - mc-proxy + - mc-smp-backup environment: # Java specific TUNE_VIRTUALIZED: "true" @@ -40,7 +51,7 @@ services: # MC Server specific EULA: "true" TYPE: ${SERVER_TYPE} - LEVEL: waldicraft + LEVEL: world-${MC_SMP_NAME} VERSION: ${SERVER_MC_VERSION} SEED: ${MC_SMP_SEED} MAX_PLAYERS: ${MC_SMP_MAX_PLAYERS:-10} @@ -63,26 +74,29 @@ services: DATAPACKS: ${MC_SMP_DATAPACKS} MODRINTH_DOWNLOAD_DEPENDENCIES: "required" MODRINTH_PROJECTS: ${MC_SMP_MODRINTH_PROJECTS} - CF_API_KEY: ${SERVER_CF_API_KEY} + CF_API_KEY: ${SERVER_CURSEFORGE_API_KEY} CURSEFORGE_FILES: ${MC_SMP_CURSEFORGE_FILES} SPIGET_RESOURCES: ${MC_SMP_SPIGET_RESOURCES} volumes: - /etc/timezone:/etc/timezone:ro - - ${BASE_DIR}/${SERVER_NAME}/server/${MC_SMP_NAME}/config:/config:ro - - ${BASE_DIR}/${SERVER_NAME}/server/${MC_SMP_NAME}/data:/data - - ${BASE_DIR}/${SERVER_NAME}/server/${MC_SMP_NAME}/mods:/mods:ro + - ./server/${MC_SMP_NAME}/config:/config:ro + - ./server/${MC_SMP_NAME}/data:/data + - ./server/${MC_SMP_NAME}/mods:/mods:ro labels: - com.centurylinklabs.watchtower.enable: "false" - com.centurylinklabs.watchtower.monitor-only: "true" + com.getarcaneapp.arcane.icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/minecraft.svg + com.getarcaneapp.arcane.updater: false # https://docker-minecraft-server.readthedocs.io/ server-expedition: - image: itzg/minecraft-server:java20-alpine + image: itzg/minecraft-server:java25-alpine container_name: mc-server-expedition restart: unless-stopped ports: - ${MC_EXPEDITION_SERVER_PORT:-25567}:25565 - ${MOD_VOICECHAT_PORT_EXPEDITION:-24456}:24454/udp # Voicechat + networks: + - mc-proxy + - mc-expedition-backup environment: # Java specific TUNE_VIRTUALIZED: "true" @@ -93,7 +107,7 @@ services: # MC Server specific EULA: "true" TYPE: ${SERVER_TYPE} - LEVEL: expedition + LEVEL: world-${MC_EXPEDITION_NAME} VERSION: ${SERVER_MC_VERSION} SEED: ${MC_EXPEDITION_SEED} MAX_PLAYERS: ${MC_EXPEDITION_MAX_PLAYERS:-10} @@ -116,26 +130,29 @@ services: DATAPACKS: ${MC_EXPEDITION_DATAPACKS} MODRINTH_DOWNLOAD_DEPENDENCIES: "required" MODRINTH_PROJECTS: ${MC_EXPEDITION_MODRINTH_PROJECTS} - CF_API_KEY: ${SERVER_CF_API_KEY} + CF_API_KEY: ${SERVER_CURSEFORGE_API_KEY} CURSEFORGE_FILES: ${MC_EXPEDITION_CURSEFORGE_FILES} SPIGET_RESOURCES: ${MC_EXPEDITION_SPIGET_RESOURCES} volumes: - /etc/timezone:/etc/timezone:ro - - ${BASE_DIR}/${SERVER_NAME}/server/${MC_EXPEDITION_NAME}/config:/config:ro - - ${BASE_DIR}/${SERVER_NAME}/server/${MC_EXPEDITION_NAME}/data:/data - - ${BASE_DIR}/${SERVER_NAME}/server/${MC_EXPEDITION_NAME}/mods:/mods:ro + - ./server/${MC_EXPEDITION_NAME}/config:/config:ro + - ./server/${MC_EXPEDITION_NAME}/data:/data + - ./server/${MC_EXPEDITION_NAME}/mods:/mods:ro labels: - com.centurylinklabs.watchtower.enable: "false" - com.centurylinklabs.watchtower.monitor-only: "true" + com.getarcaneapp.arcane.icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/minecraft.svg + com.getarcaneapp.arcane.updater: false # https://docker-minecraft-server.readthedocs.io/ server-testing: - image: itzg/minecraft-server:java20-alpine + image: itzg/minecraft-server:java25-alpine container_name: mc-server-testing restart: unless-stopped ports: - ${MC_TESTING_SERVER_PORT:-25568}:25565 - ${MOD_VOICECHAT_PORT_TESTING:-24456}:24454/udp # Voicechat + networks: + - mc-proxy + - mc-testing-backup environment: # Java specific TUNE_VIRTUALIZED: "true" @@ -146,9 +163,9 @@ services: # MC Server specific EULA: "true" TYPE: ${SERVER_TYPE} - LEVEL: testing + LEVEL: world-${MC_TESTING_NAME} VERSION: ${SERVER_MC_VERSION} - SEED: ${MC_TESTIN_SEED} + SEED: ${MC_TESTING_SEED} MAX_PLAYERS: ${MC_TESTING_MAX_PLAYERS} LEVEL_TYPE: flat OVERRIDE_SERVER_PROPERTIES: "true" @@ -172,25 +189,27 @@ services: DATAPACKS: ${MC_TESTING_DATAPACKS} MODRINTH_DOWNLOAD_DEPENDENCIES: "required" MODRINTH_PROJECTS: ${MC_TESTING_MODRINTH_PROJECTS} - CF_API_KEY: ${SERVER_CF_API_KEY} + CF_API_KEY: ${SERVER_CURSEFORGE_API_KEY} CURSEFORGE_FILES: ${MC_TESTING_CURSEFORGE_FILES} SPIGET_RESOURCES: ${MC_TESTING_SPIGET_RESOURCES} RCON_CMDS_STARTUP: |- /gamerule keepInventory true volumes: - /etc/timezone:/etc/timezone:ro - - ${BASE_DIR}/${SERVER_NAME}/server/${MC_TESTING_NAME}/config:/config:ro - - ${BASE_DIR}/${SERVER_NAME}/server/${MC_TESTING_NAME}/data:/data - - ${BASE_DIR}/${SERVER_NAME}/server/${MC_TESTING_NAME}/mods:/mods:ro + - ./server/${MC_TESTING_NAME}/config:/config:ro + - ./server/${MC_TESTING_NAME}/data:/data + - ./server/${MC_TESTING_NAME}/mods:/mods:ro labels: - com.centurylinklabs.watchtower.enable: "false" - com.centurylinklabs.watchtower.monitor-only: "true" + com.getarcaneapp.arcane.icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/minecraft.svg + com.getarcaneapp.arcane.updater: false # https://github.com/itzg/docker-mc-backup backup-smp: image: itzg/mc-backup container_name: mc-backup-smp restart: unless-stopped + networks: + - mc-smp-backup environment: TZ: ${BASE_TIMEZONE} BACKUP_NAME: ${MC_SMP_NAME} @@ -205,17 +224,19 @@ services: EXCLUDES: ${BACKUP_EXCLUDES} volumes: - /etc/timezone:/etc/timezone:ro - - ${BASE_DIR}/${SERVER_NAME}/backups/server/${MC_SMP_NAME}:/backups - - ${BASE_DIR}/${SERVER_NAME}/server/${MC_SMP_NAME}:/data + - ./backups/server/${MC_SMP_NAME}:/backups + - ./server/${MC_SMP_NAME}:/data labels: - com.centurylinklabs.watchtower.enable: "false" - com.centurylinklabs.watchtower.monitor-only: "true" + #com.getarcaneapp.arcane.icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/minecraft.svg + com.getarcaneapp.arcane.updater: false # https://github.com/itzg/docker-mc-backup backup-expedition: image: itzg/mc-backup container_name: mc-backup-expedition restart: unless-stopped + networks: + - mc-expedition-backup environment: TZ: ${BASE_TIMEZONE} BACKUP_NAME: ${MC_EXPEDITION_NAME} @@ -230,17 +251,19 @@ services: EXCLUDES: ${BACKUP_EXCLUDES} volumes: - /etc/timezone:/etc/timezone:ro - - ${BASE_DIR}/${SERVER_NAME}/backups/server/${MC_EXPEDITION_NAME}:/backups - - ${BASE_DIR}/${SERVER_NAME}/server/${MC_EXPEDITION_NAME}:/data + - ./backups/server/${MC_EXPEDITION_NAME}:/backups + - ./server/${MC_EXPEDITION_NAME}:/data labels: - com.centurylinklabs.watchtower.enable: "false" - com.centurylinklabs.watchtower.monitor-only: "true" + #com.getarcaneapp.arcane.icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/minecraft.svg + com.getarcaneapp.arcane.updater: false # https://github.com/itzg/docker-mc-backup backup-testing: image: itzg/mc-backup container_name: mc-backup-testing restart: unless-stopped + networks: + - mc-testing-backup environment: TZ: ${BASE_TIMEZONE} BACKUP_NAME: ${MC_TESTING_NAME} @@ -255,71 +278,71 @@ services: EXCLUDES: ${BACKUP_EXCLUDES} volumes: - /etc/timezone:/etc/timezone:ro - - ${BASE_DIR}/${SERVER_NAME}/backups/server/${MC_TESTING_NAME}:/backups - - ${BASE_DIR}/${SERVER_NAME}/server/${MC_TESTING_NAME}:/data + - ./backups/server/${MC_TESTING_NAME}:/backups + - ./server/${MC_TESTING_NAME}:/data labels: - com.centurylinklabs.watchtower.enable: "false" - com.centurylinklabs.watchtower.monitor-only: "true" + #com.getarcaneapp.arcane.icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/minecraft.svg + com.getarcaneapp.arcane.updater: false # Dynmap => https://github.com/webbukkit/dynmap/wiki/External-Webserver-Basics # LiveAtlas => https://github.com/JLyne/LiveAtlas/wiki/Configuring-Multiple-Servers - service-nginx: - image: nginx:1.25-alpine - container_name: mc-service-nginx - restart: unless-stopped - ports: - - ${NGINX_PORT:-80}:80 - volumes: - - /etc/localtime:/etc/localtime:ro - - ${BASE_DIR}/${SERVER_NAME}/.docker/nginx/conf.d/:/etc/nginx/conf.d/ - - ${BASE_DIR}/${SERVER_NAME}/services/nginx/www:/var/www - - ${BASE_DIR}/${SERVER_NAME}/services/nginx/logs:/var/log/nginx - # Dynmap => SMP - - ${BASE_DIR}/${SERVER_NAME}/server/${MC_SMP_NAME}/data/dynmap/web/standalone:/var/www/maps/${MC_SMP_NAME}/standalone - - ${BASE_DIR}/${SERVER_NAME}/server/${MC_SMP_NAME}/data/dynmap/web/tiles:/var/www/maps/${MC_SMP_NAME}/tiles - # Dynmap => Expedition - - ${BASE_DIR}/${SERVER_NAME}/server/${MC_EXPEDITION_NAME}/data/dynmap/web/standalone:/var/www/maps/${MC_EXPEDITION_NAME}/standalone - - ${BASE_DIR}/${SERVER_NAME}/server/${MC_EXPEDITION_NAME}/data/dynmap/web/tiles:/var/www/maps/${MC_EXPEDITION_NAME}/tiles - # Dynmap => Testing - - ${BASE_DIR}/${SERVER_NAME}/server/${MC_TESTING_NAME}/data/dynmap/web/standalone:/var/www/maps/${MC_TESTING_NAME}/standalone - - ${BASE_DIR}/${SERVER_NAME}/server/${MC_TESTING_NAME}/data/dynmap/web/tiles:/var/www/maps/${MC_TESTING_NAME}/tiles - labels: - com.centurylinklabs.watchtower.enable: "false" - com.centurylinklabs.watchtower.monitor-only: "true" + # service-nginx: + # image: nginx:1.25-alpine + # container_name: mc-service-nginx + # restart: unless-stopped + # ports: + # - ${NGINX_PORT:-80}:80 + # volumes: + # - /etc/localtime:/etc/localtime:ro + # - ./.docker/nginx/conf.d/:/etc/nginx/conf.d/ + # - ./services/nginx/www:/var/www + # - ./services/nginx/logs:/var/log/nginx + # # Dynmap => SMP + # - ./server/${MC_SMP_NAME}/data/dynmap/web/standalone:/var/www/maps/${MC_SMP_NAME}/standalone + # - ./server/${MC_SMP_NAME}/data/dynmap/web/tiles:/var/www/maps/${MC_SMP_NAME}/tiles + # # Dynmap => Expedition + # - ./server/${MC_EXPEDITION_NAME}/data/dynmap/web/standalone:/var/www/maps/${MC_EXPEDITION_NAME}/standalone + # - ./server/${MC_EXPEDITION_NAME}/data/dynmap/web/tiles:/var/www/maps/${MC_EXPEDITION_NAME}/tiles + # # Dynmap => Testing + # - ./server/${MC_TESTING_NAME}/data/dynmap/web/standalone:/var/www/maps/${MC_TESTING_NAME}/standalone + # - ./server/${MC_TESTING_NAME}/data/dynmap/web/tiles:/var/www/maps/${MC_TESTING_NAME}/tiles + # labels: + # com.getarcaneapp.arcane.icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/nginx.svg + # com.getarcaneapp.arcane.updater: false # Needed for dynmap serving - service-php-fpm: - image: php:8.2-fpm-alpine - container_name: mc-service-php - restart: unless-stopped - ports: - - ${PHP_PORT:-9000}:9000 - volumes: - - /etc/timezone:/etc/timezone:ro - - ${BASE_DIR}/${SERVER_NAME}/services/nginx/www:/var/www - labels: - com.centurylinklabs.watchtower.enable: "true" - com.centurylinklabs.watchtower.monitor-only: "false" + # service-php-fpm: + # image: php:8.2-fpm-alpine + # container_name: mc-service-php + # restart: unless-stopped + # ports: + # - ${PHP_PORT:-9000}:9000 + # volumes: + # - /etc/timezone:/etc/timezone:ro + # - ./services/nginx/www:/var/www + # labels: + # #com.getarcaneapp.arcane.icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/nginx.svg + # com.getarcaneapp.arcane.updater: false # Dynmap => https://github.com/webbukkit/dynmap/wiki/%5BTutorial%5D-Setting-up-a-standalone-web-server-with-MySQL-SQLite/ - service-mysql: - image: mysql:8.1 - container_name: mc-service-mysql - restart: unless-stopped - command: [ '--authentication_policy=mysql_native_password' ] - ports: - - ${DB_PORT:-3306}:3306 - environment: - MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD} - MYSQL_USER: ${DB_USER} - MYSQL_PASSWORD: ${DB_PASSWORD} - volumes: - - /etc/localtime:/etc/localtime:ro - - ${BASE_DIR}/${SERVER_NAME}/.docker/mysql/init:/docker-entrypoint-initdb.d - - ${BASE_DIR}/${SERVER_NAME}/services/mysql:/var/lib/mysql - labels: - com.centurylinklabs.watchtower.enable: "false" - com.centurylinklabs.watchtower.monitor-only: "true" + # service-mysql: + # image: mysql:8.1 + # container_name: mc-service-mysql + # restart: unless-stopped + # command: [ '--authentication_policy=mysql_native_password' ] + # ports: + # - ${DB_PORT:-3306}:3306 + # environment: + # MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD} + # MYSQL_USER: ${DB_USER} + # MYSQL_PASSWORD: ${DB_PASSWORD} + # volumes: + # - /etc/localtime:/etc/localtime:ro + # - ./.docker/mysql/init:/docker-entrypoint-initdb.d + # - ./services/mysql:/var/lib/mysql + # labels: + # #com.getarcaneapp.arcane.icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/nginx.svg + # com.getarcaneapp.arcane.updater: false # service-redis: # image: redis:7.2-alpine @@ -330,7 +353,7 @@ services: # - ${REDIS_PORT}:6379 # volumes: # - /etc/localtime:/etc/localtime:ro - # - ${BASE_DIR}/${SERVER_NAME}/services/redis:/var/lib/redis + # - ./services/redis:/var/lib/redis # labels: # com.centurylinklabs.watchtower.enable: "false" # com.centurylinklabs.watchtower.monitor-only: "true" @@ -340,7 +363,7 @@ services: container_name: service-code-server restart: unless-stopped ports: - - 8443:8443 + - ${SERVICE_VSCODE_PORT:-8443}:8443 environment: PUID: 1000 PGID: 1000 @@ -350,8 +373,18 @@ services: PROXY_DOMAIN: ${SERVICE_VSCODE_PROXY_DOMAIN} volumes: - /etc/timezone:/etc/timezone:ro - - ${BASE_DIR}/${SERVER_NAME}/services/code-server/config:/config - - ${BASE_DIR}/${SERVER_NAME}:/config/workspace + - ./services/code-server/config:/config + - ./:/config/workspace labels: - com.centurylinklabs.watchtower.enable: "true" - com.centurylinklabs.watchtower.monitor-only: "false" + com.getarcaneapp.arcane.icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/visual-studio-code.svg + com.getarcaneapp.arcane.updater: false + +networks: + mc-proxy: + driver: bridge + mc-smp-backup: + driver: bridge + mc-expedition-backup: + driver: bridge + mc-testing-backup: + driver: bridge \ No newline at end of file diff --git a/proxy/velocity/config/velocity.toml b/proxy/velocity/config/velocity.toml index 5171d37..a4f2180 100644 --- a/proxy/velocity/config/velocity.toml +++ b/proxy/velocity/config/velocity.toml @@ -7,7 +7,7 @@ bind = "0.0.0.0:25577" # What should be the MOTD? This gets displayed when the player adds your server to # their server list. Only MiniMessage format is accepted. # https://webui.advntr.dev/?mode=chat_closed&input=%3Cdark_green%3EWaldiCraft%3C%2Fdark_green%3E%20%7C%20%3Cred%3ESurvival%201.20.1%3C%2Fred%3E%20%7C%20Fabric&bg=grass -motd = "WaldiCraft | Survival 1.20.1 | Fabric" +motd = "WaldiCraft | Survival 26.1.2 | Fabric" # What should we display for the maximum number of players? (Velocity does not support a cap # on the number of players online.) @@ -73,14 +73,9 @@ enable-player-address-logging = true [servers] # Configure your servers here. Each key represents the server's name, and the value # represents the IP address of the server to connect to. -# waldicraft = "167.86.71.76:1338" # xPand VPS -waldicraft = "172.16.4.22:1338" # NHO2 - -# expedition = "167.86.71.76:1339" # xPand VPS -expedition = "172.16.4.22:1339" # NHO2 - -# testing = "167.86.71.76:1340" # xPand VPS -testing = "172.16.4.22:1340" # NHO2 +waldicraft = "server-smp:25565" +expedition = "server-expedition:25565" +testing = "server-testing:25565" # In what order we should try servers when a player logs in or is kicked from a server. try = [ diff --git a/proxy/velocity/plugins/rocketjoin/config.yml b/proxy/velocity/plugins/rocketjoin/config.yml index 3e0f106..42a2584 100644 --- a/proxy/velocity/plugins/rocketjoin/config.yml +++ b/proxy/velocity/plugins/rocketjoin/config.yml @@ -6,7 +6,7 @@ # |_| \_\___/ \___|_|\_\___|\__| \____/ \___/|_|_| |_| # Do not change these values -config-version: 2.4 +config-version: 2.5 already-asked: false # WARNING: If this plugin is running on bungeecord or velocity please read https://wiki.lorenzo0111.me/rocketjoin/bungeecord @@ -78,8 +78,8 @@ conditions: # Set to "disable" to disable this feature # welcome: "disable" welcome: "\n======== Welcome to WaldiCraft ========\n -* Dynamic Map\n -* Server Status\n +* Dynamic Map\n +* Server Status\n * Dynmap Marker Command\n\n You can also switch between worlds! Just type...\n * /waldicraft\n diff --git a/server/expedition/config/vt-craftingtweaks.json b/server/expedition/config/vt-craftingtweaks.json index d7b1e03..eee3d1c 100644 --- a/server/expedition/config/vt-craftingtweaks.json +++ b/server/expedition/config/vt-craftingtweaks.json @@ -1,27 +1,26 @@ { "type": "craftingtweaks", - "version": "1.20", + "version": "26.1", "packs": { - "quality of life": [ + "Quality of Life": [ "rotten flesh to leather", "straight to shapeless", "blackstone cobblestone" ], - "more blocks": [ + "More Blocks": [ "more trapdoors", "more bark", "more stairs", "more bricks" ], - "craftables": [ + "Craftables": [ "craftable gravel", "craftable horse armor", - "craftable name tags", "craftable blackstone" ], - "unpackables": [ + "Unpackables": [ "unpackable nether wart", "unpackable ice" ] } -} +} \ No newline at end of file diff --git a/server/expedition/config/vt-datapacks.json b/server/expedition/config/vt-datapacks.json index 36f059a..6e5915f 100644 --- a/server/expedition/config/vt-datapacks.json +++ b/server/expedition/config/vt-datapacks.json @@ -1,43 +1,34 @@ { "type": "datapacks", - "version": "1.20", + "version": "26.1", "packs": { - "survival": [ - "armor status", - "afk display", - "multiplayer sleep", - "graves", + "Decorative/Cosmetic": [ + "armor statues", "custom nether portals", - "couldron concrete", - "track raw statistics", - "track statistics", - "nether portal coords", - "real time clock" - ], - "items": [ - "armored elytra", - "player head drops" - ], - "mobs": [ - "anti enderman grief", - "double shulker shells", - "dragon drops", - "larger phantoms", "more mob heads", - "villager death messages" - ], - "utilities": [ "name colors", - "spectator night vision", - "spectator conduit power" - ], - "hermitcraft": [ - "tag" + "player head drops" ], - "experimental": [ - "xp management", + "Convenience": [ + "cauldron concrete", "chunk loaders", - "elevators" + "elevators", + "multiplayer sleep", + "spectator conduit power", + "spectator night vision" + ], + "Gameplay Changes": [ + "anti enderman grief", + "armored elytra", + "graves" + ], + "Informative": [ + "afk display", + "nether portal coords", + "real time clock", + "track raw statistics", + "track statistics", + "villager death messages" ] } -} +} \ No newline at end of file diff --git a/server/testing/config/vt-craftingtweaks.json b/server/testing/config/vt-craftingtweaks.json index d7b1e03..eee3d1c 100644 --- a/server/testing/config/vt-craftingtweaks.json +++ b/server/testing/config/vt-craftingtweaks.json @@ -1,27 +1,26 @@ { "type": "craftingtweaks", - "version": "1.20", + "version": "26.1", "packs": { - "quality of life": [ + "Quality of Life": [ "rotten flesh to leather", "straight to shapeless", "blackstone cobblestone" ], - "more blocks": [ + "More Blocks": [ "more trapdoors", "more bark", "more stairs", "more bricks" ], - "craftables": [ + "Craftables": [ "craftable gravel", "craftable horse armor", - "craftable name tags", "craftable blackstone" ], - "unpackables": [ + "Unpackables": [ "unpackable nether wart", "unpackable ice" ] } -} +} \ No newline at end of file diff --git a/server/testing/config/vt-datapacks.json b/server/testing/config/vt-datapacks.json index 36f059a..6e5915f 100644 --- a/server/testing/config/vt-datapacks.json +++ b/server/testing/config/vt-datapacks.json @@ -1,43 +1,34 @@ { "type": "datapacks", - "version": "1.20", + "version": "26.1", "packs": { - "survival": [ - "armor status", - "afk display", - "multiplayer sleep", - "graves", + "Decorative/Cosmetic": [ + "armor statues", "custom nether portals", - "couldron concrete", - "track raw statistics", - "track statistics", - "nether portal coords", - "real time clock" - ], - "items": [ - "armored elytra", - "player head drops" - ], - "mobs": [ - "anti enderman grief", - "double shulker shells", - "dragon drops", - "larger phantoms", "more mob heads", - "villager death messages" - ], - "utilities": [ "name colors", - "spectator night vision", - "spectator conduit power" - ], - "hermitcraft": [ - "tag" + "player head drops" ], - "experimental": [ - "xp management", + "Convenience": [ + "cauldron concrete", "chunk loaders", - "elevators" + "elevators", + "multiplayer sleep", + "spectator conduit power", + "spectator night vision" + ], + "Gameplay Changes": [ + "anti enderman grief", + "armored elytra", + "graves" + ], + "Informative": [ + "afk display", + "nether portal coords", + "real time clock", + "track raw statistics", + "track statistics", + "villager death messages" ] } -} +} \ No newline at end of file diff --git a/server/waldicraft/config/vt-craftingtweaks.json b/server/waldicraft/config/vt-craftingtweaks.json index d7b1e03..eee3d1c 100644 --- a/server/waldicraft/config/vt-craftingtweaks.json +++ b/server/waldicraft/config/vt-craftingtweaks.json @@ -1,27 +1,26 @@ { "type": "craftingtweaks", - "version": "1.20", + "version": "26.1", "packs": { - "quality of life": [ + "Quality of Life": [ "rotten flesh to leather", "straight to shapeless", "blackstone cobblestone" ], - "more blocks": [ + "More Blocks": [ "more trapdoors", "more bark", "more stairs", "more bricks" ], - "craftables": [ + "Craftables": [ "craftable gravel", "craftable horse armor", - "craftable name tags", "craftable blackstone" ], - "unpackables": [ + "Unpackables": [ "unpackable nether wart", "unpackable ice" ] } -} +} \ No newline at end of file diff --git a/server/waldicraft/config/vt-datapacks.json b/server/waldicraft/config/vt-datapacks.json index 36f059a..6e5915f 100644 --- a/server/waldicraft/config/vt-datapacks.json +++ b/server/waldicraft/config/vt-datapacks.json @@ -1,43 +1,34 @@ { "type": "datapacks", - "version": "1.20", + "version": "26.1", "packs": { - "survival": [ - "armor status", - "afk display", - "multiplayer sleep", - "graves", + "Decorative/Cosmetic": [ + "armor statues", "custom nether portals", - "couldron concrete", - "track raw statistics", - "track statistics", - "nether portal coords", - "real time clock" - ], - "items": [ - "armored elytra", - "player head drops" - ], - "mobs": [ - "anti enderman grief", - "double shulker shells", - "dragon drops", - "larger phantoms", "more mob heads", - "villager death messages" - ], - "utilities": [ "name colors", - "spectator night vision", - "spectator conduit power" - ], - "hermitcraft": [ - "tag" + "player head drops" ], - "experimental": [ - "xp management", + "Convenience": [ + "cauldron concrete", "chunk loaders", - "elevators" + "elevators", + "multiplayer sleep", + "spectator conduit power", + "spectator night vision" + ], + "Gameplay Changes": [ + "anti enderman grief", + "armored elytra", + "graves" + ], + "Informative": [ + "afk display", + "nether portal coords", + "real time clock", + "track raw statistics", + "track statistics", + "villager death messages" ] } -} +} \ No newline at end of file