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

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

Discussion in 'Разработка плагинов для новичков' started by xDark, Jun 28, 2016.

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

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

    Trophy Points:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    Здравствуйте форумчане! Вообщем решил сделать каптчу, как отдельную защиту для игроков, и вот не знаю как получить значение из другого файла, т.е. например p.getName() + ".yml".
    Вот код:
    Code:
           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 строке.
    Code:
                      if (args[0].equalsIgnoreCase(// что нужно указать здесь) {
     
    Last edited: Jun 28, 2016
  2. Хостинг MineCraft
    <
  3. DiamondDen

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

    Trophy Points:
    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 Активный участник Пользователь

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

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

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

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

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

    Trophy Points:
    76
    Skype:
    danil_20034
    Имя в Minecraft:
    DiamondDen
    А вот генерация капчи)
    Code:
            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 Активный участник Пользователь

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

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

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

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

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

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

    Trophy Points:
    76
    Skype:
    pavel.batalov1
    Вот создание файла если его нет:
    Code:
    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 Активный участник Пользователь

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

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

    Trophy Points:
    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 Активный участник Пользователь

    Trophy Points:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    угу, и получил NullPointer...
    Я вот что хочу, когда игрок вводит команду /captch add [значение которое он хочет], данное значение добавлялось в s.getName().yml, т.е. в его файл.
    Вот код:
    Code:
               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);
                    }
               }
           }
    }
    Что нужно:
    Code:
                       if (args[0].equalsIgnoreCase("add")) {
                          //Что нужно вот здесь
                           sender.sendMessage(ChatColor.translateAlternateColorCodes('&', addedCaptcha));
                       }
               }
     
  14. Novichock

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

    Trophy Points:
    76
    Skype:
    pavel.batalov1
    Тебе всё вместе нужно:
    Code:
    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 Активный участник Пользователь

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

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

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

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

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

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

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

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

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

    Dereku Старожил

    Trophy Points:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Фу. Фу-фу-фу.
    Code:
    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 Активный участник Пользователь

    Trophy Points:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    Pasiba всем за помощь, пока - что тема клоусед.
     
Thread Status:
Not open for further replies.

Share This Page