vminecraftListener.java 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456
  1. //Vminecraft plugin by nossr50 & TrapAlice
  2. import java.io.IOException;
  3. import java.util.ArrayList;
  4. import java.util.logging.Level;
  5. import java.util.logging.Logger;
  6. public class vminecraftListener extends PluginListener {
  7. protected static final Logger log = Logger.getLogger("Minecraft");
  8. private ArrayList<String> ezmodo = new ArrayList<String>(); //An array of players currently in ezmodo
  9. public void enable() throws IOException {
  10. settings.getInstance().loadSettings(); //Load the settings files
  11. if (etc.getInstance().isHealthEnabled()){
  12. etc.getInstance().addCommand("/ezmodo", "Toggle invulnerability");
  13. }
  14. log.log(Level.INFO, "vminecraft enabled");
  15. }
  16. public void disable() {
  17. log.log(Level.INFO, "vminecraft disabled");
  18. if (etc.getInstance().isHealthEnabled()) {
  19. etc.getInstance().removeCommand("/ezmodo");
  20. }
  21. }
  22. public boolean onHealthChange(Player player,int oldValue,int newValue){
  23. if (player.getHealth() != 30 && ezmodo.contains(player.getName())) {
  24. player.setHealth(30);
  25. }
  26. else if (settings.getInstance().globalmessages() && player.getHealth() < 1) {
  27. other.gmsg(Colors.Gray + player.getName() + " is no more");
  28. }
  29. return false;
  30. }
  31. public boolean onChat(Player player, String message){
  32. String temp2 = "<" + player.getColor() + player.getName() + Colors.White +"> "; //Copies the formatting of id.java
  33. String adminchat = Colors.DarkPurple + "{" + player.getColor() + player.getName() + Colors.DarkPurple +"}" + Colors.White + " "; //Special formatting for adminchat
  34. String message2 = ""; //Used for greentext and FFF
  35. String check = temp2+message; //Calculates how long your message will be including your name in the equation, this prevents minecraft clients from crashing when a color code is inserted after a linebreak
  36. if (settings.getInstance().adminchat()&&message.startsWith("@") && (player.isAdmin() || player.canUseCommand("/adminchat"))) {
  37. for (Player p : etc.getServer().getPlayerList()) {
  38. String blaa = "";
  39. if (p != null) {
  40. if (p.isAdmin() || (p.canUseCommand("/adminchat"))) {
  41. for ( int x = 1; x< message.length(); x++) {
  42. blaa+=message.charAt(x);
  43. }
  44. if (p.isAdmin() || (p.canUseCommand("/adminchat"))){
  45. if (p != null) {
  46. p.sendMessage(adminchat+blaa);
  47. }
  48. }
  49. }
  50. }
  51. }
  52. log.log(Level.INFO, "@"+temp2+message); //So you can read adminchat from the server console
  53. return true;
  54. }
  55. //Greentext
  56. if (settings.getInstance().greentext()&&message.startsWith(">")) {
  57. log.log(Level.INFO, "<"+player.getName()+"> "+message);
  58. message = Colors.LightGreen + message;
  59. message2 = temp2 + message;
  60. other.gmsg(message2);
  61. return true;
  62. }
  63. //FFF
  64. if (settings.getInstance().FFF()&&message.startsWith("FFF")) {
  65. log.log(Level.INFO, "<"+player.getName()+"> "+message);
  66. message = Colors.Red + message;
  67. message2 = temp2 + message;
  68. other.gmsg(message2);
  69. return true;
  70. }
  71. //QuakeColors
  72. if(settings.getInstance().quakeColors()&&message.length()>2 && other.lengthCheck(check)) {
  73. String temp = "";
  74. for(int x = 0; x< message.length(); x++)
  75. {
  76. if(message.charAt(x)=='^'&&x!=message.length()-1)
  77. {
  78. temp+=other.colorChange(message.charAt(x+1));
  79. x+=1;
  80. }
  81. else{
  82. temp+=message.charAt(x);
  83. }
  84. }
  85. log.log(Level.INFO, "<"+player.getName()+"> "+message);
  86. message = temp2 + temp + " ";
  87. for (Player p : etc.getServer().getPlayerList()) {
  88. if (p != null) {
  89. other.gmsg(message);
  90. return true;
  91. }
  92. }
  93. }
  94. return false;
  95. }
  96. public boolean onCommand(Player player, String[] split) {
  97. if(!player.canUseCommand(split[0])) {
  98. return false;
  99. }
  100. if(settings.getInstance().cmdMasstp() && split[0].equalsIgnoreCase("/masstp")) {
  101. for (Player p : etc.getServer().getPlayerList()) {
  102. if (!p.hasControlOver(player)) {
  103. p.teleportTo(player);
  104. }
  105. }
  106. player.sendMessage(Colors.Blue+"Summoning successful.");
  107. }
  108. //Disable using /modify to add commands (need to make a boolean settings for this)
  109. if(split[0].equals("/modify") && split[2].equals("commands")) {
  110. return true;
  111. }
  112. //ezlist
  113. if(settings.getInstance().cmdEzModo() && split[0].equals("/ezlist")) {
  114. player.sendMessage("Ezmodo: " + ezmodo);
  115. return true;
  116. }
  117. //slay
  118. if(settings.getInstance().cmdEzModo() && split[0].equals("/slay")) {
  119. Player playerTarget = etc.getServer().matchPlayer(split[1]);
  120. if (!ezmodo.contains(playerTarget.getName())) {
  121. playerTarget.setHealth(0);
  122. other.gmsg(player.getColor() + player.getName() + Colors.LightBlue + " has slain " + playerTarget.getColor() + playerTarget.getName());
  123. return true;
  124. }
  125. else {
  126. player.sendMessage(Colors.Rose + "That player is currently in ezmodo! Hahahaha");
  127. return true;
  128. }
  129. }
  130. //ezmodo
  131. if (settings.getInstance().cmdEzModo() && split[0].equals("/ezmodo")) {
  132. if (ezmodo.contains(player.getName())) {
  133. player.sendMessage(Colors.Red + "ezmodo = off");
  134. ezmodo.remove(ezmodo.indexOf(player.getName()));
  135. return true;
  136. } else {
  137. player.sendMessage(Colors.LightBlue + "eh- maji? ezmodo!?");
  138. player.sendMessage(Colors.Rose + "kimo-i");
  139. player.sendMessage(Colors.LightBlue + "Easy Mode ga yurusareru no wa shougakusei made dayo ne");
  140. player.sendMessage(Colors.Red + "**Laughter**");
  141. ezmodo.add(player.getName());
  142. player.setHealth(30);
  143. return true;
  144. }
  145. }
  146. //Replacement for /tp
  147. if(settings.getInstance().cmdTp() && split[0].equalsIgnoreCase("/tp")) {
  148. {
  149. if (split.length < 2) {
  150. player.sendMessage(Colors.Rose + "Correct usage is: /tp [player]");
  151. return true;
  152. }
  153. Player playerTarget = etc.getServer().matchPlayer(split[1]);
  154. if (player.getName().equalsIgnoreCase(split[1])) {
  155. player.sendMessage(Colors.Rose + "You're already here!");
  156. return true;
  157. }
  158. if (!player.hasControlOver(playerTarget)) {
  159. player.sendMessage(Colors.Red + "That player has higher permissions than you.");
  160. return true;
  161. }
  162. if (playerTarget != null) {
  163. log.log(Level.INFO, player.getName() + " teleported to " + playerTarget.getName());
  164. player.teleportTo(playerTarget);
  165. return true;
  166. } else {
  167. player.sendMessage(Colors.Rose + "Can't find user " + split[1] + ".");
  168. return true;
  169. }
  170. }
  171. }
  172. //Replacement for /tphere
  173. if (settings.getInstance().cmdTphere() && (split[0].equalsIgnoreCase("/tphere") || split[0].equalsIgnoreCase("/s"))) {
  174. if (split.length < 2) {
  175. player.sendMessage(Colors.Rose + "Correct usage is: /tphere [player]");
  176. return true;
  177. }
  178. Player playerTarget = etc.getServer().matchPlayer(split[1]);
  179. if (!player.hasControlOver(playerTarget)) {
  180. player.sendMessage(Colors.Red + "That player has higher permissions than you.");
  181. return true;
  182. }
  183. if (player.getName().equalsIgnoreCase(split[1])) {
  184. player.sendMessage(Colors.Rose + "Wow look at that! You teleported yourself to yourself!");
  185. return true;
  186. }
  187. if (playerTarget != null) {
  188. log.log(Level.INFO, player.getName() + " teleported " + player.getName() + " to their self.");
  189. playerTarget.teleportTo(player);
  190. } else {
  191. player.sendMessage(Colors.Rose + "Can't find user " + split[1] + ".");
  192. }
  193. }
  194. //Global messages that should only parse when a command can be successful
  195. if(settings.getInstance().globalmessages() && split[0].equalsIgnoreCase("/kick")) {
  196. Player playerTarget = etc.getServer().matchPlayer(split[1]);
  197. if (playerTarget != null && !playerTarget.hasControlOver(player)) {
  198. other.gmsg(player.getColor()+player.getName()+Colors.Blue+" has kicked "+Colors.Red+playerTarget.getColor()+playerTarget.getName());
  199. }
  200. }
  201. if(settings.getInstance().globalmessages() && split[0].equalsIgnoreCase("/ban")) {
  202. Player playerTarget = etc.getServer().matchPlayer(split[1]);
  203. if (playerTarget != null && !playerTarget.hasControlOver(player)) {
  204. other.gmsg(player.getColor()+player.getName()+Colors.Blue+" has banned "+Colors.Red+playerTarget.getColor()+playerTarget.getName());
  205. }
  206. }
  207. if(settings.getInstance().globalmessages() && split[0].equalsIgnoreCase("/ipban")) {
  208. Player playerTarget = etc.getServer().matchPlayer(split[1]);
  209. if (playerTarget != null && !playerTarget.hasControlOver(player)) {
  210. other.gmsg(player.getColor()+player.getName()+Colors.Blue+" has IP banned "+Colors.Red+playerTarget.getColor()+playerTarget.getName());
  211. }
  212. }
  213. if(settings.getInstance().globalmessages() && split[0].equalsIgnoreCase("/time")) {
  214. if (split.length <= 2) {
  215. other.gmsg(Colors.Blue+"Time changes thanks to "+player.getColor()+player.getName());
  216. return false;
  217. }
  218. }
  219. //Should only reload vminecraft settings if the player is able to use /reload
  220. if(split[0].equalsIgnoreCase("/reload") && player.canUseCommand("/reload")) {
  221. try {
  222. settings.getInstance().loadSettings();
  223. } catch (IOException ex) {
  224. Logger.getLogger(vminecraftListener.class.getName()).log(Level.SEVERE, null, ex);
  225. }
  226. return false;
  227. }
  228. //Rules
  229. if(settings.getInstance().cmdRules() && split[0].equalsIgnoreCase("/rules")) {
  230. for (String str : settings.getInstance().getRules()) {
  231. player.sendMessage(Colors.Blue+str);
  232. }
  233. return true;
  234. }
  235. //Fabulous
  236. if(split[0].equalsIgnoreCase("/fabulous") && settings.getInstance().cmdFabulous()) {
  237. if (split.length == 1) {return false;}
  238. String temp = "";
  239. String str = "";
  240. str = etc.combineSplit(1, split, " ");
  241. String temp2 = "<" + player.getName() + "> "+str;
  242. String[] rainbow = new String[] {Colors.Red, Colors.Rose, Colors.Yellow, Colors.Green, Colors.Blue, Colors.LightPurple, Colors.Purple};
  243. int counter=0;
  244. if(other.lengthCheck(temp2))
  245. {
  246. log.log(Level.INFO, player.getName()+" fabulously said \""+ str+"\"");
  247. for(int x=0; x<str.length(); x++)
  248. {
  249. temp+=rainbow[counter]+str.charAt(x);
  250. counter++;
  251. if(str.charAt(x)==' ') { counter--;}
  252. if(counter==-1){counter = 6; }
  253. if(counter==7){counter = 0; }
  254. }
  255. str = temp+" ";
  256. String message = "<" + player.getColor() + player.getName() + Colors.White + "> " + str;
  257. other.gmsg(message);
  258. return true;
  259. } else {
  260. player.sendMessage(Colors.Rose + "Message is too long");
  261. }
  262. return true;
  263. }
  264. /*
  265. //Promote
  266. if (settings.getInstance().cmdPromote() && split[0].equalsIgnoreCase("/promote")) {
  267. if(split.length != 2)
  268. {
  269. player.sendMessage(Colors.Rose + "Usage is /promote [Player]");
  270. }
  271. Player playerTarget = null;
  272. if(split.length==2){
  273. for( Player p : etc.getServer().getPlayerList())
  274. {
  275. if (p.getName().equalsIgnoreCase(split[1]))
  276. {
  277. playerTarget = p;
  278. }
  279. }
  280. if( playerTarget!=null)
  281. {
  282. String playerTargetGroup[] = playerTarget.getGroups();
  283. String playerGroup[] = player.getGroups();
  284. player.sendMessage("Debug data:");
  285. player.sendMessage("PlayerTarget: "+playerTargetGroup[0]);
  286. player.sendMessage("Player: "+playerGroup[0]);
  287. if(playerTargetGroup[0].equals("admins"))
  288. {
  289. player.sendMessage(Colors.Rose + "You can not promote " + split[1] + " any higher.");
  290. }
  291. if(playerTargetGroup[0].equals("mods") && (playerGroup[0].equals("owner")))
  292. {
  293. playerTarget.setGroups(ranks.Admins);
  294. etc.getInstance().getDataSource().modifyPlayer(playerTarget);
  295. String message = Colors.Yellow + split[1] + " was promoted to" + Colors.Rose + " Admin";
  296. other.gmsg(message);
  297. }
  298. else if (playerTargetGroup[0].equals("trusted") && (playerGroup[0].equals("admins") || playerGroup[0].equals("owner")))
  299. {
  300. playerTarget.setGroups(ranks.Mods);
  301. playerTargetGroup[0]="Mods";
  302. etc.getInstance().getDataSource().modifyPlayer(playerTarget);
  303. String message = Colors.Yellow + split[1] + " was promoted to" + Colors.DarkPurple + " Mod";
  304. other.gmsg(message);
  305. }
  306. else if (playerTargetGroup[0].equals("default") && (playerGroup[0].equals("mods") || playerGroup[0].equals("admins") || player.isInGroup("owner")))
  307. {
  308. playerTarget.setGroups(ranks.Trusted);
  309. etc.getInstance().getDataSource().modifyPlayer(playerTarget);
  310. String message = Colors.Yellow + split[1] + " was promoted to" + Colors.LightGreen + " Trusted";
  311. other.gmsg(message);
  312. }
  313. return true;
  314. }
  315. else{
  316. player.sendMessage(Colors.Rose + "Player not found");
  317. }
  318. log.log(Level.INFO, "Command used by " + player + " " + split[0] +" "+split[1]+" ");
  319. }
  320. }
  321. //Demote
  322. if (settings.getInstance().cmdPromote() && split[0].equalsIgnoreCase("/promote"))
  323. {
  324. if(split.length != 2)
  325. {
  326. player.sendMessage(Colors.Rose + "Usage is /demote [Player]");
  327. }
  328. Player playerTarget = null;
  329. for( Player p : etc.getServer().getPlayerList())
  330. {
  331. if (p.getName().equalsIgnoreCase(split[1]))
  332. {
  333. playerTarget = p;
  334. }
  335. }
  336. if( playerTarget!=null)
  337. {
  338. if(playerTarget.isInGroup("admins") && (player.isInGroup("superadmins")))
  339. {
  340. playerTarget.setGroups(ranks.Mods);
  341. etc.getInstance().getDataSource().modifyPlayer(playerTarget);
  342. String message = Colors.Yellow + split[1] + " was demoted to" + Colors.DarkPurple + " Mod";
  343. other.gmsg(message);
  344. }
  345. if(playerTarget.isInGroup("mods") && (player.isInGroup("admins") || player.isInGroup("superadmins")))
  346. {
  347. playerTarget.setGroups(ranks.Trusted);
  348. etc.getInstance().getDataSource().modifyPlayer(playerTarget);
  349. String message = Colors.Yellow + split[1] + " was demoted to" + Colors.LightGreen + " Trusted";
  350. other.gmsg(message);
  351. }
  352. else if (playerTarget.isInGroup("trusted") && (player.isInGroup("mods") || player.isInGroup("superadmins") || player.isInGroup("admins")))
  353. {
  354. playerTarget.setGroups(ranks.Def);
  355. etc.getInstance().getDataSource().modifyPlayer(playerTarget);
  356. String message = Colors.Yellow + split[1] + " was demoted to" + Colors.White + " Default";
  357. other.gmsg(message);
  358. }
  359. else if (playerTarget.isInGroup("default") && (player.isInGroup("mods") || player.isInGroup("admins") || player.isInGroup("superadmins")))
  360. {
  361. player.sendMessage(Colors.Rose + "You can not demote " + split[1] + " any lower.");
  362. }
  363. }
  364. else{
  365. player.sendMessage(Colors.Rose + "Player not found");
  366. }
  367. log.log(Level.INFO, "Command used by " + player + " " + split[0] +" "+split[1]+" ");
  368. return true;
  369. }
  370. *
  371. */
  372. //Whois will display info about a player
  373. if (settings.getInstance().cmdWhoIs() && split[0].equalsIgnoreCase("/whois")) {
  374. if (split.length < 2) {
  375. player.sendMessage(Colors.Rose + "Usage is /whois [player]");
  376. }
  377. String admin ="";
  378. String ignore ="";
  379. String IP = "";
  380. Player playerTarget = null;
  381. for( Player p : etc.getServer().getPlayerList())
  382. {
  383. if (p.getName().equalsIgnoreCase(split[1]))
  384. {
  385. playerTarget = p;
  386. }
  387. }
  388. if (playerTarget != null){
  389. IP = playerTarget.getIP();
  390. if (playerTarget.canIgnoreRestrictions()) {
  391. ignore = "True";
  392. } else {
  393. ignore ="False";
  394. }
  395. if (playerTarget.canIgnoreRestrictions()) {
  396. admin = "True";
  397. } else {
  398. admin = "False";
  399. }
  400. //Displaying the information
  401. player.sendMessage(Colors.Blue + "Whois results for "+split[1]+".");
  402. //Group
  403. for (String group : playerTarget.getGroups()) {
  404. player.sendMessage(Colors.Blue + "Groups: "+group);
  405. }
  406. //Admin
  407. player.sendMessage(Colors.Blue+"Admin: "+admin);
  408. //IP
  409. player.sendMessage(Colors.Blue+"IP: "+IP);
  410. //Restrictions
  411. player.sendMessage(Colors.Blue+"Can ignore restrictions: "+ignore);
  412. } else {
  413. player.sendMessage(Colors.Rose+"Player not found.");
  414. }
  415. return true;
  416. }
  417. //Say
  418. if (settings.getInstance().cmdSay() && (split[0].equalsIgnoreCase("/say"))) {
  419. String sayan;
  420. sayan = etc.combineSplit(1, split, " ");
  421. other.gmsg(Colors.Yellow+sayan);
  422. }
  423. //Should this be included?
  424. else {
  425. return false;
  426. }
  427. //Needs to be included
  428. return true;
  429. }
  430. }