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

Статус
Закрыто для дальнейших ответов.

_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%, вы не указали игрока!"
 
Пишите код, который проще отлаживать.
FileConfiguration config = plugin.getConfig(); // null может быть тут
String template = plugin.getConfig().getString("lift.errorNull"); // или тут.
String playerName = player.getName(); // Или тут?!?
String nullMsg = template.replace("&", "§").replace("%player%", playerName); // Если не упали раньше, уже шансов мало.
 
Последнее редактирование:
Summoned Cool_boy.
Если уверен что игрок не null и что в конфиге есть точно такой же путь, тогда дебажь.
Пишите код, который проще отлаживать.
String template = plugin.getConfig().getString("lift.errorNull"); // null-то, скорее всего, тут.
String nullMsg = template.replace("&", "§").replace("%player%", player.getName());
Можно и каждый метод на новую строку отправлять

Код:
String nullMsg = plugin.getConfig()
.getString("lift.errorNull")
.replace("&", "\u00a7")
.replace("%player%", player.getName());
И лучше метод из ChatColor использовать для цветов
 
Я это знаю, я же написал на какой строке ошибка -

Код:
String nullMsg = plugin.getConfig().getString("lift.errorNull").replace("&", "\u00a7").replace("%player%", player.getName());
Это 20-я строка
Ты возможно берёшь строку из конфига до 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");//Нормально

    }
}
В других классах, кроме инстанции плагина тоже может быть так. Ищи ошибку в обьявлении и получении.
 
Код в студию, у тебя скорее всего инстанс null
 
Вот мой говнокод:
Код:
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:
 
Вот мой говнокод:
Код:
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:
Main plugin null
 
Советую сделать так:

В коммандЛифт конструктор кастомный
Код:
Main plugin;

public CommandLift(Main plugin) {
  this.plugin = plugin;
  plugin.getCommand("КОМАНДА").setExecutor(this);
}

Вызывать в оненабле:
Код:
new CommandLift(this);
(без getcommand..., он у нас в командном классе)
 
Советую сделать так:

В коммандЛифт конструктор кастомный
Код:
Main plugin;

public CommandLift(Main plugin) {
  this.plugin = plugin;
  plugin.getCommand("КОМАНДА").setExecutor(this);
}

Вызывать в оненабле:
Код:
new CommandLift(this);
(без getcommand..., он у нас в командном классе)
Попробую сейчас
 
Точнее, он подкидывает, но сразу телепортирует вниз, а консоль засирает этим(что я слишком быстро перемещаюсь)
Консоль:
2018-08-02 12:45:36 [WARNING] DragOn4ik moved too quickly!
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх