npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

prismarine-chunk

v1.35.0

Published

A class to hold chunk data for prismarine

Downloads

19,647

Readme

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

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