diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/MatteryDeviceBlockEntity.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/MatteryDeviceBlockEntity.kt index 96f264442..be38c2d74 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/MatteryDeviceBlockEntity.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/MatteryDeviceBlockEntity.kt @@ -210,9 +210,9 @@ abstract class MatteryDeviceBlockEntity(blockEntityType: BlockEntityType<*>, blo } inner class ConfigurableItemHandler( - input: IItemHandler? = null, - output: IItemHandler? = null, - battery: IItemHandler? = null, + val input: IItemHandler? = null, + val output: IItemHandler? = null, + val battery: IItemHandler? = null, val frontDefault: ItemHandlerMode = determineDefaultMode(input, output, battery, RelativeSide.FRONT), val backDefault: ItemHandlerMode = determineDefaultMode(input, output, battery, RelativeSide.BACK), val leftDefault: ItemHandlerMode = determineDefaultMode(input, output, battery, RelativeSide.LEFT), @@ -233,12 +233,12 @@ abstract class MatteryDeviceBlockEntity(blockEntityType: BlockEntityType<*>, blo exposeSideless(ForgeCapabilities.ITEM_HANDLER, sideless) } - val front = Piece(RelativeSide.FRONT, input, output, battery).also { it.mode = frontDefault } - val back = Piece(RelativeSide.BACK, input, output, battery).also { it.mode = backDefault } - val left = Piece(RelativeSide.LEFT, input, output, battery).also { it.mode = leftDefault } - val right = Piece(RelativeSide.RIGHT, input, output, battery).also { it.mode = rightDefault } - val top = Piece(RelativeSide.TOP, input, output, battery).also { it.mode = topDefault } - val bottom = Piece(RelativeSide.BOTTOM, input, output, battery).also { it.mode = bottomDefault } + val front = Piece(RelativeSide.FRONT).also { it.mode = frontDefault } + val back = Piece(RelativeSide.BACK).also { it.mode = backDefault } + val left = Piece(RelativeSide.LEFT).also { it.mode = leftDefault } + val right = Piece(RelativeSide.RIGHT).also { it.mode = rightDefault } + val top = Piece(RelativeSide.TOP).also { it.mode = topDefault } + val bottom = Piece(RelativeSide.BOTTOM).also { it.mode = bottomDefault } val pieces = immutableMap { put(RelativeSide.FRONT, front) @@ -258,40 +258,38 @@ abstract class MatteryDeviceBlockEntity(blockEntityType: BlockEntityType<*>, blo put(RelativeSide.BOTTOM, bottomDefault) } + val possibleViews: ImmutableSet + val inputOutput: IItemHandler? + + init { + val builder = ImmutableSet.Builder() + + builder.add(ItemHandlerMode.DISABLED) + + if (input != null) builder.add(ItemHandlerMode.INPUT) + if (output != null) builder.add(ItemHandlerMode.OUTPUT) + if (input != null && output != null) builder.add(ItemHandlerMode.INPUT_OUTPUT) + if (battery != null) builder.add(ItemHandlerMode.BATTERY) + + possibleViews = builder.build() + + if (input != null && output != null) { + inputOutput = CombinedItemHandler(input, output) + } else { + inputOutput = null + } + } + inner class Piece( val side: RelativeSide, - val input: IItemHandler? = null, - val output: IItemHandler? = null, - val battery: IItemHandler? = null, ) : IItemHandler, ITickable { private var currentHandler: IItemHandler = EmptyItemHandler private val capController = sides[side]!!.Cap(ForgeCapabilities.ITEM_HANDLER, this) private val neighbour by sides[side]!!.track(ForgeCapabilities.ITEM_HANDLER) - val possibleViews: ImmutableSet - val inputOutput: IItemHandler? - init { tickList.always(this) - - val builder = ImmutableSet.Builder() - - builder.add(ItemHandlerMode.DISABLED) - - if (input != null) builder.add(ItemHandlerMode.INPUT) - if (output != null) builder.add(ItemHandlerMode.OUTPUT) - if (input != null && output != null) builder.add(ItemHandlerMode.INPUT_OUTPUT) - if (battery != null) builder.add(ItemHandlerMode.BATTERY) - - possibleViews = builder.build() - capController.close() - - if (input != null && output != null) { - inputOutput = CombinedItemHandler(input, output) - } else { - inputOutput = null - } } var mode by synchronizer.enum(ItemHandlerMode.DISABLED, setter = { value, access, setByRemote ->