@@ -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