Skip to content

Commit 5674e4c

Browse files
committed
merge: branch 'TureBentzin-develop' into develop
2 parents c591932 + 2f93a3e commit 5674e4c

3 files changed

Lines changed: 61 additions & 29 deletions

File tree

src/main/java/me/zetastormy/akropolis/hook/HooksManager.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import me.zetastormy.akropolis.hook.hooks.head.BaseHead;
3030
import me.zetastormy.akropolis.hook.hooks.head.DatabaseHead;
3131
import me.zetastormy.akropolis.util.text.PlaceholderUtil;
32+
import me.zetastormy.akropolis.util.text.TextUtil;
3233

3334
public class HooksManager {
3435
private final Map<String, PluginHook> hooks;
@@ -54,6 +55,7 @@ public HooksManager(AkropolisPlugin plugin) {
5455
if (Bukkit.getPluginManager().isPluginEnabled("MiniPlaceholders")) {
5556
hooks.put("MINIPLACEHOLDERS", null);
5657
PlaceholderUtil.setMPState(true);
58+
TextUtil.setMPState(true);
5759
plugin.getLogger().info("Hooked into MiniPlaceholders");
5860
}
5961

src/main/java/me/zetastormy/akropolis/util/text/PlaceholderUtil.java

Lines changed: 41 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919

2020
package me.zetastormy.akropolis.util.text;
2121

22+
import java.util.Stack;
23+
2224
import org.bukkit.Bukkit;
2325
import org.bukkit.ChatColor;
2426
import org.bukkit.Location;
@@ -28,6 +30,7 @@
2830
import me.clip.placeholderapi.PlaceholderAPI;
2931
import me.zetastormy.akropolis.AkropolisPlugin;
3032
import me.zetastormy.akropolis.module.modules.world.SongPlayerManager;
33+
import net.kyori.adventure.audience.Audience;
3134
import net.kyori.adventure.text.Component;
3235
import net.kyori.adventure.text.minimessage.tag.Tag;
3336
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
@@ -41,30 +44,6 @@ private PlaceholderUtil() {
4144
throw new UnsupportedOperationException();
4245
}
4346

44-
public static Component setPlaceholders(String rawText, Player player) {
45-
String text = rawText;
46-
47-
text = text.replace("<online>", String.valueOf(Bukkit.getOnlinePlayers().size()))
48-
.replace("<online_max>", String.valueOf(Bukkit.getMaxPlayers()))
49-
.replace("<current_song>", getCurrentSong());
50-
51-
if (player != null) {
52-
text = text.replace("<player>", player.getName())
53-
.replace("<ping>", String.valueOf(player.getPing()))
54-
.replace("<world>", player.getWorld().getName())
55-
.replace("<location>", formatLocation(player.getLocation()));
56-
57-
return TextUtil.parse(
58-
text,
59-
player,
60-
(papi) ? papiTag(player) : TagResolver.empty(),
61-
(miniplaceholders) ? MiniPlaceholders.audienceGlobalPlaceholders() : TagResolver.empty()
62-
);
63-
}
64-
65-
return TextUtil.parse(text);
66-
}
67-
6847
private static String formatLocation(Location loc) {
6948
return loc.getBlockX() + ", " + loc.getBlockY() + ", " + loc.getBlockZ();
7049
}
@@ -74,6 +53,44 @@ private static String getCurrentSong() {
7453
return songPlayerManager != null ? songPlayerManager.getCurrentSong() : "None";
7554
}
7655

56+
/**
57+
* Pushes a tag resolver onto the stack that inserts (self-closing) the given component for the given name.
58+
* @param tagResolvers the mutable stack of tag resolvers
59+
* @param name the name of the tag to resolve (e.g. "player", "ping", etc.)
60+
* @param component the component to insert when the tag is resolved
61+
*/
62+
private static void pushTagResolver(final Stack<TagResolver> tagResolvers, final String name, final Component component) {
63+
tagResolvers.push(TagResolver.resolver(name, (argumentQueue, context)
64+
-> Tag.selfClosingInserting(component)));
65+
}
66+
67+
public static Component setPlaceholders(String rawText, Audience audience) {
68+
final Stack<TagResolver> tagResolvers = new Stack<>();
69+
70+
pushTagResolver(tagResolvers, "online", Component.text(Bukkit.getOnlinePlayers().size()));
71+
pushTagResolver(tagResolvers, "online_max", Component.text(Bukkit.getMaxPlayers()));
72+
pushTagResolver(tagResolvers, "current_song", Component.text(getCurrentSong()));
73+
74+
if ((audience instanceof Player player)) {
75+
pushTagResolver(tagResolvers, "player", Component.text(player.getName()));
76+
pushTagResolver(tagResolvers, "ping", Component.text(player.getPing()));
77+
pushTagResolver(tagResolvers, "world", Component.text(player.getWorld().getName()));
78+
pushTagResolver(tagResolvers, "location", Component.text(formatLocation(player.getLocation())));
79+
80+
if (papi) {
81+
tagResolvers.push(papiTag(player));
82+
}
83+
84+
if (miniplaceholders) {
85+
tagResolvers.push(MiniPlaceholders.audienceGlobalPlaceholders());
86+
87+
return TextUtil.parse(rawText, audience, TagResolver.resolver(tagResolvers));
88+
}
89+
}
90+
91+
return TextUtil.parse(rawText, TagResolver.resolver(tagResolvers));
92+
}
93+
7794
@SuppressWarnings("deprecation")
7895
public static TagResolver papiTag(Player player) {
7996
return TagResolver.resolver("papi", (argumentQueue, context) -> {

src/main/java/me/zetastormy/akropolis/util/text/TextUtil.java

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,10 @@
1919

2020
package me.zetastormy.akropolis.util.text;
2121

22-
import net.kyori.adventure.pointer.Pointered;
2322
import org.bukkit.Color;
2423

24+
import io.github.miniplaceholders.api.MiniPlaceholders;
25+
import net.kyori.adventure.pointer.Pointered;
2526
import net.kyori.adventure.text.Component;
2627
import net.kyori.adventure.text.minimessage.MiniMessage;
2728
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
@@ -30,16 +31,24 @@
3031
public class TextUtil {
3132
private static final MiniMessage MINI_MESSAGE = MiniMessage.miniMessage();
3233

34+
private static boolean miniplaceholders = false;
35+
3336
private TextUtil() {
3437
throw new UnsupportedOperationException();
3538
}
3639

3740
public static Component parse(String message) {
38-
return MINI_MESSAGE.deserialize(message);
41+
if (miniplaceholders)
42+
return MINI_MESSAGE.deserialize(message, MiniPlaceholders.globalPlaceholders());
43+
else
44+
return MINI_MESSAGE.deserialize(message);
3945
}
4046

4147
public static Component parse(String message, TagResolver resolver) {
42-
return MINI_MESSAGE.deserialize(message, resolver);
48+
if (miniplaceholders)
49+
return MINI_MESSAGE.deserialize(message, resolver, MiniPlaceholders.globalPlaceholders());
50+
else
51+
return MINI_MESSAGE.deserialize(message, resolver);
4352
}
4453

4554
public static Component parse(String message, Pointered target, TagResolver... resolver) {
@@ -51,11 +60,11 @@ public static String raw(Component message) {
5160
}
5261

5362
public static Component parseAndReplace(String message, String pattern, Component replacement) {
54-
return MINI_MESSAGE.deserialize(message, Placeholder.component(pattern, replacement));
63+
return parse(message, Placeholder.component(pattern, replacement));
5564
}
5665

5766
public static Component replace(Component message, String pattern, Component replacement) {
58-
return MINI_MESSAGE.deserialize(raw(message), Placeholder.component(pattern, replacement));
67+
return parse(raw(message), Placeholder.component(pattern, replacement));
5968
}
6069

6170
public static String joinString(int index, String[] args) {
@@ -90,4 +99,8 @@ public static Color getColor(String s) {
9099
default -> null;
91100
};
92101
}
102+
103+
public static void setMPState(boolean miniplaceholders) {
104+
TextUtil.miniplaceholders = miniplaceholders;
105+
}
93106
}

0 commit comments

Comments
 (0)