使用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 |