小军a
本帖最后由 tdiant 于 2023-2-7 21:36 编辑

怎么判断箱子里是否有东西如果有禁止挖除

鳕鱼丶
我没有具体试过,但是有一个思路。通过事件获取点击到的方块是否是箱子,如果是则强转为Chest,然后通过getBlockInventory()方法获取到箱子类型的物品栏,就可以进行判断了。

2000000
我已经在注释内详细的告诉了您现在这样做的意义是什么,此代码运行正常,但请理解它,否则它只是无意义的代码投喂
    @EventHandler
    public void blockBreakEvent(BlockBreakEvent event) {
        Block block = event.getBlock();

        // 确定这个方块是否为箱子,如果不是则不执行下面的代码
        if (block.getType() != Material.CHEST) return;

        // 如果是箱子则转为 Chest,通过 getBlockInventory 获得这个方块的 Inventory
        // 您需要将方块状态转换为 Chest,而不是方块本身,所以您需要使用 getState 而不是直接进行转换
        Chest chest = (Chest) block.getState();
        Inventory inventory = chest.getBlockInventory();

        // 随后只需要使用 fori 进行遍历物品,通过 inventory.getSize 来获得这个箱子的具体大小
        // 如果获取的物品不为 null 则取消,并且退出 for 循环
        for (int i = 0; i < inventory.getSize(); i++) if (inventory.getItem(i) != null) { event.setCancelled(true); return; }
    }



无敌三脚猫
2000000 发表于 2023-1-14 19:00
我已经在注释内详细的告诉了您现在这样做的意义是什么,此代码运行正常,但请理解它,否则它只是无意义的代 ...

自己遍历Inventory,跟Inventory的isEmpty()方法有什么不一样吗?

2000000
本帖最后由 2000000 于 2023-1-14 19:33 编辑
无敌三脚猫 发表于 2023-1-14 19:05
自己遍历Inventory,跟Inventory的isEmpty()方法有什么不一样吗?

在低版本内 Inventory 没有 isEmpty 方法,我查了下 doc 这个方法在 1.16.2 被加入
https://helpch.at/docs/1.16.2/org/bukkit/inventory/Inventory.html

小军a
2000000 发表于 2023-1-14 19:00
我已经在注释内详细的告诉了您现在这样做的意义是什么,此代码运行正常,但请理解它,否则它只是无意义的代 ...

好嘞谢谢哥

第一页 上一页 下一页 最后一页