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

Blc_Dragon

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
Blc_Dragon
Доброго времени суток, форумчане.

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

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

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

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

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

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

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

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

запустить шелдуер - снова нет. если слишком часто, то сильно грузить будет. [генерировать 100 инвентарей (а то и больше) 20% из которых с рефлексиями - это не камильфо. серверу не до этих маразмов]. если слишком редко - то "умники" будут все опять же засирать.
 
Все там отслеживается. Кто то просто криворукий.
 
Конечно не знаю, можно ли так, т.к. не проверял, но не дано вместо кучи ивент хэндлеров юзать просто InventoryEvent? ><
 
Java:
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;
    }
}
 
Назад
Верх