1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Как проверить есть ли запись в конфиге и как записать в конфиг

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

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

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

    Баллы:
    76
    Здраствуйте. Незнаю в чём проблема, но наверное я туплю гдето. Как проверит есть ли в конфиге запись:
    Пример:
    Код:
    players:
      Player1: 1
      Player2: 0
    
    Как узнать есть ли там Player3 или Player2 (плагин сам их туда должен добавлять).
    Ну мы проверили и получили что нет такой записи. Как дальше? Чёт
    Код:
    getConfig().set("players."+p.getName(), "0");
    
    не работает. Выдаёт NullPointerExeption
     
  2. _MasterCapeXD_

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

    Баллы:
    76
    Имя в Minecraft:
    _MasterCapeXD_
    config.isString("Player3") -> возвращает boolean
     
  3. AtomicScience

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

    Баллы:
    76
    Имя в Minecraft:
    AtomicScience
    Точно на этой строчке выдает ошибку?
     
  4. _helper_

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

    Баллы:
    76
  5. Автор темы
    Andoroid

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

    Баллы:
    76
    Да
     
  6. Автор темы
    Andoroid

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

    Баллы:
    76
    Если сделаю так
    Код:
    if(j.getConfig().isInt("players." + warned.getName())) {
        warndOld = j.getConfig().getInt("players." + warned.getName());
    } else {
        warndOld = 0;
        j.getConfig().set("players." + warned.getName(), "0");
        j.saveConfig();
    }
    
    Выдаёт NullPointerExeption на первой ствоке ( if(j.getConfig().isInt("players." + warned.getName())) { )
     
  7. Автор темы
    Andoroid

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

    Баллы:
    76
    Тут нету ответа :)
     
  8. Автор темы
    Andoroid

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

    Баллы:
    76
    Кто-то знает ответ? Up
     
  9. HunterGaming

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

    Баллы:
    96
    Имя в Minecraft:
    sqdFendy
    ошибку кинь...
     
  10. Автор темы
    Andoroid

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

    Баллы:
    76
    Код:
    [18:46:11] [Server thread/INFO]: Andoroid issued server command: /warn
    [18:46:15] [Server thread/INFO]: Andoroid issued server command: /warn 123321 123321
    [18:46:15] [Server thread/ERROR]: null
    org.bukkit.command.CommandException: Unhandled exception executing command 'warn' in plugin ArtekWarns v1.0
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[spigot.jar:git-Spigot-4af49dc-c5e9a16]
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141) ~[spigot.jar:git-Spigot-4af49dc-c5e9a16]
        at org.bukkit.craftbukkit.v1_9_R2.CraftServer.dispatchCommand(CraftServer.java:645) ~[spigot.jar:git-Spigot-4af49dc-c5e9a16]
        at net.minecraft.server.v1_9_R2.PlayerConnection.handleCommand(PlayerConnection.java:1349) [spigot.jar:git-Spigot-4af49dc-c5e9a16]
        at net.minecraft.server.v1_9_R2.PlayerConnection.a(PlayerConnection.java:1184) [spigot.jar:git-Spigot-4af49dc-c5e9a16]
        at net.minecraft.server.v1_9_R2.PacketPlayInChat.a(PacketPlayInChat.java:45) [spigot.jar:git-Spigot-4af49dc-c5e9a16]
        at net.minecraft.server.v1_9_R2.PacketPlayInChat.a(PacketPlayInChat.java:1) [spigot.jar:git-Spigot-4af49dc-c5e9a16]
        at net.minecraft.server.v1_9_R2.PlayerConnectionUtils$1.run(SourceFile:13) [spigot.jar:git-Spigot-4af49dc-c5e9a16]
        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:?]
        at java.base/java.util.concurrent.FutureTask.run(Unknown Source) [?:?]
        at net.minecraft.server.v1_9_R2.SystemUtils.a(SourceFile:45) [spigot.jar:git-Spigot-4af49dc-c5e9a16]
        at net.minecraft.server.v1_9_R2.MinecraftServer.D(MinecraftServer.java:726) [spigot.jar:git-Spigot-4af49dc-c5e9a16]
        at net.minecraft.server.v1_9_R2.DedicatedServer.D(DedicatedServer.java:399) [spigot.jar:git-Spigot-4af49dc-c5e9a16]
        at net.minecraft.server.v1_9_R2.MinecraftServer.C(MinecraftServer.java:665) [spigot.jar:git-Spigot-4af49dc-c5e9a16]
        at net.minecraft.server.v1_9_R2.MinecraftServer.run(MinecraftServer.java:564) [spigot.jar:git-Spigot-4af49dc-c5e9a16]
        at java.base/java.lang.Thread.run(Unknown Source) [?:?]
    Caused by: java.lang.NullPointerException
        at ua.Andoroid.ArtekWorld.Cmd.onCommand(Cmd.java:37) ~[?:?]
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[spigot.jar:git-Spigot-4af49dc-c5e9a16]
        ... 15 more
    
     
  11. HunterGaming

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

    Баллы:
    96
    Имя в Minecraft:
    sqdFendy
    У тебя главный класс null скорее всего...
     
  12. HunterGaming

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

    Баллы:
    96
    Имя в Minecraft:
    sqdFendy
    либо конфиг
     
  13. AtomicScience

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

    Баллы:
    76
    Имя в Minecraft:
    AtomicScience
    Проведи проверку на p == null
     
  14. Автор темы
    Andoroid

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

    Баллы:
    76
    Блин, снова забыл. Потом сделаю розкажу что да как.
     
  15. Автор темы
    Andoroid

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

    Баллы:
    76
    Ничего не изменилось. Если использую
    Код:
    if(j.getConfig().isInt("players." + args[0])) {
        warndOld = j.getConfig().getInt("players."+args[0]);
    } else {
        warndOld = 0;
        j.getConfig().set("players." + args[0], 0);
        j.saveConfig();
    }
    
    То NullPointerExeption на If
    А есть я попытаюсь сделать костыль и сделаю так
    Код:
    try{
        warndOld = j.getConfig().getInt("players."+args[0]);
    }catch (NullPointerException e){
        warndOld = 0;
        j.getConfig().set("players." + args[0], 0);
        j.saveConfig();
    }
    
    То NullPointerExeption на j.getConfig().set("players." + args[0], 0);
     
  16. Cool_boy

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

    Баллы:
    96
    Имя в Minecraft:
    prettydude
    Где присвоение j? Дай код
     
  17. Автор темы
    Andoroid

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

    Баллы:
    76
    Код:
    package ua.Andoroid.ArtekWorld;
    
    import org.bukkit.Bukkit;
    import org.bukkit.command.ConsoleCommandSender;
    import org.bukkit.plugin.java.JavaPlugin;
    
    import java.io.File;
    
    public class Main extends JavaPlugin{
        public static ConsoleCommandSender console = Bukkit.getConsoleSender();
        public static Main j;
        public void onEnable(){
            getCommand("warn").setExecutor(new Cmd());
            getLogger().info("Startind ArtekWarns");
            File config = new File(getDataFolder() + File.separator  + "config.yml");
            if(!config.exists()){
                getConfig().options().copyDefaults(true);
                saveDefaultConfig();
            }
    
        }
        public void onDisable(){
    
        }
    }
    
    Это Main

    Это Cmd.
    Код:
    package ua.Andoroid.ArtekWorld;
    
    import org.apache.commons.lang.ObjectUtils;
    import org.bukkit.Bukkit;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandExecutor;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    
    import java.util.concurrent.ExecutionException;
    
    public class Cmd implements CommandExecutor {
        private Main j = Main.j;
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){
    
            Player p = (Player) sender;
            if(cmd.getName().equalsIgnoreCase("warn")){
                if(p.hasPermission("artekwarns.use") || p.isOp()) {
                    if (args.length > 1) {
                        String reason = "";
                        for (int i = 1; i < args.length; i++) {
                            reason = reason + args[i] + " ";
                        }
                        Player warned = Bukkit.getPlayer(args[0]);
                        int warndOld = 0;
                        if(warned == null){
                            p.sendMessage("§cИгрок не на сервере!");
                            return false;
                        }
                        if(j.getConfig().isInt("players." + args[0])) {
                            warndOld = j.getConfig().getInt("players."+args[0]);
                        } else {
                            warndOld = 0;
                            j.getConfig().set("players." + args[0], 0);
                            j.saveConfig();
                       }
                        int warnNew = warndOld+1;
                        Bukkit.broadcastMessage("§f[§6§lArtek§f§lWarns§f] §cИгрок §6"+p.getName()+" §cвыдал придуприждение игроку §6"+args[0]+" §c.");
                        Bukkit.broadcastMessage("§f[§6§lArtek§f§lWarns§f] §cПо причине §6"+reason+" §c.");
                        Bukkit.broadcastMessage("§f[§6§lArtek§f§lWarns§f] §cСейчас у игрока §6"+args[0]+" §cесть §6"+Integer.toString(warnNew)+" §cпридуприждений!");
                        if(warnNew < j.getConfig().getInt("settings.maxWarnsStepOne")){
                            j.getConfig().set("players"+args[0],warnNew);
                            j.saveConfig();
                        } else if(warnNew == j.getConfig().getInt("settings.maxWarnsStepOne")){
                            Bukkit.getServer().dispatchCommand(Main.console, "pex user "+args[0]+" add -custombans.ban");
                            Bukkit.getServer().dispatchCommand(Main.console, "pex user "+args[0]+" add -custombans.tempban");
                            Bukkit.getServer().dispatchCommand(Main.console, "pex user "+args[0]+" add -custombans.kick");
                            Bukkit.getServer().dispatchCommand(Main.console, "pex user "+args[0]+" add -custombans.tempmute");
                            Bukkit.getServer().dispatchCommand(Main.console, "pex user "+args[0]+" add -custombans.mute");
                        } else if(warnNew > j.getConfig().getInt("settings.maxWarnsStepOne") && warnNew < j.getConfig().getInt("settings.maxWarnsStepTwo")){
                            j.getConfig().set("players"+args[0],warnNew);
                            j.saveConfig();
                        } else if(warnNew == j.getConfig().getInt("settings.maxWarnsStepTwo")) {
                            Bukkit.getServer().dispatchCommand(Main.console, "pex user "+args[0]+" group set "+j.getConfig().getString("settings.defaultGroup"));
                        } else if(warnNew >j.getConfig().getInt("settings.maxWarnsStepTwo")){
                            Bukkit.getServer().dispatchCommand(Main.console, "ban "+args[0]+" "+Integer.toString(j.getConfig().getInt("settings.maxWarnsStepTwo"))+" warns");
                        }
                        return true;
                    } else {
                        p.sendMessage("§cПравильное использование /warn [ник] [причина]");
                        return false;
                    }
                }
            }
            return true;
        }
    }
    
     
  18. Cool_boy

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

    Баллы:
    96
    Имя в Minecraft:
    prettydude
    j = this в onEnable, не?
     
  19. Автор темы
    Andoroid

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

    Баллы:
    76
    Не, просто в Main
     
  20. Cool_boy

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

    Баллы:
    96
    Имя в Minecraft:
    prettydude
    Ты j в Main хоть что-то присваиваешь? j=this;
     
Статус темы:
Закрыта.

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