huanmeng_cn
怎么获取所有ItemStack,并从其中随机取一个出来调用(类似Random)
(各位大佬,我是萌新,见谅)

遍历所有物品堆加进List
然后用Random 获取随机数r
list.get(r)

huanmeng_cn
雨 发表于 2019-12-2 19:42
遍历所有物品堆加进List
然后用Random 获取随机数r
list.get(r)

能给个具体代码吗大佬,我只会遍历在线玩家

wshycaa
1-9999直接取随机数,判断getitem 有没有这个ID如果为null就重新再取 直到取到物品

本帖最后由 雨 于 2019-12-2 20:00 编辑
huanmeng_cn 发表于 2019-12-2 19:44
能给个具体代码吗大佬,我只会遍历在线玩家
List<ItemStack> list = new ArrayList<ItemStack>();
                for (ItemStack item : player.getInventory()) {
                        list.add(item);
                }
                Random rd = new Random();
                int r = rd.nextInt(list.size());
                ItemStack RandomItem = list.get(r);

huanmeng_cn
雨 发表于 2019-12-2 19:59
List list = new ArrayList();
                for (ItemStack item : player.getInventory()) {
                        list.add(item);

万一玩家背包没物品呢(雾)

粘兽
本帖最后由 粘兽 于 2019-12-2 20:31 编辑
  1. public ItemStack randomItem(Inventory inv){
  2.     List<ItemStack> items = new ArrayList<>();
  3.     inv.forEach(item -> {
  4.         if(!item.getType().equals(Material.AIR)){
  5.             items.add(item);
  6.         }
  7.     });
  8.     return items.isEmpty() ? null : items.get(new Random().nextInt(items.size()));
  9. }
复制代码


不知道空物品会产出null还是AIR 我这边只判断了AIR

Kenneth_z
  1. public ItemStack randomItem(Inventory inv){
  2.     List<ItemStack> items = new ArrayList<>();
  3.     inv.forEach(item -> {
  4.         if(!item.getType().equals(Material.AIR)){
  5.         items.add(item);
  6.         }
  7.     });
  8.     return items.isEmpty() ? new ItemAir() : items.get(new ThreadLocalRandom().nextInt(items.size()));
  9. }
复制代码
小改进 提高随机数生成效率
还有没获取到貌似是Air不是null