9
0
mirror of https://github.com/Auxilor/EcoSkills.git synced 2026-01-02 13:56:38 +00:00

Fixed /skills top and improved APi

This commit is contained in:
Auxilor
2021-08-22 22:07:15 +01:00
parent bf57fcf24f
commit 556389a64c
3 changed files with 30 additions and 19 deletions

View File

@@ -72,7 +72,7 @@ public interface EcoSkillsAPI {
* @param player The player.
* @return The average skill level.
*/
double getAverageSkillLevel(@NotNull Player player);
double getAverageSkillLevel(@NotNull OfflinePlayer player);
/**
* Get the total skill level.
@@ -80,7 +80,7 @@ public interface EcoSkillsAPI {
* @param player The player.
* @return The total skill level.
*/
int getTotalSkillLevel(@NotNull Player player);
int getTotalSkillLevel(@NotNull OfflinePlayer player);
/**
* Get the effect level for player.
@@ -89,7 +89,7 @@ public interface EcoSkillsAPI {
* @param effect The effect.
* @return The level.
*/
int getEffectLevel(@NotNull Player player,
int getEffectLevel(@NotNull OfflinePlayer player,
@NotNull Effect effect);
/**
@@ -99,7 +99,7 @@ public interface EcoSkillsAPI {
* @param stat The stat.
* @return The stat level.
*/
int getStatLevel(@NotNull Player player,
int getStatLevel(@NotNull OfflinePlayer player,
@NotNull Stat stat);
/**

View File

@@ -32,11 +32,11 @@ object EcoSkillsAPIImpl: EcoSkillsAPI {
return player.getSkillProgress(skill)
}
override fun getEffectLevel(player: Player, effect: Effect): Int {
override fun getEffectLevel(player: OfflinePlayer, effect: Effect): Int {
return player.getEffectLevel(effect)
}
override fun getStatLevel(player: Player, stat: Stat): Int {
override fun getStatLevel(player: OfflinePlayer, stat: Stat): Int {
return player.getStatLevel(stat)
}
@@ -76,11 +76,11 @@ object EcoSkillsAPIImpl: EcoSkillsAPI {
return player.getStatModifier(key)
}
override fun getAverageSkillLevel(player: Player): Double {
override fun getAverageSkillLevel(player: OfflinePlayer): Double {
return player.getAverageSkillLevel()
}
override fun getTotalSkillLevel(player: Player): Int {
override fun getTotalSkillLevel(player: OfflinePlayer): Int {
return player.getTotalSkillLevel()
}
}

View File

@@ -2,7 +2,6 @@ package com.willfp.ecoskills.commands
import com.willfp.eco.core.EcoPlugin
import com.willfp.eco.core.command.CommandHandler
import com.willfp.eco.core.command.TabCompleteHandler
import com.willfp.eco.core.command.impl.Subcommand
import com.willfp.eco.util.StringUtils
import com.willfp.ecoskills.EcoSkillsPlugin
@@ -10,12 +9,12 @@ import com.willfp.ecoskills.getTotalSkillLevel
import org.bukkit.Bukkit
import org.bukkit.OfflinePlayer
import org.bukkit.command.CommandSender
import org.bukkit.util.StringUtil
import java.util.*
import kotlin.collections.ArrayList
import kotlin.collections.HashMap
import java.util.stream.Collectors
import kotlin.collections.set
import kotlin.math.ceil
class CommandTop(plugin: EcoPlugin) :
Subcommand(
plugin,
@@ -32,14 +31,19 @@ class CommandTop(plugin: EcoPlugin) :
}
val plugin = plugin as EcoSkillsPlugin
val uuidStrings = plugin.dataYml.getSubsectionOrNull("stats")?.getKeys(false) ?: ArrayList()
val uuidStrings = plugin.dataYml.getSubsectionOrNull("player")?.getKeys(false) ?: ArrayList()
val uuids = uuidStrings.stream().map { s -> UUID.fromString(s) }.toList()
val top = TreeMap<OfflinePlayer, Int>()
val temp = LinkedHashMap<OfflinePlayer, Int>()
for (uuid in uuids) {
val player = Bukkit.getOfflinePlayer(uuid)
top[player] = player.getTotalSkillLevel()
temp[player] = player.getTotalSkillLevel()
}
val top = LinkedHashMap<OfflinePlayer, Int>()
for (entry in temp.toList().sortedByDescending { (_, value) -> value }.toMap()) {
top[entry.key] = entry.value
}
val maxPage = ceil(top.size / 10.0).toInt()
@@ -47,22 +51,29 @@ class CommandTop(plugin: EcoPlugin) :
page = maxPage
}
if (page <= 0) {
page = 1
}
val pagePlayers = HashMap<OfflinePlayer, Int>()
val start = (page - 1) * 10
val end = start + 10
val players = top.descendingKeySet().toTypedArray()
val players = top.keys.toTypedArray()
for (i in start..end) {
val player = players[i] ?: continue
pagePlayers[player] = top[player]!!
if (i > players.size - 1) {
break
}
val player = players[i]
pagePlayers[player] = temp[player]!!
}
val messages = plugin.langYml.getStrings("top", false)
val lines = ArrayList<String>()
var rank = start
var rank = start + 1
for (entry in pagePlayers.entries) {
val line = plugin.langYml.getString("top-line-format", false)
.replace("%rank%", rank.toString())