Guest User

Untitled

a guest
Oct 23rd, 2018
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.29 KB | None | 0 0
  1. public class StatAnalyzer {
  2.  
  3. private static Logger logger = LogManager.getLogger(StatAnalyzer.class);
  4.  
  5. public static void printStatsForAllCharacters() {
  6. for (PlayerClass character : PlayerClass.values()) {
  7. printStatsForCharacter(character);
  8. }
  9. }
  10.  
  11. @SuppressWarnings("unchecked")
  12. public static void printStatsForCharacter(PlayerClass character) {
  13. AbstractPlayer player = CardCrawlGame.characterManager.getAllCharacters().stream()
  14. .filter(c -> c.chosenClass == character).findFirst().orElse(null);
  15. if (player == null) {
  16. logger.warn("The given playerclass was not found");
  17. }
  18.  
  19. printEmptyLine();
  20. logger.info("Printing stats for " + player.title);
  21.  
  22. printEmptyLine();
  23. CardColor cardColor = player.getCardColor();
  24. logger.info("CardColor: " + cardColor.toString());
  25. Set<AbstractCard> cards = CardLibrary.cards.values().stream().filter(card -> card.color == cardColor)
  26. .collect(Collectors.toSet());
  27. logger.info("Cards: " + cards.size());
  28.  
  29. printEmptyLine();
  30. logger.info("Printing rarities");
  31. for (CardRarity rarity : CardRarity.values()) {
  32. printCountFor(cards, rarity.toString(), c -> c.rarity == rarity);
  33. }
  34.  
  35. printEmptyLine();
  36. logger.info("Printing types");
  37. for (CardType type : CardType.values()) {
  38. printCountFor(cards, type.toString(), c -> c.type == type);
  39. }
  40. printEmptyLine();
  41.  
  42. logger.info("Printing costs");
  43. Map<Integer, List<AbstractCard>> costMap = cards.stream().collect(Collectors.groupingBy(c -> c.cost));
  44. costMap.entrySet().stream().sorted((e1, e2) -> e1.getKey() - e2.getKey()).forEachOrdered(e -> {
  45. String name = e.getKey().equals(-1) ? "X" : e.getKey().equals(-2) ? "Unplayable" : e.getKey().toString();
  46. logger.info(name + ": " + e.getValue().size());
  47. });
  48. printEmptyLine();
  49.  
  50. Set<AbstractRelic> relics = new HashSet<>();
  51. switch (character) {
  52. case IRONCLAD:
  53. relics.addAll(
  54. ((HashMap<String, AbstractRelic>) ReflectionHacks.getPrivateStatic(RelicLibrary.class, "redRelics"))
  55. .values());
  56. break;
  57. case THE_SILENT:
  58. relics.addAll(((HashMap<String, AbstractRelic>) ReflectionHacks.getPrivateStatic(RelicLibrary.class,
  59. "greenRelics")).values());
  60. break;
  61. case DEFECT:
  62. relics.addAll(((HashMap<String, AbstractRelic>) ReflectionHacks.getPrivateStatic(RelicLibrary.class,
  63. "blueRelics")).values());
  64. break;
  65. default:
  66. relics.addAll(BaseMod.getRelicsInCustomPool(cardColor).values());
  67. break;
  68. }
  69.  
  70. logger.info("Characterspecific Relics: " + relics.size());
  71. for (RelicTier tier : RelicTier.values()) {
  72. printCountFor(relics, tier.toString(), r -> r.tier == tier);
  73. }
  74. printEmptyLine();
  75.  
  76. // See PotionHelper.initialize(PlayerClass);
  77. long potionCount = 0;
  78. switch (character) {
  79. case IRONCLAD:
  80. case THE_SILENT:
  81. case DEFECT:
  82. potionCount = 1;
  83. break;
  84. default:
  85. potionCount = ((HashMap<String, PlayerClass>) ReflectionHacks.getPrivateStatic(BaseMod.class,
  86. "potionPlayerClassMap")).entrySet().stream().filter(e -> e.getValue() == character).count();
  87. break;
  88. }
  89.  
  90. logger.info("Characterspecific Potions: " + potionCount);
  91.  
  92. }
  93.  
  94. private static void printEmptyLine() {
  95. logger.info("");
  96. }
  97.  
  98. private static <T> void printCountFor(Collection<T> collection, String name, Predicate<T> predicate) {
  99. long count = collection.stream().filter(predicate).count();
  100. if (count > 0) {
  101. logger.info(name + ": " + count);
  102. }
  103. }
  104.  
  105. }
Add Comment
Please, Sign In to add comment