嘿,我正在尝试制作一个 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 确实是第一个插槽:
您面临的问题是:
- 您将一个名为“Creative”的钻石 block 放在第一个槽位
- 您在第一个插槽中放置了一个名为“Gold”的金 block (请注意,您再次将其放置在插槽 0 中)
- 您将一个名为“观众”的青金石 block 放在第一个插槽中(同样的事情)
- 您将名为“取消”的玻璃板放在第一个插槽中。
如果我们看到这里发生的情况,就会很清楚为什么项目命名失败!您总是将第一项设置为不同的内容。最后一个值将是最终值,因此将出现取消。
要解决此问题,您只需将新值设置为新插槽即可。如果你想全部排成一行,你可以这样做
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/