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

Помогите Проверка названия аргумента.

Тема в разделе "Разработка плагинов для новичков", создана пользователем Vlad8989, 20 апр 2018.

  1. alexandrage

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

    Баллы:
    173
    Код:
        public Map<String, ICommand> cmds = new HashMap<String, ICommand>();
    
        @Override
        public void onEnable() {
            setumMap("Example.i.ICommand");
        }
      
        public void setumMap(String interfaceName) {
            try {
                String url = this.getClass().getProtectionDomain().getCodeSource().getLocation().toURI().getPath();
                JarFile jar = new JarFile(url);
                Enumeration<? extends JarEntry> ens = jar.entries();
                while (ens.hasMoreElements()) {
                    ZipEntry en = ens.nextElement();
                    if (en.getName().endsWith(".class")) {
                        Class<?> cl = Class.forName(en.getName().replace("/", ".").replace(".class", ""));
                        for (Class<?> in : cl.getInterfaces()) {
                            if (in.getName().equals(interfaceName)) {
                                ICommand ic = (ICommand) cl.getConstructor(this.getClass()).newInstance(this);
                                cmds.put(ic.getName(), ic);
                            }
                        }
                    }
                }
                jar.close();
            } catch (Exception e) {}
        }
      
        public interface ICommand {
            public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args);
    
            public String getName();
        }
    
        public class CMDReload implements ICommand {
            private Main plugin;
    
            public CMDReload(Main plugin) {
                this.plugin = plugin;
            }
    
            @Override
            public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
                if (sender.hasPermission("example.reload")) {
                    for (CustomConfig cfg : this.plugin.cfgs.getConfigs().values()) {
                        cfg.reloadCfg();
                    }
                    sender.sendMessage("Example reloaded");
                    Player p = (Player) sender;
                    p.spawnParticle(Particle.LAVA, p.getLocation(), 5);
                    return true;
                }
                return false;
            }
    
            @Override
            public String getName() {
                return "reload";
            }
        }
    Вот теперь фулл комплект.
     
  2. hyndorik

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

    Баллы:
    98
    Имя в Minecraft:
    hyndo
    Без ioc container такая штука оч ограничена
     
  3. alexandrage

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

    Баллы:
    173
    Хватит им и такого варика. И так применения не найдут. Ради пары аргументов оно не особо пруфитно смотрится.
     

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