A powerful minecraft bedrock software written in Rust with a powerful Typescript plugin API.

Overview

Netrex

Netrex

A powerful minecraft bedrock software written in RustLang.

Discord

Why Netrex?

  • It's written in Rust.
  • Unique and straight to the point.
  • Typescript Plugin API
  • Single Executable.
  • Open Source.

The Game Plan

We have a plan for the initial release! View it on our projects page!

Scripts

All scripts can be accessed and viewed through the terminal by running deno run -A ./scripts/mod.ts in the home directory, or by installing them with deno. In this case, the name will be "nsc".

Install Netrex Scripts

deno install -A -f -n nsc https://raw.githubusercontent.com/NetrexMC/Netrex/master/scripts/mod.ts
Comments
  • [QOP] Results should be used where errors

    [QOP] Results should be used where errors "unwraps" or panics can occur.

    Issue / Question: Currently, we do not use results, and as a result, a simple function such as u32::compose(&[0, 0, 0, 1], &mut 0) may panic, and kill the main thread. We expect a possible error here therefore it should NOT terminate the main thread, but rather just error in console, with a description of what happened.

    Proposals / Details: In places where an unwrap or any function that has the potential to voluntarily panic we should be using results. Consider the following potentially erroneous code:

    fn do_read(some_bytes: &[u8]) -> String {
        // read the first byte (length) of the string.
        let length = some_bytes[0];
        // now read for length
        let contents = &some_bytes(1..length);
        String::from_utf8(contents).unwrap()
    }
    

    This proposal would change the potentially erroneous code above to:

    fn do_read(some_bytes: &[u8]) -> Result<String, ErrorEnum> {
        // read the first byte (length) of the string.
        let length = some_bytes[0]?;
        // now read for length
        let contents = &some_bytes(1..length);
        String::from_utf8(contents)?
    }
    
    Question 1 week 
    opened by Bavfalcon9 3
  • Feat: RakNet

    Feat: RakNet

    • [x] Responds to Offline Packets (0x0 - 0x1c)
    • [x] Shakes the clients connection (Connection sequence) properly
    • [x] Accumulates ACK, NACK packets.
    • [x] Properly handles frames and NACK responses.
    Network Major Core 
    opened by Bavfalcon9 3
  • Event Function not mutable with current implementation.

    Event Function not mutable with current implementation.

    Event Function not mutable with current implementation.

    Currently, we have an issue with how RakNet handles events. (this may be moved to raknet after further analysis) The issuing being, the event subscriber function must be able to verify that the instance of the Server lives statically, which is unfortunately not possible. In the context of code, this looks like:

    struct Server;
    
    impl Server {
        fn start(&mut self, address: &str) {
            // We can try to create an "Arc" which references self directly
            let self_ref = Arc::new(&self);
            
            // However we can not validate that this will live statically, which
            // is required by raknet.
            let mut rak_server = RakNetServer::new(address.to_string());
            let (_send, _work) = raknet_start!(raknet, move |event: &RakNetEvent| {
    			match event.clone() {
    				RakNetEvent::GamePacket(address, buf) => {
    					// Error: self may not live for the entirety of this thread.
                        self_ref;
    					Some(RakResult::Motd(Motd::default()))
    				}
    				_ => None
    			}
    		});
        }
    }
    

    I'm still currently brainstorming how we could solve this issue, as it's something that affects the servers functionality entirely.

    1 week 
    opened by Bavfalcon9 2
  • You're using TypeScript. Why use '#' to initialize a private property?

    You're using TypeScript. Why use '#' to initialize a private property?

    You're using TypeScript. Why use # to initialize a private property when you can just use the private type.

    #network: RakServer can be private network: RakServer

    Not Fixing 
    opened by DelxHQ 1
  • chore: Migrate core to rust

    chore: Migrate core to rust

    Questions & Answers

    Why?

    Rust is fast, and allows us to practice better memory practicing, allowing us to write efficient code with incredible speed.

    So will the Deno Typescript code be discarded?

    I plan on keeping a maintained branch with a similar api to the incoming changes for the rust version; this is because I am not set on removing the TypeScript version, as I think it would be a good reference for benchmarking the rust version, as well as offering an opportunity for more people to contribute to it.


    Plugin API

    While the core code will be migrated to rust, we will still be using a TypeScript plugin API integrated with Deno. The plugin API will be isolated, meaning each plugin will run in it's own "context" to allow full usage of Deno's "secure by default" motive as well as better control of developing and debugging plugins.

    Please only use this PR for reporting issues with this PR itself, for discussions refer to: https://github.com/NetrexMC/Netrex/discussions/8

    opened by Bavfalcon9 0
  • Custom Logger crate

    Custom Logger crate

    To remove redundancies and allow more control on debugging vs actual prints there should be a logger crate that can be used in all sub-crates of netrex like raknet and protocol.

    opened by Bavfalcon9 0
  • Server Ticks? Or not?

    Server Ticks? Or not?

    Should the server itself tick? I'm thinking probably not because each world should be reliable for ticking, as ticking on the server (because it's a mutex) will hold a handle to everything for the duration of that tick, when we only need to tick worlds as they are open.

    Please provide input here 😄

    Question 
    opened by Bavfalcon9 1
  • Entities and Player implementation

    Entities and Player implementation

    Entities and Player implementation

    • [ ] 1. Basic implementation of packets required to handle entities via Protocol

      • [ ] TO DO
    • [ ] 2. Skins (or related)

    • [ ] 3. Entity NBT

    • [ ] 4. Entity Ticking

    2 weeks 
    opened by Bavfalcon9 0
  • Working login sequence (player spawn)

    Working login sequence (player spawn)

    Working login sequence (player spawn)

    • [ ] 1. Basic implementation of packets required to log in via Protocol

      • [x] Login
      • [x] Server to Client Handshake
      • [x] Client to Server Handshake
      • [x] Play Status
      • [ ] Resource Packs Info
      • [ ] Resource Pack Client Response
      • [ ] Resource Pack Stack
      • [ ] Start Game
      • [ ] Creative Content
      • [ ] Biome Definition List
      • [ ] Chunks
    • [ ] 2. Login authenticator: Handles logins (such as XBL validation)

    • [ ] 3. Pesudo packet implementation

    • [ ] 4. Start Game Packet:

      • [ ] Working block tables
      • [ ] Working item tables
    1 week 
    opened by Bavfalcon9 0
  • Migrate core to rust and maintain TS plugin api (Deno)

    Migrate core to rust and maintain TS plugin api (Deno)

    Questions & Answers

    Why?

    Rust is fast, and allows us to practice better memory practicing, allowing us to write efficient code with incredible speed.

    So will the Deno Typescript code be discarded?

    I plan on keeping a maintained branch with a similar api to the incoming changes for the rust version; this is because I am not set on removing the TypeScript version, as I think it would be a good reference for benchmarking the rust version, as well as offering an opportunity for more people to contribute to it.


    Plugin API

    While the core code will be migrated to rust, we will still be using a TypeScript plugin API integrated with Deno. The plugin API will be isolated, meaning each plugin will run in it's own "context" to allow full usage of Deno's "secure by default" motive as well as better control of developing and debugging plugins.

    Please only use this issue for reporting issues with this change itself, for discussions refer to: https://github.com/NetrexMC/Netrex/discussions/8

    Documentation API Break Core Future 
    opened by Bavfalcon9 0
