【マイクラ】java の plugin で NBT を編集する方法

マインクラフトの話です。

mod ではなく、plugin の方で、アイテムの NBT を追加・編集をしたいということがあった。

NBTEditor や NBTCompound を 追加したらできた。


以下は、アイテムのNBTを編集してから、オリジナルのインベントリに追加するプログラム。

Inventory gui = Bukkit.getServer().createInventory(null,54,"CustomGUI");

ItemStack closeItem = new ItemStack(Material.BARRIER);
ItemMeta closeMeta = closeItem.getItemMeta();
closeMeta.setDisplayName(ChatColor.RED + "Close");
closeItem.setItemMeta(closeMeta);
gui.setItem(53,closeItem);

Material m = Material.matchMaterial(【item’s Number or Name】);
ItemStack is = new ItemStack(m);
is.setAmount(64);
NBTEditor.NBTCompound compound = NBTEditor.getNBTCompound(is);
compound.set(2,"Damage");
is = NBTEditor.getItemFromTag( compound );
gui.setItem(i,is);
player.openInventory(gui);

例えば、「スポンジ(#0019/0)」と「濡れたスポンジ(#0019/1)」のように、

同じアイテム番号だけど、2つ以上種類があるものは、

「Damage」という NBTで、分けられていることが多いようだ。

追記 2021/06/30

NBTを直接JSONで、読み書きする方法もあった。

//JSON読み込み
NBTEditor.NBTCompound compound = NBTEditor.NBTCompound.fromJson(nbtJson);

//JSON書き出し
NBTEditor.NBTCompound nbtc = NBTEditor.getNBTCompound(is);
System.out.println(nbtc.toJson());