Move Matter Hatch to Slotted Container

This commit is contained in:
DBotThePony 2025-03-12 16:47:45 +07:00
parent 55c3c16172
commit 4dad60dfbb
Signed by: DBot
GPG Key ID: DCC23B5715498507
3 changed files with 8 additions and 15 deletions

View File

@ -17,6 +17,8 @@ import ru.dbotthepony.mc.otm.capability.moveMatter
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.SlottedContainer
import ru.dbotthepony.mc.otm.core.math.Decimal import ru.dbotthepony.mc.otm.core.math.Decimal
import ru.dbotthepony.mc.otm.core.multiblock.BlockEntityTag import ru.dbotthepony.mc.otm.core.multiblock.BlockEntityTag
import ru.dbotthepony.mc.otm.menu.tech.MatterHatchMenu import ru.dbotthepony.mc.otm.menu.tech.MatterHatchMenu
@ -28,26 +30,15 @@ class MatterHatchBlockEntity(
blockPos: BlockPos, blockPos: BlockPos,
blockState: BlockState blockState: BlockState
) : MatteryDeviceBlockEntity(type, blockPos, blockState) { ) : MatteryDeviceBlockEntity(type, blockPos, blockState) {
val container = object : MatteryContainer(::markDirtyFast, CAPACITY) { val container = SlottedContainer.simple(CAPACITY, if (isInput) AutomationFilters.MATTER_PROVIDERS.limitedFilteredProvider else AutomationFilters.MATTER_CONSUMERS.limitedFilteredProvider, ::markDirtyFast).also(::addDroppableContainer)
override fun getMaxStackSize(slot: Int, itemStack: ItemStack): Int {
return 1
}
}.also(::addDroppableContainer)
val matter = ProfiledMatterStorage(MatterStorageImpl(this::markDirtyFast, FlowDirection.input(isInput), MachinesConfig::MATTER_HATCH)) val matter = ProfiledMatterStorage(MatterStorageImpl(this::markDirtyFast, FlowDirection.input(isInput), MachinesConfig::MATTER_HATCH))
val itemHandler = if (isInput) {
container.handler(HandlerFilter.MatterProviders)
} else {
container.handler(HandlerFilter.MatterConsumers)
}
init { init {
savetables.stateful(::container, INVENTORY_KEY) savetables.stateful(::container, INVENTORY_KEY)
savetables.stateful(::matter, MATTER_STORAGE_KEY) savetables.stateful(::matter, MATTER_STORAGE_KEY)
// it would cause a lot of frustration if hatches accept stuff only though one face // it would cause a lot of frustration if hatches accept stuff only though one face
exposeGlobally(Capabilities.ItemHandler.BLOCK, itemHandler) exposeGlobally(Capabilities.ItemHandler.BLOCK, container)
exposeGlobally(MatteryCapability.MATTER_BLOCK, matter) exposeGlobally(MatteryCapability.MATTER_BLOCK, matter)
} }

View File

@ -168,7 +168,7 @@ open class MatterContainerInputMenuSlot(
x: Int = 0, x: Int = 0,
y: Int = 0, y: Int = 0,
val direction: FlowDirection = FlowDirection.BI_DIRECTIONAL val direction: FlowDirection = FlowDirection.BI_DIRECTIONAL
) : MatteryMenuSlot(container, index, x, y) { ) : UserFilteredMenuSlot(container, index, x, y) {
override fun mayPlace(itemStack: ItemStack): Boolean { override fun mayPlace(itemStack: ItemStack): Boolean {
val handler = itemStack.getCapability(MatteryCapability.MATTER_ITEM) val handler = itemStack.getCapability(MatteryCapability.MATTER_ITEM)
return handler != null && super.mayPlace(itemStack) && this.direction.test(handler.matterFlow) return handler != null && super.mayPlace(itemStack) && this.direction.test(handler.matterFlow)

View File

@ -6,6 +6,8 @@ import net.minecraft.world.entity.player.Inventory
import ru.dbotthepony.mc.otm.block.entity.RedstoneSetting import ru.dbotthepony.mc.otm.block.entity.RedstoneSetting
import ru.dbotthepony.mc.otm.block.entity.tech.MatterHatchBlockEntity import ru.dbotthepony.mc.otm.block.entity.tech.MatterHatchBlockEntity
import ru.dbotthepony.mc.otm.capability.FlowDirection import ru.dbotthepony.mc.otm.capability.FlowDirection
import ru.dbotthepony.mc.otm.container.slotted.AutomationFilters
import ru.dbotthepony.mc.otm.container.slotted.SlottedContainer
import ru.dbotthepony.mc.otm.menu.MatterContainerInputMenuSlot import ru.dbotthepony.mc.otm.menu.MatterContainerInputMenuSlot
import ru.dbotthepony.mc.otm.menu.MatteryMenu import ru.dbotthepony.mc.otm.menu.MatteryMenu
import ru.dbotthepony.mc.otm.menu.input.EnumInputWithFeedback import ru.dbotthepony.mc.otm.menu.input.EnumInputWithFeedback
@ -19,7 +21,7 @@ class MatterHatchMenu(
inventory: Inventory, inventory: Inventory,
tile: MatterHatchBlockEntity? = null tile: MatterHatchBlockEntity? = null
) : MatteryMenu(if (isInput) MMenus.MATTER_INPUT_HATCH else MMenus.MATTER_OUTPUT_HATCH, containerId, inventory, tile) { ) : MatteryMenu(if (isInput) MMenus.MATTER_INPUT_HATCH else MMenus.MATTER_OUTPUT_HATCH, containerId, inventory, tile) {
val container: Container = tile?.container ?: SimpleContainer(MatterHatchBlockEntity.CAPACITY) val container: Container = tile?.container ?: SlottedContainer.simple(MatterHatchBlockEntity.CAPACITY, if (isInput) AutomationFilters.MATTER_PROVIDERS.limitedFilteredProvider else AutomationFilters.MATTER_CONSUMERS.limitedFilteredProvider)
val inputSlots = makeSlots(container) { a, b -> val inputSlots = makeSlots(container) { a, b ->
MatterContainerInputMenuSlot(a, b, direction = FlowDirection.input(isInput)) MatterContainerInputMenuSlot(a, b, direction = FlowDirection.input(isInput))