Вопрос @Getter ломает чтение информации из конфига

TRUEC0DER

Пользователь
Сообщения
213
Решения
3
Веб-сайт
github.com
Один единственный @Getter ломает мне чтение информации из конфига (Вылезает ошибка java.lang.NullPointerException: Cannot invoke "org.bukkit.configuration.file.FileConfiguration.getString(String)" because "this.config" is null), а без него работает не так, как нужно (Просто вылезает ошибка при попытке взаимодействия с базой) (Мне нужно управлять базой вне основного класса, и методом гугла и изучения чужих плагинов я додумался до такого варианта).

Основной класс:
Java:
@Getter // Геттер, из-за которого всё не работает
public final class TestPlugin extends JavaPlugin {
    Logger log = Logger.getLogger("Minecraft");
    FileConfiguration config = getConfig();;

    @Getter
    public static TestPlugin instance;
    private MongoClient mongoClient;
    private MongoDatabase mongoDatabase;
    private MongoCollection<Document> mongoCollection;

    @Override
    public void onEnable() {
        instance = this;
        saveDefaultConfig();
        connect();
        this.getCommand("testplugin").setExecutor(new CommandCode());
        // Plugin startup logic
        log.info(config.getString("messages.onLoadedPlugin"));
    }

    @Override
    public void onDisable() {
        // Plugin shutdown logic
        log.info(config.getString("messages.onUnloadedPlugin"));
    }

    public void connect() {
        String dbUri = config.getString("mongodb.database.uri");
        String dbName = config.getString("mongodb.database.name");
        String dbCollection = config.getString("mongodb.database.collection");

        mongoClient = new MongoClient(new MongoClientURI(dbUri));
        mongoDatabase = mongoClient.getDatabase(dbName);
        mongoCollection = mongoDatabase.getCollection(dbCollection);

        log.info(config.getString("messages.onLoadedDatabase"));
    }

Класс команды:

Java:
public class CommandCode implements CommandExecutor {
    FileConfiguration config = TestPlugin.getInstance().getConfig();
    private final MongoCollection<Document> mongo = TestPlugin.getInstance().getMongoCollection();

    // This method is called, when somebody uses our command
    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        if (sender instanceof Player) {
            Player player = (Player) sender;

            Document user = new Document("user", "Nickname");
            mongo.insertOne(user);

            player.sendMessage("Я работаю");
        }
        return true;
    }
}
 
Разве это должно быть не в onEnable?
Вообще, все переменные надо инициализировать в конструкторах, на моменте запуска (в методе main, если программа или в методе onEnable, если плагин, или что-либо иное, если используются другие приколюхи-финтифлюшки)
 
Разве это должно быть не в onEnable?
Вообще, все переменные надо инициализировать в конструкторах, на моменте запуска (в методе main, если программа или в методе onEnable, если плагин, или что-либо иное, если используются другие приколюхи-финтифлюшки)
Переместил, вроде заработало, но разве по несколько раз инициализировать одну и ту же переменную, но в разных методах считается хорошей практикой?
 
по несколько раз инициализировать одну и ту же переменную
А зачем так делать?
Getter же используется. Инициализировать в каком-то классе, потом из него и получать при необходимости.
 
Назад
Сверху Снизу