Skip to content

Commit 59eceff

Browse files
authored
Updates to the code
- Simplifies mctop placeholders - Refactors mctop placeholders to use a single placeholder for both skill level/score and player name. - This removes the need for separate "mctop" and "mctop_name" placeholders, improving usability and reducing code duplication.
1 parent a92ddd8 commit 59eceff

File tree

6 files changed

+94
-37
lines changed

6 files changed

+94
-37
lines changed

PLACEHOLDERS.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ Returns the player's current level in the specified skill.
3737

3838
**Examples:**
3939
- `%mcmmo_level_mining%` - Returns Mining level (e.g., "75")
40-
- `%mcmmo_level_combat%` - Returns Combat level
40+
- `%mcmmo_level_swords%` - Returns Swords level
4141
- `%mcmmo_level_woodcutting%` - Returns Woodcutting level
4242

4343
### Current Skill XP
@@ -56,7 +56,7 @@ Returns the total amount of XP needed to reach the next level.
5656

5757
**Examples:**
5858
- `%mcmmo_xp_needed_mining%` - Returns XP needed (e.g., "2000")
59-
- `%mcmmo_xp_needed_combat%` - Returns XP needed for next level
59+
- `%mcmmo_xp_needed_swords%` - Returns XP needed for next level
6060

6161
### XP Remaining for Next Level
6262
**Syntax:** `%mcmmo_xp_remaining_<skill>%`
@@ -74,7 +74,7 @@ Returns the player's position in the leaderboard for that skill.
7474

7575
**Examples:**
7676
- `%mcmmo_rank_mining%` - Returns "12" if the player is in 12th place
77-
- `%mcmmo_rank_combat%` - Position in Combat ranking
77+
- `%mcmmo_rank_swords%` - Position in Swords ranking
7878

7979
### Skill XP Rate
8080
**Syntax:** `%mcmmo_xprate_<skill>%`
@@ -182,7 +182,7 @@ Returns the value (level or power level) of the player at position X in the rank
182182

183183
**Examples:**
184184
- `%mcmmo_mctop_mining:1%` - Returns the Mining level of the 1st place player
185-
- `%mcmmo_mctop_combat:5%` - Returns the Combat level of the 5th place player
185+
- `%mcmmo_mctop_swords:5%` - Returns the Swords level of the 5th place player
186186
- `%mcmmo_mctop_overall:1%` - Returns the power level of the 1st place player
187187

188188
### Get Player Name at Position X (✨ NEW)
@@ -195,7 +195,7 @@ Returns the player's name at position X in the ranking.
195195

196196
**Examples:**
197197
- `%mcmmo_mctop_name_mining:1%` - Returns the name of the 1st place player in Mining
198-
- `%mcmmo_mctop_name_combat:10%` - Returns the name of the 10th place player in Combat
198+
- `%mcmmo_mctop_name_swords:10%` - Returns the name of the 10th place player in Swords
199199
- `%mcmmo_mctop_name_overall:1%` - Returns the name of the 1st place player in overall ranking
200200

201201
### Get Your Overall Rank Position (✨ NEW)
@@ -223,7 +223,7 @@ Checks if the player has reached the required level in a specific skill.
223223

224224
**Examples:**
225225
- `%mcmmo_checklevel_mining:50%` - Returns ✔ if player has Mining level 50+, otherwise ✘
226-
- `%mcmmo_checklevel_combat:100%` - Returns ✔ if player has Combat level 100+, otherwise ✘
226+
- `%mcmmo_checklevel_swords:100%` - Returns ✔ if player has Swords level 100+, otherwise ✘
227227
- `%mcmmo_checklevel_woodcutting:25%` - Returns ✔ if player has Woodcutting level 25+, otherwise ✘
228228

