使用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
安装完成后,nbtedit、nbt2yaml和yaml2nbt命令应该可以从安装Python其他实用程序的地方获得。
命令
请注意,nbt文件通常是gzip格式。nbt2yaml命令将假设所有写入和读取的nbt文件都是gzip格式,除非指定了--no-gzip标志。
对于nbt2yaml和yaml2nbt命令,文件名可以指定为-,这表示应从标准输入读取数据。
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变量,编辑器如vim、nano、emacs或其他编辑器应该会弹出。如果基于窗口的编辑器提供了命令行命令,并且只有在文件保存后才会退出(例如,我可以用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的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 6b576a37243f6395eed19bad41e3621cff2077aef84335031d70bac11db89bba |
|
| MD5 | f80cdf77b7204f59a5361661bf17a356 |
|
| BLAKE2b-256 | 2ef7b3a0d09f80fedf42e2359e53a360e4fdd7704ade3cde344148c36cbae284 |
nbt2yaml-0.4.2-py3-none-any.whl的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 63f7b50f1b74f04c8f0579cc1d1a2726ddb43009f1f63fc1b49ff088aa316351 |
|
| MD5 | ffec6a255ef3ed78fd2e108d1c178db6 |
|
| BLAKE2b-256 | 3f6bf08be9165f66bfa17dc52417c7a8783269e5dbc80d6df75e347d8a891b01 |