ошибка (spigot) null при выполнении команды «/ g create»

#java #plugins #minecraft

#java #Плагины #Minecraft

Вопрос:

Недавно у меня возникла проблема при написании плагина для моего сервера. Я столкнулся с ошибкой, которая никогда не менялась в каждой форме команды, это ошибка :

 [21:23:32 ERROR]: null
org.bukkit.command.CommandException: Unhandled exception executing command 'g' in plugin TheNewCore v0.135.0
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:47) ~[patched_1.16.5.jar:git-Paper-457]
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:159) ~[patched_1.16.5.jar:git-Paper-457]
        at org.bukkit.craftbukkit.v1_16_R3.CraftServer.dispatchCommand(CraftServer.java:807) ~[patched_1.16.5.jar:git-Paper-457]
        at net.minecraft.server.v1_16_R3.PlayerConnection.handleCommand(PlayerConnection.java:2021) ~[patched_1.16.5.jar:git-Paper-457]
        at net.minecraft.server.v1_16_R3.PlayerConnection.c(PlayerConnection.java:1832) ~[patched_1.16.5.jar:git-Paper-457]
        at net.minecraft.server.v1_16_R3.PlayerConnection.a(PlayerConnection.java:1785) ~[patched_1.16.5.jar:git-Paper-457]
        at net.minecraft.server.v1_16_R3.PacketPlayInChat.a(PacketPlayInChat.java:47) ~[patched_1.16.5.jar:git-Paper-457]
        at net.minecraft.server.v1_16_R3.PacketPlayInChat.a(PacketPlayInChat.java:5) ~[patched_1.16.5.jar:git-Paper-457]
        at net.minecraft.server.v1_16_R3.PlayerConnectionUtils.lambda$ensureMainThread$1(PlayerConnectionUtils.java:23) ~[patched_1.16.5.jar:git-Paper-457]
        at net.minecraft.server.v1_16_R3.TickTask.run(SourceFile:18) ~[patched_1.16.5.jar:git-Paper-457]
        at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.executeTask(IAsyncTaskHandler.java:136) ~[patched_1.16.5.jar:git-Paper-457]
        at net.minecraft.server.v1_16_R3.IAsyncTaskHandlerReentrant.executeTask(SourceFile:23) ~[patched_1.16.5.jar:git-Paper-457]
        at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.executeNext(IAsyncTaskHandler.java:109) ~[patched_1.16.5.jar:git-Paper-457]
        at net.minecraft.server.v1_16_R3.MinecraftServer.bb(MinecraftServer.java:1133) ~[patched_1.16.5.jar:git-Paper-457]
        at net.minecraft.server.v1_16_R3.MinecraftServer.executeNext(MinecraftServer.java:1126) ~[patched_1.16.5.jar:git-Paper-457]
        at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.executeAll(IAsyncTaskHandler.java:95) ~[patched_1.16.5.jar:git-Paper-457]
        at net.minecraft.server.v1_16_R3.MinecraftServer.a(MinecraftServer.java:1262) ~[patched_1.16.5.jar:git-Paper-457]
        at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:997) ~[patched_1.16.5.jar:git-Paper-457]
        at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$a$0(MinecraftServer.java:174) ~[patched_1.16.5.jar:git-Paper-457]
        at java.lang.Thread.run(Thread.java:832) [?:?]
Caused by: java.lang.IllegalArgumentException: Cannot create path without a section
        at org.apache.commons.lang.Validate.notNull(Validate.java:192) ~[patched_1.16.5.jar:git-Paper-457]
        at org.bukkit.configuration.MemorySection.createPath(MemorySection.java:922) ~[patched_1.16.5.jar:git-Paper-457]
        at org.bukkit.configuration.MemorySection.createPath(MemorySection.java:905) ~[patched_1.16.5.jar:git-Paper-457]
        at me.Walitam.TheNewCore.TheNewCore.onCommand(TheNewCore.java:55) ~[?:?]
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:45) ~[patched_1.16.5.jar:git-Paper-457]
        ... 19 more
 

