java - Bukkit setItemStackName 不起作用

标签 java minecraft bukkit

嘿,我正在尝试制作一个 gamemodeGUI 插件并更改项目名称以使其自定义。

它有效,但它将库存中的第一个 block 更改为白色彩色玻璃,上面写着“取消”

这是我的库存和 StackName 代码

    public static Inventory myInventory = Bukkit.createInventory(null, 9, "GamemodeGUI");

static {
    myInventory.setItem(0, new ItemStack(Material.IRON_BLOCK, 1)); //Survival
    myInventory.setItem(1, new ItemStack(Material.DIAMOND_BLOCK, 1)); //Creative
    myInventory.setItem(2, new ItemStack(Material.GOLD_BLOCK, 1)); //Adventure
    myInventory.setItem(3, new ItemStack(Material.LAPIS_BLOCK, 1)); //Spectator

    myInventory.setItem(8, new ItemStack(Material.STAINED_GLASS, 1)); //Cancel

    ItemStack iron = new ItemStack(Material.IRON_BLOCK, 1);
    ItemStack diamond = new ItemStack(Material.DIAMOND_BLOCK, 1);
    ItemStack gold = new ItemStack(Material.GOLD_BLOCK, 1);
    ItemStack lapis = new ItemStack(Material.LAPIS_BLOCK, 1);
    ItemStack cancel = new ItemStack(Material.STAINED_GLASS, 1);

    setItemStackName(iron, "Survival");
    myInventory.setItem(0, iron);

    setItemStackName(diamond, "Creative");
    myInventory.setItem(0, diamond);

    setItemStackName(gold, "Adventure");
    myInventory.setItem(0, gold);

    setItemStackName(lapis, "Spectator");
    myInventory.setItem(0, lapis);

    setItemStackName(cancel, "Cancel");
    myInventory.setItem(0, cancel);


}

public static void setItemStackName(ItemStack renamed, String customName) {
    ItemMeta renamedMeta = renamed.getItemMeta();
    renamedMeta.setDisplayName(customName);
    renamed.setItemMeta(renamedMeta);
}

最佳答案

让我们看一下您的代码:

setItemStackName(diamond, "Creative");
myInventory.setItem(0, diamond);

setItemStackName(gold, "Adventure");
myInventory.setItem(0, gold);

setItemStackName(lapis, "Spectator");
myInventory.setItem(0, lapis);

setItemStackName(cancel, "Cancel");
myInventory.setItem(0, cancel);

如果我们注意到您的库存,则表明您正在将所有元素设置到插槽 0。

如果我们查看 Bukkit 库存设置,您会发现插槽 0 确实是第一个插槽:

enter image description here

您面临的问题是:

  1. 您将一个名为“Creative”的钻石 block 放在第一个槽位
  2. 您在第一个插槽中放置了一个名为“Gold”的金 block (请注意,您再次将其放置在插槽 0 中)
  3. 您将一个名为“观众”的青金石 block 放在第一个插槽中(同样的事情)
  4. 您将名为“取消”的玻璃板放在第一个插槽中。

如果我们看到这里发生的情况,就会很清楚为什么项目命名失败!您总是将第一项设置为不同的内容。最后一个值将是最终值,因此将出现取消


要解决此问题,您只需将新值设置为新插槽即可。如果你想全部排成一行,你可以这样做

setItemStackName(diamond, "Creative");
myInventory.setItem(0, diamond);

setItemStackName(gold, "Adventure");
myInventory.setItem(1, gold);

setItemStackName(lapis, "Spectator");
myInventory.setItem(2, lapis);

setItemStackName(cancel, "Cancel");
myInventory.setItem(3, cancel);

或者这种模式的任何变体。

关于java - Bukkit setItemStackName 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48336508/

相关文章:

java - 按名称字母顺序对链表进行排序

java - JSF 和过滤器重定向生成空白页

java - 如何从另一个类调用 itemStack?

java - 如何设置 block 数据值?

java - 压缩这段代码?

java - 获取静脉中所有相似的 block

java - iText:从a3中的html生成pdf文件

java - 跟踪并打印 while 循环的使用次数

java - 3D 体积的数据结构和算法?

objective-c - 向 Minecraft 服务器发送数据包 : Objective c