Skip to content

Commit eb6a171

Browse files
committed
feat: Support MiniMessage in ItemMetaPayload
1 parent e5a51b5 commit eb6a171

6 files changed

Lines changed: 54 additions & 32 deletions

File tree

mimic-bukkit/api/mimic-bukkit.api

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -279,24 +279,24 @@ public final class ru/endlesscode/mimic/impl/skillapi/SkillApiLevelSystem$Compan
279279
public final class ru/endlesscode/mimic/impl/vanilla/ItemMetaPayload {
280280
public static final field Companion Lru/endlesscode/mimic/impl/vanilla/ItemMetaPayload$Companion;
281281
public fun <init> ()V
282-
public fun <init> (Ljava/lang/String;Ljava/util/List;ZILjava/lang/Integer;Ljava/util/Map;Ljava/util/Set;)V
283-
public synthetic fun <init> (Ljava/lang/String;Ljava/util/List;ZILjava/lang/Integer;Ljava/util/Map;Ljava/util/Set;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
284-
public final fun component1 ()Ljava/lang/String;
282+
public fun <init> (Lnet/kyori/adventure/text/Component;Ljava/util/List;ZILjava/lang/Integer;Ljava/util/Map;Ljava/util/Set;)V
283+
public synthetic fun <init> (Lnet/kyori/adventure/text/Component;Ljava/util/List;ZILjava/lang/Integer;Ljava/util/Map;Ljava/util/Set;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
284+
public final fun component1 ()Lnet/kyori/adventure/text/Component;
285285
public final fun component2 ()Ljava/util/List;
286286
public final fun component3 ()Z
287287
public final fun component4 ()I
288288
public final fun component5 ()Ljava/lang/Integer;
289289
public final fun component6 ()Ljava/util/Map;
290290
public final fun component7 ()Ljava/util/Set;
291-
public final fun copy (Ljava/lang/String;Ljava/util/List;ZILjava/lang/Integer;Ljava/util/Map;Ljava/util/Set;)Lru/endlesscode/mimic/impl/vanilla/ItemMetaPayload;
292-
public static synthetic fun copy$default (Lru/endlesscode/mimic/impl/vanilla/ItemMetaPayload;Ljava/lang/String;Ljava/util/List;ZILjava/lang/Integer;Ljava/util/Map;Ljava/util/Set;ILjava/lang/Object;)Lru/endlesscode/mimic/impl/vanilla/ItemMetaPayload;
291+
public final fun copy (Lnet/kyori/adventure/text/Component;Ljava/util/List;ZILjava/lang/Integer;Ljava/util/Map;Ljava/util/Set;)Lru/endlesscode/mimic/impl/vanilla/ItemMetaPayload;
292+
public static synthetic fun copy$default (Lru/endlesscode/mimic/impl/vanilla/ItemMetaPayload;Lnet/kyori/adventure/text/Component;Ljava/util/List;ZILjava/lang/Integer;Ljava/util/Map;Ljava/util/Set;ILjava/lang/Object;)Lru/endlesscode/mimic/impl/vanilla/ItemMetaPayload;
293293
public fun equals (Ljava/lang/Object;)Z
294294
public final fun getCustomModelData ()Ljava/lang/Integer;
295295
public final fun getDamage ()I
296296
public final fun getEnchantments ()Ljava/util/Map;
297297
public final fun getFlags ()Ljava/util/Set;
298298
public final fun getLore ()Ljava/util/List;
299-
public final fun getName ()Ljava/lang/String;
299+
public final fun getName ()Lnet/kyori/adventure/text/Component;
300300
public fun hashCode ()I
301301
public final fun isUnbreakable ()Z
302302
public static final fun of (Ljava/lang/Object;)Lru/endlesscode/mimic/impl/vanilla/ItemMetaPayload;

mimic-bukkit/src/main/kotlin/impl/vanilla/ItemMetaPayload.kt

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
* along with BukkitMimic. If not, see <http://www.gnu.org/licenses/>.
1818
*/
1919

20-
@file:UseSerializers(EnchantmentSerializer::class, ItemFlagsSerializer::class)
20+
@file:UseSerializers(EnchantmentSerializer::class, ItemFlagsSerializer::class, MiniMessageComponentSerializer::class)
2121

2222
package ru.endlesscode.mimic.impl.vanilla
2323

@@ -26,18 +26,16 @@ import kotlinx.serialization.SerialName
2626
import kotlinx.serialization.Serializable
2727
import kotlinx.serialization.UseSerializers
2828
import kotlinx.serialization.hocon.decodeFromConfig
29+
import net.kyori.adventure.text.Component
2930
import org.bukkit.enchantments.Enchantment
3031
import org.bukkit.inventory.ItemFlag
31-
import ru.endlesscode.mimic.internal.DI
32-
import ru.endlesscode.mimic.internal.EnchantmentSerializer
33-
import ru.endlesscode.mimic.internal.ItemFlagsSerializer
34-
import ru.endlesscode.mimic.internal.Log
32+
import ru.endlesscode.mimic.internal.*
3533

3634
/**
3735
* Payload to configure item's [ItemMeta][org.bukkit.inventory.meta.ItemMeta].
3836
*
39-
* @property name Item name. You can specify colors using symbol `&`.
40-
* @property lore Item lore. You can specify colors using symbol `&`.
37+
* @property name Item name. Supports MiniMessage formatting.
38+
* @property lore Item lore. Supports MiniMessage formatting.
4139
* @property isUnbreakable Is item unbreakable. Affects only items that have durability (like weapons or tools).
4240
* @property damage Damage to item durability. Affects only items that have durability (like weapons or tools).
4341
* @property customModelData A value used to override item model.
@@ -48,8 +46,8 @@ import ru.endlesscode.mimic.internal.Log
4846
*/
4947
@Serializable
5048
public data class ItemMetaPayload(
51-
val name: String? = null,
52-
val lore: List<String>? = null,
49+
val name: Component? = null,
50+
val lore: List<Component>? = null,
5351
@SerialName("unbreakable")
5452
val isUnbreakable: Boolean = false,
5553
val damage: Int = 0,

mimic-bukkit/src/main/kotlin/impl/vanilla/MinecraftItemsRegistry.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ import org.bukkit.inventory.meta.Damageable
2525
import org.bukkit.inventory.meta.ItemMeta
2626
import ru.endlesscode.mimic.internal.Log
2727
import ru.endlesscode.mimic.internal.callCompat
28-
import ru.endlesscode.mimic.internal.colorized
2928
import ru.endlesscode.mimic.items.BukkitItemsRegistry
3029

3130
/**
@@ -68,8 +67,8 @@ public class MinecraftItemsRegistry : BukkitItemsRegistry {
6867

6968
private fun ItemMeta.applyPayload(payload: ItemMetaPayload): ItemMeta {
7069
// Apply text options
71-
setDisplayName(payload.name?.colorized())
72-
lore = payload.lore?.colorized()
70+
displayName(payload.name)
71+
lore(payload.lore)
7372

7473
// Apply damage and custom model data
7574
isUnbreakable = payload.isUnbreakable

mimic-bukkit/src/main/kotlin/internal/Colors.kt

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,4 @@ package ru.endlesscode.mimic.internal
2121

2222
import org.bukkit.ChatColor
2323

24-
internal fun List<String>.colorized(): List<String> = map { it.colorized() }
25-
26-
internal fun String.colorized(): String = ChatColor.translateAlternateColorCodes('&', this)
27-
2824
internal fun String.stripColor(): String = checkNotNull(ChatColor.stripColor(this))

mimic-bukkit/src/main/kotlin/internal/Serializers.kt

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,28 +26,39 @@ import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
2626
import kotlinx.serialization.descriptors.SerialDescriptor
2727
import kotlinx.serialization.encoding.Decoder
2828
import kotlinx.serialization.encoding.Encoder
29+
import net.kyori.adventure.text.Component
30+
import net.kyori.adventure.text.minimessage.MiniMessage
2931
import org.bukkit.Registry
3032
import org.bukkit.enchantments.Enchantment
3133
import org.bukkit.inventory.ItemFlag
3234

3335
internal object EnchantmentSerializer : KSerializer<Enchantment> {
34-
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("org.bukkit.enchantments.Enchantment", PrimitiveKind.STRING)
36+
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor(
37+
"org.bukkit.enchantments.Enchantment",
38+
PrimitiveKind.STRING
39+
)
3540

3641
override fun deserialize(decoder: Decoder): Enchantment {
3742
val value = decoder.decodeString()
3843
val key = namespacedKeyOf(value.replace(" ", "_").lowercase())
39-
?: throw SerializationException("$value is not a valid key for enchantment, " +
40-
"only latin letters, digits and symbol _ are allowed")
44+
?: throw SerializationException(
45+
"$value is not a valid key for enchantment, only latin letters, digits and symbol _ are allowed"
46+
)
4147
return Registry.ENCHANTMENT[key]
42-
?: throw SerializationException("$value is not a valid key for enchantment, " +
43-
"must be one of: [${Registry.ENCHANTMENT.joinToString { it.key.toString() }}]")
48+
?: throw SerializationException(
49+
"$value is not a valid key for enchantment, " +
50+
"must be one of: [${Registry.ENCHANTMENT.joinToString { it.key.toString() }}]"
51+
)
4452
}
4553

4654
override fun serialize(encoder: Encoder, value: Enchantment) = encoder.encodeString(value.key.toString())
4755
}
4856

4957
internal object ItemFlagsSerializer : KSerializer<ItemFlag> {
50-
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("ItemFlag", PrimitiveKind.STRING)
58+
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor(
59+
"org.bukkit.inventory.ItemFlag",
60+
PrimitiveKind.STRING,
61+
)
5162

5263
override fun deserialize(decoder: Decoder): ItemFlag {
5364
val value = decoder.decodeString()
@@ -57,3 +68,20 @@ internal object ItemFlagsSerializer : KSerializer<ItemFlag> {
5768

5869
override fun serialize(encoder: Encoder, value: ItemFlag) = encoder.encodeString(value.name)
5970
}
71+
72+
internal object MiniMessageComponentSerializer : KSerializer<Component> {
73+
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor(
74+
"net.kyori.adventure.text.Component",
75+
PrimitiveKind.STRING,
76+
)
77+
78+
private val mm = MiniMessage.miniMessage()
79+
80+
override fun deserialize(decoder: Decoder): Component {
81+
return mm.deserialize(decoder.decodeString())
82+
}
83+
84+
override fun serialize(encoder: Encoder, value: Component) {
85+
encoder.encodeString(mm.serialize(value))
86+
}
87+
}

mimic-bukkit/src/test/kotlin/impl/vanilla/ItemMetaPayloadTest.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ package ru.endlesscode.mimic.impl.vanilla
2121

2222
import io.kotest.matchers.nulls.shouldBeNull
2323
import io.kotest.matchers.shouldBe
24+
import net.kyori.adventure.text.Component.text
2425
import org.bukkit.inventory.ItemFlag
2526
import org.junit.jupiter.params.ParameterizedTest
2627
import org.junit.jupiter.params.provider.Arguments
@@ -55,8 +56,8 @@ internal class ItemMetaPayloadTest {
5556
@JvmStatic
5657
fun validData(): Stream<Arguments> = Stream.of(
5758
// Simple cases
58-
arguments("{name: Name}", ItemMetaPayload(name = "Name")),
59-
arguments("name=Name", ItemMetaPayload(name = "Name")),
59+
arguments("{name: Name}", ItemMetaPayload(name = text("Name"))),
60+
arguments("name=Name", ItemMetaPayload(name = text("Name"))),
6061
arguments(
6162
"""
6263
name = Name,
@@ -67,8 +68,8 @@ internal class ItemMetaPayloadTest {
6768
flags = [HIDE_ATTRIBUTES, HIDE_DYE]
6869
""",
6970
ItemMetaPayload(
70-
name = "Name",
71-
lore = listOf("Line1", "Line2"),
71+
name = text("Name"),
72+
lore = listOf(text("Line1"), text("Line2")),
7273
isUnbreakable = true,
7374
damage = 42,
7475
customModelData = 24,

0 commit comments

Comments
 (0)