diff --git a/src/main/java/land/battle/practice/runnable/LeaderboardUpdateRunnable.java b/src/main/java/land/battle/practice/runnable/LeaderboardUpdateRunnable.java index 92cf4d3..051621d 100644 --- a/src/main/java/land/battle/practice/runnable/LeaderboardUpdateRunnable.java +++ b/src/main/java/land/battle/practice/runnable/LeaderboardUpdateRunnable.java @@ -16,10 +16,10 @@ import land.battle.practice.util.CC; import land.battle.practice.util.division.RankedDivision; import org.bson.Document; +import java.text.DecimalFormat; import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.concurrent.atomic.AtomicInteger; -import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; import java.util.stream.IntStream; @@ -27,11 +27,9 @@ import java.util.stream.IntStream; * @author BattleLand Team * @since 7/29/2021 */ - public class LeaderboardUpdateRunnable implements Runnable { public static final List GLOBAL_ELO_LEADERBOARD_LORE = new ArrayList<>(); - public static final Map> KIT_SPECIFIC_LEADERBOARD_LORE = new HashMap<>(); public static final Map> KIT_SPECIFIC_LEADERBOARD_LORE_SHORT = new HashMap<>(); public static final Map> KIT_SPECIFIC_WIN_STREAK_LORE = new HashMap<>(); @@ -39,6 +37,8 @@ public class LeaderboardUpdateRunnable implements Runnable { @Override public void run() { + DecimalFormat decimalFormat = new DecimalFormat("#,###"); + CompletableFuture.runAsync(() -> { Practice.getInstance().getKitManager().getKits().stream().filter(Kit::isRanked).forEach(kit -> { final Map allEloMap = new HashMap<>(); @@ -64,7 +64,6 @@ public class LeaderboardUpdateRunnable implements Runnable { } allKillStreaksMap.put(playerUuid, value); } - }); final List sortedUuids = new HashSet<>(allEloMap.keySet()).stream() @@ -76,11 +75,35 @@ public class LeaderboardUpdateRunnable implements Runnable { final List loreEloShort = new ArrayList<>(); sortedUuids.forEach(uuid -> { - if (integer.get() != 10) { + if (integer.get() < 3) { // primeiro, segundo e terceiro lugar final Document playerDocument = CorePlugin.getInstance().getCoreDatabase().getPlayerCollection().find(Filters.eq("uuid", uuid.toString())).first(); if (playerDocument != null) { - lore.add(CC.GOLD + "#" + integer.incrementAndGet() + " " + CC.WHITE + playerDocument.getString("name") + CC.GRAY + " - " + CC.YELLOW + allEloMap.getOrDefault(uuid, 1000)); + int rank = integer.incrementAndGet(); + String color = String.valueOf(CC.YELLOW); + String symbol = "✫"; + + switch (rank) { + case 1: + color = String.valueOf(CC.GOLD); + break; + case 2: + color = String.valueOf(CC.GRAY); + break; + case 3: + color = String.valueOf(CC.DARK_GRAY); + break; + } + + lore.add(color + symbol + rank + " " + playerDocument.getString("name") + CC.GRAY + " - " + CC.YELLOW + decimalFormat.format(allEloMap.getOrDefault(uuid, 1000))); + } + } else if (integer.get() >= 3 && integer.get() < 10) { // quarto até o décimo lugar + final Document playerDocument = CorePlugin.getInstance().getCoreDatabase().getPlayerCollection().find(Filters.eq("uuid", uuid.toString())).first(); + + if (playerDocument != null) { + int rank = integer.incrementAndGet(); + + lore.add(String.valueOf(CC.YELLOW) + "#" + rank + " " + playerDocument.getString("name") + CC.GRAY + " - " + CC.YELLOW + decimalFormat.format(allEloMap.getOrDefault(uuid, 1000))); } } }); @@ -90,7 +113,6 @@ public class LeaderboardUpdateRunnable implements Runnable { } LeaderboardUpdateRunnable.KIT_SPECIFIC_LEADERBOARD_LORE_SHORT.put(kit, loreEloShort); - LeaderboardUpdateRunnable.KIT_SPECIFIC_LEADERBOARD_LORE.put(kit, lore); final List loreForKillStreaks = new ArrayList<>(); @@ -103,19 +125,23 @@ public class LeaderboardUpdateRunnable implements Runnable { final AtomicInteger integerForKillStreaks = new AtomicInteger(); sortedUuidsForKillStreaks.forEach(uuid -> { - if (integerForKillStreaks.get() != 10) { + if (integerForKillStreaks.get() < 3) { // primeiro, segundo e terceiro lugar final Document playerDocument = CorePlugin.getInstance().getCoreDatabase().getPlayerCollection().find(Filters.eq("uuid", uuid.toString())).first(); if (playerDocument != null) { - loreForKillStreaks.add(CC.GOLD + "#" + integerForKillStreaks.incrementAndGet() + " " + CC.WHITE + playerDocument.getString("name") + CC.GRAY + " - " + CC.YELLOW + allKillStreaksMap.get(uuid)); + loreForKillStreaks.add(CC.GOLD + "✫" + integerForKillStreaks.incrementAndGet() + " " + CC.WHITE + playerDocument.getString("name") + CC.GRAY + " - " + CC.YELLOW + decimalFormat.format(allKillStreaksMap.get(uuid))); // Adicione decimalFormat aqui + } + } else if (integerForKillStreaks.get() >= 3 && integerForKillStreaks.get() < 10) { // quarto até o décimo lugar + final Document playerDocument = CorePlugin.getInstance().getCoreDatabase().getPlayerCollection().find(Filters.eq("uuid", uuid.toString())).first(); + + if (playerDocument != null) { + loreForKillStreaks.add(CC.YELLOW + "#" + integerForKillStreaks.incrementAndGet() + " " + playerDocument.getString("name") + CC.GRAY + " - " + CC.YELLOW + decimalFormat.format(allKillStreaksMap.get(uuid))); // Adicione decimalFormat aqui } } }); if (loreForKillStreaks.size() >= 3) { - IntStream.range(0, 3).forEach(i -> { - loreForKillStreaksShort.add(" " + loreForKillStreaks.get(i)); - }); + IntStream.range(0, 3).forEach(i -> loreForKillStreaksShort.add(" " + loreForKillStreaks.get(i))); } LeaderboardUpdateRunnable.KIT_SPECIFIC_WIN_STREAK_LORE.put(kit, loreForKillStreaks); @@ -140,7 +166,7 @@ public class LeaderboardUpdateRunnable implements Runnable { final AtomicInteger integer = new AtomicInteger(); sortedUuids.forEach(uuid -> { - if (integer.get() != 11) { + if (integer.get() < 3) { // primeiro, segundo e terceiro lugar final Document playerDocument = CorePlugin.getInstance().getCoreDatabase().getPlayerCollection() .find(Filters.eq("uuid", uuid.toString())).first(); @@ -149,7 +175,37 @@ public class LeaderboardUpdateRunnable implements Runnable { final RankedDivision rankedDivision = RankedDivision.getByGlobalElo(globalElo); if (rankedDivision != null) { - lore.add(CC.GOLD + "#" + integer.incrementAndGet() + " " + CC.WHITE + playerDocument.getString("name") + CC.GRAY + " - " + CC.YELLOW + globalElo + CC.GRAY + " - " + rankedDivision.getFancyName()); + int rank = integer.incrementAndGet(); + String color = String.valueOf(CC.YELLOW); + String symbol = "✫"; + + lore.add(color + symbol + rank + " " + playerDocument.getString("name") + CC.GRAY + " - " + CC.YELLOW + decimalFormat.format(globalElo) + CC.GRAY + " - " + rankedDivision.getFancyName()); // Adic + switch (rank) { + case 1: + color = String.valueOf(CC.GOLD); + break; + case 2: + color = String.valueOf(CC.WHITE); + break; + case 3: + color = String.valueOf(CC.BLACK); + break; + } + + lore.add(color + symbol + rank + " " + playerDocument.getString("name") + CC.GRAY + " - " + CC.YELLOW + decimalFormat.format(globalElo) + CC.GRAY + " - " + rankedDivision.getFancyName()); + } + } + } else if (integer.get() >= 3 && integer.get() < 11) { // quarto até o décimo primeiro lugar + final Document playerDocument = CorePlugin.getInstance().getCoreDatabase().getPlayerCollection() + .find(Filters.eq("uuid", uuid.toString())).first(); + + if (playerDocument != null) { + final int globalElo = globalEloMap.get(uuid); + final RankedDivision rankedDivision = RankedDivision.getByGlobalElo(globalElo); + + if (rankedDivision != null) { + int rank = integer.incrementAndGet(); + lore.add(String.valueOf(CC.YELLOW) + "#" + rank + " " + playerDocument.getString("name") + CC.GRAY + " - " + CC.YELLOW + decimalFormat.format(globalElo) + CC.GRAY + " - " + rankedDivision.getFancyName()); } } } diff --git a/src/main/java/land/battle/practice/util/ClassUtil.java b/src/main/java/land/battle/practice/util/ClassUtil.java new file mode 100644 index 0000000..9bc0d4c --- /dev/null +++ b/src/main/java/land/battle/practice/util/ClassUtil.java @@ -0,0 +1,63 @@ +package land.battle.practice.util; + +import java.io.File; +import java.io.IOException; +import java.net.URL; +import java.util.Enumeration; +import java.util.HashSet; +import java.util.Set; + +public class ClassUtil { + + /** + * Obtém todas as classes dentro de um pacote especificado. + * + * @param classLoader O ClassLoader a ser usado para carregar as classes. + * @param packageName O nome do pacote a ser escaneado. + * @return Um conjunto de classes dentro do pacote especificado. + */ + public static Set> getClasses(ClassLoader classLoader, String packageName) { + Set> classes = new HashSet<>(); + String path = packageName.replace('.', '/'); + Enumeration resources; + + try { + resources = classLoader.getResources(path); + } catch (IOException e) { + e.printStackTrace(); + return classes; + } + + while (resources.hasMoreElements()) { + URL resource = resources.nextElement(); + File directory = new File(resource.getFile()); + + if (!directory.exists()) { + continue; + } + + File[] files = directory.listFiles(); + + if (files == null) { + continue; + } + + for (File file : files) { + if (file.isDirectory()) { + classes.addAll(getClasses(classLoader, packageName + "." + file.getName())); + } else if (file.getName().endsWith(".class")) { + String className = packageName + '.' + file.getName().substring(0, file.getName().length() - 6); + + try { + Class clazz = Class.forName(className); + classes.add(clazz); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + } + } + } + + return classes; + } +}