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

Fenix78563

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
Blc_Dragon
Доброго времени суток, форумчане (всех с нг). Я опять где то накосячил

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

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

метод юзаю такой
Java:
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 это объявлено так:
Java:
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() это выглядит так

Java:
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 Да я тот человек, который кодит в восемь(да не мск) утра первого января, т.к. мне в кайф
 
Не работает, в этом случае нулл 100% (он и есть) ибо разные экземпляры lang.

И так то почему null будет, я тупо закидываю поля в lang а потом беру их значение. boolean переменная же не нул, она спокойно работает
 
Lang lang = new Lang();
lang.setLanguage(YamlConfiguration.loadConfiguration(corlang));
lang.setDefault(false);

Java:
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 lang = new Lang();
lang.setLanguage(YamlConfiguration.loadConfiguration(corlang));
lang.setDefault(false);

Java:
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());
        }
    }
я уже сделал, естественно там был нул поскольку взять тот файл конфига не представляется возможным, ибо это другие классы, а передавать его в каждый класс это тупо
 
Не работает, в этом случае нулл 100% (он и есть) ибо разные экземпляры lang.

И так то почему null будет, я тупо закидываю поля в lang а потом беру их значение. boolean переменная же не нул, она спокойно работает
А с чего ей быть нулл? У boolean 2 состояния, фалс или труе.
 
кажись разобрался, тут логическая ловушка.

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

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

Спасибо
 
Назад
Верх