Registering Events

Discussion in 'Plugin Development' started by Blah1, Oct 5, 2013.

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

    Blah1

    I just wanted to know if I registered this event correctly because /mute broadcasts that the player is muted but it doesn't actually mute them.

    Mute:
    Code:java
    1. package me.MirrorRealm.kadmin;
    2.  
    3. import java.util.HashMap;
    4.  
    5. import org.bukkit.Bukkit;
    6. import org.bukkit.ChatColor;
    7. import org.bukkit.command.Command;
    8. import org.bukkit.command.CommandExecutor;
    9. import org.bukkit.command.CommandSender;
    10. import org.bukkit.entity.Player;
    11. import org.bukkit.event.EventHandler;
    12. import org.bukkit.event.Listener;
    13. import org.bukkit.event.player.AsyncPlayerChatEvent;
    14.  
    15. public class Mute implements CommandExecutor, Listener{
    16. public final HashMap<Player, Player> mute = new HashMap<Player, Player>();
    17. @EventHandler
    18. public void onPlayerChatEvent(AsyncPlayerChatEvent event){
    19. Player target = event.getPlayer();
    20. if (mute.containsKey(target.getName())){
    21. event.setCancelled(true);
    22. target.sendMessage(ChatColor.RED + "You are muted.");
    23. }else{
    24. event.setCancelled(false);
    25. }
    26. }
    27. public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
    28. Player player = (Player) sender;
    29. if (cmd.getName().equalsIgnoreCase("mute")){
    30. if (!(player.hasPermission("command.mute"))){
    31. player.sendMessage(ChatColor.RED + "You do not have permission");
    32. return true;
    33. }
    34. if (args.length == 0){
    35. player.sendMessage(ChatColor.RED + "/mute <name>");
    36. return true;
    37. }
    38. if (args.length >= 2){
    39. player.sendMessage(ChatColor.RED + "/mute <name>");
    40. return true;
    41. }
    42. Player target = Bukkit.getServer().getPlayer(args[0]);
    43. if (mute.containsKey(target)){
    44. mute.remove(target);
    45. Bukkit.broadcastMessage(target.getDisplayName() + ChatColor.GREEN + " was unmuted by " + player.getDisplayName() + ".");
    46. return true;
    47. }
    48. if (!(mute.containsKey(target))){
    49. mute.put(target, null);
    50. Bukkit.broadcastMessage(target.getDisplayName() + ChatColor.GREEN + " was muted by " + player.getDisplayName() + ".");
    51. }
    52. }
    53. if (cmd.getName().equalsIgnoreCase("unmute")){
    54. if (!(player.hasPermission("command.unmute"))){
    55. player.sendMessage(ChatColor.RED + "You do not have permission.");
    56. return true;
    57. }
    58. if (args.length == 0){
    59. player.sendMessage(ChatColor.RED + "/umute <name>");
    60. return true;
    61. }
    62. if (args.length >= 2){
    63. player.sendMessage(ChatColor.RED + "/unmute <name>");
    64. return true;
    65. }
    66. Player target = Bukkit.getServer().getPlayer(args[0]);
    67. if (target == null){
    68. player.sendMessage(ChatColor.RED + "Could not find player " + args[0]);
    69. return true;
    70. }
    71. if (mute.containsKey(target)){
    72. Bukkit.broadcastMessage(target.getDisplayName() + ChatColor.GREEN + " was unmuted by " + player.getDisplayName() + ".");
    73. mute.remove(target);
    74. }
    75. if (!(mute.containsKey(target))){
    76. player.sendMessage(ChatColor.GREEN + "Player " + target.getDisplayName() + " is not muted.");
    77. return true;
    78. }
    79. }
    80. return true;
    81. }
    82. }


    Main:
    Code:java
    1. package me.MirrorRealm.kadmin;
    2.  
    3. import org.bukkit.Bukkit;
    4. import org.bukkit.plugin.java.JavaPlugin;
    5.  
    6. public class Main extends JavaPlugin{
    7. public void onEnable(){
    8. Bukkit.getServer().getLogger().info("kAdmin has been enabled");
    9. getCommand("ban").setExecutor(new Ban());
    10. getCommand("broadcast").setExecutor(new Broadcast());
    11. getCommand("clear").setExecutor(new Clear());
    12. getCommand("feed").setExecutor(new Feed());
    13. getCommand("fly").setExecutor(new Fly());
    14. getCommand("speed").setExecutor(new Fly());
    15. getCommand("gamemode").setExecutor(new Gamemode());
    16. getCommand("heal").setExecutor(new Heal());
    17. getCommand("k").setExecutor(new K());
    18. getCommand("unban").setExecutor(new Unban());
    19. getCommand("tp").setExecutor(new Teleport());
    20. getCommand("cc").setExecutor(new ClearChat());
    21. getCommand("s").setExecutor(new S());
    22. getCommand("kill").setExecutor(new Kill());
    23. getCommand("suicide").setExecutor(new Kill());
    24. getCommand("mute").setExecutor(new Mute());
    25. getCommand("unmute").setExecutor(new Mute());
    26. Bukkit.getPluginManager().registerEvents(new Mute(), this);
    27. }
    28. }
     
  2. Offline

    adam753

    The problem is here:
    Code:java
    1.  
    2. getCommand("mute").setExecutor(new Mute());
    3. getCommand("unmute").setExecutor(new Mute());
    4. Bukkit.getPluginManager().registerEvents(new Mute(), this);
    5.  

    Doing "new Mute()", as you hopefully know, creates a new instance of the Mute class. You are doing that three times here, so you are creating three different instances of Mute for each purpose. What that means is that, when you /mute someone, their name gets added to the HashMap that exists inside the first instance, but the event listener is the third instance and has its own hashmap, so it will never see any muted players.

    Solution:
    Code:java
    1.  
    2. Mute mute = new Mute();
    3. getCommand("mute").setExecutor(mute);
    4. getCommand("unmute").setExecutor(mute);
    5. Bukkit.getPluginManager().registerEvents(mute, this);
    6.  
     
Thread Status:
Not open for further replies.

Share This Page