Ok, when I do /muteall it says: "MirrorRealm muted the public chat" and when I do it again, instead of saying "MirrorRealm unmuted the public chat," it says that I muted it again. Also, it doesn't even mute the players (I tried it with my alt). And /unmute all just keeps saying "The public chat is not muted" Frustrated MuteAll: Code:java package me.MirrorRealm.kadmin; import java.util.HashMap; import org.bukkit.Bukkit;import org.bukkit.ChatColor;import org.bukkit.command.Command;import org.bukkit.command.CommandExecutor;import org.bukkit.command.CommandSender;import org.bukkit.entity.Player;import org.bukkit.event.EventHandler;import org.bukkit.event.Listener;import org.bukkit.event.player.AsyncPlayerChatEvent; public class MuteAll implements CommandExecutor, Listener{ public final HashMap<Player, Player> mute = new HashMap<Player, Player>(); @EventHandler public void onPlayerChatEvent(AsyncPlayerChatEvent event){ Player player = event.getPlayer(); if(mute.containsKey(player)){ event.setCancelled(true); } } public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args){ Player player = (Player) sender; if (cmd.getName().equalsIgnoreCase("muteall")){ if (!(player.hasPermission("command.muteall"))){ player.sendMessage(ChatColor.RED + "You do not have permission."); return true; } if (args.length >= 1){ player.sendMessage(ChatColor.RED + "/muteall"); return true; } for (Player p : Bukkit.getOnlinePlayers()){ if (mute.containsKey(p)){ if (p.hasPermission("command.mute.exempt")) return true; }else{ mute.remove(p); Bukkit.broadcastMessage(player.getDisplayName() + ChatColor.RED + " muted the public chat."); return true; } if (!(mute.containsKey(p))){ if (p.hasPermission("command.mute.exempt")) return true; }else{ mute.put(p, null); Bukkit.broadcastMessage(player.getDisplayName() + ChatColor.RED + " unmuted the public chat."); return true; } } } if (cmd.getName().equalsIgnoreCase("unmuteall")){ if (!(player.hasPermission("command.unmuteall"))){ player.sendMessage(ChatColor.RED + "You do not have permission."); return true; } if (args.length >= 1){ player.sendMessage(ChatColor.RED + "/unmuteall"); return true; } for (Player p : Bukkit.getOnlinePlayers()){ if (!(mute.containsKey(p))){ player.sendMessage(ChatColor.RED + "The public chat is not muted"); return true; } if (mute.containsKey(p)){ mute.remove(p); Bukkit.broadcastMessage(player.getDisplayName() + ChatColor.RED + " unmuted the public chat."); return true; } } } return true; }} Main: Code:java package me.MirrorRealm.kadmin; import org.bukkit.Bukkit;import org.bukkit.plugin.java.JavaPlugin; public class Main extends JavaPlugin{ public void onEnable(){ Bukkit.getServer().getLogger().info("kAdmin has been enabled"); getCommand("ban").setExecutor(new Ban()); getCommand("broadcast").setExecutor(new Broadcast()); getCommand("clear").setExecutor(new Clear()); getCommand("feed").setExecutor(new Feed()); getCommand("fly").setExecutor(new Fly()); getCommand("speed").setExecutor(new Fly()); getCommand("gamemode").setExecutor(new Gamemode()); getCommand("heal").setExecutor(new Heal()); getCommand("k").setExecutor(new K()); getCommand("unban").setExecutor(new Unban()); getCommand("tp").setExecutor(new Teleport()); getCommand("cc").setExecutor(new ClearChat()); getCommand("s").setExecutor(new S()); getCommand("help").setExecutor(new Help(this)); getCommand("kill").setExecutor(new Kill()); getCommand("suicide").setExecutor(new Kill()); getCommand("mute").setExecutor(new Mute()); getCommand("unmute").setExecutor(new Mute()); getCommand("muteall").setExecutor(new MuteAll()); getCommand("unmuteall").setExecutor(new MuteAll()); getCommand("msg").setExecutor(new Message()); getCommand("r").setExecutor(new Message()); Bukkit.getServer().getPluginManager().registerEvents(new Mute(), this); Bukkit.getServer().getPluginManager().registerEvents(new MuteAll(), this); Bukkit.getServer().getPluginManager().registerEvents(new Message(), this); getConfig().options().copyDefaults(true); saveConfig(); }} Sorry if I'm posting a lot I'm still learning and need a lot of help.
Exactly the same issue as I answered here: http://forums.bukkit.org/threads/registering-events.180297/
Ive never had much luck with AsyncPlayerChatEvent... You could try the depricated PlayerChatEvent... Code:java @EventHandlerpublic void onPlayerChatEvent(PlayerChatEvent event){ Player player = event.getPlayer(); if(mute.containsKey(player)){ event.setCancelled(true); }} Edit: Not Recommended
adam753 That worked for the Mute class but the MuteAll class still doesn't work. I think it has to do with muting EVERYONE on the server. Btw thanks for helping my on the Mute command
You muteall command doesnt add anyone to the HashMap... you are actually removing players from the hashmap. Change the for loop for /muteall to... Code:java for (Player p : Bukkit.getOnlinePlayers()) { if (!mute.containsKey(p)) { if (!p.hasPermission("command.mute.exempt")) { mute.put(p, null); p.sendMessage(ChatColor.RED + "You have been muted in the public chat."); } } else if (mute.containsKey(p)) { mute.remove(p); p.sendMessage(ChatColor.RED + "You have been unmuted in the public chat."); }} That is basically a condensed version of your fixed code. It is faster and in my opinion easier to read.. There is also no abundance of "returns true" which normally ends the command
Blah1 Assuming that you're trying to do this so you can disable chat or something along those lines, this isn't a very good way to do it. A couple reasons why are That there is no need to loop through every player and mute them, that's unnecessary Players who join afterwards will be unmuted if they weren't previously muted therefore they'll be able to talk A much better way to do this is to have a boolean called chatEnable or something like that. Then, when a player uses the /muteall command the chatEnable boolean will be set to false meaning the chat is disabled. Next, in an AsyncPlayerChatEvent you would check if chatEnable is set to false and if that returns true, cancel the event and do whatever you want to after that. If this isn't what you were intending this command to be used for, just ignore this post.
Loogeh ok I did this, but it still doesn't work Code:java package me.MirrorRealm.kadmin; import org.bukkit.Bukkit;import org.bukkit.ChatColor;import org.bukkit.command.Command;import org.bukkit.command.CommandExecutor;import org.bukkit.command.CommandSender;import org.bukkit.entity.Player;import org.bukkit.event.EventHandler;import org.bukkit.event.Listener;import org.bukkit.event.player.AsyncPlayerChatEvent; public class MuteAll implements CommandExecutor, Listener{ @EventHandler public void onPlayerChatEvent(AsyncPlayerChatEvent event){ Player player = event.getPlayer(); if(chatEnable == true){ event.setCancelled(true); player.sendMessage(ChatColor.RED + "The public chat is muted"); } } boolean chatEnable; public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args){ Player player = (Player) sender; if (cmd.getName().equalsIgnoreCase("muteall")){ if (!(player.hasPermission("command.muteall"))){ player.sendMessage(ChatColor.RED + "You do not have permission."); return true; } if (args.length >= 1){ player.sendMessage(ChatColor.RED + "/muteall"); return true; } chatEnable = true; Bukkit.getServer().broadcastMessage(player.getDisplayName() + ChatColor.RED + " muted the public chat."); } if (cmd.getName().equalsIgnoreCase("unmuteall")){ if (!(player.hasPermission("command.unmuteall"))){ player.sendMessage(ChatColor.RED + "You do not have permission."); return true; } if (args.length >= 1){ player.sendMessage(ChatColor.RED + "/unmuteall"); return true; } if (chatEnable != true){ player.sendMessage(ChatColor.RED + "The public chat is not muted."); return true; }else if (chatEnable == true){ chatEnable = false; Bukkit.getServer().broadcastMessage(player.getDisplayName() + ChatColor.RED + " unmuted the public chat."); } } return true; }}
Blah1 Only thing I can think of is that you didn't register the event properly. This is how I do it I have a variable for my main class and a constructor for the listener class like this Code: public static YourMainClass plugin; public YourListener(YourMainClass instance) { plugin = instance; } Then in onEnable() I use this Code: PluginManager pm = getServer().getPluginManager(); pm.registerEvents(new YourListener (this), this);
Loogeh Works now! Thanks! One question: how do it allow chatting for people with the permission command.muteall.exempt
Blah1 No worrries As for your question, in your AsyncPlayerChatEvent check if the player has the command.muteall.exempt permission and if they do, use event.setCancelled(false).
Loogeh Thanks Lllaaaast thing When I do /muteall it should "broadcast" that the chat is muted but it only tells me... Code:java package me.MirrorRealm.kadmin; import org.bukkit.Bukkit;import org.bukkit.ChatColor;import org.bukkit.command.Command;import org.bukkit.command.CommandExecutor;import org.bukkit.command.CommandSender;import org.bukkit.entity.Player;import org.bukkit.event.EventHandler;import org.bukkit.event.Listener;import org.bukkit.event.player.AsyncPlayerChatEvent; public class MuteAll implements CommandExecutor, Listener{public static Main plugin;public MuteAll(Main instance){plugin = instance;}@EventHandlerpublic void onPlayerChatEvent(AsyncPlayerChatEvent event){Player player = event.getPlayer();if(chatEnable == true){event.setCancelled(true);player.sendMessage(ChatColor.RED + "The public chat is muted.");}if(player.hasPermission("command.muteall.exempt")){event.setCancelled(false);}}boolean chatEnable;public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args){Player player = (Player) sender;if (cmd.getName().equalsIgnoreCase("muteall")){if (!(player.hasPermission("command.muteall"))){player.sendMessage(ChatColor.RED + "You do not have permission.");return true;}if (args.length >= 1){player.sendMessage(ChatColor.RED + "/muteall");return true;}if (chatEnable == true){chatEnable = false;Bukkit.broadcastMessage(player.getDisplayName() + ChatColor.RED + " unmuted the public chat.");return true;}if (chatEnable == false){chatEnable = true;Bukkit.broadcastMessage(player.getDisplayName() + ChatColor.RED + " muted the public chat.");return true;}}if (cmd.getName().equalsIgnoreCase("unmuteall")){if (!(player.hasPermission("command.unmuteall"))){player.sendMessage(ChatColor.RED + "You do not have permission.");return true;}if (args.length >= 1){player.sendMessage(ChatColor.RED + "/unmuteall");return true;}if (chatEnable != true){player.sendMessage(ChatColor.RED + "The public chat is not muted.");return true;}else if (chatEnable == true){chatEnable = false;for (Player o : Bukkit.getOnlinePlayers()){o.sendMessage(player.getDisplayName() + ChatColor.RED + " unmuted the public chat.");}}}return true;}} Line 43 and 48. I've noticed this happening with some other plugins too... I tried: Code:java for (Player o : Bukkit.getOnlinePlayers()){ o.sendMessage(" "); } but that didn't work either...
Blah1 for the broadcasting messages, try Code:java Bukkit.getServer().broadcastMessage(message); EDIT: Also try Code:java plugin.getServer().broadcastMessage(message);
Blah1 I am not sure whats wrong. However To broadcast a message I use this Code:java Bukkit.broadcastMessage("Message Here"); This works like a charm for me. You can try this: Code:java plugin.getServer().broadcastMessage("Message");//However I have not tested that. Good luck and Happy Coding, Mazen
Loogeh Code:java package me.MirrorRealm.kadmin; import org.bukkit.Bukkit;import org.bukkit.ChatColor;import org.bukkit.command.Command;import org.bukkit.command.CommandExecutor;import org.bukkit.command.CommandSender;import org.bukkit.entity.Player;import org.bukkit.event.EventHandler;import org.bukkit.event.Listener;import org.bukkit.event.player.AsyncPlayerChatEvent; public class MuteAll implements CommandExecutor, Listener{ public static Main plugin; public MuteAll(Main instance){ plugin = instance; } @EventHandler public void onPlayerChatEvent(AsyncPlayerChatEvent event){ Player player = event.getPlayer(); if(chatEnable == true){ event.setCancelled(true); player.sendMessage(ChatColor.RED + "The public chat is muted."); } if(player.hasPermission("command.muteall.exempt")){ event.setCancelled(false); } } boolean chatEnable; public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args){ Player player = (Player) sender; if (cmd.getName().equalsIgnoreCase("muteall")){ if (!(player.hasPermission("command.muteall"))){ player.sendMessage("Unknown command. Type " + '"' + "/help" + '"' + " for help."); return true; } if (args.length >= 1){ player.sendMessage(ChatColor.RED + "/muteall"); return true; } if (chatEnable == true){ Bukkit.getServer().broadcastMessage(player.getDisplayName() + ChatColor.RED + " unmuted the public chat."); chatEnable = false; return true; } if (chatEnable == false){ Bukkit.getServer().broadcastMessage(player.getDisplayName() + ChatColor.RED + " muted the public chat."); chatEnable = true; return true; } } if (cmd.getName().equalsIgnoreCase("unmuteall")){ if (!(player.hasPermission("command.unmuteall"))){ player.sendMessage("Unknown command. Type " + '"' + "/help" + '"' + " for help."); return true; } if (args.length >= 1){ player.sendMessage(ChatColor.RED + "/unmuteall"); return true; } if (chatEnable != true){ player.sendMessage(ChatColor.RED + "The public chat is not muted."); return true; }else if (chatEnable == true){ Bukkit.getServer().broadcastMessage(player.getDisplayName() + ChatColor.RED + " unmuted the public chat."); chatEnable = false; } } return true; }}
@Blah1 the if statement on line 37 probably shouldn't return true yet, its causing you to leave before checking the "if (chatEnable == true)" section. Little tip, you don'r have to check if a Boolean resolves to true or false just by itself, it is the true/false
Blah1 Expanding on what holysteward said about checking if true if false... you could just do Code:java if (chatEnable) { // what to do if chat is enabled} else { // what to do if chat is not enabled}
holysteward Goblom Well the code works fine. It's just the broadcast thing that isn't working (it only sends it to the command's sender).
Blah1 Well yes.. Because you have Code:java player.sendMessage(ChatColor.RED + "The public chat is not muted."); player.sendMessage(ChatColor.RED+"The public chat is muted."); Which will only send it to a single player. Use Code:java Bukkit.broadcast(""); to send it to every player on the server
Goblom No those are supposed to be sent to the player. The problem is that it wont broadcast the message on line 42 and 47. It just sends that message to the sender.
To mute all players just do: Code:java boolean muted = false; Then in onCommand for /mute do: Code:java if (muted == false) {muted = true;} else {muted = false;} In your AsyncPlayerChatEvent do: Code:java event.setCancelled(muted);
billman555555 Yeah...but again, the code works fine. It's just the bukkit.broadcastMessage that doesn't work