Solved Listener Problem

Discussion in 'Plugin Development' started by Cheesepro, Jul 20, 2014.

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

    Cheesepro

    Code:java
    1. package me.cheesepro.easytp;
    2.  
    3. import org.bukkit.ChatColor;
    4. import org.bukkit.Location;
    5. import org.bukkit.command.Command;
    6. import org.bukkit.command.CommandSender;
    7. import org.bukkit.entity.Player;
    8. import org.bukkit.event.entity.PlayerDeathEvent;
    9. import org.bukkit.plugin.java.JavaPlugin;
    10. import java.util.HashMap;
    11. import java.util.Map;
    12.  
    13. public class Main extends JavaPlugin {
    14.  
    15. private Map<String, Location> m = new HashMap(10);
    16. private boolean perms;
    17.  
    18. public void onEnabled() {
    19. getLogger().info("Plugin Enabled!");
    20. }
    21.  
    22. public void onDisabled() {
    23. getLogger().info("Plugin Disabled!");
    24. }
    25.  
    26. public void onDeath(PlayerDeathEvent e) {
    27. Player p = e.getEntity();
    28. getLogger().info(getDescription().getName() + " " + p.getName() + " added to list.");
    29. this.m.put(p.getName(), p.getLocation());
    30. }
    31.  
    32. public boolean onCommand(CommandSender sender, Command cmd, String label,
    33. String[] args) {
    34. if (sender instanceof Player) {
    35. Player player = (Player) sender;
    36. if (label.equalsIgnoreCase("tpto")) {
    37. if (args.length == 0) {
    38. player.sendMessage(ChatColor.DARK_RED
    39. + "[Error] type /help easytp");
    40. } else if (args.length == 1) {
    41. Player targetPlayer = player.getServer().getPlayer(args[0]);
    42. if (targetPlayer != null) {
    43. Location targetPlayerLocation = targetPlayer
    44. .getLocation();
    45. player.teleport(targetPlayerLocation);
    46. player.sendMessage(ChatColor.GREEN
    47. + "Teleported you to " + targetPlayer.getName());
    48. } else {
    49. player.sendMessage(ChatColor.DARK_RED
    50. + "[Error] Target player not found!!");
    51. }
    52. } else {
    53. player.sendMessage(ChatColor.DARK_RED
    54. + "[Error] type /help easytp for help!!");
    55. }
    56. } else if (label.equalsIgnoreCase("tptome")) {
    57. if (args.length == 0) {
    58. player.sendMessage(ChatColor.DARK_RED
    59. + "[Error] type /help easytp");
    60. } else if (args.length == 1) {
    61. Player targetPlayer = player.getServer().getPlayer(args[0]);
    62. if (targetPlayer != null) {
    63. targetPlayer.teleport(player.getLocation());
    64. player.sendMessage(ChatColor.GREEN + "Teleported "
    65. + targetPlayer.getName() + " to you!");
    66. targetPlayer.sendMessage(ChatColor.RED
    67. + "You are teleported to " + player.getName());
    68. } else {
    69. player.sendMessage(ChatColor.DARK_RED
    70. + "[Error] Target player not found!!");
    71. }
    72. } else {
    73. player.sendMessage(ChatColor.DARK_RED
    74. + "[Error] type /help easytp for help!!");
    75. }
    76. } else if (label.equalsIgnoreCase("tpback")) {
    77.  
    78. if (this.m.containsKey(sender.getName())) {
    79. Player p = (Player) sender;
    80. p.teleport((Location) this.m.get(p.getName()));
    81. } else {
    82. sender.sendMessage(ChatColor.RED + "You do not have a last death location!");
    83. }
    84. }
    85.  
    86. }
    87. return false;
    88.  
    89. }
    90.  
    91. }
    92.  







    So when ever I killed myself and do [ /tpback ] (line 76) it will always says "You do not have a last death location" I don't know why the last death location is not registered or something, I am very new.. so if you can help me, I will be much appreciated! Thank you! :)
     
  2. Offline

    Pizza371

    Cheesepro you're not registering events, it's never calling that part of your code.
    add this to your onEnable:
    this.getServer().getPluginManager().registerEvents(this, this);
    it should work now, providing no other errors make it not work.
    the first argument refers to the plugin instance, the second is the listener class
     
  3. Offline

    Cheesepro

    I added the line [this.getServer().getPluginManager().registerEvents(this, this);] in my onEnable() but still gives me the message of "You do not have a last death location.."

    updated code:
    Code:java
    1. package me.cheesepro.easytp;
    2.  
    3. import org.bukkit.ChatColor;
    4. import org.bukkit.Location;
    5. import org.bukkit.command.Command;
    6. import org.bukkit.command.CommandSender;
    7. import org.bukkit.entity.Player;
    8. import org.bukkit.event.Listener;
    9. import org.bukkit.event.entity.PlayerDeathEvent;
    10. import org.bukkit.plugin.java.JavaPlugin;
    11.  
    12. import java.util.HashMap;
    13. import java.util.Map;
    14.  
    15. public class Main extends JavaPlugin implements Listener {
    16.  
    17. private Map<String, Location> m = new HashMap(10);
    18. private boolean perms;
    19.  
    20. public void onEnabled() {
    21. this.getServer().getPluginManager().registerEvents(this, this);
    22. getLogger().info("Plugin Enabled!");
    23. }
    24.  
    25. public void onDisabled() {
    26. getLogger().info("Plugin Disabled!");
    27. }
    28.  
    29. public void onDeath(PlayerDeathEvent e) {
    30. Player p = e.getEntity();
    31. getLogger().info(getDescription().getName() + " " + p.getName() + " added to list.");
    32. this.m.put(p.getName(), p.getLocation());
    33. }
    34.  
    35. public boolean onCommand(CommandSender sender, Command cmd, String label,
    36. String[] args) {
    37. if (sender instanceof Player) {
    38. Player player = (Player) sender;
    39. if (label.equalsIgnoreCase("tpto")) {
    40. if (args.length == 0) {
    41. player.sendMessage(ChatColor.DARK_RED
    42. + "[Error] type /help easytp");
    43. } else if (args.length == 1) {
    44. Player targetPlayer = player.getServer().getPlayer(args[0]);
    45. if (targetPlayer != null) {
    46. Location targetPlayerLocation = targetPlayer
    47. .getLocation();
    48. player.teleport(targetPlayerLocation);
    49. player.sendMessage(ChatColor.GREEN
    50. + "Teleported you to " + targetPlayer.getName());
    51. } else {
    52. player.sendMessage(ChatColor.DARK_RED
    53. + "[Error] Target player not found!!");
    54. }
    55. } else {
    56. player.sendMessage(ChatColor.DARK_RED
    57. + "[Error] type /help easytp for help!!");
    58. }
    59. } else if (label.equalsIgnoreCase("tptome")) {
    60. if (args.length == 0) {
    61. player.sendMessage(ChatColor.DARK_RED
    62. + "[Error] type /help easytp");
    63. } else if (args.length == 1) {
    64. Player targetPlayer = player.getServer().getPlayer(args[0]);
    65. if (targetPlayer != null) {
    66. targetPlayer.teleport(player.getLocation());
    67. player.sendMessage(ChatColor.GREEN + "Teleported "
    68. + targetPlayer.getName() + " to you!");
    69. targetPlayer.sendMessage(ChatColor.RED
    70. + "You are teleported to " + player.getName());
    71. } else {
    72. player.sendMessage(ChatColor.DARK_RED
    73. + "[Error] Target player not found!!");
    74. }
    75. } else {
    76. player.sendMessage(ChatColor.DARK_RED
    77. + "[Error] type /help easytp for help!!");
    78. }
    79. } else if (label.equalsIgnoreCase("tpback")) {
    80.  
    81. if (this.m.containsKey(sender.getName())) {
    82. Player p = (Player) sender;
    83. p.teleport((Location) this.m.get(p.getName()));
    84. } else {
    85. sender.sendMessage(ChatColor.RED + "You do not have a last death location!");
    86. }
    87. }
    88.  
    89. }
    90. return false;
    91.  
    92. }
    93.  
    94. }
    95.  
     
  4. Offline

    Pizza371

    Cheesepro you are registering your own method for enable, change 'Enabled' and 'Disabled' to 'Enable' and 'Disable'

    it should look like this:
    Code:java
    1.  
    2. @Override
    3. public void onEnable() {
    4. //stuff
    5. }
    6.  
     
  5. Offline

    Cheesepro

    Weird... Still the same error message even though I changed [onEnabled] to [onEnable] and [onDisabled] to [onDisable]
    Error message "You do not have a last death location" updated code:​
    Code:java
    1. package me.cheesepro.easytp;
    2.  
    3. import org.bukkit.Bukkit;
    4. import org.bukkit.ChatColor;
    5. import org.bukkit.Location;
    6. import org.bukkit.command.Command;
    7. import org.bukkit.command.CommandSender;
    8. import org.bukkit.entity.Player;
    9. import org.bukkit.event.Listener;
    10. import org.bukkit.event.entity.PlayerDeathEvent;
    11. import org.bukkit.plugin.java.JavaPlugin;
    12.  
    13. import java.util.HashMap;
    14. import java.util.Map;
    15.  
    16. public class Main extends JavaPlugin implements Listener {
    17.  
    18. private Map<String, Location> m = new HashMap<String, Location>(10);
    19.  
    20. public void onEnable() {
    21. Bukkit.getPluginManager().registerEvents(this, this);
    22. getLogger().info("Plugin Enabled!");
    23. }
    24.  
    25. public void onDisable() {
    26. getLogger().info("Plugin Disabled!");
    27. }
    28.  
    29. public void onDeath(PlayerDeathEvent e) {
    30. Player p = e.getEntity();
    31. getLogger().info(getDescription().getName() + " " + p.getName() + " added to list.");
    32. this.m.put(p.getName(), p.getLocation());
    33. }
    34.  
    35. public boolean onCommand(CommandSender sender, Command cmd, String label,
    36. String[] args) {
    37. if (sender instanceof Player) {
    38. Player player = (Player) sender;
    39. if (label.equalsIgnoreCase("tpto")) {
    40. if (args.length == 0) {
    41. player.sendMessage(ChatColor.DARK_RED
    42. + "[Error] type /help easytp");
    43. } else if (args.length == 1) {
    44. Player targetPlayer = player.getServer().getPlayer(args[0]);
    45. if (targetPlayer != null) {
    46. Location targetPlayerLocation = targetPlayer
    47. .getLocation();
    48. player.teleport(targetPlayerLocation);
    49. player.sendMessage(ChatColor.GREEN
    50. + "Teleported you to " + targetPlayer.getName());
    51. } else {
    52. player.sendMessage(ChatColor.DARK_RED
    53. + "[Error] Target player not found!!");
    54. }
    55. } else {
    56. player.sendMessage(ChatColor.DARK_RED
    57. + "[Error] type /help easytp for help!!");
    58. }
    59. } else if (label.equalsIgnoreCase("tptome")) {
    60. if (args.length == 0) {
    61. player.sendMessage(ChatColor.DARK_RED
    62. + "[Error] type /help easytp");
    63. } else if (args.length == 1) {
    64. Player targetPlayer = player.getServer().getPlayer(args[0]);
    65. if (targetPlayer != null) {
    66. targetPlayer.teleport(player.getLocation());
    67. player.sendMessage(ChatColor.GREEN + "Teleported "
    68. + targetPlayer.getName() + " to you!");
    69. targetPlayer.sendMessage(ChatColor.RED
    70. + "You are teleported to " + player.getName());
    71. } else {
    72. player.sendMessage(ChatColor.DARK_RED
    73. + "[Error] Target player not found!!");
    74. }
    75. } else {
    76. player.sendMessage(ChatColor.DARK_RED
    77. + "[Error] type /help easytp for help!!");
    78. }
    79. } else if (label.equalsIgnoreCase("tpback")) {
    80.  
    81. if (this.m.containsKey(sender.getName())) {
    82. Player p = (Player) sender;
    83. p.teleport((Location) this.m.get(p.getName()));
    84. } else {
    85. sender.sendMessage(ChatColor.RED + "You do not have a last death location!");
    86. }
    87. }
    88.  
    89. }
    90. return false;
    91.  
    92. }
    93.  
    94. }
    95.  
     
  6. Offline

    N1T3SLAY3R

    try adding @EventHandler infront of the death event

    Code:
        @EventHandler
        public void onDeath(PlayerDeathEvent e) {
            Player p = e.getEntity();
            getLogger().info(getDescription().getName() + " " + p.getName() + " added to list.");
            this.m.put(p.getName(), p.getLocation());
        }
     
  7. Offline

    Phantom_64

    Cheesepro
    Make sure your class implements Listener, add @EventHandler before the onDeath method and register the events in your onEnable.
     
  8. Offline

    ReadySetPawn

    Yeah I agree with the two people above me, the only explanation would be that you didn't add "@EventHandler" before your onDeath method.
     
  9. Offline

    Cheesepro

    Thank you guys SOO much! for your help! after adding @EventHandler before the onDeath method it WORKED!! :D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D

    Here is the most updated and working code!

    Code:java
    1. package me.cheesepro.easytp;
    2.  
    3. import org.bukkit.Bukkit;
    4. import org.bukkit.ChatColor;
    5. import org.bukkit.Location;
    6. import org.bukkit.command.Command;
    7. import org.bukkit.command.CommandSender;
    8. import org.bukkit.entity.Player;
    9. import org.bukkit.event.EventHandler;
    10. import org.bukkit.event.Listener;
    11. import org.bukkit.event.entity.PlayerDeathEvent;
    12. import org.bukkit.plugin.java.JavaPlugin;
    13.  
    14. import java.util.HashMap;
    15. import java.util.Map;
    16.  
    17. public class Main extends JavaPlugin implements Listener {
    18.  
    19. private Map<String, Location> m = new HashMap<String, Location>(10);
    20.  
    21. public void onEnable() {
    22. Bukkit.getPluginManager().registerEvents(this, this);
    23. getLogger().info("Plugin Enabled!");
    24. }
    25.  
    26. public void onDisable() {
    27. getLogger().info("Plugin Disabled!");
    28. }
    29.  
    30. @EventHandler
    31. public void onDeath(PlayerDeathEvent e) {
    32. Player p = e.getEntity();
    33. getLogger().info(getDescription().getName() + " " + p.getName() + " added to list.");
    34. this.m.put(p.getName(), p.getLocation());
    35. }
    36.  
    37. public boolean onCommand(CommandSender sender, Command cmd, String label,
    38. String[] args) {
    39. if (sender instanceof Player) {
    40. Player player = (Player) sender;
    41. if (label.equalsIgnoreCase("tpto")) {
    42. if (args.length == 0) {
    43. player.sendMessage(ChatColor.DARK_RED
    44. + "[Error] type /help easytp");
    45. } else if (args.length == 1) {
    46. Player targetPlayer = player.getServer().getPlayer(args[0]);
    47. if (targetPlayer != null) {
    48. Location targetPlayerLocation = targetPlayer.getLocation();
    49. player.teleport(targetPlayerLocation);
    50. player.sendMessage(ChatColor.GREEN
    51. + "Teleported you to " + targetPlayer.getName());
    52. } else {
    53. player.sendMessage(ChatColor.DARK_RED
    54. + "[Error] Target player not found!!");
    55. }
    56. } else {
    57. player.sendMessage(ChatColor.DARK_RED
    58. + "[Error] type /help easytp for help!!");
    59. }
    60. } else if (label.equalsIgnoreCase("tptome")) {
    61. if (args.length == 0) {
    62. player.sendMessage(ChatColor.DARK_RED
    63. + "[Error] type /help easytp");
    64. } else if (args.length == 1) {
    65. Player targetPlayer = player.getServer().getPlayer(args[0]);
    66. if (targetPlayer != null) {
    67. targetPlayer.teleport(player.getLocation());
    68. player.sendMessage(ChatColor.GREEN + "Teleported "
    69. + targetPlayer.getName() + " to you!");
    70. targetPlayer.sendMessage(ChatColor.RED
    71. + "You are teleported to " + player.getName());
    72. } else {
    73. player.sendMessage(ChatColor.DARK_RED
    74. + "[Error] Target player not found!!");
    75. }
    76. } else {
    77. player.sendMessage(ChatColor.DARK_RED
    78. + "[Error] type /help easytp for help!!");
    79. }
    80. } else if (label.equalsIgnoreCase("tpback")) {
    81.  
    82. if (this.m.containsKey(sender.getName())) {
    83. Player p = (Player) sender;
    84. p.teleport((Location) this.m.get(p.getName()));
    85. } else {
    86. sender.sendMessage(ChatColor.RED + "You do not have a last death location!");
    87. }
    88. }
    89.  
    90. }
    91. return false;
    92.  
    93. }
    94.  
    95. }
    96.  
     
Thread Status:
Not open for further replies.

Share This Page