Minestom - a minecraft server creator library

Discussion in 'Programming' started by TheMode911, Apr 20, 2020.

  1. Hello,
    I am here to present my homemade Minecraft server implementation (different from the Notchian one made by Mojang).
    Discord server: https://discord.gg/RAySDQA

    You can take a look at the readme to have a glimpse over what I want to achieve but firstly, I'll say that my goal isn't to replace spigot at all. We have different goals in mind which are why I thought that making this implementation could be good for some people.

    The goal here is to offer a way to make a server without the vanilla features that take most of your CPU power for nothing (I'm thinking about the world system, AI, pre-calculated things for nothing), and obviously, the whole server here is multi-threaded!

    !NEW! Vanilla features are gonna be implemented as an optional addon over here:

    The implementation is already fully functional for basics servers (such as PVP-box, lobby, building) but not much for survival solely because I miss a proper pathfinding library (if someone is willing to make one, it'll be appreciated)

    List of features that I do need to implement (with possibly your help):

    Here an example of having a lot of players without lag:

    My custom block system:

    The event system:

    (BTW you can see that the 64 stack limit has been shifted)

    Now, taking a look at my library, which is then a "Minecraft server creator library" is made to be easy to use but offers a lot of freedom.
    I'll take my demo package as an example. Here the main class: https://github.com/TheMode/Minestom/blob/master/src/main/java/fr/themode/demo/Main.java

    The instance creation: https://github.com/TheMode/Minestom/blob/master/src/main/java/fr/themode/demo/PlayerInit.java#L34

    The event system: https://github.com/TheMode/Minestom/blob/master/src/main/java/fr/themode/demo/PlayerInit.java#L92

    Well if you have any other questions, I'll be happy to answer them. I am taking this project at heart and plan to finish it one day. BTW I'm also using this post as a recruitment opportunity, so if you saw the Trello and are interested, feel free to contact me.
    #1 TheMode911, Apr 20, 2020
    Last edited: May 2, 2020
    • Like Like x 23
    • Creative Creative x 6
    • Winner Winner x 3
    • Agree Agree x 2
  2. Entity -> block collision 100% working
    Inventory clicks 100% working (didn't test to cancel the click event yet but it should work)
    Arm animations (bow, crossbow, food, etc...) working
    • Agree Agree x 1
  3. Did officially added the Minestom server implementation to the wiki.vg server list page: https://wiki.vg/Server_List

    Since my main argument to use Minestom is performance, here what my monitoring tools tell me about all threads and the memory usage:

    Attached Files:

  4. Well done sir, good project. :)
    • Friendly Friendly x 2
  5. Thanks for the support :)
  6. This looks very interesting, I can imagine vast customization with this.
  7. Thanks, this is indeed the goal.

    I do plan to make use of it in production, by allowing players to script their own mini-server all on the same central server without relying on bungee
    • Like Like x 2
  8. That would actually be pretty cool, imagine each player having its own world to rule, that would surely bring massive uniqueness along with creativity.
    • Like Like x 1
  9. Exactly that, and I'll bring a kind of "addon shop" where everyone can make their own addon using typescript/javascript and allow other server owners to use them

    The idea is nice but really hard not to say impossible to do with Spigot, that's just two completely different use case
  10. Entity gravity fixed and a whole bunch of other things.

    More than ever ready for PVP/hobby servers
    #10 TheMode911, Apr 23, 2020
    Last edited: Apr 23, 2020
  11. Much faster chunk writing (by splitting the CPU power) and package renamed
    • Winner Winner x 1
  12. Here a preview of working entities:
  13. joehot200


    This looks interesting. Is it eventually planned to support plugins?
  14. At least not bukkit ones. (since I do not offer vanilla features, and anyway being multithreaded prevent some things)
    But anyone can create a plugin handler above since you can easily listen to packets and events
  15. Did change the map-based chunk storage to an array, which should result in a lower block getter time but will (maybe?) increase the memory usage since the array is already at the maximum size.
    Do not seem to be too bad considering 230-400MB memory usage for the whole server + 100 chunks loaded.
  16. I just found out about this and I've looked into like different more optimized Minecraft servers but couldn't really find one since I still wanted like 1 or 2 plugins to make it a little bit more fun and be able to run it on a low spec pc or even raspberry pi. You totally had me with typescript/javascript addons. I'm a programmer and I absolutely love javascript.
    • Friendly Friendly x 1
  17. Thanks for the support :)
    There's actually not many Minecraft server implementation, simply because they generally try to add too many features while forgetting that Mojang still adds a lot after each update. In the end, many give up seeing all they have to do.

    I haven't been able to try on any machine except mine for the moment, but I do believe that a raspberry could handle it. Except maybe concerning memory, I guess that 2/3GB is enough

    For the scripting support, it is actually something that I plan to add outside of this project (build upon it but separated) since the main programming language should remain java
  18. Becoming more and more usable, added void check, damage type, dimension support (who never dreamed to have the nether sky)
  19. A new project built upon Minestom came to light, its goal is to provide all vanilla features into Minestom directly for anyone needing them:

    Not much to see right now except this magnificent world generation
    • Like Like x 1
  20. @TheMode911 Nice I love the update. I wish I was more provicient in Java so I could help with this project or just play around with it myself haha but tbh I don't even know how to get started with the source on the GitHub xD
    • Like Like x 1