Created
April 22, 2012 06:22
-
-
Save Double0negative/2461557 to your computer and use it in GitHub Desktop.
ChatLimiter
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package org.curlybrace.double0negative.ChatLimiter; | |
import java.util.Date; | |
import java.util.HashMap; | |
import org.bukkit.ChatColor; | |
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.PlayerChatEvent; | |
import org.bukkit.event.player.PlayerJoinEvent; | |
import org.bukkit.event.player.PlayerMoveEvent; | |
import org.bukkit.event.player.PlayerQuitEvent; | |
import org.bukkit.plugin.java.JavaPlugin; | |
public class ChatLimiter extends JavaPlugin implements Listener{ | |
private long time; | |
private int basePlayers; | |
private boolean blockNoMoved = false; | |
// private int add; | |
private HashMap<Player, PlayerDataHolder>data = new HashMap<Player, PlayerDataHolder>(); | |
private boolean blockDupe = false; | |
public void onEnable(){ | |
getConfig().options().copyDefaults(true); | |
this.saveDefaultConfig(); | |
basePlayers = getConfig().getInt("min-players"); | |
time = getConfig().getLong("delay"); | |
//add = getconfig().getLong("") | |
blockDupe = getConfig().getBoolean("Block-Dupe-Messages"); | |
blockNoMoved = getConfig().getBoolean("Block-Until-Moved"); | |
for(Player p: this.getServer().getOnlinePlayers()){ | |
data.put(p,new PlayerDataHolder()); | |
} | |
this.getServer().getPluginManager().registerEvents(this, this); | |
} | |
@EventHandler(priority = EventPriority.HIGHEST) | |
public void JoinEvent(PlayerJoinEvent e){ | |
data.put(e.getPlayer(), new PlayerDataHolder()); | |
} | |
public void LeaveEvent(PlayerQuitEvent e){ | |
data.remove(e.getPlayer()); | |
} | |
@EventHandler(priority = EventPriority.HIGHEST) | |
public void ChatHandler(PlayerChatEvent e){ | |
PlayerDataHolder pdata = data.get(e.getPlayer()); | |
if(!e.getPlayer().hasPermission("chatlimiter.ignore") || !e.getPlayer().isOp()){ | |
if(!data.get(e.getPlayer()).moved && blockNoMoved){ | |
e.getPlayer().sendMessage(ChatColor.RED + "You must move before chatting!"); | |
e.setCancelled(true); | |
return; | |
} | |
if(getServer().getOnlinePlayers().length > basePlayers){ | |
Long current = new Date().getTime(); | |
current = current / 1000; | |
boolean blocked = false; | |
if(current - pdata.lastMessageTime < time){ | |
e.getPlayer().sendMessage(ChatColor.RED + "You must wait "+ time +" Seconds between messages! (" + (time - (current - pdata.lastMessageTime)) + " remaining)"); | |
e.setCancelled(true); | |
blocked = true; | |
} | |
else{ | |
pdata.lastMessageTime = current; | |
} | |
if(pdata.lastMessage.equals(e.getMessage()) && blockDupe){ | |
e.getPlayer().sendMessage(ChatColor.RED + "Cannot send duplicate messages!"); | |
e.setCancelled(true); | |
} | |
if(!blocked) | |
pdata.lastMessage = e.getMessage(); | |
} | |
} | |
} | |
@EventHandler(priority = EventPriority.HIGHEST) | |
public void MoveHandler(PlayerMoveEvent e){ | |
data.get(e.getPlayer()).moved = true; | |
} | |
class PlayerDataHolder{ | |
boolean moved = false; | |
public long lastMessageTime = 0; | |
public String lastMessage = ""; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hello, looks like ChatLimiter no longer functions in Spigot 1.9 - here's the stacktrace. Thanks!