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

Помогите [Решено] Второй аргумент сообщения

Тема в разделе "Разработка плагинов для новичков", создана пользователем Den42, 4 фев 2016.

  1. Автор темы
    Den42

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

    Баллы:
    66
    Помогите пожалуйста! Возникла такая проблема: нужно, чтобы когда игрок писал в чат "магазин 2"
    , совершалось действие, но я не знаю, как мне получить второй аргумент сообщения, а именно "2". Вот код:
    1. Код:
      public void onChatSend(PlayerChatEvent e){
              Player p = e.getPlayer();
              if(e.getMessage().equals("магазин") || e.getMessage().equals("!магазин") && e.getMessage().length() == 0){
                  e.setCancelled(true);
                  e.getPlayer().sendMessage((Object)ChatColor.BLUE + "---------" + (Object)ChatColor.YELLOW + " МАГАЗИН " + (Object)ChatColor.BLUE + "-------");(Object)ChatColor.GREEN + "магазин2");
                  if(e.getMessage().length() == 1 && /*здесь нужно получить второй арг-ент,, length(2).equals "2" не работает){
                 p.sendMessage((Object)ChatColor.GREEN + "Страница 2");
              }
     
    Последнее редактирование: 4 фев 2016
  2. Хостинг MineCraft
    <
  3. Starr

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

    Баллы:
    98
    Имя в Minecraft:
    _Starr_
    Обоже. Сделай код хотя бы читабельным.
     
  4. Reality_SC

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

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Пожалуйста, пользуйтесь тегами CODE=Java для кода на Java и CODE=Yaml для конфигурационных файлов .yml.
    Код:
    ...
    String[] words = e.getMessage().split("\\s+");
    if(words.length >= 2 && words[0].replace("!", "").equals("магазин"))
    {
       if(words[1].equals("2")
       {
          // TO DO HERE
       }
    }
    ...
     
  5. Автор темы
    Den42

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

    Баллы:
    66
    Огромное спасибо! Только немного непонятно, почему split разделяет "\\s+"
     
  6. Reality_SC

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

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Потому что метод split:
    делит строку на куски, используя в качестве разделителя регулярное выражение, в которых \s представляет собой
    upload_2016-2-5_11-22-44.png
    — любой возможный пробельный символ. Плюс — короткая запись квантификатора {1,}, а двойной слеш, потому что нам нужно передать слеш через строку, а по правилам C-подобных языков, его нужно экранировать (слешем), иначе это будет подстановочный символ.
     
  7. Автор темы
    Den42

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

    Баллы:
    66
    Благодарю![DOUBLEPOST=1454651998,1454650238][/DOUBLEPOST]Все-равно не работает. Когда просто пишу "магазин", все нормально, а когда через пробел добавляю "купить", ничего не происходит. Вот код:
    Код:
        @EventHandler
        public void onChatSend(PlayerChatEvent e){
            Player p = e.getPlayer();
            ItemStack is1 = new ItemStack(Material.LEATHER_BOOTS);
            ItemMeta im1 = is1.getItemMeta();
            im1.addEnchant(Enchantment.PROTECTION_ENVIRONMENTAL, 4, true);
            is1.setItemMeta(im1);
    
            ItemStack is2 = new ItemStack(Material.LEATHER_CHESTPLATE);
            ItemMeta im2 = is2.getItemMeta();
            im1.addEnchant(Enchantment.PROTECTION_ENVIRONMENTAL, 4, true);
            is1.setItemMeta(im2);
    
            ItemStack is3 = new ItemStack(Material.LEATHER_HELMET);
            ItemMeta im3 = is3.getItemMeta();
            im1.addEnchant(Enchantment.PROTECTION_ENVIRONMENTAL, 4, true);
            is1.setItemMeta(im3);
    
            ItemStack is4 = new ItemStack(Material.LEATHER_LEGGINGS);
            ItemMeta im4 = is4.getItemMeta();
            im1.addEnchant(Enchantment.PROTECTION_ENVIRONMENTAL, 4, true);
            is1.setItemMeta(im4);
            if(e.getMessage().equals("магазин") || e.getMessage().equals("!магазин") && e.getMessage().length() == 0){
                e.setCancelled(true);
                e.getPlayer().sendMessage((Object)ChatColor.BLUE + "---------" + (Object)ChatColor.YELLOW + " МАГАЗИН " + (Object)ChatColor.BLUE + "-------");
                p.sendMessage((Object)ChatColor.GREEN + "Кожанный сет, защита 4" + (Object)ChatColor.YELLOW + " -" + (Object)ChatColor.RED + " 7 лвл");
                p.sendMessage((Object)ChatColor.GREEN + "Кольчужный сет, защита 3" + (Object)ChatColor.YELLOW + " -" + (Object)ChatColor.RED + " 13 лвл");
                p.sendMessage((Object)ChatColor.GREEN + "Железный сет, защита 2" + (Object)ChatColor.YELLOW + " -" + (Object)ChatColor.RED + " 19 лвл");
                p.sendMessage((Object)ChatColor.GREEN + "Алмазный сет, защита 1" + (Object)ChatColor.YELLOW + " -" + (Object)ChatColor.RED + " 30 лвл");
                p.sendMessage((Object)ChatColor.GREEN + "Алмазный сет, защита 3" + (Object)ChatColor.YELLOW + " - " + (Object)ChatColor.RED + "35 лвл");
                p.sendMessage((Object)ChatColor.GREEN + "Алмазный сет, защита 4" + (Object)ChatColor.YELLOW + " - " + (Object)ChatColor.RED + "43 лвл");
                p.sendMessage((Object)ChatColor.GRAY + "-------------------------");
                p.sendMessage((Object)ChatColor.YELLOW + "Чтобы открыть страницу 2, пиши " + (Object)ChatColor.GREEN + "магазин2");
                String[] words = e.getMessage().split("\\s+");
                if(words.length >= 2 && words[0].replace("!", "").equals("магазин")){
                    if(words[1].equals("купить") && words[0].replace("!", "").equals("магазин")){
                        e.setCancelled(true);
                        p.sendMessage((Object)ChatColor.RED + "Укажите номер покупки");
                    }
                    if(words[2].equals("1") && words[0].replace("!", "").equals("магазин") && words[1].equals("купить")){
                       p.sendMessage((Object)ChatColor.GREEN + "Успешно!")
    
                }
                }
            }
     
  8. Reality_SC

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

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Тебе не нужна больше твоя (радикально неправильная) строка
    Код:
    if(e.getMessage().equals("магазин") || e.getMessage().equals("!магазин") && e.getMessage().length() == 0)
    [DOUBLEPOST=1454652898,1454652721][/DOUBLEPOST]Сейчас разберусь в твоём бредоватом коде :)[DOUBLEPOST=1454653959][/DOUBLEPOST]Проверяй: http://pastebin.com/UYPBcggE
    Но делать это в чате как-то стрёмно. Лучше бы зарегал свою команду (/magazin ?), фактически ничем не отличалось бы.
     
  9. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Вы хоть понимаете, что вы пишете?
    ЕСЛИ сообщение равно "магазин" ИЛИ равно "!магазин" И сообщение ПУСТОЕ

    Понятное дело, что "магазин купить" не равно "магазин" и первое условие не исполнится.
     
  10. Автор темы
    Den42

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

    Баллы:
    66
    Случайно написал e.getMessage().length() == 0, просто начало счета java берет с нуля, и он должен быть равен единице. Сейчас уже разобрался в этом.[DOUBLEPOST=1454660030,1454659812][/DOUBLEPOST]
    Спасибо! Плагин пишу для друга(его идея магазина через чат)
     
  11. Reality_SC

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

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Это идея из разряда "почему бы не выстрелить себе в ногу?".
     
  12. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Нет, не разобрались.
    Возвращает длину сообщения(кол-во букв/символов), а не кол-во аргументов.
     

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