1.18.1 Lightweight and multi-threaded Minecraft server
Go to file
mworzala a032bc32a7 chore: field reordering
(cherry picked from commit 2b0737615f8171a0172ba902786da0542f962d78)
2024-01-16 10:43:26 -05:00
.github chore: fix the commit sha used for the published version 2024-01-16 10:43:26 -05:00
code-generators chore: port DamageType cleanup change from MelonHell 1.19.4 PR 2024-01-16 10:43:26 -05:00
demo fix: update advancement packet to 1.20.4 2024-01-16 10:43:26 -05:00
gradle upgrade: 1.20.4 data, most missing packets 2024-01-16 10:43:26 -05:00
jcstress-tests Improve tag performance + concurrency tests (#1165) 2022-06-25 10:36:50 +02:00
jmh-benchmarks New command parser (#1235) 2022-07-25 19:34:40 +02:00
src chore: field reordering 2024-01-16 10:43:26 -05:00
testing Fix testing (v2) (#99) 2024-01-16 10:43:26 -05:00
.editorconfig Enabled compression by default, provide .editorconfig file 2021-03-27 19:44:09 +01:00
.gitignore Exclude world folder created by saving in the demo. (#1282) 2022-07-26 15:39:40 +02:00
build.gradle.kts chore: update description (ci trigger in reality) 2024-01-16 10:43:26 -05:00
CHANGELOG.md hollow-cube/block-update-changes 2023-07-16 08:33:09 -04:00
gradlew Build system update (#527) 2022-01-10 16:51:21 +01:00
gradlew.bat Update Gradle & Kotlin version 2021-01-23 09:32:18 +01:00
jitpack.yml Remove before_install 2022-02-13 16:12:38 +01:00
LICENSE Added license 2020-04-25 23:38:09 +02:00
minestom_checks.xml Upgrade gradle version to 7.0.2 2021-05-18 21:34:25 +02:00
settings.gradle.kts hollow-cube/gradle-rework (#8) 2023-05-06 23:18:22 +03:00

banner banner

Minestom

license standard-readme compliant
javadocs wiki discord-banner

Minestom is an open-source library that enables developers to create their own Minecraft server software, without any code from Mojang.

The main difference between Mojang's vanilla server and a minestom-based server, is that ours does not contain any features by default! However, we have a complete API which is designed to allow you to make anything possible, with ease.

This is a developer API not meant to be used by end-users. Replacing Bukkit/Forge/Sponge with this will not work since we do not implement any of their APIs.

Warning

minestom-ce is a fork with breaking changes from Minestom/Minestom. The list of changes can be found here.

Table of contents

Install

Minestom is not installed like Bukkit/Forge/Sponge. As Minestom is a Java library, it must be loaded the same way any other Java library may be loaded. This means you need to add Minestom as a dependency, add your code and compile by yourself.

minestom-ce is available on Maven Central, and can be installed like the following (Gradle/Groovy):

repositories {
    mavenCentral()
    maven { url 'https://jitpack.io' }
}

dependencies {
    implementation 'dev.hollowcube:minestom-ce:<first 10 chars of commit hash>'
}

Usage

An example of how to use the Minestom library is available here. Alternatively you can check the official wiki or the javadocs.

What is minestom-ce?

minestom-ce is a fork of Minestom/Minestom with some controversial/breaking changes. It was originally started as @mworzala's personal fork for making changes, but has since been used by a number of others and aims to be relatively stable. The high level goal of many changes are to make Minestom more of a library and less of a server implementation. For example:

  • Removing extensions
  • Removing logging & terminal implementations

The name "community edition" is not a reflection of an intentional rift between the two projects, it was just a joke between a few people that stuck. I (@mworzala) am very happy for changes in minestom-ce to be merged back to Minestom/Minestom, I just do not necessarily have the time to do so myself.

Why Minestom?

Minecraft has evolved a lot since its release, most of the servers today do not take advantage of vanilla features and even have to struggle because of them. Our target audience is those who want to make a server that benefits little from vanilla features. e.g. creative, kitpvp. The goal is to offer more performance for those who need it. In other words, it makes sense to use Minestom when it takes less time to implement every missing vanilla feature you want than removing every vanilla feature that will slow you down.

Advantages and Disadvantages

Minestom isn't perfect, our choices make it much better for some cases, worse for some others.

Advantages

  • Remove the overhead of vanilla features
  • Multi-threaded
  • Instance system (Collections of blocks and entities) which is much more scalable than worlds
  • Open-source
  • Modern API
  • No more legacy NMS

Disadvantages

  • Does not work with Bukkit/Forge/Sponge plugins or mods
  • Does not work with older clients (using a proxy with ViaBackwards is possible)
  • Bad for those who want a vanilla experience
  • Longer to develop something playable
  • Multi-threaded environments need extra consideration

API

Even if we do not include anything by default in the game, we simplify the way you add them, here is a preview.

Instances

It is our major concept, worlds are great for survival with friends, but when it scales up it can become unmanageable. The best examples can be found in Skyblock or minigames, not being able to separate each part properly and being forced to save everything in files, not to say the overhead caused by unnecessary data contained in them. Instances are a lightweight solution to it, being able to have every chunk in memory only, copying and sending it to another player in no time, with custom serialization and much more...

Being able to create instances directly on the go is a must-have, we believe it can push many more projects forward.

Instances also come with performance benefits, unlike some others which will be fully single-threaded or maybe using one thread per world we are using a set number of threads (pool) to manage all chunks independently from instances, meaning using more CPU power.

Blocks

Minestom by default does not know what is a chest, you will have to tell him that it opens an inventory. Every "special blocks" (which aren't only visual) need a specialized handler. After applying this handler, you have a block that can be placed anywhere simply. However, all blocks are visually there, they just won't have interaction by default.

Entities

The terms "passive" or "aggressive" monsters do not exist, nobody stops you from making a flying chicken rushing into any players coming too close, doing so with NMS is a real mess because of obfuscation and the large inheritance.

Inventories

It is a field where Minecraft evolved a lot, inventories are now used a lot as client<->server interface with clickable items and callback, we support these interactions natively without the need of programming your solution.

Commands

Commands are the simplest way of communication between clients and server. Since 1.13 Minecraft has incorporated a new library denominated "Brigadier", we then integrated an API designed to use the full potential of args types.

Credits

Contributing

See the contributing file! All WIP features are previewed as Draft PRs

License

This project is licensed under the Apache License Version 2.0.