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)

Package Sidebar

Install

npm i prismarine-provider-raw

Weekly Downloads

9

Version

1.1.0

License

MIT

Unpacked Size

31 kB

Total Files

17

Last publish

Collaborators

  • rom1504