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

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

Bomber123

Активный участник
Пользователь
Баллы
76
Как привязать исполнение команды к предмету в эвенте InventoryClickEvent.
Типо кликаешь в гуи на предмет соответствие находится в конфиге и исполняется команда.
Если чё всё находится в листах.
Можете предложить идею с листами или с мапами(только не как у @alexandrage(упрощённая версия)).
И как можно больше предложений а то я пару недель обновление не могу доделать.
 
Как привязать исполнение команды к предмету в эвенте InventoryClickEvent.
Типо кликаешь в гуи на предмет соответствие находится в конфиге и исполняется команда.
Если чё всё находится в листах.
Можете предложить идею с листами или с мапами(только не как у @alexandrage(упрощённая версия)).
И как можно больше предложений а то я пару недель обновление не могу доделать.
:facepalm:

Если у тебя лист с командами, то перебирай через фор ич лямбдой или циклом. Ну а потом запускай команду. В чем проблема?
 
да вот в том что при это всё происходит рандомно и привязывается ещё и имя.
 
А как можно хранить целое меню в листе конфига? Или имеется виду лист обьектов меню?
 
А как можно хранить целое меню в листе конфига? Или имеется виду лист обьектов меню?
Объектов.
Я создал 3 листа.
Один содержит имена.
Второй материалы.
А вот третий он и есть с командами я его ни как пристроить не могу.
 
да вот в том что при это всё происходит рандомно и привязывается ещё и имя.
Всм? Список команд должен работать поочередно? Тогда получай айди строки в листе. В командами должно работать имя? Сделай плейсхолдер.
 
Объектов.
Я создал 3 листа.
Один содержит имена.
Второй материалы.
А вот третий он и есть с командами я его ни как пристроить не могу.
Почему тебе не сделать все в одном листе через split и получать с одного листа и ник и команду и все что хочешь?
 
Почему тебе не сделать все в одном листе через split и получать с одного листа и ник и команду и все что хочешь?
Все-равно это будет выглядеть очень костыльно.
Я предлагаю юзать вид конфига меню как в ChestCommands, а хранить само меню в обьектах, ну и иконки с командами,описанием и тд тоже в обьектах.
 
Все-равно это будет выглядеть очень костыльно.
Я предлагаю юзать вид конфига меню как в ChestCommands, а хранить само меню в обьектах, ну и иконки с командами,описанием и тд тоже в обьектах.
Ну я не понял что именно хочет сделать ТЗ. Если что-то типа CC то тогда да, так лучше.
 
А если ему принципиально нужно хранить в листе и связать все к нику, то тогда уж использовать 1 лист.
 
На самом деле я тоже не понял, что за Франкенштейна он хочет сделать)
У него редкая способность писать так, что после каждого слова его сообщение понять еще сложнее))
 
Все-равно это будет выглядеть очень костыльно.
Я предлагаю юзать вид конфига меню как в ChestCommands, а хранить само меню в обьектах, ну и иконки с командами,описанием и тд тоже в обьектах.
Так я весь ChestCommands прочесал ничего нужного не нашёл.
 
PHP:
package com.ac.dc;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Random;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
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.inventory.InventoryOpenEvent;
import org.*********ventory.Inventory;
import org.*********ventory.ItemStack;
import org.*********ventory.meta.ItemMeta;

public class CaseListener implements Listener
{
    int task;
    static HashMap<Player, Integer> tasks = new HashMap<>();
    static List<String> materials = new ArrayList<String>();
    static List<String> cmds = new ArrayList<String>();
    private CaseCommand plugin;
    static List<String> names = new ArrayList<>();
    public CaseListener(CaseCommand pl) {
        this.plugin = pl;
    }
    
