2015-06-07 2 views
1

Я пытаюсь создать плагин Bukkit/Spigot, который хранит данные пользователя с YML-файлами, и я не могу создать список в файле, который создается, когда пользователи присоединяется. Я использую встроенный синтаксический анализатор.Файл создается, но FileConfiguration не помещает в него текст

Кодекс:

@EventHandler 
public void onPlayerJoin(PlayerJoinEvent e) { 

    Player p = e.getPlayer(); 
    File f; 
    f = new File(getDataFolder(), "UserData/" + p.getUniqueId() + ".yml"); 
    if (!f.exists()) { 

     try { 
      f.createNewFile(); 
     } catch (IOException e1) { 
      e1.printStackTrace(); 
     } 
     FileConfiguration mapconfig = YamlConfiguration.loadConfiguration(new File(getDataFolder() + "UserData/" + p.getUniqueId() + ".yml")); 
     mapconfig.createSection("Mobs"); 
     mapconfig.set("Mobs", "mob1"); 
     Bukkit.getServer().getLogger().info("[Morph] Creating new user file " + p.getUniqueId() + "for user " + p.getName()); 
    } 

} 

файлы создаются, но они пусты.

Mobs: 
    - mob1 

Мне нужен раздел пустой. Что я делаю не так?

Обновленный код --------------------

@EventHandler 
public void onPlayerJoin(PlayerJoinEvent e) { 

    Player p = e.getPlayer(); 
    File f; 
    f = new File(getDataFolder(), "UserData/" + p.getUniqueId() + ".yml"); 
    if (!f.exists()) { 

     try { 
      f.createNewFile(); 
     } catch (IOException e1) { 
      e1.printStackTrace(); 
     } 
     FileConfiguration mapconfig = YamlConfiguration.loadConfiguration(new File(getDataFolder() + "UserData/" + p.getUniqueId() + ".yml")); 
     mapconfig.createSection("Mobs"); 
     List<String> ListOfStrings = Arrays.asList("mob1"); 
     mapconfig.set("Mobs", ListOfStrings); 
     try { 
      mapconfig.save(getDataFolder() + "UserData/" + p.getUniqueId() + ".yml"); 
     } catch (IOException e1) { 
      e1.printStackTrace(); 
     } 
     Bukkit.getServer().getLogger().info("[Morph] Creating new user file " + p.getUniqueId() + "for user " + p.getName()); 
    } 

} 

ответ

1

Вы должны сохранить измененную конфигурацию YAML в файл игрока с помощью mapconfig.save(file) в попробуйте блок после того, как вы добавили все узлы и т. д.

Если вы хотите, чтобы список «Mobs» был изначально пуст, оставьте строку mapconfig.set("Mobs", "mob1");.

Чтобы добавить элементы в список «Мобы», вам необходимо создать список добавляемых строк. Насколько я могу судить, каждый раз, когда вы хотите обновить список, удалив или добавив еще одну строку, вам нужно сначала загрузить файл YAML (дополнительный шаг после создания конфигурации) с помощью mapconfig.load(file), а затем получить текущие значения (строки) в в списке, используя mapconfig.getStringList("Mobs"), обновите список по своему усмотрению, переустановите его на узел «Mobs» и снова сохраните файл (пример ниже).

//Initial strings when file does not exist 
List<String> listOfStrings = Arrays.asList("mob1", "foo", "bar"); 
mapconfig.set("Mobs", listOfStrings); 
//Save config to file (in try block) 

И обновить список, если файл уже существует, например, путем добавления новой строки.

//After creating the file configuration 
//Load file (in try block) 
List<String> stringList = mapconfig.getStringList("Mobs"); 
stringList.add("mob4"); 
mapconfig.set("Mobs", stringList); 
//Save config to file (in try block) 

В случае, если что-то все еще не работает, вот моя слегка очищенная версия вашего кода, которая сработала для меня.

@EventHandler 
public void onPlayerJoin(PlayerJoinEvent event) { 
    Player player = event.getPlayer(); 
    File file = new File(getDataFolder() + "/UserData/" + player.getUniqueId() + ".yml"); //Assuming all required directories exist 
    if (!file.exists()) { 
     try { 
      file.createNewFile(); 
     } catch (IOException ex) { 
      ex.printStackTrace(); 
     } 
     Bukkit.getServer().getLogger().info("[Morph] Creating new user file " + player.getUniqueId() + "for user " + player.getName()); 
     FileConfiguration fileConfig = YamlConfiguration.loadConfiguration(file); 
     fileConfig.createSection("Mobs"); 
     List<String> ListOfStrings = Arrays.asList("mob1", "mob2", "mob3"); 
     fileConfig.set("Mobs", ListOfStrings); 
     try { 
      fileConfig.save(file); 
     } catch (IOException ex) { 
      ex.printStackTrace(); 
     } 
    } 
} 
+0

Я обновил тему с помощью кода, который у меня есть сейчас. Он по-прежнему не работает, он просто создает файл, в нем ничего нет, даже в начале списка. Что я делаю не так? – BumbleBee

+0

Удалил ли файл между запусками, этот код запускается только тогда, когда файл не существует. – JimW

+0

Да, удалял его каждый раз перед тестированием – BumbleBee

Смежные вопросы