Вопрос Как удалить предмет из инвентаря игрока при его смерти?

Destroy

Разработчик
Пользователь
Сообщения
780
Решения
30
Веб-сайт
destroydevs.ru
Пробовал так.
Java:
    @EventHandler
    public void onDeath(PlayerDeathEvent e) {
        e.getEntity().getInventory().remove(Material.BARRIER);
    }
Предметы выпадают, ошибок нет.
 
Пробовал так.
Java:
    @EventHandler
    public void onDeath(PlayerDeathEvent e) {
        e.getEntity().getInventory().remove(Material.BARRIER);
    }
Предметы выпадают, ошибок нет.
Java:
event.getDrops().removeIf((itemstack) -> itemstack.getType() == Material.BARRIER);
 
Значит, ты удаляешь предмет, которого нет среди дропнутого. Иначе быть не может. Дебаж
Вам необходимо зарегистрироваться для просмотра изображений-вложений

Вам необходимо зарегистрироваться для просмотра изображений-вложений

Вам необходимо зарегистрироваться для просмотра изображений-вложений
 
new ItemStack(Material.BARRIER) это новый предмет, откуда он у игрока то появится?

Java:
// !!! не для прода, подходит только если на сервере всего 1 игрок
ItemStack item = new ItemStack(Material.BARRIER, 5);

@EventListener
void onJoin(PlayerJoinEvent event) {
    event.getPlayer().getInventory().add(item);
}

@EventListener
void onDeath(PlayerDeathEvent event) {
    event.getDrops().remove(item);
}

Грубо говоря, тебе нужна гарантия, что ты именно нужный предмет пытаешься вытащить. Если материал, метаданные или количество предмета не совпадают, он не будет удален
А вообще event.getDrops() это коллекция, просто покопайся в её содержимом. В твоём случае
Java:
ItemStack myItem = new ItemStack(Material.BARRIER);
for(ItemStack someItem : event.getDrops()) {
    if (myItem.equals(someItem)) {
        // предмет удалится
    } {
        // предмет отличается, не удалится
    }
}
 
Назад
Сверху Снизу