DockerizedCraft - Core

Never maintain your Bungeecord manually again! Automatically listens to Docker events and adds servers to BungeeCord.
Additionally supporting plugin messaging, connection balancing and proxy server list updates.

Container Inspector
Features
- Automatically listens on docker events
- Extracts environment variables from containers
- Triggers BungeeCord Custom events on Docker container events
Configuration
container-inspector.yml
# Is the docker listener enabled? This is the core functionality and should stay enabled
# Type: Boolean
enabled: true
# Outputs extra information
# Type: Boolean
debug: true
# Ensure the read permissions
# available schemas: tcp or unix
# Type: String
host: unix:///var/run/docker.sock
# Type: Boolean
tsl-verify: false
# Type: String|null
cert-path: ~
# Type: Section<String, String>
registry:
# Type: String|null
username: ~
# Type: String|null
password: ~
# Type: String|null
email: ~
# Type: String|null
url: ~
# The network name to resolve IP addresses
# Only one network is possible to avoid confusion about which ip to use
# check your networks with `docker network ls`
network: "minecraft_local"Server Updater
Features
- Automatically adds servers to Bungeecord
- Automatically removes servers from Bungeecord
- Configurable add/remove actions
- Supports Health Checks
Configuration
server-updater.yml
# Is the Server update enabled?
# Type: Boolean
enabled: true
# Extra output
# Type: Boolean
debug: false
# Container events actions to listen on for adding server
# i.e.: "start", "health-status: healthy"
# Recommended "start", "bootstrap" and health checks
# the "bootstrap" events is triggered when connectionbalancer starts to register all running containers. Should ne be removed
# If you want to add only healthy containers be aware of removing "start" action
# @see https://docs.docker.com/engine/reference/commandline/events/#object-types
# Type: List
add-actions:
- "bootstrap"
- "start"
- "unpause"
# Container events actions to listen on for remving server
# i.e.: "kill", "die"
# Recommended "die" and health checks
# If you want to remove unhealthy containers add i.e: "health_status: unhealthy"
# @see https://docs.docker.com/engine/reference/commandline/events/#object-types
# Type: List
remove-actions:
- "kill"
- "die"
- "stop"
- "pause"
# Environment variables of the containers
# Type: Section
environment-variables:
# The events listener will only add server with the defined environment variable
# ie. docker run -e SERVER_TYPE=minecraft_spigot my_server
# Type: String
identifier: SERVER_TYPE
# Be default the first exposed port is taken if the container exposes multiple ports you can
# set it by setting the PORT environment variable in the container
# If you exposed multiple ports its highly recommended to set the environment variable
# Type: String
port: SERVER_PORT
# Setting the motd in the Bungeecord setting
# i.e. docker run -e SERVER_FORCED_HOST="Another Minecraft Server" playerworld:latest
# Type: String
motd: SERVER_MOTD
# Setting the server to restricted
# If not set it is false, only excepts: "restricted" or "unrestricted"
# i.e. docker run -e SERVER_RESTRICTED=true playerworld:latest
# Type: String
restricted: SERVER_RESTRICTED
# Each server name needs to be unique
# If you are not able to control if it is unique (autoscaling or whatever) you should not set it in your container
# If you do not set the environment variable the container name itself will be used
# Two server with the same name will overwrite each other
# Type: String
name: SERVER_NAMEConnection Balancer
Features
- Server Groups
- Default connection group (Fallback/Default servers)
- Join Group Commands (like /lobby, /hub or /game-xy)
- Forced hosts for groups (i.e. eu lobbies and us lobbies)
- Listens on Container events to add servers to groups based on their environment variables (i.e SERVER_GROUP=lobby)
- Connection Balancing Strategies per group
- balanced: Connect Players to the Server of the group with the fewest players
- More will follow!
- Does not overwrite restrictions!
- Stores Player sessions in Redis to handle reconnections
Configuration
connection-balancer.yml
# Care if you disable it you will need to configure default, priority and fallback servers by hand
# Or use an different connection balancer handler plugin (Is it compatible?)
# Type: Boolean
enabled: true
# Outputs extra information
# Type: Boolean
debug: true
# To store player session for the reconnect handler
# Type: Section
session-store:
# Type: Section
redis:
# Type: String
host: "redis"
# Type: String
password: ~
# Type: Integer
port: 6379
# Type: Boolean
ssl: true
# Environment variables of the containers
# Type: Section
environment-variables:
# If the environment variable is set the server will be added to the priority list of connectionbalancer
# This plugin implemented a custom load balancer which will use defined groups
# Leaving the env variable blank will add the server to the default group
# Type: String
group: SERVER_GROUP
# To enable forced host for the single instance.
# You can also configure a forced host for a whole group. See groups config. I would recommend to do so events with single instances
# i.e. docker run -e SERVER_FORCED_HOST=muehre.craftmania.de playerworld:latest
# Type: String
forced-host: SERVER_FORCED_HOST
# Type: Section
# check docker.event_listener.environment_variables.group_key
groups:
# Server group configuration
# default group is used if a a container does not have a group environment variable. You can also configure it here
# Type: Section<Group>
# Group:
# - strategy(String): balance is the only strategy atm. I will implement more as soon as they are required
# - forced_host(String) Optional: people joining over this host will be send to this group
# - can-reconnect(Boolean) Default: false: if a player can reconnect to this group. Usefull to disable for i.e minigames
# - restricted(Boolean) Default: false: Is a permission required?
eu-lobby:
strategy: balance
can-reconnect: true
restricted: false
game-xy:
strategy: balance
can-reconnect: false
restricted: false
private:
strategy: balance
can-reconnect: true
restricted: false
us-lobby:
strategy: balance
can-reconnect: true
restricted: false
# The default group a user is connected to if he freshly joins or his group was restricted in re-connections.
# And not forced host is matching
# Type: String
default-group: eu-lobby
# Commands that players can execute to join a certain group
# Type Section<String, String>
join-commands:
lobby: eu-lobby
hub: eu-lobby
# Setting force hosts. Use {dot} placeholder for dots to not break yaml syntax
# Type: Section<String, String>
forced-hosts:
"us{dot}mynetwork{dot}net": "us-lobby"
"eu{dot}mynetwork{dot}net": "eu-lobby"Plugin Notifier
Server List Payload
Send Server information to the single servers. This can be used to add Sever Selectors etc.
Add as many information as you want by easy to use environment variable mapping.
Example Payload (Channel: ContainerManager, Subchannel: ServerData)
{
"us-lobby-1":{
"address":"172.19.0.5:25565",
"host":"172.19.0.5",
"port":25565,
"motd":"A Minecraft Server Instance",
"name":"us-lobby-1",
"proxied_players":12,
"type":"spigot",
"category":"us-lobby",
"tags":"some,awesome,tags"
},
"eu-lobby-2":{
"address":"172.19.0.4:25565",
"host":"172.19.0.4",
"port":25565,
"motd":"A Minecraft Server Instance",
"name":"eu-lobby-2",
"proxied_players":5,
"type":"spigot",
"category":"eu-lobby",
"tags":""
},
"eu-lobby-1":{
"address":"172.19.0.3:25565",
"host":"172.19.0.3",
"port":25565,
"motd":"A Minecraft Server Instance",
"name":"eu-lobby-1",
"proxied_players":0,
"type":"spigot",
"category":"eu-lobby",
"tags":""
}
}
Configuration
plugin-notifier.yml
# If you disable it no plugin which depends on this data will work
# Type: Boolean
enabled: true
# Outputs extra information
# Type: Boolean
debug: true
# Server updates will be sent after any add or remove anyway but the interval is usefull to update i.e. ProxiedPlayer Information
# Type: Integer
refresh-interval: 30
# Maps environment variables and forwards them with the specified key to the bukkit client plugin
# ie. docker run -e CATEGORY=factions
# Reserved keys as they will be handed down anyway: name, address, motd, restricted (In case you want to overwrite you can do so)
# Type: Section<String:MetaDataConfig>
# Type MetaDataConfig:
# - environment-variable (string): The environemnt variable to access
# - required (bool): Is this value required? If not given and no default
# is defined the server will not be added to connectionbalancer
# - default (string): If the environment variable is not defined will fall
# back to the given default
meta-data-mapper:
# make the SERVER_TYPE also accessible
type:
required: true
environment-variable: SERVER_TYPE
# Category for i.e create server selector menus based on categories
category:
environment-variable: SERVER_CATEGORY
required: true
default: "none"
tags:
environment-variable: SERVER_TAGS
required: true
default: ""Try it yourself
- Checkout the repository
- Build the .jar with maven or copy an attached one from the last releases.
- run docker-compose --project-name minecraft up -d
- Wait until all containers did start and connect to localhost with you Minecraft client
Todo's
- Reduce .jar size
Similar projects
Plugin →Let Me Despawn
Improves performance by tweaking mob despawn rules. Say bye to pesky unintentional persistent mobs.
25MSueta
JourneyMap
Real-time map used for mapping in-game or your browser as you explore.
14.7MSueta
Emotecraft
Create your own emotes in Minecraft.
7.5MSueta
Simple Tpa
A simple tpa plugin which sends requests
5.4MSueta
Common Network
Forge and Fabric Unified Networking Solution
3.9MSueta
Set Home
A lightweight plugin for players to set their homes.
3.8MSueta