将块掉落添加到玩家库存

Add block drops to player inventory

通过将以下代码放在 BlockBreakEvent 侦听器下,我试图将方块作为 ItemStack 提供给玩家。

Player p = e.getPlayer();
Block b = e.getBlock();
ItemStack im = getDrops(b);
p.getInventory().addItem(im);
p.updateInventory();
private final ItemStack getDrops(Block b)
{
    for(ItemStack im : b.getDrops())
    {
        return im;
    }
    return null;
}

然而,这给出了没有数据的块。

由于 b.getDrops()Collection<ItemStack>,我尝试了这个但没有成功:

private final ItemStack getDrops(Block b)
{
    ItemStack item = null;
    for(ItemStack im : b.getDrops())
    {
        item = im;
    }
    return item;
}

我的问题:

Block.getDrops() does return ItemStack 包含数据的对象。

我发现你的代码有很多问题:

  1. 您的第一个方法将 return 第一个 元素。

    private final ItemStack getDrops(Block b)
    {
        for(ItemStack im : b.getDrops())
        {
            return im;
        }
        return null;
    }
    
  2. 您的第二种方法将 return 仅 last 元素。

    private final ItemStack getDrops(Block b)
    {
        ItemStack item = null;
        for(ItemStack im : b.getDrops())
        {
            item = im;
        }
        return item;
    }
    
  3. 另请注意,某些方块在被破坏时可能会退化(如草变土)。

这段代码是我写的。 Inventory.addItem(ItemStack...) 实现了 Java 的 varargs 功能,因此您可以将数组或参数序列传递给它。

PlayerInventory inventory = event.getPlayer().getInventory();
Collection<ItemStack> drops = event.getBlock().getDrops();
inventory.addItem(drops.toArray(new ItemStack[drops.size()]));