229229
---
@@ -286,7 +286,7 @@ display:
286286
lore:
287287
- "&7Requirements:"
288288
- "&7Mining Level 50: %mcmmo_checklevel_mining:50%"
289-
- "&7Combat Level 75: %mcmmo_checklevel_combat:75%"
289+
- "&Swords Level 75: %mcmmo_checklevel_swords:75%"
290290
- "&7Woodcutting Level 30: %mcmmo_checklevel_woodcutting:30%"
291291
```
292292

src/main/java/com/gmail/nossr50/placeholders/CheckLevelPlaceholder.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@ public class CheckLevelPlaceholder implements Placeholder {
1515
public CheckLevelPlaceholder(PapiExpansion papiExpansion, PrimarySkillType skill) {
1616
this.papiExpansion = papiExpansion;
1717
this.skill = skill;
18+
// The papiExpansion parameter is intentionally "unused" in this class.
19+
// It's essential for the class to function properly.
20+
// The placeholder needs access to the PapiExpansion instance to query skill levels.
1821
}
1922

2023
@Override
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package com.gmail.nossr50.placeholders;
2+
3+
import com.gmail.nossr50.datatypes.database.PlayerStat;
4+
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
5+
import org.bukkit.entity.Player;
6+
7+
import java.util.List;
8+
9+
/**
10+
* Placeholder for getting the player name at a specific position in the leaderboard
11+
* Usage: %mcmmo_mctop_name_<skill>:<position>% or %mcmmo_mctop_name_overall:<position>%
12+
*/
13+
public class McTopNamePlaceholder implements Placeholder {
14+
private final PapiExpansion papiExpansion;
15+
private final PrimarySkillType skill;
16+
17+
public McTopNamePlaceholder(PapiExpansion papiExpansion, PrimarySkillType skill) {
18+
this.papiExpansion = papiExpansion;
19+
this.skill = skill;
20+
}
21+
22+
@Override
23+
public String process(Player player, String params) {
24+
if (params == null || params.isEmpty()) {
25+
return "";
26+
}
27+
28+
int position;
29+
try {
30+
position = Integer.parseInt(params);
31+
} catch (NumberFormatException e) {
32+
return "";
33+
}
34+
35+
if (position < 1) {
36+
return "";
37+
}
38+
39+
List<PlayerStat> leaderboard = papiExpansion.getLeaderboard(skill, position);
40+
41+
if (leaderboard == null || leaderboard.isEmpty() || position > leaderboard.size()) {
42+
return "";
43+
}
44+
45+
PlayerStat stat = leaderboard.get(position - 1);
46+
return stat.playerName();
47+
}
48+
49+
@Override
50+
public String getName() {
51+
if (skill == null) {
52+
return "mctop_name_overall";
53+
}
54+
return "mctop_name_" + skill.toString().toLowerCase();
55+
}
56+
}

src/main/java/com/gmail/nossr50/placeholders/McTopPositionPlaceholder.java

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,16 @@
77
import java.util.List;
88

99
/**
10-
* Placeholder for getting the player name at a specific position in the leaderboard
11-
* Usage: %mcmmo_mctop_name_<skill>:<position>% or %mcmmo_mctop_name_overall:<position>%
10+
* Placeholder for getting the skill level/score at a specific position in the leaderboard
11+
* Usage: %mcmmo_mctop_<skill>:<position>% or %mcmmo_mctop_overall:<position>%
1212
*/
1313
public class McTopPositionPlaceholder implements Placeholder {
1414
private final PapiExpansion papiExpansion;
1515
private final PrimarySkillType skill;
16-
private final boolean isName;
1716

18-
public McTopPositionPlaceholder(PapiExpansion papiExpansion, PrimarySkillType skill, boolean isName) {
17+
public McTopPositionPlaceholder(PapiExpansion papiExpansion, PrimarySkillType skill) {
1918
this.papiExpansion = papiExpansion;
2019
this.skill = skill;
21-
this.isName = isName;
2220
}
2321

2422
@Override
@@ -38,27 +36,25 @@ public String process(Player player, String params) {
3836
return "";
3937
}
4038

39+
final int statsPerPage = 10; // Adjust if your leaderboard uses a different page size
4140
List<PlayerStat> leaderboard = papiExpansion.getLeaderboard(skill, position);
4241

43-
if (leaderboard == null || leaderboard.isEmpty() || position > leaderboard.size()) {
42+
if (leaderboard == null || leaderboard.isEmpty()) {
4443
return "";
4544
}
46-
47-
PlayerStat stat = leaderboard.get(position - 1);
48-
49-
if (isName) {
50-
return stat.playerName();
51-
} else {
52-
return String.valueOf(stat.value());
45+
int pageIndex = (position - 1) % statsPerPage;
46+
if (pageIndex >= leaderboard.size()) {
47+
return "";
5348
}
49+
PlayerStat stat = leaderboard.get(pageIndex);
50+
return String.valueOf(stat.value());
5451
}
5552

5653
@Override
5754
public String getName() {
58-
String prefix = isName ? "mctop_name" : "mctop";
5955
if (skill == null) {
60-
return prefix + "_overall";
56+
return "mctop_overall";
6157
}
62-
return prefix + "_" + skill.toString().toLowerCase();
58+
return "mctop_" + skill.toString().toLowerCase();
6359
}
6460
}

src/main/java/com/gmail/nossr50/placeholders/OverallRankPlaceholder.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@
1010
public class OverallRankPlaceholder implements Placeholder {
1111

1212
public OverallRankPlaceholder(PapiExpansion papiExpansion) {
13-
// Constructor for consistency with other placeholders
13+
// The papiExpansion parameter is intentionally unused in this class.
14+
// It is kept for consistency with other Placeholder implementations.
15+
// If future functionality requires access to papiExpansion, it can be stored as a field.
1416
}
1517

1618
@Override

src/main/java/com/gmail/nossr50/placeholders/PapiExpansion.java

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -200,12 +200,12 @@ public String isExpEventActive(Player player) {
200200

201201
public List<PlayerStat> getLeaderboard(PrimarySkillType skill, int position) {
202202
try {
203-
// Calculate which page to fetch (10 entries per page by default)
204-
int statsPerPage = 10;
205-
int pageNumber = ((position - 1) / statsPerPage) + 1;
203+
// Fetch only the specific entry needed
204+
int statsPerPage = 1;
205+
int pageNumber = position; // Assuming readLeaderboard uses pageNumber as offset for single entry
206206

207207
return mcMMO.getDatabaseManager().readLeaderboard(skill, pageNumber, statsPerPage);
208-
} catch (RuntimeException ex) {
208+
} catch (InvalidSkillException ex) {
209209
return null;
210210
}
211211
}
@@ -241,13 +241,13 @@ private void init() {
241241
//%mcmmo_xprate_<skillname>%
242242
registerPlaceholder(new SkillXpRatePlaceholder(this, skill));
243243

244-
//%mcmmo_mctop_<skillname>_<position>%
245-
registerPlaceholder(new McTopPositionPlaceholder(this, skill, false));
244+
//%mcmmo_mctop_<skillname>:<position>%
245+
registerPlaceholder(new McTopPositionPlaceholder(this, skill));
246246

247-
//%mcmmo_mctop_name_<skillname>_<position>%
248-
registerPlaceholder(new McTopPositionPlaceholder(this, skill, true));
247+
//%mcmmo_mctop_name_<skillname>:<position>%
248+
registerPlaceholder(new McTopNamePlaceholder(this, skill));
249249

250-
//%mcmmo_checklevel_<skillname>_<level>%
250+
//%mcmmo_checklevel_<skillname>:<level>%
251251
registerPlaceholder(new CheckLevelPlaceholder(this, skill));
252252
}
253253

@@ -281,11 +281,11 @@ private void init() {
281281
// %mcmmo_rank_overall%
282282
registerPlaceholder(new OverallRankPlaceholder(this));
283283

284-
// %mcmmo_mctop_overall_<position>%
285-
registerPlaceholder(new McTopPositionPlaceholder(this, null, false));
284+
// %mcmmo_mctop_overall:<position>%
285+
registerPlaceholder(new McTopPositionPlaceholder(this, null));
286286

287-
// %mcmmo_mctop_name_overall_<position>%
288-
registerPlaceholder(new McTopPositionPlaceholder(this, null, true));
287+
// %mcmmo_mctop_name_overall:<position>%
288+
registerPlaceholder(new McTopNamePlaceholder(this, null));
289289
}
290290

291291
}

0 commit comments

Comments
 (0)