Update Matter scanner to use SlottedContainer

This commit is contained in:
DBotThePony 2025-03-06 21:48:05 +07:00
parent 8967d3aafa
commit cfd64fac07
Signed by: DBot
GPG Key ID: DCC23B5715498507
2 changed files with 15 additions and 12 deletions

View File

@ -22,6 +22,8 @@ import ru.dbotthepony.mc.otm.capability.matter.PatternState
import ru.dbotthepony.mc.otm.config.MachinesConfig
import ru.dbotthepony.mc.otm.container.MatteryContainer
import ru.dbotthepony.mc.otm.container.HandlerFilter
import ru.dbotthepony.mc.otm.container.slotted.ContainerSlot
import ru.dbotthepony.mc.otm.container.slotted.SlottedContainer
import ru.dbotthepony.mc.otm.menu.matter.MatterScannerMenu
import ru.dbotthepony.mc.otm.registry.game.MBlockEntities
import ru.dbotthepony.mc.otm.graph.matter.MatterNode
@ -34,19 +36,20 @@ class MatterScannerBlockEntity(p_155229_: BlockPos, p_155230_: BlockState) :
MatteryWorkerBlockEntity<ItemJob>(MBlockEntities.MATTER_SCANNER, p_155229_, p_155230_, ItemJob.CODEC) {
override val upgrades = makeUpgrades(2, UpgradeType.BASIC)
val container = MatteryContainer(::itemContainerUpdated, 1).also(::addDroppableContainer)
override val energy = ProfiledEnergyStorage(WorkerEnergyStorage(::energyLevelUpdated, upgrades.transform(MachinesConfig.MATTER_SCANNER)))
val itemConfig = ConfigurableItemHandler(inputOutput = container.handler(object : HandlerFilter {
override fun canInsert(slot: Int, stack: ItemStack): Boolean {
return MatterManager.canDecompose(stack)
private inner class Slot(container: SlottedContainer, slot: Int) : ContainerSlot(container, slot) {
override fun canAutomationPlaceItem(itemStack: ItemStack): Boolean {
return super.canAutomationPlaceItem(itemStack) && MatterManager.canDecompose(itemStack)
}
override fun canExtract(slot: Int, amount: Int, stack: ItemStack): Boolean {
return jobEventLoops[0].isIdling
override fun canAutomationTakeItem(desired: Int): Boolean {
return jobEventLoops[0].isIdling && super.canAutomationTakeItem(desired)
}
}))
}
val container = SlottedContainer.simple(1, ::Slot, ::itemContainerUpdated).also(::addDroppableContainer)
val itemConfig = ConfigurableItemHandler(inputOutput = container)
val energyConfig = ConfigurableEnergy(energy)
val matterNode = object : MatterNode() {

View File

@ -5,8 +5,8 @@ import net.minecraft.world.entity.player.Inventory
import ru.dbotthepony.mc.otm.block.entity.matter.MatterScannerBlockEntity
import ru.dbotthepony.mc.otm.menu.widget.ProgressGaugeWidget
import ru.dbotthepony.mc.otm.menu.widget.LevelGaugeWidget
import net.minecraft.world.SimpleContainer
import net.minecraft.world.item.ItemStack
import ru.dbotthepony.mc.otm.container.EnhancedContainer
import ru.dbotthepony.mc.otm.core.math.Decimal
import ru.dbotthepony.mc.otm.matter.MatterManager
import ru.dbotthepony.mc.otm.menu.MatteryPoweredMenu
@ -17,11 +17,11 @@ import ru.dbotthepony.mc.otm.menu.makeUpgradeSlots
import ru.dbotthepony.mc.otm.menu.widget.ProfiledLevelGaugeWidget
import ru.dbotthepony.mc.otm.registry.game.MMenus
class MatterScannerMenu @JvmOverloads constructor(
p_38852_: Int,
class MatterScannerMenu(
containerID: Int,
inventory: Inventory,
tile: MatterScannerBlockEntity? = null
) : MatteryPoweredMenu(MMenus.MATTER_SCANNER, p_38852_, inventory, tile) {
) : MatteryPoweredMenu(MMenus.MATTER_SCANNER, containerID, inventory, tile) {
val input: MatteryMenuSlot
val progress = ProgressGaugeWidget(this, tile)
val patterns = LevelGaugeWidget(this)
@ -31,7 +31,7 @@ class MatterScannerMenu @JvmOverloads constructor(
val upgrades = makeUpgradeSlots(2, tile?.upgrades)
init {
val container = tile?.container ?: SimpleContainer(1)
val container = tile?.container ?: EnhancedContainer(1)
input = object : MatteryMenuSlot(container, 0, 64, 38) {
override fun mayPlace(itemStack: ItemStack) = MatterManager.canDecompose(itemStack)