diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/capability/matter/API.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/capability/matter/API.kt index dea21f11f..4362f0e79 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/capability/matter/API.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/capability/matter/API.kt @@ -17,6 +17,12 @@ interface IMatterHandler { val direction: MatterDirection val missingMatter: ImpreciseFraction get() = maxStoredMatter.minus(storedMatter).moreThanZero() + + val allowsExtract: Boolean + get() = direction != MatterDirection.RECEIVE + + val allowsReceive: Boolean + get() = direction != MatterDirection.EXTRACT } enum class MatterDirection { RECEIVE, EXTRACT, BIDIRECTIONAL } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/menu/MenuMatterBottler.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/menu/MenuMatterBottler.kt index 820452a98..31f0e8b08 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/menu/MenuMatterBottler.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/menu/MenuMatterBottler.kt @@ -9,6 +9,7 @@ import ru.dbotthepony.mc.otm.capability.matter.MatterDirection import ru.dbotthepony.mc.otm.menu.widget.BooleanPlayerInputWidget import ru.dbotthepony.mc.otm.menu.widget.LevelGaugeWidget import ru.dbotthepony.mc.otm.menu.widget.ProgressGaugeWidget +import ru.dbotthepony.mc.otm.orNull import ru.dbotthepony.mc.otm.registry.MMenus class MenuMatterBottler @JvmOverloads constructor( @@ -22,7 +23,7 @@ class MenuMatterBottler @JvmOverloads constructor( val progressWidget: ProgressGaugeWidget val matterWidget: LevelGaugeWidget - val container = arrayOfNulls(6) + val container: Array init { val container = tile?.container ?: SimpleContainer(6) @@ -37,23 +38,21 @@ class MenuMatterBottler @JvmOverloads constructor( workFlow = BooleanPlayerInputWidget(this).withSupplier { tile.workFlow }.withClicker { tile.workFlow = it } } - for (i in 0 until container.containerSize) { - this.container[i] = object : MatterySlot(container, i) { + this.container = Array(6) { index -> + object : MatterySlot(container, index) { override fun mayPlace(p_40231_: ItemStack): Boolean { - val cap = p_40231_.getCapability(MatteryCapability.MATTER).resolve() - if (!cap.isPresent) return false + val cap = p_40231_.getCapability(MatteryCapability.MATTER).orNull() ?: return false if (workFlow.value) { - return index < 3 && cap.get().direction != MatterDirection.EXTRACT + return index < 3 && cap.allowsReceive } else { - return index >= 3 && cap.get().direction != MatterDirection.RECEIVE + return index >= 3 && cap.allowsExtract } } } - - addSlot(this.container[i]!!) } + this.container.forEach(this::addSlot) addInventorySlots() }