Skip to content

andrewgazelka/hyperion

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Hyperion

Discord invite link

Hyperion is a Minecraft game engine that aims to enable a 10k player PvP battle to break the Guinness World Record (8825 by EVE Online). The architecture is ECS-driven using Flecs Rust.

I would greatly appreciate the contribution. To see what to work on check the issues page or join Hyperion's Discord for the latest updates on development.

Demo Usage using Block API

Note: performance has improved since this video was recorded.

hyperion.webm

Benchmarks

Players Tick Time (ms) Core Usage (%) Total CPU Utilization (%)
1 0.24 4.3 0.31
10 0.30 10.3 0.74
100 0.46 10.7 0.76
1000 0.40 15.3 1.09

Test Environment:

  • Machine: 2023 MacBook Pro Max 16" (14-cores)
  • Chunk Render Distance: 32 (4225 total)
  • Commit hash faac9117 run with just release
  • Bot Launch Command: just bots {number}

Note on Performance: Most of the computational cost is fixed due to synchronization with all threads. A couple of $$O(1)$$ cost sync points ( with respect to player count) during each game tick. This explains why performance is not strongly correlated with the number of players. The overhead of thread synchronization dominates the performance profile, resulting in relatively stable tick times even as the player count increases significantly.

The primary burden relies on our proxy that can be horizontally scaled. A lot of logic including regional multicasting is done in the proxy.

image

Running

Debug mode

brew install just
just

Release mode

brew install just
just release

Feature Support Matrix

This list is not comprehensive. Feel free to PR or file an issue if something is missing/incorrect.

Feature Hyperion Pumpkin FerrumC Valence Minestom*
Language Rust Rust Rust Rust Java
Goal game engine for massive events 1:1 vanilla re-impl 1:1 vanilla re-impl game engine game engine
Structure flecs ECS custom ECS custom ECS bevy ECS non-ECS paradigm
Major Dependencies valence**
Can handle 10k players βœ… ❌ ❌ ❌ ❌
Used in production ❌ ❌ ❌ ❌ βœ…
Stable and large adoption ❌ ❌ ❌ ❌ βœ…
Proximity Voice (Simple Voice Chat) βœ… ❌ ❌ ❌ βœ…
Lighting βœ… ❌ βœ… ❌ βœ…
Placing blocks βœ… ❌ ❌ ? βœ…
Breaking blocks βœ… ❌ ❌ ? βœ…
Blocks physics βœ… ❌ ❌ ❌ βœ…
Entity-entity collisions βœ… ❌ ❌ ❌ βœ…
Block-entity collisions βœ… ❌ ❌ βœ… βœ…
World borders βœ… ❌ ❌ βœ… βœ…
Block Edit API (think WorldEdit) βœ… ❌ ❌ βœ… βœ…
PvP βœ… ❌ ❌ βœ… βœ…
Vertical scaling (fully multi-threaded) βœ… ❌ ❌ βœ… βœ…
Horizontal scaling βœ… ❌ ❌ ❌ ❌
Advanced tracing support βœ… (tracy) ❌ ❌ βœ… ❌
Set Resource Packets ❌ ❌ ? βœ… βœ…
Minecraft 1.20.1 βœ… ❌ βœ… βœ… βœ…
Minecraft 1.21.x ❌ βœ… ❌ ❌ βœ…
Proxy Support (Velocity) βœ… βœ… ? βœ… βœ…
Inventory βœ… βœ… ? βœ… βœ…
Particle Support βœ… βœ… ? βœ… βœ…
RCON ❌ βœ… ❌ ? βœ…
Chat Support ❌ βœ… ? βœ… βœ…
Command Support βœ… βœ… ? βœ… βœ…

* = Minestom has many more features than we've mentioned here. If you're comfortable using Java and want to run a minigame Minecraft server in a production environment, Minestom is a good choice. It's especially recommended if you don't need to support an extremely large number of players (like thousands).

** = we depend on these (forked) crates from valence

valence_anvil
valence_build_utils
valence_entity
valence_generated
valence_ident
valence_ident_macros
valence_math
valence_nbt
valence_protocol
valence_protocol_macros
valence_registry
valence_server
valence_server_common
valence_text

Releases

No releases published

Packages

No packages published

Languages