Java-类型不匹配:无法从CommandSender转换为Player

时间:2018-07-27 21:56:59

标签: java minecraft bukkit

我遇到此错误: 类型不匹配:无法从CommandSender转换为Player 这是错误的代码:

在“最终播放器senderPlayer =(播放器的发送者实例)?发送者:null;”行中

public boolean onCommand(final CommandSender sender, final Command command, final String label, final String[] args) {
    if (args.length < 2) {
        sender.sendMessage(ConfigurationService.RED + "Usage: /" + label + " <playerName> <amount>");
    } else {
        final Integer amount = Ints.tryParse(args[1]);

        if (amount == null) {
            sender.sendMessage(ConfigurationService.RED + "'" + args[1] + "' is not a valid number.");
        } else if (amount <= 0) {
            sender.sendMessage(ConfigurationService.RED + "You must send money in positive quantities.");
        } else if (amount >= 50000) {
            sender.sendMessage(ConfigurationService.RED + "You cannot send more than " + 50000 + ".");
        } else {
            final Player senderPlayer = (sender instanceof Player) ? sender : null;
            final FactionUser playerUser = (senderPlayer != null) ? this.plugin.getUserManager().getUser(senderPlayer.getUniqueId()) : null;
            final int senderBalance = (playerUser != null) ? playerUser.getBalance() : 5000;

            if (senderBalance < amount) {
                sender.sendMessage(ConfigurationService.RED + "You tried to pay " + '$' + amount + ", but you only have " + '$' + senderBalance + " in your bank account.");
            } else {
                final UUID target = this.plugin.getUserManager().fetchUUID(args[0]);
                final FactionUser targetUser;

                if (target == null || (targetUser = this.plugin.getUserManager().getUser(target)).getName() == null) {
                    sender.sendMessage(ConfigurationService.RED + "Player not found");
                } else if (senderPlayer != null && senderPlayer.getUniqueId() == target) {
                    sender.sendMessage(ConfigurationService.RED + "You cannot send money to yourself.");
                } else {
                    if (playerUser != null) {
                        playerUser.setBalance(playerUser.getBalance() - amount);
                    }

                    targetUser.setBalance(targetUser.getBalance() + amount);

                    if (targetUser.isOnline()) {
                        targetUser.getPlayer().sendMessage(ConfigurationService.YELLOW + sender.getName() + " has sent you " + ConfigurationService.GOLD + '$' + amount + ConfigurationService.YELLOW + '.');
                    }

                    sender.sendMessage(ConfigurationService.YELLOW + "You have sent " + ChatColor.GREEN + '$' + amount + ConfigurationService.YELLOW + " to " + targetUser.getName() + '.');
                }
            }
        }
    }
    return true;
}

1 个答案:

答案 0 :(得分:3)

我猜想 Player 是从 CommandSender 继承的,在这种情况下,您需要将 CommandSender 对象投射到 Player strong>对象。 Instanceof 仅检查它在技术上是否是播放器。该行应该是。

final Player senderPlayer = (sender instanceof Player) ? (Player)sender : null;