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

Его можно прямо из джарника считывать.
А можно пожалуйста с этого места подробнее?
Я читал конечно документацию (на английском) но из-за того что там все на английском все что я смог это сделать стандартный конфиг 😁
Как можно из джарника считать какой-то HOCON конфиг?
 
А можно пожалуйста с этого места подробнее?
Я читал конечно документацию (на английском) но из-за того что там все на английском все что я смог это сделать стандартный конфиг 😁
Как можно из джарника считать какой-то HOCON конфиг?
Java:
import java.net.URL;

URL jarConfigFile = this.getClass().getResource("defaultConfig.conf");
ConfigurationLoader<CommentedConfigurationNode> loader =
  HoconConfigurationLoader.builder().setURL(jarConfigFile).build();
 
Java:
import java.net.URL;

URL jarConfigFile = this.getClass().getResource("defaultConfig.conf");
ConfigurationLoader<CommentedConfigurationNode> loader =
  HoconConfigurationLoader.builder().setURL(jarConfigFile).build();
Выдает NullPointerException..
Java:
@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);
        }
    }
3435943f28a6.jpg

a7a58768d9ab.jpg

d9e25e7d0ab7.jpg

1a9e58371d14.jpg
 
Выдает NullPointerException..
Java:
@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);
        }
    }
3435943f28a6.jpg

a7a58768d9ab.jpg

d9e25e7d0ab7.jpg

1a9e58371d14.jpg
getResourcce() возвращает путь до класса, у которого вызван этот метод.
В этом случае путь должен быть таким:
Код:
ua.gwm.sponge_plugin.mcnevendaar.langs.en_US/ru_RU.conf
 
getResourcce() возвращает путь до класса, у которого вызван этот метод.
В этом случае путь должен быть таким:
Код:
ua.gwm.sponge_plugin.mcnevendaar.langs.en_US/ru_RU.conf
Попытался вывести на экран URL, не смог, тоже NPE, попытался создать просто new Url("langs/ru_RU.conf")
тоже не вышло, MalformedURLException..
 
Попытался вывести на экран URL, не смог, тоже NPE, попытался создать просто new Url("langs/ru_RU.conf")
тоже не вышло, MalformedURLException..
Ты когда getResource вызываешь, путь берётся относительно класса, у которого ты вызвал этот метод. Если перед langs добавишь "/", то по идее должно работать, либо файлы с языками кладешь в этот пакет:
Код:
ua.gwm.sponge_plugin.mcnevendaar.langs
Этот пакет должен быть в папке ресурсов, иначе не скопируется в jar архив.
 
Ну так и есть. Пропиши путь вида /ua/gwm/sponge_plugin/mcnevendaar/langs.en_US/ru_RU.conf

Java:
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..
Как надо то?(
 
Java:
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..
Как надо то?(
Первые 4 варианта - идиотизм. Перечитай еще раз то, что я написал, либо иди книги по java читать.
 
Пути проверь, файл точно там? Наверняка в корень его засунул, а прописываешь хрень.
 
Он итак в джарнике..
Я тебе ****ь в 3 раз говорю, файл должен быть там, где лежит class файл, у которого ты вызвал getResource!
Если ты дергаешь класс из другого джарника, используй рефлексию.

Class c = Class.forName("packagename.classname"); Любой класс из sponge.jar.
URL url = c.getResource("/ua/gwm/sponge_plugin/mcnevendaar/langs/ru_RU.conf");
Да у него файл лежит в /langs, а класс у которого берёт ресурс лежит в пакете, getResource ищет относительно класса и нихрена не находит, я ему уже сказал, либо "/" в начале аргумента, либо папку langs в пакет, где класс находится кидает. Они ничего из этого не уяснил.
 
Я тебе ****ь в 3 раз говорю, файл должен быть там, где лежит class файл, у которого ты вызвал getResource!

Да у него файл лежит в /langs, а класс у которого берёт ресурс лежит в пакете, getResource ищет относительно класса и нихрена не находит, я ему уже сказал, либо "/" в начале аргумента, либо папку langs в пакет, где класс находится кидает. Они ничего из этого не уяснил.
Да, до меня упорно не доходит в начале ЧЕГО мне надо добавить "/"??...
973280e6f374.png
 
Да, до меня упорно не доходит в начале ЧЕГО мне надо добавить "/"??...
973280e6f374.png
Смотри, напиши так:
Java:
URL ruConf = this.getClass().getResource("/langs/ru_RU.conf");
А в папку
Код:
resources
Закидываешь папку
Код:
langs
С конфигами.

Боже, ребят, читайте больше книг, не будет таких вопросов. Иногда складывается ощущение, что вы не умеете писать на Java, только пишете плагины, а если что-то отличается от шаблонного действия - ступор.
 
Смотри, напиши так:
Java:
URL ruConf = this.getClass().getResource("/langs/ru_RU.conf");
А в папку
Код:
resources
Закидываешь папку
Код:
langs
С конфигами.

Боже, ребят, читайте больше книг, не будет таких вопросов. Иногда складывается ощущение, что вы не умеете писать на Java, только пишете плагины, а если что-то отличается от шаблонного действия - ступор.
langs у меня итак в папке resources (я же скидывал скрин), а так - попробую..
 
разве? всегда использовал абсолютный и брал файл из корня, в чём подвох?
Подвох прост.
getResource("/langs/ru_RU.conf"); Абсолютный от корня папки программы или архива.
getResource("langs/ru_RU.conf"); Относительный от класса.
 
Назад
Верх Низ