Provision Mammoth-ready Minecraft clusters with ease!

Overview

Minecraft Server Provisioner Build

Provision Mammoth-ready Minecraft clusters with ease!

Overview

Provisioner is a tool designed to make the creation of Mammoth clusters a breeze.
It is designed to automate the following:

  • Downloading and installing the latest version of Paper for your desired Minecraft version.
  • Setting up server.properties for each server.
  • Copying Bukkit, Spigot, and Paper config files to each server instance.
  • Starting and stopping each provisioned server, running each in the background.
  • And more...

User Guide

Commands and Flags

Command Run Usage
Init ./provisioner init Initialise and configure each server.
Sync Plugins ./provisioner sync-plugins Sync plugins directory to all servers.
Reset World ./provisioner reset-world Resets each server's world files.
Remove ./provisioner remove Remove all server directories.
Start ./provisioner start Start all servers in the background.
Stop ./provisioner stop Stop each background server process.
Restart ./provisioner restart Restart all servers.

You can also run ./provisioner help <command> to list each commands' available flags.

Configuration

Passing each command the same flags over and over can be tedious and prone to mistakes, so Provisioner also supports reading from a provisioner.toml config file. This must be placed in the directory that you are running Provisioner in.

Most config properties have a default value, and any CLI flags will always take priority. Use ./provisioner help for a list of default values and what each flag/property does.

Example Configuration

[global]
server_count = 3
start_port = 25565
directory_template = "Mammoth Server"

[init]
paper_version = "1.17.1"
level_seed = "mammoth"
ops = ["Steve", "Alex"]
# ... white_list, skip_plugins, no_copy_bukkit, no_copy_spigot, no_copy_paper ...

[init.server_properties]
# Set extra `server.properties` values here, these will be the same for every server
# !! All properties must be represented as strings !!
spawn-protection = "0"
rate-limit = "0"
difficulty = "peaceful"
online-mode = "false"

This will configure 3 servers with ports 25565 to 25567

Getting Started

  1. Download the latest provisioner binary from GitHub Actions. Be sure to only download binaries for tagged builds.
    Either save it to a directory where you will be managing your servers, or add it to your PATH for global access.
  2. Optional: Copy bukkit.yml, spigot.yml, paper.yml, and/or a plugins directory into the directory where you will be managing the servers.
  3. Create and fill out a provisioner.toml config file for ease of use.
  4. Run ./provisioner init to create your servers and then ./provisioner start to run them all in the background.

Use in Mammoth Development

To make your life a lot easier when developing Mammoth, we recommend setting up a symlink from your development directory to the provisioner plugins template directory.

# Run in the template plugins/ directory
$ ln -s /path/to/mammoth/target/WorldQLClient-1.0-SNAPSHOT.jar .

# Using WSL this will start with /mnt/

This will keep the template in sync with the compiled plugin JAR. You can then use a handy one-liner to stop each server, update their plugins, and then restart.

$ ./provisioner stop && ./provisioner sync-plugins && ./provisioner start

Community

Join our Discord Server for news and updates surrounding WorldQL and Mammoth!

You might also like...
A simple Minecraft written in Rust with the Piston game engine
A simple Minecraft written in Rust with the Piston game engine

hematite A simple Minecraft written in Rust with the Piston game engine How To Open a World This method is only for personal use. Never distribute cop

A simple, very minimal Minecraft server implementation in Rust.
A simple, very minimal Minecraft server implementation in Rust.

A simple, very minimal Minecraft server implementation in Rust. For a simple Minecraft server that isn't supposed to do much (for example, a limbo ser

Like minecraft, but crispier!

crispycraft Like minecraft, but crispier! Links Library documentation WebGPU: https://docs.rs/wgpu/0.12.0/wgpu/ building_blocks: https://docs.rs/build

Brine is my attempt at writing a Minecraft client in Rust using the Bevy game engine.
Brine is my attempt at writing a Minecraft client in Rust using the Bevy game engine.

Brine Brine is my attempt at writing a Minecraft client in Rust using the Bevy game engine. It's EXTREMELY work-in-progress. The thing that makes Brin

Morphosis is a work-in-progress set of tools to deal with Minecraft metadata, mainly for use with PolyMC.

