本帖最后由 tdiant 于 2023-2-7 21:36 编辑
怎么判断箱子里是否有东西如果有禁止挖除
怎么判断箱子里是否有东西如果有禁止挖除
我没有具体试过,但是有一个思路。通过事件获取点击到的方块是否是箱子,如果是则强转为Chest,然后通过getBlockInventory()方法获取到箱子类型的物品栏,就可以进行判断了。
我已经在注释内详细的告诉了您现在这样做的意义是什么,此代码运行正常,但请理解它,否则它只是无意义的代码投喂
@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 于 2023-1-14 19:33 编辑
在低版本内 Inventory 没有 isEmpty 方法,我查了下 doc 这个方法在 1.16.2 被加入
https://helpch.at/docs/1.16.2/org/bukkit/inventory/Inventory.html
无敌三脚猫 发表于 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
2000000 发表于 2023-1-14 19:00
我已经在注释内详细的告诉了您现在这样做的意义是什么,此代码运行正常,但请理解它,否则它只是无意义的代 ...
好嘞谢谢哥