• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

PrismarineJS/prismarine-chunk: A class to hold chunk data for Minecraft

原作者: [db:作者] 来自: 网络 收藏 邀请

开源软件名称(OpenSource Name):

PrismarineJS/prismarine-chunk

开源软件地址(OpenSource Url):

https://github.com/PrismarineJS/prismarine-chunk

开源编程语言(OpenSource Language):

JavaScript 100.0%

开源软件介绍(OpenSource Introduction):

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

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 saveChunk 1.8.8 1.8/chunk.dump 1.8/chunk.meta

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




鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap