Skip to content

Commit b3f4d99

Browse files
committed
Reformat placeholder definitions
1 parent cb3c77b commit b3f4d99

File tree

17 files changed

+314
-304
lines changed

17 files changed

+314
-304
lines changed

eternalcore-core/src/main/java/com/eternalcode/core/bridge/BridgeManager.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ class BridgeManager {
3838

3939
void init() {
4040
this.setupBridge("PlaceholderAPI", () -> {
41-
this.placeholderRegistry.registerPlaceholder(new PlaceholderApiReplacer());
41+
this.placeholderRegistry.register(new PlaceholderApiReplacer());
4242
new PlaceholderApiExtension(this.placeholderRegistry, this.pluginDescriptionFile).initialize();
4343
});
4444

eternalcore-core/src/main/java/com/eternalcode/core/bridge/placeholderapi/PlaceholderApiReplacer.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package com.eternalcode.core.bridge.placeholderapi;
22

33

4-
import com.eternalcode.core.placeholder.PlaceholderReplacer;
4+
import com.eternalcode.core.placeholder.Placeholder;
55
import me.clip.placeholderapi.PlaceholderAPI;
66
import org.bukkit.entity.Player;
77

8-
public class PlaceholderApiReplacer implements PlaceholderReplacer {
8+
public class PlaceholderApiReplacer implements Placeholder {
99

1010
@Override
1111
public String apply(String text, Player targetPlayer) {
Lines changed: 57 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
package com.eternalcode.core.feature.afk.placeholder;
22

3-
import com.eternalcode.annotations.scan.placeholder.PlaceholderDocs;
3+
import com.eternalcode.annotations.scan.placeholder.PlaceholdersDocs;
4+
import com.eternalcode.annotations.scan.placeholder.PlaceholdersDocs.Entry;
5+
import static com.eternalcode.annotations.scan.placeholder.PlaceholdersDocs.Entry.*;
46
import com.eternalcode.core.feature.afk.Afk;
57
import com.eternalcode.core.feature.afk.AfkService;
68
import com.eternalcode.core.injector.annotations.Inject;
79
import com.eternalcode.core.injector.annotations.component.Controller;
810
import com.eternalcode.core.placeholder.PlaceholderRegistry;
9-
import com.eternalcode.core.placeholder.PlaceholderReplacer;
11+
import com.eternalcode.core.placeholder.Placeholder;
1012
import com.eternalcode.core.publish.Subscribe;
1113
import com.eternalcode.core.publish.event.EternalInitializeEvent;
1214
import com.eternalcode.core.translation.Translation;
@@ -17,6 +19,35 @@
1719
import java.util.Optional;
1820
import org.bukkit.Server;
1921

22+
@PlaceholdersDocs(
23+
category = "AFK",
24+
placeholders = {
25+
@Entry(
26+
name = "afk",
27+
description = "Returns `true` if the player is AFK, `false` otherwise",
28+
returnType = Type.BOOLEAN,
29+
requiresPlayer = true
30+
),
31+
@Entry(
32+
name = "afk_formatted",
33+
description = "Returns a formatted AFK status message based on player's language settings e.g. `[AFK]` or ``",
34+
returnType = Type.STRING,
35+
requiresPlayer = true
36+
),
37+
@Entry(
38+
name = "afk_time",
39+
description = "Returns the duration the player has been AFK in a formatted string e.g. `5m 30s`",
40+
returnType = Type.STRING,
41+
requiresPlayer = true
42+
),
43+
@Entry(
44+
name = "afk_playercount",
45+
description = "Returns the total number of AFK players on the server",
46+
returnType = Type.INT,
47+
requiresPlayer = false
48+
)
49+
}
50+
)
2051
@Controller
2152
class AfkPlaceholderSetup {
2253

@@ -30,91 +61,31 @@ class AfkPlaceholderSetup {
3061
}
3162

3263
@Subscribe(EternalInitializeEvent.class)
33-
void setUpPlaceholders(PlaceholderRegistry placeholderRegistry, AfkService afkService) {
34-
placeholderRegistry.registerPlaceholder(this.createAfkPlaceholder(afkService));
35-
placeholderRegistry.registerPlaceholder(this.createAfkFormattedPlaceholder(afkService));
36-
placeholderRegistry.registerPlaceholder(this.createAfkTimePlaceholder(afkService));
37-
placeholderRegistry.registerPlaceholder(this.createAfkPlayerCountPlaceholder(afkService));
38-
}
39-
40-
@PlaceholderDocs(
41-
name = "afk",
42-
description = "Returns true if the player is AFK, false otherwise",
43-
example = "true",
44-
returnType = "boolean",
45-
category = "AFK",
46-
requiresPlayer = true
47-
)
48-
private PlaceholderReplacer createAfkPlaceholder(AfkService afkService) {
49-
return PlaceholderReplacer.of(
50-
"afk",
51-
player -> String.valueOf(afkService.isAfk(player.getUniqueId()))
52-
);
53-
}
54-
55-
@PlaceholderDocs(
56-
name = "afk_formatted",
57-
description = "Returns a formatted AFK status message based on player's language settings",
58-
example = "[AFK]",
59-
returnType = "String",
60-
category = "AFK",
61-
requiresPlayer = true
62-
)
63-
private PlaceholderReplacer createAfkFormattedPlaceholder(AfkService afkService) {
64-
return PlaceholderReplacer.of(
65-
"afk_formatted",
66-
player -> {
67-
Translation messages = this.translationManager.getMessages(player.getUniqueId());
68-
return afkService.isAfk(player.getUniqueId()) ?
69-
messages.afk().afkEnabledPlaceholder() : messages.afk().afkDisabledPlaceholder();
64+
void setUpPlaceholders(PlaceholderRegistry placeholders, AfkService afkService) {
65+
placeholders.register(Placeholder.ofBoolean("afk", player -> afkService.isAfk(player.getUniqueId())));
66+
placeholders.register(Placeholder.of("afk_formatted", player -> {
67+
Translation messages = this.translationManager.getMessages();
68+
return afkService.isAfk(player.getUniqueId()) ?
69+
messages.afk().afkEnabledPlaceholder() : messages.afk().afkDisabledPlaceholder();
70+
}));
71+
placeholders.register(Placeholder.of("afk_time", player -> {
72+
Optional<Afk> afkOptional = afkService.getAfk(player.getUniqueId());
73+
if (afkOptional.isEmpty()) {
74+
return "";
7075
}
71-
);
72-
}
7376

74-
@PlaceholderDocs(
75-
name = "afk_time",
76-
description = "Returns the duration the player has been AFK in a formatted string",
77-
example = "5m 30s",
78-
returnType = "String",
79-
category = "AFK",
80-
requiresPlayer = true
81-
)
82-
private PlaceholderReplacer createAfkTimePlaceholder(AfkService afkService) {
83-
return PlaceholderReplacer.of(
84-
"afk_time",
85-
player -> {
86-
Optional<Afk> afkOptional = afkService.getAfk(player.getUniqueId());
87-
if (afkOptional.isEmpty()) {
88-
return "";
89-
}
90-
91-
Afk afk = afkOptional.get();
92-
Instant start = afk.getStart();
93-
Instant now = Instant.now();
94-
Duration afkDuration = Duration.between(start, now);
95-
return DurationUtil.format(afkDuration, true);
96-
}
97-
);
98-
}
99-
100-
@PlaceholderDocs(
101-
name = "afk_playercount",
102-
description = "Returns the total number of AFK players on the server",
103-
example = "3",
104-
returnType = "int",
105-
category = "AFK",
106-
requiresPlayer = false
107-
)
108-
private PlaceholderReplacer createAfkPlayerCountPlaceholder(AfkService afkService) {
109-
return PlaceholderReplacer.of(
110-
"afk_playercount",
111-
ignoredPlayer -> {
112-
long afkPlayerCount = this.server.getOnlinePlayers()
113-
.stream()
114-
.filter(onlinePlayer -> afkService.isAfk(onlinePlayer.getUniqueId()))
115-
.count();
116-
return String.valueOf(afkPlayerCount);
117-
}
118-
);
77+
Afk afk = afkOptional.get();
78+
Instant start = afk.getStart();
79+
Instant now = Instant.now();
80+
Duration afkDuration = Duration.between(start, now);
81+
return DurationUtil.format(afkDuration, true);
82+
}));
83+
placeholders.register(Placeholder.ofLong("afk_playercount", player -> {
84+
long afkPlayerCount = this.server.getOnlinePlayers()
85+
.stream()
86+
.filter(onlinePlayer -> afkService.isAfk(onlinePlayer.getUniqueId()))
87+
.count();
88+
return afkPlayerCount;
89+
}));
11990
}
12091
}
Lines changed: 52 additions & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,47 @@
11
package com.eternalcode.core.feature.home;
22

3-
import com.eternalcode.annotations.scan.placeholder.PlaceholderDocs;
3+
import com.eternalcode.annotations.scan.placeholder.PlaceholdersDocs;
4+
import com.eternalcode.annotations.scan.placeholder.PlaceholdersDocs.Entry.Type;
45
import com.eternalcode.core.injector.annotations.Inject;
56
import com.eternalcode.core.injector.annotations.component.Controller;
67
import com.eternalcode.core.placeholder.PlaceholderRegistry;
7-
import com.eternalcode.core.placeholder.PlaceholderReplacer;
8+
import com.eternalcode.core.placeholder.Placeholder;
89
import com.eternalcode.core.publish.Subscribe;
910
import com.eternalcode.core.publish.event.EternalInitializeEvent;
1011
import com.eternalcode.core.translation.Translation;
1112
import com.eternalcode.core.translation.TranslationManager;
1213
import java.util.Collection;
1314
import java.util.stream.Collectors;
14-
import java.util.stream.Stream;
15-
import org.bukkit.entity.Player;
1615

16+
@PlaceholdersDocs(
17+
category = "Home",
18+
placeholders = {
19+
@PlaceholdersDocs.Entry(
20+
name = "homes_owned",
21+
description = "Returns a comma-separated list of all homes owned by the player. If the player has no homes, returns a localized message. e.g. `home1, home2, domek`",
22+
returnType = Type.STRING,
23+
requiresPlayer = true
24+
),
25+
@PlaceholdersDocs.Entry(
26+
name = "homes_count",
27+
description = "Returns the number of homes the player currently owns.",
28+
returnType = Type.INT,
29+
requiresPlayer = true
30+
),
31+
@PlaceholdersDocs.Entry(
32+
name = "homes_limit",
33+
description = "Returns the maximum number of homes the player can have.",
34+
returnType = Type.INT,
35+
requiresPlayer = true
36+
),
37+
@PlaceholdersDocs.Entry(
38+
name = "homes_left",
39+
description = "Returns how many more homes the player can create before reaching the limit.",
40+
returnType = Type.INT,
41+
requiresPlayer = true
42+
)
43+
}
44+
)
1745
@Controller
1846
class HomePlaceholderSetup {
1947

@@ -27,94 +55,30 @@ class HomePlaceholderSetup {
2755
}
2856

2957
@Subscribe(EternalInitializeEvent.class)
30-
void setUp(PlaceholderRegistry placeholderRegistry) {
31-
Stream.of(
32-
this.createHomesOwnedPlaceholder(),
33-
this.createHomesCountPlaceholder(),
34-
this.createHomesLimitPlaceholder(),
35-
this.createHomesLeftPlaceholder()
36-
).forEach(placeholderRegistry::registerPlaceholder);
37-
}
38-
39-
@PlaceholderDocs(
40-
name = "homes_owned",
41-
description = "Returns a comma-separated list of all homes owned by the player. If the player has no homes, returns a localized message.",
42-
example = "home1, home2, domek",
43-
returnType = "String",
44-
category = "Home",
45-
requiresPlayer = true
46-
)
47-
private PlaceholderReplacer createHomesOwnedPlaceholder() {
48-
return PlaceholderReplacer.of(
49-
"homes_owned",
50-
(text, targetPlayer) -> {
51-
Collection<Home> homes = this.homeService.getHomes(targetPlayer.getUniqueId());
52-
Translation translation = this.translationManager.getMessages(targetPlayer.getUniqueId());
58+
void setUp(PlaceholderRegistry placeholders) {
59+
placeholders.register(Placeholder.of("homes_owned", target -> {
60+
Collection<Home> homes = this.homeService.getHomes(target.getUniqueId());
61+
Translation translation = this.translationManager.getMessages(target.getUniqueId());
5362

54-
if (homes.isEmpty()) {
55-
return translation.home().noHomesOwnedPlaceholder();
56-
}
57-
58-
return homes.stream()
59-
.map(Home::getName)
60-
.collect(Collectors.joining(", "));
63+
if (homes.isEmpty()) {
64+
return translation.home().noHomesOwnedPlaceholder();
6165
}
62-
);
63-
}
6466

65-
@PlaceholderDocs(
66-
name = "homes_count",
67-
description = "Returns the number of homes the player currently owns.",
68-
example = "3",
69-
returnType = "int",
70-
category = "Home",
71-
requiresPlayer = true
72-
)
73-
private PlaceholderReplacer createHomesCountPlaceholder() {
74-
return PlaceholderReplacer.of(
75-
"homes_count",
76-
(text, targetPlayer) ->
77-
String.valueOf(this.homeService.getAmountOfHomes(targetPlayer.getUniqueId()))
78-
);
79-
}
67+
return homes.stream()
68+
.map(Home::getName)
69+
.collect(Collectors.joining(", "));
70+
}));
71+
placeholders.register(Placeholder.ofInt("homes_count", target -> this.homeService.getAmountOfHomes(target.getUniqueId())));
72+
placeholders.register(Placeholder.ofInt("homes_limit", target -> this.homeService.getHomeLimit(target)));
73+
placeholders.register(Placeholder.ofInt("homes_left", target -> {
74+
int homesLimit = this.homeService.getHomeLimit(target);
75+
int amountOfHomes = this.homeService.getAmountOfHomes(target.getUniqueId());
8076

81-
@PlaceholderDocs(
82-
name = "homes_limit",
83-
description = "Returns the maximum number of homes the player can have.",
84-
example = "5",
85-
returnType = "int",
86-
category = "Home",
87-
requiresPlayer = true
88-
)
89-
private PlaceholderReplacer createHomesLimitPlaceholder() {
90-
return PlaceholderReplacer.of(
91-
"homes_limit",
92-
(text, targetPlayer) ->
93-
String.valueOf(this.homeService.getHomeLimit(targetPlayer))
94-
);
95-
}
96-
97-
@PlaceholderDocs(
98-
name = "homes_left",
99-
description = "Returns how many more homes the player can create before reaching the limit.",
100-
example = "2",
101-
returnType = "int",
102-
category = "Home",
103-
requiresPlayer = true
104-
)
105-
private PlaceholderReplacer createHomesLeftPlaceholder() {
106-
return PlaceholderReplacer.of(
107-
"homes_left",
108-
(text, targetPlayer) -> {
109-
int homesLimit = this.homeService.getHomeLimit(targetPlayer);
110-
int amountOfHomes = this.homeService.getAmountOfHomes(targetPlayer.getUniqueId());
111-
112-
if (homesLimit < -1 || amountOfHomes > homesLimit) {
113-
return "0";
114-
}
115-
116-
return String.valueOf(homesLimit - amountOfHomes);
77+
if (homesLimit < -1 || amountOfHomes > homesLimit) {
78+
return 0;
11779
}
118-
);
80+
81+
return homesLimit - amountOfHomes;
82+
}));
11983
}
12084
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package com.eternalcode.core.placeholder;
2+
3+
import org.bukkit.entity.Player;
4+
5+
import java.util.function.Function;
6+
7+
public interface Placeholder {
8+
9+
String apply(String text, Player targetPlayer);
10+
11+
static Placeholder of(String target, String replacement) {
12+
return new PlaceholderRaw(target, player -> replacement);
13+
}
14+
15+
static Placeholder of(String target, Function<Player, String> replacement) {
16+
return new PlaceholderRaw(target, replacement);
17+
}
18+
19+
static Placeholder ofInt(String target, Function<Player, Integer> replacement) {
20+
return new PlaceholderRaw(target, player -> String.valueOf(replacement.apply(player)));
21+
}
22+
23+
static Placeholder ofBoolean(String target, Function<Player, Boolean> replacement) {
24+
return new PlaceholderRaw(target, player -> String.valueOf(replacement.apply(player)));
25+
}
26+
27+
static Placeholder ofLong(String target, Function<Player, Long> replacement) {
28+
return new PlaceholderRaw(target, player -> String.valueOf(replacement.apply(player)));
29+
}
30+
31+
static Placeholder of(String target, Placeholder placeholder) {
32+
return new PlaceholderRaw(target, player -> placeholder.apply(target, player));
33+
}
34+
35+
}

0 commit comments

Comments
 (0)