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

  • Автор темы Автор темы xDark
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

xDark

Активный участник
Пользователь
Баллы
96
del
 
Последнее редактирование:
[/DOUBLEPOST]upload_2016-6-29_0-9-46.png
XDDDDDDDDDDD
if (args[0].equalsIgnoreCase(// что нужно указать здесь){
Капчю нужно указать
 
[/DOUBLEPOST]Посмотреть вложение 41542
XDDDDDDDDDDD
if (args[0].equalsIgnoreCase(// что нужно указать здесь){
Капчю нужно указать
logi4no, так я и спрашиваю, при заходе у игрока создается отдельный файл p,getName() + ",ynl", так мне и нужно от туда получить значение ><
upd: Щас добавлю ou.println, посмотрю.
великий upd: Добавил System,out,println = 0
 
Последнее редактирование:
Можешь использовать:
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("Вход выполнен!");

Это код для получения кода из файла.
 
А вот генерация капчи)
Код:
        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);//просто вывел капчю
 
Нет, я понял, но я сделаю чтобы игрок ее сам мог указать, я добавлю @EventHandler на onPlayerJoinEvent, и при заходе ему будет написано что - то типо: "Добавьте каптчу! /captcha add [кож]". Вот мне и нужно получить значение, которое будет записываться в s.getName() + ".yml" и выводить его оттуда
 
Нет, я понял, но я сделаю чтобы игрок ее сам мог указать, я добавлю @EventHandler на onPlayerJoinEvent, и при заходе ему будет написано что - то типо: "Добавьте каптчу! /captcha add [кож]". Вот мне и нужно получить значение, которое будет записываться в s.getName() + ".yml" и выводить его оттуда
А не проще просто в конфиге сделать так:
DiamondDen: j3562jk34
CoolBoy: kk5kda3k
а не создавать целый файл для одного игрока
 
Можешь использовать:
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("Вход выполнен!");

Это код для получения кода из файла.
pasibaaaa ;D
А не проще просто в конфиге сделать так:
DiamondDen: j3562jk34
CoolBoy: kk5kda3k
а не создавать целый файл для одного игрока
Я буду делать не только каптчу в этом плагине, поэтому мне нужно это все для отдельного игрока.
великий апдейт: pasiba всем за советы, тема клоусед
Буду еще обращаться за советами, если что - то не ясно будет, всем огромное спасибо!
великий ап: Я настолько тупой, вот еще один вопрос ;D
Как добавить значение string при выполнении команды, т.е. добавить аргумент: /captcha add 123
Добавить "123" в тот самый конфиг с captcha: ''
 
Вот создание файла если его нет:
Код:
File datap = new File("plugins/(название твоего плагина)/player_data(просто новая папка)/"+((Player)sender).getName()+".yml");
if(!(datap.exists())){
 try {
  datap.createNewFile();
  } catch (IOException e) { e.printStackTrace();}
 
Вот создание файла если его нет:
Код:
File datap = new File("plugins/(название твоего плагина)/player_data(просто новая папка)/"+((Player)sender).getName()+".yml");
if(!(datap.exists())){
try {
  datap.createNewFile();
  } catch (IOException e) { e.printStackTrace();}
Я не про это, я про то что когда игрок вводит /captcha add [код], то в конфиг добавлялась String:
captcha: 'то что он ввел args[1]'
 
Я не про это, я про то что когда игрок вводит /captcha add [код], то в конфиг добавлялась String:
captcha: 'то что он ввел args[1]'
Значит допиши это:
YamlConfiguration config = YamlConfiguration.loadConfiguration(datap);
config.set("captcha",args[1]);
try {
config.save(datap);
} catch (IOException e) {e.printStackTrace();}
 
угу, и получил NullPointer...
Я вот что хочу, когда игрок вводит команду /captch add [значение которое он хочет], данное значение добавлялось в s.getName().yml, т.е. в его файл.
Вот код:
CSS:
           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);
                }
           }
       }
}
Что нужно:
CSS:
                   if (args[0].equalsIgnoreCase("add")) {
                      //Что нужно вот здесь
                       sender.sendMessage(ChatColor.translateAlternateColorCodes('&', addedCaptcha));
                   }
           }
 
Тебе всё вместе нужно:
Код:
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();}
 
Тебе всё вместе нужно:
Код:
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();}
Ок, завтра попробую, проверю, спасибо что оба помогаете, ты и DiamondDen. Мог бы поставить *like* - поставил бы.
 
upload_2016-6-29_1-49-34.png
Я до сих пор угараю xD
 
Для моего кода папку надо вручную создавать.Так что кому не трудно киньте код на проверку существования папки. ;)
 
Ахах, но не разводим оффтоа, а это я нашёл в теме о плагинe "TestDonate".
Да я знаю, я же писал xD
Для моего кода папку надо вручную создавать.Так что кому не трудно киньте код на проверку существования папки. ;)
datap.mkdir(); - чтоб создать файл а с файлом создаётся и папка
 
File datap = new File("plugins/(название твоего плагина)/player_data(просто новая папка)/"+((Player)sender).getName()+".yml");
Фу. Фу-фу-фу.
Java:
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.
 
Pasiba всем за помощь, пока - что тема клоусед.
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх