1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Добавить предмет в инвентарь

Тема в разделе "Разработка плагинов для новичков", создана пользователем fedortik, 10 авг 2023.

  1. Автор темы
    fedortik

    fedortik Активный участник Пользователь

    Баллы:
    61
    Имя в Minecraft:
    FEDORTIK
    Добрый вечер, работяги. Вопрос.
    Добавить предмет в инвентарь можно конечно функцией add. Но она не учитывает полноту инвентаря. Конечно можно проверить наличие свободного слота. Но есть ли готовое решение которое так же учитывает, что в инвентаре уже есть предмет этого типа и его amount < 64 ?
    Написать свою функцию конечно не сложно, но может есть готовая функция в paper ?
     
  2. Level132331

    Level132331 Активный участник Пользователь

    Баллы:
    66
    Метод additems - это HashMap, проверяешь, если не пустая, то дропаешь рядом или делаешь то что тебе нужно
     
  3. H4kt

    H4kt Активный участник Пользователь

    Баллы:
    61
    Имя в Minecraft:
    H4kt
    Метод Inventory::addItem возвращает HashMap<Integer, ItemStack> состоящий из предметов которые не поместились в инвентарь

    Содержимое HashMap:
    Ключ - индекс предмета из массива, переданного в метод addItem
    Значение - сам предмет

    При попытке выдать большее кол-во предмета, чем может поместиться в инвентарь, будет выдано лишь доступное кол-во предмета, а остаток попадет в результирующий HashMap

    Пример обработки на Kotlin в виде простой команды для выдачи предметов самому себе:
    Код:
    object TestCommand : CommandExecutor {
    
        override fun onCommand(
            sender: CommandSender,
            command: Command,
            label: String,
            args: Array<out String>
        ): Boolean {
    
            if (sender !is Player) {
                sender.sendMessage("${ChatColor.RED}Command can only be run by a player")
                return true
            }
    
            if (args.size < 2) {
                sender.sendMessage("${ChatColor.RED}Use: /$label <material> <amount>")
                return true
            }
    
            val material = try {
                Material.valueOf(args[0].uppercase())
            } catch (ex: Exception) {
                sender.sendMessage("${ChatColor.RED}Invalid material: ${args[0]}")
                return false
            }
    
            val amount = args[1]
                .toIntOrNull()
                ?: run {
                    sender.sendMessage("${ChatColor.RED}Invalid amount: ${args[1]}")
                    return true
                }
    
            val couldNotFit = sender.inventory.addItem(
                ItemStack(material, amount)
            )
    
            couldNotFit.forEach { (index, item) ->
                sender.sendMessage("Could not fit item (type=${item.type.name}, amount=${item.amount}) at index $index")
            }
    
            return true
        }
    
    }
     
    Последнее редактирование: 12 авг 2023
  4. Автор темы
    fedortik

    fedortik Активный участник Пользователь

    Баллы:
    61
    Имя в Minecraft:
    FEDORTIK
    Благодарю за подробное объяснение
     

Поделиться этой страницей