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

Sponge: Будущее Bukkit и Minecraft моддинга в целом

Тема в разделе "Sponge", создана пользователем ql_Nik_lp, 10 сен 2014.

  1. Larin

    Larin Старожил Пользователь

    Баллы:
    103
    Код:
    import java.net.URL;
    
    URL jarConfigFile = this.getClass().getResource("defaultConfig.conf");
    ConfigurationLoader<CommentedConfigurationNode> loader =
      HoconConfigurationLoader.builder().setURL(jarConfigFile).build();
    
     
  2. Хостинг MineCraft
    <
  3. Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    Выдает NullPointerException..
    Код:
    @Listener()
        public void onGameStartedServer(GameStartedServerEvent event) {
            try {
                createConfigs();
                URL ruConf = this.getClass().getResource("langs/ru_RU.conf");
                URL enConf = this.getClass().getResource("langs/en_US.conf");
                ConfigurationLoader<CommentedConfigurationNode> ruConfLoader =
                        HoconConfigurationLoader.builder().setURL(ruConf).build();
                ruConfLoader.load(); //NPE
                ConfigurationLoader<CommentedConfigurationNode> enConfLoader =
                        HoconConfigurationLoader.builder().setURL(enConf).build();
                enConfLoader.load();
                activateMySQL();
                activateVariables();
                registerListeners();
                registerCommands();
                logger.info("Successfully enabled");
            } catch (Exception e) {
                catchException(e);
            }
        }
    [​IMG]
    [​IMG]
    [​IMG]
    [​IMG]
     
  4. Larin

    Larin Старожил Пользователь

    Баллы:
    103
    getResourcce() возвращает путь до класса, у которого вызван этот метод.
    В этом случае путь должен быть таким:
    Код:
    ua.gwm.sponge_plugin.mcnevendaar.langs.en_US/ru_RU.conf
     
  5. Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    Попытался вывести на экран URL, не смог, тоже NPE, попытался создать просто new Url("langs/ru_RU.conf")
    тоже не вышло, MalformedURLException..
     
  6. alexandrage

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

    Баллы:
    173
    Skype:
    alexandr0116
    Ну так и есть. Пропиши путь вида /ua/gwm/sponge_plugin/mcnevendaar/langs.en_US/ru_RU.conf
     
  7. Larin

    Larin Старожил Пользователь

    Баллы:
    103
    Ты когда getResource вызываешь, путь берётся относительно класса, у которого ты вызвал этот метод. Если перед langs добавишь "/", то по идее должно работать, либо файлы с языками кладешь в этот пакет:
    Код:
    ua.gwm.sponge_plugin.mcnevendaar.langs
    Этот пакет должен быть в папке ресурсов, иначе не скопируется в jar архив.
     
  8. Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    Код:
    URL ruConf = new URL("/ua/gwm/sponge_plugin/mcnevendaar/langs.ru_RU.conf");
    URL enConf = new URL("/ua/gwm/sponge_plugin/mcnevendaar/langs.en_US.conf");
    
    
    URL ruConf = new URL("/ua/gwm/sponge_plugin/mcnevendaar/langs/ru_RU.conf");
    URL enConf = new URL("/ua/gwm/sponge_plugin/mcnevendaar/langs/en_US.conf");
    
    URL ruConf = this.getClass().getResource("/ua/gwm/sponge_plugin/mcnevendaar/langs.ru_RU.conf");
    URL enConf = this.getClass().getResource("/ua/gwm/sponge_plugin/mcnevendaar/langs.en_US.conf");
    
    URL ruConf = this.getClass().getResource("/ua/gwm/sponge_plugin/mcnevendaar/langs/ru_RU.conf");
    URL enConf = this.getClass().getResource("/ua/gwm/sponge_plugin/mcnevendaar/langs/en_US.conf");
    Пробовал все это, либо NPE, либо MalforedURLE..
    Как надо то?(
     
  9. Larin

    Larin Старожил Пользователь

    Баллы:
    103
    Первые 4 варианта - идиотизм. Перечитай еще раз то, что я написал, либо иди книги по java читать.
     
  10. Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    Он итак в джарнике..
     
  11. Larin

    Larin Старожил Пользователь

    Баллы:
    103
    Я тебе ****ь в 3 раз говорю, файл должен быть там, где лежит class файл, у которого ты вызвал getResource![DOUBLEPOST=1464533455,1464533045][/DOUBLEPOST]
    Да у него файл лежит в /langs, а класс у которого берёт ресурс лежит в пакете, getResource ищет относительно класса и нихрена не находит, я ему уже сказал, либо "/" в начале аргумента, либо папку langs в пакет, где класс находится кидает. Они ничего из этого не уяснил.
     
  12. Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    Да, до меня упорно не доходит в начале ЧЕГО мне надо добавить "/"??...
    [​IMG]
     
  13. Larin

    Larin Старожил Пользователь

    Баллы:
    103
    Смотри, напиши так:
    Код:
    URL ruConf = this.getClass().getResource("/langs/ru_RU.conf");
    А в папку
    Код:
    resources
    Закидываешь папку
    Код:
    langs
    С конфигами.

    Боже, ребят, читайте больше книг, не будет таких вопросов. Иногда складывается ощущение, что вы не умеете писать на Java, только пишете плагины, а если что-то отличается от шаблонного действия - ступор.
     
  14. Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    langs у меня итак в папке resources (я же скидывал скрин), а так - попробую..
     
  15. Larin

    Larin Старожил Пользователь

    Баллы:
    103
  16. Larin

    Larin Старожил Пользователь

    Баллы:
    103
    Ты "/" в начале ставил.
     
  17. alexandrage

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

    Баллы:
    173
    Skype:
    alexandr0116
    Подвох прост.
    getResource("/langs/ru_RU.conf"); Абсолютный от корня папки программы или архива.
    getResource("langs/ru_RU.conf"); Относительный от класса.
     
  18. Sambon_

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

    Баллы:
    88
    Skype:
    morbla_kun
    Имя в Minecraft:
    Satael
    Пиши тогда )
     
  19. Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    Кароче мне надоело писать нормально, я решил плюнуть на всех и написать говнокодом, но так как он зароботал, на все остальное пофиг :D
    Код:
        public Pair<ConfigurationLoader<CommentedConfigurationNode>, ConfigurationNode> activateConfig(String path) throws IOException {
            path = "/" + path;
    
            String[] parts = path.split("/");
            String configName = parts[parts.length-1];
    
            new File(new File("").getAbsolutePath() + "\\mods\\ИМЯ_ТВОЕГО_ПЛАГИНА-CONFIGS").mkdirs();
    
            File configFile = new File(new File("").getAbsolutePath() + "\\mods\\ИМЯ_ТВОЕГО_ПЛАГИНА-CONFIGS\\" + configName);
            if (!configFile.exists()) {
                configFile.createNewFile();
                URL configDefaultsURL = this.getClass().getResource(path);
                ConfigurationLoader<CommentedConfigurationNode> configDefaultsLoader =
                        HoconConfigurationLoader.builder().setURL(configDefaultsURL).build();
                ConfigurationNode defaultsNode = configDefaultsLoader.load();
                ConfigurationLoader<CommentedConfigurationNode> configLoader =
                        HoconConfigurationLoader.builder().setFile(configFile).build();
                ConfigurationNode configNode = configLoader.load();
                configNode.mergeValuesFrom(defaultsNode);
                configLoader.save(configNode);
                return new Pair(configLoader, configNode);
            } else {
                ConfigurationLoader<CommentedConfigurationNode> configLoader =
                        HoconConfigurationLoader.builder().setFile(configFile).build();
                ConfigurationNode configNode = configLoader.load();
                configLoader.save(configNode);
                return new Pair(configLoader, configNode);
            }
         }
    
     
  20. alexandrage

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

    Баллы:
    173
    Skype:
    alexandr0116
    Долпаебы не лечатся, это правда.
     
  21. InterWall

    InterWall Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    InterWall

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