prismarine-provider-raw

    1.1.0 • Public • Published

    prismarine-provider-raw

    NPM version Build Status Discord Gitter Irc Try it on gitpod

    Raw (prismarine-chunk based) Storage Provider implementation. Supports all versions that prismarine-chunk supports thereby providing a stop-gap measure until prismarine-provider-anvil is updated.

    Usage

    const RawStorage = require('prismarine-provider-raw')('1.16.1')
    const Chunk = require('prismarine-chunk')('1.16.1')
     
    const storage = new RawStorage('./world/')
     
    const chunk = new Chunk()
    storage.save(0, 1, chunk).then(() => {
      console.log('saved!')
      storage.load(0, 1).then(c => {
        console.log('loaded!')
      }).catch(e => {
        console.error(e.stack)
      })
    }).catch(e => {
      console.error(e.stack)
    })

    API

    RawStorage

    new RawStorage(path, compress = true)

    Create a new RawStorage instance which uses the folder at path for storage (Optionally disable zlib compression with compress)

    RawStorage.save(x, z, chunk)

    Store a prismarine-chunk chunk at pos x, y. Returns a promise.

    RawStorage.load(x, z)

    Load the prismarine-chunk at pos x, y. Returns a promise.

    RawStorage.defrag()

    Load and defrag all region files (reduces wasted storage space)

    NOTE: there is no need to run this regularly

    Format

    The format is loosely based on minecraft's Anvil Region format. The world is divided into 32*32 (1024) chunk sections, called 'regions'. The region a chunk belongs to can be found by dividing and then flooring the chunk coordinates by 32 (Bit-shift right by 5):

    const regionX = chunkX >> 5
    const regionY = chunkY >> 5

    File Header

    Offset Size (Bytes) Field Purpose
    0x0 0x4 Magic Number CHNK (43 48 4e 4b) in ASCII
    0x4 0x1 Prismarine Version Prismarine format version
    0x5 0x2 MC World Version Minecraft protocol version for the chunks (e.g. 1.16.1 => 736)
    0x7 0x4 X Position X Position of the region file
    0xB 0x4 Y Position Y Position of the region file
    0xF 0x2000 Chunk Info x1024 Chunk locations and sizes in the file (see Chunk Info below)
    0x200F - Chunk Data Sparse chunk data, referenced by Chunk Info entries, variable size

    Chunk Info

    Offset Size (Bytes) Field Purpose
    0x0 0x4 Offset Chunk data offset, in bytes, after the File Header
    0x4 0x4 Size Chunk data size, in bytes

    Chunk Data

    Offset Size (Bytes) Field Purpose
    0x0 0x1 Compression If the rest of the data is GZip compressed or not
    0x1 0x1 Features BitMask (0: Full Chunk (Ground Up), 1: Includes SkyLight, 2-7: Reserved)
    0x2 0x2 BitMask Section Bitmask with bits set to 1 for every 16x16x16 chunk section whose data is included in Data
    0x4 0x4 Data Length Length of the following Block Data
    0x8 - Data Block Data
    Unk+0x8 0x3 SkyLight Mask Only the first 18 bits are actually used (missing for versions 1.13 and below)
    Unk+0xB 0x3 BlockLight Mask Only the first 18 bits are actually used (missing for versions 1.13 and below)
    Unk+0xE 0x3 Empty SkyLight Mask Only the first 18 bits are actually used (missing for versions 1.13 and below)
    Unk+0x11 0x3 Empty BlockLight Mask Only the first 18 bits are actually used (missing for versions 1.13 and below)
    Unk+0x14 0x4 Light Data Length Length of the following Light Data (missing for versions 1.13 and below)
    Unk+0x18 - Light Data Light Data (missing for versions 1.13 and below)
    Unk2+0x18 0x1000 Biomes 1024 Biome IDs (missing for versions 1.14 and below)

    Install

    npm i prismarine-provider-raw

    DownloadsWeekly Downloads

    5

    Version

    1.1.0

    License

    MIT

    Unpacked Size

    31 kB

    Total Files

    17

    Last publish

    Collaborators

    • rom1504