Update Matter Decomposer to use SlottedContainer

This commit is contained in:
DBotThePony 2025-03-03 20:14:20 +07:00
parent 7f9af78734
commit d558252db9
Signed by: DBot
GPG Key ID: DCC23B5715498507
3 changed files with 25 additions and 20 deletions

View File

@ -23,6 +23,10 @@ import ru.dbotthepony.mc.otm.capability.matter.ProfiledMatterStorage
import ru.dbotthepony.mc.otm.config.MachinesConfig import ru.dbotthepony.mc.otm.config.MachinesConfig
import ru.dbotthepony.mc.otm.container.HandlerFilter import ru.dbotthepony.mc.otm.container.HandlerFilter
import ru.dbotthepony.mc.otm.container.MatteryContainer 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.math.Decimal
import ru.dbotthepony.mc.otm.core.otmRandom import ru.dbotthepony.mc.otm.core.otmRandom
import ru.dbotthepony.mc.otm.data.codec.DecimalCodec import ru.dbotthepony.mc.otm.data.codec.DecimalCodec
@ -72,22 +76,23 @@ class MatterDecomposerBlockEntity(pos: BlockPos, state: BlockState)
savetables.stateful(::matter, MATTER_STORAGE_KEY) 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 inputContainer = SlottedContainer.simple(1, ::InputSlot, ::markDirtyFast).also(::addDroppableContainer)
val outputContainer = MatteryContainer(::markDirtyFast, 2).also(::addDroppableContainer) val outputContainer = SlottedContainer.simple(2, AutomationFilters.ONLY_OUT.simpleProvider, ::markDirtyFast).also(::addDroppableContainer)
val itemConfig = ConfigurableItemHandler( val itemConfig = ConfigurableItemHandler(
input = inputContainer.handler(object : HandlerFilter { input = inputContainer,
override fun canInsert(slot: Int, stack: ItemStack): Boolean { output = outputContainer
return MatterManager.canDecompose(stack)
}
override fun canExtract(slot: Int, amount: Int, stack: ItemStack): Boolean {
return false
}
}),
output = outputContainer.handler(HandlerFilter.OnlyOut)
) )
init { init {

View File

@ -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.LootItemFunction
import net.minecraft.world.level.storage.loot.functions.LootItemFunctionType import net.minecraft.world.level.storage.loot.functions.LootItemFunctionType
import ru.dbotthepony.mc.otm.config.ItemsConfig 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.TranslatableComponent
import ru.dbotthepony.mc.otm.core.math.Decimal import ru.dbotthepony.mc.otm.core.math.Decimal
import ru.dbotthepony.mc.otm.matter.IMatterItem import ru.dbotthepony.mc.otm.matter.IMatterItem
@ -65,7 +66,7 @@ class MatterDustItem : Item(Properties().stacksTo(64)), IMatterItem {
return MatterValue(value, 1.0) 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") @Suppress("name_shadowing")
var matterValue = matterValue var matterValue = matterValue

View File

@ -1,12 +1,11 @@
package ru.dbotthepony.mc.otm.menu.matter package ru.dbotthepony.mc.otm.menu.matter
import kotlin.jvm.JvmOverloads
import net.minecraft.world.entity.player.Inventory import net.minecraft.world.entity.player.Inventory
import ru.dbotthepony.mc.otm.block.entity.matter.MatterDecomposerBlockEntity import ru.dbotthepony.mc.otm.block.entity.matter.MatterDecomposerBlockEntity
import ru.dbotthepony.mc.otm.menu.widget.ProgressGaugeWidget import ru.dbotthepony.mc.otm.menu.widget.ProgressGaugeWidget
import ru.dbotthepony.mc.otm.menu.widget.LevelGaugeWidget import ru.dbotthepony.mc.otm.menu.widget.LevelGaugeWidget
import net.minecraft.world.SimpleContainer
import net.minecraft.world.item.ItemStack 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.matter.MatterManager
import ru.dbotthepony.mc.otm.menu.OutputMenuSlot import ru.dbotthepony.mc.otm.menu.OutputMenuSlot
import ru.dbotthepony.mc.otm.menu.MatteryPoweredMenu 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.menu.widget.ProfiledLevelGaugeWidget
import ru.dbotthepony.mc.otm.registry.game.MMenus import ru.dbotthepony.mc.otm.registry.game.MMenus
class MatterDecomposerMenu @JvmOverloads constructor( class MatterDecomposerMenu(
containerID: Int, containerID: Int,
inventory: Inventory, inventory: Inventory,
tile: MatterDecomposerBlockEntity? = null tile: MatterDecomposerBlockEntity? = null
) : MatteryPoweredMenu(MMenus.MATTER_DECOMPOSER, containerID, inventory, tile) { ) : 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) override fun mayPlace(itemStack: ItemStack) = MatterManager.canDecompose(itemStack)
} }
@ -36,7 +35,7 @@ class MatterDecomposerMenu @JvmOverloads constructor(
val upgrades = makeUpgradeSlots(4, tile?.upgrades) val upgrades = makeUpgradeSlots(4, tile?.upgrades)
init { init {
val container = tile?.outputContainer ?: SimpleContainer(2) val container = tile?.outputContainer ?: SlottedContainer.simple(2)
// Выход // Выход
outputMain = OutputMenuSlot(container, 0) outputMain = OutputMenuSlot(container, 0)