|
package ch.jamiete.quietjoin; |
|
|
|
import java.util.Collections; |
|
import java.util.Set; |
|
import java.util.concurrent.ConcurrentHashMap; |
|
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.EventPriority; |
|
import org.bukkit.event.Listener; |
|
import org.bukkit.event.player.AsyncPlayerChatEvent; |
|
import org.bukkit.event.player.PlayerJoinEvent; |
|
import org.bukkit.plugin.java.JavaPlugin; |
|
|
|
public class QuietJoin extends JavaPlugin implements Listener { |
|
private final Set<String> usernames = Collections.newSetFromMap(new ConcurrentHashMap<String, Boolean>()); |
|
private boolean onlyNew = true; |
|
|
|
@EventHandler(priority = EventPriority.HIGHEST) |
|
public void onAsyncPlayerChat(final AsyncPlayerChatEvent event) { |
|
if (this.usernames.contains(event.getPlayer().getName())) { |
|
event.setCancelled(true); |
|
event.getPlayer().sendMessage(ChatColor.RED + "Your chat is currently hidden. Please use /showchat to view chat and send messages."); |
|
return; |
|
} |
|
|
|
for (final Player player : event.getRecipients()) { |
|
if (this.usernames.contains(player.getName())) { |
|
event.getRecipients().remove(player); |
|
} |
|
} |
|
} |
|
|
|
@Override |
|
public void onEnable() { |
|
if (!this.getConfig().isBoolean("onlynew")) { |
|
this.getConfig().set("onlynew", true); |
|
this.saveConfig(); |
|
this.getLogger().warning("First startup detected (or you deleted your config!). Set value `onlynew` to true (will only target FIRST JOINS)."); |
|
} |
|
this.onlyNew = this.getConfig().getBoolean("onlynew", true); |
|
|
|
this.getServer().getPluginManager().registerEvents(this, this); |
|
|
|
this.getCommand("showchat").setExecutor(new CommandExecutor() { |
|
|
|
@Override |
|
public boolean onCommand(final CommandSender sender, final Command cmd, final String label, final String[] args) { |
|
if (sender instanceof Player) { |
|
if (QuietJoin.this.usernames.contains(sender.getName())) { |
|
QuietJoin.this.usernames.remove(sender.getName()); |
|
sender.sendMessage(ChatColor.GREEN + "You can now see chat."); |
|
} |
|
} else { |
|
sender.sendMessage(ChatColor.RED + "Only players may use that command."); |
|
} |
|
return true; |
|
} |
|
|
|
}); |
|
} |
|
|
|
@EventHandler(priority = EventPriority.MONITOR) |
|
public void onPlayerJoin(final PlayerJoinEvent event) { |
|
if (this.onlyNew && !event.getPlayer().hasPlayedBefore()) { |
|
return; |
|
} |
|
|
|
this.usernames.add(event.getPlayer().getName()); |
|
event.getPlayer().sendMessage(ChatColor.GREEN + "Welcome! Please use /showchat to view chat."); |
|
} |
|
} |