From d6db44884cdc5639eb46a88858b7b28e175603f7 Mon Sep 17 00:00:00 2001 From: kB01 Date: Sat, 14 Dec 2024 02:29:16 +0100 Subject: [PATCH] Added DB to Minecraft-Server, Added Plugins, Added Config-Files --- modules/nixos/services/minecraft/database.nix | 20 ++++++ modules/nixos/services/minecraft/default.nix | 6 +- modules/nixos/services/minecraft/survival.nix | 30 ++++++--- modules/nixos/services/minecraft/velocity.nix | 62 +++++++++++++++++-- 4 files changed, 102 insertions(+), 16 deletions(-) create mode 100644 modules/nixos/services/minecraft/database.nix diff --git a/modules/nixos/services/minecraft/database.nix b/modules/nixos/services/minecraft/database.nix new file mode 100644 index 0000000..62add05 --- /dev/null +++ b/modules/nixos/services/minecraft/database.nix @@ -0,0 +1,20 @@ +{ + inputs, + config, + lib, + pkgs, + system, + ... +}: +let + cfg = config.services.minecraft; +in +{ + config = lib.mkIf (cfg.enable && (cfg.servers.velocity.enable || cfg.servers.survival.enable)) { + services.mysql = { + package = pkgs.mariadb; + enable = true; + settings.mysqld.port = 3459; + }; + }; +} diff --git a/modules/nixos/services/minecraft/default.nix b/modules/nixos/services/minecraft/default.nix index 0aaedc1..14b8d29 100644 --- a/modules/nixos/services/minecraft/default.nix +++ b/modules/nixos/services/minecraft/default.nix @@ -8,13 +8,14 @@ in ./vanilla-test.nix ./survival.nix ./velocity.nix + ./database.nix ]; options.services.minecraft = { enable = lib.mkOption { type = with lib.types; uniq bool; default = false; - description = "Enable minecraft server"; + description = "Enable kBs Minecraft Servers"; }; servers.vanilla.enable = lib.mkOption { type = with lib.types; uniq bool; @@ -34,6 +35,9 @@ in }; config = lib.mkIf cfg.enable { + nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [ + "minecraft-server" + ]; services.minecraft-servers = { enable = true; eula = true; diff --git a/modules/nixos/services/minecraft/survival.nix b/modules/nixos/services/minecraft/survival.nix index 007ba09..f1e0879 100644 --- a/modules/nixos/services/minecraft/survival.nix +++ b/modules/nixos/services/minecraft/survival.nix @@ -11,27 +11,37 @@ let in { config = lib.mkIf (cfg.enable && cfg.servers.survival.enable) { - nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [ - "minecraft-server" - ]; - services.minecraft-servers.servers."survival" = { enable = true; autoStart = true; enableReload = true; - package = pkgs.paperServers.paper-1_21_3-build_25; - whitelist = { - kB01guy = "1ff88b66-beda-4386-85b9-a00a5c27437a"; - }; + package = pkgs.paperServers.paper-1_21_4; serverProperties = { + online-mode = false; + server-ip = "127.0.0.1"; + server-port = 49333; difficulty = 3; gamemode = 1; max-players = 5; }; openFirewall = false; # Should use Velocity Player Proxy - serverProperties.server-port = 41000; + + # Add Plugins symlinks = { - "plugins/LuckPerms.jar" = pkgs.fetchurl { url = "https://download.luckperms.net/1561/bukkit/loader/LuckPerms-Bukkit-5.4.146.jar"; sha512 = "3yx163xas6g30crj41ad8j9gh55ygfh7vbaq12hlm4rxf1npnxh95rhn2nx0qcjd4nl1rz8f8pbvmlh6ka32ahvn6x9rxsc8g6v24jz"; }; + "plugins/LuckPerms.jar" = pkgs.fetchurl { + url = "https://download.luckperms.net/1567/bukkit/loader/LuckPerms-Bukkit-5.4.150.jar"; + sha512 = "39cr9nd68afrrvn80kvdgaml37xkj3mzhv50y3app5j1199hg12kls29r49x06p9rxm6dk7i0j8aww2hw4ahm18andb69a5kp97vf94"; + }; + }; + + # Configure Velocity Modern forwarding https://docs.papermc.io/velocity/player-information-forwarding#configuring-modern-forwarding-for-paper + files."spigot.yml".value = { + settings.bungeecord = false; + }; + files."config/paper-global.yml".value = { + proxies.velocity.enabled = true; + proxies.velocity.online-mode = "online-mode"; + forwarding.secret = ""; # TODO: Add Forewarding Secret using Sops }; }; }; diff --git a/modules/nixos/services/minecraft/velocity.nix b/modules/nixos/services/minecraft/velocity.nix index f092c8a..253fb3f 100644 --- a/modules/nixos/services/minecraft/velocity.nix +++ b/modules/nixos/services/minecraft/velocity.nix @@ -11,20 +11,72 @@ let in { config = lib.mkIf (cfg.enable && cfg.servers.velocity.enable) { - nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [ - "minecraft-server" - ]; + # Configure Server services.minecraft-servers.servers."velocity" = { enable = true; autoStart = true; enableReload = true; + stopCommand = "end"; package = pkgs.velocityServers.velocity; - openFirewall = true; symlinks = { - "plugins/LuckPerms.jar" = pkgs.fetchurl { url = "https://download.luckperms.net/1561/velocity/LuckPerms-Velocity-5.4.146.jar"; sha512 = "1xk7fwb5z3bz0x3hpmnyg7cldzrf9anpp4aavq5s69lz2idzxvkjn9b5iv2yy22p17k26lqwfn8n9ivi59srz2hvgdb1jibqg5d5hj5"; }; + "plugins/LuckPerms.jar" = pkgs.fetchurl { + url = "https://download.luckperms.net/1567/velocity/LuckPerms-Velocity-5.4.150.jar"; + sha512 = "3dr69g2fbav3if44nmifgz7hn86gdf62hcks92kkvwxf4xa3z7x615j426kgljyhgy84hf75wzpai258mg7dj9x17vpkn634kkzwmw6"; + }; + "plugins/Geyser-Velocity.jar" = pkgs.fetchurl { + url = "https://download.geysermc.org/v2/projects/geyser/versions/2.6.0/builds/730/downloads/velocity"; + sha512 = "3shnm8q8vq8j44xxg4qwqwalw6ml9nkzfrzvv8pkblkjp25nfk3h14b4y9vdim1sa2a18mkf8hmhb16g1mka2rh7l0z0yg4kh3lj2i0"; + }; + "plugins/floodgate-velocity.jar" = pkgs.fetchurl { + url = "https://download.geysermc.org/v2/projects/floodgate/versions/2.2.3/builds/114/downloads/velocity"; + sha512 = "1k7qban3gar0fxxi5kp5i8d72k6ck65cvsfbg4nh8bz40jwqn35fx9gj3zbb06x5l8sg6qxl7w2nsn3jan4hjq7m5lwf2c1l1mjaw81"; + }; + "plugins/LibreLogin.jar" = pkgs.fetchurl { + url = "https://modrinth.com/plugin/libre-login/version/0.23.0"; + sha512 = "1wrnp82vv47hhvjp1lxdndmngndykshi7iindnpg61j0v7i8bdgr9rk5qvanvw95gcj59cnhxdmjynq8fm127n4gv53acdidlxz39sd"; + }; + }; + files = { + "velocity.toml".value = { + config-version = "2.7"; # NEVER change this! + bind = "0.0.0.0:25565"; + online-mode = false; + player-info-forwarding-mode = "modern"; + enable-player-address-logging = false; + servers.lobby = ""; + servers.survival = "localhost:${toString config.services.minecraft-servers.servers."survival".serverProperties.server-port}"; + servers.try = [ + "lobby" + "survival" + ]; + advanced.tcp-fast-open = true; + }; }; }; + networking.firewall.allowedTCPPorts = [ 25565 ]; + + # Configure Plugin Luckperms + services.minecraft-servers.servers."velocity".files."plugins/luckperms/config.yml".value = { + storage-method = "mariadb"; + data.address = "localhost:${toString config.services.mysql.settings.mysqld.port}"; + data.database = "luckperms"; + data.username = "luckperms"; + data.password = ""; + }; + services.mysql = { + ensureDatabases = [ "luckperms" ]; + ensureUsers = [ + { + name = "luckperms"; + ensurePermissions = { + "luckperms.*" = "ALL PRIVILEGES"; + }; + } + ]; + }; + # services.mysqlBackup.databases = [ "luckperms" ]; # Add Luckperms Database to Backups + }; }