Skip to content

Commit 7d27614

Browse files
committed
Add papi minimessage tag
1 parent f1d85c9 commit 7d27614

File tree

3 files changed

+44
-6
lines changed

3 files changed

+44
-6
lines changed

bukkit/src/main/kotlin/io/github/rothes/esu/bukkit/user/BukkitUser.kt

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,11 @@ package io.github.rothes.esu.bukkit.user
22

33
import io.github.rothes.esu.bukkit.audience
44
import io.github.rothes.esu.bukkit.config.data.ItemData
5-
import io.github.rothes.esu.bukkit.util.version.adapter.ItemStackAdapter.Companion.displayName_
6-
import io.github.rothes.esu.bukkit.util.version.adapter.ItemStackAdapter.Companion.lore_
7-
import io.github.rothes.esu.bukkit.util.version.adapter.ItemStackAdapter.Companion.meta
5+
import io.github.rothes.esu.bukkit.util.ComponentBukkitUtils
86
import io.github.rothes.esu.core.configuration.ConfigurationPart
97
import io.github.rothes.esu.core.configuration.MultiLocaleConfiguration
108
import io.github.rothes.esu.core.user.User
119
import io.github.rothes.esu.lib.net.kyori.adventure.audience.Audience
12-
import io.github.rothes.esu.lib.net.kyori.adventure.text.Component
13-
import io.github.rothes.esu.lib.net.kyori.adventure.text.minimessage.MiniMessage
1410
import io.github.rothes.esu.lib.net.kyori.adventure.text.minimessage.tag.resolver.TagResolver
1511
import org.bukkit.command.CommandSender
1612
import org.bukkit.inventory.ItemStack
@@ -21,6 +17,13 @@ abstract class BukkitUser: User {
2117
override val audience: Audience by lazy {
2218
commandSender.audience
2319
}
20+
private val tagResolvers by lazy {
21+
User.DEFAULT_TAG_RESOLVERS.plus(ComponentBukkitUtils.papi(this))
22+
}
23+
24+
override fun getTagResolvers(): Iterable<TagResolver> {
25+
return tagResolvers
26+
}
2427

2528
override var language: String?
2629
get() = languageUnsafe ?: clientLocale

bukkit/src/main/kotlin/io/github/rothes/esu/bukkit/util/ComponentBukkitUtils.kt

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,19 @@ import io.github.rothes.esu.core.user.User
77
import io.github.rothes.esu.core.util.AdventureConverter.esu
88
import io.github.rothes.esu.core.util.ComponentUtils.component
99
import io.github.rothes.esu.core.util.ComponentUtils.unparsed
10+
import io.github.rothes.esu.lib.net.kyori.adventure.text.Component
11+
import io.github.rothes.esu.lib.net.kyori.adventure.text.minimessage.tag.Tag
1012
import io.github.rothes.esu.lib.net.kyori.adventure.text.minimessage.tag.resolver.Placeholder
1113
import io.github.rothes.esu.lib.net.kyori.adventure.text.minimessage.tag.resolver.TagResolver
14+
import me.clip.placeholderapi.PlaceholderAPIPlugin
15+
import org.bukkit.Bukkit
1216
import org.bukkit.entity.Player
1317

1418
object ComponentBukkitUtils {
1519

20+
private val PAPI_TAG_NAMES = setOf("placeholderapi", "papi")
21+
private val HAS_PLACEHOLDER_API = Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")
22+
1623
fun player(player: Player, key: String = "player"): TagResolver.Single {
1724
return Placeholder.component(key, player.displayName_)
1825
}
@@ -25,4 +32,20 @@ object ComponentBukkitUtils {
2532
}
2633
}
2734

35+
fun papi(user: User): TagResolver {
36+
val player = if (user is PlayerUser) user.player else null
37+
return TagResolver.resolver(PAPI_TAG_NAMES) { arg, _ ->
38+
val papi = arg.popOr("One argument expected for papi tag").value()
39+
if (HAS_PLACEHOLDER_API) {
40+
val split = papi.split('_', limit = 2)
41+
val expansion = PlaceholderAPIPlugin.getInstance().localExpansionManager.getExpansion(split[0].lowercase())
42+
?: return@resolver Tag.inserting(Component.text(papi))
43+
val result = expansion.onRequest(player, split.getOrElse(1) { "" })
44+
Tag.inserting(Component.text(result ?: papi))
45+
} else {
46+
Tag.inserting(Component.text(papi))
47+
}
48+
}
49+
}
50+
2851
}

core/src/main/kotlin/io/github/rothes/esu/core/user/User.kt

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,10 @@ interface User {
4545
val colorSchemeTagResolver
4646
get() = colorSchemeTagInstance.tagResolver
4747

48+
fun getTagResolvers(): Iterable<TagResolver> {
49+
return DEFAULT_TAG_RESOLVERS
50+
}
51+
4852
fun hasPermission(permission: String): Boolean
4953

5054
fun <V, R> localedOrNull(langMap: Map<String, V>, block: (V) -> R?): R? {
@@ -110,7 +114,11 @@ interface User {
110114
else
111115
it
112116
},
113-
*params, colorSchemeTagResolver, capitalize
117+
TagResolver.builder()
118+
.resolvers(*params)
119+
.resolvers(getTagResolvers())
120+
.resolvers(colorSchemeTagResolver)
121+
.build()
114122
)
115123
}
116124

@@ -198,4 +206,8 @@ interface User {
198206
actionBar(message.esu)
199207
}
200208

209+
companion object {
210+
val DEFAULT_TAG_RESOLVERS = listOf(capitalize)
211+
}
212+
201213
}

0 commit comments

Comments
 (0)