1.19.1 high-performance Minecraft server

Related tags

Games Graphite
Overview

Graphite

1.19.1 Minecraft Server

TODO

  • Complete protocol with all 1.19.1 Minecraft packets
  • Command dispatch system
  • Viewable objects (entities)
  • Allow multiple players to connect (and see each other)
  • Base lib crate that reexports everything
  • ItemStacks with NBT
  • Player Input Handling (Left/Right Click Air/Block)
  • TextComponent things & macro
  • Allow chunk/world modification
  • "Extras" subproject - raycasting, collision, ...

Subprojects

  • example_server: Example server using various Graphite components
  • server: The minecraft server. Entities, chunks, players, all that good stuff
  • concierge: Component that accepts new connections, handles status and login. Can be used to create proxies, servers, etc.
  • protocol: The minecraft protocol
  • net: Networking components and utilities
  • binary: Zero-copy serialization
  • command: Command dispatch and low-level creation
  • command_derive: Attribute macro to easily create commands
  • sticky: Collection(s) that guarantee the memory-location of its contents

Warning

Project is currently under heavy development, many things are completely non-functional

How to run the example server

!!! Currently Graphite only supports modern versions of Linux with io_uring !!!
(An alternative network backend will be available eventually, but is not a priority)

$ cargo run --bin example_server
Comments
  • no readme

    no readme

    a README.md is a great way to tell people what the heck your project is, how to help build it, and how to test what you’ve made. once you’re at the point where others can help, i’d highly recommend making one

    opened by ryleu 3
  • Transmute between `Vec` types in graphite NBT

    Transmute between `Vec` types in graphite NBT

    In crates/graphite_binary/src/nbt/decode.rs there is this

    let vec: Vec<u8> = arr_bytes.into();
    Ok(unsafe { std::mem::transmute(vec) })
    

    Transmuting between Vec types is incorrect because #[repr(Rust)] types make no guarantee about their layout. The Rustonomicon has this to say:

    So how do you know if the layouts are the same? For repr(C) types and repr(transparent) types, layout is precisely defined. But for your run-of-the-mill repr(Rust), it is not. Even different instances of the same generic type can have wildly different layout. Vec<i32> and Vec<u32> might have their fields in the same order, or they might not. The details of what exactly is and is not guaranteed for data layout are still being worked out over at the UCG WG.

    opened by rj00a 1
  • Rewrite it in rust

    Rewrite it in rust

    Rust is blazingly fast and memory-efficient: with no runtime or garbage collector, it can power performance-critical services, run on embedded devices, and easily integrate with other languages.

    Rust’s rich type system and ownership model guarantee memory-safety and thread-safety — enabling you to eliminate many classes of bugs at compile-time.

    Rust has great documentation, a friendly compiler with useful error messages, and top-notch tooling — an integrated package manager and build tool, smart multi-editor support with auto-completion and type inspections, an auto-formatter, and more.

    opened by SuperCuber 1
  • Replace `serde_nbt` with `valence_nbt` in the benchmarks

    Replace `serde_nbt` with `valence_nbt` in the benchmarks

    valence_nbt supersedes serde_nbt.

    Results from my computer

    graphite_parse_bigtest  time:   [1.6939 µs]
    valence_parse_bigtest   time:   [2.7973 µs]
    quartz_parse_bigtest    time:   [3.5792 µs]
    
    graphite_write_bigtest  time:   [493.81 ns]
    valence_write_bigtest   time:   [970.85 ns]
    quartz_write_bigtest    time:   [929.17 ns]
    
    graphite_find_bigtest   time:   [23.825 ns]
    valence_find_bigtest    time:   [59.474 ns]
    quartz_find_bigtest     time:   [50.074 ns]
    
    opened by rj00a 0
  • Players still receive viewable packets from despawned entities

    Players still receive viewable packets from despawned entities

    Entities which have been despawned due to player movement will still send packets to players (for 1 tick)

    This can be fixed by only sending viewable packets if the chunk is within BOTH chunk_view_position and new_chunk_view_position

    opened by Moulberry 3
  • Potential OOM bug/exploit in graphite NBT

    Potential OOM bug/exploit in graphite NBT

    In crates/graphite_binary/src/nbt/decode.rs the read_list function uses Vec::with_capacity(length as _). However, length has no upper bound. I believe malicious input could potentially allocate i32::MAX * sizeof(usize) bytes.

    The other read functions are correctly bounded.

    opened by rj00a 1
Owner
null
Fish Game for Macroquad is an online multiplayer game, created as a demonstration of Nakama, an open-source scalable game server, using Rust-lang and the Macroquad game engine.

Fish Game for Macroquad is an online multiplayer game, created as a demonstration of Nakama, an open-source scalable game server, using Rust-lang and the Macroquad game engine.

Heroic Labs 130 Dec 29, 2022
1.19.1 high-performance Minecraft server

Graphite 1.19.1 Minecraft Server TODO Complete protocol with all 1.19.1 Minecraft packets Command dispatch system Viewable objects (entities) Allow mu

null 135 Dec 31, 2022
1.19.1 high-performance Minecraft server

Graphite -- CURRENTLY ON HIATUS 1.19.1 Minecraft Server TODO Complete protocol with all 1.19.1 Minecraft packets Command dispatch system Viewable obje

null 140 Jul 12, 2023
A server software designed for fetching Minecraft and Minecraft-related metadata

Minecraft Metadata Server A server software designed for fetching Minecraft and Minecraft-related metadata (such as Forge, Fabric, Quilt and Liteloade

Prism Launcher 11 Jan 19, 2023
A high-performance, high-reliability observability data pipeline.

Quickstart • Docs • Guides • Integrations • Chat • Download What is Vector? Vector is a high-performance, end-to-end (agent & aggregator) observabilit

Timber 12.1k Jan 2, 2023
A simple scanner that loops through ips and checks if a minecraft server is running on port 25565

scanolotl Scanolotl is a simple scanner that loops through ips and checks if a minecraft server is running on port 25565. Scanolotl can also preform a

JustFr33z 3 Jul 28, 2022
Automatically download minecraft server jars in one line

MCDL Automatically download minecraft server jars in one line (or one click) Installation Download (Windows, Linux) Install via cargo: cargo install m

Isaac Hirschfeld 1 Oct 26, 2021
💤 Put your Minecraft server to rest when idle.

?? Put your Minecraft server to rest when idle.

Tim Visée 285 Jan 4, 2023
A simple, very minimal Minecraft server implementation in Rust.

A simple, very minimal Minecraft server implementation in Rust. For a simple Minecraft server that isn't supposed to do much (for example, a limbo ser

Chris 8 Dec 22, 2022
ULE - Minecraft's server core written in Rust

ULE - Minecraft's server core written in Rust This's server core fully written in Rust-Lang and using more custom code for best perfomance and control

null 13 Oct 26, 2022
This is a Minecraft Classic server written in Rust powered by tokio and classicl.

classicl_server Introduction This is a Minecraft Classic server written in Rust powered by tokio and classicl. Installation Cargo The project can be i

null 3 Nov 3, 2022
Proxies all incoming connections to a minecraft server of your choosing, while also logging all ping and login requests to a json file and discord webhook.

minecraft-honeypot Proxies all incoming connections to a minecraft server of your choosing, while also logging all ping and login requests to a json f

Cleo 19 Jan 4, 2023
A collection of crates to make minecraft development (client, server) with rust possible.

rust-craft rust-craft is a collection of crates to make minecraft development (client, server) with rust possible. Motivation There's no better way of

João Victor 15 Mar 23, 2023
A programming language designed for the DiamondFire Minecraft server.

Blackstone Blackstone is a programming language designed to help create plots on the MCDiamondFire Minecraft server. Community Links Discord: https://

Blackstone 5 May 1, 2023
Rust implementation of the Minecraft authentication server (Yggdrasil)

yggoxide This crate currently implements the REST API for: Service Exposed at Minecraft Production Coverage Yggdrasil authentication / and /authserver

Mojank Studios 16 Jun 26, 2023
A reimplementation of the minecraft server framework in rust.

FerrumC About FerrumC is a Rust-based reimplementation of the Minecraft server, designed to be fast and efficient, optimized for low memory usage and

Sweattypalms 3 Sep 4, 2023
kytan: High Performance Peer-to-Peer VPN in Rust

kytan: High Performance Peer-to-Peer VPN kytan is a high performance peer to peer VPN written in Rust. The goal is to to minimize the hassle of config

Chang Lan 368 Dec 31, 2022
A high performance blockchain kernel for enterprise users.

English | 简体中文 What is CITA CITA is a fast and scalable blockchain kernel for enterprises. CITA supports both native contract and EVM contract, by whi

CITAHub 1.3k Dec 22, 2022
High performance and distributed KV store w/ REST API. 🦀

About Lucid KV High performance and distributed KV store w/ REST API. ?? Introduction Lucid is an high performance, secure and distributed key-value s

Lucid ᵏᵛ 306 Dec 28, 2022
A high-performance observability data pipeline.

Get Started • Docs • Guides • Integrations • Chat • Download What is Vector? Vector is a high-performance, end-to-end (agent & aggregator) observabili

Timber 12.1k Jan 7, 2023