Помогите Не работает сохранение ключей хеша в конфиг

Статус
Закрыто для дальнейших ответов.

Lisenochek

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
Lisenochek
Всем опять привет. Столкнулся с проблемой. Не сохраняются ключи хешла в конфиг. Выдает краш:
Код:
[13:40:30 ERROR]: Error occurred while enabling Realistic v1.4 beta (Is it up to date?)
java.lang.NullPointerException
        at com.realistic.api.API.onEnable(API.java:38) ~[?:?]
        at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:321) ~[server.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:340) [server.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:405) [server.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.loadPlugin(CraftServer.java:357) [server.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.enablePlugins(CraftServer.java:317) [server.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.reload(CraftServer.java:741) [server.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.Bukkit.reload(Bukkit.java:535) [server.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:25) [server.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141) [server.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchCommand(CraftServer.java:641) [server.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchServerCommand(CraftServer.java:627) [server.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.DedicatedServer.aO(DedicatedServer.java:412) [server.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:375) [server.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:654) [server.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:557) [server.jar:git-Spigot-db6de12-18fbb24]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_101]

Все перепробовал, поэтому прошу помощи у вас.
Код конфига:

JavaScript:
package com.realistic.config;

import java.io.File;
import java.io.IOException;

import org.bukkit.Bukkit;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.plugin.Plugin;

import com.realistic.api.API;

public class configData {

    private static API plugin;

    public configData(API main) {
        this.plugin = main;
    }

    public static File dataFolder = new File("plugins/Realistic/", "data.yml");
    public static FileConfiguration dataConfig = YamlConfiguration.loadConfiguration(dataFolder);

    public void onEnable() {

        if (!dataFolder.exists()) {

            try {
                dataFolder.createNewFile();

                if (dataConfig.isConfigurationSection("Disease_Cold")) {
                    for (String a : dataConfig.getConfigurationSection("Disease_Cold").getKeys(false)) {
                        plugin.ml.Disease_Cold.put(a, dataConfig.getBoolean("Disease_Cold." + a));
                        dataConfig.set("Disease_Cold." + a, null);
                    }
                }

                if (dataConfig.isConfigurationSection("Disease_Pneumonia")) {
                    for (String a : dataConfig.getConfigurationSection("Disease_Pneumonia").getKeys(false)) {
                        plugin.ml.Disease_Pneumonia.put(a, dataConfig.getBoolean("Disease_Pneumonia." + a));
                        dataConfig.set("Disease_Pneumonia." + a, null);
                    }
                }

                if (dataConfig.isConfigurationSection("bloodingPlayers")) {
                    for (String a : dataConfig.getConfigurationSection("bloodingPlayers").getKeys(false)) {
                        plugin.ml.bloodingPlayers.put(a, dataConfig.getBoolean("bloodingPlayers." + a));
                        dataConfig.set("bloodingPlayers." + a, null);
                    }
                }

                if (dataConfig.isConfigurationSection("Broken_Bones")) {
                    for (String a : dataConfig.getConfigurationSection("Broken_Bones").getKeys(false)) {
                        plugin.ml.Broken_Bones.put(a, dataConfig.getBoolean("Broken_Bones." + a));
                        dataConfig.set("Broken_Bones." + a, null);
                    }
                }
                try {
                    dataConfig.save(dataFolder);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    public static void onDisable() {

        Plugin checkPlugin = Bukkit.getPluginManager().getPlugin("Realistic");

        if (checkPlugin != null) {
            for (String pn : plugin.ml.Disease_Cold.keySet()) {
                dataConfig.set("Disease_Cold." + pn, plugin.ml.Disease_Cold.get(pn.toString()));
            }

            for (String pn : plugin.ml.bloodingPlayers.keySet()) {
                dataConfig.set("bloodingPlayers." + pn, plugin.ml.bloodingPlayers.get(pn.toString()));
            }

            for (String pn : plugin.ml.Broken_Bones.keySet()) {
                dataConfig.set("Broken_Bones." + pn, plugin.ml.Broken_Bones.get(pn.toString()));
            }

            for (String pn : plugin.ml.Disease_Pneumonia.keySet()) {
                dataConfig.set("Disease_Pneumonia." + pn, plugin.ml.Disease_Pneumonia.get(pn.toString()));
            }
        }
    }
}


Да, знаю, что я постоянно задаю вопросы, но я в конфигах полный дуб.
 
Учимся читать вместе с Лисеночком.
at com.realistic.api.API.onEnable(API.java:38) ~[?:?]
 
Значит ссылка cd равна null, без альтернатив.
 
Значит ссылка cd равна null, без альтернатив.
Мне уже указали на ошибку. Исправил, но появилась другая ошибка:

JavaScript:
[13:55:56 ERROR]: Error occurred while disabling Realistic v1.4 beta (Is it up to date?)
java.lang.NullPointerException
        at com.realistic.config.configData.onDisable(configData.java:74) ~[?:?]
        at com.realistic.api.API.onDisable(API.java:66) ~[?:?]
        at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:323) ~[server.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.plugin.java.JavaPluginLoader.disablePlugin(JavaPluginLoader.java:364) [server.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.plugin.SimplePluginManager.disablePlugin(SimplePluginManager.java:424) [server.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.plugin.SimplePluginManager.disablePlugins(SimplePluginManager.java:417) [server.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.plugin.SimplePluginManager.clearPlugins(SimplePluginManager.java:458) [server.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.reload(CraftServer.java:708) [server.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.Bukkit.reload(Bukkit.java:535) [server.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:25) [server.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141) [server.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchCommand(CraftServer.java:641) [server.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchServerCommand(CraftServer.java:627) [server.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.DedicatedServer.aO(DedicatedServer.java:412) [server.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:375) [server.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:654) [server.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:557) [server.jar:git-Spigot-db6de12-18fbb24]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_101]
 
at com.realistic.config.configData.onDisable(configData.java:74) ~[?:?]
at com.realistic.api.API.onDisable(API.java:66)
 
at com.realistic.config.configData.onDisable(configData.java:74) ~[?:?]
at com.realistic.api.API.onDisable(API.java:66)
Да, я знаю, но ошибки не нахожу.

for (String pn : plugin.ml.Disease_Cold.keySet()) {
dataConfig.set("Disease_Cold." + pn, plugin.ml.Disease_Cold.get(pn.toString()));
}
 
Учимся читать вместе с Лисеночком.
Трудно даётся обучение чтению при помощи текста? :)
Да, я знаю, но ошибки не нахожу.
Какая из этих строк под номером 74?
Варианты на первой приведённой тобой строке:
  • plugin = null
  • plugin.ml = null
  • plugin.ml.Disease_Cold = null
Варианты на второй:
  • plugin.ml.Disease_Cold.get(pn.toString()) выдаёт null.
    И непонятно, зачем делать строке (String pn ...) приведение к строке? (pn.toString())? Если у тебя Disease_Cold имеет строковые ключи, вот и передавай саму pn как ключ. Хотя javadoc говорит, что pn.toString() вернёт саму pn.
    Будем считать эту строку аналогичной plugin.ml.Disease_Cold.get(pn);
 
Последнее редактирование:
Трудно даётся обучение чтению при помощи текста? :)
Какая из этих строк под номером 74?
Варианты:
plugin = null
plugin.ml = null
plugin.ml.Disease_Cold.get(pn.toString()) выдаёт null.
и зачем делать строке (String pn ...) приведение к строке? (pn.toString())?!?.
Хотя, javadoc говорит, что pn.toString() вернёт саму pn.
Если у тебя Disease_Cold имеет строковые ключи, вот и передавай саму pn как ключ.
Первые два варианта отпадают. Ведь plugin и ml - инстансы ГК и MinecraftList
Третий вариант плохо понял.

Если у тебя Disease_Cold имеет строковые ключи, вот и передавай саму pn как ключ.
Не понял.
 
Третий вариант плохо понял.
Карта содержит пары ключ-значение (Map.Entry<K, V>). Ключи -- строки, значения -- какие-то твои объекты.
Уверен ли ты, что ты не записал под каким-нибудь значением ключа нулевое значение?
Тогда карта при итерировании по ключам ключ-то вернёт, а значение, получаемое по нему, будет null, и ты словишь NPE.
 
Карта содержит пары ключ-значение (Map.Entry<K, V>). Ключи -- строки, значения -- какие-то твои объекты.
Уверен ли ты, что ты не записал под каким-нибудь значением ключа нулевое значение?
Тогда карта при итерировании по ключам ключ-то вернёт, а значение, получаемое по нему, будет null, и ты словишь NPE.
Да не особо уверен. Это код из темы, который дал мне человек (не помню уже его ник), код работал.
 
А зачем нужна проверка:
Plugin checkPlugin = Bukkit.getPluginManager().getPlugin("Realistic");
if (checkPlugin != null) { ... }
?
Ведь Realistic -- это же и есть твой плагин?
 
А зачем нужна проверка:
Plugin checkPlugin = Bukkit.getPluginManager().getPlugin("Realistic");
if (checkPlugin != null) { ... }
?
Ведь Realistic -- это же и есть твой плагин?
Да, это проверка, что если сервер выключится - плагин сохранит ключи в конфиг.
Если честно, я не знаю, как решить проблему, ибо я уже все перепробовал.
 
Если честно, я не знаю, как решить проблему, ибо я уже все перепробовал.
Ничего ты не перепробовал и выводов из перепробованного не делаешь.

Смотрим:
upload_2016-8-16_21-31-53.png
Обращение по ссылке, равной null, в строке:
upload_2016-8-16_21-32-50.png
У тебя либо plugin = null, либо plugin.ml = null, либо plugin.ml.Disease_Cold = null.

Начнём с конца:
upload_2016-8-16_21-35-27.png
Если код не менялся с прошлой темы, то поле Disease_Cold не могло никуда пропасть, оно есть.

Далее проверим сам plugin:
upload_2016-8-16_21-37-57.png
Поскольку и поле статичное, и все методы, ТСу нет никакого смысла никогда когда-либо вызывать конструктор.
Интересует момент, выставляет ли он его где-либо на стороне? Например, так:
> config.plugin = this;
Здесь этой строки нет.

Поскольку в соседних темах кода, который устанавливает у плагина поле ml тоже не нашёл, считаю это пинком @Lisenochek-у для дальнейшего ковыряния.
 
Ничего ты не перепробовал и выводов из перепробованного не делаешь.

Смотрим:
Посмотреть вложение 42559
Обращение по ссылке, равной null, в строке:
Посмотреть вложение 42560
У тебя либо plugin = null, либо plugin.ml = null, либо plugin.ml.Disease_Cold = null.

Начнём с конца:
Посмотреть вложение 42561
Если код не менялся с прошлой темы, то поле Disease_Cold не могло никуда пропасть, оно есть.

Далее проверим сам plugin:
Посмотреть вложение 42562
Поскольку и поле статичное, и все методы, ТСу нет никакого смысла никогда когда-либо вызывать конструктор.
Интересует момент, выставляет ли он его где-либо на стороне? Например, так:
> config.plugin = this;
Здесь этой строки нет.

Поскольку в соседних темах кода, который устанавливает у плагина поле ml тоже не нашёл, считаю это пинком @Lisenochek-у для дальнейшего ковыряния.
Предлагаешь поставить cd.plugin = this; в ГК?
Поскольку и поле статичное, и все методы, ТСу нет никакого смысла никогда когда-либо вызывать конструктор.
А как тогда например указать ml без plugin через конструктор, который ты мне в прошлой теме показал?
 
Предлагаешь поставить cd.plugin = this; в ГК?
Я предлагаю тебе убедиться, что plugin в этом месте не равно null, а указывает на твой инстанс главного класса.
Ты можешь сам убедиться в этом, без помощи? В коде и/или опытным путём в логах.
 
Я предлагаю тебе убедиться, что plugin в этом месте не равно null, а указывает на твой инстанс главного класса.
Ты можешь сам убедиться в этом, без помощи? В коде и/или опытным путём в логах.
Может быть я понял, но как тогда находить ml без plugin, как в прошлой теме?
Я предлагаю тебе убедиться, что plugin в этом месте не равно null, а указывает на твой инстанс главного класса.
Ты можешь сам убедиться в этом, без помощи? В коде и/или опытным путём в логах.
Ну. Я это понял, что-то не так что ли? Никак не могу понять
 
А как тогда например указать ml без plugin через конструктор, который ты мне в прошлой теме показал?
Может быть я понял, но как тогда находить ml без plugin, как в прошлой теме?
Да не надо делать нормально, сделай как-нибудь, хотя бы даже и через
, хотя мне казалось оно у тебя и так написано.
 
Да не надо делать нормально, сделай как-нибудь, хотя бы даже и через
, хотя мне казалось оно у тебя и так написано.
Было написано, но не работало все равно. Крашей не было
 
Ну так в первую очередь и нужно избавлять от крашей, а уже потом от изъянов логики.
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх