Skip to content

Commit bc54d80

Browse files
committed
await item instead of failing
1 parent d0d6452 commit bc54d80

File tree

3 files changed

+50
-7
lines changed

3 files changed

+50
-7
lines changed

common/src/main/kotlin/com/lambda/interaction/construction/result/BreakResult.kt

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,8 +99,14 @@ sealed class BreakResult : BuildResult() {
9999
override fun resolve() =
100100
selectStack {
101101
isItem(badItem).not()
102-
}.transfer(MainHandContainer, inventory)
103-
?: MaterialContainer.FailureTask("Couldn't find a tool for ${blockState.block.name.string} with $badItem in main hand.")
102+
}.let { selection ->
103+
selection.transfer(MainHandContainer, inventory)
104+
?: MaterialContainer.AwaitItemTask(
105+
"Couldn't find a tool for ${blockState.block.name.string} with $badItem in main hand.",
106+
selection,
107+
inventory
108+
)
109+
}
104110

105111
override fun SafeContext.buildRenderer() {
106112
withPos(blockPos, color)

common/src/main/kotlin/com/lambda/interaction/construction/result/BuildResult.kt

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -205,8 +205,15 @@ abstract class BuildResult : ComparableResult<Rank>, Nameable {
205205

206206
override val pausesParent get() = true
207207

208-
override fun resolve() = neededSelection
209-
.transfer(MainHandContainer, inventory) ?: MaterialContainer.FailureTask("Couldn't find $neededSelection anywhere.")
208+
override fun resolve() =
209+
neededSelection.let { selection ->
210+
selection.transfer(MainHandContainer, inventory)
211+
?: MaterialContainer.AwaitItemTask(
212+
"Couldn't find $neededSelection anywhere.",
213+
selection,
214+
inventory
215+
)
216+
}
210217

211218
override fun SafeContext.buildRenderer() {
212219
if (blockState(blockPos).isAir) {
@@ -242,8 +249,14 @@ abstract class BuildResult : ComparableResult<Rank>, Nameable {
242249
override val pausesParent get() = true
243250

244251
override fun resolve() =
245-
neededStack.select()
246-
.transfer(MainHandContainer, inventory) ?: MaterialContainer.FailureTask("Couldn't find ${neededStack.item.name.string} anywhere.")
252+
neededStack.select().let { selection ->
253+
selection.transfer(MainHandContainer, inventory)
254+
?: MaterialContainer.AwaitItemTask(
255+
"Couldn't find ${neededStack.item.name.string} anywhere.",
256+
selection,
257+
inventory
258+
)
259+
}
247260

248261
override fun SafeContext.buildRenderer() {
249262
if (blockState(blockPos).isAir) {

common/src/main/kotlin/com/lambda/interaction/material/container/MaterialContainer.kt

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,19 +17,29 @@
1717

1818
package com.lambda.interaction.material.container
1919

20+
import com.lambda.config.groups.InventoryConfig
2021
import com.lambda.context.SafeContext
22+
import com.lambda.event.events.TickEvent
23+
import com.lambda.event.listener.SafeListener.Companion.listen
2124
import com.lambda.interaction.material.StackSelection
25+
import com.lambda.interaction.material.container.ContainerManager.findContainerWithMaterial
2226
import com.lambda.interaction.material.container.containers.ShulkerBoxContainer
2327
import com.lambda.interaction.material.transfer.TransferResult
2428
import com.lambda.task.Task
29+
import com.lambda.util.Communication.logError
2530
import com.lambda.util.Nameable
2631
import com.lambda.util.item.ItemStackUtils.count
2732
import com.lambda.util.item.ItemStackUtils.empty
2833
import com.lambda.util.item.ItemStackUtils.shulkerBoxContents
2934
import com.lambda.util.item.ItemStackUtils.spaceLeft
3035
import com.lambda.util.item.ItemUtils
3136
import com.lambda.util.item.ItemUtils.toItemCount
32-
import com.lambda.util.text.*
37+
import com.lambda.util.text.TextBuilder
38+
import com.lambda.util.text.TextDsl
39+
import com.lambda.util.text.buildText
40+
import com.lambda.util.text.highlighted
41+
import com.lambda.util.text.literal
42+
import com.lambda.util.text.text
3343
import net.minecraft.item.ItemStack
3444
import net.minecraft.text.Text
3545

@@ -87,6 +97,20 @@ abstract class MaterialContainer(
8797
}
8898
}
8999

100+
class AwaitItemTask(override val name: String, val selection: StackSelection, inventory: InventoryConfig) : Task<Unit>() {
101+
init {
102+
listen<TickEvent.Post> {
103+
if (selection.findContainerWithMaterial(inventory) != null) {
104+
success()
105+
}
106+
}
107+
}
108+
109+
override fun SafeContext.onStart() {
110+
logError(name)
111+
}
112+
}
113+
90114
/**
91115
* Withdraws items from the container to the player's inventory.
92116
*/

0 commit comments

Comments
 (0)