About the project
Project was created as a private Minecraft server for playing together with friends.
As the number of mods and plugins grew, server architecture became more and more complex, which required careful selection of suitable solutions to keep everything stable and fast.
Server was designed as a hybrid environment combining plugins and mods.
That's why I chose Mohist as server engine, despite its known limitations.
The goal of the project was to maintain a stable Minecraft server combining Forge mods with Bukkit plugins with a growing number of dependencies and limitations of the engine.
Hardware
- Intel Core i5-8500T
- 16 GB RAM
Technologies used
Software
Plugins
Security and administration
Plugins that were responsible for permission, player authentication and logging server actions.
- AuthMe
- FastLogin
- LuckPerms
- CoreProtect
- WorldGuard
Optimization and performance
Tool to measure server performance.
- spark
QoL
Other QoL, administrative plugins and libraries.
- BetterRTP
- CustomJoinMessages
- DecentHolograms
- LPC
- MiniMOTD
- NpcPlugin
- PlaceholderAPI
- PlayerKits2
- ProtocolLib
- SetSpawn
- Shopkeepers
- SimpleHomes
- SimpleTpa
- TAB
- WorldEdit
Mods
World generation
Mods that changed world generation.
- reterraforged
- nullscape
- incendium
- structory
Gameplay and mechanics
New gameplay mechanics and systems.
- create
- railways
QoL
Other QoL mods and libraries.
- another_furniture
- architectury
- brewery
- christmasfestivity
- cloth_config
- corn_delight
- cozy
- ctov
- deathfinder
- decorative_blocks
- doapi
- doggytalents
- farmersdelight
- file/reterraforged-preset.zip
- framedblocks
- geckolib
- konkrete
- lithostitched
- moa_decor_holidays
- moonlight
- mr_better_snowybiome
- mysterious_mountain_lib
- paraglider
- resourcefullib
- snowrealmagic
- snowundertrees
- snowy_tents
- snowyspirit
Architecture
Players connected to the server via NeoProtect reverse-proxy, which was responsible for filtering traffic and basic network security.
Server logic was split into two functional layers: plugins and mods.
Plugins were responsible for administration, security, permissions and world control, while mods were responsible for extending mechanics and adding content.
All data from plugins was stored in MariaDB, which allowed keeping data in one place and to be independent from server files.
Server security
- Premium and non-premium login
At first login, user had to create an account. Subsequently, users had to authenticate with a password at each login, unless they had a premium account, where login was automatic (no password required).
- Grief protection and rollbacks
To protect the world against griefing, I used WorldGuard plugin, which allowed defining regions and setting flags, to specify what is allowed in these regions. If some place was already griefed in the world, rollback was possible with the CoreProtect plugin.
Performance
Server performance was measured using the spark plugin during normal gameplay, with about 10 players online.
Project limitations
- Some mods/plugins were not compatible with each other or with the server engine, which required a detailed selection of mods and plugins and tests before running the server.
- Project did not allow the creation of server network with velocity proxy.
- No automatic updates of mods and plugins.
What could I have done better
- Nether and End world generators did not work properly.
- Server optimization could be better.
- I could have used a Polish network protection provider to reduce ping.