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

Помогите Условие создания файла, который находится в Jar файле

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

  1. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Кк, ВК в помощь ;)
     
  2. Хостинг MineCraft
    <
  3. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Тебе дали решение, но ты даже не даёшь код, чтобы понять в чём проблема.
    И передавай ссылку на главный класс плагина, а не инстанс этот. Прям вот чую, что твой инстанс == null.
     
  4. Dymeth

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

    Баллы:
    76
    Я, вот, не понимаю, что тут сложного?
    Использую примерно такой универсальный метод.
    Поле Main.plugin - JavaPlugin - аналог твоего API.instance(), я думаю. Проверь, чтобы null не был.
    Код:
    public static FileConfiguration loadYaml(String path) {
        if (!path.endsWith(".yml"))
           path += ".yml"; //Для использования обычными юзерми и просто для удобства
        File file = new File(Main.plugin.getDataFolder(), path); //Файл в папке твоего плагина
        if(file.isDirectory())
            file.delete(); //Удаляем, если это папка
        if (!file.exists()) {
            try {
                Main.plugin.saveResource(path, false); //Создаём, если файла нет
            } catch (Exception e) { //Может возникнуть в случае отсутствия ресурса в джарнике или при недостаточности прав
                Main.plugin.getLogger().log(Level.SEVERE, "Не удалось сохранить ресурс " + path);
                e.printStackTrace();
                return null;
            }
        }
        return YamlConfiguration.loadConfiguration(file); //Парсит содержимое в удобный объект
    }
     
  5. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Считай независимая версия твоей поделки.
    Код:
    public static final FileConfiguration loadYaml(JavaPlugin instance, String path) {
        //Проверяем что нам подсунули как плагин.
        if (instance == null) {
            throw new IllegalArgumentException("Instance of the plugin is null!");
        }
    
        //Так же проверяем путь на null и пустоту.
        if (path == null || path.equals("")) {
            throw new IllegalArgumentException("Path can not be null or empty!");
        }
    
        //Для использования обычными юзерми и просто для удобства
        if (!path.endsWith(".yml")) {
            path += ".yml";
        }
    
        //Файл в рабочей папке твоего плагина
        File file = new File(instance.getDataFolder(), path);
    
        //Удаляем файл, если это папка
        if (file.isDirectory()) {
            file.delete();
        }
    
        //Создаём файл, если его нет
        if (!file.exists()) {
            try {
                instance.saveResource(path, false);
            } catch (Exception e) {
                //Может возникнуть в случае отсутствия ресурса в джарнике или при недостаточности прав
                instance.getLogger().log(Level.SEVERE, "Не удалось сохранить ресурс " + path, e);
                return null;
            }
        }
        //Парсит содержимое в удобный объект
        return YamlConfiguration.loadConfiguration(file);
    }
     
  6. Dymeth

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

    Баллы:
    76
    Ну, в принципе полезно, да. У меня-то так, поскольку не использую сторонние плагины и не использую кастомные названия файлов. Ну, и throw'ить не люблю.
     
  7. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Зря конечно. Самое простое (но время жрёт не дурно) действие для того, чтобы показать пользователю об ошибке.
    Я такую конструкцию залепил для того, чтобы кинуть в какой ниб класс Utils и забыть как он устроен в принципе. Накидать доков сверху метода, и пущай пылится.
     
    Последнее редактирование: 14 авг 2016
  8. Dymeth

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

    Баллы:
    76
    Обожаю ловить приходы сразу нескольких Exception'ов из-за одной ошибки. :D А если серьёзно, то такие конструкции оставляю там, где уверен в отсутствии ошибок. На стороне вызова банально никогда не приходится в trycatch заключать. Красиво же. Правда IDE на потенциальный null намекает, ну да ладно... На самом деле, конечно, это не очень правильно. По канонам надо делать так, как ты и предложил. Но в конце концов я для паблика практически ничего не пилю, так что позволительно, наверно.
    Да понятное дело. По той же причине, что для паблика не делаю, меня устраивает и нынешний вариант. Как раз утилитой и валяется без движения. А ТС'у тем более такого не надо. Даже я-то лишнего скинул, в общем. ;)
     
  9. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Ну так то да - обернуть saveResource и loadConfiguration на 7+ строк та ещё затея :D
    В принципе да - лучше создавать само исключение, выбрасывать его в лог и возвращать null - так оно не должно разъехаться по всему коду. Но возвращая null мы как бэ намекаем, что этот самый null мы после вызова этого метода как то обработаем. (Слишком много null в одном сообщении)
     
  10. Dymeth

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

    Баллы:
    76
    Ну, это моя самооуверенность... В других же случаях нулл обрабатывается, ясное дело.
     
  11. IcedwinterZ

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

    Баллы:
    76
    Имя в Minecraft:
    IcedwinterZ
    Проблема еще актуальна?
     
  12. Exception_Prototype

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

    Баллы:
    46
    Это позволит копировать из jar в папку с конфигами плагина.
    true - копировать с заменой.
    Далее получаешь нужный тебе конфиг как обычно.
    Код:
    saveResource("ConfigTradeItems.yml", true);
    saveResource("NameMaterials.yml", true);
    
     
  13. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Если без сторонних библиотек, то getResourceAsStream и FileOutputStream тебе в помощь.
     
  14. DonDays

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

    Баллы:
    96
    Имя в Minecraft:
    DonDays
    Смотришь на дату?
     
  15. Exception_Prototype

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

    Баллы:
    46
    Этот человек создал тему с вопросом, на которую я дал ответ, после чего он её закрыл ничего не написав.
    Ну я смотрю такой и думаю вроде же тема была открыта и отправил, а отказывается не в ту, пока увидел, дык он уже отблагодарил. Значит не зря отправил. :D
     
  16. Fenix78563

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

    Баллы:
    76
    Имя в Minecraft:
    Blc_Dragon
    А потом я их удалил. Вообще хотел удалить только одно с "у меня этот код закидывает ошибку" по причине "я криворукий дибил", но случайно удалил и второе
     
  17. DonDays

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

    Баллы:
    96
    Имя в Minecraft:
    DonDays
    Ну, если по логике, раз он не нашел решение он бы апнул тему.
     

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