By Cuba Giesbrecht and Aiden Waring
The goal of this project is to write a minecraft server client focused around being high performance and multithreaded. The server will be written in C++ to give the performance of a compiled language while also utilizing the performance of explicit memory management (no garbage collection). The server client will allow vanilla java edition player clients to connect to the server seamlessly.
(We will be targeting Minecraft Java version 1.21 as our working version to start.)
- Handle Java edition TCP handshakes.
- Recreate all Vanilla gameplay mechanics.
- Multithread common performance issues in the vanilla Minecraft server client (Multithreading certain tasks may cause vanilla gameplay interactions to not perform as they usually do, we will decide which interactions can be preserved versus performance).
- Chunk loading/generation
- Lighting
- AI pathing
- Entity handling
- Create Java wrapper functions to allow for plugins to be written in Java just as traditional Java edition server clients do (i.e. Bukkit and Spigot).
- Create Java wrapper functions for mods to be written with an API similar enough to Fabric that it would allow existing mods to be easily or seamlessly ported to our server.
- Offload work to a GPU array (see CUDA Programming).
- Works across platforms Linux and Windows (Only supports Linux right now)
- Simple build process. The project must use near zero external libraries. A user should be able to download the code and build it easily. External libraries may be acceptable for non-release version such as Google Tests for testing the program.
This project is aimed at being a Linux(x86-64) server client as this is the primary operating system for server hosting. It will support Windows in the future.
To build this project you just have to run:
make
and it will create the bin folder containing the binary.
To remove the build files and executable run:
make clean
Note: This is being designed for the x64 Linux platform
To run:
cd bin/
./MinecraftServer
Note: You may attempt to build with these other options if you so wish
This option has not been thouroughly tested at the moment, but is available:
make fast
If you are having issues I may ask for you to build with:
make debug
So that I can help diagnose the issue.
- Networking Handles all Packets up to the Play State
- Player can load into void world
- Player can load into flat world
- Commands check for senders permission level (player or console or op)
- Networking Handles all Play State packets
- Item entities moving in the world have rubberbanding movement