Advertisement
Sevenous

Untitled

Aug 11th, 2019
226
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.76 KB | None | 0 0
  1. load("loads/items.js")
  2. load("loads/menuutil.js")
  3. load("util:levels.js")
  4. load("util:npcs.js")
  5.  
  6. var datautil = systems.byName("datautil")
  7. var data = database.getDatabase(database.infoService().byName("pvpranks"))
  8.  
  9. var nbtTag = "pvpvoucher"
  10. var currencyid = "@pvpranks"
  11.  
  12. var PVPRANK_ATTRIBUTE = exports.getOrDefault(cwd + "/pvprank", bukkit.newAttribute())
  13.  
  14. var pvprankvoucher = itemStack("paper")
  15. itemName(pvprankvoucher, colorize("&6&lPvP Rank Voucher"))
  16. itemAddGlow(pvprankvoucher)
  17.  
  18. var currencyutil = exports.ptr("currencyutil")
  19. var rankdata = () => currencyutil()(currencyid)
  20.  
  21. exports.put("pvprankutils", {
  22. getCollectableVouchers: getCollectableVouchers,
  23. getTier: getTier,
  24. getVoucher: getVoucher
  25.  
  26. })
  27.  
  28.  
  29. var CacheBuilder = Java.type("com.google.common.cache.CacheBuilder")
  30.  
  31. var cache = CacheBuilder.newBuilder().expireAfterWrite(5, TimeUnit.MINUTES).build()
  32.  
  33. data.async().execute("CREATE TABLE IF NOT EXISTS pvpranks (player_id INT(11) NOT NULL, server_id INT(11) NOT NULL, tier INT(2) NOT NULL DEFAULT 1, PRIMARY KEY (player_id, server_id))", null)
  34.  
  35. var config = {
  36. "unranked": {
  37. voucher: false,
  38. tier: 0,
  39. name: "&7Unranked",
  40. kills: 0,
  41. rewards: []
  42. },
  43. "rouge": {//dont change dis
  44. voucher: true,
  45. tier: 1,
  46. name: "&d&lRogue",
  47. kills: 50, // testing
  48. rewards: [
  49. "give {name} spawner 1 name:&eCow_Spawner",
  50. "givecratekey 3 {name} 1"
  51. ]
  52. },
  53. "soldier": {
  54. voucher: true,
  55. tier: 2,
  56. name: "&2&lSoldier",
  57. kills: 250,
  58. rewards: [
  59. "give {name} spawner 1 name:&eBlaze_Spawner",
  60. "givecratekey 2 {name} 1",
  61. "givecratekey 1 {name} 2"
  62. ]
  63. },
  64. "warrior": {
  65. voucher: true,
  66. tier: 3,
  67. name: "&b&lWarrior",
  68. kills: 500,
  69. rewards: [
  70. "give {name} spawner 2 name:&eBlaze_Spawner",
  71. "givecratekey 3 {name} 1",
  72. "givecratekey 2 {name} 2",
  73. "givecratekey 1 {name} 3"
  74. ]
  75. },
  76. "knight": {
  77. voucher: true,
  78. tier: 4,
  79. name: "&c&lKnight",
  80. kills: 750,
  81. rewards: [
  82. "give {name} spawner 1 name:&eCreeper_Spawner",
  83. "give {name} spawner 3 name:&eBlaze_Spawner",
  84. "givecratekey 4 {name} 1",
  85. "givecratekey 3 {name} 2",
  86. "givecratekey 2 {name} 3",
  87. "givecratekey 1 {name} 4"
  88. ]
  89. },
  90. "legend": {
  91. voucher: true,
  92. tier: 5,
  93. name: "&e&lLegend",
  94. kills: 1000,
  95. rewards: [
  96. "give {name} spawner 1 name:&fIron_Golem_Spawner",
  97. "give {name} spawner 5 name:&fBlaze_Spawner",
  98. "give {name} spawner 1 name:&fVillager_Spawner",
  99. "givecratekey 4 {name} 2",
  100. "givecratekey 3 {name} 3",
  101. "givecratekey 2 {name} 4",
  102. "givecratekey 1 {name} 5"
  103. ]
  104. },
  105. "champion": {
  106. voucher: true,
  107. tier: 6,
  108. name: "&6&lChampion",
  109. kills: 1500,
  110. rewards: [
  111. "give {name} spawner 1 name:&fIron_Golem_Spawner",
  112. "give {name} spawner 5 name:&fBlaze_Spawner",
  113. "give {name} spawner 3 name:&fVillager_Spawner",
  114. "givecratekey 4 {name} 3",
  115. "givecratekey 3 {name} 4",
  116. "givecratekey 2 {name} 5",
  117. "givecratekey 1 {name} 6"
  118. ]
  119. }
  120. }
  121.  
  122. function getKills(player) {
  123. return rankdata().get(player)
  124. }
  125.  
  126. function setKills(player, amount) {
  127. rankdata().give(player, amount, false)
  128. }
  129.  
  130. function addKill(player) {
  131. rankdata().give(player, 1, false)
  132. }
  133.  
  134. function getTier(player) {
  135. return getPlayerData(player).get(PVPRANK_ATTRIBUTE)
  136. }
  137.  
  138. function getAssociatedRank(tier) {
  139. for (var name in config) {
  140. var rank = config[name]
  141. if (rank.tier == tier) {
  142. return rank
  143. }
  144. }
  145. return config["unranked"]
  146. }
  147.  
  148. function setTier(player, tier) {
  149. getPlayerData(player).put(PVPRANK_ATTRIBUTE, tier)
  150. savePlayer(player)
  151. }
  152.  
  153. function getCollectableVouchers(player) {
  154. var availableVouchers = []
  155.  
  156. for (var rankName in config) {
  157. var rank = config[rankName]
  158. if (rank.voucher) {
  159. if (rank.tier <= getTier(player)) {
  160. continue
  161. }
  162.  
  163. if (rank.kills <= getKills(player)) {
  164. availableVouchers.push(rank)
  165. }
  166. }
  167. }
  168. return availableVouchers
  169. }
  170.  
  171. function getPlayerData(player) {
  172. return bukkit.getAttributes(player).get(PlayerData.attribute)
  173. }
  174.  
  175. function loadPlayer(player) {
  176. data.async().executeQuery("SELECT tier FROM pvpranks WHERE player_id = ? AND server_id =?", preparedStatement => {
  177. preparedStatement.setInt(1, getPlayerData(player).getDataId())
  178. preparedStatement.setInt(2, datautil.getDataId())
  179. }, result => {
  180. if (result.next()) {
  181. getPlayerData(player).put(PVPRANK_ATTRIBUTE, result.getInt(1))
  182. } else {
  183. getPlayerData(player).put(PVPRANK_ATTRIBUTE, 0)
  184. }
  185. })
  186. }
  187.  
  188. function savePlayer(player) {
  189. data.async().execute("INSERT INTO pvpranks (player_id, server_id, tier) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE tier = VALUES(tier)", preparedStatement => {
  190. preparedStatement.setInt(1, getPlayerData(player).getDataId())
  191. preparedStatement.setInt(2, datautil.getDataId())
  192. preparedStatement.setInt(3, getTier(player))
  193. })
  194. }
  195.  
  196. function getVoucher(rank) {
  197. var voucher = pvprankvoucher.clone()
  198. itemAddLore(voucher, colorize("&7Click to redeem the " + rank.name + " &7rank!"))
  199. return itemAttachNBT(voucher, nbtTag, rank.tier)
  200. }
  201.  
  202. function isVoucher(item) {
  203. return itemHasNBT(item, nbtTag)
  204.  
  205. }
  206.  
  207. function redeemVoucher(player, item) {
  208. if (!isVoucher(item)) {
  209. return
  210. }
  211.  
  212. var rankData = itemGetNBTNumber(item, nbtTag);
  213. if (rankData === undefined) {
  214. return;
  215. }
  216.  
  217. var rank = getAssociatedRank(rankData)
  218.  
  219. for (var commandIndex in rank.rewards) {
  220. var command = rank.rewards[commandIndex]
  221. bukkit.dispatchCommand(command.replace("{name}", player.getName()))
  222. }
  223.  
  224. return rank.tier
  225. }
  226.  
  227. bukkit.registerEvent(PlayerJoinEvent.class, event => {
  228. loadPlayer(event.getPlayer())
  229. })
  230.  
  231. bukkit.registerEvent(PlayerDeathEvent.class, event => {
  232. if (event.getEntity().getKiller() instanceof Player) {
  233. var killer = event.getEntity().getKiller()
  234. if (cache.getIfPresent(killer.getUniqueId()) == event.getEntity().getUniqueId()) {
  235. return
  236. }
  237.  
  238. if (killer.getAddress().getAddress().equals(event.getEntity().getAddress().getAddress())) {
  239. return
  240. }
  241. addKill(killer)
  242. cache.put(killer.getUniqueId(), event.getEntity().getUniqueId())
  243. }
  244. })
  245.  
  246. bukkit.registerEvent(PlayerInteractEvent.class, event => {
  247. if (event.getPlayer())
  248. if (event.getPlayer().getInventory().getItemInHand() == null) {
  249. return
  250. }
  251.  
  252. var item = event.getPlayer().getInventory().getItemInHand()
  253. if (!isVoucher(item)) {
  254. return
  255. }
  256.  
  257. redeemVoucher(event.getPlayer(), item)
  258. item.setAmount(item.getAmount() - 1)
  259. event.getPlayer().setItemInHand(item)
  260. })
  261.  
  262.  
  263. bukkit.aliasCommand("pvprank", "pvpranks")
  264. bukkit.registerCommand("pvpranks", (player, args) => {
  265.  
  266. getRankInfo(player)
  267.  
  268. // var rank = getAssociatedRank(getTier(player))
  269. // player.sendMessage(colorize("&fYour current rank is " + getAssociatedRank(getTier(player)).name))
  270. // player.sendMessage(colorize("&fYou currently have " + getKills(player) + " kills"))
  271. })
  272.  
  273. bukkit.aliasCommand("givepvpvoucher", "givepvprankvoucher")
  274. bukkit.registerCommand("givepvprankvoucher", (sender, args) => {
  275. if (!sender.hasPermission("pvpranks.give")) {
  276. return
  277. }
  278.  
  279. if (args.length != 2) {
  280. sender.sendMessage(colorize("&c/givepvprankvoucher <player> <rank>"))
  281. return
  282. }
  283.  
  284. var player = bukkit.getPlayer(args[0])
  285. if (!player) {
  286. sender.sendMessage(colorize("&cSorry, that player is offline!"))
  287. return
  288. }
  289.  
  290. var rank = config[args[1].toLowerCase()]
  291. if (rank === undefined) {
  292. sender.sendMessage(colorize("&cSorry, that's not a valid rank."))
  293. return;
  294. }
  295.  
  296. player.getInventory().addItem(getVoucher(rank)).forEach((int, item) => player.getWorld().dropItemNaturally(player.getLocation(), item))
  297. })
  298.  
  299. levelNpcs("npc/pvpranks", (registry, location) => {
  300. var npc = npcBasic(registry, EntityType.PLAYER, colorize("&6PvP Ranks"), location)
  301. npcSkin(npc, "kkattx")
  302. npcClick(npc, player => {
  303. var vouchers = getCollectableVouchers(player)
  304. if (vouchers.length == 0) {
  305.  
  306. getRankInfo(player)
  307.  
  308. // player.sendMessage(colorize("&cYou have no vouchers to collect!"))
  309. // player.sendMessage(colorize("&cYou currently have " + getKills(player) + " kills"))
  310. return
  311. }
  312.  
  313. var highestTier = 0;
  314. for (rankIndex in vouchers) {
  315. var rank = vouchers[rankIndex]
  316. if (highestTier < rank.tier) {
  317. highestTier = rank.tier
  318. }
  319. player.getInventory().addItem(getVoucher(rank)).forEach((int, item) => player.getWorld().dropItemNaturally(player.getLocation(), item))
  320. }
  321.  
  322. player.sendMessage(colorize("&cYou have redeemed " + vouchers.length + " vouchers!"))
  323. setTier(player, highestTier)
  324. })
  325. return npc
  326. })
  327.  
  328. bukkit.runAsyncTimer(() => {
  329. cache.cleanUp()
  330. }, 100, 200)
  331.  
  332. bukkit.runSyncLater(() => {
  333. // exports.getOrDefault("patches/chat/prefixes", {})["skyblock/pvprank"] = (player, prefixText) => {
  334. // var rank = getAssociatedRank(getTier(player))
  335. // if (!rank.voucher) {
  336. // return prefixText
  337. // }
  338. // prefixText += colorize("&8[" + rank.name + "&8] ")
  339. // return prefixText
  340. // }
  341.  
  342. exports.getOrDefault("patches/chat/hover", {})["skyblock/pvprank"] = (player, hoverText) => {
  343. hoverText += colorize("&cPvP Rank: &f" + getAssociatedRank(getTier(player)).name + "\n")
  344. return hoverText
  345. }
  346. }, 3)
  347.  
  348. function getRankInfo(player) {
  349. var rank = getAssociatedRank(getTier(player))
  350.  
  351. for (var rankName in config) {
  352. var rank = config[rankName]
  353.  
  354. if (!rank.description) {
  355. continue
  356. }
  357.  
  358. player.sendMessage(" ")
  359. player.sendMessage(colorize(rank.name + " &7&o(" + rank.kills + " kills)"))
  360. for (var i in rank.description) {
  361. player.sendMessage(colorize(rank.description[i]))
  362. }
  363. }
  364.  
  365. player.sendMessage(" ")
  366. player.sendMessage(colorize("&fYour current rank is " + getAssociatedRank(getTier(player)).name))
  367. player.sendMessage(colorize("&fYou currently have " + getKills(player) + " kills"))
  368. player.sendMessage(" ")
  369. player.sendMessage(colorize("&cTo rank, visit /spawn and click the PvP Rank NPC!"))
  370. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement