tsuki: set up minecraft server

main
Oystein Kristoffer Tveit 2023-01-16 16:06:34 +01:00
parent eb5a90364c
commit 1b0ed26f15
Signed by: oysteikt
GPG Key ID: 9F2F7D8250F35146
13 changed files with 1102 additions and 70 deletions

View File

@ -44,6 +44,10 @@
url = "git+file:///home/h7x4/git/maunium-stickerpicker-nix";
};
minecraft = {
url = "github:infinidoge/nix-minecraft";
};
vscode-server = {
url = "github:msteen/nixos-vscode-server";
flake = false;
@ -72,6 +76,7 @@
fonts,
osuchan,
maunium-stickerpicker,
minecraft,
dotfiles,
website
}: let
@ -133,6 +138,7 @@
secrets.outputs.nixos-config
osuchan.outputs.nixosModules.default
minecraft.outputs.nixosModules.minecraft-servers
{
config._module.args = {

View File

@ -212,14 +212,16 @@ in {
shell = pkgs.zsh;
extraGroups = [
"wheel"
"networkmanager"
"docker"
"disk"
"audio"
"video"
"libvirtd"
"disk"
"docker"
"input"
"libvirtd"
"media"
"minecraft"
"networkmanager"
"video"
"wheel"
];
};

View File

@ -12,6 +12,7 @@
./services/jupyter.nix
# ./services/keycloak.nix
./services/matrix
./services/minecraft
./services/nginx
./services/osuchan.nix
./services/plex.nix

View File

@ -1,64 +0,0 @@
{ pkgs, lib, ... }:
# See https://github.com/InfinityGhost/nixos-workstation/blob/master/minecraft-server.nix
let
allocatedMemory = "4096M";
in {
services.minecraft-server = let
version = "1.18.1";
spigot = pkgs.minecraft-server.overrideAttrs (old: {
src = pkgs.fetchurl {
url = "https://hub.spigotmc.org/jenkins/job/BuildTools/141/artifact/target/BuildTools.jar";
sha1 = "?";
};
buildPhase = ''
cat > minecraft-server << EOF
#!${pkgs.bash}/bin/sh
exec ${pkgs.adoptopenjdk-jre-hotspot-bin-17}/bin/java \$@ -jar $out/bin/spigot-${version}.jar nogui
java -jar $src --rev ${version}
'';
installPhase = ''
mkdir -p $out/bin $out/lib/minecraft
cp -v spigot-${version}.jar $out/lib/minecraft
cp -v minecraft-server $out/bin
chmod +x $out/bin/minecraft-server
'';
});
in {
enable = true;
eula = true;
package = pkgs.spigot;
declarative = true;
dataDir = "/home/h7x4/minecraft";
openFirewall = true;
jvmOpts = lib.concatStringsSep " " [
"-Xmx${allocatedMemory}"
"-Xms${allocatedMemory}"
"-XX:+UseG1GC"
"-XX:ParallelGCThreads=2"
"-XX:MinHeapFreeRatio=5"
"-XX:MaxHeapFreeRatio=10"
];
serverProperties = {
motd = "NixOS Minecraft Server";
server-port = 25565;
difficulty = 2;
gamemode = 0;
max-players = 5;
white-list = false;
enable-rcon = false;
allow-flight = true;
};
# whitelist = {};
};
}

View File

@ -0,0 +1,122 @@
{ pkgs, lib, config, inputs, secrets, ... }:
{
services.minecraft-servers = {
enable = true;
eula = true;
openFirewall = true;
dataDir = "${config.machineVars.dataDrives.default}/var/minecraft";
servers.kakuland = {
enable = true;
serverProperties = {
allow-flight = true;
allow-nether = true;
broadcast-console-to-ops = true;
broadcast-rcon-to-ops = true;
debug = false;
difficulty = "easy";
enable-command-block = false;
enable-jmx-monitoring = false;
enable-query = false;
enable-rcon = false;
enable-status = true;
enforce-secure-profile = false;
enforce-whitelist = false;
entity-broadcast-range-percentage = 100;
force-gamemode = false;
function-permission-level = 2;
gamemode = "survival";
generate-structures = true;
# generator-settings={}
hardcore = false;
hide-online-players = false;
level-name = "world";
# level-seed =
level-type = "default";
max-chained-neighbor-updates = 1000000;
max-players = 2;
max-tick-time = 60000;
max-world-size = 29999984;
motd = "Yaba Saba";
network-compression-threshold = 256;
online-mode = true;
op-permission-level = 4;
player-idle-timeout = 0;
prevent-proxy-connections = false;
previews-chat = false;
pvp = true;
# "query.port" = 25565;
rate-limit = 0;
# rcon.password=
# rcon.port=25575
require-resource-pack = false;
# resource-pack=
# resource-pack-prompt=
# resource-pack-sha1=
server-ip = "0.0.0.0";
server-port = 25565;
simulation-distance = 10;
spawn-animals = true;
spawn-monsters = true;
spawn-npcs = true;
spawn-protection = 16;
sync-chunk-writes = true;
# text-filtering-config=
use-native-transport = true;
view-distance = 10;
white-list = true;
};
package = inputs.minecraft.packages.x86_64-linux.paper-server;
jvmOpts = "-Xmx5G -Xms5G -XX:+UseG1GC";
symlinks = let
rawFile = file: pkgs.runCommandLocal (builtins.baseNameOf file) {} ''
ln -s ${file} $out
'';
yamlFormat = pkgs.formats.yaml {};
yamlConfig = name: file: env:
yamlFormat.generate "minecraft-server-plugin-${name}-configuration.yml" (import file env);
in {
"server-icon.png" = rawFile ./extraFiles/server-icon.png;
"plugins/dynmap/configuration.txt" =
yamlConfig "dynmap" ./pluginConfigs/dynmap.nix { inherit secrets; };
"plugins/VeinMiner/config.yml" =
yamlConfig "VeinMiner" ./pluginConfigs/veinMiner.nix { };
"plugins/SmoothTimber/config.yml" =
yamlConfig "SmoothTimber" ./pluginConfigs/smoothTimber.nix { };
"plugins/SilkSpawners/config.yml" =
yamlConfig "SilkSpawners" ./pluginConfigs/silkSpawners.nix { };
"plugins/OnePlayerSleep/config.yml" =
yamlConfig "OnePlayerSleep" ./pluginConfigs/onePlayerSleep.nix { };
"plugins/ServerBackup/config.yml" =
yamlConfig "ServerBackup" ./pluginConfigs/serverBackup.nix { };
};
};
};
services.postgresql = let
o = lib.optional;
db = name: {
inherit name;
ensurePermissions = {
"DATABASE \"${name}\"" = "ALL PRIVILEGES";
};
};
in {
enable = true;
ensureDatabases =
(o config.services.minecraft-servers.enable "dynmap");
ensureUsers =
(o config.services.minecraft-servers.enable (db "dynmap"));
};
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 520 B

View File

@ -0,0 +1,565 @@
{ secrets, ... }:
{
# All paths in this configuration file are relative to Dynmap's data-folder: minecraft_server/plugins/dynmap/
# All map templates are defined in the templates directory
# To use the HDMap very-low-res (2 ppb) map templates as world defaults, set value to vlowres
# The definitions of these templates are in normal-vlowres.txt, nether-vlowres.txt, and the_end-vlowres.txt
# To use the HDMap low-res (4 ppb) map templates as world defaults, set value to lowres
# The definitions of these templates are in normal-lowres.txt, nether-lowres.txt, and the_end-lowres.txt
# To use the HDMap hi-res (16 ppb) map templates (these can take a VERY long time for initial fullrender), set value to hires
# The definitions of these templates are in normal-hires.txt, nether-hires.txt, and the_end-hires.txt
# To use the HDMap low-res (4 ppb) map templates, with support for boosting resolution selectively to hi-res (16 ppb), set value to low_boost_hi
# The definitions of these templates are in normal-low_boost_hi.txt, nether-low_boost_hi.txt, and the_end-low_boost_hi.txt
# To use the HDMap hi-res (16 ppb) map templates, with support for boosting resolution selectively to vhi-res (32 ppb), set value to hi_boost_vhi
# The definitions of these templates are in normal-hi_boost_vhi.txt, nether-hi_boost_vhi.txt, and the_end-hi_boost_vhi.txt
# To use the HDMap hi-res (16 ppb) map templates, with support for boosting resolution selectively to xhi-res (64 ppb), set value to hi_boost_xhi
# The definitions of these templates are in normal-hi_boost_xhi.txt, nether-hi_boost_xhi.txt, and the_end-hi_boost_xhi.txt
deftemplatesuffix = "hires";
# Set default tile scale (0 = 128px x 128x, 1 = 256px x 256px, 2 = 512px x 512px, 3 = 1024px x 1024px, 4 = 2048px x 2048px) - 0 is default
# Note: changing this value will result in all maps that use the default value being required to be fully rendered
#defaulttilescale = 0;
# Map storage scheme: only uncomment one 'type' value
# filetree: classic and default scheme: tree of files, with all map data under the directory indicated by 'tilespath' setting
# sqlite: single SQLite database file (this can get VERY BIG), located at 'dbfile' setting (default is file dynmap.db in data directory)
# mysql: MySQL database, at hostname:port in database, accessed via userid with password
# mariadb: MariaDB database, at hostname:port in database, accessed via userid with password
# postgres: PostgreSQL database, at hostname:port in database, accessed via userid with password
storage = {
type = "postgres";
hostname = "localhost";
port = secrets.ports.postgres;
database = "dynmap";
userid = "dynmap";
password = builtins.readFile secrets.keys.postgres.dynmap;
flags = "?allowReconnect=true&autoReconnect=true";
};
components = [
{
class = "org.dynmap.ClientConfigurationComponent";
}
{
class = "org.dynmap.InternalClientUpdateComponent";
sendhealth = true;
sendposition = true;
allowwebchat = true;
webchat-interval = 5;
hidewebchatip = false;
trustclientname = false;
includehiddenplayers = false;
# (optional) if true, color codes in player display names are used
use-name-colors = true;
# (optional) if true, player login IDs will be used for web chat when their IPs match
use-player-login-ip = true;
# (optional) if use-player-login-ip is true, setting this to true will cause chat messages not matching a known player IP to be ignored
require-player-login-ip = true;
# (optional) block player login IDs that are banned from chatting
block-banned-player-chat = true;
# Require login for web-to-server chat (requires login-enabled: true)
webchat-requires-login = false;
# If set to true, users must have dynmap.webchat permission in order to chat
webchat-permissions = false;
# Limit length of single chat messages
chatlengthlimit = 256;
# # Optional - make players hidden when they are inside/underground/in shadows (#=light level: 0=full shadow,15=sky)
# hideifshadow = 4;
# # Optional - make player hidden when they are under cover (#=sky light level,0=underground,15=open to sky)
# hideifundercover = 14;
# # (Optional) if true, players that are crouching/sneaking will be hidden
hideifsneaking = false;
# If true, player positions/status is protected (login with ID with dynmap.playermarkers.seeall permission required for info other than self)
protected-player-info = false;
# If true, hide players with invisibility potion effects active
hide-if-invisiblity-potion = true;
# If true, player names are not shown on map, chat, list
hidenames = false;
}
# {
# class = "org.dynmap.JsonFileClientUpdateComponent";
# writeinterval = 1;
# sendhealth = true;
# sendposition = true;
# allowwebchat = true;
# webchat-interval = 5;
# hidewebchatip = false;
# includehiddenplayers = false;
# use-name-colors = false;
# use-player-login-ip = false;
# require-player-login-ip = false;
# block-banned-player-chat = true;
# hideifshadow = 0;
# hideifundercover = 0;
# hideifsneaking = false;
# # Require login for web-to-server chat (requires login-enabled: true)
# webchat-requires-login = false;
# # If set to true, users must have dynmap.webchat permission in order to chat
# webchat-permissions = false;
# # Limit length of single chat messages
# chatlengthlimit = 256;
# hide-if-invisiblity-potion = true;
# hidenames = false;
# }
{
class = "org.dynmap.SimpleWebChatComponent";
allowchat = false;
# If true, web UI users can supply name for chat using 'playername' URL parameter. 'trustclientname' must also be set true.
allowurlname = false;
}
# Note: this component is needed for the dmarker commands, and for the Marker API to be available to other plugins
{
class = "org.dynmap.MarkersComponent";
type = "markers";
showlabel = false;
enablesigns = false;
# Default marker set for sign markers
default-sign-set = "markers";
# (optional) add spawn point markers to standard marker layer
showspawn = true;
spawnicon = "world";
spawnlabel = "Spawn";
# (optional) layer for showing offline player's positions (for 'maxofflinetime' minutes after logoff)
showofflineplayers = false;
offlinelabel = "Offline";
offlineicon = "offlineuser";
offlinehidebydefault = true;
offlineminzoom = 0;
maxofflinetime = 30;
# (optional) layer for showing player's spawn beds
showspawnbeds = false;
spawnbedlabel = "Spawn Beds";
spawnbedicon = "bed";
spawnbedhidebydefault = true;
spawnbedminzoom = 0;
spawnbedformat = "%name%'s bed";
# (optional) show world border (vanilla 1.8+)
showworldborder = true;
worldborderlabel = "Border";
}
{
class = "org.dynmap.ClientComponent";
type = "chat";
allowurlname = false;
}
{
class = "org.dynmap.ClientComponent";
type = "chatballoon";
focuschatballoons = false;
}
{
class = "org.dynmap.ClientComponent";
type = "chatbox";
showplayerfaces = true;
messagettl = 5;
# Optional: set number of lines in scrollable message history: if set, messagettl is not used to age out messages
# scrollback = 100;
# Optional: set maximum number of lines visible for chatbox
# visiblelines = 10;
# Optional: send push button
sendbutton = false;
}
{
class = "org.dynmap.ClientComponent";
type = "playermarkers";
showplayerfaces = true;
showplayerhealth = true;
# If true, show player body too (only valid if showplayerfaces=true)
showplayerbody = false;
# Option to make player faces small - don't use with showplayerhealth or largeplayerfaces
smallplayerfaces = false;
# Option to make player faces larger - don't use with showplayerhealth or smallplayerfaces
largeplayerfaces = false;
# Optional - make player faces layer hidden by default
hidebydefault = false;
# Optional - ordering priority in layer menu (low goes before high - default is 0)
layerprio = 0;
# Optional - label for player marker layer (default is 'Players')
label = "Players";
}
# {
# class = "org.dynmap.ClientComponent";
# type = "digitalclock";
# }
{
class = "org.dynmap.ClientComponent";
type = "link";
}
{
class = "org.dynmap.ClientComponent";
type = "timeofdayclock";
showdigitalclock = true;
showweather = true;
}
# Mouse pointer world coordinate display
{
class = "org.dynmap.ClientComponent";
type = "coord";
label = "Location";
hidey = false;
show-mcr = false;
show-chunk = false;
}
# Note: more than one logo component can be defined
# {
# class = "org.dynmap.ClientComponent";
# type = "logo";
# text = "Dynmap";
# #logourl: "images/block_surface.png"
# linkurl = "http://forums.bukkit.org/threads/dynmap.489/";
# # Valid positions: top-left, top-right, bottom-left, bottom-right
# position = "bottom-right";
# }
# {
# class = "org.dynmap.ClientComponent";
# type = "inactive";
# timeout = 1800; # in seconds (1800 seconds = 30 minutes)
# redirecturl = "inactive.html";
# # showmessage = "You were inactive for too long.";
# }
# {
# class = "org.dynmap.TestComponent";
# stuff = "This is some configuration-value";
# }
];
# Treat hiddenplayers.txt as a whitelist for players to be shown on the map? (Default false)
display-whitelist = false;
# How often a tile gets rendered (in seconds).
renderinterval = 1;
# How many tiles on update queue before accelerate render interval
renderacceleratethreshold = 60;
# How often to render tiles when backlog is above renderacceleratethreshold
renderaccelerateinterval = 0.2;
# How many update tiles to work on at once (if not defined, default is 1/2 the number of cores)
tiles-rendered-at-once = 2;
# If true, use normal priority threads for rendering (versus low priority) - this can keep rendering
# from starving on busy Windows boxes (Linux JVMs pretty much ignore thread priority), but may result
# in more competition for CPU resources with other processes
usenormalthreadpriority = true;
# Save and restore pending tile renders - prevents their loss on server shutdown or /reload
saverestorepending = true;
# Save period for pending jobs (in seconds): periodic saving for crash recovery of jobs
save-pending-period = 900;
# Zoom-out tile update period - how often to scan for and process tile updates into zoom-out tiles (in seconds)
zoomoutperiod = 30;
# Control whether zoom out tiles are validated on startup (can be needed if zoomout processing is interrupted, but can be expensive on large maps)
initial-zoomout-validate = true;
# Default delay on processing of updated tiles, in seconds. This can reduce potentially expensive re-rendering
# of frequently updated tiles (such as due to machines, pistons, quarries or other automation). Values can
# also be set on individual worlds and individual maps.
tileupdatedelay = 30;
# Tile hashing is used to minimize tile file updates when no changes have occurred - set to false to disable
enabletilehash = true;
# Optional - hide ores: render as normal stone (so that they aren't revealed by maps)
#hideores = true;
# Optional - enabled BetterGrass style rendering of grass and snow block sides
#better-grass = true;
# Optional - enable smooth lighting by default on all maps supporting it (can be set per map as lighting option)
smooth-lighting = true;
# Optional - use world provider lighting table (good for custom worlds with custom lighting curves, like nether)
# false=classic Dynmap lighting curve
use-brightness-table = true;
# Optional - render specific block names using the textures and models of another block name: can be used to hide/disguise specific
# blocks (e.g. make ores look like stone, hide chests) or to provide simple support for rendering unsupported custom blocks
block-alias = {
# "minecraft:quartz_ore" = "stone";
# "diamond_ore" = "coal_ore";
};
# Default image format for HDMaps (png, jpg, jpg-q75, jpg-q80, jpg-q85, jpg-q90, jpg-q95, jpg-q100, webp, webp-q75, webp-q80, webp-q85, webp-q90, webp-q95, webp-q100, webp-l),
# Note: any webp format requires the presence of the 'webp command line tools' (cwebp, dwebp) (https://developers.google.com/speed/webp/download)
#
# Has no effect on maps with explicit format settings
image-format = "jpg-q90";
# If cwebp or dwebp are not on the PATH, use these settings to provide their full path. Do not use these settings if the tools are on the PATH
# For Windows, include .exe
#
#cwebpPath = "/usr/bin/cwebp";
#dwebpPath = "/usr/bin/dwebp";
# use-generated-textures: if true, use generated textures (same as client); false is static water/lava textures
# correct-water-lighting: if true, use corrected water lighting (same as client); false is legacy water (darker)
# transparent-leaves: if true, leaves are transparent (lighting-wise): false is needed for some Spout versions that break lighting on leaf blocks
use-generated-textures = true;
correct-water-lighting = true;
transparent-leaves = true;
# ctm-support: if true, Connected Texture Mod (CTM) in texture packs is enabled (default)
ctm-support = true;
# custom-colors-support: if true, Custom Colors in texture packs is enabled (default)
custom-colors-support = true;
# Control loading of player faces (if set to false, skins are never fetched)
#fetchskins = false;
# Control updating of player faces, once loaded (if faces are being managed by other apps or manually)
#refreshskins = false;
# Customize URL used for fetching player skins (%player% is macro for name, %uuid% for UUID)
skin-url = "http://skins.minecraft.net/MinecraftSkins/%player%.png";
# Enable skins via SkinsRestorer plugin instead of internal legacy implementation (disabled by default)
#skinsrestorer-integration = true;
render-triggers = [
# "playermove"
# "playerjoin"
"blockplaced"
"blockbreak"
"leavesdecay"
"blockburn"
"chunkgenerated"
"blockformed"
"blockfaded"
"blockspread"
"pistonmoved"
"explosion"
# "blockfromto"
# "blockphysics"
"structuregrow"
"blockgrow"
# "blockredstone"
];
# Title for the web page - if not specified, defaults to the server's name (unless it is the default of 'Unknown Server')
#webpage-title = "My Awesome Server Map";
# The path where the tile-files are placed.
tilespath = "web/tiles";
# The path where the web-files are located.
webpath = "web";
# If set to false, disable extraction of webpath content (good if using custom web UI or 3rd party web UI)
# Note: web interface is unsupported in this configuration - you're on your own
update-webpath-files = true;
# The path were the /dynmapexp command exports OBJ ZIP files
exportpath = "export";
# The network-interface the webserver will bind to (0.0.0.0 for all interfaces, 127.0.0.1 for only local access).
# If not set, uses same setting as server in server.properties (or 0.0.0.0 if not specified)
#webserver-bindaddress = 0.0.0.0;
# The TCP-port the webserver will listen on.
webserver-port = secrets.ports.minecraft.dynmap;
# Maximum concurrent session on internal web server - limits resources used in Bukkit server
max-sessions = 30;
# Disables Webserver portion of Dynmap (Advanced users only)
disable-webserver = false;
# Enable/disable having the web server allow symbolic links (true=compatible with existing code, false=more secure (default))
allow-symlinks = true;
# Enable login support
login-enabled = false;
# Require login to access website (requires login-enabled: true)
login-required = false;
# Period between tile renders for fullrender, in seconds (non-zero to pace fullrenders, lessen CPU load)
timesliceinterval = 0.0;
# Maximum chunk loads per server tick (1/20th of a second) - reducing this below 90 will impact render performance, but also will reduce server thread load
maxchunkspertick = 200;
# Progress report interval for fullrender/radiusrender, in tiles. Must be 100 or greater
progressloginterval = 100;
# Parallel fullrender: if defined, number of concurrent threads used for fullrender or radiusrender
# Note: setting this will result in much more intensive CPU use, some additional memory use. Caution should be used when
# setting this to equal or exceed the number of physical cores on the system.
#parallelrendercnt = 4;
# Interval the browser should poll for updates.
updaterate = 2000;
# If nonzero, server will pause fullrender/radiusrender processing when 'fullrenderplayerlimit' or more users are logged in
fullrenderplayerlimit = 0;
# If nonzero, server will pause update render processing when 'updateplayerlimit' or more users are logged in
updateplayerlimit = 0;
# Target limit on server thread use - msec per tick
per-tick-time-limit = 50;
# If TPS of server is below this setting, update renders processing is paused
update-min-tps = 18.0;
# If TPS of server is below this setting, full/radius renders processing is paused
fullrender-min-tps = 18.0;
# If TPS of server is below this setting, zoom out processing is paused
zoomout-min-tps = 18.0;
showplayerfacesinmenu = true;
# Control whether players that are hidden or not on current map are grayed out (true=yes)
grayplayerswhenhidden = true;
# Use player permissions to order player list: first to last, players are ordered by first permission listed that they have
# That is, anyone with first listed permission goes before anyone with second, etc, with users with none of the nodes going last
player-sort-permission-nodes = [
"bukkit.command.op"
];
# Set sidebaropened: 'true' to pin menu sidebar opened permanently, 'pinned' to default the sidebar to pinned, but allow it to unpin
#sidebaropened = true;
# Customized HTTP response headers - add 'id: value' pairs to all HTTP response headers (internal web server only)
# http-response-headers = {
# Access-Control-Allow-Origin = "my-domain.com";
# X-Custom-Header-Of-Mine = "MyHeaderValue";
# }
# Trusted proxies for web server - which proxy addresses are trusted to supply valid X-Forwarded-For fields
# This now supports both IP address, and subnet ranges (e.g. 192.168.1.0/24 or 202.24.0.0/14 )
trusted-proxies = [
"127.0.0.1"
"0:0:0:0:0:0:0:1"
];
# Join/quit message format for web chat: set to "" to disable notice on web UI
joinmessage = "%playername% joined";
quitmessage = "%playername% quit";
spammessage = "You may only chat once every %interval% seconds.";
# format for messages from web: %playername% substitutes sender ID (typically IP), %message% includes text
webmsgformat = "&color;2[WEB] %playername%: &color;f%message%";
# Control whether layer control is presented on the UI (default is true)
showlayercontrol = true;
# Enable checking for banned IPs via banned-ips.txt (internal web server only)
check-banned-ips = true;
# Default selection when map page is loaded
defaultzoom = 0;
defaultworld = "world";
defaultmap = "flat";
# (optional) Zoom level and map to switch to when following a player, if possible
# followzoom = 3;
# followmap = "surface";
# If true, make persistent record of IP addresses used by player logins, to support web IP to player matching
persist-ids-by-ip = true;
# If true, map text to cyrillic
cyrillic-support = false;
# If true, coordinates will be rounded
round-coordinates = true;
# Messages to customize
msg = {
maptypes = "Map Types";
players = "Players";
chatrequireslogin = "Chat Requires Login";
chatnotallowed = "You are not permitted to send chat messages";
hiddennamejoin = "Player joined";
hiddennamequit = "Player quit";
};
# URL for client configuration (only need to be tailored for proxies or other non-standard configurations)
url = {
# configuration URL
# configuration = "up/configuration";
# update URL
# update = "up/world/{world}/{timestamp}";
# sendmessage URL
# sendmessage = "up/sendmessage";
# login URL
# login = "up/login";
# register URL
# register = "up/register";
# tiles base URL
# tiles = "tiles/";
# markers base URL
# markers = "tiles/";
};
# Customization commands - allows scripts to be run before/after certain events
custom-commands.image-updates = {
# Command run just before any image file is written or updated: run with single parameter with fully qualified file name
preupdatecommand = "";
# Command run just after any image file is written or updated: run with single parameter with fully qualified file name
postupdatecommand = "";
};
# Snapshot cache size, in chunks
snapshotcachesize = 500;
# Snapshot cache uses soft references (true), else weak references (false)
soft-ref-cache = true;
# Player enter/exit title messages for map markers
#
# Processing period - how often to check player positions vs markers - default is 1000ms (1 second)
#enterexitperiod = 1000;
# Title message fade in time, in ticks (0.05 second intervals) - default is 10 (1/2 second)
#titleFadeIn = 10;
# Title message stay time, in ticks (0.05 second intervals) - default is 70 (3.5 seconds)
#titleStay = 70;
# Title message fade out time, in ticks (0.05 seocnd intervals) - default is 20 (1 second)
#titleFadeOut = 20;
# Enter/exit messages use on screen titles (true - default), if false chat messages are sent instead
#enterexitUseTitle = true;
# Set true if new enter messages should supercede pending exit messages (vs being queued in order), default false
#enterReplacesExits = true;
# Published public URL for Dynmap server (allows users to use 'dynmap url' command to get public URL usable to access server
# If not set, 'dynmap url' will not return anything. URL should be fully qualified (e.g. https://mc.westeroscraft.com/)
#publicURL = "http://my.greatserver.com/dynmap";
# Set to true to enable verbose startup messages - can help with debugging map configuration problems
# Set to false for a much quieter startup log
verbose = false;
# Enables debugging.
# debuggers - [
# {
# class = "org.dynmap.debug.LogDebugger";
# }
# ];
# Debug: dump blocks missing render data
dump-missing-blocks = false;
# Have dynmap migrate old chunks to the new format for the current MC version (specifically, for migrating pre-1.13 chunks to 1.13 or 1.14). This is needed
# in order to render chunks on an upgraded server (due to various bugs/limitations in CB/spigot 1.13+). This setting is NOT suggested to be enabled full time,
# but only long enough to do a fullrender of a migrated world - it should be turned back off once worlds are migrated). It is EXPERIMENTAL, so be sure to backup
# your worlds before running with this setting enabled (set to true)
#
#migrate-chunks = true;
# Log4J defense: string substituted for attempts to use macros in web chat
hackAttemptBlurb = "(IaM5uchA1337Haxr-Ban Me!)";
}

View File

@ -0,0 +1,42 @@
{ ... }:
{
#time, in ticks, to delay the task of passing of night
# weather clear is scheduled to run after 2x this amount
sleepDelay = 60;
#amount of server time to increment by, per server tick
# lowering this will slow the night passing, increasing will speed it up
increment = 150;
#number of server ticks between increments, usually 20 ticks per second
# lower makes a smoother transition but more processing
# min - 1
timeBetweenIncrements = 2;
#sleep attempt cooldown, in ms, to prevent spam
bedCooldown = 2000;
#whether to fully kick a player from a bed on wakeup call
kickFromBed = true;
#whether to randomize the message for every player, instead of distributing 1 random message to all
# costs more performance to do multiple randomization
randomPerPlayer = false;
#whether to reset the TIME_SINCE_REST statistic for every player on sleep task
resetPhantomStatistics = true;
#whether to write players' sleep messages to console
logMessages = true;
#plugins like EssentialsX will typically setSleepingIgnored on /afk or /vanish
# whether to send messages from/to sleepingIgnored players
messageFromSleepingIgnored = false;
messageToSleepingIgnored = true;
#how many players online and awake before sleep messages are used
minPlayers = 2;
#DO NOT TOUCH VERSION NUMBER
version = 2.1;
}

View File

@ -0,0 +1,63 @@
{ ... }:
{
# BackupTimer = At what time should a Backup be created? The format is: 'hh-mm' e.g. '12-30'.
# DeleteOldBackups = Deletes old backups automatically after a specific time (in days, standard = 7 days)
# DeleteOldBackups - Type '0' at DeleteOldBackups to disable the deletion of old backups.
# BackupLimiter = Deletes old backups automatically if number of total backups is greater than this number (e.g. if you enter '5' - the oldest backup will be deleted if there are more than 5 backups, so you will always keep the latest 5 backups)
# BackupLimiter - Type '0' to disable this feature. If you don't type '0' the feature 'DeleteOldBackups' will be disabled and this feature ('BackupLimiter') will be enabled.
# KeepUniqueBackups - Type 'true' to disable the deletion of unique backups. The plugin will keep the newest backup of all backed up worlds or folders, no matter how old it is.
# Blacklist - A list of files/directories that will not be backed up.
# IMPORTANT FTP information: Set 'UploadBackup' to 'true' if you want to store your backups on a ftp server (sftp does not work at the moment - if you host your own server (e.g. vps/root server) you need to set up a ftp server on it).
# If you use ftp backups, you can set 'DeleteLocalBackup' to 'true' if you want the plugin to remove the created backup from your server once it has been uploaded to your ftp server.
# Contact me if you need help or have a question: https://server-backup.net/#support
Blacklist = [
"libraries"
"plugins/ServerBackup/config.yml"
];
AutomaticUpdates = true;
DynamicBackup = false;
AutomaticBackups = true;
BackupTimer = {
Days = [
"MONDAY"
"TUESDAY"
"WEDNESDAY"
"THURSDAY"
"FRIDAY"
"SATURDAY"
"SUNDAY"
];
Times = [
"00-00"
];
};
BackupWorlds = [
"world"
"world_nether"
"world_the_end"
];
DeleteOldBackups = 14;
BackupLimiter = 0;
KeepUniqueBackups = false;
UpdateAvailableMessage = true;
BackupDestination = "Backups/";
# Ftp = {
# UploadBackup = false;
# DeleteLocalBackup = false;
# Server = {
# IP = "127.0.0.1";
# Port = 21;
# User = "username";
# Password = "password";
# BackupDirectory = "Backups/";
# };
# };
SendLogMessages = false;
}

View File

@ -0,0 +1,31 @@
{ ... }:
{
messages = {
prefix = "$8[$bSilkSpawners$8]";
lcoale = "en";
};
spawner = {
destroyable = true;
item = {
name = "$dSpawner";
prefix = "$e";
prefix-old = "";
lore = [];
};
explosion = {
normal = 0;
silktouch = 0;
};
message = {
denyDestroy = true;
denyPlace = true;
denyChange = true;
};
};
update.check = {
enabled = true;
interval = 24;
};
}

View File

@ -0,0 +1,72 @@
{ ... }:
{
version = 9;
global = {
debug = false;
sync-time = 50;
};
cutter = {
radius = 2;
depth = 3;
materials = [
"WOODEN_AXE"
"STONE_AXE"
"IRON_AXE"
"GOLDEN_AXE"
"DIAMOND_AXE"
"NETHERITE_AXE"
];
};
options = {
sneak = "off";
toggleable = "off";
sync-detection = false;
animation = true;
collect-instantly = false;
permission = {
wood-type = false;
cutter-type = false;
};
};
limit = {
enabled = true;
default = 1000;
};
cooldown = {
enabled = false;
time = 20000;
};
# enchantments = {
# unbreaking.enabled = true;
# fortune = {
# enabled = false;
# multiplier = 1.0;
# };
# };
# exclusion = {
# enabled = false;
# list = [];
# };
# inclusion = {
# enabled = false;
# list = [];
# };
# worlds = {
# enabled = false;
# blacklist = false;
# list = [
# "world"
# "world_nether"
# "world_the_end"
# ];
# };
}

View File

@ -0,0 +1,191 @@
{ ... }:
{
# Material values are 1:1 with in-game IDs. The prepending of "minecraft:" is optional
# To specify states, do so with [brackets]. For example, "minecraft:chest[waterlogged=true]"
# The above will search for any waterlogged chests. Other states will be ignored when checking.
#
# To add a custom category, see the categories.yml
#
# VeinMiner supports 3 different types of storage (SQLite is used by default)
# JSON: Each player's data is stored in its own JSON file under the specified directory.
# SQLite: Player data is stored in an SQLite database table. A flat file database. Generally faster than JSON.
# MySQL: Player data is stored remotely in a MySQL-compliant database (MySQL, MariaDB, etc.). Use this if you want to share VeinMiner data on multiple servers and have a MySQL server available to use
MetricsEnabled = true;
PerformUpdateChecks = true;
DefaultActivationStrategy = "SNEAK";
DefaultVeinMiningPattern = "veinminer:default";
CollectItemsAtSource = true;
NerfMcMMO = false;
RepairFriendly = false;
MaxVeinSize = 64;
Cost = 0.0;
DisabledGameModes = [
"CREATIVE"
"SPECTATOR"
];
DisabledWorlds = [
"WorldName"
];
Hunger = {
HungerModifier = 4.0;
MinimumFoodLevel = 1;
HungryMessage = "&7You are too hungry to vein mine!";
};
Client = {
AllowActivationKeybind = true;
AllowPatternSwitchingKeybind = true;
AllowWireframeRendering = true;
};
Storage = {
# Supported types...
# JSON: Each player's data is stored in its own JSON file under the specified directory.
# SQLite: Player data is stored in an SQLite database table. A flat file database. Generally faster than JSON.
# MySQL: Player data is stored remotely in a MySQL-compliant database (MySQL, MariaDB, etc.). Use this if you want to share VeinMiner data on multiple servers and have a MySQL server available to use.
Type = "SQLite";
# JSON.Directory = "%plugin%/playerdata/";
# MySQL = {
# Host = "localhost";
# Port = 3306;
# Username = "username";
# Password = "password";
# Database = "veinminer";
# TablePrefix = "veinminer_";
# };
};
BlockList = {
Pickaxe = [
"minecraft:amethyst_cluster"
"minecraft:ancient_debris"
"minecraft:coal_ore"
"minecraft:copper_ore"
"minecraft:deepslate_coal_ore"
"minecraft:deepslate_copper_ore"
"minecraft:deepslate_diamond_ore"
"minecraft:deepslate_emerald_ore"
"minecraft:deepslate_gold_ore"
"minecraft:deepslate_iron_ore"
"minecraft:deepslate_lapis_ore"
"minecraft:deepslate_redstone_ore"
"minecraft:diamond_ore"
"minecraft:emerald_ore"
"minecraft:gold_ore"
"minecraft:iron_ore"
"minecraft:lapis_ore"
"minecraft:nether_quartz_ore"
"minecraft:nether_gold_ore"
"minecraft:raw_copper_block"
"minecraft:raw_gold_block"
"minecraft:raw_iron_block"
"minecraft:redstone_ore"
];
Axe = [
"minecraft:acacia_log"
"minecraft:acacia_wood"
"minecraft:birch_log"
"minecraft:birch_wood"
"minecraft:brown_mushroom_block"
"minecraft:carved_pumpkin"
"minecraft:crimson_hyphae"
"minecraft:crimson_stem"
"minecraft:dark_oak_log"
"minecraft:dark_oak_wood"
"minecraft:jungle_log"
"minecraft:jungle_wood"
"minecraft:mangrove_log"
"minecraft:mangrove_roots"
"minecraft:mangrove_wood"
"minecraft:melon"
"minecraft:oak_log"
"minecraft:oak_wood"
"minecraft:pumpkin"
"minecraft:red_mushroom_block"
"minecraft:spruce_log"
"minecraft:spruce_wood"
"minecraft:warped_stem"
"minecraft:warped_hyphae"
];
Shovel = [
"minecraft:clay"
"minecraft:gravel"
"minecraft:mud"
"minecraft:muddy_mangrove_roots"
"minecraft:powder_snow"
"minecraft:sand"
"minecraft:snow"
"minecraft:soul_sand"
"minecraft:soul_soil"
];
Hoe = [
"minecraft:beetroots[age=3]"
"minecraft:brown_mushroom"
"minecraft:carrots[age=7]"
"minecraft:moss_block"
"minecraft:moss_carpet"
"minecraft:potatoes[age=7]"
"minecraft:red_mushroom"
"minecraft:sculk"
"minecraft:sculk_vein"
"minecraft:wheat[age=7]"
];
Shears = [
"minecraft:acacia_leaves"
"minecraft:azalea_leaves"
"minecraft:birch_leaves"
"minecraft:black_wool"
"minecraft:blue_wool"
"minecraft:brown_wool"
"minecraft:cobweb"
"minecraft:cyan_wool"
"minecraft:dark_oak_leaves"
"minecraft:flowering_azalea_leaves"
"minecraft:gray_wool"
"minecraft:green_wool"
"minecraft:jungle_leaves"
"minecraft:light_blue_wool"
"minecraft:light_gray_wool"
"minecraft:lime_wool"
"minecraft:magenta_wool"
"minecraft:mangrove_leaves"
"minecraft:oak_leaves"
"minecraft:orange_wool"
"minecraft:pink_wool"
"minecraft:purple_wool"
"minecraft:red_wool"
"minecraft:spruce_leaves"
"minecraft:white_wool"
"minecraft:yellow_wool"
];
Hand = [];
All = [
"minecraft:blue_ice"
"minecraft:ice"
"minecraft:packed_ice"
];
};
Aliases = [
"minecraft:acacia_log;minecraft:acacia_wood"
"minecraft:birch_log;minecraft:birch_wood"
"minecraft:brown_mushroom_block;minecraft:red_mushroom_block"
"minecraft:carved_pumpkin;minecraft:pumpkin"
"minecraft:crimson_hyphae;minecraft:crimson_stem"
"minecraft:dark_oak_log;minecraft:dark_oak_wood"
"minecraft:grass;minecraft:tall_grass"
"minecraft:jungle_log;minecraft:jungle_wood"
"minecraft:mangrove_log;minecraft:mangrove_wood"
"minecraft:oak_log;minecraft:oak_wood"
"minecraft:spruce_log;minecraft:spruce_wood"
"minecraft:warped_hyphae;minecraft:warped_stem"
];
}

View File

@ -107,6 +107,7 @@
(proxy ["py"] "http://localhost:${s ports.jupyterhub}" {
locations."/".proxyWebsockets = true;
})
(proxy ["dyn"] "http://localhost:${s ports.minecraft.dynmap}" {})
(proxy ["osu"] "http://localhost:${s ports.osuchan}" {})
# (host ["vpn"] "" {})
(proxy ["hydra"] "http://localhost:${s ports.hydra}" {})