Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- load("loads/items.js")
- load("loads/menuutil.js")
- load("util:levels.js")
- load("util:npcs.js")
- var datautil = systems.byName("datautil")
- var data = database.getDatabase(database.infoService().byName("pvpranks"))
- var nbtTag = "pvpvoucher"
- var currencyid = "@pvpranks"
- var PVPRANK_ATTRIBUTE = exports.getOrDefault(cwd + "/pvprank", bukkit.newAttribute())
- var pvprankvoucher = itemStack("paper")
- itemName(pvprankvoucher, colorize("&6&lPvP Rank Voucher"))
- itemAddGlow(pvprankvoucher)
- var currencyutil = exports.ptr("currencyutil")
- var rankdata = () => currencyutil()(currencyid)
- exports.put("pvprankutils", {
- getCollectableVouchers: getCollectableVouchers,
- getTier: getTier,
- getVoucher: getVoucher
- })
- var CacheBuilder = Java.type("com.google.common.cache.CacheBuilder")
- var cache = CacheBuilder.newBuilder().expireAfterWrite(5, TimeUnit.MINUTES).build()
- 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)
- var config = {
- "unranked": {
- voucher: false,
- tier: 0,
- name: "&7Unranked",
- kills: 0,
- rewards: []
- },
- "rouge": {//dont change dis
- voucher: true,
- tier: 1,
- name: "&d&lRogue",
- kills: 50, // testing
- rewards: [
- "give {name} spawner 1 name:&eCow_Spawner",
- "givecratekey 3 {name} 1"
- ]
- },
- "soldier": {
- voucher: true,
- tier: 2,
- name: "&2&lSoldier",
- kills: 250,
- rewards: [
- "give {name} spawner 1 name:&eBlaze_Spawner",
- "givecratekey 2 {name} 1",
- "givecratekey 1 {name} 2"
- ]
- },
- "warrior": {
- voucher: true,
- tier: 3,
- name: "&b&lWarrior",
- kills: 500,
- rewards: [
- "give {name} spawner 2 name:&eBlaze_Spawner",
- "givecratekey 3 {name} 1",
- "givecratekey 2 {name} 2",
- "givecratekey 1 {name} 3"
- ]
- },
- "knight": {
- voucher: true,
- tier: 4,
- name: "&c&lKnight",
- kills: 750,
- rewards: [
- "give {name} spawner 1 name:&eCreeper_Spawner",
- "give {name} spawner 3 name:&eBlaze_Spawner",
- "givecratekey 4 {name} 1",
- "givecratekey 3 {name} 2",
- "givecratekey 2 {name} 3",
- "givecratekey 1 {name} 4"
- ]
- },
- "legend": {
- voucher: true,
- tier: 5,
- name: "&e&lLegend",
- kills: 1000,
- rewards: [
- "give {name} spawner 1 name:&fIron_Golem_Spawner",
- "give {name} spawner 5 name:&fBlaze_Spawner",
- "give {name} spawner 1 name:&fVillager_Spawner",
- "givecratekey 4 {name} 2",
- "givecratekey 3 {name} 3",
- "givecratekey 2 {name} 4",
- "givecratekey 1 {name} 5"
- ]
- },
- "champion": {
- voucher: true,
- tier: 6,
- name: "&6&lChampion",
- kills: 1500,
- rewards: [
- "give {name} spawner 1 name:&fIron_Golem_Spawner",
- "give {name} spawner 5 name:&fBlaze_Spawner",
- "give {name} spawner 3 name:&fVillager_Spawner",
- "givecratekey 4 {name} 3",
- "givecratekey 3 {name} 4",
- "givecratekey 2 {name} 5",
- "givecratekey 1 {name} 6"
- ]
- }
- }
- function getKills(player) {
- return rankdata().get(player)
- }
- function setKills(player, amount) {
- rankdata().give(player, amount, false)
- }
- function addKill(player) {
- rankdata().give(player, 1, false)
- }
- function getTier(player) {
- return getPlayerData(player).get(PVPRANK_ATTRIBUTE)
- }
- function getAssociatedRank(tier) {
- for (var name in config) {
- var rank = config[name]
- if (rank.tier == tier) {
- return rank
- }
- }
- return config["unranked"]
- }
- function setTier(player, tier) {
- getPlayerData(player).put(PVPRANK_ATTRIBUTE, tier)
- savePlayer(player)
- }
- function getCollectableVouchers(player) {
- var availableVouchers = []
- for (var rankName in config) {
- var rank = config[rankName]
- if (rank.voucher) {
- if (rank.tier <= getTier(player)) {
- continue
- }
- if (rank.kills <= getKills(player)) {
- availableVouchers.push(rank)
- }
- }
- }
- return availableVouchers
- }
- function getPlayerData(player) {
- return bukkit.getAttributes(player).get(PlayerData.attribute)
- }
- function loadPlayer(player) {
- data.async().executeQuery("SELECT tier FROM pvpranks WHERE player_id = ? AND server_id =?", preparedStatement => {
- preparedStatement.setInt(1, getPlayerData(player).getDataId())
- preparedStatement.setInt(2, datautil.getDataId())
- }, result => {
- if (result.next()) {
- getPlayerData(player).put(PVPRANK_ATTRIBUTE, result.getInt(1))
- } else {
- getPlayerData(player).put(PVPRANK_ATTRIBUTE, 0)
- }
- })
- }
- function savePlayer(player) {
- data.async().execute("INSERT INTO pvpranks (player_id, server_id, tier) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE tier = VALUES(tier)", preparedStatement => {
- preparedStatement.setInt(1, getPlayerData(player).getDataId())
- preparedStatement.setInt(2, datautil.getDataId())
- preparedStatement.setInt(3, getTier(player))
- })
- }
- function getVoucher(rank) {
- var voucher = pvprankvoucher.clone()
- itemAddLore(voucher, colorize("&7Click to redeem the " + rank.name + " &7rank!"))
- return itemAttachNBT(voucher, nbtTag, rank.tier)
- }
- function isVoucher(item) {
- return itemHasNBT(item, nbtTag)
- }
- function redeemVoucher(player, item) {
- if (!isVoucher(item)) {
- return
- }
- var rankData = itemGetNBTNumber(item, nbtTag);
- if (rankData === undefined) {
- return;
- }
- var rank = getAssociatedRank(rankData)
- for (var commandIndex in rank.rewards) {
- var command = rank.rewards[commandIndex]
- bukkit.dispatchCommand(command.replace("{name}", player.getName()))
- }
- return rank.tier
- }
- bukkit.registerEvent(PlayerJoinEvent.class, event => {
- loadPlayer(event.getPlayer())
- })
- bukkit.registerEvent(PlayerDeathEvent.class, event => {
- if (event.getEntity().getKiller() instanceof Player) {
- var killer = event.getEntity().getKiller()
- if (cache.getIfPresent(killer.getUniqueId()) == event.getEntity().getUniqueId()) {
- return
- }
- if (killer.getAddress().getAddress().equals(event.getEntity().getAddress().getAddress())) {
- return
- }
- addKill(killer)
- cache.put(killer.getUniqueId(), event.getEntity().getUniqueId())
- }
- })
- bukkit.registerEvent(PlayerInteractEvent.class, event => {
- if (event.getPlayer())
- if (event.getPlayer().getInventory().getItemInHand() == null) {
- return
- }
- var item = event.getPlayer().getInventory().getItemInHand()
- if (!isVoucher(item)) {
- return
- }
- redeemVoucher(event.getPlayer(), item)
- item.setAmount(item.getAmount() - 1)
- event.getPlayer().setItemInHand(item)
- })
- bukkit.aliasCommand("pvprank", "pvpranks")
- bukkit.registerCommand("pvpranks", (player, args) => {
- getRankInfo(player)
- // var rank = getAssociatedRank(getTier(player))
- // player.sendMessage(colorize("&fYour current rank is " + getAssociatedRank(getTier(player)).name))
- // player.sendMessage(colorize("&fYou currently have " + getKills(player) + " kills"))
- })
- bukkit.aliasCommand("givepvpvoucher", "givepvprankvoucher")
- bukkit.registerCommand("givepvprankvoucher", (sender, args) => {
- if (!sender.hasPermission("pvpranks.give")) {
- return
- }
- if (args.length != 2) {
- sender.sendMessage(colorize("&c/givepvprankvoucher <player> <rank>"))
- return
- }
- var player = bukkit.getPlayer(args[0])
- if (!player) {
- sender.sendMessage(colorize("&cSorry, that player is offline!"))
- return
- }
- var rank = config[args[1].toLowerCase()]
- if (rank === undefined) {
- sender.sendMessage(colorize("&cSorry, that's not a valid rank."))
- return;
- }
- player.getInventory().addItem(getVoucher(rank)).forEach((int, item) => player.getWorld().dropItemNaturally(player.getLocation(), item))
- })
- levelNpcs("npc/pvpranks", (registry, location) => {
- var npc = npcBasic(registry, EntityType.PLAYER, colorize("&6PvP Ranks"), location)
- npcSkin(npc, "kkattx")
- npcClick(npc, player => {
- var vouchers = getCollectableVouchers(player)
- if (vouchers.length == 0) {
- getRankInfo(player)
- // player.sendMessage(colorize("&cYou have no vouchers to collect!"))
- // player.sendMessage(colorize("&cYou currently have " + getKills(player) + " kills"))
- return
- }
- var highestTier = 0;
- for (rankIndex in vouchers) {
- var rank = vouchers[rankIndex]
- if (highestTier < rank.tier) {
- highestTier = rank.tier
- }
- player.getInventory().addItem(getVoucher(rank)).forEach((int, item) => player.getWorld().dropItemNaturally(player.getLocation(), item))
- }
- player.sendMessage(colorize("&cYou have redeemed " + vouchers.length + " vouchers!"))
- setTier(player, highestTier)
- })
- return npc
- })
- bukkit.runAsyncTimer(() => {
- cache.cleanUp()
- }, 100, 200)
- bukkit.runSyncLater(() => {
- // exports.getOrDefault("patches/chat/prefixes", {})["skyblock/pvprank"] = (player, prefixText) => {
- // var rank = getAssociatedRank(getTier(player))
- // if (!rank.voucher) {
- // return prefixText
- // }
- // prefixText += colorize("&8[" + rank.name + "&8] ")
- // return prefixText
- // }
- exports.getOrDefault("patches/chat/hover", {})["skyblock/pvprank"] = (player, hoverText) => {
- hoverText += colorize("&cPvP Rank: &f" + getAssociatedRank(getTier(player)).name + "\n")
- return hoverText
- }
- }, 3)
- function getRankInfo(player) {
- var rank = getAssociatedRank(getTier(player))
- for (var rankName in config) {
- var rank = config[rankName]
- if (!rank.description) {
- continue
- }
- player.sendMessage(" ")
- player.sendMessage(colorize(rank.name + " &7&o(" + rank.kills + " kills)"))
- for (var i in rank.description) {
- player.sendMessage(colorize(rank.description[i]))
- }
- }
- player.sendMessage(" ")
- player.sendMessage(colorize("&fYour current rank is " + getAssociatedRank(getTier(player)).name))
- player.sendMessage(colorize("&fYou currently have " + getKills(player) + " kills"))
- player.sendMessage(" ")
- player.sendMessage(colorize("&cTo rank, visit /spawn and click the PvP Rank NPC!"))
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement