Advertisement
Guest User

Untitled

a guest
Aug 18th, 2019
490
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 17.99 KB | None | 0 0
  1. package scripts.global
  2.  
  3. import com.ngxdev.arkgroovy.ArkGroovy
  4. import com.ngxdev.arkgroovy.enviorment.Exports
  5. import com.ngxdev.arkgroovy.helper.Commands
  6. import com.ngxdev.arkgroovy.helper.Events
  7. import groovy.transform.Field
  8. import ninja.coelho.arkjs.extern.database.AsyncDatabase
  9. import ninja.coelho.arkjs.extern.database.DatabaseManager
  10. import ninja.coelho.arkjs.system.datautil.ModelDatautilSystem
  11. import org.apache.commons.lang3.mutable.MutableInt
  12. import org.apache.commons.lang3.text.WordUtils
  13. import org.apache.commons.lang3.tuple.Pair
  14. import org.bukkit.Bukkit
  15. import org.bukkit.Material
  16. import org.bukkit.OfflinePlayer
  17. import org.bukkit.entity.Player
  18. import org.bukkit.event.EventPriority
  19. import org.bukkit.event.inventory.InventoryCloseEvent
  20. import org.bukkit.event.player.AsyncPlayerChatEvent
  21. import org.bukkit.inventory.ItemStack
  22. import org.bukkit.scheduler.BukkitTask
  23. import scripts.global.utils.ItemUtils
  24. import scripts.shared.systems.MenuBuilder
  25. import scripts.shared.systems.MenuEvent
  26. import scripts.shared.utils.ArkJsUtils
  27.  
  28. import java.time.LocalDate
  29. import java.time.temporal.WeekFields
  30.  
  31. @Field AsyncDatabase database = null
  32. @Field ModelDatautilSystem databaseUtils = null
  33.  
  34. Bukkit.getScheduler().runTaskAsynchronously(ArkGroovy.plugin, {
  35. while (ArkJsUtils.arkjs.getSystemContext() == null) {}
  36.  
  37. DatabaseManager manager = ArkJsUtils.arkjs.getSystemContext().getDatabaseManager()
  38. this.database = manager.getDatabase(manager.infoService().byName("default")).async()
  39. this.databaseUtils = (ModelDatautilSystem) ArkJsUtils.arkjs.getSystemRepository().byName("datautil")
  40.  
  41. this.database.execute("CREATE TABLE IF NOT EXISTS rt_triviasanswered (server_id INT NOT NULL, week INT NOT NULL, player_uuid_least BIGINT NOT NULL, player_uuid_most BIGINT NOT NULL, count INT NOT NULL, PRIMARY KEY(server_id, week, player_uuid_least, player_uuid_most))", null)
  42. })
  43.  
  44. @Field private final Map<String, Object> config = [
  45. "Geography": [
  46. "What is the capital of the United States?": [
  47. "Washington D.C.",
  48. "Washington D.C",
  49. "Washington DC"
  50. ],
  51. "What is the capital of the United Kingdom?": [
  52. "London"
  53. ],
  54. "What is the capital of Russia?": [
  55. "Moscow"
  56. ],
  57. "What is Earth's largest continent?": [
  58. "Asia"
  59. ],
  60. "What river runs through Baghdad?": [
  61. "Tigris"
  62. ],
  63. "What country has the most natural lakes?": [
  64. "Canada"
  65. ],
  66. "What is the only sea without any coasts?": [
  67. "Sargasso"
  68. ],
  69. "What is the oldest city in the world?": [
  70. "Damascus"
  71. ],
  72. "What is the largest country in South America?": [
  73. "Brazil"
  74. ],
  75. "What is the tallest mountain in the world?": [
  76. "Everest"
  77. ],
  78. "What is the fastest flowing river in the world?": [
  79. "Amazon"
  80. ]
  81. ],
  82. "Science": [
  83. "What is the force that allows satellites to orbit the Earth?": [
  84. "Gravity"
  85. ],
  86. "What is the chemical composition of water?": [
  87. "H2O"
  88. ],
  89. "In what type of matter are atoms most tightly packed?": [
  90. "Solid"
  91. ],
  92. "What planet has the most moons?": [
  93. "Jupiter"
  94. ],
  95. "What hormone does the pancreas produce?": [
  96. "Insulin"
  97. ],
  98. "Mycology is the study of what?": [
  99. "Fungi"
  100. ],
  101. "How many miles of blood vessels are there in the human body?": [
  102. "100,000",
  103. "100000"
  104. ],
  105. "What is the smallest biological unit of a living organism?": [
  106. "Cells"
  107. ],
  108. "What is the only letter of the alphabet that doesn't appear on the Periodic Table?": [
  109. "J"
  110. ],
  111. "What is the largest cell in the human body?": [
  112. "Ovum"
  113. ],
  114. "Which planet has the tallest mountain?": [
  115. "Mars"
  116. ],
  117. "What is the standard unit of kinetic energy?": [
  118. "Joule"
  119. ]
  120. ],
  121. "Math": [
  122. "What does 3 + 3 equal to?": [
  123. "6"
  124. ],
  125. "What are the first 5 numbers of Pi?": [
  126. "3.1415",
  127. "3.1416" // 9 comes after 5 and some people round it
  128. ],
  129. "What is 9 + 10 equal to?": [
  130. "19"
  131. ],
  132. "What is 8 * 7 equal to?": [
  133. "56"
  134. ],
  135. "What is 10 * 0 equal to?": [
  136. "0"
  137. ],
  138. "What is 6 / 3 equal to?": [
  139. "2"
  140. ]
  141. ],
  142. "General Knowledge": [
  143. "Who is the current owner of GotPvP?": [
  144. "Serayne",
  145. "Chris"
  146. ],
  147. "Who is the current developer of GotPvP?": [
  148. "LST",
  149. "Shoot"
  150. ],
  151. "Who is the biggest E-Girl on GotPvP?": [
  152. "Grace"
  153. ],
  154. "Who is the weeb on GotPvP?": [
  155. "Stalin"
  156. ],
  157. "In total, how many gamemodes are on GotPvP?": [
  158. "6"
  159. ],
  160. "What is the color of the Moderator tag on GotPvP?": [
  161. "Blue"
  162. ],
  163. "Who is Serayne's Wife?": [
  164. "Koalas"
  165. ],
  166. "Who is IKoalas' Husband?": [
  167. "Chris",
  168. "Serayne"
  169. ],
  170. "How many letters are in the name GotPvP?": [
  171. "6"
  172. ],
  173. "Who is the current manager of GotPvP?": [
  174. "Jelly",
  175. "James"
  176. ]
  177. ]
  178. ]
  179.  
  180. @Field private final List<Map.Entry<String, List<Map.Entry<String, List<String>>>>> questions = new ArrayList<>()
  181.  
  182. for (Map.Entry<String, Object> entry : this.config.entrySet()) {
  183. this.questions.add(Pair.of(entry.getKey(), new ArrayList<>((entry.getValue() as Map<String, List<String>>).entrySet())))
  184. }
  185.  
  186. @Field private final long questionDelay = 1200 * 30
  187. @Field private synchronized List<String> answers = new ArrayList<>()
  188.  
  189. @Field private BukkitTask task = Bukkit.getScheduler().runTaskTimer(ArkGroovy.plugin, {
  190. startTrivia(this.answers)
  191. }, this.questionDelay, this.questionDelay)
  192.  
  193. def unload() {
  194. this.task.cancel()
  195. }
  196.  
  197. Commands.create().assertPermission("trivia.commands.starttrivia").handler { command ->
  198. startTrivia(this.answers)
  199. }.register("starttrivia")
  200.  
  201. void startTrivia(List<String> answers) {
  202. answers.clear()
  203.  
  204. Random random = new Random()
  205.  
  206. Map.Entry<String, List<Map.Entry<String, List<String>>>> section = this.questions.get(random.nextInt(this.questions.size()))
  207. List<Map.Entry<String, List<String>>> questionsEntries = section.getValue()
  208. Map.Entry<String, List<String>> question = questionsEntries.get(random.nextInt(questionsEntries.size()))
  209.  
  210. answers.addAll(question.getValue())
  211.  
  212. Bukkit.broadcastMessage("\n§d§l" + section.getKey().toUpperCase() + " >> §fA new chat game has started!")
  213. Bukkit.broadcastMessage("§fQ: §e" + question.getKey() + "\n ")
  214. }
  215.  
  216. Events.subscribe(AsyncPlayerChatEvent.class, EventPriority.LOWEST).handler { event ->
  217. if (this.answers.isEmpty()) {
  218. return
  219. }
  220. String message = event.getMessage().toLowerCase()
  221. boolean answered = false
  222.  
  223. for (String answer : this.answers) {
  224. if (message.contains(answer.toLowerCase())) {
  225. answered = true
  226. break
  227. }
  228. }
  229. if (!answered) {
  230. return
  231. }
  232. event.setCancelled(true)
  233. this.answers.clear()
  234.  
  235. Player player = event.getPlayer()
  236. UUID uuid = player.getUniqueId()
  237.  
  238. Bukkit.broadcastMessage("\n§d§lTrivia >> §b" + player.getName() + " §fhas correctly answered the question!\n ")
  239.  
  240. this.database.execute("INSERT INTO rt_triviasanswered (server_id, week, player_uuid_least, player_uuid_most, count) VALUES (?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE count = count + 1", { statement ->
  241. statement.setInt(1, this.databaseUtils.getDataId())
  242. statement.setInt(2, getCurrentWeek())
  243. statement.setLong(3, uuid.getLeastSignificantBits())
  244. statement.setLong(4, uuid.getMostSignificantBits())
  245. statement.setInt(5, 1)
  246. })
  247. }
  248.  
  249. @Field private static final Map<ItemStack, int[]> MENU_DECORATIONS = [
  250. (ItemUtils.createDamagedItem(Material.STAINED_GLASS_PANE, 6, "§0", [])): [ 0, 2, 21, 23, 6, 8 ] as int[],
  251. (ItemUtils.createDamagedItem(Material.STAINED_GLASS_PANE, 2, "§0", [])): [ 18, 20, 3, 5, 24, 26 ] as int[],
  252. (ItemUtils.createDamagedItem(Material.STAINED_GLASS_PANE, 4, "§0", [])): [ 1, 9, 11, 19 ] as int[],
  253. (ItemUtils.createDamagedItem(Material.STAINED_GLASS_PANE, 7, "§0", [])): [ 4, 12, 14, 22 ] as int[],
  254. (ItemUtils.createDamagedItem(Material.STAINED_GLASS_PANE, 12, "§0", [])): [ 7, 15, 17, 25 ] as int[]
  255. ]
  256.  
  257. @Field private static final MenuEvent MENU_EVENT = { p, t, s -> }
  258.  
  259. Commands.create().assertPlayer().handler { command ->
  260. showTriviaTop(command.sender(), this.database, this.databaseUtils)
  261. }.register("trivia", "triviatop")
  262.  
  263. Events.subscribe(InventoryCloseEvent.class).handler { event ->
  264. String name = event.getInventory().getName()
  265.  
  266. if (name == "§bGlobal Trivia Top" || name == "§bWeekly Trivia Top" || name == "§b" + WordUtils.capitalizeFully(Exports.ptr("templeid").toString()) + " Trivia Top") {
  267. Bukkit.getScheduler().runTask(ArkGroovy.plugin, {
  268. showTriviaTop((Player) event.getPlayer(), this.database, this.databaseUtils)
  269. })
  270. }
  271. }
  272.  
  273. private static void showTriviaTop(Player player, AsyncDatabase database, ModelDatautilSystem databaseUtils) {
  274. MenuBuilder builder = new MenuBuilder(27, "§bTrivia Top")
  275.  
  276. for (Map.Entry<ItemStack, int[]> entry : MENU_DECORATIONS.entrySet()) {
  277. ItemStack item = entry.getKey()
  278.  
  279. for (int slot : entry.getValue()) {
  280. builder.set(slot, item, MENU_EVENT)
  281. }
  282. }
  283. builder.set(10, ItemUtils.createItem(Material.WATCH, "§dGlobal Top", []), { p, t, s ->
  284. database.executeQuery("SELECT * FROM rt_triviasanswered", { statement -> }, { result ->
  285. Map<UUID, MutableInt> answered = new HashMap<>()
  286.  
  287. while (result.next()) {
  288. UUID uuid = new UUID(result.getLong(4), result.getLong(3))
  289. answered.computeIfAbsent(uuid, { k -> new MutableInt(0) }).add(result.getInt(5))
  290. }
  291. List<Map.Entry<UUID, MutableInt>> answeredList = new ArrayList<>(answered.entrySet())
  292. answeredList.sort({ entry, entry1 -> return entry1.getValue().compareTo(entry.getValue())})
  293.  
  294. MenuBuilder builder1 = new MenuBuilder(27, "§bGlobal Trivia Top")
  295.  
  296. ItemStack whiteStainedPane = ItemUtils.createDamagedItem(Material.STAINED_GLASS_PANE, 0, "§0", [])
  297.  
  298. for (int i = 0; i < 9; ++i) {
  299. builder1.set(i, whiteStainedPane, MENU_EVENT)
  300. }
  301. for (int i = 9; i < 18; ++i) {
  302. int index = i - 9
  303.  
  304. if (index >= answeredList.size()) {
  305. break
  306. }
  307. Map.Entry<UUID, MutableInt> entry = answeredList.get(index)
  308. OfflinePlayer online = Bukkit.getPlayer(entry.getKey())
  309.  
  310. if (online == null) {
  311. online = Bukkit.getOfflinePlayer(entry.getKey())
  312. }
  313. String name = online.getName()
  314. builder1.set(i, ItemUtils.createSkull(name, "§7" + (index + 1) + ". §a" + name, [ "", "§bCount§7: §d" + entry.getValue().intValue() ]), MENU_EVENT)
  315. }
  316. for (int i = 18; i < 27; ++i) {
  317. builder1.set(i, whiteStainedPane, MENU_EVENT)
  318. }
  319. Bukkit.getScheduler().runTask(ArkGroovy.plugin, {
  320. player.openInventory(builder1.get())
  321. })
  322. })
  323. })
  324. builder.set(13, ItemUtils.createItem(Material.COMPASS, "§dServer Top", []), { p, t, s ->
  325. database.executeQuery("SELECT * FROM rt_triviasanswered WHERE server_id = ?", { statement ->
  326. statement.setInt(1, databaseUtils.getDataId())
  327. }, { result ->
  328. Map<UUID, MutableInt> answered = new HashMap<>()
  329.  
  330. while (result.next()) {
  331. UUID uuid = new UUID(result.getLong(4), result.getLong(3))
  332. answered.computeIfAbsent(uuid, { k -> new MutableInt(0) }).add(result.getInt(5))
  333. }
  334. List<Map.Entry<UUID, MutableInt>> answeredList = new ArrayList<>(answered.entrySet())
  335. answeredList.sort({ entry, entry1 -> return entry1.getValue().compareTo(entry.getValue())})
  336.  
  337. MenuBuilder builder1 = new MenuBuilder(27, "§b" + WordUtils.capitalizeFully(Exports.ptr("templeid").toString()) + " Trivia Top")
  338.  
  339. ItemStack whiteStainedPane = ItemUtils.createDamagedItem(Material.STAINED_GLASS_PANE, 0, "§0", [])
  340.  
  341. for (int i = 0; i < 9; ++i) {
  342. builder1.set(i, whiteStainedPane, MENU_EVENT)
  343. }
  344. for (int i = 9; i < 18; ++i) {
  345. int index = i - 9
  346.  
  347. if (index >= answeredList.size()) {
  348. break
  349. }
  350. Map.Entry<UUID, MutableInt> entry = answeredList.get(index)
  351. OfflinePlayer online = Bukkit.getPlayer(entry.getKey())
  352.  
  353. if (online == null) {
  354. online = Bukkit.getOfflinePlayer(entry.getKey())
  355. }
  356. String name = online.getName()
  357. builder1.set(i, ItemUtils.createSkull(name, "§7" + (index + 1) + ". §a" + name, [ "", "§bCount§7: §d" + entry.getValue().intValue() ]), MENU_EVENT)
  358. }
  359. for (int i = 18; i < 27; ++i) {
  360. builder1.set(i, whiteStainedPane, MENU_EVENT)
  361. }
  362. Bukkit.getScheduler().runTask(ArkGroovy.plugin, {
  363. player.openInventory(builder1.get())
  364. })
  365. })
  366. })
  367. builder.set(16, ItemUtils.createItem(Material.BOOK, "§dWeekly Top", []), { p, t, s ->
  368. showWeeklyTop(database, player, getCurrentWeek())
  369. })
  370. player.openInventory(builder.get())
  371. }
  372.  
  373. static void showWeeklyTop(AsyncDatabase database, Player player, int week) {
  374. database.executeQuery("SELECT * FROM rt_triviasanswered WHERE week = ?", { statement ->
  375. statement.setInt(1, week)
  376. }, { result ->
  377. Map<UUID, MutableInt> answered = new HashMap<>()
  378.  
  379. while (result.next()) {
  380. UUID uuid = new UUID(result.getLong(4), result.getLong(3))
  381. answered.computeIfAbsent(uuid, { k -> new MutableInt(0) }).add(result.getInt(5))
  382. }
  383. List<Map.Entry<UUID, MutableInt>> answeredList = new ArrayList<>(answered.entrySet())
  384. answeredList.sort({ entry, entry1 -> return entry1.getValue().compareTo(entry.getValue())})
  385.  
  386. MenuBuilder builder1 = new MenuBuilder(27, "§bWeekly Trivia Top")
  387.  
  388. ItemStack whiteStainedPane = ItemUtils.createDamagedItem(Material.STAINED_GLASS_PANE, 0, "§0", [])
  389.  
  390. for (int i = 0; i < 9; ++i) {
  391. builder1.set(i, whiteStainedPane, MENU_EVENT)
  392. }
  393. for (int i = 9; i < 18; ++i) {
  394. int index = i - 9
  395.  
  396. if (index >= answeredList.size()) {
  397. break
  398. }
  399. Map.Entry<UUID, MutableInt> entry = answeredList.get(index)
  400. OfflinePlayer online = Bukkit.getPlayer(entry.getKey())
  401.  
  402. if (online == null) {
  403. online = Bukkit.getOfflinePlayer(entry.getKey())
  404. }
  405. String name = online.getName()
  406.  
  407. if (name == null) {
  408. continue
  409. }
  410. builder1.set(i, ItemUtils.createSkull(name, "§7" + (index + 1) + ". §a" + name, [ "", "§bCount§7: §d" + entry.getValue().intValue() ]), MENU_EVENT)
  411. }
  412. for (int i = 18; i < 27; ++i) {
  413. builder1.set(i, whiteStainedPane, MENU_EVENT)
  414. }
  415. Bukkit.getScheduler().runTask(ArkGroovy.plugin, {
  416. player.openInventory(builder1.get())
  417. })
  418. })
  419. }
  420.  
  421. Commands.create().assertPermission("trivia.commands.currentweek").handler { command ->
  422. command.sender().sendMessage(getCurrentWeek().toString())
  423. }.register("currentweek")
  424.  
  425. private static int getCurrentWeek() {
  426. LocalDate date = LocalDate.now()
  427. WeekFields weekFields = WeekFields.of(Locale.getDefault())
  428. return date.get(weekFields.weekOfWeekBasedYear())
  429. }
  430.  
  431. Commands.create().assertPermission("trivia.command.clear").handler { command ->
  432. this.database.execute("DELETE FROM rt_triviasanswered", { statement -> })
  433. command.sender().sendMessage("§aCleared database!")
  434. }.register("cleartrivia")
  435.  
  436. Commands.create().assertPlayer().assertPermission("trivia.command.previoustriviatop").handler { command ->
  437. showWeeklyTop(this.database, command.sender(), getCurrentWeek() - 1)
  438. }.register("previoustriviatop")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement