StreamLineNet (FlexNet): A Multi-Server Automation and Balancing System for Minecraft Servers
This plugin is designed for large Minecraft servers!
Traditionally, we could only use fixed servers on Velocity to balance players. However, player numbers change over time. On average, according to my experience running my own server and statistics from some Taiwanese servers, during off-peak hours, player numbers are less than 30% of those during peak times. This means that if we keep these load-balancing servers running all the time, it would be a waste of resources.
StreamLineNet (FlexNet) offers a new solution by allowing management teams to set up "templates." Templates can be thought of as packaged server settings, similar to Docker images. Within a template, you can configure individual settings for each server type, including (but not limited to) maximum instance numbers, automatic restart intervals, the number of players needed to create a new instance, restart warnings, etc. This provides rich customization options and features.
For example:
[groups]
[groups.survival]
fromHostname = "<http://survival.elfisland.net|survival.elfisland.net>"
serverName = "survival"
hubServer = "hub" # Recommend using NanoLimbo
maxInstance = 3
playerAmountToCreateInstance = 25
# Restart every few minutes (->execute restart task and start reminder)
autoRestartInterval = 1440
# Reminder of how many seconds until kicking (not included in autoRestartInterval)
transferWarningIntervals = [1800, 900, 600, 300, 240, 180, 120, 60, 30, 15, 10, 5, 4, 3, 2, 1]
# After kicking the player, wait a few minutes before closing the server (not included in autoRestartInterval)
postShutdownWait = 3
[groups.island]
fromHostname = "<http://island.elfisland.net|island.elfisland.net>"
serverName = "island"
hubServer = "hub"
maxInstance = 3
playerAmountToCreateInstance = 50
autoRestartInterval = 1440
transferWarningIntervals = [1800, 900, 600, 300, 240, 180, 120, 60, 30, 15, 10, 5, 4, 3, 2, 1]
postShutdownWait = 3
[templates]
[templates.survival]
serverOnlineDelay = 5
nameTemplate = "[StreamlineNet] Survival Node"
description = "Multi-Paper Worker"
dockerImage = "<http://ghcr.io/pterodactyl/yolks:java_17|ghcr.io/pterodactyl/yolks:java_17>"
locationId = 1
nestId = 1
eggId = 15
defaultOwnerId = 1
cpuAmount = 200
memoryAmount = 2048
diskAmount = 5120
skipInitScript = false
[templates.survival.environmentValues]
SERVER_JARFILE = "server.jar"
[templates.island]
serverOnlineDelay = 5
nameTemplate = "[StreamlineNet] Island Node"
description = "Paper"
dockerImage = "<http://ghcr.io/pterodactyl/yolks:java_17|ghcr.io/pterodactyl/yolks:java_17>"
locationId = 1
nestId = 1
eggId = 16
defaultOwnerId = 1
cpuAmount = 200
memoryAmount = 2048
diskAmount = 5120
skipInitScript = false
[templates.survival.environmentValues]
SERVER_JARFILE = "server.jar"
With StreamLineNet, the development team can focus more on creating new gameplay features instead of constantly worrying about performance issues.
(Note: StreamLineNet is still in development and currently has some bugs. There's even a memory leak issue under certain circumstances, but I'm working hard to fix it.)
GitHub repo: github.com/Xiaobonor/Streamline