Skip to content

Commit aee132b

Browse files
committed
build battle and tnt run stats
1 parent 0fc06a8 commit aee132b

18 files changed

Lines changed: 1353 additions & 126 deletions
Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
package com.roxiun.mellow.api.buildbattle;
2+
3+
public class BuildBattlePlayer {
4+
5+
private static final TitleTier[] TITLE_TIERS = new TitleTier[] {
6+
new TitleTier(0, "Rookie", "§f"),
7+
new TitleTier(100, "Untrained", "§7"),
8+
new TitleTier(250, "Amateur", "§8"),
9+
new TitleTier(500, "Prospect", "§a"),
10+
new TitleTier(1000, "Apprentice", "§2"),
11+
new TitleTier(2000, "Experienced", "§b"),
12+
new TitleTier(3500, "Seasoned", "§3"),
13+
new TitleTier(5000, "Trained", "§9"),
14+
new TitleTier(7500, "Skilled", "§1"),
15+
new TitleTier(10000, "Talented", "§5"),
16+
new TitleTier(15000, "Professional", "§d"),
17+
new TitleTier(20000, "Artisan", "§c"),
18+
new TitleTier(30000, "Expert", "§4"),
19+
new TitleTier(50000, "Master", "§6"),
20+
new TitleTier(100000, "Legend", "§a"),
21+
new TitleTier(200000, "Grandmaster", "§b"),
22+
new TitleTier(300000, "Celestial", "§d"),
23+
new TitleTier(400000, "Divine", "§c"),
24+
new TitleTier(500000, "Ascended", "§6"),
25+
};
26+
27+
private final String name;
28+
private final String formattedNameWithRank;
29+
private final int score;
30+
private final int wins;
31+
private final int gamesPlayed;
32+
33+
public BuildBattlePlayer(
34+
String name,
35+
String formattedNameWithRank,
36+
int score,
37+
int wins,
38+
int gamesPlayed
39+
) {
40+
this.name = name;
41+
this.formattedNameWithRank = formattedNameWithRank;
42+
this.score = Math.max(0, score);
43+
this.wins = Math.max(0, wins);
44+
this.gamesPlayed = Math.max(0, gamesPlayed);
45+
}
46+
47+
public String getName() {
48+
return name;
49+
}
50+
51+
public String getFormattedNameWithRank() {
52+
if (formattedNameWithRank == null || formattedNameWithRank.isEmpty()) {
53+
return name;
54+
}
55+
return formattedNameWithRank;
56+
}
57+
58+
public int getScore() {
59+
return score;
60+
}
61+
62+
public int getWins() {
63+
return wins;
64+
}
65+
66+
public int getGamesPlayed() {
67+
return gamesPlayed;
68+
}
69+
70+
public String getFormattedTitle() {
71+
TitleTier activeTier = TITLE_TIERS[0];
72+
for (TitleTier tier : TITLE_TIERS) {
73+
if (score >= tier.minScore) {
74+
activeTier = tier;
75+
} else {
76+
break;
77+
}
78+
}
79+
return activeTier.colorCode + activeTier.name;
80+
}
81+
82+
public String getWinsColor() {
83+
if (wins >= 10000) {
84+
return "§5";
85+
} else if (wins >= 5000) {
86+
return "§d";
87+
} else if (wins >= 2500) {
88+
return "§4";
89+
} else if (wins >= 1000) {
90+
return "§c";
91+
} else if (wins >= 500) {
92+
return "§6";
93+
} else if (wins >= 250) {
94+
return "§e";
95+
} else if (wins >= 100) {
96+
return "§2";
97+
} else if (wins >= 25) {
98+
return "§a";
99+
} else if (wins >= 5) {
100+
return "§f";
101+
}
102+
return "§7";
103+
}
104+
105+
public String getFormattedWinsWithColor() {
106+
return getWinsColor() + wins;
107+
}
108+
109+
private static class TitleTier {
110+
111+
private final int minScore;
112+
private final String name;
113+
private final String colorCode;
114+
115+
private TitleTier(int minScore, String name, String colorCode) {
116+
this.minScore = minScore;
117+
this.name = name;
118+
this.colorCode = colorCode;
119+
}
120+
}
121+
}

src/main/java/com/roxiun/mellow/api/provider/AbyssApi.java

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
package com.roxiun.mellow.api.provider;
22

33
import com.roxiun.mellow.api.bedwars.BedwarsPlayer;
4+
import com.roxiun.mellow.api.buildbattle.BuildBattlePlayer;
45
import com.roxiun.mellow.api.duels.DuelsMode;
56
import com.roxiun.mellow.api.duels.DuelsPlayer;
67
import com.roxiun.mellow.api.mojang.MojangApi;
78
import com.roxiun.mellow.api.provider.model.ProviderId;
89
import com.roxiun.mellow.api.skywars.SkywarsPlayer;
10+
import com.roxiun.mellow.api.tnt.TntRunPlayer;
911
import com.roxiun.mellow.api.util.HypixelApiUtils;
1012
import com.roxiun.mellow.util.player.PlayerUtils;
1113
import java.io.IOException;
@@ -102,4 +104,41 @@ public DuelsPlayer fetchDuelsStats(String playerName, DuelsMode mode)
102104
mode
103105
);
104106
}
107+
108+
@Override
109+
public BuildBattlePlayer fetchBuildBattleStats(String playerName)
110+
throws IOException {
111+
String uuid = PlayerUtils.getUUIDFromPlayerName(playerName);
112+
if (uuid == null) {
113+
uuid = mojangApi.fetchUUID(playerName);
114+
if ("ERROR".equals(uuid)) {
115+
return null;
116+
}
117+
}
118+
119+
String stjson = fetchPlayerData(uuid);
120+
if (stjson == null || stjson.isEmpty()) {
121+
return null;
122+
}
123+
124+
return HypixelApiUtils.parseBuildBattlePlayerData(stjson, ProviderId.ABYSS);
125+
}
126+
127+
@Override
128+
public TntRunPlayer fetchTntRunStats(String playerName) throws IOException {
129+
String uuid = PlayerUtils.getUUIDFromPlayerName(playerName);
130+
if (uuid == null) {
131+
uuid = mojangApi.fetchUUID(playerName);
132+
if ("ERROR".equals(uuid)) {
133+
return null;
134+
}
135+
}
136+
137+
String stjson = fetchPlayerData(uuid);
138+
if (stjson == null || stjson.isEmpty()) {
139+
return null;
140+
}
141+
142+
return HypixelApiUtils.parseTntRunPlayerData(stjson, ProviderId.ABYSS);
143+
}
105144
}

src/main/java/com/roxiun/mellow/api/provider/HypixelPublicApi.java

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
package com.roxiun.mellow.api.provider;
22

33
import com.roxiun.mellow.api.bedwars.BedwarsPlayer;
4+
import com.roxiun.mellow.api.buildbattle.BuildBattlePlayer;
45
import com.roxiun.mellow.api.duels.DuelsMode;
56
import com.roxiun.mellow.api.duels.DuelsPlayer;
67
import com.roxiun.mellow.api.mojang.MojangApi;
78
import com.roxiun.mellow.api.provider.model.ProviderId;
89
import com.roxiun.mellow.api.skywars.SkywarsPlayer;
10+
import com.roxiun.mellow.api.tnt.TntRunPlayer;
911
import com.roxiun.mellow.api.util.HypixelApiUtils;
1012
import com.roxiun.mellow.config.MellowOneConfig;
1113
import com.roxiun.mellow.util.player.PlayerUtils;
@@ -142,4 +144,55 @@ public DuelsPlayer fetchDuelsStats(String playerName, DuelsMode mode)
142144
mode
143145
);
144146
}
147+
148+
@Override
149+
public BuildBattlePlayer fetchBuildBattleStats(String playerName)
150+
throws IOException {
151+
if (!isConfigured()) {
152+
return null;
153+
}
154+
155+
String uuid = PlayerUtils.getUUIDFromPlayerName(playerName);
156+
if (uuid == null) {
157+
uuid = mojangApi.fetchUUID(playerName);
158+
if ("ERROR".equals(uuid)) {
159+
return null;
160+
}
161+
}
162+
163+
String json = fetchPlayerData(uuid);
164+
if (json == null || json.isEmpty()) {
165+
return null;
166+
}
167+
168+
return HypixelApiUtils.parseBuildBattlePlayerData(
169+
json,
170+
ProviderId.HYPIXEL_PUBLIC
171+
);
172+
}
173+
174+
@Override
175+
public TntRunPlayer fetchTntRunStats(String playerName) throws IOException {
176+
if (!isConfigured()) {
177+
return null;
178+
}
179+
180+
String uuid = PlayerUtils.getUUIDFromPlayerName(playerName);
181+
if (uuid == null) {
182+
uuid = mojangApi.fetchUUID(playerName);
183+
if ("ERROR".equals(uuid)) {
184+
return null;
185+
}
186+
}
187+
188+
String json = fetchPlayerData(uuid);
189+
if (json == null || json.isEmpty()) {
190+
return null;
191+
}
192+
193+
return HypixelApiUtils.parseTntRunPlayerData(
194+
json,
195+
ProviderId.HYPIXEL_PUBLIC
196+
);
197+
}
145198
}

src/main/java/com/roxiun/mellow/api/provider/NadeshikoApi.java

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
package com.roxiun.mellow.api.provider;
22

33
import com.roxiun.mellow.api.bedwars.BedwarsPlayer;
4+
import com.roxiun.mellow.api.buildbattle.BuildBattlePlayer;
45
import com.roxiun.mellow.api.duels.DuelsMode;
56
import com.roxiun.mellow.api.duels.DuelsPlayer;
67
import com.roxiun.mellow.api.mojang.MojangApi;
78
import com.roxiun.mellow.api.provider.model.ProviderId;
89
import com.roxiun.mellow.api.skywars.SkywarsPlayer;
10+
import com.roxiun.mellow.api.tnt.TntRunPlayer;
911
import com.roxiun.mellow.api.util.HypixelApiUtils;
1012
import com.roxiun.mellow.util.player.PlayerUtils;
1113
import java.io.IOException;
@@ -105,4 +107,47 @@ public DuelsPlayer fetchDuelsStats(String playerName, DuelsMode mode)
105107
mode
106108
);
107109
}
110+
111+
@Override
112+
public BuildBattlePlayer fetchBuildBattleStats(String playerName)
113+
throws IOException {
114+
String uuid = PlayerUtils.getUUIDFromPlayerName(playerName);
115+
if (uuid == null) {
116+
uuid = mojangApi.fetchUUID(playerName);
117+
if ("ERROR".equals(uuid)) {
118+
return null;
119+
}
120+
}
121+
122+
String stjson = fetchPlayerData(uuid);
123+
if (stjson == null || stjson.isEmpty()) {
124+
return null;
125+
}
126+
127+
return HypixelApiUtils.parseBuildBattlePlayerData(
128+
stjson,
129+
ProviderId.NADESHIKO
130+
);
131+
}
132+
133+
@Override
134+
public TntRunPlayer fetchTntRunStats(String playerName) throws IOException {
135+
String uuid = PlayerUtils.getUUIDFromPlayerName(playerName);
136+
if (uuid == null) {
137+
uuid = mojangApi.fetchUUID(playerName);
138+
if ("ERROR".equals(uuid)) {
139+
return null;
140+
}
141+
}
142+
143+
String stjson = fetchPlayerData(uuid);
144+
if (stjson == null || stjson.isEmpty()) {
145+
return null;
146+
}
147+
148+
return HypixelApiUtils.parseTntRunPlayerData(
149+
stjson,
150+
ProviderId.NADESHIKO
151+
);
152+
}
108153
}

src/main/java/com/roxiun/mellow/api/provider/StatsProvider.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package com.roxiun.mellow.api.provider;
22

33
import com.roxiun.mellow.api.bedwars.BedwarsPlayer;
4+
import com.roxiun.mellow.api.buildbattle.BuildBattlePlayer;
45
import com.roxiun.mellow.api.duels.DuelsMode;
56
import com.roxiun.mellow.api.duels.DuelsPlayer;
67
import com.roxiun.mellow.api.skywars.SkywarsPlayer;
8+
import com.roxiun.mellow.api.tnt.TntRunPlayer;
79
import com.roxiun.mellow.api.provider.model.PlayerIdentity;
810
import com.roxiun.mellow.api.provider.model.ProviderId;
911
import com.roxiun.mellow.api.provider.model.ProviderResult;
@@ -40,6 +42,15 @@ default DuelsPlayer fetchDuelsStats(String playerName, DuelsMode mode)
4042
return null;
4143
}
4244

45+
default BuildBattlePlayer fetchBuildBattleStats(String playerName)
46+
throws IOException {
47+
return null;
48+
}
49+
50+
default TntRunPlayer fetchTntRunStats(String playerName) throws IOException {
51+
return null;
52+
}
53+
4354
String fetchPlayerData(String uuid);
4455

4556
default ProviderResult<?> fetchStats(
@@ -72,6 +83,22 @@ default ProviderResult<?> fetchStats(
7283
return ProviderResult.failure("No data returned");
7384
}
7485
return ProviderResult.success(duelsPlayer);
86+
case BUILD_BATTLE:
87+
BuildBattlePlayer buildBattlePlayer = fetchBuildBattleStats(
88+
identity.getUsername()
89+
);
90+
if (buildBattlePlayer == null) {
91+
return ProviderResult.failure("No data returned");
92+
}
93+
return ProviderResult.success(buildBattlePlayer);
94+
case TNT_RUN:
95+
TntRunPlayer tntRunPlayer = fetchTntRunStats(
96+
identity.getUsername()
97+
);
98+
if (tntRunPlayer == null) {
99+
return ProviderResult.failure("No data returned");
100+
}
101+
return ProviderResult.success(tntRunPlayer);
75102
default:
76103
return ProviderResult.failure(
77104
"Unsupported scope: " + scope

src/main/java/com/roxiun/mellow/api/provider/model/StatScope.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,6 @@ public enum StatScope {
55
BEDWARS,
66
SKYWARS,
77
DUELS,
8+
BUILD_BATTLE,
9+
TNT_RUN,
810
}

0 commit comments

Comments
 (0)