LookAtMySuitBot/js/node_modules/prismarine-chunk/README.md

245 lines
7.2 KiB
Markdown
Raw Normal View History

2023-12-24 20:08:39 -05:00
# prismarine-chunk
[![NPM version](https://img.shields.io/npm/v/prismarine-chunk.svg)](http://npmjs.com/package/prismarine-chunk)
[![Build Status](https://github.com/PrismarineJS/prismarine-chunk/workflows/CI/badge.svg)](https://github.com/PrismarineJS/prismarine-chunk/actions?query=workflow%3A%22CI%22)
[![Discord](https://img.shields.io/badge/chat-on%20discord-brightgreen.svg)](https://discord.gg/GsEFRM8)
[![Gitter](https://img.shields.io/badge/chat-on%20gitter-brightgreen.svg)](https://gitter.im/PrismarineJS/general)
[![Irc](https://img.shields.io/badge/chat-on%20irc-brightgreen.svg)](https://irc.gitter.im/)
[![Try it on gitpod](https://img.shields.io/badge/try-on%20gitpod-brightgreen.svg)](https://gitpod.io/#https://github.com/PrismarineJS/prismarine-chunk)
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
```js
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](https://github.com/PrismarineJS/minecraft-chunk-dumper).
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](https://github.com/PrismarineJS/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](https://github.com/PrismarineJS/prismarine-block) at [pos](https://github.com/andrewrk/node-vec3)
`.entity` will have entity NBT data for this block, if it exists
#### Chunk.setBlock(pos,block)
Set the [Block](https://github.com/PrismarineJS/prismarine-block) at [pos](https://github.com/andrewrk/node-vec3)
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](https://github.com/PrismarineJS/prismarine-chunk/blob/master/types/index.d.ts#L56)
## 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](https://github.com/PrismarineJS/prismarine-chunk/blob/master/types/index.d.ts#L56)
#### 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