lb bonita

This commit is contained in:
nearfe 2024-06-19 15:37:22 -03:00
parent 9fd1d5c274
commit de85d51556
2 changed files with 133 additions and 14 deletions

View File

@ -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<String> GLOBAL_ELO_LEADERBOARD_LORE = new ArrayList<>();
public static final Map<Kit, List<String>> KIT_SPECIFIC_LEADERBOARD_LORE = new HashMap<>();
public static final Map<Kit, List<String>> KIT_SPECIFIC_LEADERBOARD_LORE_SHORT = new HashMap<>();
public static final Map<Kit, List<String>> 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<UUID, Integer> allEloMap = new HashMap<>();
@ -64,7 +64,6 @@ public class LeaderboardUpdateRunnable implements Runnable {
}
allKillStreaksMap.put(playerUuid, value);
}
});
final List<UUID> sortedUuids = new HashSet<>(allEloMap.keySet()).stream()
@ -76,11 +75,35 @@ public class LeaderboardUpdateRunnable implements Runnable {
final List<String> 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<String> 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());
}
}
}

View File

@ -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<Class<?>> getClasses(ClassLoader classLoader, String packageName) {
Set<Class<?>> classes = new HashSet<>();
String path = packageName.replace('.', '/');
Enumeration<URL> 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;
}
}