From c03877d469ecf5984a4507f1817b077c88ca7c6f Mon Sep 17 00:00:00 2001 From: snxraven Date: Fri, 6 Dec 2024 05:52:08 -0500 Subject: [PATCH] first commit --- README.md | 1 + docker-compose.yml | 26 +++ holesail-connector/Dockerfile | 20 +++ holesail-connector/pm2-setup.sh | 19 +++ mc-cluster-image/Dockerfile | 79 +++++++++ mc-cluster-image/connection_manager.js | 24 +++ mc-cluster-image/connections.json | 0 mc-cluster-image/eula | 3 + mc-cluster-image/get_latest_fabric_version.js | 48 ++++++ mc-cluster-image/mod-manager-installer.sh | 91 ++++++++++ mc-cluster-image/pm2/startServer.json | 11 ++ mc-cluster-image/scripts/init-mod-manager.sh | 16 ++ mc-cluster-image/server.properties | 58 +++++++ mc-cluster-image/start.sh | 20 +++ velocity-image/Dockerfile | 62 +++++++ velocity-image/docker-compose.yml | 20 +++ velocity-image/eula | 3 + velocity-image/pm2/startServer.json | 11 ++ velocity-image/start.sh | 16 ++ velocity-image/velocity.toml | 160 ++++++++++++++++++ 20 files changed, 688 insertions(+) create mode 100644 README.md create mode 100644 docker-compose.yml create mode 100644 holesail-connector/Dockerfile create mode 100644 holesail-connector/pm2-setup.sh create mode 100644 mc-cluster-image/Dockerfile create mode 100644 mc-cluster-image/connection_manager.js create mode 100644 mc-cluster-image/connections.json create mode 100644 mc-cluster-image/eula create mode 100644 mc-cluster-image/get_latest_fabric_version.js create mode 100644 mc-cluster-image/mod-manager-installer.sh create mode 100644 mc-cluster-image/pm2/startServer.json create mode 100644 mc-cluster-image/scripts/init-mod-manager.sh create mode 100644 mc-cluster-image/server.properties create mode 100644 mc-cluster-image/start.sh create mode 100644 velocity-image/Dockerfile create mode 100644 velocity-image/docker-compose.yml create mode 100644 velocity-image/eula create mode 100644 velocity-image/pm2/startServer.json create mode 100644 velocity-image/start.sh create mode 100644 velocity-image/velocity.toml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5f5c697 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +This is a test repo, you can igore it for now diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..88ec67b --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,26 @@ +version: '3.8' + +services: + mc-server-1: + image: mc:cluster + container_name: mc-server-1 + environment: + - CONNECTION_STRING=8d4637169e8c7a86fd6cbfe5447af3c36746acf8f30e6c0717e7c04df8d4e1a3cf5e36dac34304f278aaed127169fa291075758aca7ddd001cbed444cd2b0f697a + + mc-server-2: + image: mc:cluster + container_name: mc-server-2 + environment: + - CONNECTION_STRING=42f6766a67ad90a4743fed463e8eac8b9009f6904dc45444b6ae71340eac978a694b84b20d7bf20fa69039216ca35fd8b0ae1a60afc11f5069418f2c8dc7d8490f + + mc-server-3: + image: mc:cluster + container_name: mc-server-3 + environment: + - CONNECTION_STRING=8a04374263b622a53002e6043bc0347095e717d2e9b39e39ce2646a9d84a2e13d0b3c125faf008586104aa5e622f6b7c2d5d4dddef5afb63fd0240f13c72308da5 + + mc-server-4: + image: mc:cluster + container_name: mc-server-4 + environment: + - CONNECTION_STRING=8771ce498444a9dc50f27893ee3aaca4ea97c62662515ba510224306b1adeeeec7c91133f055d574a42c82e98d5225edbd408258f46d28c53a6856aa94bb0d5b36 diff --git a/holesail-connector/Dockerfile b/holesail-connector/Dockerfile new file mode 100644 index 0000000..db89fa8 --- /dev/null +++ b/holesail-connector/Dockerfile @@ -0,0 +1,20 @@ +# Base image +FROM ubuntu:latest + +# Set environment variables +ENV DEBIAN_FRONTEND=noninteractive + +# Install necessary packages and npm +RUN apt-get update && \ + apt-get install -y curl build-essential && \ + curl -fsSL https://deb.nodesource.com/setup_20.x | bash - && \ + apt-get install -y nodejs && \ + npm install -g holesail && npm i pm2 -g \ + apt-get clean && rm -rf /var/lib/apt/lists/* + +# Copy the PM2 setup script +COPY pm2-setup.sh /usr/local/bin/pm2-setup.sh +RUN chmod +x /usr/local/bin/pm2-setup.sh + +# Run the PM2 setup script +CMD ["/usr/local/bin/pm2-setup.sh"] diff --git a/holesail-connector/pm2-setup.sh b/holesail-connector/pm2-setup.sh new file mode 100644 index 0000000..8d6dd1b --- /dev/null +++ b/holesail-connector/pm2-setup.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +# Define connection strings and ports +declare -A connections +connections=( + ["8d4637169e8c7a86fd6cbfe5447af3c36746acf8f30e6c0717e7c04df8d4e1a3cf5e36dac34304f278aaed127169fa291075758aca7ddd001cbed444cd2b0f697a"]=8001 + ["42f6766a67ad90a4743fed463e8eac8b9009f6904dc45444b6ae71340eac978a694b84b20d7bf20fa69039216ca35fd8b0ae1a60afc11f5069418f2c8dc7d8490f"]=8002 + ["8a04374263b622a53002e6043bc0347095e717d2e9b39e39ce2646a9d84a2e13d0b3c125faf008586104aa5e622f6b7c2d5d4dddef5afb63fd0240f13c72308da5"]=8003 + ["8771ce498444a9dc50f27893ee3aaca4ea97c62662515ba510224306b1adeeeec7c91133f055d574a42c82e98d5225edbd408258f46d28c53a6856aa94bb0d5b36"]=8004 +) + +# Launch PM2 processes +for connection in "${!connections[@]}"; do + port=${connections[$connection]} + pm2 start holesail --name "holesail-$port" -- "$connection" --host 0.0.0.0 --port "$port" +done + +# Keep the container running +pm2-runtime start all diff --git a/mc-cluster-image/Dockerfile b/mc-cluster-image/Dockerfile new file mode 100644 index 0000000..88f6ae8 --- /dev/null +++ b/mc-cluster-image/Dockerfile @@ -0,0 +1,79 @@ +FROM ubuntu:latest + +# Update OS and install deps +RUN apt update && apt clean && apt upgrade -y +RUN apt install -y curl apt-utils sudo curl python3 python-is-python3 git wget nano openssh-server apt-transport-https zip + +# Get JDK Ready +RUN wget -O - https://packages.adoptium.net/artifactory/api/gpg/key/public | sudo tee /usr/share/keyrings/adoptium.asc +RUN echo "deb [signed-by=/usr/share/keyrings/adoptium.asc] https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main" | sudo tee /etc/apt/sources.list.d/adoptium.list +RUN cat /etc/apt/sources.list.d/adoptium.list +RUN sudo apt-get update + +RUN apt update + +# Install memory safe JDK +RUN DEBIAN_FRONTEND=noninteractive apt install temurin-21-jdk -y + +# Download fabric server +# This needs to be changed to the version you wish to support. +RUN mkdir -vp /home/mc +RUN mkdir -vp /home/mc/minecraft + +#Auto Accept EULA for MC +COPY eula /home/mc/minecraft/eula.txt +COPY server.properties /home/mc/minecraft/server.properties +# Add a user +RUN useradd mc +# Let user use Bash +RUN usermod --shell /bin/bash mc +# Provide users ownership +RUN chown -R mc:mc /home/mc + +#COPY mod manager installer +COPY mod-manager-installer.sh /var/mod-manager-installer.sh +RUN chmod +x /var/mod-manager-installer.sh + +COPY connection_manager.js /usr/bin/connections +RUN chmod +x /usr/bin/connections +COPY connections.json /var/connections.json +RUN ln -s /usr/bin/connections /usr/bin/con + +ENV PATH="/usr/bin:$PATH" + + +RUN apt-get install -y ca-certificates curl gnupg +RUN sudo mkdir -p /etc/apt/keyrings +RUN curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg +ENV NODE_MAJOR=18 +RUN echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list +RUN apt-get update +RUN apt-get install nodejs -y +RUN npm install -g holesail + +COPY pm2 /var/tools/pm2 +COPY scripts /var/tools/scripts + +COPY get_latest_fabric_version.js /var/tools/scripts + +RUN cd /var/tools/scripts && npm i axios + +RUN data=$(node /var/tools/scripts/get_latest_fabric_version.js 1.21.1) && \ + echo "Download URL: $data" && \ + wget -O /home/mc/minecraft/server.jar "$data" + + +RUN chmod +x -R /var/tools + +# Install PM2 +RUN npm install pm2 -g + + +# Copy over start.sh to allow for backround run +COPY start.sh /start.sh +RUN chmod +x /start.sh + +# Set root pass +RUN echo 'root:noshallpass' | chpasswd + +ENTRYPOINT ["/bin/bash", "/start.sh"] diff --git a/mc-cluster-image/connection_manager.js b/mc-cluster-image/connection_manager.js new file mode 100644 index 0000000..3c1ba08 --- /dev/null +++ b/mc-cluster-image/connection_manager.js @@ -0,0 +1,24 @@ +#!/usr/bin/node +const { execSync } = require('child_process'); +const port = 25565; // Fixed port +const connectionString = process.env.CONNECTION_STRING; + +if (!connectionString) { + console.error("Error: CONNECTION_STRING environment variable is not set."); + process.exit(1); +} + +console.log(`Starting connection with the following details:`); +console.log(`Port: ${port}`); +console.log(`Connection String: ${connectionString}`); + +// Start the connection using PM2 +const pm2cmd = `pm2 start holesail --name holesail_connection -- --live ${port} --connector "${connectionString}"`; + +try { + execSync(pm2cmd, { stdio: 'inherit' }); + console.log(`Connection started successfully on port ${port} using PM2.`); +} catch (err) { + console.error(`Error starting connection: ${err.message}`); + process.exit(1); +} diff --git a/mc-cluster-image/connections.json b/mc-cluster-image/connections.json new file mode 100644 index 0000000..e69de29 diff --git a/mc-cluster-image/eula b/mc-cluster-image/eula new file mode 100644 index 0000000..54e6960 --- /dev/null +++ b/mc-cluster-image/eula @@ -0,0 +1,3 @@ +#By changing the setting below to TRUE you are indicating your agreement to our EULA (https://aka.ms/MinecraftEULA). +#Fri Jun 16 20:59:19 GMT 2023 +eula=true \ No newline at end of file diff --git a/mc-cluster-image/get_latest_fabric_version.js b/mc-cluster-image/get_latest_fabric_version.js new file mode 100644 index 0000000..3437e79 --- /dev/null +++ b/mc-cluster-image/get_latest_fabric_version.js @@ -0,0 +1,48 @@ +const axios = require('axios'); + +// Function to get the latest Fabric download URL +async function getLatestFabricDownloadURL(gameVersion) { + try { + // Fetch the loader versions for the given game version + const loaderResponse = await axios.get(`https://meta.fabricmc.net/v2/versions/loader/${gameVersion}`); + const loaderVersions = loaderResponse.data; + + if (loaderVersions.length === 0) { + throw new Error('No loader versions found for this game version'); + } + + // Get the latest loader version details (assuming the first is the latest) + const latestLoader = loaderVersions[0].loader.version; + + // Fetch the installer versions + const installerResponse = await axios.get('https://meta.fabricmc.net/v2/versions/installer'); + const installerVersions = installerResponse.data; + + if (installerVersions.length === 0) { + throw new Error('No installer versions found'); + } + + // Get the latest installer version (assuming the first is the latest) + const latestInstaller = installerVersions[0].version; + + // Construct the download URL + const downloadURL = `https://meta.fabricmc.net/v2/versions/loader/${gameVersion}/${latestLoader}/${latestInstaller}/server/jar`; + + console.log(downloadURL); + return downloadURL; + } catch (error) { + console.error('Error fetching Fabric versions:', error.message); + } +} + +// Retrieve the game version from command line arguments +const gameVersion = process.argv[2]; + +// Check if game version is provided +if (!gameVersion) { + console.error('Please provide a game version as an argument'); + process.exit(1); +} + +// Call the function with the provided game version +getLatestFabricDownloadURL(gameVersion); diff --git a/mc-cluster-image/mod-manager-installer.sh b/mc-cluster-image/mod-manager-installer.sh new file mode 100644 index 0000000..ed301ab --- /dev/null +++ b/mc-cluster-image/mod-manager-installer.sh @@ -0,0 +1,91 @@ +#!/bin/bash + +MIN_NODE_VERSION=12 +DOWNLOAD_DIR="/tmp/mod-manager-install" +INSTALL_DIR="/usr/local/lib/mod-manager" +BINARY_PATH="/usr/bin/mod-manager" +CYAN="\033[1;96m" +RED="\033[0;91m" +GREEN="\033[0;92m" +RESET='\033[0m' + +print () { + echo -e "$1 $2 $RESET" +} + +info () { + print "$CYAN" "$1" +} + +error() { + print "$RED" "$1" +} + +success() { + print "$GREEN" "$1" +} + +if [ "$EUID" -ne 0 ] +then + error "This script must be ran as root. Please use sudo." + exit +fi + +rm -rf "$DOWNLOAD_DIR" || exit +mkdir -p "$DOWNLOAD_DIR" || exit + +# Verify compatible version of node is installed +info "Verifying node verison..." +NODE_VERSION_STR=$(node --version) +if [[ "$?" -eq 127 ]] +then + error "Node does not appear to be installed. Please install Node version $MIN_NODE_VERSION or higher" + exit +fi + +npm --version +if [[ "$?" -eq 127 ]] +then + error "Npm does not appear to be installed. Please install npm and re run the installer" + exit +fi + + +NODE_VERSION=$( (echo $NODE_VERSION_STR | sed 's/\..*//') | sed "s/v//") +if [[ "$NODE_VERSION" -ge "$MIN_NODE_VERSION" ]] +then + success "A version of node greater than $MIN_NODE_VERSION is installed!" +else + error "A version of node greater than $MIN_NODE_VERSION is required. Please install it and re run this install script" + exit +fi + +# Download source files +info "Downloading mod-manager source..." +git clone "https://git.ssh.surf/snxraven/mod-manager.git" "$DOWNLOAD_DIR" || exit + +# Compile +info "Compiling..." +cd "$DOWNLOAD_DIR" || exit +npm install --save || exit +npm install -g @vercel/ncc || exit +npx tsc || exit +ncc build build/ts/mod-manager.js -o build/flat/ || exit + +# Install +info "Installing..." +rm -rf "$INSTALL_DIR" || exit +mkdir -p "$INSTALL_DIR" || exit + +cp -r build/flat/* "$INSTALL_DIR" || exit + +# Creating executable +info "Creating executable..." +echo "node $INSTALL_DIR/index.js \$@" > $BINARY_PATH || exit +chmod +x $BINARY_PATH || exit + +# Cleaning up +info "Cleaning up..." +rm -rf "$DOWNLOAD_DIR" || exit + +success "Successfully installed mod-manager. Try mod-manager -h to learn more!" diff --git a/mc-cluster-image/pm2/startServer.json b/mc-cluster-image/pm2/startServer.json new file mode 100644 index 0000000..a572e61 --- /dev/null +++ b/mc-cluster-image/pm2/startServer.json @@ -0,0 +1,11 @@ +{ + "apps": [ + { + "name": "MineCraft Server", + "cwd": "/home/mc/minecraft", + "script": "java -Xms1400M -Xmx4096M -jar server.jar --nogui", + "args": "", + "max_restarts": 5 + } + ] +} \ No newline at end of file diff --git a/mc-cluster-image/scripts/init-mod-manager.sh b/mc-cluster-image/scripts/init-mod-manager.sh new file mode 100644 index 0000000..43bd20e --- /dev/null +++ b/mc-cluster-image/scripts/init-mod-manager.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +cd /home/mc/minecraft + +flag_file="mod-manager.init" + +if [ ! -f "$flag_file" ]; then + /var/mod-manager-installer.sh + echo "1.21.1" | mod-manager init + + + touch "$flag_file" + su - mc -c "pm2 restart all" +else + echo "Mod Manager is initialized already! Skipping..." +fi diff --git a/mc-cluster-image/server.properties b/mc-cluster-image/server.properties new file mode 100644 index 0000000..5fa85a2 --- /dev/null +++ b/mc-cluster-image/server.properties @@ -0,0 +1,58 @@ +#Minecraft server properties +#Fri Jun 16 21:24:32 GMT 2023 +enable-jmx-monitoring=false +rcon.port=25575 +level-seed= +gamemode=survival +enable-command-block=false +enable-query=false +generator-settings={} +enforce-secure-profile=false +level-name=world +motd=A Minecraft Server +query.port=25565 +pvp=true +generate-structures=true +max-chained-neighbor-updates=1000000 +difficulty=easy +network-compression-threshold=256 +max-tick-time=60000 +require-resource-pack=false +use-native-transport=true +max-players=20 +online-mode=true +enable-status=true +allow-flight=false +initial-disabled-packs= +broadcast-rcon-to-ops=true +view-distance=10 +server-ip= +resource-pack-prompt= +allow-nether=true +server-port=25565 +enable-rcon=false +sync-chunk-writes=true +op-permission-level=4 +prevent-proxy-connections=false +hide-online-players=false +resource-pack= +entity-broadcast-range-percentage=100 +simulation-distance=10 +rcon.password= +player-idle-timeout=0 +force-gamemode=false +rate-limit=0 +hardcore=false +white-list=false +broadcast-console-to-ops=true +spawn-npcs=true +spawn-animals=true +function-permission-level=2 +initial-enabled-packs=vanilla +level-type=minecraft\:normal +text-filtering-config= +spawn-monsters=true +enforce-whitelist=false +spawn-protection=16 +resource-pack-sha1= +max-world-size=29999984 diff --git a/mc-cluster-image/start.sh b/mc-cluster-image/start.sh new file mode 100644 index 0000000..fb4a76c --- /dev/null +++ b/mc-cluster-image/start.sh @@ -0,0 +1,20 @@ +#!/bin/sh +su - mc -c "cd /var/tools/pm2 && pm2 start startServer.json" + +# Init mod manager in 15 seconds, allow server to generate first +sleep 15 && sh /var/tools/scripts/init-mod-manager.sh + +cd / + + +# Run the specified commands +con + +chmod 755 /home/mc +chown mc:mc /home/mc/* -R +chown mc:mc /home/mc/minecraft/.mod-manager + +# get log +su - mc -c "pm2 log" + +tail -f /dev/null diff --git a/velocity-image/Dockerfile b/velocity-image/Dockerfile new file mode 100644 index 0000000..240b42a --- /dev/null +++ b/velocity-image/Dockerfile @@ -0,0 +1,62 @@ +FROM ubuntu:latest + +# Update OS and install deps +RUN apt update && apt clean && apt upgrade -y +RUN apt install -y curl apt-utils sudo curl python3 python-is-python3 git wget nano openssh-server apt-transport-https zip + +# Get JDK Ready +RUN wget -O - https://packages.adoptium.net/artifactory/api/gpg/key/public | sudo tee /usr/share/keyrings/adoptium.asc +RUN echo "deb [signed-by=/usr/share/keyrings/adoptium.asc] https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main" | sudo tee /etc/apt/sources.list.d/adoptium.list +RUN cat /etc/apt/sources.list.d/adoptium.list +RUN sudo apt-get update + +RUN apt update + +# Install memory safe JDK +RUN DEBIAN_FRONTEND=noninteractive apt install temurin-21-jdk -y + +# Download fabric server +# This needs to be changed to the version you wish to support. +RUN mkdir -vp /home/mc +RUN mkdir -vp /home/mc/minecraft + +# Add a user +RUN useradd mc +# Let user use Bash +RUN usermod --shell /bin/bash mc +# Provide users ownership +RUN chown -R mc:mc /home/mc + + +ENV PATH="/usr/bin:$PATH" + + +RUN apt-get install -y ca-certificates curl gnupg +RUN sudo mkdir -p /etc/apt/keyrings +RUN curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg +ENV NODE_MAJOR=18 +RUN echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list +RUN apt-get update +RUN apt-get install nodejs -y +RUN npm install -g holesail + +COPY pm2 /var/tools/pm2 + +RUN wget -O /home/mc/minecraft/server.jar https://api.papermc.io/v2/projects/velocity/versions/3.4.0-SNAPSHOT/builds/454/downloads/velocity-3.4.0-SNAPSHOT-454.jar + + +RUN chmod +x -R /var/tools + +# Install PM2 +RUN npm install pm2 -g + +COPY velocity.toml /home/mc/minecraft + +# Copy over start.sh to allow for backround run +COPY start.sh /start.sh +RUN chmod +x /start.sh + +# Set root pass +RUN echo 'root:noshallpass' | chpasswd + +ENTRYPOINT ["/bin/bash", "/start.sh"] diff --git a/velocity-image/docker-compose.yml b/velocity-image/docker-compose.yml new file mode 100644 index 0000000..919234d --- /dev/null +++ b/velocity-image/docker-compose.yml @@ -0,0 +1,20 @@ +version: '3.8' +services: + + holesail: + build: + context: ../holesail-connector + dockerfile: Dockerfile + container_name: holesail-connections + ports: + - "8001:8001" + - "8002:8002" + - "8003:8003" + - "8004:8004" + + volicy-proxy: + image: velocity:proxy + container_name: volicy-proxy + ports: + - "25565" + diff --git a/velocity-image/eula b/velocity-image/eula new file mode 100644 index 0000000..54e6960 --- /dev/null +++ b/velocity-image/eula @@ -0,0 +1,3 @@ +#By changing the setting below to TRUE you are indicating your agreement to our EULA (https://aka.ms/MinecraftEULA). +#Fri Jun 16 20:59:19 GMT 2023 +eula=true \ No newline at end of file diff --git a/velocity-image/pm2/startServer.json b/velocity-image/pm2/startServer.json new file mode 100644 index 0000000..7fef1b8 --- /dev/null +++ b/velocity-image/pm2/startServer.json @@ -0,0 +1,11 @@ +{ + "apps": [ + { + "name": "MineCraft Server Proxy", + "cwd": "/home/mc/minecraft", + "script": "java -Xms1G -Xmx1G -XX:+UseG1GC -XX:G1HeapRegionSize=4M -XX:+UnlockExperimentalVMOptions -XX:+ParallelRefProcEnabled -XX:+AlwaysPreTouch -jar server.jar", + "args": "", + "max_restarts": 5 + } + ] +} \ No newline at end of file diff --git a/velocity-image/start.sh b/velocity-image/start.sh new file mode 100644 index 0000000..ada6cb2 --- /dev/null +++ b/velocity-image/start.sh @@ -0,0 +1,16 @@ +#!/bin/sh +su - mc -c "cd /var/tools/pm2 && pm2 start startServer.json" +cd / + + +# Run the specified commands +con + +chmod 755 /home/mc +chown mc:mc /home/mc/* -R + + +# get log +su - mc -c "pm2 log" + +tail -f /dev/null diff --git a/velocity-image/velocity.toml b/velocity-image/velocity.toml new file mode 100644 index 0000000..e2eef5d --- /dev/null +++ b/velocity-image/velocity.toml @@ -0,0 +1,160 @@ +# Config version. Do not change this +config-version = "2.7" + +# What port should the proxy be bound to? By default, we'll bind to all addresses on port 25565. +bind = "0.0.0.0:25565" + +# What should be the MOTD? This gets displayed when the player adds your server to +# their server list. Only MiniMessage format is accepted. +motd = "<#09add3>A Velocity Server" + +# What should we display for the maximum number of players? (Velocity does not support a cap +# on the number of players online.) +show-max-players = 500 + +# Should we authenticate players with Mojang? By default, this is on. +online-mode = true + +# Should the proxy enforce the new public key security standard? By default, this is on. +force-key-authentication = true + +# If client's ISP/AS sent from this proxy is different from the one from Mojang's +# authentication server, the player is kicked. This disallows some VPN and proxy +# connections but is a weak form of protection. +prevent-client-proxy-connections = false + +# Should we forward IP addresses and other data to backend servers? +# Available options: +# - "none": No forwarding will be done. All players will appear to be connecting +# from the proxy and will have offline-mode UUIDs. +# - "legacy": Forward player IPs and UUIDs in a BungeeCord-compatible format. Use this +# if you run servers using Minecraft 1.12 or lower. +# - "bungeeguard": Forward player IPs and UUIDs in a format supported by the BungeeGuard +# plugin. Use this if you run servers using Minecraft 1.12 or lower, and are +# unable to implement network level firewalling (on a shared host). +# - "modern": Forward player IPs and UUIDs as part of the login process using +# Velocity's native forwarding. Only applicable for Minecraft 1.13 or higher. +player-info-forwarding-mode = "NONE" + +# If you are using modern or BungeeGuard IP forwarding, configure a file that contains a unique secret here. +# The file is expected to be UTF-8 encoded and not empty. +forwarding-secret-file = "forwarding.secret" + +# Announce whether or not your server supports Forge. If you run a modded server, we +# suggest turning this on. +# +# If your network runs one modpack consistently, consider using ping-passthrough = "mods" +# instead for a nicer display in the server list. +announce-forge = false + +# If enabled (default is false) and the proxy is in online mode, Velocity will kick +# any existing player who is online if a duplicate connection attempt is made. +kick-existing-players = false + +# Should Velocity pass server list ping requests to a backend server? +# Available options: +# - "disabled": No pass-through will be done. The velocity.toml and server-icon.png +# will determine the initial server list ping response. +# - "mods": Passes only the mod list from your backend server into the response. +# The first server in your try list (or forced host) with a mod list will be +# used. If no backend servers can be contacted, Velocity won't display any +# mod information. +# - "description": Uses the description and mod list from the backend server. The first +# server in the try (or forced host) list that responds is used for the +# description and mod list. +# - "all": Uses the backend server's response as the proxy response. The Velocity +# configuration is used if no servers could be contacted. +ping-passthrough = "DISABLED" + +# If not enabled (default is true) player IP addresses will be replaced by in logs +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. +lobby = "127.0.0.1:8001" +factions = "127.0.0.1:8002" +minigames = "127.0.0.1:8003" +idk = "127.0.0.1:8004" + +# In what order we should try servers when a player logs in or is kicked from a server. +try = [ + "lobby" +] + +[forced-hosts] +# Configure your forced hosts here. +"lobby.example.com" = [ + "lobby" +] +"factions.example.com" = [ + "factions" +] +"minigames.example.com" = [ + "minigames" +] + +[advanced] +# How large a Minecraft packet has to be before we compress it. Setting this to zero will +# compress all packets, and setting it to -1 will disable compression entirely. +compression-threshold = 256 + +# How much compression should be done (from 0-9). The default is -1, which uses the +# default level of 6. +compression-level = -1 + +# How fast (in milliseconds) are clients allowed to connect after the last connection? By +# default, this is three seconds. Disable this by setting this to 0. +login-ratelimit = 3000 + +# Specify a custom timeout for connection timeouts here. The default is five seconds. +connection-timeout = 5000 + +# Specify a read timeout for connections here. The default is 30 seconds. +read-timeout = 30000 + +# Enables compatibility with HAProxy's PROXY protocol. If you don't know what this is for, then +# don't enable it. +haproxy-protocol = false + +# Enables TCP fast open support on the proxy. Requires the proxy to run on Linux. +tcp-fast-open = false + +# Enables BungeeCord plugin messaging channel support on Velocity. +bungee-plugin-message-channel = true + +# Shows ping requests to the proxy from clients. +show-ping-requests = false + +# By default, Velocity will attempt to gracefully handle situations where the user unexpectedly +# loses connection to the server without an explicit disconnect message by attempting to fall the +# user back, except in the case of read timeouts. BungeeCord will disconnect the user instead. You +# can disable this setting to use the BungeeCord behavior. +failover-on-unexpected-server-disconnect = true + +# Declares the proxy commands to 1.13+ clients. +announce-proxy-commands = true + +# Enables the logging of commands +log-command-executions = false + +# Enables logging of player connections when connecting to the proxy, switching servers +# and disconnecting from the proxy. +log-player-connections = true + +# Allows players transferred from other hosts via the +# Transfer packet (Minecraft 1.20.5) to be received. +accepts-transfers = false + +[query] +# Whether to enable responding to GameSpy 4 query responses or not. +enabled = false + +# If query is enabled, on what port should the query protocol listen on? +port = 25565 + +# This is the map name that is reported to the query services. +map = "Velocity" + +# Whether plugins should be shown in query response by default or not +show-plugins = false \ No newline at end of file