и я не знаю, как это исправить. Вот код команды :

 @Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
    if (label.equalsIgnoreCase("g")) {
        if (sender instanceof Player) {
            if (args.length == 0) {
                // INSTANCIATION OF THE PLAYER
                Player player = (Player) sender;

                // SHOWING THE MENU TO THE PLAYER
                player.sendMessage(ChatColor.DARK_GREEN   ""   ChatColor.BOLD   ""   ChatColor.ITALIC   "L'aide des Guildes de TheNewCore, bienvenue !");
                player.sendMessage(ChatColor.GRAY   ""   ChatColor.BOLD   "------------------------------");
                player.sendMessage(ChatColor.GREEN   "/g "   ChatColor.WHITE   ":"   ChatColor.GREEN   " montre ce menu d'aide.");
                player.sendMessage(ChatColor.GRAY   ""   ChatColor.BOLD   "------------------------------");
                player.sendMessage(ChatColor.GREEN   "/g create <gname> <gpword> "   ChatColor.WHITE   ":"   ChatColor.GREEN   " crée une guilde avec le nom et le mot de passe entrés.");
                player.sendMessage(ChatColor.GRAY   ""   ChatColor.BOLD   "------------------------------");
                player.sendMessage(ChatColor.GREEN   "/g delete <gname> <gpword> "   ChatColor.WHITE   ":"   ChatColor.GREEN   " supprime une guilde avec le nom et le mot de passe entrés.");
                player.sendMessage(ChatColor.GRAY   ""   ChatColor.BOLD   "------------------------------");
                player.sendMessage(ChatColor.GREEN   "/g add <pname> "   ChatColor.WHITE   ":"   ChatColor.GREEN   " ajoute un joueur avec le nom entré dans votre guilde.");
                player.sendMessage(ChatColor.GRAY   ""   ChatColor.BOLD   "------------------------------");
                player.sendMessage(ChatColor.GREEN   "/g remove <pname> "   ChatColor.WHITE   ":"   ChatColor.GREEN   " retire un joueur du nom entré de votre guilde.");
            }

            if (args[0].equalsIgnoreCase("create")) {
                Player player = (Player) sender;
                if (args.length <= 2) {
                    player.sendMessage(ChatColor.RED   "Il manque des arguments :/");
                } else {
                    String creatorplayername = player.getName();
                    String guildname = args[1];
                    String guildpassword = args[2];

                    getConfig().createPath(getConfig().getConfigurationSection("guilds"), guildname);
                    ConfigurationSection guildid = getConfig().getConfigurationSection("guilds."   guildname);
                    getConfig().createPath(guildid, "creator");
                    getConfig().set("creator", creatorplayername);
                    getConfig().createPath(guildid, "password");
                    ConfigurationSection passwordsection = getConfig().getConfigurationSection("guilds."   guildpassword);
                    getConfig().set("guilds.password", guildpassword);

                }

                if (args[0].equalsIgnoreCase("delete")) {
                    sender.sendMessage(ChatColor.RED   "You just executed the "   ChatColor.WHITE   "/g delete"   ChatColor.RED   " command !");
                }

                if (args[0].equalsIgnoreCase("add")) {
                    sender.sendMessage(ChatColor.RED   "You just executed the "   ChatColor.WHITE   "/g add"   ChatColor.RED   " command !");
                }

                if (args[0].equalsIgnoreCase("remove")) {
                    sender.sendMessage(ChatColor.RED   "You just executed the "   ChatColor.WHITE   "/g remove"   ChatColor.RED   " command !");
                }

            } else {
                // IF YOU NO PLAYER
                sender.sendMessage("[TheNewCore] Vous n'êtes pas un joueur, vous n'avez donc pas accès aux guildes ;)");
            }
            return true;

        }
    }
    return true;
}
 

Ответ №1:

Вам не нужно использовать методы для создания путей или аналогичные. Если вы хотите сохранить данные в файле YML в следующем формате:

 guilds:
  my_guild_name:
    creator: "Im_Fran"
    password: "MyPassword123"
 

Используйте следующий код

 getConfig().set("guilds.my_guild_name.creator", "Im_Fran"); // This will store the creator
getConfig().set("guilds.my_guild_name.password", "MyPassword123"); // This will store the password
 

Я предлагаю вам проверить ссылку на API конфигурации Bukkit