Linux Minecraft server meant to host a DOOM style TDM game.
The general idea behind this project is to use the Minecraft internet protocol to create a unique player experience. There is nothing in the protocol itself that requires the game sync'd with the protocol to be an open world survival sandbox. So if we were to say convert DOOM maps to blocks, send these blocks once and make the map immutable, and hijack packets for clicking left click as shooting packets we would have a basic DOOM TDM server.
Once the player starts connecting they are put into a random lobby. Each lobby is running a single map. Additionally each lobby has two threads, one for receiving player data, and the other one for performing game ticks. Player synchronization overall is split "equally" between the two threads.
The server by default needs maps placed in the /maps subdirectory next to the server executable. As of right now the server supports two types of map files:
In order to run this server you will need to compile it. This software is exclusively for Linux and trying to compile it under other *nix systems will result in problems.
-
Install make
-
Install requirements If you are running a Debian derived Linux run the requirements target.
make requirements
Otherwise find the needed packages in your manager of choice based on the target specification.
-
Compile Run the server target and it should work as is and compile fine assuming you have all the necessary requirements installed.
make server
In order for the server to properly run some static files need to be available next to it. These are:
- registryCodec.nbt - this is a raw nbt file containing the registry coded. Extracted from a vanilla 1.19.4 server via a modified client
- tags.bin - raw contents of the Update Tags packet extracted from a vanilla 1.19.4 server
- status.json - json template that will be sent to be displayed on the server list
- version.json - Json definition of all blocks and items in Minecraft 1.19.4 taken from PixLyzer data(mirror)
As of right now the project is still under development. The server works in the very basic sense. I am still struggling with player synchronization, a big milestone will be having two players in a lobby being able to see each other and having the position and rotation accurately. Feel free to help.
Long term TODO
- Support for older than 1.19.4
- Support for newer than 1.19.4
- Tests
- Fuzzing (libfuzzer)
- Position verification
- Anticheat
- Plugins for commands