Morphosis Morphosis is a work-in-progress set of tools to deal with Minecraft metadata, mainly for use with PolyMC. It consists of a library (metamorp

ULE - Minecraft's server core written in Rust

ULE - Minecraft's server core written in Rust This's server core fully written in Rust-Lang and using more custom code for best perfomance and control

A Rust library for reading asset files and resource packs for any version of Minecraft

minecraft-assets A Rust library for reading asset files and resource packs for any version of Minecraft. Example use minecraft_assets::api::AssetPack;

Libium is the backend of Ferium. It helps manage Minecraft mods from Modrinth, CurseForge, and Github Releases

Libium Libium is the backend of Ferium. It helps manage Minecraft mods from Modrinth, CurseForge, and Github Releases There are 3 main components in L

A data compatibility project for Minecraft's assets

Data Compat MC Data tool for the Falcon MC project. Description DataCompatMC is a cli tool designed to help deal with the many different versions of M

Comments
  • Graceful shutdown hangs if server process was killed or died.

    Graceful shutdown hangs if server process was killed or died.

    Expected behavior: The tmux session is stopped. Actual behavior: provisioner waits forever for a tmux session with no process running image

    To reproduce:

    1. ./provisioner start.
    2. tmux a -t mammoth_server_255xx.
    3. Kill the server with Control+C and press enter. Optionally, press the up arrow to select a previous command. Optionally hit enter a few tiles. This is bug is intermittent but only happens when NO process is running in the tmux window.
    4. ./provisioner stop will hang forever.
    bug 
    opened by Jaxkr 1
  • Add support for arbitrary JVM start parameters.

    Add support for arbitrary JVM start parameters.

    Almost every server admin wants to use the aikar flags: https://blog.airplane.gg/aikar-flags/

    To accomplish this currently, one must manually start all the servers and cannot use provisioner start. It would be nice if JVM flags could be specified in provisioner.toml.

    opened by Jaxkr 0
  • Feat: Add combine and prune commands

    Feat: Add combine and prune commands

    Add two new commands to provisioner to simplify world management across a cluster:

    • combine: Merge all world region files into a single folder. Sync neighboring region files to each server. Used to create a single world from a Mammoth cluster and update areas nearby a server border while offline.
    • prune: remove irrelevant world files from each server. Skip deleting neighboring regions. Used to save space.

    A "neighboring region" is the .mca region files immediately outside an area owned by the server. For example, if the following represents a mammoth slice grid the desired area to copy is represented in red image

    You can use logic from getDistanceFromSliceBoundary to determine if a certain region is near a server border. If the distance is <= 512 then it's worth copying. This function is used to determine slice ownership: https://github.com/WorldQL/mammoth/blob/trunk/src/main/java/com/worldql/client/Slices.java#L172

    Note: Note the logic about unslicedOrigins. That's used to avoid splitting the 0,0 area across multiple servers which is undesirable for projects with a dedicated spawn.

    This function should be controlled using settings that mirror these options in Mammoth's config.yml and should also respect options for avoid-slicing-origin and origin-radius to make sure it copies information from the right server.

    The following configuration options should be read from provisioner.toml and respected for the prune and combine commands:

    • server_count
    • world-diameter (new)
    • slice-width (new)
    • avoid-slicing-origin (new)
    • origin-radius (new)

    Feel free to rename these new provisioner.toml options to whatever you please.

    opened by Jaxkr 0
Releases(v0.6.0)
Owner
null
A feature-rich, production-ready, general purpose 2D/3D game engine written in Rust with a scene editor.

A feature-rich, production-ready, general purpose 2D/3D game engine written in Rust with a scene editor.

rg3d engine 5.4k Jan 4, 2023
Template for jumpstarting production-ready Farcaster frames quickly

Rust Farcaster Frames Template Template for jumpstarting production-ready Farcaster frames quickly. — no fuss, all fun! Features Seamless Integration:

jpgonzalezra 13 Feb 21, 2024
Rust-based replacement for the default Minecraft renderer

wgpu-mc ?? A blazing fast alternative renderer for Minecraft Intro WebGPU is a new web specification designed to provide modern graphics and compute c

Birb 1 Jun 28, 2022
Rustcraft is a simple Minecraft engine written in rust using wgpu.

Rustcraft is a simple Minecraft engine written in rust using wgpu.

Raphael Van Hoffelen 110 Dec 22, 2022
A Minecraft Java Edition to Bedrock Edition resource pack convertor in Rust

j2be A Minecraft Java Edition to Bedrock Edition resource pack convertor in Rust How to use Note: This project is still in development Run cargo build

Cqdet 11 Sep 15, 2021
Minecraft Protocol Library

Protocol Minecraft Protocol Library This branch is dedicated to the Minecraft Bedrock Edition Protocol. If you have any concerns or questions you can

Netrex 5 Mar 19, 2022
Bell is a work in progress programming language that compiles to MCfunction (Minecraft's language for creating datapacks).

Bell is a work in progress programming language that compiles to MCfunction (Minecraft's language for creating datapacks). It provides a higher level,

Yoav 17 Aug 25, 2022
💤 Put your Minecraft server to rest when idle.

?? Put your Minecraft server to rest when idle.

Tim Visée 285 Jan 4, 2023
Minecraft-esque voxel engine prototype made with the bevy game engine. Pending bevy 0.6 release to undergo a full rewrite.

vx_bevy A voxel engine prototype made using the Bevy game engine. Goals and features Very basic worldgen Animated chunk loading (ala cube world) Optim

Lucas Arriesse 125 Dec 31, 2022
Easily update your minecraft mods with 1 file (guess I'm back to rust again)

Mod Updater This program updates all your mods to a newer/later version. To use: Create a file named config.toml Create a folder named mods; Add the f

sussyimpostor 2 Sep 18, 2022