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

PrismarineJS/prismarine-nbt: An NBT parser for node-minecraft-protocol

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

开源软件名称(OpenSource Name):

PrismarineJS/prismarine-nbt

开源软件地址(OpenSource Url):

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

开源编程语言(OpenSource Language):

JavaScript 100.0%

开源软件介绍(OpenSource Introduction):

Prismarine-NBT

NPM version Build Status Discord Try it on gitpod

Prismarine-NBT is a JavaScript parser and serializer for NBT archives. It supports big, little, and little-varint encoded NBT files.

Usage

as a async promise

const fs = require('fs/promises')
const nbt = require('prismarine-nbt')

async function main(file) {
  const buffer = await fs.readFile(file)
  const { parsed, type } = await nbt.parse(buffer)
  console.log('JSON serialized', JSON.stringify(result, null, 2))
  fs.createWriteStream('file.nbt').write(nbt.writeUncompressed(result, type)) // Write it back 
}

main('file.nbt')

as a callback

var fs = require('fs'),
    nbt = require('prismarine-nbt');

fs.readFile('bigtest.nbt', function(error, data) {
    if (error) throw error;

    nbt.parse(data, function(error, data) {
        console.log(data.value.stringTest.value);
        console.log(data.value['nested compound test'].value);
    });
});

If the data is gzipped, it is automatically decompressed, for the buffer see metadata.buffer

API

parse(data, [format]): Promise<{ parsed, type, metadata: { size, buffer? } }>

parse(data, [format,] callback)

Takes an optionally compressed data buffer and reads the nbt data.

If the endian format is known, it can be specified as 'big', 'little' or 'littleVarint'. If not specified, the library will try to sequentially load as big, little and little varint until the parse is successful. The deduced type is returned as type.

Minecraft Java Edition uses big-endian format, and Bedrock uses little-endian.

writeUncompressed(value, format='big')

Returns a buffer with a serialized nbt value.

parseUncompressed(data, format='big')

Takes a buffer data and returns a parsed nbt value.

simplify(nbt)

Returns a simplified nbt representation : keep only the value to remove one level. This loses the types so you cannot use the resulting representation to write it back to nbt.

protos : { big, little, littleVarint }

Provides compiled protodef instances used to parse and serialize nbt

proto

Provide the big-endian protodef instance used to parse and serialize nbt.

protoLE

Provide the little-endian protodef instance used to parse and serialize little endian nbt.

builder

Provides a way to build complex nbt structures simply:

const nbt = require('prismarine-nbt')
const tag = nbt.comp({
  Air: nbt.short(300),
  Armor: nbt.list(nbt.comp([
    { Count: nbt.byte(0), Damage: nbt.short(0), Name: nbt.string('a') },
    { Count: nbt.byte(0), Damage: nbt.short(0), Name: nbt.string('b') },
    { Count: nbt.byte(0), Damage: nbt.short(0), Name: nbt.string('c') }
  ]))
})
nbt.writeUncompressed(tag) // now do something with this nbt buffer...

See index.d.ts for methods

Browser usage

For webpack usage, see an example configuration here.

For a web bundle with browserify (after you ran npm install prismarine-nbt in your project):

npx browserify -r prismarine-nbt -r buffer -o pnbt.js
<script src="./pnbt.js"></script>
<script>
  const nbt = require('prismarine-nbt')
  const { Buffer } = require('buffer')
  fetch('test.nbt').then(resp => resp.arrayBuffer())
    .then(buf => nbt.parse(Buffer.from(buf))).then(console.log)
</script>



鲜花

握手

雷人

路过

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

请发表评论

全部评论

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

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

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

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

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