Unexpected exception while parsing console command

Discussion in 'Plugin Development' started by ehArcher, Mar 7, 2014.

Thread Status:
Not open for further replies.
  1. Offline

    ehArcher

    Okay, so I just made a ban command, and it works in-game, but when I try it in console I get this:
    Code:
    >ban
    [13:55:02 WARN]: Unexpected exception while parsing console command "ban"
    org.bukkit.command.CommandException: Unhandled exception executing command 'ban'
    in plugin tgMain v0.1
            at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[cra
    ftbukkit.jar:git-Bukkit-1.7.2-R0.3-b3020jnks]
            at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:17
    5) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.3-b3020jnks]
            at org.bukkit.craftbukkit.v1_7_R1.CraftServer.dispatchCommand(CraftServe
    r.java:683) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.3-b3020jnks]
            at org.bukkit.craftbukkit.v1_7_R1.CraftServer.dispatchServerCommand(Craf
    tServer.java:670) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-b3020jnks]
            at net.minecraft.server.v1_7_R1.DedicatedServer.aw(DedicatedServer.java:
    286) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-b3020jnks]
            at net.minecraft.server.v1_7_R1.DedicatedServer.u(DedicatedServer.java:2
    51) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-b3020jnks]
            at net.minecraft.server.v1_7_R1.MinecraftServer.t(MinecraftServer.java:5
    45) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-b3020jnks]
            at net.minecraft.server.v1_7_R1.MinecraftServer.run(MinecraftServer.java
    :457) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-b3020jnks]
            at net.minecraft.server.v1_7_R1.ThreadServerApplication.run(SourceFile:6
    17) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-b3020jnks]
    Caused by: java.lang.ClassCastException: org.bukkit.craftbukkit.v1_7_R1.command.
    ColouredConsoleSender cannot be cast to org.bukkit.entity.Player
            at me.ehArcher.tgMain.MainCommandExecutor.onCommand(MainCommandExecutor.
    java:20) ~[?:?]
            at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[cra
    ftbukkit.jar:git-Bukkit-1.7.2-R0.3-b3020jnks]
            ... 8 more
    Here's my ban command:
    Code:java
    1. @SuppressWarnings("deprecation")
    2. @Override
    3. public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
    4.  
    5. Player player = (Player) sender;
    6.  
    7. if(cmd.getName().equalsIgnoreCase("ban")) {
    8.  
    9. if(args.length == 0) {
    10. player.sendMessage(ChatColor.RED + "Usage: /ban (player)");
    11. }
    12.  
    13. if(args.length == 1) {
    14. Player targetPlayer = Bukkit.getServer().getPlayer(args[0]);
    15. targetPlayer.setBanned(true);
    16. targetPlayer.kickPlayer(ChatColor.RED + "You have been banned by " + player.getName());
    17. Bukkit.broadcastMessage(ChatColor.RED + targetPlayer.getName() + " has been banned by " + player.getName());
    18. }
    19. if(args.length == 2) {
    20. Player targetPlayer = Bukkit.getServer().getPlayer(args[0]);
    21. }
    22. }

    Please help!
     
  2. Offline

    The Fancy Whale

  3. Offline

    ehArcher

    Code:
    name: tgMain
    description: tgMain - A core plugin for TinyGames
    version: 0.1
    main: me.ehArcher.tgMain.tgMain
     
    commands:
      kick:
        description: /kick
      ban:
        description: /ban
      unban:
        description: /unban
    There.

    And my full CommandExecutor
    Code:java
    1. package me.ehArcher.tgMain;
    2.  
    3. import org.bukkit.Bukkit;
    4. import org.bukkit.ChatColor;
    5. import org.bukkit.command.Command;
    6. import org.bukkit.command.CommandExecutor;
    7. import org.bukkit.command.CommandSender;
    8. import org.bukkit.entity.Player;
    9.  
    10. public class MainCommandExecutor implements CommandExecutor{
    11.  
    12. public MainCommandExecutor(tgMain tgMain) {
    13.  
    14. }
    15.  
    16. @SuppressWarnings("deprecation")
    17. @Override
    18. public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
    19.  
    20. Player player = (Player) sender;
    21.  
    22. if(cmd.getName().equalsIgnoreCase("ban")) {
    23.  
    24. if(args.length == 0) {
    25. player.sendMessage(ChatColor.RED + "Usage: /ban (player)");
    26. }
    27.  
    28. if(args.length == 1) {
    29. Player targetPlayer = Bukkit.getServer().getPlayer(args[0]);
    30. targetPlayer.setBanned(true);
    31. targetPlayer.kickPlayer(ChatColor.RED + "You have been banned by " + player.getName());
    32. Bukkit.broadcastMessage(ChatColor.RED + targetPlayer.getName() + " has been banned by " + player.getName());
    33. }
    34. if(args.length == 2) {
    35. Player targetPlayer = Bukkit.getServer().getPlayer(args[0]);
    36. }
    37. }
    38.  
    39. if(cmd.getName().equalsIgnoreCase("silentban")) {
    40.  
    41. if(args.length == 0) {
    42. player.sendMessage(ChatColor.RED + "Usage: /ban (player)");
    43. }
    44.  
    45. if(args.length == 1) {
    46. Player targetPlayer = Bukkit.getServer().getPlayer(args[0]);
    47. targetPlayer.setBanned(true);
    48. targetPlayer.kickPlayer(ChatColor.RED + "You have been banned by " + player.getName());
    49. }
    50.  
    51. }
    52.  
    53. if(cmd.getName().equalsIgnoreCase("kick")) {
    54.  
    55. if(args.length == 0) {
    56. player.sendMessage(ChatColor.RED + "Usage: /kick (player)");
    57. }
    58. if(args.length == 1) {
    59. Player targetPlayer = Bukkit.getServer().getPlayer(args[0]);
    60. targetPlayer.kickPlayer(ChatColor.RED + "You have been kicked by " + player.getName());
    61. Bukkit.broadcastMessage(ChatColor.RED + targetPlayer.getName() + " has been kicked by " + player.getName());
    62. }
    63.  
    64. }
    65.  
    66. return false;
    67. }
    68. }


    Code:java
    1. package me.ehArcher.tgMain;
    2.  
    3. import java.util.logging.Logger;
    4. import org.bukkit.plugin.PluginDescriptionFile;
    5. import org.bukkit.plugin.java.JavaPlugin;
    6.  
    7. public class tgMain extends JavaPlugin {
    8.  
    9. public final Logger logger = Logger.getLogger("Minecraft");
    10. public PluginDescriptionFile pdfFile = getDescription();
    11.  
    12. @Override
    13. public void onEnable() {
    14. getCommand("ban").setExecutor(new MainCommandExecutor(this));
    15. getCommand("kick").setExecutor(new MainCommandExecutor(this));
    16. }
    17.  
    18. @Override
    19. public void onDisable() {
    20. }
    21.  
    22. }
    23.  
     
  4. Offline

    Necrodoom

    Moved to correct section.
     
  5. Offline

    Arcoz

    ehArcher
    You're casting sender to player before even checking if it's a player who runs the command...
    Player player = (Player) sender; disables all console usage.

    You should check if the command executor is a player before casting the sender to a player.
     
  6. Offline

    Heirteir

    Code:java
    1. do if (!(sender instanceof Player)){
    2. sender.sendMessage("ChatColor.RED + "Only Players can Execute This Command!");
    3. return false;
    4. }

    Use this check in order to get no error in console buddy!
    hope it helped!
    Heirteir
     
  7. Offline

    TopTobster5

    That doesn't really fix the issue. The console should be able to perform the command. You need to remove the line which sets sender to player, and then replace everywhere that uses player to sender.

    On the line which broadcasts who banned who, perhaps do a check to see if it is a player who sent the command, and if it was the console, say 'player has been banned by console' instead of just not letting the console ban.
     
Thread Status:
Not open for further replies.

Share This Page