Skip to content

Commit 4c354cc

Browse files
Expose base item stack in ItemProviderDsl
1 parent 3dcb357 commit 4c354cc

1 file changed

Lines changed: 10 additions & 2 deletions

File tree

invui-kotlin/src/main/kotlin/xyz/xenondevs/invui/dsl/ItemProviderDsl.kt

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,11 @@ import xyz.xenondevs.invui.item.ItemWrapper
1919
import kotlin.contracts.InvocationKind
2020
import 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
2328
inline 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
4247
sealed 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
8288
internal 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

Comments
 (0)