PowerNBT 是一款基于命令的 Minecraft 游戏内 NBT 编辑器,允许玩家和服主直接通过命令浏览、编辑、复制和操作各种 NBT 数据,支持物品、实体、方块、玩家、区块、文件等多种数据源。
核心功能
- 浏览和编辑 NBT 标签。
- 支持对象:物品、在线/离线玩家、实体、方块、区块、原理图文件及其他所有 NBT 文件。
- 将标签保存至文件。
- 使用自定义 NBT 标签生成实体。
- 解析 Mojangson 字符串。
- 支持自定义颜色和 Unicode 符号。
- 支持 Tab 键自动补全。
- 支持复制/粘贴/剪切/交换操作。
- 支持变量存储。
- 提供 NBT 字符串的 JSON 编辑器。
命令与权限
基础命令
使用以下命令之一来执行 NBT 操作
/powernbt .../pnbt .../nbt ...
使用以下命令以静默模式执行(不显示消息)
/powernbt. .../pnbt. .../nbt. ...
权限
powernbt.use- 使用 PowerNBT 所有命令的基础权限。
浏览标签
使用以下命令浏览 NBT 树状结构
/nbt <对象> <查询> <查看模式>
参数说明
- 对象 - 包含 NBT 标签的容器。
- 查询 (可选) - 用于查看嵌套标签的路径。
- 查看模式 (可选) - 标签的显示方式。
示例
/nbt inventory- 以 NBT 列表形式显示你背包中的物品。/nbt block- 显示目标方块的 NBT。/nbt me HealF- 显示你的生命值。/nbt *admin EnderItems[0].id- 显示管理员末影箱中第一个物品的 ID。
编辑标签
设置新值
/nbt <对象> <查询> = <值> <类型>
或
/nbt <值> <类型> > <对象> <查询>
- 值 - NBT 标签的新值,可以是数字、字符串、十六进制值、颜色或数字数组。
- 类型 (某些情况下可选) - 值的 NBT 类型(如
byte,int,float等)。对于数字值通常需要指定。
示例
/nbt me foodLevel = 20- 将你的饱食度设为满值(20)。/nbt buffer foo = 12 float- 在缓冲区复合标签中,将标签 "foo" 的值设为浮点数 12。
从其他对象赋值
/nbt <对象1> <查询1> = <对象2> <查询2>
或使用 <、> 操作符。
示例
/nbt $playerFile = *playerName- 将玩家playerName的所有标签保存到文件playerFile.nbt。/nbt me HealF = $playerFile HealF- 将你的生命值设为playerFile.nbt文件中存储的 "HealF" 标签值。
移动值(剪切并粘贴)
/nbt <对象1> <查询1> >> <对象2> <查询2>
或
/nbt <对象2> <查询2> << <对象1> <查询1>
值将从对象1中移除并设置到对象2。
交换值
/nbt <对象1> <查询1> <> <对象2> <查询2>
或
/nbt <对象1> <查询1> swap <对象2> <查询2>
两个对象的值将互换。
示例
/nbt block Items <> me Inventory- 将你的背包与目标容器(如箱子)内的物品交换。
增加值
/nbt <对象1> <查询1> add <值>
或
/nbt <对象1> <查询1> add <对象2> <查询2>
也可使用 += 操作符。
根据对象类型,行为不同
- 对象为数字,值为数字:相加。
- 对象为字符串:拼接。
- 对象为列表或数组,值为列表或数组:将值的所有项添加到对象。
- 对象为复合标签,值为复合标签:将值的所有条目添加到对象。
示例
/nbt me HealF += 2- 你的生命值增加 2。/nbt me HealF += -2- 你的生命值减少 2。/nbt item display.Name += "(tool)"- 在物品名称后添加文本 "(tool)"。
在指定位置插入值
/nbt <对象1> <查询1> insert <位置> <值> <类型>
或使用 ins 简写。
对象1必须是一个列表或数组。
示例
假设:item display.Lore = ["Lore1","Lore2","Lore3","Lore4"]
执行:/nbt item display.Lore insert 2 "New Lore"
结果:item display.Lore = ["Lore1","Lore2","New Lore","Lore3","Lore4"]
位运算
支持的操作符
&=- 按位与|=- 按位或^=- 按位异或~或inverse或inv- 按位取反
示例
/nbt item HideFlags |= b0000100- 隐藏物品显示属性中的 "Unbreakable"。/nbt item HideFlags &= b1111110- 显示物品显示属性中的 "ench"。/nbt item HideFlags ^= b0000010- 切换物品显示属性中的 "AttributeModifiers"。
乘法运算
/nbt <对象1> <查询1> *= <对象2> <查询2>
或
/nbt <对象1> <查询1> *= <值> <类型>
所有值必须是数字。
重命名标签
/nbt <对象> <查询1> rename <新名称>
或使用 ren 简写。
将复合标签中的指定标签重命名。
删除标签
/nbt <对象> <查询> remove
或使用 rem 简写。
如果未指定查询,将尝试删除整个对象。
示例
/nbt item display remove- 删除物品的所有显示属性。/nbt $filename remove- 删除文件filename.nbt。
缓冲区(剪贴板)
/nbt <对象> <查询> copy- 将值复制到缓冲区。/nbt <对象> <查询> cut- 将值剪切到缓冲区。/nbt <对象> <查询> paste- 将缓冲区中的值粘贴到对象。
示例
/nbt me Inventory copy- 将你的背包复制到缓冲区。/nbt buffer [0].tag.display.Name = "new Name of item"- 修改缓冲区中物品的名称。/nbt me Inventory paste- 将缓冲区内容粘贴回你的背包。
变量
/nbt %<变量名> set <对象> <查询>
或
/nbt <对象> <查询> as %<变量名>
设置后,你可以像使用对象一样使用该变量。
示例
/nbt %b set block- 将目标方块设为变量%b。/nbt block as %b- 同上。/nbt %b Items- 现在可以像使用block对象一样使用变量%b来操作方块的物品。
生成实体
/nbt <对象> <查询> spawn <世界>
或
/nbt <mojangson值> spawn <世界>
- 世界 - 生成实体的世界。从控制台执行时必须指定。
左侧 NBT 标签必须包含
id- 实体的存档 ID。Pos- 实体的位置(双精度列表)。
示例
/nbt {id:pig,Pos:[1d,100d,2d],Riding:{id:MinecartRideable}} spawn world1- 在world1世界的坐标 (1,100,2) 处生成一只骑着矿车的猪。/nbt id123(Creeper) copy- 将实体值复制到缓冲区。/nbt buffer Pos = me Pos- 将缓冲区中存储的位置改为你的当前位置。/nbt buffer spawn- 在你的位置生成缓冲区中存储的实体。
调试模式
/nbt debug on- 启用调试模式。/nbt debug off- 禁用调试模式。
对象说明
对象是包含 NBT 标签的特殊容器。插件可以从中读取、保存或删除标签。
可用对象
me- 你自己(玩家)。item或i- 手中的物品(仅限有 NBT 标签的物品)。block或b- 视线所指的方块。chunk- 玩家所在位置的区块。id<ID>- 指定 ID 的实体。例如:id102。x:y:z:world- 指定世界和坐标的方块。例如:10:64:-30:world_nether。chunk:x:z:world- 指定世界和区块坐标的区块。例如:chunk:5:7:MainWorld。buffer或c- 你的剪贴板。name- 在线玩家。例如:Notch。在命令方块中使用:*" @p "。@name- 离线玩家的.dat文件。例如:@Notch。在命令方块中使用:@" @p "。%variable- 已定义的变量。例如:%skeleton。inventory或inv- 你的背包(等同于me Inventory)。hand或h- 你选中的物品栏格子(等同于me Inventory[n])。hand:player或h:player- 指定玩家选中的物品栏格子。例如:h:Notch。在命令方块中使用:h:" @p "。$name-plugins/PowerNBT/nbt/文件夹下的name.nbt文件。$$name-plugins/PowerNBT/nbt/文件夹下的压缩文件name.nbt.gz。file:filename- Minecraft 文件夹下的文件。例如:file:plugins\myplugin\file.dat。文件名可加引号:file:"plugins/myplugin/file.dat"。gzip:filename- Minecraft 文件夹下的压缩文件。sch:schematicName或schematic:schematicName- 获取plugins/WorldEdit/schematics/文件夹下的原理图文件。例如:/nbt sch:mySchematic TileEntities。compound- 创建一个新的空复合标签。list- 创建一个新的空列表。self或this- 获取命令左侧(或某些情况下右侧)的对象。*- 未来对象(执行命令后需要选择方块、实体或在聊天框输入值)。
查询语法
查询允许你浏览和选择对象中的特定标签。查询是由 "." 分隔的标签字符串。
示例
Inventory[1].id- 玩家背包中第二个物品的 ID。display.Name- 物品的显示名称。pages[0]- 书的第一页。pages[-1]- 书的最后一页。.- 根标签。
特殊语法
- 带空格或 Unicode 的标签名:用引号括起来。
- 例如:
forgeData."foo bar"[0],forgeData."unicode\u2600".tag。 - JSON 查询:使用
#符号。 - 例如:
display.Name#将display.Name字符串作为 JSON 处理。display.Name#text选择 JSON 中的 "text" 属性。 - 范围查询:使用
[A..B]选择子数组或子字符串。 [1..3]- 选择索引 1 到 2 的项(不包含 3)。[1..]- 选择从索引 1 到末尾的所有项。[3..1]- 以反向顺序选择索引 1 到 2 的项。[..3]- 以反向顺序选择从索引 3 到末尾的所有项。- 可以使用负索引从末尾开始计数。例如:
[-3..]选择最后三项。
范围查询示例
/nbt item display.Lore[2..4] remove- 删除物品描述中索引 2 和 3 的条目。/nbt block Items = me Inventory[0..7]- 将你背包的前 8 个物品设置到目标容器中。/nbt item display.Lore[-3..] remove- 删除物品描述的最后三条。
查看模式
- limit - 限制显示的行数或字符数。
- 例如:
/nbt me Inventory 10显示背包前 10 个物品。 - range - 显示从起始范围到结束范围的结果。
- 例如:
/nbt me Inventory 10-20显示背包中第 10 到第 19 个物品。 - full - 显示所有行或完整结果。
- hex - 以十六进制模式显示数字或字符串。
- 例如:
/nbt item display.color hex以十六进制显示物品颜色。 - 可与其他模式组合:
/nbt item display.Name 5-10,hex以十六进制显示物品名称的第 5 到第 10 个字符。
默认查看模式:仅显示前 20 个值,数字以十进制显示。
值类型与格式
在设置新值时,有时需要指定值的类型。
值格式示例
- 字符串:必须用引号括起来。支持 Java 风格的转义(如
\n)。 - 特殊转义:
\c或&转换为颜色符号§;\&表示字面量&;\_表示空格。 - 例如:
/nbt item display.Name = "\cbItem name"。 - 额外类型:
"json"或"mojangson"可将字符串转换为对象。 - 数字值:如果目标已存在值,类型可选。
- 可用类型:
byte,short,int,long,float,double。 - 例如:
/nbt me Health = 100500,/nbt buffer NewValue = 18 int。 - 十六进制值:以
#开头,默认类型为int。 - 例如:
/nbt item display.color = #FF0000设置物品颜色为红色。 - 二进制值:以
b开头,默认类型为int。 - 例如:
/nbt item HideFlags = b101。 - 颜色名:使用预定义的颜色名称,如
black,red,green等。 - 例如:
/nbt item display.color = red。 - 布尔与开关:
on/true- 等同于1 byte。off/false- 等同于0 byte。- 数组:
int[],byte[]- 创建新的空数组。[1,2,...]b,[1,2,...]i,[1,2,...]l- 创建原生数组。- 例如:
/nbt buffer myByteArray = [1,2,3,10]b。 - Mojangson/JSON 字符串:直接创建 NBT 对象。
- 例如:
/nbt item = {display:{Name:"New item name"}}。 - 或:
/nbt item.display.Name# = {text: "New item name"} json。
可用 NBT 类型
byte, short, int, long, float, double, byte[], int[], long[], string
额外支持 JSON 字符串类型:json, mojangson
未来对象
未来对象允许你先输入命令,随后再指定目标。
示例
- 设置实体的着火时间:
- 输入
/nbt * Fire = 1000。 - 右键点击选择一个实体。
- 该实体将开始燃烧。
- 设置变量:
- 输入
/nbt %var select。 - 右键点击选择一个实体或方块。
- 所选对象将被存储在变量
%var中。
开发者 API
PowerNBT 提供了完整的 API 供开发者使用。
主要类
- NBTManager (
me.dpohvar.powernbt.api.NBTManager):用于读写 NBT 标签的核心管理器。 - NBTCompound:代表
NBTTagCompound,可像Map<String,Object>一样操作。 - NBTList:代表
NBTTagList,可像List<Object>一样