Skip to content

Commit ef3dc32

Browse files
Patch
1 parent 5fb6cb1 commit ef3dc32

1 file changed

Lines changed: 30 additions & 6 deletions

File tree

src/main/kotlin/org/elliotnash/yepspigot/YepPaperPlugin.kt

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ class YepPaperPlugin : JavaPlugin(), Listener {
2424
private val colorCodeRegex = "&[0-9a-fk-orx]".toRegex(RegexOption.IGNORE_CASE)
2525

2626
override fun onEnable() {
27-
// Advancement details are optional - plugin works without them
2827
Bukkit.getPluginManager().registerEvents(this, this)
2928
Bukkit.getMessenger().registerOutgoingPluginChannel(this, YEP_GENERIC)
3029
Bukkit.getMessenger().registerOutgoingPluginChannel(this, YEP_ADVANCEMENT)
@@ -50,9 +49,11 @@ class YepPaperPlugin : JavaPlugin(), Listener {
5049
@EventHandler
5150
fun onPlayerAdvancement(event: PlayerAdvancementDoneEvent) {
5251
val advancement = event.advancement
53-
val key = advancement.key
5452
val player = event.player
5553

54+
// Skip recipe unlocks
55+
if (advancement.key.key.startsWith("recipes/")) return
56+
5657
val (frameType, title, description) = getAdvancementInfo(advancement)
5758

5859
val message: String = String.format(
@@ -70,10 +71,33 @@ class YepPaperPlugin : JavaPlugin(), Listener {
7071

7172
private fun getAdvancementInfo(advancement: Advancement): Triple<String, String, String> {
7273
val defaultTitle = advancement.key.key
73-
val defaultDesc = ""
74-
75-
// Just use default values - advancement display details are optional
76-
return Triple(YEP_ADV_DEFAULT, defaultTitle, defaultDesc)
74+
val defaultDesc = " "
75+
76+
return try {
77+
// CraftAdvancement has getDisplay() which returns AdvancementDisplay
78+
val displayMethod = advancement.javaClass.getDeclaredMethod("getDisplay")
79+
val display = displayMethod.invoke(advancement) ?: return Triple(YEP_ADV_DEFAULT, defaultTitle, defaultDesc)
80+
81+
val titleMethod = display.javaClass.getMethod("getTitle")
82+
val descMethod = display.javaClass.getMethod("getDescription")
83+
val frameMethod = display.javaClass.getMethod("getType")
84+
85+
val title = titleMethod.invoke(display)?.toString() ?: defaultTitle
86+
val description = descMethod.invoke(display)?.toString() ?: defaultDesc
87+
88+
val frame = frameMethod.invoke(display)
89+
val frameType = when (frame?.toString()?.uppercase()) {
90+
"CHALLENGE" -> YEP_ADV_CHALLENGE
91+
"GOAL" -> YEP_ADV_GOAL
92+
"TASK" -> YEP_ADV_TASK
93+
else -> YEP_ADV_DEFAULT
94+
}
95+
96+
Triple(frameType, title, if (description.isBlank()) " " else description)
97+
} catch (e: Exception) {
98+
logger.warning("Failed to get advancement info: ${e.javaClass.simpleName}: ${e.message}")
99+
Triple(YEP_ADV_DEFAULT, defaultTitle, defaultDesc)
100+
}
77101
}
78102

79103
private fun removeColorCodes(input: String): String {

0 commit comments

Comments
 (0)