Ошибка кодирования плагина CraftBukkit

Я делаю простой плагин /heal Bukkit для CraftBukkit Beta Build 1.7.2 R0.3. (Я новичок в java.) Я программирую в Eclipse. Я получаю сообщение об ошибке:

введите здесь описание изображения

Вот мой код:

public boolean onCommand_heal(CommandSender sender, Command cmd, String commandLabel, String[] args){
    Player player = (Player) sender;
    if(commandLabel.equalsIgnoreCase("heal")){
        if(args.length == 0){
        player.setHealth(20);
        player.setFireTicks(0);
        player.sendMessage(ChatColor.GOLD + "You are healed!"); 
        }else if(args.length == 1){
            if(player.getServer().getPlayer(args[0]) !=null){
                Player targetPlayer = player.getServer().getPlayer(args[0]);
                targetPlayer.setHealth(20);
                player.sendMessage(ChatColor.GOLD + "Player Healed!");
            }else{
                player.sendMessage(ChatColor.RED + "PLAYER NOT ONLINE!");
            }
        }
    }
    return false;
}

person mas0701    schedule 26.03.2014    source источник


Ответы (1)


Попробуйте сделать это:

Player targetPlayer = Bukkit.getServer().getPlayer(args[0]);
//or this:
Player targetPlayer = plugin.getServer().getPlayer(args[0]);

вместо

Player targetPlayer = player.getServer().getPlayer(args[0]);

и здесь то же самое, заменить:

if(player.getServer().getPlayer(args[0]) !=null){

с:

if(Bukkit.getServer().getPlayer(args[0]) != null){

Кроме того, вы всегда должны использовать floats при настройке здоровья после недавнего обновления Bukkit. setHealth(int) устарело и заменено на setHealth(float), поэтому попробуйте:

targetPlayer.setHealth(20.0f);
person Jojodmo    schedule 26.03.2014
comment
Спасибо. Это была проблема с поплавком - person mas0701; 27.03.2014
comment
Ваш комментарий о замене player.getServer() на Bukkit.getServer() не имеет значения и на самом деле может не одобряться в зависимости от стиля кодирования. @mas0701 mas0701 убедитесь, что вы проверили экземпляр Player отправителя команды перед кастингом, так как прямо сейчас, если вы запустите эту команду из консоли, вы получите неприятную ошибку. - person Tips48; 27.03.2014
comment
@ Советы48 Я действительно не вижу причин осуждать Bukkit.getServer() в отличие от player.getServer() и plugin.getServer() ... Единственное отличие состоит в том, что Bukkit.getServer() является статическим, и добавляя к вашему комментарию о проверке, если sender instanceof Player, вы также можете сделать оператор else, который отправить отправителю сообщение типа Только игроки могут лечить себя, чтобы он знал, почему ничего не происходит - person Jojodmo; 27.03.2014
comment
Я согласен с вашим вторым пунктом @jojodmo, и я просто сказал это, потому что знаю, что были моменты, когда они рассматривали возможность удаления Bukkit. Конечно, я не использовал Bukkit больше года, но вы поняли. - person Tips48; 28.03.2014