Advertisement
Guest User

Untitled

a guest
May 25th, 2019
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.36 KB | None | 0 0
  1. package eu.antitab;
  2.  
  3. import java.util.List;
  4. import org.bukkit.command.Command;
  5. import org.bukkit.ChatColor;
  6. import java.util.Map;
  7. import org.bukkit.entity.Player;
  8. import org.bukkit.event.player.PlayerCommandPreprocessEvent;
  9. import com.comphenix.protocol.ProtocolManager;
  10. import com.comphenix.protocol.events.PacketListener;
  11. import org.bukkit.event.EventPriority;
  12. import org.bukkit.event.EventHandler;
  13. import java.util.Iterator;
  14. import org.bukkit.command.ConsoleCommandSender;
  15. import com.comphenix.protocol.events.PacketContainer;
  16. import com.comphenix.protocol.reflect.FieldAccessException;
  17. import org.bukkit.command.CommandSender;
  18. import com.comphenix.protocol.events.PacketEvent;
  19. import org.bukkit.plugin.Plugin;
  20. import com.comphenix.protocol.events.PacketAdapter;
  21. import com.comphenix.protocol.PacketType;
  22. import com.comphenix.protocol.events.ListenerPriority;
  23. import com.comphenix.protocol.ProtocolLibrary;
  24. import org.bukkit.Bukkit;
  25. import java.util.logging.Level;
  26. import java.util.logging.Logger;
  27. import java.io.File;
  28. import java.util.HashMap;
  29. import org.bukkit.configuration.file.FileConfiguration;
  30. import org.bukkit.event.Listener;
  31. import org.bukkit.plugin.java.JavaPlugin;
  32.  
  33. public class AntiTab extends JavaPlugin implements Listener
  34. {
  35. FileConfiguration config;
  36. Boolean everyTab;
  37. Boolean announceConsole;
  38. String noPerm;
  39. String configReloaded;
  40. String successfullyTabAdd;
  41. String successfullyTabDelete;
  42. String successfullyChatAdd;
  43. String successfullyChatDelete;
  44. String invalidArgs;
  45. HashMap<String, String> replacements;
  46.  
  47. public AntiTab() {
  48. this.replacements = new HashMap<String, String>();
  49. }
  50.  
  51. public void onEnable() {
  52. if (!new File(this.getDataFolder(), "config.yml").exists()) {
  53. this.saveDefaultConfig();
  54. }
  55. this.config = this.getConfig();
  56. this.everyTab = this.config.getBoolean("antitab.everyTab");
  57. if (this.getServer().getPluginManager().getPlugin("ProtocolLib") == null) {
  58. Logger.getLogger("Minecraft").log(Level.SEVERE, "Plugin dependency ProtocolLib not found, disabling plugin!");
  59. Bukkit.getPluginManager().disablePlugin(this.getServer().getPluginManager().getPlugin(this.getDescription().getName()));
  60. }
  61. final ProtocolManager protocolManager = ProtocolLibrary.getProtocolManager();
  62. protocolManager.addPacketListener((PacketListener)new PacketAdapter(this, ListenerPriority.NORMAL, new PacketType[] { PacketType.Play.Client.TAB_COMPLETE }) {
  63. @EventHandler(priority = EventPriority.HIGHEST)
  64. public void onPacketReceiving(final PacketEvent event) {
  65. if (event.getPacketType() == PacketType.Play.Client.TAB_COMPLETE) {
  66. try {
  67. final PacketContainer packet = event.getPacket();
  68. final String message = ((String)packet.getSpecificModifier((Class)String.class).read(0)).toLowerCase();
  69. AntiTab.this.announceConsole = AntiTab.this.config.getBoolean("antitab.announceConsole");
  70. final ConsoleCommandSender console = AntiTab.this.getServer().getConsoleSender();
  71. if (AntiTab.this.announceConsole) {
  72. if (event.getPlayer().hasPermission("antitab.commandtab.bypass")) {
  73. AntiTab.this.replacements.put("%p", event.getPlayer().getName());
  74. AntiTab.this.replacements.put("%c", message);
  75. }
  76. else {
  77. for (final String cmd : AntiTab.this.config.getStringList("antitab.blockedcmdsInTab")) {
  78. if (message.startsWith(cmd)) {
  79. AntiTab.this.replacements.put("%p", event.getPlayer().getName());
  80. AntiTab.this.replacements.put("%c", message);
  81. Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "horizon notify " + event.getPlayer().getName() + " §bsuspicious tab complete :\n§c " + message + "[TAB]");
  82. }
  83. }
  84. }
  85. }
  86. if (event.getPlayer().hasPermission("antitab.commandtab.bypass")) {
  87. return;
  88. }
  89. if (AntiTab.this.everyTab) {
  90. if (message.startsWith("") && !message.contains(" ")) {
  91. event.setCancelled(true);
  92. }
  93. }
  94. else {
  95. for (final String cmd : AntiTab.this.config.getStringList("antitab.blockedcmdsInTab")) {
  96. if (message.startsWith("$") && !message.contains(" ")) {
  97. event.setCancelled(true);
  98. }
  99. else if (message.startsWith(cmd)) {
  100. event.setCancelled(true);
  101. }
  102. if (message.contains("$") && !message.contains(" ")) {
  103. event.setCancelled(true);
  104. }
  105. }
  106. }
  107. }
  108. catch (FieldAccessException e) {
  109. AntiTab.this.getLogger().log(Level.SEVERE, "Couldn't access field.", (Throwable)e);
  110. }
  111. }
  112. }
  113. });
  114. this.noPerm = this.config.getString("antitab.messages.noPerm").replaceAll("&", "§");
  115. this.configReloaded = this.config.getString("antitab.messages.configReloaded").replaceAll("&", "§");
  116. this.successfullyTabAdd = this.config.getString("antitab.messages.successfullyTabAdd").replaceAll("&", "§");
  117. this.successfullyTabDelete = this.config.getString("antitab.messages.successfullyTabDelete").replaceAll("&", "§");
  118. this.successfullyChatAdd = this.config.getString("antitab.messages.successfullyChatAdd").replaceAll("&", "§");
  119. this.successfullyChatDelete = this.config.getString("antitab.messages.successfullyChatDelete").replaceAll("&", "§");
  120. this.invalidArgs = this.config.getString("antitab.messages.invalidArgs").replaceAll("&", "§");
  121. Bukkit.getServer().getPluginManager().registerEvents((Listener)this, (Plugin)this);
  122. }
  123.  
  124. @EventHandler(priority = EventPriority.HIGHEST)
  125. public void onCommandPreProcess(final PlayerCommandPreprocessEvent event) {
  126. final Player player = event.getPlayer();
  127. final String[] msg = event.getMessage().split(" ");
  128. if (!player.hasPermission("antitab.commandchat.bypass")) {
  129. for (final String cmd : this.config.getStringList("antitab.blockedcmdsInChat")) {
  130. if (msg[0].startsWith(cmd)) {
  131. this.replacements.put("%perm%", "antitab.commandchat.bypass");
  132. this.sendMessage2(this.noPerm, (CommandSender)player, this.replacements);
  133. event.setCancelled(true);
  134. }
  135. }
  136. }
  137. }
  138.  
  139. public void sendMessage(final String configPath, final CommandSender sender, final HashMap<String, String> replacements) {
  140. if (sender != null) {
  141. String msg = this.getConfig().getString(configPath);
  142. if (replacements != null) {
  143. for (final Map.Entry<String, String> a : replacements.entrySet()) {
  144. msg = msg.replace(a.getKey(), a.getValue());
  145. }
  146. }
  147. sender.sendMessage(ChatColor.translateAlternateColorCodes('&', msg));
  148. }
  149. }
  150.  
  151. public void sendMessage2(String msg, final CommandSender sender, final HashMap<String, String> replacements) {
  152. if (sender != null) {
  153. if (replacements != null) {
  154. for (final Map.Entry<String, String> a : replacements.entrySet()) {
  155. msg = msg.replace(a.getKey(), a.getValue());
  156. }
  157. }
  158. sender.sendMessage(ChatColor.translateAlternateColorCodes('&', msg));
  159. }
  160. }
  161.  
  162. public boolean onCommand(final CommandSender sender, final Command cmd, final String label, final String[] args) {
  163. if (cmd.getName().equalsIgnoreCase("antitab") && sender.hasPermission("antitab.admin")) {
  164. if (args.length == 1) {
  165. final String command = args[0];
  166. if (command.equalsIgnoreCase("reload")) {
  167. if (sender.hasPermission("antitab.admin.reload")) {
  168. this.reloadConfig();
  169. sender.sendMessage(this.configReloaded);
  170. }
  171. }
  172. else if (command.equalsIgnoreCase("blockedtabcmds")) {
  173. if (sender.hasPermission("antitab.listtabcmds")) {
  174. int index = 0;
  175. sender.sendMessage(this.getConfig().getString("antitab.messages.listTabcmds.head").replaceAll("&", "§"));
  176. for (final String cmdlist : this.config.getStringList("antitab.blockedcmdsInTab")) {
  177. ++index;
  178. this.replacements.put("%index%", String.valueOf(index));
  179. this.replacements.put("%cmd%", cmdlist);
  180. this.sendMessage("antitab.messages.listTabcmds.item", sender, this.replacements);
  181. }
  182. sender.sendMessage(this.getConfig().getString("antitab.messages.listTabcmds.bottom").replaceAll("&", "§"));
  183. }
  184. }
  185. else if (command.equalsIgnoreCase("blockedchatcmds")) {
  186. if (sender.hasPermission("antitab.listchatcmds")) {
  187. int index = 0;
  188. sender.sendMessage(this.getConfig().getString("antitab.messages.listChatcmds.head").replaceAll("&", "§"));
  189. for (final String cmdlist : this.config.getStringList("antitab.blockedcmdsInChat")) {
  190. ++index;
  191. this.replacements.put("%index%", String.valueOf(index));
  192. this.replacements.put("%cmd%", cmdlist);
  193. this.sendMessage("antitab.messages.listChatcmds.item", sender, this.replacements);
  194. }
  195. sender.sendMessage(this.getConfig().getString("antitab.messages.listChatcmds.bottom").replaceAll("&", "§"));
  196. }
  197. }
  198. else if (command.equalsIgnoreCase("help")) {
  199. sender.sendMessage("§c**********§6AntiTab§c************");
  200. sender.sendMessage("§3| §6/antitab reload §3| §9reload the config");
  201. sender.sendMessage("§3| §6/antitab blockedtabcmds §3| §9see the blocked tab commands");
  202. sender.sendMessage("§3| §6/antitab blockedchatcmds §3| §9see the blocked chat commands");
  203. sender.sendMessage("§3| §6/antitab addtabcmd <cmd> §3| §9block a tab command");
  204. sender.sendMessage("§3| §6/antitab deltabcmd <cmd> §3| §9unblock a tab command");
  205. sender.sendMessage("§3| §6/antitab addchatcmd <cmd> §3| §9block a chat command");
  206. sender.sendMessage("§3| §6/antitab delchatcmd <cmd> §3| §9unblock a chat command");
  207. sender.sendMessage("§c*****************************");
  208. }
  209. }
  210. else if (args.length == 2) {
  211. final String command = args[0];
  212. final String commandToAdd = args[1];
  213. if (command.equalsIgnoreCase("addtabcmd")) {
  214. if (sender.hasPermission("antitab.admin.addtabcmd")) {
  215. boolean cmdExists = false;
  216. final List<String> tabcmds = (List<String>)this.config.getStringList("antitab.blockedcmdsInTab");
  217. for (final String tabcmd : tabcmds) {
  218. if (tabcmd.equalsIgnoreCase(commandToAdd.replaceAll("_", " "))) {
  219. cmdExists = true;
  220. break;
  221. }
  222. }
  223. if (!cmdExists) {
  224. tabcmds.add(commandToAdd.replaceAll("_", " "));
  225. this.getConfig().set("antitab.blockedcmdsInTab", (Object)tabcmds);
  226. this.saveConfig();
  227. this.reloadConfig();
  228. }
  229. sender.sendMessage(this.successfullyTabAdd.replaceAll("%cmd%", String.valueOf(args[1]).replaceAll("_", " ")));
  230. }
  231. }
  232. else if (command.equalsIgnoreCase("deltabcmd")) {
  233. if (sender.hasPermission("antitab.admin.deltabcmd")) {
  234. boolean cmdExists = false;
  235. final List<String> tabcmds = (List<String>)this.config.getStringList("antitab.blockedcmdsInTab");
  236. for (final String tabcmd : tabcmds) {
  237. if (tabcmd.equalsIgnoreCase(commandToAdd.replaceAll("_", " "))) {
  238. cmdExists = true;
  239. break;
  240. }
  241. }
  242. if (!cmdExists) {
  243. tabcmds.remove(commandToAdd.replaceAll("_", " "));
  244. this.getConfig().set("antitab.blockedcmdsInTab", (Object)tabcmds);
  245. this.saveConfig();
  246. this.reloadConfig();
  247. }
  248. sender.sendMessage(this.successfullyTabDelete.replace("%cmd%", String.valueOf(args[1]).replaceAll("_", " ")));
  249. }
  250. }
  251. else if (command.equalsIgnoreCase("addchatcmd")) {
  252. if (sender.hasPermission("antitab.admin.addchatcmd")) {
  253. boolean cmdExists = false;
  254. final List<String> chatcmds = (List<String>)this.config.getStringList("antitab.blockedcmdsInChat");
  255. for (final String chatcmd : chatcmds) {
  256. if (chatcmd.equalsIgnoreCase(commandToAdd.replaceAll("_", " "))) {
  257. cmdExists = true;
  258. break;
  259. }
  260. }
  261. if (!cmdExists) {
  262. chatcmds.add(commandToAdd.replaceAll("_", " "));
  263. this.getConfig().set("antitab.blockedcmdsInChat", (Object)chatcmds);
  264. this.saveConfig();
  265. this.reloadConfig();
  266. }
  267. sender.sendMessage(this.successfullyChatAdd.replaceAll("%cmd%", String.valueOf(args[1]).replaceAll("_", " ")));
  268. }
  269. }
  270. else if (command.equalsIgnoreCase("delchatcmd") && sender.hasPermission("antitab.admin.delchatcmd")) {
  271. boolean cmdExists = false;
  272. final List<String> chatcmds = (List<String>)this.config.getStringList("antitab.blockedcmdsInChat");
  273. for (final String chatcmd : chatcmds) {
  274. if (chatcmd.equalsIgnoreCase(commandToAdd.replaceAll("_", " "))) {
  275. cmdExists = true;
  276. break;
  277. }
  278. }
  279. if (!cmdExists) {
  280. chatcmds.remove(commandToAdd.replaceAll("_", " "));
  281. this.getConfig().set("antitab.blockedcmdsInChat", (Object)chatcmds);
  282. this.saveConfig();
  283. this.reloadConfig();
  284. }
  285. sender.sendMessage(this.successfullyChatDelete.replaceAll("%cmd%", String.valueOf(args[1]).replaceAll("_", " ")));
  286. }
  287. }
  288. else {
  289. sender.sendMessage(this.invalidArgs);
  290. }
  291. }
  292. return false;
  293. }
  294. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement