Skip to content

Commit f94773e

Browse files
committed
added total bestiary progress display
1 parent 5072c8c commit f94773e

6 files changed

Lines changed: 88 additions & 38 deletions

File tree

type.generic/src/main/java/net/swofty/types/generic/data/datapoints/DatapointBestiary.java

Lines changed: 73 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,13 @@
1010
import net.swofty.types.generic.entity.mob.BestiaryMob;
1111
import net.swofty.types.generic.event.SkyBlockEventHandler;
1212
import net.swofty.types.generic.event.custom.BestiaryUpdateEvent;
13+
import net.swofty.types.generic.gui.inventory.inventories.sbmenu.bestiary.BestiaryCategories;
14+
import net.swofty.types.generic.gui.inventory.inventories.sbmenu.bestiary.BestiaryCategory;
1315
import net.swofty.types.generic.gui.inventory.inventories.sbmenu.bestiary.BestiaryEntry;
1416
import net.swofty.types.generic.user.SkyBlockPlayer;
1517
import org.json.JSONObject;
1618

17-
import java.util.HashMap;
18-
import java.util.List;
19-
import java.util.Map;
19+
import java.util.*;
2020

2121
public class DatapointBestiary extends Datapoint<DatapointBestiary.PlayerBestiary> {
2222

@@ -58,6 +58,8 @@ public static class PlayerBestiary {
5858
@Setter
5959
private SkyBlockPlayer attachedPlayer = null;
6060

61+
BestiaryData bestiaryData = new BestiaryData();
62+
6163
public PlayerBestiary(Map<String, Integer> mobs) {
6264
this.mobs = mobs;
6365
}
@@ -100,8 +102,7 @@ public Integer getAmount(List<BestiaryMob> mobs) {
100102
return kills;
101103
}
102104

103-
public List<String> getDisplay(List<String> lore, int kills, BestiaryMob mob, BestiaryEntry bestiaryEntry) {
104-
BestiaryData bestiaryData = new BestiaryData();
105+
public List<String> getMobDisplay(List<String> lore, int kills, BestiaryMob mob, BestiaryEntry bestiaryEntry) {
105106

106107
int bracket = mob.getBestiaryBracket();
107108
int tier = bestiaryData.getCurrentBestiaryTier(mob, kills);
@@ -171,5 +172,72 @@ public List<String> getDisplay(List<String> lore, int kills, BestiaryMob mob, Be
171172

172173
return lore;
173174
}
175+
176+
public List<String> getTotalDisplay(List<String> lore) {
177+
178+
List<BestiaryEntry> allEntries = new ArrayList<>();
179+
double totalFamilies = 0;
180+
double familiesFound = 0;
181+
double familiesCompleted = 0;
182+
183+
String baseLoadingBar = "─────────────────";
184+
int maxBarLength = baseLoadingBar.length();
185+
int formattingCodeLength = 4;
186+
187+
for (BestiaryCategories category : BestiaryCategories.values()) {
188+
allEntries.addAll(Arrays.asList(category.getEntries()));
189+
}
190+
191+
totalFamilies = allEntries.size();
192+
193+
for (BestiaryEntry entry : allEntries) {
194+
int kills = getAmount(entry.getMobs());
195+
if (kills > 0) familiesFound++;
196+
if (kills >= bestiaryData.getTotalKillsForMaxTier(entry.getMobs().getFirst())) familiesCompleted++;
197+
}
198+
199+
lore.add("§7The Bestiary is a compendium of");
200+
lore.add("§7mobs in SkyBlock. It contains detailed");
201+
lore.add("§7information on loot drops, your mob");
202+
lore.add("§7stats, and more!");
203+
lore.add("");
204+
lore.add("§7Kill mobs within §aFamilies §7to progress");
205+
lore.add("§7and earn §arewards§7, including §b✯ Magic");
206+
lore.add("§bFind §7bonuses towards mobs in the");
207+
lore.add("§7Family.");
208+
lore.add("");
209+
210+
// Families found
211+
int unlockedPercentage = (int) (familiesFound / totalFamilies * 100);
212+
if (familiesFound != totalFamilies) {
213+
lore.add("§7Families Found: §e" + unlockedPercentage + "%");
214+
} else {
215+
lore.add("§7Families Found: §e" + unlockedPercentage + "% §7(§c§lMAX!§7)");
216+
}
217+
218+
int completedLength = (int) Math.round((familiesFound / totalFamilies) * maxBarLength);
219+
220+
String completedLoadingBar = "§3§m" + baseLoadingBar.substring(0, Math.min(completedLength, maxBarLength));
221+
String uncompletedLoadingBar = "§f§m" + baseLoadingBar.substring(Math.min(completedLoadingBar.length() - formattingCodeLength, maxBarLength));
222+
223+
lore.add(completedLoadingBar + uncompletedLoadingBar + "§r §b" + StringUtility.commaify(familiesFound) + "§3/§b" + StringUtility.shortenNumber(totalFamilies));
224+
lore.add("");
225+
226+
// Families completed
227+
int totalUnlockedPercentage = (int) (familiesCompleted / totalFamilies * 100);
228+
if (familiesCompleted != totalFamilies) {
229+
lore.add("§7Families Completed: §e" + totalUnlockedPercentage + "%");
230+
} else {
231+
lore.add("§7Families Completed: §e" + totalUnlockedPercentage + "% §7(§c§lMAX!§7)");
232+
}
233+
234+
int totalCompletedLength = (int) Math.round((familiesCompleted / totalFamilies) * maxBarLength);
235+
String totalCompletedBar = "§3§m" + baseLoadingBar.substring(0, Math.min(totalCompletedLength, maxBarLength));
236+
String totalUncompletedBar = "§f§m" + baseLoadingBar.substring(Math.min(totalCompletedBar.length() - formattingCodeLength, maxBarLength));
237+
238+
lore.add(totalCompletedBar + totalUncompletedBar + "§r §b" + StringUtility.commaify(familiesCompleted) + "§3/§b" + StringUtility.shortenNumber(totalFamilies));
239+
240+
return lore;
241+
}
174242
}
175243
}

type.generic/src/main/java/net/swofty/types/generic/gui/inventory/inventories/sbmenu/bestiary/BestiaryCategory.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import lombok.Getter;
44
import net.minestom.server.item.Material;
5-
import net.swofty.commons.item.ItemType;
65
import net.swofty.types.generic.entity.mob.BestiaryMob;
76
import net.swofty.types.generic.entity.mob.mobs.hub.MobGraveyardZombie;
87
import net.swofty.types.generic.entity.mob.mobs.hub.MobGraveyardZombieVillager;

type.generic/src/main/java/net/swofty/types/generic/gui/inventory/inventories/sbmenu/bestiary/GUIBestiary.java

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@
1515
import net.swofty.types.generic.skill.SkillCategories;
1616
import net.swofty.types.generic.user.SkyBlockPlayer;
1717

18+
import java.util.ArrayList;
19+
import java.util.List;
20+
1821

1922
public class GUIBestiary extends SkyBlockInventoryGUI {
2023

@@ -73,21 +76,10 @@ public void onOpen(InventoryGUIOpenEvent e) {
7376
set(new GUIItem(4) {
7477
@Override
7578
public ItemStack.Builder getItem(SkyBlockPlayer player) {
76-
return ItemStackCreator.getStack("§3Bestiary", Material.WRITTEN_BOOK, 1,
77-
"§7The Bestiary is a compendium of",
78-
"§7mobs in SkyBlock. It contains detailed",
79-
"§7information on loot drops, your mob",
80-
"§7stats, and more!",
81-
" ",
82-
"§7Kill mobs within §aFamilies §7to progress",
83-
"§7and earn §arewards§7, including §b✯ Magic",
84-
"§bFind §7bonuses towards mobs in the",
85-
"§7Family.",
86-
" ",
87-
"§c§lHERE PROGRESS BAR",
88-
" ",
89-
"§eClick to view!"
90-
);
79+
List<String> lore = new ArrayList<>();
80+
player.getBestiaryData().getTotalDisplay(lore);
81+
82+
return ItemStackCreator.getStack("§3Bestiary", Material.WRITTEN_BOOK, 1, lore);
9183
}
9284
});
9385
BestiaryRegions[] allBestiaryRegions = BestiaryRegions.values();

type.generic/src/main/java/net/swofty/types/generic/gui/inventory/inventories/sbmenu/bestiary/GUIBestiaryIsland.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ public void run(InventoryPreClickEvent e, SkyBlockPlayer player) {
121121
public ItemStack.Builder getItem(SkyBlockPlayer player) {
122122
ArrayList<String> lore = new ArrayList<>();
123123

124-
player.getBestiaryData().getDisplay(lore, kills, mob, bestiaryEntry);
124+
player.getBestiaryData().getMobDisplay(lore, kills, mob, bestiaryEntry);
125125

126126
lore.add("§eClick to view!");
127127

type.generic/src/main/java/net/swofty/types/generic/gui/inventory/inventories/sbmenu/bestiary/GUIBestiaryMob.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ public ItemStack.Builder getItem(SkyBlockPlayer player) {
6767
int kills = getPlayer().getBestiaryData().getAmount(bestiaryEntry.getMobs());
6868
int tier = bestiaryData.getCurrentBestiaryTier(mob, kills);
6969

70-
player.getBestiaryData().getDisplay(lore, kills, mob, bestiaryEntry);
70+
player.getBestiaryData().getMobDisplay(lore, kills, mob, bestiaryEntry);
7171

7272
if (bestiaryEntry.getMaterial() == Material.PLAYER_HEAD) {
7373
return ItemStackCreator.getStackHead("§a" + bestiaryEntry.getName() + " " + StringUtility.getAsRomanNumeral(tier),

type.generic/src/main/java/net/swofty/types/generic/gui/inventory/inventories/sbmenu/skills/GUISkillCategory.java

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -53,21 +53,12 @@ public void run(InventoryPreClickEvent e, SkyBlockPlayer player) {
5353

5454
@Override
5555
public ItemStack.Builder getItem(SkyBlockPlayer player) {
56-
return ItemStackCreator.getStack("§3Bestiary", Material.WRITTEN_BOOK, 1,
57-
"§7The Bestiary is a compendium of",
58-
"§7mobs in SkyBlock. It contains detailed",
59-
"§7information on loot drops, your mob",
60-
"§7stats, and more!",
61-
" ",
62-
"§7Kill mobs within §aFamilies §7to progress",
63-
"§7and earn §arewards§7, including §b✯ Magic",
64-
"§bFind §7bonuses towards mobs in the",
65-
"§7Family.",
66-
" ",
67-
"§c§lHERE PROGRESS BAR",
68-
" ",
69-
"§eClick to view!"
70-
);
56+
ArrayList<String> lore = new ArrayList<>();
57+
player.getBestiaryData().getTotalDisplay(lore);
58+
lore.add("");
59+
lore.add("§eClick to view!");
60+
61+
return ItemStackCreator.getStack("§3Bestiary", Material.WRITTEN_BOOK, 1, lore);
7162
}
7263
});
7364
}

0 commit comments

Comments
 (0)