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

Помогите почему выдаёт ошибку null?

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

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

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

    Баллы:
    76
    Имя в Minecraft:
    ItsWay
    Пишу плагин, выдаёт такую ошибку
    [19:19:24 ERROR]: null
    org.bukkit.command.CommandException: Unhandled exception executing command 'rtp' in plugin Project001 v1.0-SNAPSHOT
    at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[patched_1.12.2.jar:git-Paper-1620]
    at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:152) ~[patched_1.12.2.jar:git-Paper-1620]
    at org.bukkit.craftbukkit.v1_12_R1.CraftServer.dispatchCommand(CraftServer.java:685) ~[patched_1.12.2.jar:git-Paper-1620]
    at net.minecraft.server.v1_12_R1.PlayerConnection.handleCommand(PlayerConnection.java:1492) ~[patched_1.12.2.jar:git-Paper-1620]
    at net.minecraft.server.v1_12_R1.PlayerConnection.a(PlayerConnection.java:1297) ~[patched_1.12.2.jar:git-Paper-1620]
    at net.minecraft.server.v1_12_R1.PacketPlayInChat.a(PacketPlayInChat.java:45) ~[patched_1.12.2.jar:git-Paper-1620]
    at net.minecraft.server.v1_12_R1.PacketPlayInChat.a(PacketPlayInChat.java:5) ~[patched_1.12.2.jar:git-Paper-1620]
    at net.minecraft.server.v1_12_R1.PlayerConnectionUtils.lambda$ensureMainThread$0(PlayerConnectionUtils.java:14) ~[patched_1.12.2.jar:git-Paper-1620]
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) ~[?:1.8.0_351]
    at java.util.concurrent.FutureTask.run(Unknown Source) ~[?:1.8.0_351]
    at net.minecraft.server.v1_12_R1.SystemUtils.a(SourceFile:46) ~[patched_1.12.2.jar:git-Paper-1620]
    at net.minecraft.server.v1_12_R1.MinecraftServer.D(MinecraftServer.java:850) ~[patched_1.12.2.jar:git-Paper-1620]
    at net.minecraft.server.v1_12_R1.DedicatedServer.D(DedicatedServer.java:423) ~[patched_1.12.2.jar:git-Paper-1620]
    at net.minecraft.server.v1_12_R1.MinecraftServer.C(MinecraftServer.java:774) ~[patched_1.12.2.jar:git-Paper-1620]
    at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:666) ~[patched_1.12.2.jar:git-Paper-1620]
    at java.lang.Thread.run(Unknown Source) [?:1.8.0_351]
    Caused by: java.lang.NullPointerException
    at melars.projects.Project001.Cooldown.getCooldown(Cooldown.java:48) ~[?:?]
    at melars.projects.Project001.CommandEx.onCommand(CommandEx.java:30) ~[?:?]
    at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[patched_1.12.2.jar:git-Paper-1620]
    ... 15 more
    >
    Такой метод использую, на эту строку указывает ошибка:
    return plugin.getConfig().getInt("rtp.cooldown.default");

    В конфиге написано вот так:
    Код:
    key: ///
    rtp:
      radius:
        '1': 300
        '2': 600
        '3': 1000
        '4': 2500
        '5': 4500
      cooldown:
        default: 65
        silver: 50
        baron: 30
        bourgeois: 15
        emperor: 8
        msgCd: '&6Успокойся, на это действие стоит ограничение, ещё &a%time% &6подожди..'
      barrier-limit: 10000
    
     
  2. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    plugin.getConfig() не может вернуть нулл
    plugin.getConfig().getInt() тоже не возвращает нулл

    Поэтому единственный вариант - у тебя сам plugin нулл

    Убедись, что ошибка у тебя действительно на этой строке. Если так, то разбирайся, почему plugin нулл
     
  3. Автор темы
    ItsWay

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

    Баллы:
    76
    Имя в Minecraft:
    ItsWay
    Не знаю.... У меня ошибка вылезает когда я пытаюсь получить через plugin.getConfig что либо... Если я вызываю this.getConfig в главном классе без проблем это происходит. Может я неправильно вызываю plugin?
    Вызов plugin:

    classN classn;, пробовал static..
     
  4. erger

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

    Баллы:
    66
    Имя в Minecraft:
    FeatureTeam
    покажи больше кода. конфиг создался в папке ?
     
  5. erger

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

    Баллы:
    66
    Имя в Minecraft:
    FeatureTeam
    если не принципиально то могу подкинуть другой код для конфига
     
  6. erger

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

    Баллы:
    66
    Имя в Minecraft:
    FeatureTeam
    Таким образом можешь делать любые конфиги для своих нужд.

    Код:
    FileConfiguration cAuth;
    cAuth = YamlConfiguration.loadConfiguration(new File(getDataFolder() + File.separator + "Auth.yml"));
    потом просто
    cAuth.getInt....
     
  7. Автор темы
    ItsWay

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

    Баллы:
    76
    Имя в Minecraft:
    ItsWay
    Код:
    package melars.projects.Project001;
    
    import org.bukkit.ChatColor;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandExecutor;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.plugin.Plugin;
    
    
    public class CommandEx implements CommandExecutor {
    
        static Plugin plugin;
    
        static Plugin getPlugin() {
            return plugin;
        }
    
        @Override
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
            if (sender instanceof Player) {
                RandomTeleport rt = new RandomTeleport();
                Cooldown cd = new Cooldown();
    
                Player plr = (Player) sender;
                Cooldown cooldown = new Cooldown();
                if(cd.PassedT(plr) == true) {
                    Long l = Long.valueOf(20000);
                    Integer barrierl = plugin.getConfig().getInt("rtp.barrier-limit");
                    Long cooldowN = Long.valueOf(cd.getCooldown(plr) * 1000);
                    classN.cooldown.put(plr.getUniqueId(), cooldowN + System.currentTimeMillis());
                    rt.randomteleportplayer(plr, barrierl, -(barrierl), 100);
                    plr.sendTitle(ChatColor.GREEN + "РТП", ChatColor.GRAY + "Вы были перемещены.");
                    return true;
                } else if(cd.PassedT(plr) == false){
                    plr.sendMessage(plugin.getConfig().getString("rtp.cooldown.msgCd").replace("&", "§").replace("%time%", cd.LastT(plr)));
                    return true;
                }
            } else if (!(sender instanceof Player)){
                return true;
            }
            return true;
        }
    }
    
     
  8. erger

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

    Баллы:
    66
    Имя в Minecraft:
    FeatureTeam
    у тебя plugin = null
     
  9. erger

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

    Баллы:
    66
    Имя в Minecraft:
    FeatureTeam
    ты про onEnable() не забыл ?
     
  10. Автор темы
    ItsWay

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

    Баллы:
    76
    Имя в Minecraft:
    ItsWay
    а что в нём? запускается без проблем
     
  11. Автор темы
    ItsWay

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

    Баллы:
    76
    Имя в Minecraft:
    ItsWay
    // Plugin startup lo
    this.getCommand("rtp").setExecutor(new CommandEx());
    config.options().copyDefaults(true);
    saveConfig();

    onEnable
     
  12. erger

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

    Баллы:
    66
    Имя в Minecraft:
    FeatureTeam
    у тебя plugin = null
     
  13. Автор темы
    ItsWay

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

    Баллы:
    76
    Имя в Minecraft:
    ItsWay
    таккк...?
     
  14. Автор темы
    ItsWay

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

    Баллы:
    76
    Имя в Minecraft:
    ItsWay
    Как тогда можно получить плагин по другому?
     
  15. erger

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

    Баллы:
    66
    Имя в Minecraft:
    FeatureTeam
    этого вроде достаточно
    Plugin plugin = this;
     
  16. Автор темы
    ItsWay

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

    Баллы:
    76
    Имя в Minecraft:
    ItsWay
    может
    ГлавныйКласс mainC = new ГлавныйКласс();
    Plugin plugin = mainC;
    ?
     
  17. erger

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

    Баллы:
    66
    Имя в Minecraft:
    FeatureTeam
    создай просто конфиг в главном классе и обращайся к нему из другого
     
  18. Автор темы
    ItsWay

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

    Баллы:
    76
    Имя в Minecraft:
    ItsWay
    Брат, смотри, я сделал

    private classN plugin; в других классах, и обращаюсь что б получить из него конфиг plugin.getConfig();

    А в главном классе я так создаю конфиг:

    this.getConfig().options().copyDefaults(true);
    saveConfig();

    Но ошибку всё равно выдаёт, я не понимаю что делаю неправильно...
     
  19. erger

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

    Баллы:
    66
    Имя в Minecraft:
    FeatureTeam
    upload_2023-12-23_16-34-18.png
    потом в нужном тебе месте
    ток в начале это засунь

    Код:
    this.getConfig().options().copyDefaults(true);
    saveConfig();
     
  20. OJIEKCAHDP

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

    Баллы:
    76
    Имя в Minecraft:
    OJIEKCAHDP
    Что за дичь тут начали советовать, а ведь шли правильно..
    Переменная plugin в твоём классе нулл. Её нужно задать из главного класса.


    Код:
    package melars.projects.Project001;
    
    import org.bukkit.ChatColor;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandExecutor;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.plugin.Plugin;
    
    
    public class CommandEx implements CommandExecutor {
    
        Plugin plugin;
    
        public CommandEx(Plugin plugin) {
            this.plugin = plugin;
    }
    
        @Override
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
            if (sender instanceof Player) {
                RandomTeleport rt = new RandomTeleport();
                Cooldown cd = new Cooldown();
    
                Player plr = (Player) sender;
                Cooldown cooldown = new Cooldown();
                if(cd.PassedT(plr) == true) {
                    Long l = Long.valueOf(20000);
                    Integer barrierl = plugin.getConfig().getInt("rtp.barrier-limit");
                    Long cooldowN = Long.valueOf(cd.getCooldown(plr) * 1000);
                    classN.cooldown.put(plr.getUniqueId(), cooldowN + System.currentTimeMillis());
                    rt.randomteleportplayer(plr, barrierl, -(barrierl), 100);
                    plr.sendTitle(ChatColor.GREEN + "РТП", ChatColor.GRAY + "Вы были перемещены.");
                    return true;
                } else if(cd.PassedT(plr) == false){
                    plr.sendMessage(plugin.getConfig().getString("rtp.cooldown.msgCd").replace("&", "§").replace("%time%", cd.LastT(plr)));
                    return true;
                }
            } else if (!(sender instanceof Player)){
                return true;
            }
            return true;
        }
    }
    В главном классе, там где регаешь команду, пишешь вместо new CommandEx() -> new CommandEx(this)
     
Статус темы:
Закрыта.

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