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

Помогите Отследить перемещение предмета в сундук

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

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

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

    Баллы:
    66
    Имя в Minecraft:
    Mihael_i
    Здравствуйте. Мне надо отследить перемещение предмета сундук, делаю я это с помощью такого кода:
    Код:
    @EventHandler
    public void onMoveItem(InventoryClickEvent e) {
    if (e.getAction() == InventoryAction.MOVE_TO_OTHER_INVENTORY && e.getInventory().getName().toLowerCase().contains("chest")) {
    getServer().broadcastMessage("Перемещение зафиксировано!");
    }
    }
    
    Однако, если игрок просто возьмет предмет и положит его в сундук (двумя кликами) перемещение не зафиксируется. Как "поймать" такое перемещение?
     
    Последнее редактирование: 13 окт 2016
  2. xDark

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

    Баллы:
    96
    if (e.getCurrentItem() != null && e.getInventory().getName().toLowerCase().contains("chest")) {
    getServer().broadcastMessage("Перемещение зафиксировано!");
    }
     
  3. _MediaNik_

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

    Баллы:
    76
    Skype:
    Medianik5
    Имя в Minecraft:
    _MediaNik_
  4. Автор темы
    Mihael_i

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

    Баллы:
    66
    Имя в Minecraft:
    Mihael_i
    Я уже пытался, не работает, он просто не регистрирует перемещение.
     
  5. _MediaNik_

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

    Баллы:
    76
    Skype:
    Medianik5
    Имя в Minecraft:
    _MediaNik_
    Бывает..
     
  6. Нейн

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

    Баллы:
    66
    Имя в Minecraft:
    AmokDev
    Как решили проблему, если решили? :creeper:
     
  7. alexandrage

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

    Баллы:
    173
    Обычным клик-драг эвентом. Если кому все еще надо.
     
  8. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Это вроде только при удерживании мыши и распределении предметов по инвентарю? Двойной клик это всё ещё InventoryClickEvent, только с ClickType.DOUBLE_CLICK.
     
  9. alexandrage

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

    Баллы:
    173
    Ну так я и указал на оба ивента, на все виды кликов.
     
  10. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    А, извиняюсь. Слово "эвентом" в ед. числе законфузило.
     
  11. Нейн

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

    Баллы:
    66
    Имя в Minecraft:
    AmokDev
    Извиняюсь, а Вы не знаете как получить предмет в курсоре через InventoryDragEvent?

    Просто так:
    Код:
    event.getCursor().getType() // Material
    
    у меня не получается :whistle: (значение = null)
     
    Последнее редактирование: 10 июн 2023
  12. VladNotch

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

    Баллы:
    76
    Шалкер/бочка/любой другой инвентарь с названием chest:
    (https://rubukkit.org/threads/sravnivaem-inventari.134144/)
     
  13. Нейн

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

    Баллы:
    66
    Имя в Minecraft:
    AmokDev
    У меня это так детектится :coffee:
    Код:
    if (event.getInventory().getType() != InventoryType.CHEST) {}
     
  14. VladNotch

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

    Баллы:
    76
    А ты попробуй создать кастомный инвентарь либо с 27 слотами, либо 54 слота. Сравнивать нужно через Holder.
    if (event.getInventory().getHolder() instanceof Chest) или DoubleChest
     
  15. OJIEKCAHDP

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

    Баллы:
    76
    Имя в Minecraft:
    OJIEKCAHDP
    Ну потому что, если курсор без предмета, значит на нем нет итемстака, а значит он null.
     
  16. Нейн

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

    Баллы:
    66
    Имя в Minecraft:
    AmokDev
    А если в курсоре есть предмет? Оно не срабатывает 0_о (///.getType() передает Material)
     
  17. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Читай документацию, пожалуйста.
     

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