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

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем Lisenochek, 16 авг 2016.

Статус темы:
Закрыта.
  1. Автор темы
    Lisenochek

    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]
    Все перепробовал, поэтому прошу помощи у вас.
    Код конфига:

    Код:
    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()));
                }
            }
        }
    }
    

    Да, знаю, что я постоянно задаю вопросы, но я в конфигах полный дуб.
     
  2. Хостинг MineCraft
    <
  3. Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    Учимся читать вместе с Лисеночком.
    at com.realistic.api.API.onEnable(API.java:38) ~[?:?]
     
  4. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    cd.onEnable(); - подрубаю метод в классе.
     
  5. Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Значит ссылка cd равна null, без альтернатив.
     
  6. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Мне уже указали на ошибку. Исправил, но появилась другая ошибка:

    Код:
    [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]
     
  7. CoolBoy

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

    Баллы:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    at com.realistic.config.configData.onDisable(configData.java:74) ~[?:?]
    at com.realistic.api.API.onDisable(API.java:66)
     
  8. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Да, я знаю, но ошибки не нахожу.

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

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Трудно даётся обучение чтению при помощи текста? :)[DOUBLEPOST=1471347308,1471347269][/DOUBLEPOST]
    Какая из этих строк под номером 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);
     
    Последнее редактирование: 16 авг 2016
  10. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Первые два варианта отпадают. Ведь plugin и ml - инстансы ГК и MinecraftList
    Третий вариант плохо понял.

    Не понял.
     
  11. Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Карта содержит пары ключ-значение (Map.Entry<K, V>). Ключи -- строки, значения -- какие-то твои объекты.
    Уверен ли ты, что ты не записал под каким-нибудь значением ключа нулевое значение?
    Тогда карта при итерировании по ключам ключ-то вернёт, а значение, получаемое по нему, будет null, и ты словишь NPE.
     
  12. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Да не особо уверен. Это код из темы, который дал мне человек (не помню уже его ник), код работал.
     
  13. Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    А зачем нужна проверка:
    Plugin checkPlugin = Bukkit.getPluginManager().getPlugin("Realistic");
    if (checkPlugin != null) { ... }
    ?
    Ведь Realistic -- это же и есть твой плагин?
     
  14. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Да, это проверка, что если сервер выключится - плагин сохранит ключи в конфиг.[DOUBLEPOST=1471352799,1471349853][/DOUBLEPOST]Если честно, я не знаю, как решить проблему, ибо я уже все перепробовал.
     
  15. Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Ничего ты не перепробовал и выводов из перепробованного не делаешь.

    Смотрим:
    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-у для дальнейшего ковыряния.
     
  16. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Предлагаешь поставить cd.plugin = this; в ГК?[DOUBLEPOST=1471361766,1471360910][/DOUBLEPOST]
    А как тогда например указать ml без plugin через конструктор, который ты мне в прошлой теме показал?
     
  17. Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Я предлагаю тебе убедиться, что plugin в этом месте не равно null, а указывает на твой инстанс главного класса.
    Ты можешь сам убедиться в этом, без помощи? В коде и/или опытным путём в логах.
     
  18. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Может быть я понял, но как тогда находить ml без plugin, как в прошлой теме?[DOUBLEPOST=1471362693,1471362253][/DOUBLEPOST]
    Ну. Я это понял, что-то не так что ли? Никак не могу понять
     
  19. Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Да не надо делать нормально, сделай как-нибудь, хотя бы даже и через
    , хотя мне казалось оно у тебя и так написано.
     
  20. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Было написано, но не работало все равно. Крашей не было
     
  21. Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Ну так в первую очередь и нужно избавлять от крашей, а уже потом от изъянов логики.
     
Статус темы:
Закрыта.

Поделиться этой страницей