Передача объекта на событие - PullRequest
0 голосов
/ 15 января 2020

В данный момент я изучаю java и разрабатываю плагин для Bukkit. Вот моя проблема:

У меня есть событие, которое срабатывает при нажатии игроком инвентаря (событие зарегистрировано в Главном классе):

Метод регистрации

private void registerEvents() {

    Bukkit.getPluginManager().registerEvents(new SendMailInventory(), this);
    Bukkit.getPluginManager().registerEvents(new MailInventory(), this);

}

onEnable ():

public void onEnable() {
    Logger log = getLogger();
    PluginDescriptionFile file = this.getDescription();
    log.info(file.getName() + " Version: " + file.getVersion()  + " has been enabled!");
    plugin = this;
    registerCommands();
    registerEvents(); //here
    setConfig();


}

Когда игрок использует команду «/ smi open», я создаю новый объект, который открывает инвентарь и управляет им. Моя проблема возникает здесь, мне нужен способ использовать объект только для того игрока, чтобы хранить предметы, и т. Д. c ... Как создать экземпляр объекта для каждого игрока, который использует команду, и использовать созданный объект, чтобы делать вещи :

Игрок a -> имеет свой собственный объект из класса нумерации страниц

Игрок b -> имеет свой собственный объект из нумерации классов

Player c - -> имеет свой собственный объект из класса нумерации страниц

et c ....

Итак, как я могу передать этот объект в класс, где происходит событие? Я сделал это (но я не думаю, что это лучший способ, я действительно не знаю):

if(args[0].equalsIgnoreCase("open")) {

    Pagination pag = new Pagination(player);
    MailInventory.pagList.put(player, pag);
    pag.setUpInventories();

    return true;
}

Таким образом, из класса событий я могу сделать это:

@EventHandler
public void clickCrate(InventoryClickEvent e) {

    Player player = (Player) e.getWhoClicked();
    Pagination pag = pagList.get(player); //RIGHT HERE

    if(!(e.getInventory().getHolder() instanceof Pagination)) {return;}
    ItemStack itemInHand = e.getCurrentItem();

    if(itemInHand!=null) {
        if(itemInHand.getType().equals(Material.CHEST)) {

            ItemMeta meta = itemInHand.getItemMeta();
            int id = meta.getCustomModelData();
            pag.getItemsFromCrate(id);

        }
        e.setCancelled(true);
    }

}

Пагинация действует как инвентарь

...