@@ -19,6 +19,11 @@ import xyz.xenondevs.invui.item.ItemWrapper
1919import kotlin.contracts.InvocationKind
2020import kotlin.contracts.contract
2121
22+ @ExperimentalDslApi
23+ inline fun itemProvider (itemProvider : ItemProviderDsl .() -> Unit ): Provider <ItemProvider > {
24+ contract { callsInPlace(itemProvider, InvocationKind .EXACTLY_ONCE ) }
25+ return ItemProviderDslImpl (provider(ItemStack .empty())).apply (itemProvider).build()
26+ }
2227@ExperimentalDslApi
2328inline fun itemProvider (base : Provider <ItemStack >, itemProvider : ItemProviderDsl .() -> Unit ): Provider <ItemProvider > {
2429 contract { callsInPlace(itemProvider, InvocationKind .EXACTLY_ONCE ) }
@@ -41,6 +46,7 @@ inline fun itemProvider(type: ItemType, itemProvider: ItemProviderDsl.() -> Unit
4146@ExperimentalDslApi
4247sealed interface ItemProviderDsl {
4348
49+ val base: ProviderDslProperty <ItemStack >
4450 val type: ProviderDslProperty <ItemType ?>
4551 val amount: ProviderDslProperty <Int ?>
4652 val name: ProviderDslProperty <Component ?>
@@ -80,7 +86,7 @@ internal class DataComponentsPatchImpl : DataComponentsPatchDsl {
8086@PublishedApi
8187@ExperimentalDslApi
8288internal class ItemProviderDslImpl (
83- private val base : Provider <ItemStack >
89+ private var _base : Provider <ItemStack >
8490) : ItemProviderDsl {
8591
8692 private var _type = provider<ItemType ?>(null )
@@ -91,6 +97,8 @@ internal class ItemProviderDslImpl(
9197
9298 override val data = DataComponentsPatchImpl ()
9399
100+ override val base: ProviderDslProperty <ItemStack >
101+ get() = ProviderDslProperty (::_base )
94102 override val type: ProviderDslProperty <ItemType ?>
95103 get() = ProviderDslProperty (::_type )
96104 override val amount: ProviderDslProperty <Int ?>
@@ -109,7 +117,7 @@ internal class ItemProviderDslImpl(
109117 fun build (): Provider <ItemProvider > {
110118 val dataTypeProviders = data.components.map { (type, dslProperty) -> dslProperty.map { type to it } }
111119 return combinedProvider(
112- base , _type , _amount , _name , _lore , _hasTooltip , combinedProvider(dataTypeProviders)
120+ _base , _type , _amount , _name , _lore , _hasTooltip , combinedProvider(dataTypeProviders)
113121 ) { base, type, amount, name, lore, hasTooltip, dataTypes ->
114122 var result = base.clone()
115123 var hasTooltip = hasTooltip
0 commit comments