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

Помогите Как отменить подбираение определенного блока? 1.8

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

Статус темы:
Закрыта.
  1. Автор темы
    Leo_Gesser

    Leo_Gesser Активный участник

    Баллы:
    61
    Доброго времени суток уважаемые форумчане!

    Столкнулся с проблемой, мне требуется на сервере (1.8) крафтбаккит спигот запретить подбирание определенного лута (алмазных блоков и стекла). Придумал такой код для стекла:


    @EventHandler
    public void onPlayerPickupItemEvent(PlayerPickupItemEvent deny) {
    if(deny.getItem().getMaterial() == Material.GLASS) {
    deny.setCancelled(true);
    }


    Но увы, стекло все равно поднимается. В иных случаях либо полностью перестают подбираться все предматы, либо подбирается всё как обычно. Мне не нужны сторонние плагины, хочется сделать самому. Но я никак не могу понять, каким образом мне "взять" именно блок стекла, чтобы отменить событие его поднятия.

    Еще есть такая мысль:

    public void onPlayerPickupItemEvent(PlayerPickupItemEvent deny) {
    ItemStack item = new ItemStack(Material.GLASS);
    if(deny.getItem().equals(item)){
    deny.setCancelled(true);
    }

    Но в этом случае у меня не импортируется класс Material, не знаю почему. Подскажите, я уже весь гугл облазил(((
     
    Последнее редактирование: 4 окт 2019
  2. PifPafich

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

    Баллы:
    66
    Имя в Minecraft:
    steklopaKet32_46
    deny.getItem().getMaterial().equals(Material.GLASS) - Попробуй так
     
  3. Автор темы
    Leo_Gesser

    Leo_Gesser Активный участник

    Баллы:
    61
    Спасибо, попробую)
     
  4. Автор темы
    Leo_Gesser

    Leo_Gesser Активный участник

    Баллы:
    61

    public void onPlayerPickupItemEvent(PlayerPickupItemEvent deny) {
    if(deny.getItem().getMaterial().equals(Material.GLASS)) {
    deny.setCancelled(true);
    }


    Но видимо я нуб из нубов( Пишет .equals используется для несовместимых типов. И все продолжает подбираться. Все равно спасибо
     
  5. Jhiid

    Jhiid Участник Пользователь

    Баллы:
    31
    if(deny.getItem().getType().contains (Material.GLASS)){
    )/TOdo
    }
     
  6. PifPafich

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

    Баллы:
    66
    Имя в Minecraft:
    steklopaKet32_46
    А ,используй не getMaterial() ,а getType()
     
  7. Автор темы
    Leo_Gesser

    Leo_Gesser Активный участник

    Баллы:
    61
    вы имеете ввиду что мы подбираем Энтити блока (getType), когда он "висит над землей"?
     
  8. Jhiid

    Jhiid Участник Пользователь

    Баллы:
    31
    вот дискорд добався помогу JHIID13#8043
     
  9. Автор темы
    Leo_Gesser

    Leo_Gesser Активный участник

    Баллы:
    61
    блин как добавить( добавьте меня если можно. как же я ненавижу он пестрит этот дискорд, окна, окна.. авторизация не из того места. Господи за что мне всё это(( в моем возрасте только экспериментировать..

    добавьте меня если можно 136-й#8367
     
  10. Автор темы
    Leo_Gesser

    Leo_Gesser Активный участник

    Баллы:
    61
    Спасибо за помощь Jhiid! Теперь все норм


    @EventHandler
    public void onPlayerPickupItemEvent(PlayerPickupItemEvent deny) {
    if(deny.getItem().getItemStack().getType().equals(Material.GLASS)) {
    deny.setCancelled(true);
    }


    Этот код работает, оказалось что не хватало .getItemStack()
     
Статус темы:
Закрыта.

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