From d558252db977a672e9e315ccbc4dead087086859 Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Mon, 3 Mar 2025 20:14:20 +0700 Subject: [PATCH] Update Matter Decomposer to use SlottedContainer --- .../matter/MatterDecomposerBlockEntity.kt | 31 +++++++++++-------- .../mc/otm/item/matter/MatterDustItem.kt | 5 +-- .../otm/menu/matter/MatterDecomposerMenu.kt | 9 +++--- 3 files changed, 25 insertions(+), 20 deletions(-) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/matter/MatterDecomposerBlockEntity.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/matter/MatterDecomposerBlockEntity.kt index 8ed8a703e..8a7836f9e 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/matter/MatterDecomposerBlockEntity.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/matter/MatterDecomposerBlockEntity.kt @@ -23,6 +23,10 @@ import ru.dbotthepony.mc.otm.capability.matter.ProfiledMatterStorage import ru.dbotthepony.mc.otm.config.MachinesConfig import ru.dbotthepony.mc.otm.container.HandlerFilter import ru.dbotthepony.mc.otm.container.MatteryContainer +import ru.dbotthepony.mc.otm.container.slotted.AutomationFilters +import ru.dbotthepony.mc.otm.container.slotted.ContainerSlot +import ru.dbotthepony.mc.otm.container.slotted.FilteredContainerSlot +import ru.dbotthepony.mc.otm.container.slotted.SlottedContainer import ru.dbotthepony.mc.otm.core.math.Decimal import ru.dbotthepony.mc.otm.core.otmRandom import ru.dbotthepony.mc.otm.data.codec.DecimalCodec @@ -72,22 +76,23 @@ class MatterDecomposerBlockEntity(pos: BlockPos, state: BlockState) savetables.stateful(::matter, MATTER_STORAGE_KEY) } + private inner class InputSlot(container: SlottedContainer, slot: Int) : FilteredContainerSlot(container, slot) { + override fun canAutomationPlaceItem(itemStack: ItemStack): Boolean { + return super.canAutomationPlaceItem(itemStack) && MatterManager.canDecompose(itemStack) + } + + override fun canAutomationTakeItem(desired: Int): Boolean { + return false + } + } + // вход, выход - val inputContainer = MatteryContainer(::markDirtyFast, 1).also(::addDroppableContainer) - val outputContainer = MatteryContainer(::markDirtyFast, 2).also(::addDroppableContainer) + val inputContainer = SlottedContainer.simple(1, ::InputSlot, ::markDirtyFast).also(::addDroppableContainer) + val outputContainer = SlottedContainer.simple(2, AutomationFilters.ONLY_OUT.simpleProvider, ::markDirtyFast).also(::addDroppableContainer) val itemConfig = ConfigurableItemHandler( - input = inputContainer.handler(object : HandlerFilter { - override fun canInsert(slot: Int, stack: ItemStack): Boolean { - return MatterManager.canDecompose(stack) - } - - override fun canExtract(slot: Int, amount: Int, stack: ItemStack): Boolean { - return false - } - }), - - output = outputContainer.handler(HandlerFilter.OnlyOut) + input = inputContainer, + output = outputContainer ) init { diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/item/matter/MatterDustItem.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/item/matter/MatterDustItem.kt index db22662eb..717524447 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/item/matter/MatterDustItem.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/item/matter/MatterDustItem.kt @@ -17,7 +17,8 @@ import net.minecraft.world.level.storage.loot.LootContext import net.minecraft.world.level.storage.loot.functions.LootItemFunction import net.minecraft.world.level.storage.loot.functions.LootItemFunctionType import ru.dbotthepony.mc.otm.config.ItemsConfig -import ru.dbotthepony.mc.otm.container.MatteryContainer +import ru.dbotthepony.mc.otm.container.IEnhancedContainer +import ru.dbotthepony.mc.otm.container.set import ru.dbotthepony.mc.otm.core.TranslatableComponent import ru.dbotthepony.mc.otm.core.math.Decimal import ru.dbotthepony.mc.otm.matter.IMatterItem @@ -65,7 +66,7 @@ class MatterDustItem : Item(Properties().stacksTo(64)), IMatterItem { return MatterValue(value, 1.0) } - fun moveIntoContainer(matterValue: Decimal, container: MatteryContainer, mainSlot: Int, stackingSlot: Int): Decimal { + fun moveIntoContainer(matterValue: Decimal, container: IEnhancedContainer, mainSlot: Int, stackingSlot: Int): Decimal { @Suppress("name_shadowing") var matterValue = matterValue diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/menu/matter/MatterDecomposerMenu.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/menu/matter/MatterDecomposerMenu.kt index ac81f806b..919bfc6e9 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/menu/matter/MatterDecomposerMenu.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/menu/matter/MatterDecomposerMenu.kt @@ -1,12 +1,11 @@ package ru.dbotthepony.mc.otm.menu.matter -import kotlin.jvm.JvmOverloads import net.minecraft.world.entity.player.Inventory import ru.dbotthepony.mc.otm.block.entity.matter.MatterDecomposerBlockEntity 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.slotted.SlottedContainer import ru.dbotthepony.mc.otm.matter.MatterManager import ru.dbotthepony.mc.otm.menu.OutputMenuSlot import ru.dbotthepony.mc.otm.menu.MatteryPoweredMenu @@ -17,12 +16,12 @@ import ru.dbotthepony.mc.otm.menu.makeUpgradeSlots import ru.dbotthepony.mc.otm.menu.widget.ProfiledLevelGaugeWidget import ru.dbotthepony.mc.otm.registry.game.MMenus -class MatterDecomposerMenu @JvmOverloads constructor( +class MatterDecomposerMenu( containerID: Int, inventory: Inventory, tile: MatterDecomposerBlockEntity? = null ) : MatteryPoweredMenu(MMenus.MATTER_DECOMPOSER, containerID, inventory, tile) { - val input = object : MatteryMenuSlot(tile?.inputContainer ?: SimpleContainer(1), 0) { + val input = object : MatteryMenuSlot(tile?.inputContainer ?: SlottedContainer.filtered(1), 0) { override fun mayPlace(itemStack: ItemStack) = MatterManager.canDecompose(itemStack) } @@ -36,7 +35,7 @@ class MatterDecomposerMenu @JvmOverloads constructor( val upgrades = makeUpgradeSlots(4, tile?.upgrades) init { - val container = tile?.outputContainer ?: SimpleContainer(2) + val container = tile?.outputContainer ?: SlottedContainer.simple(2) // Выход outputMain = OutputMenuSlot(container, 0)