I am currently working on a Mincraft plugin that replicates the popular Skyblock gamemode on the Hypixel Network. Being a huge fan of the gamemode and Minecraft in general, I thought that rebuilding the gamemode myself would be an interesting side project.
The plugin is written in Java 8, and uses PaperMC (which in turn uses the CraftBukkit and Spigot APIs). The project is not open source at the moment, but I may decide to release it in the future if I remove all assets (text/images) taken from the official Hypixel Skyblock server.
Currently, there is are two PaperMC servers running the main plugin, one BungeeCord server running a bungeecord-specific version of the plugin (BungeeCord is a minecraft proxy allowing for load balancing and moving players between servers), a MySQL database, and a Redis node.
Player data is entirely stored in the MySQL and Redis nodes, as the Minecraft servers run inside docker containers with no persistent storage. This may seem like overkill, but I’m attempting to replicate one of the largest minecraft networks, and this is similar to what their architecture is.
Each player also gets their own player “island” (in the Skyblock game mode, you get a floating island and no more chunks are rendered, and their is no bedrock). Player islands are serialized to the database using Hypixel’s Slime World Format (using a modified version of the Slime World Manager plugin).
Plugin wise, I’m attempting to do everything myself, so I can learn how it’s done, so I’m keeping plugins to a minimum. Currently, I use Slime World Manager for storing maps/player worlds (with a custom loader to use my database/redis infrastructure), ProtocolLib to wrap low level packets/protocol streams, and ProtocolSupport to implement backwards compatibility. All other functionality is done myself.
- Persist player inventory to the database
- Players get their own world when they first logged in (cloned from a template world), and changes are persistent
- Players have access to an Enderchest anywhere in the world using the custom menu (enderchest contents are serialized to the database)
- Players have coins in a purse that are persistent, and coins are lost upon death (unless protected by the Piggy Bank accessory)
- Custom items and recipes defined via YAML files (see example)
- Custom crafting grid that is accessible anywhere using the custom menu
- Collections where players work through several collection tiers to unlock recipes and items by collecting a certain amount of each item (e.g. Cobblestone Collection is progressed by mining cobblestone or stone)
- Players are prevented from placing or interacting with protected blocks while not on their own island
- Custom enchants and items like the Jungle Axe (that destroys up to 10 connected logs in one swing), and Telekinesis enchant (dropped items are added directly to the player’s inventory)
Dev Update – July 18th, 2020 (Slime World Format for Player Islands)
Dev Update – July 17th, 2020 (Jungle Axe & Custom Enchants)
Dev Update – July 13th, 2020 (Collections)