Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork54
A reimplementation of the minecraft server in rust.
License
ferrumc-rs/ferrumc
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
FerrumC is a1.21.5 Minecraft server implementation written from the ground up in Rust. Leveraging the power of theRust programming language, it is completely multithreaded and offers high performance as well as amazing memoryefficiency!
Docs are currently under construction, but you can joinourDiscord server for help or to discuss the project!
- Performance: FerrumC aims to be the fastest Minecraft server implementation available, with a focus on low latencyand high throughput.
- Memory Efficiency: FerrumC is designed to use as little memory as possible while still providing a full-featuredserver experience.
- Not just a faster replacement: FerrumC is not intended to be a perfect match for the vanilla server. We aim toimprove on the original server in ways other than just performance. This includes things like setup and usage,configurability,plugins, gameplay mechanics like mob AI, terrain generation and more. Simply speeding up the server feels like a wasteof the opportunity to do something new and exciting.
- Ease of Use: While it will certainly possible to run FerrumC as the backend for highly complex servers such asHypixel through the use of plugins, the main intended audience is the average user who wants to run a server for theirfriendsand family. We want to make it as easy as possible to set up and run a server, while still allowing the flexibilityand power that advanced users need.
- Not taking the easy route: We aren't scared of a little unsafe Rust or some raw SIMD instructions. If we needto take some risks to get the performance we want, or need to write our own versions of libraries to get the featureswe need, we will do it. We already have custom-made Anvil and NBT libraries that use experimental APIs and some rawassembly because the existing ones just weren't up to scratch.
- Rust compiler (latest nightly version)
- Cargo (comes with Rust)
Unfortunately, the server isnot yet ready for production use. We are still in the earlystages of development and are working hard to add more features and fix bugs.For now, you can eithercompile the server from source ordownload from Github Actions.
- Go to theActions tab
- Click on the latest build
- Scroll all the way down to the
Artifacts
section - Download the artifact for your operating system (Windows, Linux, or macOS)
- Follow the instructions in the
Usage
section
# Clone the repositorygit clone https://github.com/ferrumc-rs/ferrumccd ferrumc# Build the projectcargo build --release
Usage: ferrumc.exe [OPTIONS] [COMMAND]Commands:setup Sets up the configimport Import the world datarun Start the server (default, if no command is given)help Print this message or the help of the given subcommand(s)Options:--log <LOG> [default: debug] [possible values: trace, debug, info, warn, error]-h, --help Print help
- Move the FerrumC binary (
ferrumc.exe
orferrumc
depending on the OS) to your desired server directory - Open a terminal in that directory
- (Optional) Generate a config file:
./ferrumc setup
- Edit the generated
config.toml
file to customize your server settings
- Edit the generated
- Import an existing world: Either copy your world files to the server directory or specify the path to the world filesin the
config.toml
file. This should be the root directory of your world files, containing theregion
directoryas well as other folders like DIM1, playerdata, etc. The default import path isimport
so you should end up with adirectory structure like this:server_directory├── config.toml├── ferrumc.exe├── import│ ├── region│ │ ├── r.0.0.mca│ │ ├── r.0.1.mca│ │ ├── ...│ ├── DIM1│ ├── playerdata│ ├── ...
- The location of these files is explainedhere.
- Run the server:
- Windows:
.\ferrumc.exe
- Linux/macOS:
./ferrumc
- You can change logging level by using
--log=<level>
:- e.g.
.\ferrumc.exe --log=info
for info level logging - Possible values:
trace
(Extremely verbose)debug
(Default, Slightly verbose, used for debugging)info
(Recommended, useful information)warn
(Only warnings)error
(Only errors)
- e.g.
- Windows:
We welcome contributions! If you'd like to contribute to FerrumC, please follow these steps:
- Fork the repository
- Create a new branch for your feature
- Implement your changes
- Write or update tests as necessary
- Submit a pull request
Please join ourDiscord server to get help or discuss the project!Also have a look at ourCONTRIBUTING.md file for more information.
- Valence: Valence is a framework for building your own custom server by pulling in different components of theirlibrary. FerrumC aims to be a full replacement for the vanilla server. It's like the difference between buying theingredients to make a meal yourself or just buying a pre-made meal.
- Minestom: Same as Valence, it's a framework to build your own server, which is different to what we are trying todo.
- Paper/Spigot/Bukkit: These are all great tools and have undoubtedly set the groundwork for projects like this toexist, but ultimately they are still somewhat bound to the original server implementation. We aim to write the entireserver from the ground up, hopefully giving us a leg up.
- Pumpkin: Pumpkin are a lot more focused on matching the vanilla server as close as possible, only improving theperformance.We are trying to improve most aspects of the game, including ease of use, performance, memory usage and extensibility.That being said, we are trying to achieve similar things, and it's not a competition, we are both aware of eachother'sprogress and to be honest the Pumpkin team are doing really well. We won't tolerate any disrespect towards them asthey are also undertaking the same monumental task.
Yes! We currently have some very rudimentary terrain generation, but we are working on improving it. We are not going tobe attempting to match the vanilla generation exactly since it would be alot of work for little gain and frankly, wesee it as kinda boring. What's the fun in just translating decompiled code to Rust? We are going to be implementing ourown custom system that can generate (hopefully) more interesting worlds.
We do very much plan to have a plugin system and as of right now we are planning to usesome kind of FFI (foreign function interface) to allow for plugins to be written in Rust. From there it would bepossibleto write plugins that can allow for other languages to be used, but we are not going to be focusing on that for a while.
It's a play on words. Ferrum is the Latin word for iron and itrusts. And MC (Minecraft) in the end.So it becomes Ferrumc. Get it? 😄
This project is licensed under the MIT License - see theLICENSE.md file for details.
About
A reimplementation of the minecraft server in rust.
Topics
Resources
License
Code of conduct
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Releases
Sponsor this project
Uh oh!
There was an error while loading.Please reload this page.
Packages0
Uh oh!
There was an error while loading.Please reload this page.