将块掉落添加到玩家库存
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;
}
我的问题:
- 如何将块作为
ItemStack
包括块的 MaterialData
?
- 为什么这不能正常工作?
Block.getDrops()
does return ItemStack
个 包含数据的对象。
我发现你的代码有很多问题:
您的第一个方法将 return 第一个 元素。
private final ItemStack getDrops(Block b)
{
for(ItemStack im : b.getDrops())
{
return im;
}
return null;
}
您的第二种方法将 return 仅 last 元素。
private final ItemStack getDrops(Block b)
{
ItemStack item = null;
for(ItemStack im : b.getDrops())
{
item = im;
}
return item;
}
另请注意,某些方块在被破坏时可能会退化(如草变土)。
这段代码是我写的。
Inventory.addItem(ItemStack...)
实现了 Java 的 varargs 功能,因此您可以将数组或参数序列传递给它。
PlayerInventory inventory = event.getPlayer().getInventory();
Collection<ItemStack> drops = event.getBlock().getDrops();
inventory.addItem(drops.toArray(new ItemStack[drops.size()]));
通过将以下代码放在 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;
}
我的问题:
- 如何将块作为
ItemStack
包括块的MaterialData
? - 为什么这不能正常工作?
Block.getDrops()
does return ItemStack
个 包含数据的对象。
我发现你的代码有很多问题:
您的第一个方法将 return 第一个 元素。
private final ItemStack getDrops(Block b) { for(ItemStack im : b.getDrops()) { return im; } return null; }
您的第二种方法将 return 仅 last 元素。
private final ItemStack getDrops(Block b) { ItemStack item = null; for(ItemStack im : b.getDrops()) { item = im; } return item; }
另请注意,某些方块在被破坏时可能会退化(如草变土)。
这段代码是我写的。
Inventory.addItem(ItemStack...)
实现了 Java 的 varargs 功能,因此您可以将数组或参数序列传递给它。
PlayerInventory inventory = event.getPlayer().getInventory();
Collection<ItemStack> drops = event.getBlock().getDrops();
inventory.addItem(drops.toArray(new ItemStack[drops.size()]));