Update Energy servo to use SlottedContainer, merge EnergyContainerInputMenuSlot into BatteryMenuSlot
This commit is contained in:
parent
762926d2cc
commit
54c2964deb
@ -18,6 +18,8 @@ import ru.dbotthepony.mc.otm.config.EnergyBalanceValues
|
|||||||
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.RelativeSide
|
import ru.dbotthepony.mc.otm.core.math.RelativeSide
|
||||||
import ru.dbotthepony.mc.otm.core.multiblock.BlockEntityTag
|
import ru.dbotthepony.mc.otm.core.multiblock.BlockEntityTag
|
||||||
import ru.dbotthepony.mc.otm.menu.tech.EnergyHatchMenu
|
import ru.dbotthepony.mc.otm.menu.tech.EnergyHatchMenu
|
||||||
@ -32,13 +34,12 @@ class EnergyHatchBlockEntity(
|
|||||||
) : MatteryDeviceBlockEntity(type, blockPos, blockState) {
|
) : MatteryDeviceBlockEntity(type, blockPos, blockState) {
|
||||||
val energy = ProfiledEnergyStorage(BlockEnergyStorageImpl(this::markDirtyFast, FlowDirection.input(isInput), capacity))
|
val energy = ProfiledEnergyStorage(BlockEnergyStorageImpl(this::markDirtyFast, FlowDirection.input(isInput), capacity))
|
||||||
|
|
||||||
val container = object : MatteryContainer(::markDirtyFast, CAPACITY) {
|
val container = SlottedContainer.simple(
|
||||||
override fun getMaxStackSize(slot: Int, itemStack: ItemStack): Int {
|
CAPACITY,
|
||||||
return 1
|
if (isInput) AutomationFilters.DISCHARGABLE.limitedFilteredProvider else AutomationFilters.CHARGEABLE.limitedFilteredProvider,
|
||||||
}
|
::markDirtyFast
|
||||||
}.also(::addDroppableContainer)
|
).also(::addDroppableContainer)
|
||||||
|
|
||||||
val itemHandler = container.handler(if (isInput) HandlerFilter.Dischargeable else HandlerFilter.Chargeable)
|
|
||||||
private val neighbours = ArrayList<CapabilityCache<IEnergyStorage>>()
|
private val neighbours = ArrayList<CapabilityCache<IEnergyStorage>>()
|
||||||
|
|
||||||
init {
|
init {
|
||||||
@ -47,7 +48,7 @@ class EnergyHatchBlockEntity(
|
|||||||
|
|
||||||
// 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
|
||||||
exposeEnergyGlobally(energy)
|
exposeEnergyGlobally(energy)
|
||||||
exposeGlobally(Capabilities.ItemHandler.BLOCK, itemHandler)
|
exposeGlobally(Capabilities.ItemHandler.BLOCK, container)
|
||||||
|
|
||||||
if (!isInput) {
|
if (!isInput) {
|
||||||
for (side in RelativeSide.entries) {
|
for (side in RelativeSide.entries) {
|
||||||
|
@ -140,9 +140,13 @@ open class OutputMenuSlot(container: Container, index: Int, x: Int = 0, y: Int =
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
open class BatteryMenuSlot(container: Container, index: Int, x: Int = 0, y: Int = 0) : UserFilteredMenuSlot(container, index, x, y) {
|
open class BatteryMenuSlot(container: Container, index: Int, x: Int = 0, y: Int = 0, val direction: FlowDirection = FlowDirection.BI_DIRECTIONAL) : UserFilteredMenuSlot(container, index, x, y) {
|
||||||
override fun mayPlace(itemStack: ItemStack): Boolean {
|
override fun mayPlace(itemStack: ItemStack): Boolean {
|
||||||
return super.mayPlace(itemStack) && (itemStack.energy?.canExtract() ?: false)
|
if (!super.mayPlace(itemStack))
|
||||||
|
return false
|
||||||
|
|
||||||
|
val energy = itemStack.energy ?: return false
|
||||||
|
return direction.test(FlowDirection.of(energy.canReceive(), energy.canExtract()))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -158,12 +162,6 @@ open class ChargeMenuSlot(container: Container, index: Int, x: Int = 0, y: Int =
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
open class EnergyContainerInputMenuSlot(container: Container, index: Int, x: Int = 0, y: Int = 0, val direction: FlowDirection = FlowDirection.BI_DIRECTIONAL) : MatteryMenuSlot(container, index, x, y) {
|
|
||||||
override fun mayPlace(itemStack: ItemStack): Boolean {
|
|
||||||
return super.mayPlace(itemStack) && (itemStack.getCapability(Capabilities.EnergyStorage.ITEM)?.let { direction.test(FlowDirection.of(it.canReceive(), it.canExtract())) } ?: false)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
open class MatterContainerInputMenuSlot(
|
open class MatterContainerInputMenuSlot(
|
||||||
container: Container,
|
container: Container,
|
||||||
index: Int,
|
index: Int,
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
package ru.dbotthepony.mc.otm.menu.tech
|
package ru.dbotthepony.mc.otm.menu.tech
|
||||||
|
|
||||||
import net.minecraft.world.Container
|
|
||||||
import net.minecraft.world.SimpleContainer
|
|
||||||
import net.minecraft.world.entity.player.Inventory
|
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.EnergyHatchBlockEntity
|
import ru.dbotthepony.mc.otm.block.entity.tech.EnergyHatchBlockEntity
|
||||||
import ru.dbotthepony.mc.otm.capability.FlowDirection
|
import ru.dbotthepony.mc.otm.capability.FlowDirection
|
||||||
import ru.dbotthepony.mc.otm.menu.EnergyContainerInputMenuSlot
|
import ru.dbotthepony.mc.otm.container.slotted.AutomationFilters
|
||||||
|
import ru.dbotthepony.mc.otm.container.slotted.SlottedContainer
|
||||||
|
import ru.dbotthepony.mc.otm.menu.BatteryMenuSlot
|
||||||
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
|
||||||
import ru.dbotthepony.mc.otm.menu.makeSlots
|
import ru.dbotthepony.mc.otm.menu.makeSlots
|
||||||
@ -19,10 +19,13 @@ class EnergyHatchMenu(
|
|||||||
inventory: Inventory,
|
inventory: Inventory,
|
||||||
tile: EnergyHatchBlockEntity? = null
|
tile: EnergyHatchBlockEntity? = null
|
||||||
) : MatteryMenu(if (isInput) MMenus.ENERGY_INPUT_HATCH else MMenus.ENERGY_OUTPUT_HATCH, containerId, inventory, tile) {
|
) : MatteryMenu(if (isInput) MMenus.ENERGY_INPUT_HATCH else MMenus.ENERGY_OUTPUT_HATCH, containerId, inventory, tile) {
|
||||||
val container: Container = tile?.container ?: SimpleContainer(EnergyHatchBlockEntity.CAPACITY)
|
val container = tile?.container ?: SlottedContainer.simple(
|
||||||
|
EnergyHatchBlockEntity.CAPACITY,
|
||||||
|
if (isInput) AutomationFilters.DISCHARGABLE.limitedFilteredProvider else AutomationFilters.CHARGEABLE.limitedFilteredProvider
|
||||||
|
)
|
||||||
|
|
||||||
val inputSlots = makeSlots(container) { a, b ->
|
val inputSlots = makeSlots(container) { a, b ->
|
||||||
EnergyContainerInputMenuSlot(a, b, direction = FlowDirection.input(isInput))
|
BatteryMenuSlot(a, b, direction = FlowDirection.input(isInput))
|
||||||
}
|
}
|
||||||
|
|
||||||
val gauge = ProfiledLevelGaugeWidget(this, tile?.energy)
|
val gauge = ProfiledLevelGaugeWidget(this, tile?.energy)
|
||||||
|
Loading…
Reference in New Issue
Block a user