Dev Blog #1: Build a Minecraft Skyblock Plugin
What type of plugin am I building?
I'm building a Minecraft 1.20.4 Skyblock plugin. Skyblock is a popular game mode in Minecraft where players start on a small island in the sky and have to expand it by gathering resources, building structures, and completing challenges. The goal is to create a thriving island and become the richest player on the server.
That's what everyone wants and I don't exactly want that. I prefer something a little bit more like the one of Hypixel. Not too complex but with interesting features and mechanics.
Considerations / Requirements
This plugin is for Edmine Network, a Minecraft server that I'm working on. Here are some considerations and requirements for the plugin (some features are missing):
- Players should be able to create and manage their own islands.
- Islands should have a border that prevents players from falling off.
- Players should be able to invite others to their islands.
- Players should be able to visit other players' islands and interact with them.
- Islands should have a shop where players can buy and sell items.
- Players should be able to compete in challenges and earn rewards.
- Implements dungeons, custom items, custom mobs to make a better experience
- Players should be able to level up their islands and unlock new features (size, generator, etc..).
- Players should be able to edit island ranks permissions via a GUI.
Also, I need a skyblock that can be played by at least 50 players at the same time.
Time to think about the architecture
Before I start coding, I need to think about the architecture of the plugin. Here are some questions I need to answer (I didn't put all the questions):
- How on earth a minecraft server in 1.20.4 will handle 50 players at the same time?
- How will I store island data? In a database? In files?
- If I have customs mobs and a lot a features, how will I handle the performance?
- How will I handle dungeons?
What architecture did I choose?
I decided to use a cross server architecture. For example, if I have 50 players on the server,
I will have 6 servers, one for the skyblock spawn (only one because spawns are not that heavy),
3 for the islands servers (because islands are heavy) and 2 for the dungeons servers (because combat may be heavy).
I said cross server, I forgot to tell you that I'm also going to develop an inventory sync system.
For example, if a player is on the island server 1 and he goes to the island server 2, his inventory will be the same.
This is a little bit complex but I doable.
For the dungeons, nothing has been decided yet. I will think about it later.
For the islands, I will use a database to store the data (worlds, informations etc..).
I will use something maintained by the community and was developed by Hypixel for 1.8 (I will use an updated version
of the community: Advanced
Slimeworldmanager).
This plugin exists in different versions and different names (SlimeWorldManager for 1.8 to 1.14,
AdvancedSlimeworldmanager for 1.15+).
For the databases, I will use MySQL for everything. Plus a redis server for caching. Maybe not a redis server
because of the recent license changes but an open source fork of it.
What about the performance?
For the performance, I will use a lot of caching. I will cache the islands, the players, the dungeons, the mobs, the
items etc..
Also, I will use a lot of async tasks to handle the heavy tasks.
Obviously, every database / cache query will be async and safe with CompletableFuture and a callback system to handle
the results on the main thread.
The end
That's it for this blog post. I started to code the plugin, and I will post the next blog post when I have something
to show.
Stay tuned!