ReSplatted is a Project created in rust. This project aim to be a fully customizable stress test tool. For now, you can stress tool to a 26.1.2 Minecraft server
The project is structured in differents crates to have a better modularity:
resplatted: The main binary. Inside is the CLI and the virtual Minecraft clientresplatted-protocol: The internal network processing library. It encapsulates the serialization/deserialization of Minecraft packets, I/O stream extensions, and the strict definition of protocol states.
- Rust and Cargo (stable version).
- On Linux/WSL environments (e.g., Ubuntu): ensure you have the basic build tools installed (
sudo apt install build-essential).
You can either get the project in the release section or clone the repository and build the project yourself.
git clone https://github.com/hthug06/ReSplatted.git
cd ReSplatted
cargo build --release -p resplattedRun the CLI tool with the target Minecraft server's address and port:
resplatted --address <ip_or_hostname> [OPTIONS]| Option | Short | Default | Description |
|---|---|---|---|
--address |
- | Required | The server IP or hostname |
--bot_number |
-b |
1 |
The number of bot sent to the server |
--message |
-m |
- |
A message every bot will spam every second |
--name |
-n |
ReSplatted |
The name of the bot (ex: test will be test_1, test_2, ...) |
--port |
-p |
25565 |
The target server port |
--status |
-s |
false |
See infos about the targetted server like in the server list of a minecraft client |
--wait |
-w |
1 |
The base waiting time (in ms). Used differently depending on the waiting-mode. |
--waiting_mode |
- |
Linear |
Waiting mode between each bot connection. Linear: delays each bot by (index * wait). Static: every bot waits exactly 'wait' ms. Random: every bot waits a random time between 0 and 'wait'. |
Retrieve complete information from a public server:
resplatted --address mc.hypixel.net --statusOutput:
📌 Version : Requires MC 1.8 / 1.21 (Protocol version : 775)
👥 Players : 17024 / 200000
📝 MOTD : Hypixel Network [1.8/26.1]
SB LOTUS ATOLL - BW DREAMFEAST
🖼️ Favicon : Saved in ./temp/mc.hypixel.net_favicon.png
ReSplatted is built with Rust and the tokio asynchronous runtime, designed to be extremely lightweight and blazingly fast. It uses asynchronous I/O and shared memory states (Arc) to spawn thousands of concurrent connections without overwhelming the host machine.
Tested on a local environment sending 1,000 concurrent bot connections to a local server. (Needed to use a rust server software like SteelMC or PumpkinMC, java server like PaperMC can't handle 1000 or can, but I don't have the money for a big server.)
Test Environment:
-
CPU: AMD Ryzen 5 7520U (4 Cores / 8 Logical Processors @ 2.80 GHz)
-
Host RAM: 16.0 GB
-
OS: Linux Ubuntu (WSL2) - Kernel 6.6.114.1 (WSL Available RAM: 7.4 GB available)
-
Command: ./resplatted --address localhost -n 1000 --waiting-mode linear -w 100
Resource Footprint:
-
Memory (RAM): ~16.5 MB (Resident Set Size)
-
CPU Usage: ~6.0% total (48.39% of a single core out of 8)
-
Cost per Bot: ~16.5 KB of RAM | ~0.060% CPU per bot
-
Note: To achieve these results, ensure you compile and run the tool in release mode using cargo run --release. Debug mode will consume significantly more CPU and Memory.
- This project is a way for me to learn rust and the Minecraft protocol.
- ReSplatted is a direct continuation of my previous project Splatted. Go check it if you are interested
- I used IA for this project, not for coding but to think about the architecture. I want to avoid using IA for coding because I want to learn and understand the code I write.
- The project is still in early development, so expect some bugs and missing features. I will try to add more features in the future, but for now, I want to focus on the core functionality of fetching server information.
- If you have any suggestions or want to contribute, feel free to open an issue or a pull request (made suggestion about feature pls I'm so dumb idk what to make). I will be happy to review it and merge it if it's good.
- I don't really know the real objective for now, create a stress test tool or an entire Minecraft client in rust? I was also thinking of a chunk viewer (I'm too indecisive lol)
Made with passion, because I was bored and also because I like Minecraft :)