Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите PlayerDeathEvent отключить выпадение определенного предмета

Статус
Закрыто для дальнейших ответов.

Evdokimov

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
evdokimov27
Доброго, пытался отключить выпадение предмета из инвентаря, но никак не получается, либо вообще ничего не падает, либо дюпается
последний вариант кода:
@EventHandler
public void onDeath(PlayerDeathEvent e) {
for(ItemStack someItem : e.getDrops()) {
if(someItem.equals(Material.GREEN_STAINED_GLASS_PANE)) e.getDrops().remove(someItem);
}
}
 
someItem.getType() == Material.материал
 
пробовал, все равно не получается
 
Доброго, пытался отключить выпадение предмета из инвентаря, но никак не получается, либо вообще ничего не падает, либо дюпается
последний вариант кода:
@EventHandler
public void onDeath(PlayerDeathEvent e) {
for(ItemStack someItem : e.getDrops()) {
if(someItem.equals(Material.GREEN_STAINED_GLASS_PANE)) e.getDrops().remove(someItem);
}
}
1. Ты сравниваешь стак с материалом, так делать нельзя. Получи из стака материал и так сравнивай.

2. Помимо этого, ты пыташься удалить элемент из коллекции во время перебора этой же коллекции - должен получить ConcurrentModificationException.

Решить это можно двумя способами.
Первый:
PHP:
e.getDrops().removeIf(someItem -> someItem.getType().equals(Material.GREEN_STAINED_GLASS_PANE));

Второй:
PHP:
Iterator<ItemStack> dropIterator = e.getDrops().iterator();
while (dropIterator.hasNext()) {
    ItemStack someItem = dropIterator.next();
    if (someItem.getType().equals(Material.GREEN_STAINED_GLASS_PANE)) {
        dropIterator.remove();
    }
}
 
1. Ты сравниваешь стак с материалом, так делать нельзя. Получи из стака материал и так сравнивай.

2. Помимо этого, ты пыташься удалить элемент из коллекции во время перебора этой же коллекции - должен получить ConcurrentModificationException.

Решить это можно двумя способами.
Первый:
PHP:
e.getDrops().removeIf(someItem -> someItem.getType().equals(Material.GREEN_STAINED_GLASS_PANE));

Второй:
PHP:
Iterator<ItemStack> dropIterator = e.getDrops().iterator();
while (dropIterator.hasNext()) {
    ItemStack someItem = dropIterator.next();
    if (someItem.getType().equals(Material.GREEN_STAINED_GLASS_PANE)) {
        dropIterator.remove();
    }
}
попробовал, все равно выпадает
 
А, я максимально тупой чел, я ищу зеленую панель, а она лаймовая, извиняюсь за тупость
 
Статус
Закрыто для дальнейших ответов.

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

Назад
Верх