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

Как получить значение String из отдельного файла .yml

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

Статус темы:
Закрыта.
  1. Автор темы
    xDark

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

    Баллы:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    Здравствуйте форумчане! Вообщем решил сделать каптчу, как отдельную защиту для игроков, и вот не знаю как получить значение из другого файла, т.е. например p.getName() + ".yml".
    Вот код:
    Код:
           public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args){
              Player s = (Player)sender;
               if(commandLabel.equalsIgnoreCase("freeze")){
                   if(args.length == 0){
                           sender.sendMessage(ChatColor.RED + "Использывание: /freeze <игрок>");
                   }else{
                           switch(args.length){
                           case 1:
                                   Player p = Bukkit.getPlayer(args[0]);
                                   if(p == null){
                                           sender.sendMessage(ChatColor.RED + "Этот игрок не онлайн!");
                                   }else{
                                           if(frozenPlayers.contains(p.getName())){
                                                   frozenPlayers.remove(p.getName());
                                                   p.sendMessage(ChatColor.BLUE + "Вы были разморожены!");
                                           }else{
                                                   frozenPlayers.add(p.getName());
                                                   p.sendMessage(ChatColor.BLUE + "Вы были заморожены игроком " + sender.getName());
                                           }
                                   }
                                   break;
                           }
                   }
           }
              File playerFile = new File(getDataFolder() + File.separator + "players" + File.separator + s.getName() + ".yml");
               if(commandLabel.equalsIgnoreCase("captcha"))
                  if (args.length == 0) {
                  sender.sendMessage(ChatColor.RED + "Использывание /captcha [код]");
               }else{
                  if (args.length == 1)
                      if (args[0].equalsIgnoreCase(// что нужно указать здесь) {
                          sender.sendMessage("Вход выполнен!");
                      }else{
                          String kickMsg = this.getConfig().getString("Measages.KICK_ON_INCORRECT_CAPTCHA");
                          s.kickPlayer(ChatColor.translateAlternateColorCodes('&', kickMsg));
                      }
               }
           return false;
          }
          @EventHandler
          public void onJoinData(PlayerJoinEvent event)
          {
              Player p = event.getPlayer();
              File playersDir = new File(getDataFolder() + File.separator + "players");
              if(!playersDir.exists()){
                  playersDir.mkdir();
              }
             
              File playerFile = new File(getDataFolder() + File.separator + "players" + File.separator + p.getName() + ".yml");
              if(!playerFile.exists()){
                   try {
                        playerFile.createNewFile();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
              }
          }
    }
    
    Заранее спасибо.
    Что нужно указать в 31 строке.
    Код:
                      if (args[0].equalsIgnoreCase(// что нужно указать здесь) {
     
    Последнее редактирование: 28 июн 2016
  2. Хостинг MineCraft
    <
  3. DiamondDen

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

    Баллы:
    76
    Skype:
    danil_20034
    Имя в Minecraft:
    DiamondDen
    [/DOUBLEPOST] upload_2016-6-29_0-9-46.png
    XDDDDDDDDDDD[DOUBLEPOST=1467133871][/DOUBLEPOST]if (args[0].equalsIgnoreCase(// что нужно указать здесь){
    Капчю нужно указать
     
  4. Автор темы
    xDark

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

    Баллы:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    logi4no, так я и спрашиваю, при заходе у игрока создается отдельный файл p,getName() + ",ynl", так мне и нужно от туда получить значение ><
    upd: Щас добавлю ou.println, посмотрю.
    великий upd: Добавил System,out,println = 0
     
    Последнее редактирование: 28 июн 2016
  5. Novichock

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

    Баллы:
    76
    Skype:
    pavel.batalov1
    Можешь использовать:
    File datap = new File("plugins/(название твоего плагина)/player_data(просто новая папка)/"+((Player)sender).getName()+".yml");
    YamlConfiguration config = YamlConfiguration.loadConfiguration(datap);

    Код:
    if (args[0].equalsIgnoreCase(config.getString("captcha")) {
                           sender.sendMessage("Вход выполнен!");
    [DOUBLEPOST=1467134313,1467134250][/DOUBLEPOST]Это код для получения кода из файла.
     
  6. DiamondDen

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

    Баллы:
    76
    Skype:
    danil_20034
    Имя в Minecraft:
    DiamondDen
    А вот генерация капчи)
    Код:
            String lc = "qwertyuiopasdfghjklzxcvbnm1234567890";
            String capcha = "";
            for (int i = 1; i <= 10/* тут длина капчи */; i++) {
                int r = (int) (Math.random() * lc.length()) + 1;
                capcha += lc.substring(r - 1, r);
            }
    System.out.println(capcha);//просто вывел капчю
     
  7. Автор темы
    xDark

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

    Баллы:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    Нет, я понял, но я сделаю чтобы игрок ее сам мог указать, я добавлю @EventHandler на onPlayerJoinEvent, и при заходе ему будет написано что - то типо: "Добавьте каптчу! /captcha add [кож]". Вот мне и нужно получить значение, которое будет записываться в s.getName() + ".yml" и выводить его оттуда
     
  8. DiamondDen

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

    Баллы:
    76
    Skype:
    danil_20034
    Имя в Minecraft:
    DiamondDen
    А не проще просто в конфиге сделать так:
    DiamondDen: j3562jk34
    CoolBoy: kk5kda3k
    а не создавать целый файл для одного игрока
     
  9. Автор темы
    xDark

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

    Баллы:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    pasibaaaa ;D[DOUBLEPOST=1467134803][/DOUBLEPOST]
    Я буду делать не только каптчу в этом плагине, поэтому мне нужно это все для отдельного игрока.
    великий апдейт: pasiba всем за советы, тема клоусед
    Буду еще обращаться за советами, если что - то не ясно будет, всем огромное спасибо![DOUBLEPOST=1467135797][/DOUBLEPOST]великий ап: Я настолько тупой, вот еще один вопрос ;D
    Как добавить значение string при выполнении команды, т.е. добавить аргумент: /captcha add 123
    Добавить "123" в тот самый конфиг с captcha: ''
     
  10. Novichock

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

    Баллы:
    76
    Skype:
    pavel.batalov1
    Вот создание файла если его нет:
    Код:
    File datap = new File("plugins/(название твоего плагина)/player_data(просто новая папка)/"+((Player)sender).getName()+".yml");
    if(!(datap.exists())){
     try {
      datap.createNewFile();
      } catch (IOException e) { e.printStackTrace();}
     
  11. Автор темы
    xDark

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

    Баллы:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    Я не про это, я про то что когда игрок вводит /captcha add [код], то в конфиг добавлялась String:
    captcha: 'то что он ввел args[1]'
     
  12. Novichock

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

    Баллы:
    76
    Skype:
    pavel.batalov1
    Значит допиши это:
    YamlConfiguration config = YamlConfiguration.loadConfiguration(datap);
    config.set("captcha",args[1]);
    try {
    config.save(datap);
    } catch (IOException e) {e.printStackTrace();}
     
  13. Автор темы
    xDark

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

    Баллы:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    угу, и получил NullPointer...
    Я вот что хочу, когда игрок вводит команду /captch add [значение которое он хочет], данное значение добавлялось в s.getName().yml, т.е. в его файл.
    Вот код:
    Код:
               Player s = (Player)sender;
               File datap = new File("plugins/xAntiHackEvent/players/"+((Player)sender).getName()+".yml");
               YamlConfiguration config = YamlConfiguration.loadConfiguration(datap);
               if(commandLabel.equalsIgnoreCase("freeze")){
                   if(args.length == 0){
                           sender.sendMessage(ChatColor.RED + "Использывание: /freeze <игрок>");
                   }else{
                           switch(args.length){
                           case 1:
                                   Player p = Bukkit.getPlayer(args[0]);
                                   if(p == null){
                                           sender.sendMessage(ChatColor.RED + "Этот игрок не онлайн!");
                                   }else{
                                           if(frozenPlayers.contains(p.getName())){
                                                   frozenPlayers.remove(p.getName());
                                                   p.sendMessage(ChatColor.BLUE + "Вы были разморожены!");
                                           }else{
                                                   frozenPlayers.add(p.getName());
                                                   p.sendMessage(ChatColor.BLUE + "Вы были заморожены игроком " + sender.getName());
                                           }
                                   }
                                   break;
                           }
                   }
           }
               String addedCaptcha = this.getConfig().getString("Messages.CAPTCHA_ADDED");
               File playerFile = new File(getDataFolder() + File.separator + "players" + File.separator + s.getName() + ".yml");
               if(commandLabel.equalsIgnoreCase("captcha"))
                   if (args.length == 0) {
                   sender.sendMessage(ChatColor.RED + "Использывание /captcha [код]");
               }else{
                   if (args.length == 1)
                       if (args[0].equalsIgnoreCase(config.getString("captcha"))) {
                           sender.sendMessage("Вход выполнен!");
                       }
                   String howToAdd = this.getConfig().getString("Messages.TOO_FEW_ARGUMENTS_TO_ADD_CAPTCHA");
                   if (args.length == 1)
                       if (args[0].equalsIgnoreCase("add")) {
                           sender.sendMessage(ChatColor.translateAlternateColorCodes('&', howToAdd));
                       }
                   if (args.length == 2)
                       if (args[0].equalsIgnoreCase("add")) {
                          //Что нужно вот здесь <---
                           sender.sendMessage(ChatColor.translateAlternateColorCodes('&', addedCaptcha));
                       }
               }
           return false;
           }
           @EventHandler
           public void onJoinData(PlayerJoinEvent event)
           {
               Player p = event.getPlayer();
               File playersDir = new File(getDataFolder() + File.separator + "players");
               if(!playersDir.exists()){
                   playersDir.mkdir();
               }
             
               File playerFile = new File(getDataFolder() + File.separator + "players" + File.separator + p.getName() + ".yml");
               if(!playerFile.exists()){
                    try {
                        playerFile.createNewFile();
                    } catch (IOException e) {
                        e.printStackTrace();
                        System.out.println(e);
                    }
               }
           }
    }
    Что нужно:
    Код:
                       if (args[0].equalsIgnoreCase("add")) {
                          //Что нужно вот здесь
                           sender.sendMessage(ChatColor.translateAlternateColorCodes('&', addedCaptcha));
                       }
               }
     
  14. Novichock

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

    Баллы:
    76
    Skype:
    pavel.batalov1
    Тебе всё вместе нужно:
    Код:
    File datap = new File("plugins/(название твоего плагина)/player_data(просто новая папка)/"+((Player)sender).getName()+".yml");
    if(!(datap.exists())){
    try {
      datap.createNewFile();
     YamlConfiguration config = YamlConfiguration.loadConfiguration(datap);
     config.set("captcha",args[1]);
     config.save(datap);
      } catch (IOException e) { e.printStackTrace();}
     
  15. Автор темы
    xDark

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

    Баллы:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    Ок, завтра попробую, проверю, спасибо что оба помогаете, ты и DiamondDen. Мог бы поставить *like* - поставил бы.
     
  16. DiamondDen

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

    Баллы:
    76
    Skype:
    danil_20034
    Имя в Minecraft:
    DiamondDen
    upload_2016-6-29_1-49-34.png
    Я до сих пор угараю xD
     
  17. Автор темы
    xDark

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

    Баллы:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    Ахах, но не разводим оффтоа, а это я нашёл в теме о плагинe "TestDonate".
     
  18. Novichock

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

    Баллы:
    76
    Skype:
    pavel.batalov1
    Для моего кода папку надо вручную создавать.Так что кому не трудно киньте код на проверку существования папки. ;)
     
  19. DiamondDen

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

    Баллы:
    76
    Skype:
    danil_20034
    Имя в Minecraft:
    DiamondDen
    Да я знаю, я же писал xD[DOUBLEPOST=1467141413,1467141338][/DOUBLEPOST]
    datap.mkdir(); - чтоб создать файл а с файлом создаётся и папка
     
  20. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Фу. Фу-фу-фу.
    Код:
    File file = new File(this.getDataFolder().toString().concat(File.separator).concat("players"), sender.getName().toString().concat(".yml"))
    if (!file.exists()) {
        throw new Exception("Fukc that plugin");
    }
    Конечно, конкаты можно заменить и на '+' - вообще пофигу.

    А вообще если FileConfiguration игрока уже до этого загружался - не нужно его загружать заново из файла. Используй хэшмапы для хранения FileConfiguration.
     
  21. Автор темы
    xDark

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

    Баллы:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    Pasiba всем за помощь, пока - что тема клоусед.
     
Статус темы:
Закрыта.

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