mirror of
https://github.com/itHotL/PlayerStats.git
synced 2025-02-01 23:21:20 +01:00
Worked on formatting, started implementing method to get stats below each other at same indentation
This commit is contained in:
parent
af23f05af4
commit
dad332b961
@ -24,16 +24,17 @@ public class ConfigHandler {
|
||||
HashMap<String, ChatColor> chatColors = new HashMap<>();
|
||||
|
||||
ConfigurationSection individual = config.getConfigurationSection("individual-statistics");
|
||||
chatColors.put("playerNames", getChatColor(individual, "player-names"));
|
||||
chatColors.put("statNames", getChatColor(individual, "stat-names"));
|
||||
chatColors.put("subStatNames", getChatColor(individual, "sub-stat-names"));
|
||||
chatColors.put("numbers", getChatColor(individual, "numbers"));
|
||||
chatColors.put("player-names", getChatColor(individual, "player-names"));
|
||||
chatColors.put("stat-names", getChatColor(individual, "stat-names"));
|
||||
chatColors.put("sub-stat-names", getChatColor(individual, "sub-stat-names"));
|
||||
chatColors.put("stat-numbers", getChatColor(individual, "stat-numbers"));
|
||||
|
||||
ConfigurationSection ranked = config.getConfigurationSection("ranked-list");
|
||||
chatColors.put("playerNamesRanked", getChatColor(ranked, "player-names"));
|
||||
chatColors.put("statNamesRanked", getChatColor(ranked, "stat-names"));
|
||||
chatColors.put("subStatNamesRanked", getChatColor(ranked, "sub-stat-names"));
|
||||
chatColors.put("numbersRanked", getChatColor(ranked, "numbers"));
|
||||
chatColors.put("player-names-ranked", getChatColor(ranked, "player-names"));
|
||||
chatColors.put("list-title", getChatColor(ranked, "list-title"));
|
||||
chatColors.put("sub-stat-names-ranked", getChatColor(ranked, "sub-stat-names"));
|
||||
chatColors.put("stat-numbers-ranked", getChatColor(ranked, "stat-numbers"));
|
||||
chatColors.put("list-numbers", getChatColor(ranked, "list-numbers"));
|
||||
return chatColors;
|
||||
}
|
||||
|
||||
|
@ -8,7 +8,6 @@ import org.bukkit.Statistic;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@ -55,49 +54,6 @@ public class StatManager {
|
||||
throw new IllegalArgumentException("Player object for " + playerName + " could not be retrieved!");
|
||||
}
|
||||
|
||||
private int getPlayerStat(@NotNull OfflinePlayer player, @NotNull Statistic stat, String subStatEntryName) throws IllegalArgumentException {
|
||||
String methodName = "getPlayerStat";
|
||||
long time = System.currentTimeMillis();
|
||||
|
||||
switch (stat.getType()) {
|
||||
case UNTYPED -> {
|
||||
return player.getStatistic(stat);
|
||||
}
|
||||
case BLOCK -> {
|
||||
Material block = enumHandler.getBlock(subStatEntryName);
|
||||
plugin.logTimeTaken(className, methodName, time, 68);
|
||||
if (block != null) {
|
||||
return player.getStatistic(stat, block);
|
||||
}
|
||||
else {
|
||||
throw new IllegalArgumentException(subStatEntryName + " is not a valid block name!");
|
||||
}
|
||||
}
|
||||
case ENTITY -> {
|
||||
EntityType entity = enumHandler.getEntityType(subStatEntryName);
|
||||
plugin.logTimeTaken(className, methodName, time, 78);
|
||||
if (entity != null) {
|
||||
return player.getStatistic(stat, entity);
|
||||
}
|
||||
else {
|
||||
throw new IllegalArgumentException(subStatEntryName + " is not a valid entity name!");
|
||||
}
|
||||
}
|
||||
case ITEM -> {
|
||||
Material item = enumHandler.getItem(subStatEntryName);
|
||||
plugin.logTimeTaken(className, methodName, time, 88);
|
||||
if (item != null) {
|
||||
return player.getStatistic(stat, item);
|
||||
}
|
||||
else {
|
||||
throw new IllegalArgumentException(subStatEntryName + " is not a valid item name!");
|
||||
}
|
||||
}
|
||||
default ->
|
||||
throw new IllegalArgumentException("This statistic does not seem to be of type:untyped/block/entity/item, I think we should panic");
|
||||
}
|
||||
}
|
||||
|
||||
public LinkedHashMap<String, Integer> getTopStatistics(String statName, String subStatEntry) throws IllegalArgumentException, NullPointerException {
|
||||
String methodName = "getTopStatistic";
|
||||
long time = System.currentTimeMillis();
|
||||
@ -114,7 +70,10 @@ public class StatManager {
|
||||
OfflinePlayer player = offlinePlayerHandler.getOfflinePlayer(playerName);
|
||||
if (player != null) {
|
||||
try {
|
||||
playerStats.put(playerName, getPlayerStat(player, stat, subStatEntry));
|
||||
int statistic = getPlayerStat(player, stat, subStatEntry);
|
||||
if (statistic > 0) {
|
||||
playerStats.put(playerName, getPlayerStat(player, stat, subStatEntry));
|
||||
}
|
||||
}
|
||||
catch (IllegalArgumentException ignored) {
|
||||
}
|
||||
@ -175,11 +134,6 @@ public class StatManager {
|
||||
throw new NullPointerException("Statistic " + statName + " could not be retrieved!");
|
||||
}
|
||||
|
||||
//checks if string is a valid statistic (param: statName, not case sensitive)
|
||||
public boolean isStatistic(String statName) {
|
||||
return statNames.contains(statName.toLowerCase());
|
||||
}
|
||||
|
||||
//gets the type of the statistic from the string, otherwise returns null (param: statName, not case sensitive)
|
||||
public Statistic.Type getStatType(String statName) {
|
||||
try {
|
||||
@ -205,6 +159,11 @@ public class StatManager {
|
||||
return entityStatNames;
|
||||
}
|
||||
|
||||
//checks if string is a valid statistic (param: statName, not case sensitive)
|
||||
public boolean isStatistic(String statName) {
|
||||
return statNames.contains(statName.toLowerCase());
|
||||
}
|
||||
|
||||
//checks if this statistic is a subStatEntry, meaning it is a block, item or entity (param: statName, not case sensitive)
|
||||
public boolean isSubStatEntry(String statName) {
|
||||
return subStatEntryNames.contains(statName.toLowerCase());
|
||||
@ -236,6 +195,44 @@ public class StatManager {
|
||||
}
|
||||
}
|
||||
|
||||
private int getPlayerStat(@NotNull OfflinePlayer player, @NotNull Statistic stat, String subStatEntryName) throws IllegalArgumentException {
|
||||
|
||||
switch (stat.getType()) {
|
||||
case UNTYPED -> {
|
||||
return player.getStatistic(stat);
|
||||
}
|
||||
case BLOCK -> {
|
||||
Material block = enumHandler.getBlock(subStatEntryName);
|
||||
if (block != null) {
|
||||
return player.getStatistic(stat, block);
|
||||
}
|
||||
else {
|
||||
throw new IllegalArgumentException(subStatEntryName + " is not a valid block name!");
|
||||
}
|
||||
}
|
||||
case ENTITY -> {
|
||||
EntityType entity = enumHandler.getEntityType(subStatEntryName);
|
||||
if (entity != null) {
|
||||
return player.getStatistic(stat, entity);
|
||||
}
|
||||
else {
|
||||
throw new IllegalArgumentException(subStatEntryName + " is not a valid entity name!");
|
||||
}
|
||||
}
|
||||
case ITEM -> {
|
||||
Material item = enumHandler.getItem(subStatEntryName);
|
||||
if (item != null) {
|
||||
return player.getStatistic(stat, item);
|
||||
}
|
||||
else {
|
||||
throw new IllegalArgumentException(subStatEntryName + " is not a valid item name!");
|
||||
}
|
||||
}
|
||||
default ->
|
||||
throw new IllegalArgumentException("This statistic does not seem to be of type:untyped/block/entity/item, I think we should panic");
|
||||
}
|
||||
}
|
||||
|
||||
//returns the statistic enum constant, or null if non-existent (param: statName, not case sensitive)
|
||||
private Statistic getStatisticEnum(String statName) {
|
||||
try {
|
||||
|
@ -73,7 +73,15 @@ public class StatCommand implements CommandExecutor {
|
||||
|
||||
if (topFlag) {
|
||||
try {
|
||||
time = plugin.logTimeTaken("StatCommand", "onCommand", time, 76);
|
||||
LinkedHashMap<String, Integer> topStats = statManager.getTopStatistics(statName, subStatEntry);
|
||||
|
||||
time = plugin.logTimeTaken("StatCommand", "onCommand", time, 79);
|
||||
|
||||
LinkedHashMap<String, Integer> topStats2 = statManager.getTopStatistics2(statName, subStatEntry);
|
||||
time = plugin.logTimeTaken("StatCommand", "onCommand", time, 82);
|
||||
|
||||
sender.sendMessage(outputFormatter.formatTopStats(topStats, statName, subStatEntry));
|
||||
return true;
|
||||
}
|
||||
catch (Exception e) {
|
||||
|
@ -3,17 +3,20 @@ package com.gmail.artemis.the.gr8.playerstats.utils;
|
||||
import com.gmail.artemis.the.gr8.playerstats.ConfigHandler;
|
||||
import com.gmail.artemis.the.gr8.playerstats.Main;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.map.MinecraftFont;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
public class OutputFormatter {
|
||||
|
||||
//keys for the HashMap are:
|
||||
//playerNames(Ranked)
|
||||
//statNames(Ranked)
|
||||
//subStatNames(Ranked)
|
||||
//numbers(Ranked)
|
||||
//keys for the HashMap are the same as the config options:
|
||||
//player-names(-ranked)
|
||||
//stat-names OR list-title
|
||||
//sub-stat-names(-ranked)
|
||||
//stat-numbers(-ranked)
|
||||
//list-numbers
|
||||
|
||||
private final ConfigHandler config;
|
||||
private final Main plugin;
|
||||
private HashMap<String, ChatColor> chatColors;
|
||||
@ -23,14 +26,14 @@ public class OutputFormatter {
|
||||
public OutputFormatter(ConfigHandler c, Main p) {
|
||||
config = c;
|
||||
plugin = p;
|
||||
pluginPrefix = ChatColor.GRAY + "[" + ChatColor.GOLD + "PlayerStats" + ChatColor.GRAY + "]" + ChatColor.RESET;
|
||||
pluginPrefix = ChatColor.GRAY + "[" + ChatColor.GOLD + "PlayerStats" + ChatColor.GRAY + "] " + ChatColor.RESET;
|
||||
|
||||
updateOutputColors();
|
||||
className = "OutputFormatter";
|
||||
}
|
||||
|
||||
public String formatExceptions(String exception) {
|
||||
return pluginPrefix + " " + exception;
|
||||
return pluginPrefix + exception;
|
||||
}
|
||||
|
||||
public String formatPlayerStat(String playerName, String statName, String subStatEntryName, int stat) {
|
||||
@ -39,17 +42,48 @@ public class OutputFormatter {
|
||||
time = plugin.logTimeTaken(className, methodName, time, 39);
|
||||
|
||||
String subStat = subStatEntryName != null ?
|
||||
chatColors.get("subStatNames") + " (" + subStatEntryName.toLowerCase().replace("_", " ") + ")" : "";
|
||||
chatColors.get("sub-stat-names") + " (" + subStatEntryName.toLowerCase().replace("_", " ") + ")" : "";
|
||||
time = plugin.logTimeTaken(className, methodName, time, 43);
|
||||
|
||||
String msg = chatColors.get("playerNames") + playerName + chatColors.get("numbers") + ": " + stat + " " +
|
||||
chatColors.get("statNames") + statName.toLowerCase().replace("_", " ") + subStat;
|
||||
time = plugin.logTimeTaken(className, methodName, time, 47);
|
||||
String msg = chatColors.get("player-names") + playerName + chatColors.get("stat-numbers") + ": " + stat + " " +
|
||||
chatColors.get("stat-names") + statName.toLowerCase().replace("_", " ") + subStat;
|
||||
plugin.logTimeTaken(className, methodName, time, 47);
|
||||
return msg;
|
||||
}
|
||||
|
||||
public String formatTopStats(LinkedHashMap<String, Integer> topStats) {
|
||||
return "";
|
||||
public String formatTopStats(LinkedHashMap<String, Integer> topStats, String statName, String subStatEntryName) {
|
||||
String subStat = subStatEntryName != null ?
|
||||
chatColors.get("sub-stat-names-ranked") + " (" + subStatEntryName.toLowerCase().replace("_", " ") + ")" : "";
|
||||
String topCount = chatColors.get("list-numbers") + " " + topStats.size();
|
||||
String title = pluginPrefix + chatColors.get("list-title") + "Top" + topCount + chatColors.get("list-title") + " " +
|
||||
statName.toLowerCase().replace("_", " ") + subStat;
|
||||
|
||||
int count = 0;
|
||||
final int[] longestName = {0};
|
||||
Set<String> playerNames = topStats.keySet();
|
||||
MinecraftFont font = new MinecraftFont();
|
||||
playerNames.stream().map(font::getWidth).max(Integer::compareTo).orElseThrow();
|
||||
|
||||
try {
|
||||
longestName[0] = playerNames.stream().map(String::length).max(Integer::compareTo).orElseThrow();
|
||||
}
|
||||
catch (NoSuchElementException e) {
|
||||
longestName[0] = 20;
|
||||
}
|
||||
|
||||
|
||||
StringBuilder rankList = new StringBuilder();
|
||||
for (String playerName : playerNames) {
|
||||
count = count+1;
|
||||
|
||||
String spaces = (longestName[0] - playerName.length() > 0) ? " ".repeat(longestName[0] - playerName.length()) : "";
|
||||
rankList.append("\n")
|
||||
.append(chatColors.get("list-numbers")).append(count).append(". ")
|
||||
.append(chatColors.get("player-names-ranked")).append(playerName).append(": ")
|
||||
.append(spaces)
|
||||
.append(chatColors.get("stat-numbers-ranked")).append(topStats.get(playerName).toString());
|
||||
}
|
||||
return title + rankList;
|
||||
}
|
||||
|
||||
public void updateOutputColors() {
|
||||
|
@ -6,10 +6,12 @@ individual-statistics:
|
||||
player-names: gold
|
||||
stat-names: yellow
|
||||
sub-stat-names: yellow
|
||||
numbers: white
|
||||
stat-numbers: white
|
||||
|
||||
ranked-list:
|
||||
player-names: gold
|
||||
stat-names: yellow
|
||||
list-title: white
|
||||
sub-stat-names: yellow
|
||||
numbers: white
|
||||
stat-numbers: white
|
||||
list-numbers: white
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user