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

Помогите Очередной Null

Discussion in 'Разработка плагинов для новичков' started by Fenix78563, Jan 1, 2017.

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

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

    Trophy Points:
    76
    Имя в Minecraft:
    Blc_Dragon
    Доброго времени суток, форумчане (всех с нг). Я опять где то накосячил

    Пытаюсь припилить нормальную локализацию.

    есть некий enum - список фраз и дефолт значение.

    метод юзаю такой
    Code:
    private Phrases(String def){
            if (Lang.useDefault){
                PhraseStr = def;
            }else {
                Bukkit.getConsoleSender().sendMessage(this.toString());
                if (Lang.lang == null){
                    Bukkit.getConsoleSender().sendMessage("Null at lang"); // методом этих [s]сраных[/s] проверок выясняется что null именно тут
                }
                PhraseStr=Lang.lang.getString(this.toString());
            }
        }
    В классе Lang это объявлено так:
    Code:
    public static YamlConfiguration lang;
        public static boolean useDefault = false;
      
        public static void setLanguage(YamlConfiguration langconfig){
            lang = langconfig;
        }
        public static void setDefault(boolean b){
            useDefault = b;
        }
    И в главном классе в onEnable() это выглядит так

    Code:
    File corlang = new File(plugin.getDataFolder() + File.separator + "lang" + File.separator + plugin.getConfig().getString("lang") + ".yml");
            if (!corlang.exists()) {
                Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "Can't find lang file " + ChatColor.GOLD + corlang.getName());
                Bukkit.getConsoleSender().sendMessage(ChatColor.GREEN + "Using default lang file");
                corlang = new File(plugin.getDataFolder() + File.separator + "lang" + File.separator + "en_US" + ".yml");
            }
            if (isCurrentLangFile(corlang)){
                Lang.setLanguage(YamlConfiguration.loadConfiguration(corlang));
                Lang.setDefault(false);
            }
    Файл не null, тут получается что даже метод проверки на валидность пашет.
    А поле lang вылезает в нулл, хотя булен спокойно устанавливается.

    P.S Да я тот человек, который кодит в восемь(да не мск) утра первого января, т.к. мне в кайф
     
  2. Хостинг MineCraft
    <
  3. Автор темы
    Fenix78563

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

    Trophy Points:
    76
    Имя в Minecraft:
    Blc_Dragon
    Не работает, в этом случае нулл 100% (он и есть) ибо разные экземпляры lang.

    И так то почему null будет, я тупо закидываю поля в lang а потом беру их значение. boolean переменная же не нул, она спокойно работает
     
  4. alexandrage

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

    Trophy Points:
    173
    Skype:
    alexandr0116
    Lang lang = new Lang();
    lang.setLanguage(YamlConfiguration.loadConfiguration(corlang));
    lang.setDefault(false);

    Code:
    private Phrases(String def){
            if (lang.useDefault){
                PhraseStr = def;
            }else {
                Bukkit.getConsoleSender().sendMessage(this.toString());
                if (lang.lang == null){
                    Bukkit.getConsoleSender().sendMessage("Null at lang"); // методом этих [s]сраных[/s] проверок выясняется что null именно тут
                }
                PhraseStr=Lang.lang.getString(this.toString());
            }
        }
     
  5. Автор темы
    Fenix78563

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

    Trophy Points:
    76
    Имя в Minecraft:
    Blc_Dragon
    я уже сделал, естественно там был нул поскольку взять тот файл конфига не представляется возможным, ибо это другие классы, а передавать его в каждый класс это тупо
     
  6. alexandrage

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

    Trophy Points:
    173
    Skype:
    alexandr0116
    А с чего ей быть нулл? У boolean 2 состояния, фалс или труе.
     
  7. Автор темы
    Fenix78563

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

    Trophy Points:
    76
    Имя в Minecraft:
    Blc_Dragon
    а, ну да я же ее инициализирую
     
  8. alexandrage

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

    Trophy Points:
    173
    Skype:
    alexandr0116
    Да в любом случае булев имеет только 2 состояния, 3тьего недано.
     
  9. Автор темы
    Fenix78563

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

    Trophy Points:
    76
    Имя в Minecraft:
    Blc_Dragon
    кажись разобрался, тут логическая ловушка.

    isCurrentLangFile(corlang);
    Этот метод опирается на getKeys, containsAll (Phrases) , и выполняется ДО установки lang, а фразы обращаются к lang, который еще не установлен

    починил отдельным воидом, нулл отъехал.

    Спасибо
     

Share This Page