dougbot/bridge/lib/prismarine-chunk
roberts 8f616598fd Fix chat, brain stability, MariaDB reconnect, suppress warnings
- Listen on raw 'text' packet for Bedrock chat (pattern-based chat event
  doesn't fire reliably on Bedrock)
- Brain: add safety reset for stuck pending_status flag
- MariaDB: add retry-on-disconnect for all query methods
- Suppress harmless punycode deprecation warning from Node.js
- Add mineflayer-bedrock lib packages (mineflayer, prismarine-chunk,
  prismarine-registry) for movement support
- Exclude minecraft-data from git (278MB, installed via npm)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 12:33:17 -05:00
..
.github Fix chat, brain stability, MariaDB reconnect, suppress warnings 2026-03-30 12:33:17 -05:00
src Fix chat, brain stability, MariaDB reconnect, suppress warnings 2026-03-30 12:33:17 -05:00
tools Fix chat, brain stability, MariaDB reconnect, suppress warnings 2026-03-30 12:33:17 -05:00
types Fix chat, brain stability, MariaDB reconnect, suppress warnings 2026-03-30 12:33:17 -05:00
.gitignore Fix chat, brain stability, MariaDB reconnect, suppress warnings 2026-03-30 12:33:17 -05:00
.gitpod.yml Fix chat, brain stability, MariaDB reconnect, suppress warnings 2026-03-30 12:33:17 -05:00
.npmignore Fix chat, brain stability, MariaDB reconnect, suppress warnings 2026-03-30 12:33:17 -05:00
.npmrc Fix chat, brain stability, MariaDB reconnect, suppress warnings 2026-03-30 12:33:17 -05:00
example.js Fix chat, brain stability, MariaDB reconnect, suppress warnings 2026-03-30 12:33:17 -05:00
HISTORY.md Fix chat, brain stability, MariaDB reconnect, suppress warnings 2026-03-30 12:33:17 -05:00
index.js Fix chat, brain stability, MariaDB reconnect, suppress warnings 2026-03-30 12:33:17 -05:00
LICENSE Fix chat, brain stability, MariaDB reconnect, suppress warnings 2026-03-30 12:33:17 -05:00
package.json Fix chat, brain stability, MariaDB reconnect, suppress warnings 2026-03-30 12:33:17 -05:00
README.md Fix chat, brain stability, MariaDB reconnect, suppress warnings 2026-03-30 12:33:17 -05:00

prismarine-chunk

NPM version Build Status Discord Gitter Irc

Try it on gitpod

A class to hold chunk data for Minecraft: PC 1.8, 1.9, 1.10, 1.11, 1.12, 1.13, 1.14, 1.15 and 1.16 and Bedrock Edition 0.14 and 1.0, 1.16, 1.17, 1.18, 1.19 and 1.20

Usage

const registry = require('prismarine-registry')('1.8')
const ChunkColumn = require('prismarine-chunk')(registry)
const { Vec3 } = require("vec3")

const chunk = new ChunkColumn()

for (let x = 0; x < 16;x++) {
  for (let z = 0; z < 16; z++) {
    chunk.setBlockType(new Vec3(x, 50, z), 2)
    for (let y = 0; y < 256; y++) {
      chunk.setSkyLight(new Vec3(x, y, z), 15)
    }
  }
}

console.log(JSON.stringify(chunk.getBlock(new Vec3(3,50,3)),null,2))

Test data

pc

Test data can be generated with minecraftChunkDumper.

Install it globally with npm install minecraft-chunk-dumper -g then run :

minecraftChunkDumper saveChunks 1.20 "1_20" 10

bedrock

Test data can be generated using the included script:

node tools/generate-bedrock-test-data.mjs <version> <chunkX> <chunkZ> <levelSeed>

Example:

node tools/generate-bedrock-test-data.mjs 1.21.90 -7 10 8403237569561413924

This script will generate test data for different caching and hash configurations in the test/bedrock_<version>/ directory.

For the version, keep only one chunk column of test data with the following files:

  • level_chunk without caching (one file per hash/no-hash configuration)
  • level_chunk with caching (one file per hash/no-hash configuration)
  • level_chunk CacheMissResponse (one file per hash/no-hash configuration)
  • subchunk without caching (one file per hash/no-hash configuration)
  • subchunk with caching (one file per hash/no-hash configuration)
  • subchunk CacheMissResponse (only one representative file per hash/no-hash configuration)

Note: bedrock-provider tests network decoding and loading chunks from a save database. The tests in prismarine-chunk test other parts of the chunk API, such as setting and getting block light, type, biome, entity and block entity data.

API

Chunk

Chunk(initData: { minY?: number, worldHeight?: number })

Build a new chunk. initData is only for 1.18+, and if not given or null the world will default to an old-style 0-256 world.

Chunk.initialize(iniFunc)

Initialize a chunk.

  • iniFunc is a function(x,y,z) returning a prismarine-block.

That function is faster than iterating and calling the setBlock* manually. It is useful to generate a whole chunk and load a whole chunk.

Chunk.version

returns the version the chunk loader was called with

Chunk.section

returns ChunkSection class for version

Chunk.getBlock(pos)

Get the Block at pos

.entity will have entity NBT data for this block, if it exists

Chunk.setBlock(pos,block)

Set the Block at pos

Set .entity property with NBT data for this block to load block entity data for the block

Chunk.getBlockType(pos)

Get the block type at pos

Chunk.getBlockStateId(pos)

Get the block state id at pos

Chunk.getBlockData(pos)

Get the block data (metadata) at pos

Chunk.getBlockLight(pos)

Get the block light at pos

Chunk.getSkyLight(pos)

Get the block sky light at pos

Chunk.getBiome(pos)

Get the block biome id at pos

Chunk.getBiomeColor(pos)

Get the block biome color at pos. Does nothing for PC.

Chunk.setBlockStateId(pos, stateId)

Set the block type stateId at pos

Chunk.setBlockType(pos, id)

Set the block type id at pos

Chunk.setBlockData(pos, data)

Set the block data (metadata) at pos

Chunk.setBlockLight(pos, light)

Set the block light at pos

Chunk.setSkyLight(pos, light)

Set the block sky light at pos

Chunk.setBiome(pos, biome)

Set the block biome id at pos

Chunk.setBiomeColor(pos, biomeColor)

Set the block biomeColor at pos. Does nothing for PC.

Chunk.getBlockEntity(pos)

Returns the block entity data at position if it exists

Chunk.setBlockEntity(pos, nbt)

Sets block entity data at position

Chunk.loadBlockEntities(nbt)

Loads an array of NBT data into the chunk column

Chunk.toJson()

Returns the chunk as json

Chunk.fromJson(j)

Load chunk from json

Chunk.sections

Available for pc chunk implementation. Array of y => section Can be used to identify whether a section is empty or not (will be null if it's the case) For version >= 1.9, contains a .palette property which contains all the stateId of this section, can be used to check quickly whether a given block is in this section.

pc

Chunk.getMask()

Return the chunk bitmap 0b0000_0000_0000_0000(0x0000) means no chunks are set while 0b1111_1111_1111_1111(0xFFFF) means all chunks are set

Chunk.dump()

Returns the chunk raw data

Chunk.load(data, bitmap = 0xFFFF, skyLightSent = true, fullChunk = true)

Load raw data into the chunk

Chunk.dumpLight()

Returns the chunk raw light data (starting from 1.14)

Chunk.loadLight(data, skyLightMask, blockLightMask, emptySkyLightMask = 0, emptyBlockLightMask = 0)

Load lights into the chunk (starting from 1.14)

Chunk.loadParsedLight (skyLight, blockLight, skyLightMask, blockLightMask, emptySkyLightMask, emptyBlockLightMask)

Load lights into the chunk (starting from 1.17)

Chunk.dumpBiomes()

Returns the biomes as an array (starting from 1.15)

Chunk.loadBiomes(biomes)

Load biomes into the chunk (starting from 1.15)

bedrock

See index.d.ts

ChunkSection

pc

static fromJson(j: any): ChunkSection

static sectionSize(skyLightSent?: boolean): number

constructor(skyLightSent?: boolean)

data: Buffer

toJson(): { type: "Buffer"; data: number[]; }

initialize(iniFunc: any): void

getBiomeColor(pos: Vec3): { r: number; g: number; b: number; }

setBiomeColor(pos: Vec3, r: number, g: number, b: number): void

getBlockStateId(pos: Vec3): number

getBlockType(pos: Vec3): number

getBlockData(pos: Vec3): number

getBlockLight(pos: Vec3): number

getSkyLight(pos: Vec3): number

setBlockStateId(pos: Vec3, stateId: number): void

setBlockType(pos: Vec3, id: number): void

setBlockData(pos: Vec3, data: Buffer): void

setBlockLight(pos: Vec3, light: number): void

setSkyLight(pos: Vec3, light: number): void

dump(): Buffer

load(data: Buffer, skyLightSent?: boolean): void

bedrock

See index.d.ts

compact()

Shrinks the size of the SubChunk if possible after setBlock operations are done

getPalette()

Returns a list of unique block states that make up the chunk section