跳转到主要内容

使用Yaml读写Minecraft NBT文件。

项目描述

nbt2yaml提供了一种命令行界面,用于使用自定义Yaml格式读取和编辑Minecraft NBT文件。它还包括一个Python API,用于将NBT文件解析和写入到简单的Python数据结构。

关键工具是nbtedit,这是一个命令行实用程序,它将目标NBT文件的Yaml版本传递到您选择的编辑器中,允许在编辑器内使用Yaml格式编辑NBT数据。当编辑会话关闭时,保存的文件被解析回NBT,如果发生更改,则更新原始文件;同时也会保存前一个版本的副本。

NBT格式:http://wiki.vg/NBT

YAML:http://www.yaml.org/

安装

首先,请务必阅读下面的免责声明

通过pip安装

pip install nbt2yaml

安装完成后,nbteditnbt2yamlyaml2nbt命令应该可以从安装Python其他实用程序的地方获得。

命令

请注意,nbt文件通常是gzip格式。nbt2yaml命令将假设所有写入和读取的nbt文件都是gzip格式,除非指定了--no-gzip标志。

对于nbt2yamlyaml2nbt命令,文件名可以指定为-,这表示应从标准输入读取数据。

nbtedit

就地编辑nbt文件,允许在编辑器中使用Yaml格式。

该脚本使用标准的EDITOR环境变量来确定应调用哪个文本编辑器。

程序检测到在编辑会话关闭时是否进行了更改;如果是,则无条件地将现有nbt文件复制到备份,并将新数据写入原文件。

概要

usage: nbtedit [-h] [-n] filename

Edit an nbt file in-place in Yaml format.

positional arguments:
  filename       filename

optional arguments:
  -h, --help     show this help message and exit
  -n, --no-gzip  Don't use gzip

nbt2yaml

将nbt文件以YAML格式输出到标准输出

usage: nbt2yaml [-h] [-n] filename

Dump an nbt file or stream to yaml.

positional arguments:
  filename       Filename. Specify as '-' to read from stdin.

optional arguments:
  -h, --help     show this help message and exit
  -n, --no-gzip  Don't use gzip

yaml2nbt

将nbt2yaml生成的YAML文件以nbt格式输出到标准输出

usage: yaml2nbt [-h] [-n] filename

Dump a yaml file or stream to nbt.

positional arguments:
  filename       Filename. Specify as '-' to read from stdin.

optional arguments:
  -h, --help     show this help message and exit
  -n, --no-gzip  Don't use gzip

示例用法

假设我们想将“游戏模式”从“0”(生存)切换到“1”(创造)。

首先,确保Minecraft本身没有运行。然后,导航到你的Minecraft存档文件所在位置。在mac上看起来是这样的

$ cd ~/Library/Application\ Support/minecraft/saves/

一旦到达那里,编辑任何选定的世界的level.dat文件

nbtedit myworld/level.dat

假设你设置了EDITOR变量,编辑器如vimnanoemacs或其他编辑器应该会弹出。如果基于窗口的编辑器提供了命令行命令,并且只有在文件保存后才会退出(例如,我可以用mate -w在这里使用TextMate)。

然后导航到“游戏类型”值

  - foodSaturationLevel: 0.0
  - FallDistance: 0.0
  - XpTotal: 0
  - Rotation:
    - -476.3782043457031
    - 28.349964141845703
  - Xp: 0
- RandomSeed: !long "1201953322384967445"
- GameType: 0
- MapFeatures: !byte "0"
- version: 19132
- Time: !long "5601373"
- raining: !byte "0"
- thunderTime: 19527

将其从“0”(生存)更改为“1”(创造)

- RandomSeed: !long "1201953322384967445"
- GameType: 1
- MapFeatures: !byte "0"

保存文件。nbtedit报告已保存旧文件的副本并将更改写入现有文件。现在你可以建造一些城堡了!

格式

当然,如何将NBT映射到YAML的具体细节是程序必须做出的决定,因为有许多不同的方法可以做到这一点。这里的目的是使YAML格式尽可能简单易读,同时仍然能够写入与解析相同的nbt文件;因此,许多数据类型都有明确的指令(例如short、long、double、byte),这将产生适当的nbt标签(例如TAG_Short、TAG_Long、TAG_Double、TAG_Byte)。Python类型int、str和float的默认值分别为TAG_Int、TAG_String和TAG_Float。

