GithubHelp home page GithubHelp logo

justjavac / bedrock-provider Goto Github PK

View Code? Open in Web Editor NEW

This project forked from prismarinejs/bedrock-provider

0.0 2.0 0.0 1.05 MB

Minecraft bedrock level provider for disk and network with caching support

TypeScript 98.28% JavaScript 1.72%

bedrock-provider's Introduction

bedrock-provider

NPM version Build Status Discord Gitter Irc Try it on gitpod

Minecraft Bedrock level provider for saves and network serialization

Install

npm i bedrock-provider

Usage

Writing example:

const fs = require('fs')
const { LevelDB } = require('leveldb-zlib')
const { WorldProvider } = require('bedrock-provider')
const ChunkColumn = = require('bedrock-provider').chunk('bedrock_1.17.10')
const Block = require('prismarine-block')('bedrock_1.17.10')

async function main() {
  // Create a new ChunkColumn at (0,0)
  let cc = new ChunkColumn(0, 0)

  for (var x = 0; x < 4; x++) {
    for (var y = 0; y < 4; y++) {
      for (var z = 0; z < 4; z++) {
        // Set some random block IDs
        const id = Math.floor(Math.random() * 1000)
        let block = Block.fromStateId(id)
        cc.setBlock({ x, y, z }, block)
      }
    }
  }

  // Now let's create a new database and store this chunk in there
  const db = new LevelDB('./__sample', { createIfMissing: true }) // Create a DB class
  await db.open() // Open the database
  const world = new WorldProvider(db, { dimension: 0 })
  world.save(cc) // Store this chunk in world
  await db.close() // Close it
  // Done! ๐Ÿ˜ƒ
}

See tests/ for more usage examples.

API

WorldProvider

constructor(db: LevelDB, options?: { dimension: number; version: string; });

The exported WorldProvider class allows you to load a save file from a LevelDB database. The first parameter is the db (leveldb-zlib instance), and the second is an options object. The options argument takes a dimension ID (overworld or nether or end are 1, 2 and 3).

The options argument also takes a version, which if not specified will default to the latest version. When you access APIs like getBlock or setBlock, this is the version which will be assumed.

load(x: number, z: number, full: boolean): Promise;

This returns a ChunkColumn at the specified x and z coordinates. full if we should load biomes, entities, tiles, and other related data ontop of chunks.

save(column: ChunkColumn): Promise;

Saves a ChunkColumn into the database.

ChunkColumn

    constructor(version: Version, x: any, z: any);
    getBlock(vec4: { l, x, y, z }): Block;
    setBlock(vec4: { l, x, y, z }, block: Block): void;
    addSection(section: SubChunk): void;

    /**
     * Encodes this chunk column for the network with no caching
     * @param buffer Full chunk buffer
     */
    networkEncodeNoCache(): Promise<Buffer>;
    /**
     * Encodes this chunk column for use over network with caching enabled
     *
     * @param blobStore The blob store to write chunks in this section to
     * @returns {Promise<Buffer[]>} The blob hashes for this chunk, the last one is biomes, rest are sections
     */
    networkEncodeBlobs(blobStore: BlobStore): Promise<CCHash[]>;
    networkEncode(blobStore: BlobStore): Promise<{
        blobs: CCHash[];
        payload: Buffer;
    }>;
    networkDecodeNoCache(buffer: Buffer, sectionCount: number): Promise<void>;
    /**
     * Decodes cached chunks sent over the network
     * @param blobs The blob hashes sent in the Chunk packe
     * @param blobStore Our blob store for cached data
     * @param {Buffer} payload The rest of the non-cached data
     * @returns {CCHash[]} A list of hashes we don't have and need. If len > 0, decode failed.
     */
    networkDecode(blobs: CCHash[], blobStore: BlobStore, payload: any): Promise<CCHash[]>;

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.