Owner
Netrex
A powerful Minecraft PE software written in RustLang.
Netrex
A variation of the solana helloworld program example with a client written in Rust instead of Typescript

Simple Solana Smart Contract Example This repository demonstrates how to create and invoke a program on the Solana blockchain. In Solana the word prog

zeke 56 Dec 26, 2022
Opensource diagnostic software for Daimler vehicles, inspired by Xentry and DAS, written in Rust

OPENSTAR An opensource diagnostic application for Daimler vehicles inspired by DAS and Xentry. Some of the work here is based on OpenVehicleDiag If yo

Ashcon Mohseninia 21 Nov 20, 2022
A fast, powerful and configurable interpreter written in Rust

brainfuck-interpreter Overview A fast, powerful and configurable interpreter written in Rust, which allows various options to meet different demends,

Justin Chen 4 Feb 12, 2023
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
Modrinth API is a simple library for using, you guessed it, the Modrinth API in Rust projects

Modrinth API is a simple library for using, you guessed it, the Modrinth API in Rust projects. It uses reqwest as its HTTP(S) client and deserialises responses to typed structs using serde.

null 21 Jan 1, 2023
Buildomat manages the provisioning of ephemeral UNIX systems on which to run software builds

B U I L D O M A T a software build labour-saving device Buildomat manages the provisioning of ephemeral UNIX systems (e.g., instances in AWS EC2) on w

