Skip to content

Commit dfd5611

Browse files
committed
feat added GUIBestiaryMob
1 parent 505ed59 commit dfd5611

13 files changed

Lines changed: 419 additions & 149 deletions

File tree

type.generic/src/main/java/net/swofty/types/generic/data/DataHandler.java

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -303,21 +303,10 @@ public enum Data {
303303
}, (player, datapoint) -> {
304304
player.setGameMode((GameMode) datapoint.getValue());
305305
}, (player) -> new DatapointGamemode("gamemode", player.getGameMode())),
306-
307-
308-
309-
310306
EXPERIENCE("experience", false, false, false, DatapointLong.class, new DatapointLong("experience", 0L), (player, datapoint) -> {
311307
}, (player, datapoint) -> {
312-
//set the exp and levels here (deserializing, onLoad)
313308
player.setExperience((Long) datapoint.getValue());
314-
}, (player) -> {
315-
//return a new DatapointLong with the total exp amount (serializing, onQuit)
316-
return new DatapointLong("experience", player.getExperience());
317-
}),
318-
319-
320-
309+
}, (player) -> new DatapointLong("experience", player.getExperience())),
321310
BAZAAR_ORDERS("bazaar_orders", false, false, false, DatapointStringList.class, new DatapointStringList("bazaar_orders")),
322311
MISSION_DATA("mission_data", false, false, false, DatapointMissionData.class, new DatapointMissionData("mission_data", new MissionData()), (player, datapoint) -> {
323312
}, (player, datapoint) -> {

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

Lines changed: 39 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,17 @@
55
import lombok.Setter;
66
import net.swofty.commons.StringUtility;
77
import net.swofty.commons.protocol.Serializer;
8+
import net.swofty.types.generic.bestiary.BestiaryData;
89
import net.swofty.types.generic.data.Datapoint;
910
import net.swofty.types.generic.entity.mob.BestiaryMob;
1011
import net.swofty.types.generic.event.SkyBlockEventHandler;
1112
import net.swofty.types.generic.event.custom.BestiaryUpdateEvent;
13+
import net.swofty.types.generic.gui.inventory.inventories.sbmenu.bestiary.BestiaryEntry;
1214
import net.swofty.types.generic.skill.SkillCategories;
1315
import net.swofty.types.generic.user.SkyBlockPlayer;
1416
import org.json.JSONObject;
1517

18+
import java.util.ArrayList;
1619
import java.util.HashMap;
1720
import java.util.List;
1821
import java.util.Map;
@@ -99,41 +102,61 @@ public Integer getAmount(List<BestiaryMob> mobs) {
99102
return kills;
100103
}
101104

102-
public List<String> getDisplay(List<String> lore, double currentProgress, double currentRequirement, double totalKills, double totalRequirement, String prefix) {
105+
public List<String> getDisplay(List<String> lore, int kills, BestiaryMob mob, BestiaryEntry bestiaryEntry) {
106+
BestiaryData bestiaryData = new BestiaryData();
107+
108+
int bracket = mob.getBestiaryBracket();
109+
int tier = bestiaryData.getCurrentBestiaryTier(mob, kills);
110+
double currentProgress = bestiaryData.getKillsToNextTier(mob, kills);
111+
double currentRequirement = bestiaryData.getTotalKillsForNextTier(bracket, tier + 1);
112+
double totalRequirement = bestiaryData.getTotalKillsForMaxTier(mob);
113+
114+
lore.add("§7" + bestiaryEntry.getDescription());
115+
lore.add("");
116+
lore.add("§7Kills: §a" + kills);
117+
lore.add("§7Deaths: §a TO BE DONE"); //TODO add datapoint for amount of deaths
118+
lore.add("");
119+
120+
if (tier > 0) {
121+
bestiaryData.getTotalBonuses(lore, bestiaryEntry.getName(), tier);
122+
lore.add("");
123+
}
103124

104125
// Current tier progress
105126
int unlockedPercentage = (int) (currentProgress / currentRequirement * 100);
106-
lore.add(7" + prefix + " §b" + unlockedPercentage + "%");
127+
lore.add(7Progress to Tier " + StringUtility.getAsRomanNumeral(tier + 1) + " §b" + unlockedPercentage + "%");
107128

108129
String baseLoadingBar = "─────────────────";
109130
int maxBarLength = baseLoadingBar.length();
110131
int completedLength = (int) Math.round((currentProgress / currentRequirement) * maxBarLength);
111132

112133
String completedLoadingBar = "§3§m" + baseLoadingBar.substring(0, Math.min(completedLength, maxBarLength));
113134
int formattingCodeLength = 4;
114-
String uncompletedLoadingBar = "§f§m" + baseLoadingBar.substring(Math.min(
115-
completedLoadingBar.length() - formattingCodeLength,
116-
maxBarLength
117-
));
135+
String uncompletedLoadingBar = "§f§m" + baseLoadingBar.substring(Math.min(completedLoadingBar.length() - formattingCodeLength, maxBarLength));
118136

119-
lore.add(completedLoadingBar + uncompletedLoadingBar + "§r §b" +
120-
StringUtility.commaify(currentProgress) + "§3/§b" + StringUtility.shortenNumber(currentRequirement));
137+
lore.add(completedLoadingBar + uncompletedLoadingBar + "§r §b" + StringUtility.commaify(currentProgress) + "§3/§b" + StringUtility.shortenNumber(currentRequirement));
121138

122139
lore.add("");
123140

124141
// Total kill progress*
125-
int totalUnlockedPercentage = (int) (totalKills / totalRequirement * 100);
142+
int totalUnlockedPercentage = (int) (kills / totalRequirement * 100);
126143
lore.add("§7Overall Progress: §b" + totalUnlockedPercentage + "%");
127144

128-
int totalCompletedLength = (int) Math.round((totalKills / totalRequirement) * maxBarLength);
145+
int totalCompletedLength = (int) Math.round((kills / totalRequirement) * maxBarLength);
129146
String totalCompletedBar = "§3§m" + baseLoadingBar.substring(0, Math.min(totalCompletedLength, maxBarLength));
130-
String totalUncompletedBar = "§f§m" + baseLoadingBar.substring(Math.min(
131-
totalCompletedBar.length() - formattingCodeLength,
132-
maxBarLength
133-
));
147+
String totalUncompletedBar = "§f§m" + baseLoadingBar.substring(Math.min(totalCompletedBar.length() - formattingCodeLength, maxBarLength));
148+
149+
lore.add(totalCompletedBar + totalUncompletedBar + "§r §b" + StringUtility.commaify(kills) + "§3/§b" + StringUtility.shortenNumber(totalRequirement));
134150

135-
lore.add(totalCompletedBar + totalUncompletedBar + "§r §b" +
136-
StringUtility.commaify(totalKills) + "§3/§b" + StringUtility.shortenNumber(totalRequirement));
151+
if (mob.getMaxBestiaryTier() > tier) {
152+
lore.add("§8Capped at Tier " + StringUtility.getAsRomanNumeral(mob.getMaxBestiaryTier()));
153+
lore.add("");
154+
}
155+
156+
if (tier < mob.getMaxBestiaryTier()) {
157+
bestiaryData.getNextBonuses(lore, bestiaryEntry.getName(), tier + 1);
158+
lore.add("");
159+
}
137160

138161
return lore;
139162
}

type.generic/src/main/java/net/swofty/types/generic/entity/mob/BestiaryMob.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package net.swofty.types.generic.entity.mob;
22

33
import net.minestom.server.entity.EntityType;
4+
import net.minestom.server.item.Material;
45

56
public abstract class BestiaryMob extends SkyBlockMob {
67
public BestiaryMob(EntityType entityType) {
@@ -10,4 +11,6 @@ public BestiaryMob(EntityType entityType) {
1011
public abstract int getMaxBestiaryTier();
1112
public abstract int getBestiaryBracket();
1213
public abstract String getMobID();
14+
public abstract Material getDisplayItem();
15+
public abstract String getTexture();
1316
}

type.generic/src/main/java/net/swofty/types/generic/entity/mob/mobs/hub/MobGraveyardZombie.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import net.minestom.server.entity.ai.GoalSelector;
66
import net.minestom.server.entity.ai.TargetSelector;
77
import net.minestom.server.entity.ai.target.LastEntityDamagerTarget;
8+
import net.minestom.server.item.Material;
89
import net.minestom.server.utils.time.TimeUnit;
910
import net.swofty.commons.item.ItemType;
1011
import net.swofty.commons.statistics.ItemStatistic;
@@ -118,6 +119,16 @@ public String getMobID() {
118119
return "1_graveyard_zombie";
119120
}
120121

122+
@Override
123+
public Material getDisplayItem() {
124+
return Material.ZOMBIE_HEAD;
125+
}
126+
127+
@Override
128+
public String getTexture() {
129+
return "";
130+
}
131+
121132
@Override
122133
public List<Populator> getPopulators() {
123134
return Arrays.asList(

type.generic/src/main/java/net/swofty/types/generic/entity/mob/mobs/hub/MobGraveyardZombieVillager.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import net.minestom.server.entity.ai.GoalSelector;
66
import net.minestom.server.entity.ai.TargetSelector;
77
import net.minestom.server.entity.ai.target.LastEntityDamagerTarget;
8+
import net.minestom.server.item.Material;
89
import net.minestom.server.utils.time.TimeUnit;
910
import net.swofty.commons.item.ItemType;
1011
import net.swofty.commons.statistics.ItemStatistic;
@@ -120,6 +121,16 @@ public String getMobID() {
120121
return "1_graveyard_zombie_villager";
121122
}
122123

124+
@Override
125+
public Material getDisplayItem() {
126+
return Material.PLAYER_HEAD;
127+
}
128+
129+
@Override
130+
public String getTexture() {
131+
return "69198f410a10f99314aa0fbe9a3db10697bbc1c011f019507d96673c64217f5a";
132+
}
133+
123134
@Override
124135
public List<Populator> getPopulators() {
125136
return Arrays.asList(

type.generic/src/main/java/net/swofty/types/generic/entity/mob/mobs/hub/MobRuinsOldWolf.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import net.minestom.server.entity.ai.GoalSelector;
66
import net.minestom.server.entity.ai.TargetSelector;
77
import net.minestom.server.entity.ai.target.LastEntityDamagerTarget;
8+
import net.minestom.server.item.Material;
89
import net.minestom.server.utils.time.TimeUnit;
910
import net.swofty.commons.item.ItemType;
1011
import net.swofty.commons.statistics.ItemStatistic;
@@ -126,4 +127,14 @@ public int getBestiaryBracket() {
126127
public String getMobID() {
127128
return "50_ruins_old_wolf";
128129
}
130+
131+
@Override
132+
public Material getDisplayItem() {
133+
return Material.PLAYER_HEAD;
134+
}
135+
136+
@Override
137+
public String getTexture() {
138+
return "d359537c15534f61c1cd886bc118774ed22280e7cdab6613870160aad4ca39";
139+
}
129140
}

type.generic/src/main/java/net/swofty/types/generic/entity/mob/mobs/hub/MobRuinsWolf.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import net.minestom.server.entity.ai.GoalSelector;
66
import net.minestom.server.entity.ai.TargetSelector;
77
import net.minestom.server.entity.ai.target.LastEntityDamagerTarget;
8+
import net.minestom.server.item.Material;
89
import net.minestom.server.utils.time.TimeUnit;
910
import net.swofty.commons.item.ItemType;
1011
import net.swofty.commons.statistics.ItemStatistic;
@@ -126,4 +127,14 @@ public int getBestiaryBracket() {
126127
public String getMobID() {
127128
return "15_ruins_wolf";
128129
}
130+
131+
@Override
132+
public Material getDisplayItem() {
133+
return Material.PLAYER_HEAD;
134+
}
135+
136+
@Override
137+
public String getTexture() {
138+
return "f4cb7a6bf6c32c49f2589147e6f0f888e9e35875dd1ea2a8af379ca710589e6b";
139+
}
129140
}

type.generic/src/main/java/net/swofty/types/generic/entity/mob/mobs/island/MobZombie_1.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import net.minestom.server.entity.ai.GoalSelector;
66
import net.minestom.server.entity.ai.TargetSelector;
77
import net.minestom.server.entity.ai.target.LastEntityDamagerTarget;
8+
import net.minestom.server.item.Material;
89
import net.minestom.server.utils.time.TimeUnit;
910
import net.swofty.commons.item.ItemType;
1011
import net.swofty.commons.statistics.ItemStatistic;
@@ -114,6 +115,16 @@ public String getMobID() {
114115
return "1_zombie";
115116
}
116117

118+
@Override
119+
public Material getDisplayItem() {
120+
return Material.ZOMBIE_HEAD;
121+
}
122+
123+
@Override
124+
public String getTexture() {
125+
return "";
126+
}
127+
117128
@Override
118129
public List<Populator> getPopulators() {
119130
return Arrays.asList(
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package net.swofty.types.generic.entity.mob.mobs.island;
2+
3+
import lombok.NonNull;
4+
import net.minestom.server.entity.EntityType;
5+
import net.minestom.server.entity.ai.GoalSelector;
6+
import net.minestom.server.entity.ai.TargetSelector;
7+
import net.minestom.server.entity.ai.target.LastEntityDamagerTarget;
8+
import net.minestom.server.utils.time.TimeUnit;
9+
import net.swofty.commons.item.ItemType;
10+
import net.swofty.commons.statistics.ItemStatistic;
11+
import net.swofty.commons.statistics.ItemStatistics;
12+
import net.swofty.types.generic.entity.mob.BestiaryMob;
13+
import net.swofty.types.generic.entity.mob.ai.MeleeAttackWithinRegionGoal;
14+
import net.swofty.types.generic.entity.mob.ai.RandomRegionStrollGoal;
15+
import net.swofty.types.generic.entity.mob.impl.RegionPopulator;
16+
import net.swofty.types.generic.loottable.OtherLoot;
17+
import net.swofty.types.generic.loottable.SkyBlockLootTable;
18+
import net.swofty.types.generic.region.RegionType;
19+
import net.swofty.types.generic.skill.SkillCategories;
20+
import org.jetbrains.annotations.NotNull;
21+
import org.jetbrains.annotations.Nullable;
22+
23+
import java.util.Arrays;
24+
import java.util.List;
25+
26+
public class MobZombie_2 extends MobZombie_1 {
27+
@Override
28+
public Integer getLevel() {
29+
return 2;
30+
}
31+
32+
@Override
33+
public String getMobID() {
34+
return "2_zombie";
35+
}
36+
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,14 @@
99
import net.swofty.types.generic.entity.mob.mobs.hub.MobRuinsOldWolf;
1010
import net.swofty.types.generic.entity.mob.mobs.hub.MobRuinsWolf;
1111
import net.swofty.types.generic.entity.mob.mobs.island.MobZombie_1;
12+
import net.swofty.types.generic.entity.mob.mobs.island.MobZombie_2;
1213

1314
import java.util.List;
1415

1516
public enum BestiaryCategory {;
1617
@Getter
1718
public enum PRIVATE_ISLAND implements BestiaryEntry {
18-
ZOMBIE("§aZombie", "Brains.", Material.ZOMBIE_HEAD,"", List.of(new MobZombie_1())),
19+
ZOMBIE("§aZombie", "Brains.", Material.ZOMBIE_HEAD,"", List.of(new MobZombie_1(), new MobZombie_2())),
1920
;
2021

2122
private final String name, description, texture;

0 commit comments

Comments
 (0)