1515*/
1616package me .hsgamer .bettergui .betterdialogs .text ;
1717
18+ import io .github .miniplaceholders .api .MiniPlaceholders ;
1819import me .hsgamer .hscore .common .MapUtils ;
20+ import net .kyori .adventure .text .Component ;
1921import net .kyori .adventure .text .minimessage .MiniMessage ;
22+ import net .kyori .adventure .text .minimessage .tag .resolver .TagResolver ;
2023import net .kyori .adventure .text .serializer .gson .GsonComponentSerializer ;
24+ import org .bukkit .Bukkit ;
25+ import org .bukkit .entity .Player ;
2126
2227import java .util .Arrays ;
2328import java .util .Map ;
2631import java .util .stream .Stream ;
2732
2833public class PaperTextGetter implements TextGetter {
34+ private static final boolean IS_MINI_PLACEHOLDERS_SUPPORTED ;
35+
36+ static {
37+ boolean isMiniPlaceholdersSupported = false ;
38+ if (Bukkit .getPluginManager ().getPlugin ("MiniPlaceholders" ) != null ) {
39+ try {
40+ Class <?> clazz = Class .forName ("io.github.miniplaceholders.api.MiniPlaceholders" );
41+ clazz .getDeclaredMethod ("audienceGlobalPlaceholders" );
42+ Class <?> pointerClass = Class .forName ("net.kyori.adventure.pointer.Pointered" );
43+ MiniMessage .class .getDeclaredMethod ("deserialize" , String .class , pointerClass , TagResolver .class );
44+ isMiniPlaceholdersSupported = true ;
45+ } catch (Exception e ) {
46+ // IGNORE
47+ }
48+ }
49+ IS_MINI_PLACEHOLDERS_SUPPORTED = isMiniPlaceholdersSupported ;
50+ }
51+
52+ public Component miniMessage (String input , Player player ) {
53+ if (IS_MINI_PLACEHOLDERS_SUPPORTED ) {
54+ TagResolver tagResolver = MiniPlaceholders .audienceGlobalPlaceholders ();
55+ return MiniMessage .miniMessage ().deserialize (input , player , tagResolver );
56+ }
57+ return MiniMessage .miniMessage ().deserialize (input );
58+ }
59+
2960 @ Override
3061 public Optional <Text > get (Map <String , Object > input , String ... keys ) {
3162 String [] miniKeys = Arrays .stream (keys ).flatMap (k -> Stream .of ("mini-" + k , k + "$" )).toArray (String []::new );
3263 Optional <String > miniText = Optional .ofNullable (MapUtils .getIfFound (input , miniKeys )).map (Object ::toString );
3364 if (miniText .isPresent ()) {
34- return Optional .of (new Text (true , miniText .get (), ( s , p ) -> MiniMessage . miniMessage (). deserialize ( s ) ));
65+ return Optional .of (new Text (true , miniText .get (), this :: miniMessage ));
3566 }
3667
3768 String [] jsonKeys = Arrays .stream (keys ).map (k -> "json-" + k ).toArray (String []::new );
@@ -51,7 +82,7 @@ public Map<String, Text> getMap(Map<String, Object> input, String key) {
5182 return miniMap .entrySet ().stream ()
5283 .filter (e -> e .getKey () instanceof String )
5384 .filter (e -> e .getValue () != null )
54- .map (e -> Map .entry ((String ) e .getKey (), new Text (true , e .getValue ().toString (), ( s , p ) -> MiniMessage . miniMessage (). deserialize ( s ) )))
85+ .map (e -> Map .entry ((String ) e .getKey (), new Text (true , e .getValue ().toString (), this :: miniMessage )))
5586 .collect (Collectors .toMap (
5687 Map .Entry ::getKey ,
5788 Map .Entry ::getValue ,
0 commit comments