Skip to content

Commit 1042b1b

Browse files
committed
bukkit: Skip item meta creation if there is no payload
1 parent 4e7f7ff commit 1042b1b

3 files changed

Lines changed: 23 additions & 16 deletions

File tree

mimic-bukkit/api/mimic-bukkit.api

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,7 @@ public final class ru/endlesscode/mimic/impl/vanilla/ItemMetaPayload {
299299
public final fun getName ()Ljava/lang/String;
300300
public fun hashCode ()I
301301
public final fun isUnbreakable ()Z
302+
public static final fun of (Ljava/lang/Object;)Lru/endlesscode/mimic/impl/vanilla/ItemMetaPayload;
302303
public static final fun parse (Ljava/lang/String;)Lru/endlesscode/mimic/impl/vanilla/ItemMetaPayload;
303304
public fun toString ()Ljava/lang/String;
304305
public static final fun write$Self (Lru/endlesscode/mimic/impl/vanilla/ItemMetaPayload;Lkotlinx/serialization/encoding/CompositeEncoder;Lkotlinx/serialization/descriptors/SerialDescriptor;)V
@@ -317,6 +318,7 @@ public final class ru/endlesscode/mimic/impl/vanilla/ItemMetaPayload$$serializer
317318
}
318319

319320
public final class ru/endlesscode/mimic/impl/vanilla/ItemMetaPayload$Companion {
321+
public final fun of (Ljava/lang/Object;)Lru/endlesscode/mimic/impl/vanilla/ItemMetaPayload;
320322
public final fun parse (Ljava/lang/String;)Lru/endlesscode/mimic/impl/vanilla/ItemMetaPayload;
321323
public final fun serializer ()Lkotlinx/serialization/KSerializer;
322324
}

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,20 @@ public data class ItemMetaPayload(
6060

6161
public companion object {
6262

63+
/**
64+
* Returns [ItemMetaPayload] if it can be retrieved from the given [payload] value.
65+
*
66+
* Supported types are:
67+
* - [ItemMetaPayload] - returns itself
68+
* - [String] - tries to parse payload using [ItemMetaPayload.parse]
69+
*/
70+
@JvmStatic
71+
public fun of(payload: Any?): ItemMetaPayload? = when (payload) {
72+
is ItemMetaPayload -> payload
73+
is String -> parse(payload)
74+
else -> null
75+
}
76+
6377
/**
6478
* Tries to parse [ItemMetaPayload] from the given [input].
6579
* Returns `null` if parsing failed or [input] is empty.

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

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -55,31 +55,22 @@ public class MinecraftItemsRegistry : BukkitItemsRegistry {
5555
val material = getMaterial(itemId) ?: return null
5656
val realAmount = amount.coerceIn(1, material.maxStackSize)
5757

58-
val minecraftPayload: ItemMetaPayload? = when (payload) {
59-
is ItemMetaPayload -> payload
60-
is String -> ItemMetaPayload.parse(payload)
61-
null -> null
62-
else -> unknownPayload(itemId, payload)
58+
val minecraftPayload = ItemMetaPayload.of(payload)
59+
if (payload != null && minecraftPayload == null) {
60+
Log.w("[${javaClass.simpleName}] Ignoring unsupported payload for item $itemId:\n$payload")
6361
}
6462

65-
val item = ItemStack(material, realAmount)
66-
item.itemMeta = item.itemMeta?.applyPayload(minecraftPayload)
67-
return item
63+
return ItemStack(material, realAmount).apply {
64+
if (minecraftPayload != null) itemMeta = itemMeta?.applyPayload(minecraftPayload)
65+
}
6866
}
6967

7068
private fun getMaterial(name: String): Material? {
7169
return Material.getMaterial(name.uppercase())
7270
?.takeIf { it.isItem }
7371
}
7472

75-
private fun unknownPayload(itemId: String, payload: Any): ItemMetaPayload? {
76-
Log.w("[${javaClass.simpleName}] Ignoring unsupported payload for item $itemId:\n$payload")
77-
return null
78-
}
79-
80-
private fun ItemMeta.applyPayload(payload: ItemMetaPayload?): ItemMeta {
81-
if (payload == null) return this
82-
73+
private fun ItemMeta.applyPayload(payload: ItemMetaPayload): ItemMeta {
8374
// Apply text options
8475
setDisplayName(payload.name?.colorized())
8576
lore = payload.lore?.colorized()

0 commit comments

Comments
 (0)