Storage bus/i/o blockstates
This commit is contained in:
parent
de1eb1af19
commit
8cabf8d295
@ -235,6 +235,13 @@ object DataGen {
|
||||
.addModel()
|
||||
.condition(RotatableMatteryBlock.FACING_FULL, dir)
|
||||
.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")))
|
||||
@ -249,6 +256,13 @@ object DataGen {
|
||||
.addModel()
|
||||
.condition(RotatableMatteryBlock.FACING_FULL, dir)
|
||||
.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")))
|
||||
@ -263,6 +277,13 @@ object DataGen {
|
||||
.addModel()
|
||||
.condition(RotatableMatteryBlock.FACING_FULL, dir)
|
||||
.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")))
|
||||
|
@ -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 {
|
||||
return when (this) {
|
||||
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? {
|
||||
if (hasProperty(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.BlockEntityType
|
||||
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.block.entity.StorageBusBlockEntity
|
||||
import ru.dbotthepony.mc.otm.registry.MBlockEntities
|
||||
@ -17,6 +18,16 @@ import ru.dbotthepony.mc.otm.unaryMinus
|
||||
class StorageBusBlock : RotatableMatteryBlock(), EntityBlock {
|
||||
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 {
|
||||
return StorageBusBlockEntity(p_153215_, p_153216_)
|
||||
}
|
||||
@ -25,6 +36,17 @@ class StorageBusBlock : RotatableMatteryBlock(), EntityBlock {
|
||||
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(
|
||||
p_153212_: Level,
|
||||
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.BlockEntityType
|
||||
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.block.entity.StorageExporterBlockEntity
|
||||
import ru.dbotthepony.mc.otm.block.entity.StorageImporterBlockEntity
|
||||
@ -22,6 +23,27 @@ class StorageImporterBlock : RotatableMatteryBlock(), EntityBlock {
|
||||
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(
|
||||
p_153212_: Level,
|
||||
p_153213_: BlockState,
|
||||
@ -66,6 +88,27 @@ class StorageExporterBlock : RotatableMatteryBlock(), EntityBlock {
|
||||
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(
|
||||
p_153212_: Level,
|
||||
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)
|
||||
|
||||
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) {
|
||||
val newState = blockState.setValue(CableBlock.MAPPING_CONNECTION_PROP[direction.ordinal], false)
|
||||
|
||||
if (newState !== blockState && !SERVER_IS_DYING)
|
||||
level!!.setBlock(blockPos, newState, Block.UPDATE_CLIENTS)
|
||||
level?.setBlock(blockPos, newState, Block.UPDATE_CLIENTS)
|
||||
}
|
||||
|
||||
override fun setRemoved() {
|
||||
|
@ -13,18 +13,22 @@ import net.minecraft.world.entity.player.Player
|
||||
import net.minecraft.world.inventory.AbstractContainerMenu
|
||||
import net.minecraft.world.item.ItemStack
|
||||
import net.minecraft.world.level.Level
|
||||
import net.minecraft.world.level.block.Block
|
||||
import net.minecraft.world.level.block.state.BlockState
|
||||
import net.minecraftforge.common.capabilities.Capability
|
||||
import net.minecraftforge.common.util.LazyOptional
|
||||
import net.minecraftforge.items.CapabilityItemHandler
|
||||
import net.minecraftforge.items.IItemHandler
|
||||
import ru.dbotthepony.mc.otm.*
|
||||
import ru.dbotthepony.mc.otm.block.CableBlock
|
||||
import ru.dbotthepony.mc.otm.block.RotatableMatteryBlock
|
||||
import ru.dbotthepony.mc.otm.capability.MatteryCapability
|
||||
import ru.dbotthepony.mc.otm.capability.WorkerEnergyStorage
|
||||
import ru.dbotthepony.mc.otm.container.ItemFilter
|
||||
import ru.dbotthepony.mc.otm.core.ImpreciseFraction
|
||||
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.StorageNetworkGraph
|
||||
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)
|
||||
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) { _, _, _ ->
|
||||
component?.scan()
|
||||
@ -82,7 +101,7 @@ class StorageBusBlockEntity(blockPos: BlockPos, blockState: BlockState) : Matter
|
||||
private var valid = true
|
||||
|
||||
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()
|
||||
} 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.item.ItemStack
|
||||
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.state.BlockState
|
||||
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.IItemHandler
|
||||
import ru.dbotthepony.mc.otm.*
|
||||
import ru.dbotthepony.mc.otm.block.CableBlock
|
||||
import ru.dbotthepony.mc.otm.block.RotatableMatteryBlock
|
||||
import ru.dbotthepony.mc.otm.capability.*
|
||||
import ru.dbotthepony.mc.otm.container.ItemFilter
|
||||
import ru.dbotthepony.mc.otm.core.ImpreciseFraction
|
||||
import ru.dbotthepony.mc.otm.core.plus
|
||||
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.StorageNetworkGraph
|
||||
import ru.dbotthepony.mc.otm.menu.StorageExporterMenu
|
||||
@ -46,12 +50,27 @@ abstract class AbstractStorageImportExport<T>(
|
||||
maxOutput: ImpreciseFraction? = maxInput
|
||||
) : MatteryPoweredBlockEntity(blockType, blockPos, blockState) {
|
||||
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
|
||||
|
||||
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()
|
||||
} else super.getCapability(cap, side)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user