hawkeye.txt 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. /*
  2. /hawkeye search <parameters>
  3. Parameters Examples:
  4. p:marvinius,MentorMentos
  5. t:30d,4h,20m
  6. r:10
  7. e:block_break,block_place
  8. */
  9. event.load("block_break");
  10. event.load("block_place");
  11. event.load("block_click");
  12. prefix_hawkeye = "§cHawkeye";
  13. event_map = map.new();
  14. map.add(event_map, "block_break", 1);
  15. map.add(event_map, "block_place", 2);
  16. databank.workerExecute(databank.prepare("CREATE TABLE IF NOT EXISTS hawkeye(
  17. id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  18. player_id INT NOT NULL,
  19. event INT NOT NULL,
  20. world VARCHAR(16) NOT NULL,
  21. x INT NOT NULL,
  22. y INT NOT NULL,
  23. z INT NOT NULL,
  24. time BIGINT NOT NULL,
  25. text VARCHAR(1024) NOT NULL);"));
  26. hawkeye.deleteOlderThanThreeWeeks();
  27. msg("dev", "§bHawkeye §rloaded.");
  28. @wait
  29. wait();
  30. if(event == "block_place") {
  31. item = living.getEquip(player, "hand");
  32. if(hawkeye.isTool(item)) {
  33. if(!perm.has(player, "hawkeye")) {
  34. perm.no(player, "hawkeye");
  35. goto("wait");
  36. }
  37. cancel = true;
  38. list = hawkeye.getData(null, null, block_loc, 1, null, null, "DESC");
  39. if(list.getSize(list) == 0) {
  40. msg.prefix(player, prefix_hawkeye, "No results found.");
  41. goto("wait");
  42. }
  43. hawkeye.setDataList(player, list);
  44. hawkeye.print(player, list, 1);
  45. goto("wait");
  46. }
  47. }
  48. if(event == "block_click") {
  49. item = living.getEquip(player, "hand");
  50. if(action == "left" && hawkeye.isTool(item)) {
  51. if(!perm.has(player, "hawkeye")) {
  52. perm.no(player, "hawkeye");
  53. goto("wait");
  54. }
  55. cancel = true;
  56. list = hawkeye.getData(null, null, block_loc, 1, null, null, "DESC");
  57. if(list.getSize(list) == 0) {
  58. msg.prefix(player, prefix_hawkeye, "No results found.");
  59. goto("wait");
  60. }
  61. hawkeye.setDataList(player, list);
  62. hawkeye.print(player, list, 1);
  63. }
  64. goto("wait");
  65. }
  66. world_name = world.getName(loc.getWorld(block_loc));
  67. if(world.isSurvName(world_name)) {
  68. if(event == "block_break" || event == "block_place") {
  69. if(cancel) {
  70. goto("wait");
  71. }
  72. state = block.getState(block_loc);
  73. state = text.replace(state, "Block{", "");
  74. state = text.replace(state, "}", "");
  75. if(text.length(state) > 1024) {
  76. goto("wait");
  77. }
  78. hawkeye.addEntry(event, player, block_loc, state);
  79. }
  80. }
  81. goto("wait");
  82. function hawkeye.addEntry(event, player, location, text) {
  83. event_id = hawkeye.getEventId(event);
  84. stmt = databank.prepare("INSERT INTO hawkeye (player_id, event, world, x, y, z, time, text) VALUES (?,?,?,?,?,?,?,?)");
  85. modTimer(-5);
  86. databank.setInt(stmt, 1, player.getId(player));
  87. databank.setInt(stmt, 2, event_id);
  88. databank.setString(stmt, 3, world.getName(loc.getWorld(location)));
  89. databank.setInt(stmt, 4, loc.getX(location));
  90. databank.setInt(stmt, 5, loc.getY(location));
  91. databank.setInt(stmt, 6, loc.getZ(location));
  92. databank.setLong(stmt, 7, time.getMillis());
  93. databank.setString(stmt, 8, text);
  94. databank.workerExecute(stmt);
  95. }
  96. function hawkeye.getEventId(event) {
  97. return map.get($event_map, event);
  98. }
  99. function hawkeye.deleteOlderThanThreeWeeks() {
  100. three_weeks_before = time.getMillis() - 21 * 24 * 60 * 60 * 1000;
  101. stmt = databank.prepare("DELETE FROM hawkeye WHERE time < ?;");
  102. databank.setLong(stmt, 1, three_weeks_before);
  103. databank.workerExecute(stmt);
  104. }
  105. function hawkeye.isTool(item) {
  106. lore = item.getLore(item);
  107. if(list.getSize(lore) > 0) {
  108. return list.getIndex(lore, 0) == "Hawkeye Tool";
  109. }
  110. return false;
  111. }