Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Dismiss Notice

Помогите onTabComplete. Выбор наиболее схожего с аргументом.

Discussion in 'Разработка плагинов для новичков' started by iD3LSY, Jan 27, 2017.

Thread Status:
Not open for further replies.
  1. Автор темы
    iD3LSY

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

    Trophy Points:
    46
    Имя в Minecraft:
    opy
    Привет всем :)

    Я догадываюсь, что далеко не многие поняли, о чём я говорю исходя из названия темы, но я попробую объяснить куда более доходчиво.

    Старые игроки могут помнить, что в версии 1.3 добавили функцию чата в игру, а вместе с ней и помощь в вводе команд используя TAB. Так вот, "Выбор наиболее схожего с аргументом" обозначает, что мне нужно ввести команду, а потом после этой команды подбирать наиболее схожую с 1ым аргументом подсказку(точного названия я не знаю, так-что условное - подсказка).

    По факту, можно делать проверку сразу 2 буквы агрументы на схожесть с 2ой буквы аргумента из подсказки, но могут быть схожие слова, а тем-более можно ввести 3ью букву, которая не будет схожа с 3ей буквой подсказки, но при нажатие на TAB все равно выведет подсказку, изменив 3ью букву. А если продолжить тему с схожими словами, то я говорю про что-то на подобие help, helpop.

    У кого есть идеи, как проверять на схожесть этого аргумента целиком - пишите.
     
  2. Хостинг MineCraft
    <
  3. Blc_Dragon

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

    Trophy Points:
    76
    Имя в Minecraft:
    Blc_Dragon
    если я тебя правильно понял, то это простейшая задачка на строки.

    ща слабаю (я не работал с этим ивентом, поэтому к нему прикрутишь сам)[DOUBLEPOST=1485584892,1485578805][/DOUBLEPOST]Вот что у меня получилось:
    Code:
    /**
        *
        * @param secarg - Слово, кооторое подлежит исправлению (напр: hetp)
        * @param firstarg - Слово на которое надо исправить (напр: help)
        * @param count - Кол-во букв которые должны совпасть в дух словах выше
        * @param correctors - список слов которые будут добавлены к исправленному варианту.
        * @param correctorcount - Кол-во букв которые должны совпасть в secarg и слове из correctors (начало secarg, которое совпадает с firstarg отсекается. т.е. если firstarg = help, secarg = hetp, то на проверку уйдет лишь "tp")
        * @return
        */
        public List<String> getSituableCorrections(String secarg, String firstarg, int count, String[] correctors, int correctorcount){
            if (counter(secarg, firstarg)>=count){
                return getSituableCorrectors(secarg, correctors, firstarg,correctorcount);
            }else return new ArrayList<>();
        }
     
        private List<String> wordToList(String word){
            List<String> LS = new ArrayList<>();
            for (int c = 0; c<word.length(); c++){
                LS.add(String.valueOf(word.charAt(c)));
            }
            return LS;
        }
     
        private int counter (String word, String checker){
            List<String> ls = wordToList(checker.toLowerCase());
            int k = 0;
            for (int c = 0; c<word.length(); c++){
             
                String sumbol = String.valueOf(word.charAt(c)).toLowerCase();
             
                if (ls.contains(sumbol)){
                    ls.remove(sumbol);
                    k++;
                }
            } 
            return k;
        }
     
        private List<String> getSituableCorrectors(String word, String[] correctors, String checker,int correctorcount){
            if (word.length()<checker.length())    checker = checker.substring(0, word.length()-1);
            for (int c = 1; c<checker.length(); c++){
                if (!word.startsWith(checker.substring(0, c))){
                    word = word.substring(c-1);
                }
            }     
            List<String> tor = new ArrayList<>();
            for (String corrector:correctors){
                int k = counter(word, corrector) ;
                if (k>=correctorcount){
                    tor.add(corrector);
                }
            }
            return tor;
        }
    Загнал я это в java Application вот под таким соусом:
    Code:
    String[] correctors = new String[]{"op", "rename", "proxy", "star"};
            String firstarg = "help";
            String[] secargs = new String[]{"hlr", "hepr", "hrn", "herop", "hern",};
            for (String secarg:secargs){
                List<String> list = new ArrayList<>(getSituableCorrections(secarg, firstarg, 2, correctors, 1));
                if (list.isEmpty()) {
                    System.out.println("Для аргумента "+secarg+ " ничего не надено!");
                    continue;
                }
    
                System.out.print("Аргумент "+secarg+ " может быть исправлен на: ");
                for (String s : list){
                    System.out.print(firstarg+s + " ");
                }
                System.out.println("");
            }
    В консоль получил это:
    upload_2017-1-28_11-30-9.png

    Я думаю ты разберёшься что и куда вкручивать.
     
  4. Blc_Dragon

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

    Trophy Points:
    76
    Имя в Minecraft:
    Blc_Dragon
    по подробнее. куда ты тут собрался его пихать?[DOUBLEPOST=1485586025,1485585983][/DOUBLEPOST]
    там где надо оно было использовано. подсчет по буквам используется что бы выриант hlpop выдал helpop.
     
  5. Blc_Dragon

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

    Trophy Points:
    76
    Имя в Minecraft:
    Blc_Dragon

    для счастья (и снятия опечаток)
     
  6. alexandrage

    alexandrage Администратор

    Trophy Points:
    173
    Skype:
    alexandr0116
    Ну окай.
     
  7. Mabus

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

    Trophy Points:
    76
    Skype:
    chervanenko
    Имя в Minecraft:
    Chervanenko
    :oops: так быстро? Поспорьте ещё, мне нра. :rolleyes:
     
  8. alexandrage

    alexandrage Администратор

    Trophy Points:
    173
    Skype:
    alexandr0116
    Не интересно, не мой же сервер сдохнет от чата.
     
  9. Blc_Dragon

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

    Trophy Points:
    76
    Имя в Minecraft:
    Blc_Dragon
    всм?
     
  10. Mabus

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

    Trophy Points:
    76
    Skype:
    chervanenko
    Имя в Minecraft:
    Chervanenko
    Посему тайм-лимит ввести надобно. Или даже кик при абузе. Но мы же ленивые жопы, потому проще тупо чатконтрол поставить и забыть об этих табах. =)))
     
  11. Mabus

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

    Trophy Points:
    76
    Skype:
    chervanenko
    Имя в Minecraft:
    Chervanenko
  12. Blc_Dragon

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

    Trophy Points:
    76
    Имя в Minecraft:
    Blc_Dragon
    защиту от "умных" меня не просили. человек думаю не дурак, сам сделает
     
  13. alexandrage

    alexandrage Администратор

    Trophy Points:
    173
    Skype:
    alexandr0116
    Ну вы сами спросили, я ответил.
     
  14. Blc_Dragon

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

    Trophy Points:
    76
    Имя в Minecraft:
    Blc_Dragon
    я просто думал у меня где то в коде дикие нагрузки могут в некоторых условиях появиться. или зацикливание где то.

    мало ли что
     
Thread Status:
Not open for further replies.

Share This Page