Cleaner MenuMatterBottler code

This commit is contained in:
DBotThePony 2022-01-31 16:59:40 +07:00
parent 1e49ec57ef
commit 02882509e5
Signed by: DBot
GPG Key ID: DCC23B5715498507
2 changed files with 14 additions and 9 deletions

View File

@ -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 }

View File

@ -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<MatterySlot>(6)
val container: Array<MatterySlot>
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()
}