Advertisement
Guest User

Untitled

a guest
Sep 23rd, 2017
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.90 KB | None | 0 0
  1. package com.dumptruckman.spamhammer;
  2.  
  3. import com.dumptruckman.util.io.ConfigIO;
  4. import com.dumptruckman.spamhammer.listeners.SpamHammerPlayerListener;
  5. import org.bukkit.event.Event;
  6. import org.bukkit.event.Event.Type;
  7. import org.bukkit.plugin.PluginManager;
  8. import org.bukkit.plugin.java.JavaPlugin;
  9. import org.bukkit.util.config.Configuration;
  10.  
  11. import java.io.File;
  12. import java.util.*;
  13. import java.util.logging.Logger;
  14.  
  15. import static com.dumptruckman.spamhammer.Config.ConfigPath.*;
  16.  
  17. /**
  18. * @author dumptruckman
  19. */
  20. public class SpamHammer extends JavaPlugin {
  21.  
  22. private final static String PLUGIN_NAME = "SpamHammer";
  23. public static final Logger log = Logger.getLogger("Minecraft.SpamHammer");
  24.  
  25.  
  26. public Configuration config;
  27. public Configuration banList;
  28. private int limit;
  29. private Map<String, ArrayDeque<String>> playerChatHistory;
  30. private List<String> mutedPlayers;
  31. private Map<String, Long> actionTime;
  32. private List<String> beenMuted;
  33. private List<String> beenKicked;
  34. private Timer timer;
  35. public int samecount = 1;
  36. public String lastMessage = null;
  37. public boolean doOnce = false;
  38.  
  39. public SpamHammer() {
  40. playerChatHistory = new HashMap<String, ArrayDeque<String>>();
  41. mutedPlayers = new ArrayList<String>();
  42. beenMuted = new ArrayList<String>();
  43. beenKicked = new ArrayList<String>();
  44. actionTime = new HashMap<String, Long>();
  45. }
  46.  
  47. final public void onEnable() {
  48. // Make the data folders that dChest uses
  49. getDataFolder().mkdirs();
  50.  
  51. // Grab the PluginManager
  52. final PluginManager pm = getServer().getPluginManager();
  53.  
  54. // Register event
  55. pm.registerEvent(Type.PLAYER_CHAT, new SpamHammerPlayerListener(this), Event.Priority.Normal, this);
  56. pm.registerEvent(Type.PLAYER_LOGIN, new SpamHammerPlayerListener(this), Event.Priority.Normal, this);
  57.  
  58. reload();
  59.  
  60. timer = new Timer();
  61. timer.scheduleAtFixedRate(new TimerTask() {
  62. @Override
  63. public void run() {
  64. SpamHammer.this.checkTimes();
  65. }
  66. }, 0, 1000);
  67.  
  68. // Display enable message/version info
  69. log.info(PLUGIN_NAME + " " + getDescription().getVersion() + " enabled.");
  70. }
  71.  
  72. final public void onDisable() {
  73. log.info(PLUGIN_NAME + " " + getDescription().getVersion() + " disabled.");
  74. }
  75.  
  76. final public void reload() {
  77. config = new ConfigIO(new File(this.getDataFolder(), "config.yml")).load();
  78. banList = new ConfigIO(new File(this.getDataFolder(), "banlist.yml")).load();
  79. setDefaults();
  80.  
  81. limit = config.getInt(MUTE_LIMIT.toString(), 0);
  82. if (limit < config.getInt(KICK_LIMIT.toString(), 0)) {
  83. limit = config.getInt(KICK_LIMIT.toString(), 0);
  84. }
  85. if (limit < config.getInt(BAN_LIMIT.toString(), 0)) {
  86. limit = config.getInt(BAN_LIMIT.toString(), 0);
  87. }
  88. config.save();
  89. }
  90.  
  91. final public void setDefaults() {
  92. // Set/Verifies defaults
  93. if (config.getString(MUTE_LIMIT.toString()) == null) {
  94. config.setProperty(MUTE_LIMIT.toString(), MUTE_LIMIT.getDefault());
  95. } else {
  96. try {
  97. int temp = Integer.parseInt(config.getString(MUTE_LIMIT.toString()));
  98. if (temp < 0) {
  99. throw new NumberFormatException("negative");
  100. }
  101. } catch (NumberFormatException nfe) {
  102. log.warning("[" + PLUGIN_NAME + "] Invalid setting for '" + MUTE_LIMIT.getName() + "'."
  103. + " Setting to default: " + MUTE_LIMIT.getDefault());
  104. config.setProperty(MUTE_LIMIT.toString(), MUTE_LIMIT.getDefault());
  105. }
  106. }
  107. if (config.getString(MUTE_LENGTH.toString()) == null) {
  108. config.setProperty(MUTE_LENGTH.toString(), MUTE_LENGTH.getDefault());
  109. } else {
  110. try {
  111. int temp = Integer.parseInt(config.getString(MUTE_LENGTH.toString()));
  112. if (temp < 0) {
  113. throw new NumberFormatException("negative");
  114. }
  115. } catch (NumberFormatException nfe) {
  116. log.warning("[" + PLUGIN_NAME + "] Invalid setting for '" + MUTE_LENGTH.getName() + "'."
  117. + " Setting to default: " + MUTE_LENGTH.getDefault());
  118. config.setProperty(MUTE_LENGTH.toString(), MUTE_LENGTH.getDefault());
  119. }
  120. }
  121. if (config.getString(KICK_LIMIT.toString()) == null) {
  122. config.setProperty(KICK_LIMIT.toString(), KICK_LIMIT.getDefault());
  123. } else {
  124. try {
  125. int temp = Integer.parseInt(config.getString(KICK_LIMIT.toString()));
  126. if (temp < 0) {
  127. throw new NumberFormatException("negative");
  128. }
  129. } catch (NumberFormatException nfe) {
  130. log.warning("[" + PLUGIN_NAME + "] Invalid setting for '" + KICK_LIMIT.getName() + "'."
  131. + " Setting to default: " + KICK_LIMIT.getDefault());
  132. config.setProperty(KICK_LIMIT.toString(), KICK_LIMIT.getDefault());
  133. }
  134. }
  135. if (config.getString(BAN_LIMIT.toString()) == null) {
  136. config.setProperty(BAN_LIMIT.toString(), BAN_LIMIT.getDefault());
  137. } else {
  138. try {
  139. int temp = Integer.parseInt(config.getString(BAN_LIMIT.toString()));
  140. if (temp < 0) {
  141. throw new NumberFormatException("negative");
  142. }
  143. } catch (NumberFormatException nfe) {
  144. log.warning("[" + PLUGIN_NAME + "] Invalid setting for '" + BAN_LIMIT.getName() + "'."
  145. + " Setting to default: " + BAN_LIMIT.getDefault());
  146. config.setProperty(BAN_LIMIT.toString(), BAN_LIMIT.getDefault());
  147. }
  148. }
  149. if (config.getString(COOL_OFF.toString()) == null) {
  150. config.setProperty(COOL_OFF.toString(), COOL_OFF.getDefault());
  151. } else {
  152. try {
  153. int temp = Integer.parseInt(config.getString(COOL_OFF.toString()));
  154. if (temp < 0) {
  155. throw new NumberFormatException("negative");
  156. }
  157. } catch (NumberFormatException nfe) {
  158. log.warning("[" + PLUGIN_NAME + "] Invalid setting for '" + COOL_OFF.getName() + "'."
  159. + " Setting to default: " + COOL_OFF.getDefault());
  160. config.setProperty(COOL_OFF.toString(), COOL_OFF.getDefault());
  161. }
  162. }
  163. if (config.getString(MUTE_MESSAGE.toString()) == null) {
  164. config.setProperty(MUTE_MESSAGE.toString(), MUTE_MESSAGE.getDefault());
  165. }
  166. if (config.getString(UNMUTE_MESSAGE.toString()) == null) {
  167. config.setProperty(UNMUTE_MESSAGE.toString(), UNMUTE_MESSAGE.getDefault());
  168. }
  169. if (config.getString(MUTED_MESSAGE.toString()) == null) {
  170. config.setProperty(MUTED_MESSAGE.toString(), MUTED_MESSAGE.getDefault());
  171. }
  172. if (config.getString(KICK_MESSAGE.toString()) == null) {
  173. config.setProperty(KICK_MESSAGE.toString(), KICK_MESSAGE.getDefault());
  174. }
  175. if (config.getString(BAN_MESSAGE.toString()) == null) {
  176. config.setProperty(BAN_MESSAGE.toString(), BAN_MESSAGE.getDefault());
  177. }
  178. }
  179.  
  180. public void addChatMessage(String name, String message) {
  181. ArrayDeque<String> player = playerChatHistory.get(name);
  182. if (player == null) {
  183. player = new ArrayDeque<String>();
  184. }
  185. player.add(message);
  186. if (player.size() > limit) {
  187. player.remove();
  188. }
  189. playerChatHistory.put(name, player);
  190. }
  191.  
  192. public boolean isMuted(String name) {
  193. return mutedPlayers.contains(name);
  194. }
  195.  
  196. public boolean isBanned(String name) {
  197. List<Object> bannedplayers = banList.getList("banned");
  198. if (bannedplayers == null){
  199. return false;
  200. }
  201. return bannedplayers.contains(name);
  202. }
  203.  
  204. public boolean beenMuted(String name) {
  205. return beenMuted.contains(name);
  206. }
  207.  
  208. public boolean beenKicked(String name) {
  209. return beenKicked.contains(name);
  210. }
  211.  
  212. public void checkSpam(String name) {
  213. int mute = config.getInt(MUTE_LIMIT.toString(), 0);
  214. int kick = config.getInt(KICK_LIMIT.toString(), 0);
  215. int ban = config.getInt(BAN_LIMIT.toString(), 0);
  216. for (Object m : playerChatHistory.get(name).toArray()) {
  217. String message = m.toString();
  218. if (lastMessage == null) {
  219. lastMessage = message;
  220. } else if (message.equals(lastMessage)) {
  221. samecount++;
  222. } else {
  223. playerChatHistory.get(name).clear();
  224. addChatMessage(name, message);
  225. break;
  226. }
  227. if (mute != 0 && !beenMuted(name) && samecount >= mute) {
  228. mutePlayer(name);
  229. playerChatHistory.get(name).clear();
  230. addChatMessage(name, message);
  231. break;
  232. } else if (mute != 0 && !beenMuted(name)) {
  233. break;
  234. }
  235. if (kick != 0 && !beenKicked(name) && samecount >= kick) {
  236. kickPlayer(name);
  237. playerChatHistory.get(name).clear();
  238. addChatMessage(name, message);
  239. break;
  240. } else if (kick != 0 && !beenKicked(name)) {
  241. break;
  242. }
  243. if (ban != 0 && samecount >= ban) {
  244. banPlayer(name);
  245. playerChatHistory.get(name).clear();
  246. addChatMessage(name, message);
  247. break;
  248. }
  249. }
  250. }
  251.  
  252. public void mutePlayer(String name) {
  253. mutedPlayers.add(name);
  254. beenMuted.add(name);
  255. actionTime.put(name, new Date().getTime() / 1000);
  256. String message = config.getString(MUTE_MESSAGE.toString());
  257. message = message.replace("%t", config.getString(MUTE_LENGTH.toString()));
  258. getServer().getPlayer(name).sendMessage(message);
  259. doOnce = false;
  260. }
  261.  
  262. public void unMutePlayer(String name) {
  263. mutedPlayers.remove(name);
  264. if ((getServer().getPlayer(name) != null) && (doOnce == false)) {
  265. getServer().getPlayer(name).sendMessage(config.getString(UNMUTE_MESSAGE.toString()));
  266. doOnce = true;
  267. }
  268. }
  269.  
  270. public void kickPlayer(String name) {
  271. beenKicked.add(name);
  272. actionTime.put(name, new Date().getTime() / 1000);
  273. if (getServer().getPlayer(name) != null) {
  274. getServer().getPlayer(name).kickPlayer(config.getString(KICK_MESSAGE.toString()));
  275. }
  276. }
  277.  
  278. public void banPlayer(String name) {
  279. if (getServer().getPlayer(name) != null) {
  280. getServer().getPlayer(name).kickPlayer(config.getString(BAN_MESSAGE.toString()));
  281. }
  282. List<Object> bannedplayers = banList.getList("banned");
  283. if (bannedplayers == null) {
  284. bannedplayers = new ArrayList<Object>();
  285. }
  286. bannedplayers.add(name);
  287. banList.setProperty("banned", bannedplayers);
  288. banList.save();
  289. }
  290.  
  291. public void checkTimes() {
  292. Long time = new Date().getTime() / 1000;
  293. for (String player : actionTime.keySet()) {
  294. if (isMuted(player)) {
  295. if (time > (actionTime.get(player) + config.getInt(MUTE_LENGTH.toString(), 0))) {
  296. unMutePlayer(player);
  297. }
  298. }
  299. if ((time > (actionTime.get(player) + config.getInt(COOL_OFF.toString(), 300)))
  300. && (config.getInt(COOL_OFF.toString(), 300) != 0)) {
  301. unMutePlayer(player);
  302. }
  303. }
  304. }
  305. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement