An in-progress cross-platform(hopefully) ECS-based kotlin game engine/library for Minecraft!
Ever used the Unity game engine? It's like that but for Minecraft!
The core principle is allowing developers to create re-usable, non-coupled components which can be
mixed and matched to create games and other fun things.
In the game-development industry this is referred to as an Entity Component System.
We have GameObjects (which might be Players, Entities or other big important things), which are composed
of many Behaviours (which actually provide the behaviour for said GameObjects)
It's kinda hard to explain if you haven't used one before, but if the engine is solid enough they can actually be really really really nice to work with. There's a reason why the gamedev industry loves them! Even Minecraft itself has started implements ECS type things into the game, like those "new" Item Data Components which has been an absolute game changer in letting us do all sorts of crazy things with items (like making edible Diamonds, or equippable Bread which is also a Totem).
Please keep in mind that everything on this Readme and in the future of this project is subject to change I might decide to overhaul everything and recode from scratch tomorrow, you never really know.
Idk, it seemed fun. I've done a lot of Minecraft game development, and I've yearned for a proper game engine like this for my own personal projects.
I attempted a project like this in 2024, it was called Origami but I ran into a lot of issues with it, I made a full game with it for a Minecraft game-jam but it was a bit of a nightmare to use in some ways and a delight to use in others. I let it sit on the drawing board for a couple of years until now cuz I have ideas!!!
Rosella features its own Events System which sits ontop of the Bukkit one. It is heavily inspired by Minestom's tree based system which I believe is perfect in every way. This project kinda ruins it a lot in order to let it be cross-platform, and there may be potential changes to come depending on how the rest of the project comes together. The team over there did a very good job.
Rosella is named after the species of bird, cuz birds are cool! And also I thought it'd be funny to name
a bunch of my new Minecraft library projects after different species of Parakeet.
I'm too proud of the name so now you get to hear about it in the Readme!
I am a Uni student in the Theatre industry and I only code for fun in my spare time. So like don't expect me to commit every single day and be there to accept contributions in 3 microseconds.
- Finish the events system (+ tests) and integrate it into the engine's components
- Split off the Bukkit platform onto a Seperate module
- Polish Rosella, Rosella Platform & Events System
- The setting up a rosella platform is kinda annoying with a bunch of functions and interfaces that you just kinda hope work, look into polishing this and making it a bit less finicky
- Events System also kinda a mess with the platform
- Potentially introduce some form of dependency injection stuff?
- Create the "GlobalScene" and scene management stuff
- Create "inherited GameObjects" (name in-progress) & Polish the whole Registry system
- As of right now, Player GameObjects just kind of exist in scenes and then don't. The idea is to have a master Player GameObject in the "GlobalScene" and then a child Player GameObject's in the scene, which simply inherits the Behaviours and properties of it's parent.
- This allows you to have some Behaviours which persist across player scene transitions. For example a Global Behaviour for Ranks/Roles/Permissions or Chat Handling and other global server stuff like that.
- Entity GameObjects, cuz entities are important too
- ✨ Environments ✨
- Fancy way of saying the actual physical minecraft space which a Scene takes place in.
- The overall plan is to have Environments hold stuff like structure data, locations, properties and fun things like that. But for now, they're just probably gonna be special worlds
- Create a simple game using the engine in
:test-projectand see how scuffed it is to use
- Map Manager for Environments, allowing users to build Environments and have the engine automatically create worlds for them, place structures and models and stuff, and pass locations and other custom properties straight to the engine
- Resource Pack stuff (maybe?)
- Fancy UI stuff using the Resource Pack stuff (maybe?)
- Debug Mod 😱
- Minestom support 😱
For now, this is a solo project but i may be up for Contributors at some point, however here are my important principles for this project:
- British spellings
- Avoid Reflection wherever possible
- No AI tools (Where is the fun if Claude just solves all your problems? also as a human in the arts industry, it just doesn't sit right with me. Call me a woke elder if you like)
If you made it to the end of the Readme, well done, I hope you enjoyed my ramblings! Have a cookie. 🍪