Skip to content

Commit 3f8ae13

Browse files
Add by supplier to IngredientsDsl
1 parent 835717a commit 3f8ae13

File tree

2 files changed

+69
-0
lines changed

2 files changed

+69
-0
lines changed

invui-kotlin/build.gradle.kts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,12 @@ dependencies {
2020
testImplementation(libs.kotlin.test.junit)
2121
}
2222

23+
kotlin {
24+
compilerOptions {
25+
optIn.add("kotlin.experimental.ExperimentalTypeInference")
26+
}
27+
}
28+
2329
publishing {
2430
publications {
2531
create<MavenPublication>("maven") {

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

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
@file:Suppress("INAPPLICABLE_JVM_NAME")
12
package xyz.xenondevs.invui.dsl
23

34
import org.bukkit.inventory.ItemStack
@@ -6,11 +7,13 @@ import xyz.xenondevs.invui.gui.IngredientPreset
67
import xyz.xenondevs.invui.gui.Marker
78
import xyz.xenondevs.invui.gui.PagedGui
89
import xyz.xenondevs.invui.gui.ScrollGui
10+
import xyz.xenondevs.invui.gui.Slot
911
import xyz.xenondevs.invui.gui.SlotElement
1012
import xyz.xenondevs.invui.gui.TabGui
1113
import xyz.xenondevs.invui.inventory.Inventory
1214
import xyz.xenondevs.invui.item.Item
1315
import xyz.xenondevs.invui.item.ItemProvider
16+
import java.util.function.Supplier
1417

1518
@ExperimentalDslApi
1619
fun ingredients(run: IngredientsDsl.() -> Unit): Unit =
@@ -26,6 +29,8 @@ sealed interface IngredientsDsl {
2629

2730
infix fun Char.by(item: Item)
2831

32+
infix fun Char.by(itemBuilder: Item.Builder<*>)
33+
2934
infix fun Char.by(itemProvider: ItemProvider)
3035

3136
infix fun Char.by(itemStack: ItemStack)
@@ -36,6 +41,30 @@ sealed interface IngredientsDsl {
3641

3742
infix fun Char.by(gui: Gui)
3843

44+
@OverloadResolutionByLambdaReturnType
45+
@JvmName("byItemSupplier")
46+
infix fun Char.by(supplier: () -> Item)
47+
48+
@OverloadResolutionByLambdaReturnType
49+
@JvmName("byItemProviderSupplier")
50+
infix fun Char.by(supplier: () -> ItemProvider)
51+
52+
@OverloadResolutionByLambdaReturnType
53+
@JvmName("byItemStackSupplier")
54+
infix fun Char.by(supplier: () -> ItemStack)
55+
56+
@OverloadResolutionByLambdaReturnType
57+
@JvmName("bySlotElementSupplier")
58+
infix fun Char.by(supplier: () -> SlotElement)
59+
60+
@OverloadResolutionByLambdaReturnType
61+
@JvmName("bySlotElementSupplier")
62+
infix fun Char.by(supplier: (List<Slot>) -> List<SlotElement>)
63+
64+
@OverloadResolutionByLambdaReturnType
65+
@JvmName("byItemSupplier")
66+
infix fun Char.by(supplier: (List<Slot>) -> List<Item>)
67+
3968
fun ingredients(run: IngredientsDsl.() -> Unit)
4069

4170
fun gui(vararg structure: String, gui: GuiDsl.() -> Unit): Gui
@@ -75,6 +104,10 @@ internal open class IngredientsDslImpl(
75104
ingredients.addIngredient(this, item)
76105
}
77106

107+
override fun Char.by(itemBuilder: Item.Builder<*>) {
108+
ingredients.addIngredient(this, itemBuilder)
109+
}
110+
78111
override fun Char.by(itemProvider: ItemProvider) {
79112
ingredients.addIngredient(this, itemProvider)
80113
}
@@ -95,6 +128,36 @@ internal open class IngredientsDslImpl(
95128
ingredients.addIngredient(this, gui)
96129
}
97130

131+
@JvmName("byItemSupplier")
132+
override fun Char.by(supplier: () -> Item) {
133+
ingredients.addIngredient(this, supplier)
134+
}
135+
136+
@JvmName("byItemProviderSupplier")
137+
override fun Char.by(supplier: () -> ItemProvider) {
138+
ingredients.addIngredient(this, Supplier { Item.simple(supplier()) })
139+
}
140+
141+
@JvmName("byItemStackSupplier")
142+
override fun Char.by(supplier: () -> ItemStack) {
143+
ingredients.addIngredient(this, Supplier { Item.simple(supplier()) })
144+
}
145+
146+
@JvmName("bySlotElementSupplier")
147+
override fun Char.by(supplier: () -> SlotElement) {
148+
ingredients.addIngredientElementSupplier(this, supplier)
149+
}
150+
151+
@JvmName("bySlotElementSupplier")
152+
override fun Char.by(supplier: (List<Slot>) -> List<SlotElement>) {
153+
ingredients.addIngredient(this, supplier)
154+
}
155+
156+
@JvmName("byItemSupplier")
157+
override fun Char.by(supplier: (List<Slot>) -> List<Item>) {
158+
ingredients.addIngredient(this) { slots -> supplier(slots).map(SlotElement::Item) }
159+
}
160+
98161
override fun ingredients(run: IngredientsDsl.() -> Unit): Unit =
99162
IngredientsDslImpl(presets + ingredients.build()).run()
100163

0 commit comments

Comments
 (0)