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

Помогите Что нужно сделать чтобы отключить игрокам возможность выбрасывать предметы на Q из менюшки?

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

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

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

    Баллы:
    61
    Имя в Minecraft:
    Slaventusik
    Пробывал setCancel(true) давать разным ивентам:
    PlayerDropItemEvent
    InventoryMoveItemEvent
    InventoryDragEvent

    Раньше (Когда я ещё ничего не пытался сделать что то для того чтобы запретить игрокам выкидывать на Q вещи из инвентаря) можно было просто навестись на предмет и нажать Q и он выбросится и всё, предмет ваш.
    Теперь когда я сделал следующее:

    @EventHandler
    public void onDropInventoryEvent(PlayerDropItemEvent e) {
    if(MainCountries.InventoryIsOpening()==true) {
    e.setCancelled(true);
    }
    }

    При выбрасывании предмета из меню на Q он перемещается вам в инвентарь
    Пробывал сделать ещё вот так:


    @EventHandler
    public void onMoveItemsEvent(InventoryMoveItemEvent e) {
    if(MainCountries.InventoryIsOpening()==true) {
    e.setCancelled(true);
    }
    }

    Результат такой же
     
  2. Автор темы
    Slaventusik

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

    Баллы:
    61
    Имя в Minecraft:
    Slaventusik
  3. JavaPython

    JavaPython Новичок

    Баллы:
    16
    Имя в Minecraft:
    lambda
  4. OJIEKCAHDP

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

    Баллы:
    76
    Имя в Minecraft:
    OJIEKCAHDP
    А в чем вопрос? Путаница какая-то.
    Если предмет выбрасывается, то есть несколько вариантов:
    1. Не зарегистрирован листенер.
    2. Не срабатывает проверка
    Код:
    MainCountries.InventoryIsOpening()==true
    Зачем "== true"?
     
  5. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Ничего, ведь дроп не всегда кнопка q..
     
  6. Автор темы
    Slaventusik

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

    Баллы:
    61
    Имя в Minecraft:
    Slaventusik
    Да в чём прикол. Ивенты работают, всё класс. Я всё описал выше. Проверка if (MainCountries.InventoryIsOpen==true проверяет если открыто меню. Даже если без этой проверки, когда наводишься на предмет в менюшке и нажимаешь Q - перемещается в инвентарь. Может кто то правда знает как сделать так чтобы при нажатии на Q предмет не выкидывался, и не переходил к вам в инвентарь
     
  7. OJIEKCAHDP

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

    Баллы:
    76
    Имя в Minecraft:
    OJIEKCAHDP
    Так если тебе нужно позволить, то скорее всего какой-то плагин запрещает выбрасывать.
    Либо твой? У тебя ведь setCancelled(true).

    Можешь попробовать слушать ивент с приоритетом MONITOR и ставить false
     
  8. Автор темы
    Slaventusik

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

    Баллы:
    61
    Имя в Minecraft:
    Slaventusik
    Не совсем понимаю про ивенты которые ты сказал
     
    Последнее редактирование: 3 янв 2024
  9. Автор темы
    Slaventusik

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

    Баллы:
    61
    Имя в Minecraft:
    Slaventusik
    Нет у меня таких плагинов, все обычные. Когда в Ивенте Player PlayerDropItemEvent - я ставлю e.setCancelled(true)
    У меня он перестаёт выбрасыватся, однако начинает перемещатся в инвентарь. Можешь если не сложно, показать как бы ты написал код который бы решил мою проблему?
     
  10. Автор темы
    Slaventusik

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

    Баллы:
    61
    Имя в Minecraft:
    Slaventusik
    Тестировал на сервере без плагинов, тоже самое
     
  11. Автор темы
    Slaventusik

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

    Баллы:
    61
    Имя в Minecraft:
    Slaventusik
    Смог решить.

    @EventHandler
    public void onDropItem(PlayerDropItemEvent e) {
    if(CountriesInventory.InventoryIsOpening()==true) {
    Player p = e.getPlayer();
    Item item = (Item) e.getItemDrop();
    item.remove();
    p.closeInventory();
    CountriesInventory.open=false;
    CountriesInventory.init();
    CountriesInventory.open=true;
    p.openInventory(inv);
    }
    }
     

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