Помогите Как привязать исполнение команды к предмету в эвенте

Статус
Закрыто для дальнейших ответов.

Bomber123

Активный участник
Пользователь
Баллы
76
Как привязать исполнение команды к предмету в эвенте InventoryClickEvent.
Типо кликаешь в гуи на предмет соответствие находится в конфиге и исполняется команда.
Если чё всё находится в листах.
Можете предложить идею с листами или с мапами(только не как у @alexandrage(упрощённая версия)).
И как можно больше предложений а то я пару недель обновление не могу доделать.
 
Ну меня сейчас не это интересует а привязка.
Тебе уже написали... Убери листы, сделай отдельный каст. конфиг и там сделай систему предметов как в ChestCommands. + getKeys().forEach(key ->
{
//Get info TODO
});

Так ты избавишся 3 листов и привязка будет...

images
 
Ну скиньте хоть класс ChestCommnds я его посмотрю и найду то что мне нужно.
 
Да чего там думать то ?
А действительно чё думать! Радуйтесь я свой шедевр оставлю у себя на сервере. Мне нафиг не надо чтобы ктото дупал кейсы и я сделал этот плагин(ну почти) просто помогите как-нибудь чтобы я понял что мне делать.
 
Дарю https://github.com/alexandrage/Example/blob/master/src/Example/Stack.java
https://github.com/alexandrage/Example/blob/master/src/Example/StackList.java
https://github.com/alexandrage/Example/blob/master/src/Example/Menu.java
https://github.com/alexandrage/Example/blob/master/src/stack.yml
Тебе остается при клике получать номер слота и по нему дергать все что нужно, команду(уже готовая в моем решение) и прочий кастом.
Для особых хромосом покажу что с этим делать.

PHP:
    public Configs cfgs;
    public StackList stl;
    public Menu menu;

    public void onEnable() {
        getServer().getPluginManager().registerEvents(new EventListener(this), this);
        cfgs = new Configs();
        cfgs.add(this, "stack", true);
        CustomConfig cfg = cfgs.get("stack");
        stl = new StackList(cfg.getCfg());
        menu = new Menu(this.stl, "gui");
    }

PHP:
package Example;

import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.player.PlayerInteractEvent;

public class EventListener implements Listener {
    private Main plugin;

    public EventListener(Main instance) {
        this.plugin = instance;
    }

    @EventHandler
    public void on(PlayerInteractEvent e) {
        //TODO проверка открытия.
        Player p = e.getPlayer();
        p.openInventory(this.plugin.menu.getInventory());
    }

    @EventHandler
    public void on(InventoryClickEvent e) {
        if (e.getClickedInventory() == null)
            return;
        if (e.getClickedInventory().getHolder() instanceof Menu) {
            e.setCancelled(true);
            Menu menu = (Menu) e.getClickedInventory().getHolder();
            Stack stack = menu.getStack(e.getSlot());
            if(stack==null) return;
            if(stack.getCommand()==null) return;
            //TODO что то делаем.
            this.plugin.getServer().dispatchCommand(this.plugin.getServer().getConsoleSender(), stack.getCommand());
        }
    }
}
 
Последнее редактирование:
Статус
Закрыто для дальнейших ответов.
Назад
Верх