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

Помогите Что не так с кодом проверки файла на существование?

Тема в разделе "Разработка плагинов для новичков", создана пользователем MrTerf, 12 авг 2018.

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

    MrTerf Новичок Пользователь

    Баллы:
    11
    PHP:
        Main main; public JobEvents(Main main) { main this.main; }

        @
    EventHandler
        
    public void onPlayerJoin(PlayerJoinEvent e) {
            
    File conf = new File(main.getDataFolder() + File.separator "config.yml");
            if(
    conf.exists()) {
                
    Inventory jobsList Bukkit.createInventory(e.getPlayer(), 56"123");
                
    e.getPlayer().openInventory(jobsList);
            }
        }
    Самый стандартный код проверки, существует ли файл. Но записать файл в переменную не удаётся - кидает NullPointerException. Что не так? Версия - Spigot 1.12.2
     
  2. Mr Hosting
  3. Exception_Prototype

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

    Баллы:
    76
    Зачем вручную получать дефолтный конфиг?
    main#getConfig() для кого делали?
    Где вы такие туториалы берёте, что вас учат работать с эвентами не научив работать с конфигами(хотя бы дефолтными).
     
  4. kefavova

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

    Баллы:
    76
    Имя в Minecraft:
    kefa
    Такого файла не существует. И вообще пользуются так:
    Код:
        Main main; public JobEvents(Main main) { main = this.main; }
    
        @EventHandler
        public void onPlayerJoin(PlayerJoinEvent e) {
            File conf = new File(main.getDataFolder() + "config.yml");
            if(conf.exists()) {
                Inventory jobsList = Bukkit.createInventory(e.getPlayer(), 56, "123");
                e.getPlayer().openInventory(jobsList);
            }
        }
     
  5. Автор темы
    MrTerf

    MrTerf Новичок Пользователь

    Баллы:
    11
    Оффтоп. А код нужен для кастомных конфигов.
     
  6. Автор темы
    MrTerf

    MrTerf Новичок Пользователь

    Баллы:
    11
    Так мне и нужна проверка, есть ли файл (.exists)
     
  7. kefavova

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

    Баллы:
    76
    Имя в Minecraft:
    kefa
    Он не получишь конфиг, а NPE. Ему надо проверить существует он или нет.
     
  8. kefavova

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

    Баллы:
    76
    Имя в Minecraft:
    kefa
    Скинь Main, а дальше посмотрим
     
  9. Автор темы
    MrTerf

    MrTerf Новичок Пользователь

    Баллы:
    11
    import org.bukkit.Bukkit;
    import org.bukkit.plugin.java.JavaPlugin;

    public class Main extends JavaPlugin {

    public void onEnable() {
    // getCommand("job").setExecutor(new Job());
    Bukkit.getPluginManager().registerEvents(new JobEvents(this), this);
    }

    public void onDisable() {

    }
    }
     
  10. kefavova

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

    Баллы:
    76
    Имя в Minecraft:
    kefa
    Немного изменил. Main:
    Код:
    import org.bukkit.Bukkit;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class Main extends JavaPlugin {
    
    public void onEnable() {
    // 
    saveConfig();
    getCommand("job").setExecutor(new Job());
    Bukkit.getPluginManager().registerEvents(new JobEvents(this), this);
    }
    
    public void onDisable() {
    
       }
    }
     
  11. Автор темы
    MrTerf

    MrTerf Новичок Пользователь

    Баллы:
    11
    Я не собираюсь работать с config.yml, мне нужны именно кастомные. Или тут не только это изменено?
     
  12. Nikolai_Faint

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

    Баллы:
    96
    щас бы юзать onDisable когда он не нужен. (и давать такие полезные советы,ммм)
    В onEnable saveDefaultConfig();
    (Надеюсь записывать/брать/добавлять в кфг умеешь)
     
  13. Автор темы
    MrTerf

    MrTerf Новичок Пользователь

    Баллы:
    11
    Где то слыхал, что если юзать saveDefaultConfig(), то конфиг полностью принимает вид из плагина. Всё, что было изменено в конфиге, всё пропадёт. Так ли это?
     
  14. Nikolai_Faint

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

    Баллы:
    96
    Ясно, я хоть попытаюсь. saveDefaultConfig info
     
  15. Exception_Prototype

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

    Баллы:
    76
    Уважаемый, ты не написал, что тебе это надо для кастом конфигов.
    Я, не зная этого, указал на более правильное решение увидев config.yml.
    И, пожалуй тебе, я уже помогать не стану.
     
  16. Exception_Prototype

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

    Баллы:
    76
    сеператор кто ставить будет? Тогда так делай:
    PHP:
    File conf = new File(main.getDataFolder(), "config.yml");
     
  17. Nikolai_Faint

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

    Баллы:
    96
    Господи, он хочет сделать обычный config.yml, вот только не знает об элементарном. Пусть почитает доки.
     
  18. Nikolai_Faint

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

    Баллы:
    96
    Вот тебе пример кастома:
    PHP:
    //Путь
    package you.package.example.test;

    //Импорты, не столь обращай на них внимание
    import java.io.*
    import org.bukkit.*
    import org.bukkit.configuration.file.*;

    //Имя класса, а так же его тип
    public class Config {
     
       
    //Создаем и указываем файл
       
    File customFile = new File("customfolder/customfile.yml");
       
    //Присваиваем customFile свойства конфига (т.е грузим его как кфг)
       
    static customConfig YamlConfiguration.loadConfiguration(customFile);
       
    //Создавать конструктор для глупых, я буду статик
       //Статичный метод для того чтобы взять конфиг
       
    public static FileConfiguration getCustomConfig()
       {
        
    //Если мы используем метод он будет возвращать конфиг
         
    return customConfig;
       }

    }
    PHP:
    //Путь
    package you.package.example.test;

    //Импорты, не столь обращай на них внимание
    import static you.package.example.test.Config.*;

    //Имя класса, а так же его тип
    public class Listener {
      
    //Статичный метод который будем использовать если нужно создать конфиг
      
    public static void load()
      {
       
    //Если конфига не существует
        
    if (!customFile.exists())
        {
         
    //Обработка ошибок
           
    try {
          
    //Создаем файл
           
    customFile.createNewFile();
            } catch (
    IOException e) {
              
    //Выводим ошибку
               
    e.printStackTrace();
           }
      }
      
    //Статичный метод который будем использовать если нужно сохранить конфиг
      
    public static void save()
      {
       
    //Обработка ошибок
        
    try {
           
    //Сохраняем файл
           
    getCustomConfig().save(customFile);
       } catch (
    IOException ex) {
          
    //Выводим ошибку
           
    e.printStackTrace();
      }

    }
    PHP:
    //Путь
    package you.package.example.test;

    //Импорты, не столь обращай на них внимание
    import static you.package.example.test.Listener.*;

    //Имя класса, а так же его тип + Здесь мы унаследовали JavaPlugin. 
    public class Main extends JavaPlugin {

        @
    Override
        
    //Метод onEnable, используется при включении плагина.
        
    public void onEnable()
        {
           
    //Исполняем наш метод загрузки
            
    load();
        }

    }
     
    Последнее редактирование: 13 авг 2018
  19. Автор темы
    MrTerf

    MrTerf Новичок Пользователь

    Баллы:
    11
    С учётом всех ваших жалоб, мне нужен код, чтобы при записе в переменную файла не выкидывало ошибку.
     
  20. Автор темы
    MrTerf

    MrTerf Новичок Пользователь

    Баллы:
    11
    Я допёр. Как оказалось, нужно было юзать this.main = main (код первого сообщения), а никак не наоборот. Закрываю, спасибо всем.
     
Статус темы:
Закрыта.

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