Bukkit 自定义库存未更新
Bukkit custom inventory not updating
我正在尝试根据同一库存中另一个插槽中的项目更改自定义库存中一个插槽包含的项目。这是我现在的代码:
@EventHandler
public void processInventoryEvent(InventoryClickEvent e) {
if (e.getRawSlot() == 11) {
if (e.getCursor().getType() == Material.COAL || e.getCursor().getType() == Material.LOG || e.getCursor().getType() == Material.LOG_2) {
e.getInventory.setItem(10, new ItemStack(Material.STAINED_GLASS_PANE, 1, DyeColor.GREEN.getData());
} else {
e.getInventory.setItem(10, new ItemStack(Material.STAINED_GLASS_PANE, 1, DyeColor.RED.getData());
}
}
}
目前的问题是库存似乎没有更新,因此需要重新打开库存才能看到变化,我希望当玩家将物品放入该槽位时物品发生变化。
非常感谢任何帮助。
谢谢!
显然更新玩家的物品栏也会更新任何其他打开的物品栏。在条件句之后让它与此块一起正常工作:
plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
@Override
public void run() {
for (HumanEntity he : e.getInventory().getViewers()) {
Player p = (Player) he;
p.updateInventory();
}
}
}, 1L);
需要一个 tick 延迟,否则会出现呆滞(项目不会直接点击它们的位置)。
我正在尝试根据同一库存中另一个插槽中的项目更改自定义库存中一个插槽包含的项目。这是我现在的代码:
@EventHandler
public void processInventoryEvent(InventoryClickEvent e) {
if (e.getRawSlot() == 11) {
if (e.getCursor().getType() == Material.COAL || e.getCursor().getType() == Material.LOG || e.getCursor().getType() == Material.LOG_2) {
e.getInventory.setItem(10, new ItemStack(Material.STAINED_GLASS_PANE, 1, DyeColor.GREEN.getData());
} else {
e.getInventory.setItem(10, new ItemStack(Material.STAINED_GLASS_PANE, 1, DyeColor.RED.getData());
}
}
}
目前的问题是库存似乎没有更新,因此需要重新打开库存才能看到变化,我希望当玩家将物品放入该槽位时物品发生变化。
非常感谢任何帮助。
谢谢!
显然更新玩家的物品栏也会更新任何其他打开的物品栏。在条件句之后让它与此块一起正常工作:
plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
@Override
public void run() {
for (HumanEntity he : e.getInventory().getViewers()) {
Player p = (Player) he;
p.updateInventory();
}
}
}, 1L);
需要一个 tick 延迟,否则会出现呆滞(项目不会直接点击它们的位置)。