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

Помогите Ошибка из-за ничего...

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

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

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

    Баллы:
    76
    Имя в Minecraft:
    DragOn4ik
    Hi. Вторая тема за сегодня(из-за моей криворукости).
    Получаю ошибку
    Код:
    2018-08-02 10:05:19 [SEVERE] null org.bukkit.command.CommandException: Unhandled exception executing command 'lift' in plugin EvilTroll v0.1     
    at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46)     
    at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:189)     
    at org.bukkit.craftbukkit.v1_5_R3.CraftServer.dispatchCommand(CraftServer.java:523)     
    at net.minecraft.server.v1_5_R3.PlayerConnection.handleCommand(PlayerConnection.java:971)     
    at net.minecraft.server.v1_5_R3.PlayerConnection.chat(PlayerConnection.java:889)     
    at net.minecraft.server.v1_5_R3.PlayerConnection.a(PlayerConnection.java:846)     
    at net.minecraft.server.v1_5_R3.Packet3Chat.handle(Packet3Chat.java:44)     
    at net.minecraft.server.v1_5_R3.NetworkManager.b(NetworkManager.java:292)     
    at net.minecraft.server.v1_5_R3.PlayerConnection.d(PlayerConnection.java:115)     
    at net.minecraft.server.v1_5_R3.ServerConnection.b(SourceFile:35)     
    at net.minecraft.server.v1_5_R3.DedicatedServerConnection.b(SourceFile:30)     
    at net.minecraft.server.v1_5_R3.MinecraftServer.r(MinecraftServer.java:581)     
    at net.minecraft.server.v1_5_R3.DedicatedServer.r(DedicatedServer.java:226)     
    at net.minecraft.server.v1_5_R3.MinecraftServer.q(MinecraftServer.java:477)     
    at net.minecraft.server.v1_5_R3.MinecraftServer.run(MinecraftServer.java:410)     
    at net.minecraft.server.v1_5_R3.ThreadServerApplication.run(SourceFile:573) 
    Caused by: java.lang.NullPointerException     
    at com.dragon4ik.eviltroll.CommandLift.onCommand(CommandLift.java:20)     
    at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44)     
    ... 15 more
    
    на этой строке кода
    Код:
    String nullMsg = plugin.getConfig().getString("lift.errorNull").replace("&", "\u00a7").replace("%player%", player.getName());
    
    What?!!!
    Проблема не в работе с конфигом, т.к. остальная работа с конфигом выполняется без ошибок!
    Из-за чего возникает эта ошибка???
    Конфиг:
    Код:
    lift:
      errorNull: "&c%player%, вы не указали игрока!"
    
     
  2. alexandrage

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

    Баллы:
    173
    npe на CommandLift.java:20 строчке
     
  3. Автор темы
    _MCMaster_

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

    Баллы:
    76
    Имя в Minecraft:
    DragOn4ik
    Я это знаю, я же написал на какой строке ошибка -
    Код:
    String nullMsg = plugin.getConfig().getString("lift.errorNull").replace("&", "\u00a7").replace("%player%", player.getName());
    
    Это 20-я строка
     
  4. Автор темы
    _MCMaster_

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

    Баллы:
    76
    Имя в Minecraft:
    DragOn4ik
  5. Reality_SC

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

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Пишите код, который проще отлаживать.
    FileConfiguration config = plugin.getConfig(); // null может быть тут
    String template = plugin.getConfig().getString("lift.errorNull"); // или тут.
    String playerName = player.getName(); // Или тут?!?
    String nullMsg = template.replace("&", "§").replace("%player%", playerName); // Если не упали раньше, уже шансов мало.
     
    Последнее редактирование: 2 авг 2018
  6. Cool_boy

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

    Баллы:
    96
    Имя в Minecraft:
    prettydude
    Summoned Cool_boy.
    Если уверен что игрок не null и что в конфиге есть точно такой же путь, тогда дебажь.
    Можно и каждый метод на новую строку отправлять

    Код:
    String nullMsg = plugin.getConfig()
    .getString("lift.errorNull")
    .replace("&", "\u00a7")
    .replace("%player%", player.getName());
    
    И лучше метод из ChatColor использовать для цветов
     
  7. thematdev

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

    Баллы:
    46
    Имя в Minecraft:
    thematdev
    Ты возможно берёшь строку из конфига до onEnable().
    Пример:

    PHP:
    public class Main extends JavaPlugin{
       
        public 
    FileConfiguration config;
        
    config getConfig(); //NPE
        
    String b config.getString("path"); //NPE
       
        
    public void onEnable() {
                 
    config getConfig(); //Нормально
                 
    String a config.getString("path");//Нормально

        
    }
    }
    В других классах, кроме инстанции плагина тоже может быть так. Ищи ошибку в обьявлении и получении.
     
  8. thematdev

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

    Баллы:
    46
    Имя в Minecraft:
    thematdev
    Код в студию.
     
  9. Klavy

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

    Баллы:
    66
    Код в студию, у тебя скорее всего инстанс null
     
  10. Автор темы
    _MCMaster_

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

    Баллы:
    76
    Имя в Minecraft:
    DragOn4ik
    Вот мой говнокод:
    Код:
    package com.dragon4ik.eviltroll;
    
    import org.bukkit.event.Listener;
    import org.bukkit.plugin.java.JavaPlugin;
    public class Main extends JavaPlugin implements Listener{
    public void onEnable() {
        getLogger().info("<DragOn4ik> My plugin is enabled! :)");
        saveDefaultConfig();
        getConfig().options().copyDefaults(true);
        getCommand("explokill").setExecutor(new CommandExplokill());
        getCommand("fakeop").setExecutor(new CommandFakeop());
        getCommand("hptroll").setExecutor(new CommandHptroll());
        getCommand("lift").setExecutor(new CommandLift());
    }
    public void onDisable() {
        getLogger().info("<DragOn4ik> My plugin is disabled! Good bye!");
        saveConfig();
    }
    }
    
    Код:
    package com.dragon4ik.eviltroll;
    
    import org.bukkit.Bukkit;
    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.util.Vector;
    
    public class CommandLift implements CommandExecutor{
    Main plugin;
    
        @Override
        public boolean onCommand(CommandSender sender, Command command, String label,
                String[] args) {
            if(command.getName().equalsIgnoreCase("lift")) {
                Player player = (Player)sender;
                if(args.length == 0) {
                    String nullMsg = plugin.getConfig().getString("lift.errorNull").replace("&", "\u00a7").replace("%player%", player.getName());
                    player.sendMessage(nullMsg);
                    return true;
                }
                if(Bukkit.getPlayerExact(args[0]) == null) {
                    String offlineMsg = plugin.getConfig().getString("lift.errorOffline").replace("&", "\u00a7").replace("%player%", player.getName()).replace("%victim%", args[0]);
                    player.sendMessage(offlineMsg);
                    return true;
                }
                if(player.hasPermission("evtroll.lift")) {
                    Player target = Bukkit.getPlayerExact(args[0]);
                    String message = plugin.getConfig().getString("lift.message").replace("&", "\u00a7").replace("%player%", player.getName()).replace("%victim%", target.getName());
                    boolean broadcast = plugin.getConfig().getBoolean("lift.broadcast");
                    String broadcastMsg = plugin.getConfig().getString("lift.broadcastMessage").replace("&", "\u00a7").replace("%player%", player.getName()).replace("%victim%", target.getName());
                    int velX = plugin.getConfig().getInt("lift.velocity.x");
                    int velY = plugin.getConfig().getInt("lift.velocity.y");
                    int velZ = plugin.getConfig().getInt("lift.velocity.z");
                    target.setVelocity(new Vector(velX/5, velY/5, velZ/5));
                    player.sendMessage(message);
                    if(broadcast) {
                        for(Player p:Bukkit.getServer().getOnlinePlayers()) {
                            if(!p.getName().equals(player)) {
                                p.sendMessage(broadcastMsg);
                            }
                        }
                    }
                    return true;
                } else {
                    player.sendMessage(plugin.getConfig().getString("general.notPermissions"));
                    return true;
                }
            }
            return false;
        }
    
    }
    
    
    Как-то неловко свой говно-код показывать :creeper:
     
  11. Автор темы
    _MCMaster_

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

    Баллы:
    76
    Имя в Minecraft:
    DragOn4ik
    Остальные классы показывать нету смысла
     
  12. Klavy

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

    Баллы:
    66
    Main plugin null
     
  13. Автор темы
    _MCMaster_

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

    Баллы:
    76
    Имя в Minecraft:
    DragOn4ik
    ?
     
  14. Klavy

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

    Баллы:
    66
    Советую сделать так:

    В коммандЛифт конструктор кастомный
    Код:
    Main plugin;
    
    public CommandLift(Main plugin) {
      this.plugin = plugin;
      plugin.getCommand("КОМАНДА").setExecutor(this);
    }
    Вызывать в оненабле:
    Код:
    new CommandLift(this);
    (без getcommand..., он у нас в командном классе)
     
  15. Автор темы
    _MCMaster_

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

    Баллы:
    76
    Имя в Minecraft:
    DragOn4ik
    Попробую сейчас
     
  16. Klavy

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

    Баллы:
    66
    Если не понял выше сказанное, сделал за тебя
    Main.java
    Command.java

    Код только отформатируй
     
  17. Автор темы
    _MCMaster_

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

    Баллы:
    76
    Имя в Minecraft:
    DragOn4ik
    Я понял, уже захожу на сервер смотреть результ
     
  18. Автор темы
    _MCMaster_

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

    Баллы:
    76
    Имя в Minecraft:
    DragOn4ik
    Спасибо, всё работает.
    Но можно вопрос?
    Как подкинуть игрока вверх? setVelocity(vector) не подкидывает...
     
  19. Автор темы
    _MCMaster_

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

    Баллы:
    76
    Имя в Minecraft:
    DragOn4ik
    Точнее, он подкидывает, но сразу телепортирует вниз, а консоль засирает этим(что я слишком быстро перемещаюсь)
    Консоль:
    2018-08-02 12:45:36 [WARNING] DragOn4ik moved too quickly!
     
  20. Автор темы
    _MCMaster_

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

    Баллы:
    76
    Имя в Minecraft:
    DragOn4ik
    @Klavy
     
Статус темы:
Закрыта.

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