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

Помогите защита инвентаря в "гуи"

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

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

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

    Баллы:
    76
    Доброго времени суток, форумчане.

    Как известно (может не всем это известно), но у inventoryClickEvent не отслеживается клик когда зажимаешь левый клик и растягиваешь по инвентарю.
    этот ивент просто не вызывается.

    Можно сразу перемотать на 1:22. все что до этого - сделано для доказательства того, что ивент есть

    У меня инвентари генерируются один раз при запуске плагина и потом тупо достаются из Хешмапы\хешсета.

    Естественно возникла проблема- как только один "умник" сделает как в видосе, он все засрет. да это не повлияет на функционал но выглядеть будет ущербно.

    В связи с этим вопрос - как бороться с этим дерьмом.

    Заранее спасибо.

    запретить действия с нижним инвентарем - это дико плохо\неудобно\явно коварный план сатаны, и естественно не желательно.

    генерировать инвентарь когда его хотят открыть - сорян, но это подъедает ресурсы, ибо есть инвентари где лежат вещи генерированные рефлексиями (без них тоже плохо - зависимость от версии появится).

    запустить шелдуер - снова нет. если слишком часто, то сильно грузить будет. [генерировать 100 инвентарей (а то и больше) 20% из которых с рефлексиями - это не камильфо. серверу не до этих маразмов]. если слишком редко - то "умники" будут все опять же засирать.
     
  2. slavik123123123

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

    Баллы:
    143
    Имя в Minecraft:
    Leymooo
    InventoryDragEvent
     
  3. alexandrage

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

    Баллы:
    173
    Все там отслеживается. Кто то просто криворукий.
     
  4. AtomicInteger

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

    Баллы:
    76
  5. Автор темы
    Blc_Dragon

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

    Баллы:
    76
    Спасибо.


    все бы здорово, но когда нет ума, с этим возникают проблемы :oops:
     
  6. TheZefirrkka

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

    Баллы:
    76
    Кликни на ивент, откроются доки и ты поймёшь всё
     
  7. Автор темы
    Blc_Dragon

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

    Баллы:
    76
    даладна
     
  8. TheZefirrkka

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

    Баллы:
    76
    Ага, сам в шоке был О_О
     
  9. xDark

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

    Баллы:
    96
    Конечно не знаю, можно ли так, т.к. не проверял, но не дано вместо кучи ивент хэндлеров юзать просто InventoryEvent? ><
     
  10. Автор темы
    Blc_Dragon

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

    Баллы:
    76
    ну попробуй :D
     
  11. xDark

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

    Баллы:
    96
    Я не с пк
     
  12. Автор темы
    Blc_Dragon

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

    Баллы:
    76
    Код:
    package org.bukkit.event.inventory;
    
    import java.util.List;
    
    import org.bukkit.event.HandlerList;
    import org.bukkit.entity.HumanEntity;
    import org.bukkit.event.Event;
    import org.*********ventory.Inventory;
    import org.*********ventory.InventoryView;
    
    /**
     * Represents a player related inventory event
     */
    public class InventoryEvent extends Event {
        private static final HandlerList handlers = new HandlerList();
        protected InventoryView transaction;
    
        public InventoryEvent(InventoryView transaction) {
            this.transaction = transaction;
        }
    
        /**
         * Gets the primary Inventory involved in this transaction
         *
         * @return The upper inventory.
         */
        public Inventory getInventory() {
            return transaction.getTopInventory();
        }
    
        /**
         * Gets the list of players viewing the primary (upper) inventory involved
         * in this event
         *
         * @return A list of people viewing.
         */
        public List<HumanEntity> getViewers() {
            return transaction.getTopInventory().getViewers();
        }
    
        /**
         * Gets the view object itself
         *
         * @return InventoryView
         */
        public InventoryView getView() {
            return transaction;
        }
    
        @Override
        public HandlerList getHandlers() {
            return handlers;
        }
    
        public static HandlerList getHandlerList() {
            return handlers;
        }
    }
     

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