Neo's Playing Morpheus

    prismarine-chunk
    TypeScript icon, indicating that this package has built-in type declarations

    1.32.0 • Public • Published

    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 and 1.19

    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.19 "1_19" 10

    bedrock

    Run tests in bedrock-provider (which loads chunks through a client as part of its tests) and copy the generated data from fixtures/$version/pchunk into tests/bedrock_$version.

    For the version, copy one chunk column of level_chunk without caching, level_chunk with caching, level_chunk CacheMissResponse, subchunk without caching, subchunk cached and subchunk CacheMissResponse into the test/version folder.

    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

    Install

    npm i prismarine-chunk

    DownloadsWeekly Downloads

    10,988

    Version

    1.32.0

    License

    MIT

    Unpacked Size

    222 kB

    Total Files

    58

    Last publish

    Collaborators

    • rom1504
    • wtfaremyinitials