Java 使用BukkitTask更改ItemMeta
我无法更改通过重复任务放置在玩家清单上的Java 使用BukkitTask更改ItemMeta,java,bukkit,Java,Bukkit,我无法更改通过重复任务放置在玩家清单上的ItemStack上的ItemMeta。 我尝试了以下方法: BukkitTask taskTp; int tempTp = 20; private void rodarTeleport(final Player player, final ItemStack item) { final ItemMeta meta = item.getItemMeta(); final String nome = meta.getDisplayName(
ItemStack
上的ItemMeta
。
我尝试了以下方法:
BukkitTask taskTp;
int tempTp = 20;
private void rodarTeleport(final Player player, final ItemStack item) {
final ItemMeta meta = item.getItemMeta();
final String nome = meta.getDisplayName();
taskTp = Bukkit.getScheduler().runTaskTimer(plugin, new Runnable() {
@Override
public void run() {
if (tempTp > 0) {
tempTp--;
meta.setDisplayName(nome +" - " + tempTp + "s restantes." );
item.setItemMeta(meta);
player.updateInventory();
}
else {
meta.setDisplayName(nome);
item.setItemMeta(meta);
player.updateInventory();
taskTp.cancel();
}
}
}, 20, 20);
}
它应该每秒更改一次显示名称,但它根本不会更新它。在更新播放器资源清册之前:
p.setItem(slot, item);
因此,您可以确定,该项现在位于正确的位置。我测试了您的精确代码,它成功了。控制台是否显示任何错误?是否确定该项具有元数据和显示名称?您是否尝试过使用print语句进行调试?我看不出您的代码有任何错误,因此,请查看如果您删除可运行任务并仅对
tentp
使用随机数会发生什么情况。。。您不应该得到不同的结果在这种情况下,要么更新Inventory,要么重新设置插槽中的项(设置新项元数据会自动更新显示名称)。再次添加物品可以让玩家通过将原始物品移动到不同的位置来复制物品。你不能说。如果ItemStack是玩家资源清册中项目的副本,则在不将新项目发回插槽的情况下更新资源清册是没有帮助的。请删除-1标志,因为您不能说它是否为副本