    @EventHandler
    public void onClick1(InventoryClickEvent e)
    {
        Inventory inv = e.getInventory();
        if(inv.getName().equalsIgnoreCase(ChatColor.GREEN+"Открыть кейс с донатом"))
        {
            Player p = (Player) e.getWhoClicked();
            ItemStack item = e.getCurrentItem();
            if(item.getType() == Material.AIR) return;
            e.setCancelled(true);
            if(item.getType() != Material.CHEST) return;
            if(!item.getItemMeta().hasDisplayName()) return;
            if(!item.getItemMeta().getDisplayName().equals(ChatColor.DARK_AQUA+"Открыть кейс"));
            AdderRemover.remove(p);
            Menus.spin(p);
        }
    }
    
    @EventHandler
    public void onClick2(InventoryClickEvent e)
    {
        Inventory inv = e.getInventory();
        if(inv.getName().equalsIgnoreCase(ChatColor.GOLD+"Открытие кейса..."))
        {
            ItemStack item = e.getCurrentItem();
            if(item.getType() == Material.AIR) return;
            e.setCancelled(true);
        }
    }
    
    @EventHandler
    public void onOpen1(InventoryOpenEvent e)
    {
        Player p =(Player) e.getPlayer();
        
        Inventory inv = e.getInventory();
        if(inv.getName().equalsIgnoreCase(ChatColor.GOLD+"Открытие кейса..."))
        {
            Random r = new Random();
            
            List<ItemStack> items = new ArrayList<>();
            for(String s : materials)
            {
                ItemStack item = new ItemStack(Material.getMaterial(s.toUpperCase()));
                items.add(item);
            }
            
            task = Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, () -> {
                int index = r.nextInt(materials.size());
                ItemStack item = items.get(index);
                ItemMeta meta = item.getItemMeta();
                String name = names.get(index).replace("&", "\u00a7");
                meta.setDisplayName(ChatColor.BLUE+name);
                item.setItemMeta(meta);
                inv.setItem(13, items.get(index));
            }, 0, 3);
            
            tasks.put(p, Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, ()-> {
                Bukkit.getScheduler().cancelTask(task);
                tasks.remove(p);
                int index = r.nextInt(materials.size());
                ItemStack item = items.get(index);
                Menus.get(p, item);
            }, 80L));
        }
    }
}
 
PHP:
package com.ac.dc;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Random;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
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.inventory.InventoryOpenEvent;
import org.*********ventory.Inventory;
import org.*********ventory.ItemStack;
import org.*********ventory.meta.ItemMeta;

public class CaseListener implements Listener
{
    int task;
    static HashMap<Player, Integer> tasks = new HashMap<>();
    static List<String> materials = new ArrayList<String>();
    static List<String> cmds = new ArrayList<String>();
    private CaseCommand plugin;
    static List<String> names = new ArrayList<>();
    public CaseListener(CaseCommand pl) {
        this.plugin = pl;
    }
   
    @EventHandler
    public void onClick1(InventoryClickEvent e)
    {
        Inventory inv = e.getInventory();
        if(inv.getName().equalsIgnoreCase(ChatColor.GREEN+"Открыть кейс с донатом"))
        {
            Player p = (Player) e.getWhoClicked();
            ItemStack item = e.getCurrentItem();
            if(item.getType() == Material.AIR) return;
            e.setCancelled(true);
            if(item.getType() != Material.CHEST) return;
            if(!item.getItemMeta().hasDisplayName()) return;
            if(!item.getItemMeta().getDisplayName().equals(ChatColor.DARK_AQUA+"Открыть кейс"));
            AdderRemover.remove(p);
            Menus.spin(p);
        }
    }
   
    @EventHandler
    public void onClick2(InventoryClickEvent e)
    {
        Inventory inv = e.getInventory();
        if(inv.getName().equalsIgnoreCase(ChatColor.GOLD+"Открытие кейса..."))
        {
            ItemStack item = e.getCurrentItem();
            if(item.getType() == Material.AIR) return;
            e.setCancelled(true);
        }
    }
   
    @EventHandler
    public void onOpen1(InventoryOpenEvent e)
    {
        Player p =(Player) e.getPlayer();
       
        Inventory inv = e.getInventory();
        if(inv.getName().equalsIgnoreCase(ChatColor.GOLD+"Открытие кейса..."))
        {
            Random r = new Random();
           
            List<ItemStack> items = new ArrayList<>();
            for(String s : materials)
            {
                ItemStack item = new ItemStack(Material.getMaterial(s.toUpperCase()));
                items.add(item);
            }
           
            task = Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, () -> {
                int index = r.nextInt(materials.size());
                ItemStack item = items.get(index);
                ItemMeta meta = item.getItemMeta();
                String name = names.get(index).replace("&", "\u00a7");
                meta.setDisplayName(ChatColor.BLUE+name);
                item.setItemMeta(meta);
                inv.setItem(13, items.get(index));
            }, 0, 3);
           
            tasks.put(p, Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, ()-> {
                Bukkit.getScheduler().cancelTask(task);
                tasks.remove(p);
                int index = r.nextInt(materials.size());
                ItemStack item = items.get(index);
                Menus.get(p, item);
            }, 80L));
        }
    }
}
Мне жаль сервер, который будет это обрабатывать 😢
 
PHP:
package com.ac.dc;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Random;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
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.inventory.InventoryOpenEvent;
import org.*********ventory.Inventory;
import org.*********ventory.ItemStack;
import org.*********ventory.meta.ItemMeta;

public class CaseListener implements Listener
{
    int task;
    static HashMap<Player, Integer> tasks = new HashMap<>();
    static List<String> materials = new ArrayList<String>();
    static List<String> cmds = new ArrayList<String>();
    private CaseCommand plugin;
    static List<String> names = new ArrayList<>();
    public CaseListener(CaseCommand pl) {
        this.plugin = pl;
    }
  
    @EventHandler
    public void onClick1(InventoryClickEvent e)
    {
        Inventory inv = e.getInventory();
        if(inv.getName().equalsIgnoreCase(ChatColor.GREEN+"Открыть кейс с донатом"))
        {
            Player p = (Player) e.getWhoClicked();
            ItemStack item = e.getCurrentItem();
            if(item.getType() == Material.AIR) return;
            e.setCancelled(true);
            if(item.getType() != Material.CHEST) return;
            if(!item.getItemMeta().hasDisplayName()) return;
            if(!item.getItemMeta().getDisplayName().equals(ChatColor.DARK_AQUA+"Открыть кейс"));
            AdderRemover.remove(p);
            Menus.spin(p);
        }
    }
  
    @EventHandler
    public void onClick2(InventoryClickEvent e)
    {
        Inventory inv = e.getInventory();
        if(inv.getName().equalsIgnoreCase(ChatColor.GOLD+"Открытие кейса..."))
        {
            ItemStack item = e.getCurrentItem();
            if(item.getType() == Material.AIR) return;
            e.setCancelled(true);
        }
    }
  
    @EventHandler
    public void onOpen1(InventoryOpenEvent e)
    {
        Player p =(Player) e.getPlayer();
      
        Inventory inv = e.getInventory();
        if(inv.getName().equalsIgnoreCase(ChatColor.GOLD+"Открытие кейса..."))
        {
            Random r = new Random();
          
            List<ItemStack> items = new ArrayList<>();
            for(String s : materials)
            {
                ItemStack item = new ItemStack(Material.getMaterial(s.toUpperCase()));
                items.add(item);
            }
          
            task = Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, () -> {
                int index = r.nextInt(materials.size());
                ItemStack item = items.get(index);
                ItemMeta meta = item.getItemMeta();
                String name = names.get(index).replace("&", "\u00a7");
                meta.setDisplayName(ChatColor.BLUE+name);
                item.setItemMeta(meta);
                inv.setItem(13, items.get(index));
            }, 0, 3);
          
            tasks.put(p, Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, ()-> {
                Bukkit.getScheduler().cancelTask(task);
                tasks.remove(p);
                int index = r.nextInt(materials.size());
                ItemStack item = items.get(index);
                Menus.get(p, item);
            }, 80L));
        }
    }
}
Во первых я не вижу как ты в лист загружаешь данные из конфига. Попахивает NPE
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх