11package 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 .*;
46import com .eternalcode .core .feature .afk .Afk ;
57import com .eternalcode .core .feature .afk .AfkService ;
68import com .eternalcode .core .injector .annotations .Inject ;
79import com .eternalcode .core .injector .annotations .component .Controller ;
810import com .eternalcode .core .placeholder .PlaceholderRegistry ;
9- import com .eternalcode .core .placeholder .PlaceholderReplacer ;
11+ import com .eternalcode .core .placeholder .Placeholder ;
1012import com .eternalcode .core .publish .Subscribe ;
1113import com .eternalcode .core .publish .event .EternalInitializeEvent ;
1214import com .eternalcode .core .translation .Translation ;
1719import java .util .Optional ;
1820import 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
2152class 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}
0 commit comments