Code Monkey home page Code Monkey logo

mc-beta-server's Introduction

mc-beta-server CodeFactor Node.js CI

me trying to understand minecraft beta's protocol


Minecraft landscape with trees, caves, flowers, shrubs and an ocean.

WIP Minecraft Nether with very simple terrain.

Goals:

  • Make this as fast as possible on a single thread.
  • Only use thread pools if absolutely neccesary.
  • Build the server in a way where it should be easy to multithread it.

Implemented:

  • Basic flat terrain generation
  • Basic (top to bottom, no spread) Lighting
  • "Decent" terrain generation using OpenSimplex Noise
  • Multi-World support
  • Chunk management (loading / unloading)
  • Cross chunk structure generation (trees, buildings, etc...)
  • World/Chunk saving to disk
  • Block breaking
  • Player Inventory

WIP:

  • Entities:
    • Players
  • Dimensions:
    • Nether
  • Inventories (containers, etc...)

To Implement:

  • Block placement
  • Entities:
    • Items
    • Mobs
  • Saving inventories
  • Sleeping in beds
  • Tile entities
  • Probably a bunch more things that i'm forgetting

Running the server

Heads Up! This server is under pretty heavy development with most likley breaking changes, I will try my best to keep compatibility in the save formats (or provide migration paths) with updates but cannot guarentee it.

To use the server either grab a release or build it yourself.

Running from a release

When using a release all you need to do is run the executable you get from the download.

Building yourself

To build the server yourself clone the repo and run

npm i
npm run build

This will automatically build the server and pack it into a single js file, you'll find your resulting js file in the ./build folder.

Setting up for development

To run the server simply clone the repo, and run:

npm i

Copy the config.example.json to config.json and edit how you want it, then run:

npm run dev:run

You are now running a server locally! When running the server with npm run dev:run it is running with nodemon, this means that the server will auto restart as you edit.

mc-beta-server's People

Contributors

tgpholly avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar

mc-beta-server's Issues

Consider using a packet queue.

Minecraft does this (found this out while investigating unreliable block breaking) so we probably should too.
I imagine chunk loading would benefit from bulk sending specifically.

Stop depending on chalk

You can't use chalk in a non ESM way anymore which means it's a huge pain to get working with TS, this means we have to depend on chalk@4 :/
Best path forwards is probably going to be to build the console colour functionality into console.ts.
May be worth splitting the console.ts file out into it's own npm package so I can reuse it.

Support pre-allocation on all writable types

Right now a lot of types in bufferStuff don't support pre-allocated memory in buffers and will completely break.

Types:

  • bool (Intrinsically supports it if byte does as writing a bool just writes a byte)
  • byte
  • unsigned byte
  • byte array
  • short
  • short array
    • (Can be reworked to use writeShort directly)
      • Nevermind, would be worse in terms of performance for dynamic allocations if it was done this way.
  • int
  • long
  • float
  • double
  • string (Intrinsically supports it if short does as writing a string just writes all chars as shorts)

Using this for more of a checklist for myself while working on it.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.