/
Placeholders.java
50 lines (43 loc) · 1.74 KB
/
Placeholders.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package net.citizensnpcs.api.util;
import java.util.regex.Pattern;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Entity;
import me.clip.placeholderapi.PlaceholderAPI;
import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.api.trait.trait.Owner;
public class Placeholders {
public static String replace(String text, CommandSender sender, NPC npc) {
text = replace(text, sender instanceof OfflinePlayer ? (OfflinePlayer) sender : null);
if (npc == null) {
return text;
}
text = text.replace("<owner>", npc.getOrAddTrait(Owner.class).getOwner());
text = text.replace("<npc>", npc.getName());
text = text.replace("<id>", Integer.toString(npc.getId()));
return text;
}
public static String replace(String text, OfflinePlayer player) {
if (player == null) {
return setPlaceholderAPIPlaceholders(text, player);
}
text = PLAYER_MATCHER.matcher(text).replaceAll(player.getName());
if (player instanceof Entity && ((Entity) player).isValid()) {
text = text.replace("<world>", ((Entity) player).getWorld().getName());
}
return setPlaceholderAPIPlaceholders(text, player);
}
private static String setPlaceholderAPIPlaceholders(String text, OfflinePlayer player) {
if (!PLACEHOLDERAPI_ENABLED) {
return text;
}
try {
return PlaceholderAPI.setPlaceholders(player, text);
} catch (Throwable t) {
PLACEHOLDERAPI_ENABLED = false;
return text;
}
}
private static boolean PLACEHOLDERAPI_ENABLED = true;
private static Pattern PLAYER_MATCHER = Pattern.compile("<player>|<p>");
}