Oxide Computer Company 33 Dec 4, 2022
A realtime flight tracking program for our Software Engineering 300 class at ERAU

Flight Tracking ERAU SE300 Description Software that allows for weather and plane tracking to facilitate the user in looking at plane paths. Many peop

null 18 Sep 29, 2022
Software for managing Stream Deck devices with folders and actions

Streamduck Software for managing Stream Deck devices with folders and actions Project that will perhaps be better than streamdeck-ui Currently still i

TheJebForge 21 Dec 16, 2022
Software adapter for various Chunithm slider controllers with a built-in Brokenithm web controller

slidershim Software adapter for various Chunithm slider controllers with a built-in Brokenithm web controller. Has support for keyboard/gamepad output

Si Yuan 45 Dec 17, 2022
Meet Rustacean GPT, an experimental project transforming OpenAi's GPT into a helpful, autonomous software engineer to support senior developers and simplify coding life! 🚀🤖🧠

Rustacean GPT Welcome, fellow coding enthusiasts! ?? ?? I am excited to introduce you to Rustacean GPT, my humble yet ambitious project that aims to t

Gary McDougall 3 May 10, 2023
API wrapper for the tankerkönig api

tankerkoenig-rs API wrapper for the tankerkoenig-api written in rust. Gives you ready deserialized structs and a easy to use and strictly typed api. I

Jonathan 2 Feb 27, 2022
A repository full of manually generated hand curated JSON files, which contain the API Types that the Discord API returns.

Discord API Types A repository full of manually generated hand curated JSON files, which contain the API Types that the Discord API returns. Also did

Unofficial Discord Documentation 1 Sep 16, 2022
MeiliSearch is a powerful, fast, open-source, easy to use and deploy search engine

MeiliSearch is a powerful, fast, open-source, easy to use and deploy search engine. Both searching and indexing are highly customizable. Features such as typo-tolerance, filters, and synonyms are provided out-of-the-box. For more information about features go to our documentation.

MeiliSearch 31.6k Dec 30, 2022
Bevy plugin to help implement loading states

This is a plugin for the Bevy game engine, to help you implement loading states.

Ida Iyes 70 Jan 7, 2023
Provides a Suricata Eve output for Kafka with Suricate Eve plugin

Suricata Eve Kafka Output Plugin for Suricata 6.0.x This plugin provides a Suricata Eve output for Kafka. Base on suricata-redis-output: https://githu

Center 7 Dec 15, 2022
ECS-friendly ldtk plugin for bevy, leveraging bevy_ecs_tilemap

bevy_ecs_ldtk An ECS-friendly ldtk plugin for bevy. Uses bevy_ecs_tilemap as a base. Not released yet, still in development. bevy_ecs_tilemap once sup

Trevor Lovell 247 Jan 10, 2023
Inverse kinematics plugin for Bevy implementing the FABRIK algorithm.

Inverse kinematics plugin for Bevy implementing the FABRIK algorithm.

Georg Friedrich Schuppe 11 Dec 31, 2022
A Discord bot for sending GeoGuessr challenge links that uses the GeoGuessr API written in rust.

GeoGuessr-bot-rs This is a simple implementation of a discord bot that send GeoGuessr-challenge links on demand. Features: Slash-commands Lightning-fa

Luukas Pörtfors 6 Nov 18, 2022
A gui api explorer written in Rust.

Zzz - GUI Api platform Pronounced "Zees"; as in "catching some Z's". A pun on RESTful APIs. example URL: https://jsonplaceholder.typicode.com/todos/ T

Ryan Blecher 0 Nov 11, 2021