Storage bus/i/o blockstates
This commit is contained in:
parent
de1eb1af19
commit
8cabf8d295
@ -235,6 +235,13 @@ object DataGen {
|
|||||||
.addModel()
|
.addModel()
|
||||||
.condition(RotatableMatteryBlock.FACING_FULL, dir)
|
.condition(RotatableMatteryBlock.FACING_FULL, dir)
|
||||||
.end()
|
.end()
|
||||||
|
|
||||||
|
part().modelFile(models().getExistingFile(ResourceLocation(OverdriveThatMatters.MOD_ID, "storage_cable_connection")))
|
||||||
|
.rotationX(dir.toXRotBlockstateInv())
|
||||||
|
.rotationY(dir.toYRotBlockstateInv())
|
||||||
|
.addModel()
|
||||||
|
.condition(CableBlock.MAPPING_CONNECTION_PROP[dir.ordinal], true)
|
||||||
|
.end()
|
||||||
}
|
}
|
||||||
|
|
||||||
part().modelFile(models().getExistingFile(ResourceLocation(OverdriveThatMatters.MOD_ID, "storage_cable_core")))
|
part().modelFile(models().getExistingFile(ResourceLocation(OverdriveThatMatters.MOD_ID, "storage_cable_core")))
|
||||||
@ -249,6 +256,13 @@ object DataGen {
|
|||||||
.addModel()
|
.addModel()
|
||||||
.condition(RotatableMatteryBlock.FACING_FULL, dir)
|
.condition(RotatableMatteryBlock.FACING_FULL, dir)
|
||||||
.end()
|
.end()
|
||||||
|
|
||||||
|
part().modelFile(models().getExistingFile(ResourceLocation(OverdriveThatMatters.MOD_ID, "storage_cable_connection")))
|
||||||
|
.rotationX(dir.toXRotBlockstateInv())
|
||||||
|
.rotationY(dir.toYRotBlockstateInv())
|
||||||
|
.addModel()
|
||||||
|
.condition(CableBlock.MAPPING_CONNECTION_PROP[dir.ordinal], true)
|
||||||
|
.end()
|
||||||
}
|
}
|
||||||
|
|
||||||
part().modelFile(models().getExistingFile(ResourceLocation(OverdriveThatMatters.MOD_ID, "storage_cable_core")))
|
part().modelFile(models().getExistingFile(ResourceLocation(OverdriveThatMatters.MOD_ID, "storage_cable_core")))
|
||||||
@ -263,6 +277,13 @@ object DataGen {
|
|||||||
.addModel()
|
.addModel()
|
||||||
.condition(RotatableMatteryBlock.FACING_FULL, dir)
|
.condition(RotatableMatteryBlock.FACING_FULL, dir)
|
||||||
.end()
|
.end()
|
||||||
|
|
||||||
|
part().modelFile(models().getExistingFile(ResourceLocation(OverdriveThatMatters.MOD_ID, "storage_cable_connection")))
|
||||||
|
.rotationX(dir.toXRotBlockstateInv())
|
||||||
|
.rotationY(dir.toYRotBlockstateInv())
|
||||||
|
.addModel()
|
||||||
|
.condition(CableBlock.MAPPING_CONNECTION_PROP[dir.ordinal], true)
|
||||||
|
.end()
|
||||||
}
|
}
|
||||||
|
|
||||||
part().modelFile(models().getExistingFile(ResourceLocation(OverdriveThatMatters.MOD_ID, "storage_cable_core")))
|
part().modelFile(models().getExistingFile(ResourceLocation(OverdriveThatMatters.MOD_ID, "storage_cable_core")))
|
||||||
|
@ -18,6 +18,17 @@ fun Direction.toYRotBlockstate(): Int {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun Direction.toYRotBlockstateInv(): Int {
|
||||||
|
return when (this) {
|
||||||
|
Direction.DOWN -> 0
|
||||||
|
Direction.UP -> 0
|
||||||
|
Direction.NORTH -> 180
|
||||||
|
Direction.SOUTH -> 0
|
||||||
|
Direction.WEST -> 90
|
||||||
|
Direction.EAST -> -90
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun Direction.toXRotBlockstate(): Int {
|
fun Direction.toXRotBlockstate(): Int {
|
||||||
return when (this) {
|
return when (this) {
|
||||||
Direction.DOWN -> 90
|
Direction.DOWN -> 90
|
||||||
@ -29,6 +40,17 @@ fun Direction.toXRotBlockstate(): Int {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun Direction.toXRotBlockstateInv(): Int {
|
||||||
|
return when (this) {
|
||||||
|
Direction.DOWN -> -90
|
||||||
|
Direction.UP -> 90
|
||||||
|
Direction.NORTH -> 0
|
||||||
|
Direction.SOUTH -> 0
|
||||||
|
Direction.WEST -> 0
|
||||||
|
Direction.EAST -> 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun <T : Comparable<T>> BlockState.getValueNullable(prop: Property<T>): T? {
|
fun <T : Comparable<T>> BlockState.getValueNullable(prop: Property<T>): T? {
|
||||||
if (hasProperty(prop)) {
|
if (hasProperty(prop)) {
|
||||||
return getValue(prop)
|
return getValue(prop)
|
||||||
|
@ -9,6 +9,7 @@ import net.minecraft.world.level.block.entity.BlockEntity
|
|||||||
import net.minecraft.world.level.block.entity.BlockEntityTicker
|
import net.minecraft.world.level.block.entity.BlockEntityTicker
|
||||||
import net.minecraft.world.level.block.entity.BlockEntityType
|
import net.minecraft.world.level.block.entity.BlockEntityType
|
||||||
import net.minecraft.world.level.block.state.BlockState
|
import net.minecraft.world.level.block.state.BlockState
|
||||||
|
import net.minecraft.world.level.block.state.StateDefinition
|
||||||
import ru.dbotthepony.mc.otm.addPreWorldTickerOnce
|
import ru.dbotthepony.mc.otm.addPreWorldTickerOnce
|
||||||
import ru.dbotthepony.mc.otm.block.entity.StorageBusBlockEntity
|
import ru.dbotthepony.mc.otm.block.entity.StorageBusBlockEntity
|
||||||
import ru.dbotthepony.mc.otm.registry.MBlockEntities
|
import ru.dbotthepony.mc.otm.registry.MBlockEntities
|
||||||
@ -17,6 +18,16 @@ import ru.dbotthepony.mc.otm.unaryMinus
|
|||||||
class StorageBusBlock : RotatableMatteryBlock(), EntityBlock {
|
class StorageBusBlock : RotatableMatteryBlock(), EntityBlock {
|
||||||
override val hasFreeRotation: Boolean get() = true
|
override val hasFreeRotation: Boolean get() = true
|
||||||
|
|
||||||
|
init {
|
||||||
|
registerDefaultState(defaultBlockState()
|
||||||
|
.setValue(CableBlock.CONNECTION_SOUTH, false)
|
||||||
|
.setValue(CableBlock.CONNECTION_WEST, false)
|
||||||
|
.setValue(CableBlock.CONNECTION_EAST, false)
|
||||||
|
.setValue(CableBlock.CONNECTION_NORTH, false)
|
||||||
|
.setValue(CableBlock.CONNECTION_UP, false)
|
||||||
|
.setValue(CableBlock.CONNECTION_DOWN, false))
|
||||||
|
}
|
||||||
|
|
||||||
override fun newBlockEntity(p_153215_: BlockPos, p_153216_: BlockState): BlockEntity {
|
override fun newBlockEntity(p_153215_: BlockPos, p_153216_: BlockState): BlockEntity {
|
||||||
return StorageBusBlockEntity(p_153215_, p_153216_)
|
return StorageBusBlockEntity(p_153215_, p_153216_)
|
||||||
}
|
}
|
||||||
@ -25,6 +36,17 @@ class StorageBusBlock : RotatableMatteryBlock(), EntityBlock {
|
|||||||
return super.getStateForPlacement(context)?.setValue(FACING_FULL, -context.clickedFace)
|
return super.getStateForPlacement(context)?.setValue(FACING_FULL, -context.clickedFace)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun createBlockStateDefinition(builder: StateDefinition.Builder<Block, BlockState>) {
|
||||||
|
super.createBlockStateDefinition(builder)
|
||||||
|
|
||||||
|
builder.add(CableBlock.CONNECTION_SOUTH,
|
||||||
|
CableBlock.CONNECTION_WEST,
|
||||||
|
CableBlock.CONNECTION_EAST,
|
||||||
|
CableBlock.CONNECTION_NORTH,
|
||||||
|
CableBlock.CONNECTION_UP,
|
||||||
|
CableBlock.CONNECTION_DOWN)
|
||||||
|
}
|
||||||
|
|
||||||
override fun <T : BlockEntity?> getTicker(
|
override fun <T : BlockEntity?> getTicker(
|
||||||
p_153212_: Level,
|
p_153212_: Level,
|
||||||
p_153213_: BlockState,
|
p_153213_: BlockState,
|
||||||
|
@ -9,6 +9,7 @@ import net.minecraft.world.level.block.entity.BlockEntity
|
|||||||
import net.minecraft.world.level.block.entity.BlockEntityTicker
|
import net.minecraft.world.level.block.entity.BlockEntityTicker
|
||||||
import net.minecraft.world.level.block.entity.BlockEntityType
|
import net.minecraft.world.level.block.entity.BlockEntityType
|
||||||
import net.minecraft.world.level.block.state.BlockState
|
import net.minecraft.world.level.block.state.BlockState
|
||||||
|
import net.minecraft.world.level.block.state.StateDefinition
|
||||||
import ru.dbotthepony.mc.otm.addPreWorldTickerOnce
|
import ru.dbotthepony.mc.otm.addPreWorldTickerOnce
|
||||||
import ru.dbotthepony.mc.otm.block.entity.StorageExporterBlockEntity
|
import ru.dbotthepony.mc.otm.block.entity.StorageExporterBlockEntity
|
||||||
import ru.dbotthepony.mc.otm.block.entity.StorageImporterBlockEntity
|
import ru.dbotthepony.mc.otm.block.entity.StorageImporterBlockEntity
|
||||||
@ -22,6 +23,27 @@ class StorageImporterBlock : RotatableMatteryBlock(), EntityBlock {
|
|||||||
return StorageImporterBlockEntity(p_153215_, p_153216_)
|
return StorageImporterBlockEntity(p_153215_, p_153216_)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
init {
|
||||||
|
registerDefaultState(defaultBlockState()
|
||||||
|
.setValue(CableBlock.CONNECTION_SOUTH, false)
|
||||||
|
.setValue(CableBlock.CONNECTION_WEST, false)
|
||||||
|
.setValue(CableBlock.CONNECTION_EAST, false)
|
||||||
|
.setValue(CableBlock.CONNECTION_NORTH, false)
|
||||||
|
.setValue(CableBlock.CONNECTION_UP, false)
|
||||||
|
.setValue(CableBlock.CONNECTION_DOWN, false))
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun createBlockStateDefinition(builder: StateDefinition.Builder<Block, BlockState>) {
|
||||||
|
super.createBlockStateDefinition(builder)
|
||||||
|
|
||||||
|
builder.add(CableBlock.CONNECTION_SOUTH,
|
||||||
|
CableBlock.CONNECTION_WEST,
|
||||||
|
CableBlock.CONNECTION_EAST,
|
||||||
|
CableBlock.CONNECTION_NORTH,
|
||||||
|
CableBlock.CONNECTION_UP,
|
||||||
|
CableBlock.CONNECTION_DOWN)
|
||||||
|
}
|
||||||
|
|
||||||
override fun <T : BlockEntity?> getTicker(
|
override fun <T : BlockEntity?> getTicker(
|
||||||
p_153212_: Level,
|
p_153212_: Level,
|
||||||
p_153213_: BlockState,
|
p_153213_: BlockState,
|
||||||
@ -66,6 +88,27 @@ class StorageExporterBlock : RotatableMatteryBlock(), EntityBlock {
|
|||||||
return StorageExporterBlockEntity(p_153215_, p_153216_)
|
return StorageExporterBlockEntity(p_153215_, p_153216_)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
init {
|
||||||
|
registerDefaultState(defaultBlockState()
|
||||||
|
.setValue(CableBlock.CONNECTION_SOUTH, false)
|
||||||
|
.setValue(CableBlock.CONNECTION_WEST, false)
|
||||||
|
.setValue(CableBlock.CONNECTION_EAST, false)
|
||||||
|
.setValue(CableBlock.CONNECTION_NORTH, false)
|
||||||
|
.setValue(CableBlock.CONNECTION_UP, false)
|
||||||
|
.setValue(CableBlock.CONNECTION_DOWN, false))
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun createBlockStateDefinition(builder: StateDefinition.Builder<Block, BlockState>) {
|
||||||
|
super.createBlockStateDefinition(builder)
|
||||||
|
|
||||||
|
builder.add(CableBlock.CONNECTION_SOUTH,
|
||||||
|
CableBlock.CONNECTION_WEST,
|
||||||
|
CableBlock.CONNECTION_EAST,
|
||||||
|
CableBlock.CONNECTION_NORTH,
|
||||||
|
CableBlock.CONNECTION_UP,
|
||||||
|
CableBlock.CONNECTION_DOWN)
|
||||||
|
}
|
||||||
|
|
||||||
override fun <T : BlockEntity?> getTicker(
|
override fun <T : BlockEntity?> getTicker(
|
||||||
p_153212_: Level,
|
p_153212_: Level,
|
||||||
p_153213_: BlockState,
|
p_153213_: BlockState,
|
||||||
|
@ -57,14 +57,14 @@ class MatterCableBlockEntity(p_155229_: BlockPos, p_155230_: BlockState) :
|
|||||||
val newState = blockState.setValue(CableBlock.MAPPING_CONNECTION_PROP[direction.ordinal], true)
|
val newState = blockState.setValue(CableBlock.MAPPING_CONNECTION_PROP[direction.ordinal], true)
|
||||||
|
|
||||||
if (newState !== blockState && !SERVER_IS_DYING)
|
if (newState !== blockState && !SERVER_IS_DYING)
|
||||||
level!!.setBlock(blockPos, newState, Block.UPDATE_CLIENTS)
|
level?.setBlock(blockPos, newState, Block.UPDATE_CLIENTS)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onUnNeighbour(node: Graph6Node<*>, direction: Direction) {
|
override fun onUnNeighbour(node: Graph6Node<*>, direction: Direction) {
|
||||||
val newState = blockState.setValue(CableBlock.MAPPING_CONNECTION_PROP[direction.ordinal], false)
|
val newState = blockState.setValue(CableBlock.MAPPING_CONNECTION_PROP[direction.ordinal], false)
|
||||||
|
|
||||||
if (newState !== blockState && !SERVER_IS_DYING)
|
if (newState !== blockState && !SERVER_IS_DYING)
|
||||||
level!!.setBlock(blockPos, newState, Block.UPDATE_CLIENTS)
|
level?.setBlock(blockPos, newState, Block.UPDATE_CLIENTS)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun setRemoved() {
|
override fun setRemoved() {
|
||||||
|
@ -13,18 +13,22 @@ import net.minecraft.world.entity.player.Player
|
|||||||
import net.minecraft.world.inventory.AbstractContainerMenu
|
import net.minecraft.world.inventory.AbstractContainerMenu
|
||||||
import net.minecraft.world.item.ItemStack
|
import net.minecraft.world.item.ItemStack
|
||||||
import net.minecraft.world.level.Level
|
import net.minecraft.world.level.Level
|
||||||
|
import net.minecraft.world.level.block.Block
|
||||||
import net.minecraft.world.level.block.state.BlockState
|
import net.minecraft.world.level.block.state.BlockState
|
||||||
import net.minecraftforge.common.capabilities.Capability
|
import net.minecraftforge.common.capabilities.Capability
|
||||||
import net.minecraftforge.common.util.LazyOptional
|
import net.minecraftforge.common.util.LazyOptional
|
||||||
import net.minecraftforge.items.CapabilityItemHandler
|
import net.minecraftforge.items.CapabilityItemHandler
|
||||||
import net.minecraftforge.items.IItemHandler
|
import net.minecraftforge.items.IItemHandler
|
||||||
import ru.dbotthepony.mc.otm.*
|
import ru.dbotthepony.mc.otm.*
|
||||||
|
import ru.dbotthepony.mc.otm.block.CableBlock
|
||||||
import ru.dbotthepony.mc.otm.block.RotatableMatteryBlock
|
import ru.dbotthepony.mc.otm.block.RotatableMatteryBlock
|
||||||
import ru.dbotthepony.mc.otm.capability.MatteryCapability
|
import ru.dbotthepony.mc.otm.capability.MatteryCapability
|
||||||
import ru.dbotthepony.mc.otm.capability.WorkerEnergyStorage
|
import ru.dbotthepony.mc.otm.capability.WorkerEnergyStorage
|
||||||
import ru.dbotthepony.mc.otm.container.ItemFilter
|
import ru.dbotthepony.mc.otm.container.ItemFilter
|
||||||
import ru.dbotthepony.mc.otm.core.ImpreciseFraction
|
import ru.dbotthepony.mc.otm.core.ImpreciseFraction
|
||||||
import ru.dbotthepony.mc.otm.core.plus
|
import ru.dbotthepony.mc.otm.core.plus
|
||||||
|
import ru.dbotthepony.mc.otm.graph.Graph6Node
|
||||||
|
import ru.dbotthepony.mc.otm.graph.GraphNodeListener
|
||||||
import ru.dbotthepony.mc.otm.graph.storage.BasicStorageGraphNode
|
import ru.dbotthepony.mc.otm.graph.storage.BasicStorageGraphNode
|
||||||
import ru.dbotthepony.mc.otm.graph.storage.StorageNetworkGraph
|
import ru.dbotthepony.mc.otm.graph.storage.StorageNetworkGraph
|
||||||
import ru.dbotthepony.mc.otm.menu.StorageBusMenu
|
import ru.dbotthepony.mc.otm.menu.StorageBusMenu
|
||||||
@ -62,7 +66,22 @@ class StorageBusBlockEntity(blockPos: BlockPos, blockState: BlockState) : Matter
|
|||||||
}
|
}
|
||||||
|
|
||||||
override val energy = WorkerEnergyStorage(this, maxBatteryLevel = MAX_POWER)
|
override val energy = WorkerEnergyStorage(this, maxBatteryLevel = MAX_POWER)
|
||||||
val cell = BasicStorageGraphNode(energy)
|
|
||||||
|
val cell: BasicStorageGraphNode = object : BasicStorageGraphNode(energy), GraphNodeListener {
|
||||||
|
override fun onNeighbour(node: Graph6Node<*>, direction: Direction) {
|
||||||
|
val newState = this@StorageBusBlockEntity.blockState.setValue(CableBlock.MAPPING_CONNECTION_PROP[direction.ordinal], true)
|
||||||
|
|
||||||
|
if (newState !== this@StorageBusBlockEntity.blockState && !SERVER_IS_DYING)
|
||||||
|
level?.setBlock(blockPos, newState, Block.UPDATE_CLIENTS)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onUnNeighbour(node: Graph6Node<*>, direction: Direction) {
|
||||||
|
val newState = this@StorageBusBlockEntity.blockState.setValue(CableBlock.MAPPING_CONNECTION_PROP[direction.ordinal], false)
|
||||||
|
|
||||||
|
if (newState !== this@StorageBusBlockEntity.blockState && !SERVER_IS_DYING)
|
||||||
|
level?.setBlock(blockPos, newState, Block.UPDATE_CLIENTS)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
val filter = ItemFilter(MAX_FILTERS) { _, _, _ ->
|
val filter = ItemFilter(MAX_FILTERS) { _, _, _ ->
|
||||||
component?.scan()
|
component?.scan()
|
||||||
@ -82,7 +101,7 @@ class StorageBusBlockEntity(blockPos: BlockPos, blockState: BlockState) : Matter
|
|||||||
private var valid = true
|
private var valid = true
|
||||||
|
|
||||||
override fun <T> getCapability(cap: Capability<T>, side: Direction?): LazyOptional<T> {
|
override fun <T> getCapability(cap: Capability<T>, side: Direction?): LazyOptional<T> {
|
||||||
return if (valid && cap === MatteryCapability.STORAGE_NODE) {
|
return if (valid && cap === MatteryCapability.STORAGE_NODE && side != blockState.getValue(RotatableMatteryBlock.FACING_FULL)) {
|
||||||
cell.get().cast()
|
cell.get().cast()
|
||||||
} else super.getCapability(cap, side)
|
} else super.getCapability(cap, side)
|
||||||
}
|
}
|
||||||
|
@ -12,6 +12,7 @@ import net.minecraft.world.entity.player.Player
|
|||||||
import net.minecraft.world.inventory.AbstractContainerMenu
|
import net.minecraft.world.inventory.AbstractContainerMenu
|
||||||
import net.minecraft.world.item.ItemStack
|
import net.minecraft.world.item.ItemStack
|
||||||
import net.minecraft.world.level.Level
|
import net.minecraft.world.level.Level
|
||||||
|
import net.minecraft.world.level.block.Block
|
||||||
import net.minecraft.world.level.block.entity.BlockEntityType
|
import net.minecraft.world.level.block.entity.BlockEntityType
|
||||||
import net.minecraft.world.level.block.state.BlockState
|
import net.minecraft.world.level.block.state.BlockState
|
||||||
import net.minecraftforge.common.capabilities.Capability
|
import net.minecraftforge.common.capabilities.Capability
|
||||||
@ -19,12 +20,15 @@ import net.minecraftforge.common.util.LazyOptional
|
|||||||
import net.minecraftforge.items.CapabilityItemHandler
|
import net.minecraftforge.items.CapabilityItemHandler
|
||||||
import net.minecraftforge.items.IItemHandler
|
import net.minecraftforge.items.IItemHandler
|
||||||
import ru.dbotthepony.mc.otm.*
|
import ru.dbotthepony.mc.otm.*
|
||||||
|
import ru.dbotthepony.mc.otm.block.CableBlock
|
||||||
import ru.dbotthepony.mc.otm.block.RotatableMatteryBlock
|
import ru.dbotthepony.mc.otm.block.RotatableMatteryBlock
|
||||||
import ru.dbotthepony.mc.otm.capability.*
|
import ru.dbotthepony.mc.otm.capability.*
|
||||||
import ru.dbotthepony.mc.otm.container.ItemFilter
|
import ru.dbotthepony.mc.otm.container.ItemFilter
|
||||||
import ru.dbotthepony.mc.otm.core.ImpreciseFraction
|
import ru.dbotthepony.mc.otm.core.ImpreciseFraction
|
||||||
import ru.dbotthepony.mc.otm.core.plus
|
import ru.dbotthepony.mc.otm.core.plus
|
||||||
import ru.dbotthepony.mc.otm.core.toImpreciseFraction
|
import ru.dbotthepony.mc.otm.core.toImpreciseFraction
|
||||||
|
import ru.dbotthepony.mc.otm.graph.Graph6Node
|
||||||
|
import ru.dbotthepony.mc.otm.graph.GraphNodeListener
|
||||||
import ru.dbotthepony.mc.otm.graph.storage.BasicStorageGraphNode
|
import ru.dbotthepony.mc.otm.graph.storage.BasicStorageGraphNode
|
||||||
import ru.dbotthepony.mc.otm.graph.storage.StorageNetworkGraph
|
import ru.dbotthepony.mc.otm.graph.storage.StorageNetworkGraph
|
||||||
import ru.dbotthepony.mc.otm.menu.StorageExporterMenu
|
import ru.dbotthepony.mc.otm.menu.StorageExporterMenu
|
||||||
@ -46,12 +50,27 @@ abstract class AbstractStorageImportExport<T>(
|
|||||||
maxOutput: ImpreciseFraction? = maxInput
|
maxOutput: ImpreciseFraction? = maxInput
|
||||||
) : MatteryPoweredBlockEntity(blockType, blockPos, blockState) {
|
) : MatteryPoweredBlockEntity(blockType, blockPos, blockState) {
|
||||||
final override val energy = WorkerEnergyStorage(this, maxBatteryLevel, maxInput, maxOutput)
|
final override val energy = WorkerEnergyStorage(this, maxBatteryLevel, maxInput, maxOutput)
|
||||||
val cell = BasicStorageGraphNode(energy)
|
|
||||||
|
val cell: BasicStorageGraphNode = object : BasicStorageGraphNode(energy), GraphNodeListener {
|
||||||
|
override fun onNeighbour(node: Graph6Node<*>, direction: Direction) {
|
||||||
|
val newState = this@AbstractStorageImportExport.blockState.setValue(CableBlock.MAPPING_CONNECTION_PROP[direction.ordinal], true)
|
||||||
|
|
||||||
|
if (newState !== this@AbstractStorageImportExport.blockState && !SERVER_IS_DYING)
|
||||||
|
level?.setBlock(blockPos, newState, Block.UPDATE_CLIENTS)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onUnNeighbour(node: Graph6Node<*>, direction: Direction) {
|
||||||
|
val newState = this@AbstractStorageImportExport.blockState.setValue(CableBlock.MAPPING_CONNECTION_PROP[direction.ordinal], false)
|
||||||
|
|
||||||
|
if (newState !== this@AbstractStorageImportExport.blockState && !SERVER_IS_DYING)
|
||||||
|
level?.setBlock(blockPos, newState, Block.UPDATE_CLIENTS)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private var valid = true
|
private var valid = true
|
||||||
|
|
||||||
override fun <T> getCapability(cap: Capability<T>, side: Direction?): LazyOptional<T> {
|
override fun <T> getCapability(cap: Capability<T>, side: Direction?): LazyOptional<T> {
|
||||||
return if (valid && cap === MatteryCapability.STORAGE_NODE) {
|
return if (valid && cap === MatteryCapability.STORAGE_NODE && side != blockState.getValue(RotatableMatteryBlock.FACING_FULL)) {
|
||||||
cell.get().cast()
|
cell.get().cast()
|
||||||
} else super.getCapability(cap, side)
|
} else super.getCapability(cap, side)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user