5 эффективных способов проверить, есть ли у игрока предмет в радиусе действия в Minecraft 1.16

В Minecraft 1.16 может быть полезно определить, есть ли у игрока конкретный предмет в определенном диапазоне. Эта функция часто используется в различных игровых механиках, таких как квесты, испытания или пользовательские режимы игры. В этой статье блога мы рассмотрим несколько методов с сопроводительными примерами кода, которые помогут вам достичь этой цели. Итак, приступим!

Метод 1: использование методов getPlayer() и getNearbyEntities()

Player player = // Get the player object
ItemStack itemToCheck = // The item you want to check for
List<Entity> nearbyEntities = player.getNearbyEntities(5, 5, 5);
for (Entity entity : nearbyEntities) {
    if (entity instanceof Item) {
        ItemStack itemStack = ((Item) entity).getItemStack();
        if (itemStack.isSimilar(itemToCheck)) {
            // The player has the item within the range
            // Your code here
            break;
        }
    }
}

Метод 2: использование метода getInventory()

Player player = // Get the player object
ItemStack itemToCheck = // The item you want to check for
Inventory playerInventory = player.getInventory();
for (ItemStack itemStack : playerInventory.getContents()) {
    if (itemStack != null && itemStack.isSimilar(itemToCheck)) {
        // The player has the item within the range
        // Your code here
        break;
    }
}

Метод 3: обход соседних блоков игрока

Player player = // Get the player object
ItemStack itemToCheck = // The item you want to check for
Location playerLocation = player.getLocation();
World world = player.getWorld();
int range = 5;
for (int x = playerLocation.getBlockX() - range; x <= playerLocation.getBlockX() + range; x++) {
    for (int y = playerLocation.getBlockY() - range; y <= playerLocation.getBlockY() + range; y++) {
        for (int z = playerLocation.getBlockZ() - range; z <= playerLocation.getBlockZ() + range; z++) {
            Block block = world.getBlockAt(x, y, z);
            if (block.getType() == Material.CHEST) {
                Chest chest = (Chest) block.getState();
                Inventory chestInventory = chest.getInventory();
                for (ItemStack itemStack : chestInventory.getContents()) {
                    if (itemStack != null && itemStack.isSimilar(itemToCheck)) {
                        // The player has the item within the range
                        // Your code here
                        break;
                    }
                }
            }
        }
    }
}

Метод 4. Использование метода getNearbyArmorStands()

Player player = // Get the player object
ItemStack itemToCheck = // The item you want to check for
List<ArmorStand> nearbyArmorStands = player.getNearbyEntities(5, 5, 5)
        .stream()
        .filter(entity -> entity instanceof ArmorStand)
        .map(entity -> (ArmorStand) entity)
        .collect(Collectors.toList());
for (ArmorStand armorStand : nearbyArmorStands) {
    ItemStack itemStack = armorStand.getHelmet();
    if (itemStack != null && itemStack.isSimilar(itemToCheck)) {
        // The player has the item within the range
        // Your code here
        break;
    }
}

Метод 5: использование метода getPlayerInventory()

Player player = // Get the player object
ItemStack itemToCheck = // The item you want to check for
Inventory playerInventory = player.getPlayerInventory();
for (ItemStack itemStack : playerInventory.getContents()) {
    if (itemStack != null && itemStack.isSimilar(itemToCheck)) {
        // The player has the item within the range
        // Your code here
        break;
    }
}

В этой статье мы рассмотрели пять различных методов проверки наличия у игрока определенного предмета в радиусе пяти блоков в Minecraft 1.16. Используя эти методы, вы можете улучшить игровую механику и создать более увлекательный опыт для своих игроков. Поэкспериментируйте с этими методами и адаптируйте их к своим конкретным потребностям. Приятного кодирования!