当编辑YAML文件时,非常重要地保持格式完全相同!nbt2yaml只能处理它生成的形式的结构;请参见下面的示例,以查看所有这些形式。

尽管nbt2yaml可以处理任何格式的数据,只要格式正确,但预计正常使用此工具仅是为了更改单个值而不会更改文档结构。

以下是将Minecraft参考文件bigtest.nbt以YAML格式当前导出的示例。欢迎对改进此格式的建议!

Level:
- longTest: !long "9223372036854775807"
- shortTest: !short "32767"
- stringTest: !!python/str "HELLO WORLD THIS IS A TEST STRING \xC5\xC4\xD6!"
- floatTest: 0.4982314705848694
- intTest: 2147483647
- nested compound test:
  - ham:
    - name: Hampus
    - value: 0.75
  - egg:
    - name: Eggbert
    - value: 0.5
- listTest (long):
  - !long "11"
  - !long "12"
  - !long "13"
  - !long "14"
  - !long "15"
- listTest (compound):
  - - name: 'Compound tag #0'
    - created-on: !long "1264099775885"
  - - name: 'Compound tag #1'
    - created-on: !long "1264099775885"
- byteTest: !byte "127"
- byteArrayTest (the first 1000 values of (n*n*255+n*7)%100, starting with n=0 (0, 62, 34, 16, 8, ...)): !byte_array "00\
    \ 3E 22 10 08 0A 16 2C 4C 12 46 20 04 56 4E 50 5C 0E 2E 58 28 02 4A 38 30 32 3E\
    \ 54 10 3A 0A 48 2C 1A 12 14 20 36 56 1C 50 2A 0E 60 58 5A 02 18 38 62 32 0C 54\
    \ 42 3A 3C 48 5E 1A 44 14 52 36 24 1C 1E 2A 40 60 26 5A 34 18 06 62 00 0C 22 42\
    \ 08 3C 16 5E 4C 44 46 52 04 24 4E 1E 5C 40 2E 26 28 34 4A 06 30 00 3E 22 10 08\
    \ 0A 16 2C 4C 12 46 20 04 56 4E 50 5C 0E 2E 58 28 02 4A 38 30 32 3E 54 10 3A 0A\
    \ 48 2C 1A 12 14 20 36 56 1C 50 2A 0E 60 58 5A 02 18 38 62 32 0C 54 42 3A 3C 48\
    \ 5E 1A 44 14 52 36 24 1C 1E 2A 40 60 26 5A 34 18 06 62 00 0C 22 42 08 3C 16 5E\
    \ 4C 44 46 52 04 24 4E 1E 5C 40 2E 26 28 34 4A 06 30 00 3E 22 10 08 0A 16 2C 4C\
    \ 12 46 20 04 56 4E 50 5C 0E 2E 58 28 02 4A 38 30 32 3E 54 10 3A 0A 48 2C 1A 12\
    \ 14 20 36 56 1C 50 2A 0E 60 58 5A 02 18 38 62 32 0C 54 42 3A 3C 48 5E 1A 44 14\
    \ 52 36 24 1C 1E 2A 40 60 26 5A 34 18 06 62 00 0C 22 42 08 3C 16 5E 4C 44 46 52\
    \ 04 24 4E 1E 5C 40 2E 26 28 34 4A 06 30 00 3E 22 10 08 0A 16 2C 4C 12 46 20 04\
    \ 56 4E 50 5C 0E 2E 58 28 02 4A 38 30 32 3E 54 10 3A 0A 48 2C 1A 12 14 20 36 56\
    \ 1C 50 2A 0E 60 58 5A 02 18 38 62 32 0C 54 42 3A 3C 48 5E 1A 44 14 52 36 24 1C\
    \ 1E 2A 40 60 26 5A 34 18 06 62 00 0C 22 42 08 3C 16 5E 4C 44 46 52 04 24 4E 1E\
    \ 5C 40 2E 26 28 34 4A 06 30 00 3E 22 10 08 0A 16 2C 4C 12 46 20 04 56 4E 50 5C\
    \ 0E 2E 58 28 02 4A 38 30 32 3E 54 10 3A 0A 48 2C 1A 12 14 20 36 56 1C 50 2A 0E\
    \ 60 58 5A 02 18 38 62 32 0C 54 42 3A 3C 48 5E 1A 44 14 52 36 24 1C 1E 2A 40 60\
    \ 26 5A 34 18 06 62 00 0C 22 42 08 3C 16 5E 4C 44 46 52 04 24 4E 1E 5C 40 2E 26\
    \ 28 34 4A 06 30 00 3E 22 10 08 0A 16 2C 4C 12 46 20 04 56 4E 50 5C 0E 2E 58 28\
    \ 02 4A 38 30 32 3E 54 10 3A 0A 48 2C 1A 12 14 20 36 56 1C 50 2A 0E 60 58 5A 02\
    \ 18 38 62 32 0C 54 42 3A 3C 48 5E 1A 44 14 52 36 24 1C 1E 2A 40 60 26 5A 34 18\
    \ 06 62 00 0C 22 42 08 3C 16 5E 4C 44 46 52 04 24 4E 1E 5C 40 2E 26 28 34 4A 06\
    \ 30 00 3E 22 10 08 0A 16 2C 4C 12 46 20 04 56 4E 50 5C 0E 2E 58 28 02 4A 38 30\
    \ 32 3E 54 10 3A 0A 48 2C 1A 12 14 20 36 56 1C 50 2A 0E 60 58 5A 02 18 38 62 32\
    \ 0C 54 42 3A 3C 48 5E 1A 44 14 52 36 24 1C 1E 2A 40 60 26 5A 34 18 06 62 00 0C\
    \ 22 42 08 3C 16 5E 4C 44 46 52 04 24 4E 1E 5C 40 2E 26 28 34 4A 06 30 00 3E 22\
    \ 10 08 0A 16 2C 4C 12 46 20 04 56 4E 50 5C 0E 2E 58 28 02 4A 38 30 32 3E 54 10\
    \ 3A 0A 48 2C 1A 12 14 20 36 56 1C 50 2A 0E 60 58 5A 02 18 38 62 32 0C 54 42 3A\
    \ 3C 48 5E 1A 44 14 52 36 24 1C 1E 2A 40 60 26 5A 34 18 06 62 00 0C 22 42 08 3C\
    \ 16 5E 4C 44 46 52 04 24 4E 1E 5C 40 2E 26 28 34 4A 06 30 00 3E 22 10 08 0A 16\
    \ 2C 4C 12 46 20 04 56 4E 50 5C 0E 2E 58 28 02 4A 38 30 32 3E 54 10 3A 0A 48 2C\
    \ 1A 12 14 20 36 56 1C 50 2A 0E 60 58 5A 02 18 38 62 32 0C 54 42 3A 3C 48 5E 1A\
    \ 44 14 52 36 24 1C 1E 2A 40 60 26 5A 34 18 06 62 00 0C 22 42 08 3C 16 5E 4C 44\
    \ 46 52 04 24 4E 1E 5C 40 2E 26 28 34 4A 06 30 00 3E 22 10 08 0A 16 2C 4C 12 46\
    \ 20 04 56 4E 50 5C 0E 2E 58 28 02 4A 38 30 32 3E 54 10 3A 0A 48 2C 1A 12 14 20\
    \ 36 56 1C 50 2A 0E 60 58 5A 02 18 38 62 32 0C 54 42 3A 3C 48 5E 1A 44 14 52 36\
    \ 24 1C 1E 2A 40 60 26 5A 34 18 06 62 00 0C 22 42 08 3C 16 5E 4C 44 46 52 04 24\
    \ 4E 1E 5C 40 2E 26 28 34 4A 06 30"
- doubleTest: !double "0.4931287132182315"

免责声明

nbtedit现在非常旧了,但我在最后一次对它进行处理时,它是最新的。在2011年9月,你会是阅读此README的第一批人之一。但现在我是在2021年2月写作的,所以你很可能是…一个…两个…是的,第七个,很可能是第七个,也许第八个?但无论如何,这不是一个广泛使用的工具,所以你很可能是在寻找新的错误的人!也可能是不正确编辑的YAML文件保存的NBT文件,Minecraft已无法读取。

在修改文件之前,请备份一切! nbtedit会为每个编辑的文件保存备份,但请不要仅依赖于这一点!请注意,您正在自行承担使用此编辑器的风险。代码经过单元测试,效果很好,但我不想成为你搞砸世界的原因,所以请首先复制所有正在编辑的文件。谢谢!

项目详细信息


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分布

nbt2yaml-0.4.2.tar.gz (26.8 kB 查看哈希值)

上传时间

构建分布

nbt2yaml-0.4.2-py3-none-any.whl (11.2 kB 查看哈希值)

上传时间 Python 3

由以下组织支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面