Fold cables block code
This commit is contained in:
parent
d7c5b76098
commit
93942161ad
@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
package ru.dbotthepony.mc.otm.block
|
package ru.dbotthepony.mc.otm.block
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableMap
|
||||||
import net.minecraft.core.BlockPos
|
import net.minecraft.core.BlockPos
|
||||||
import net.minecraft.core.Direction
|
import net.minecraft.core.Direction
|
||||||
import net.minecraft.world.level.BlockGetter
|
import net.minecraft.world.level.BlockGetter
|
||||||
@ -20,7 +21,6 @@ import net.minecraft.world.phys.shapes.Shapes
|
|||||||
import net.minecraft.world.phys.shapes.VoxelShape
|
import net.minecraft.world.phys.shapes.VoxelShape
|
||||||
import ru.dbotthepony.mc.otm.block.entity.MatterCableBlockEntity
|
import ru.dbotthepony.mc.otm.block.entity.MatterCableBlockEntity
|
||||||
import ru.dbotthepony.mc.otm.block.entity.StorageCableBlockEntity
|
import ru.dbotthepony.mc.otm.block.entity.StorageCableBlockEntity
|
||||||
import ru.dbotthepony.mc.otm.core.math.BlockRotation
|
|
||||||
import java.util.Collections
|
import java.util.Collections
|
||||||
import java.util.EnumMap
|
import java.util.EnumMap
|
||||||
|
|
||||||
@ -48,6 +48,39 @@ abstract class CableBlock(properties: Properties) : Block(properties) {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected fun generateShapes(halfCoreSize: Double): ImmutableMap<BlockState, VoxelShape> {
|
||||||
|
val core = Shapes.box(0.5 - halfCoreSize, 0.5 - halfCoreSize, 0.5 - halfCoreSize, 0.5 + halfCoreSize, 0.5 + halfCoreSize, 0.5 + halfCoreSize)
|
||||||
|
|
||||||
|
return getShapeForEachState {
|
||||||
|
val shapes = ArrayList<VoxelShape>()
|
||||||
|
|
||||||
|
if (it.getValue(CONNECTION_SOUTH))
|
||||||
|
shapes.add(Shapes.box(0.5 - halfCoreSize, 0.5 - halfCoreSize, 0.5 + halfCoreSize, 0.5 + halfCoreSize, 0.5 + halfCoreSize, 1.0))
|
||||||
|
|
||||||
|
if (it.getValue(CONNECTION_NORTH))
|
||||||
|
shapes.add(Shapes.box(0.5 - halfCoreSize, 0.5 - halfCoreSize, 0.0, 0.5 + halfCoreSize, 0.5 + halfCoreSize, 0.5 - halfCoreSize))
|
||||||
|
|
||||||
|
if (it.getValue(CONNECTION_DOWN))
|
||||||
|
shapes.add(Shapes.box(0.5 - halfCoreSize, 0.0, 0.5 - halfCoreSize, 0.5 + halfCoreSize, 0.5 - halfCoreSize, 0.5 + halfCoreSize))
|
||||||
|
|
||||||
|
if (it.getValue(CONNECTION_UP))
|
||||||
|
shapes.add(Shapes.box(0.5 - halfCoreSize, 0.5 - halfCoreSize, 0.5 - halfCoreSize, 0.5 + halfCoreSize, 1.0, 0.5 + halfCoreSize))
|
||||||
|
|
||||||
|
if (it.getValue(CONNECTION_EAST))
|
||||||
|
shapes.add(Shapes.box(0.5 + halfCoreSize, 0.5 - halfCoreSize, 0.5 - halfCoreSize, 1.0, 0.5 + halfCoreSize, 0.5 + halfCoreSize))
|
||||||
|
|
||||||
|
if (it.getValue(CONNECTION_WEST))
|
||||||
|
shapes.add(Shapes.box(0.0, 0.5 - halfCoreSize, 0.5 - halfCoreSize, 0.5 - halfCoreSize, 0.5 + halfCoreSize, 0.5 + halfCoreSize))
|
||||||
|
|
||||||
|
var finalShape = core
|
||||||
|
|
||||||
|
for (shape in shapes)
|
||||||
|
finalShape = Shapes.join(finalShape, shape, BooleanOp.OR)
|
||||||
|
|
||||||
|
return@getShapeForEachState finalShape
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val CONNECTION_SOUTH: BooleanProperty = BooleanProperty.create("connect_south")
|
val CONNECTION_SOUTH: BooleanProperty = BooleanProperty.create("connect_south")
|
||||||
val CONNECTION_WEST: BooleanProperty = BooleanProperty.create("connect_west")
|
val CONNECTION_WEST: BooleanProperty = BooleanProperty.create("connect_west")
|
||||||
@ -56,7 +89,7 @@ abstract class CableBlock(properties: Properties) : Block(properties) {
|
|||||||
val CONNECTION_UP: BooleanProperty = BooleanProperty.create("connect_up")
|
val CONNECTION_UP: BooleanProperty = BooleanProperty.create("connect_up")
|
||||||
val CONNECTION_DOWN: BooleanProperty = BooleanProperty.create("connect_down")
|
val CONNECTION_DOWN: BooleanProperty = BooleanProperty.create("connect_down")
|
||||||
|
|
||||||
val MAPPING_CONNECTION_PROP: Map<Direction, BooleanProperty> = EnumMap<Direction, BooleanProperty>(Direction::class.java)
|
val MAPPING_CONNECTION_PROP: Map<Direction, BooleanProperty> = Collections.unmodifiableMap(EnumMap<Direction, BooleanProperty>(Direction::class.java)
|
||||||
.let {
|
.let {
|
||||||
it[Direction.DOWN] = CONNECTION_DOWN
|
it[Direction.DOWN] = CONNECTION_DOWN
|
||||||
it[Direction.UP] = CONNECTION_UP
|
it[Direction.UP] = CONNECTION_UP
|
||||||
@ -65,121 +98,16 @@ abstract class CableBlock(properties: Properties) : Block(properties) {
|
|||||||
it[Direction.WEST] = CONNECTION_WEST
|
it[Direction.WEST] = CONNECTION_WEST
|
||||||
it[Direction.EAST] = CONNECTION_EAST
|
it[Direction.EAST] = CONNECTION_EAST
|
||||||
Collections.unmodifiableMap(it)
|
Collections.unmodifiableMap(it)
|
||||||
}
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class MatterCableBlock : CableBlock(
|
class MatterCableBlock : CableBlock(Properties.of().mapColor(MapColor.METAL).requiresCorrectToolForDrops().sound(SoundType.METAL).strength(1.0f, 6.0f)), EntityBlock {
|
||||||
Properties.of().mapColor(MapColor.METAL).requiresCorrectToolForDrops().sound(SoundType.METAL).strength(1.0f, 6.0f)),
|
private val shapes = generateShapes(0.15)
|
||||||
EntityBlock {
|
|
||||||
private val CORE_SHAPE: VoxelShape = Shapes.box(
|
|
||||||
0.5 - 0.15,
|
|
||||||
0.5 - 0.15,
|
|
||||||
0.5 - 0.15,
|
|
||||||
0.5 + 0.15,
|
|
||||||
0.5 + 0.15,
|
|
||||||
0.5 + 0.15
|
|
||||||
)
|
|
||||||
|
|
||||||
private val shapes = getShapeForEachState {
|
|
||||||
val shapes = ArrayList<VoxelShape>()
|
|
||||||
val width = 0.15
|
|
||||||
|
|
||||||
if (it.getValue(CONNECTION_SOUTH)) {
|
|
||||||
shapes.add(
|
|
||||||
Shapes.box(
|
|
||||||
0.5 - width,
|
|
||||||
0.5 - width,
|
|
||||||
0.5 + width,
|
|
||||||
0.5 + width,
|
|
||||||
0.5 + width,
|
|
||||||
1.0
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (it.getValue(CONNECTION_NORTH)) {
|
|
||||||
shapes.add(
|
|
||||||
Shapes.box(
|
|
||||||
0.5 - width,
|
|
||||||
0.5 - width,
|
|
||||||
0.0,
|
|
||||||
0.5 + width,
|
|
||||||
0.5 + width,
|
|
||||||
0.5 - width
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (it.getValue(CONNECTION_DOWN)) {
|
|
||||||
shapes.add(
|
|
||||||
Shapes.box(
|
|
||||||
0.5 - width,
|
|
||||||
0.0,
|
|
||||||
0.5 - width,
|
|
||||||
0.5 + width,
|
|
||||||
0.5 - width,
|
|
||||||
0.5 + width
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (it.getValue(CONNECTION_UP)) {
|
|
||||||
shapes.add(
|
|
||||||
Shapes.box(
|
|
||||||
0.5 - width,
|
|
||||||
0.5 - width,
|
|
||||||
0.5 - width,
|
|
||||||
0.5 + width,
|
|
||||||
1.0,
|
|
||||||
0.5 + width
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (it.getValue(CONNECTION_EAST)) {
|
|
||||||
shapes.add(
|
|
||||||
Shapes.box(
|
|
||||||
0.5 + width,
|
|
||||||
0.5 - width,
|
|
||||||
0.5 - width,
|
|
||||||
1.0,
|
|
||||||
0.5 + width,
|
|
||||||
0.5 + width
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (it.getValue(CONNECTION_WEST)) {
|
|
||||||
shapes.add(
|
|
||||||
Shapes.box(
|
|
||||||
0.0,
|
|
||||||
0.5 - width,
|
|
||||||
0.5 - width,
|
|
||||||
0.5 - width,
|
|
||||||
0.5 + width,
|
|
||||||
0.5 + width
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
var finalShape = CORE_SHAPE
|
|
||||||
|
|
||||||
for (add_shape in shapes) {
|
|
||||||
finalShape = Shapes.joinUnoptimized(finalShape, add_shape, BooleanOp.OR)
|
|
||||||
}
|
|
||||||
|
|
||||||
return@getShapeForEachState finalShape
|
|
||||||
}
|
|
||||||
|
|
||||||
@Suppress("OVERRIDE_DEPRECATION")
|
@Suppress("OVERRIDE_DEPRECATION")
|
||||||
override fun getShape(
|
override fun getShape(blockState: BlockState, accessor: BlockGetter, pos: BlockPos, context: CollisionContext): VoxelShape {
|
||||||
p_60555_: BlockState,
|
return shapes[blockState] ?: Shapes.block()
|
||||||
p_60556_: BlockGetter,
|
|
||||||
p_60557_: BlockPos,
|
|
||||||
p_60558_: CollisionContext
|
|
||||||
): VoxelShape {
|
|
||||||
return shapes[p_60555_] ?: CORE_SHAPE
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun newBlockEntity(blockPos: BlockPos, blockState: BlockState): BlockEntity {
|
override fun newBlockEntity(blockPos: BlockPos, blockState: BlockState): BlockEntity {
|
||||||
@ -187,127 +115,12 @@ class MatterCableBlock : CableBlock(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class StorageCableBlock : CableBlock(
|
class StorageCableBlock : CableBlock(Properties.of().mapColor(MapColor.METAL).requiresCorrectToolForDrops().sound(SoundType.METAL).strength(1.0f, 6.0f)), EntityBlock {
|
||||||
Properties.of().mapColor(MapColor.METAL).requiresCorrectToolForDrops().sound(SoundType.METAL).strength(1.0f, 6.0f)),
|
private val shapes = generateShapes(0.185)
|
||||||
EntityBlock {
|
|
||||||
|
|
||||||
companion object {
|
|
||||||
val CORE_SHAPE: VoxelShape = Shapes.box(
|
|
||||||
0.5 - 0.185,
|
|
||||||
0.5 - 0.185,
|
|
||||||
0.5 - 0.185,
|
|
||||||
0.5 + 0.185,
|
|
||||||
0.5 + 0.185,
|
|
||||||
0.5 + 0.185
|
|
||||||
)
|
|
||||||
|
|
||||||
private const val width = 0.185
|
|
||||||
|
|
||||||
fun getShapeFor(it: BlockState): MutableList<VoxelShape> {
|
|
||||||
val shapes = ArrayList<VoxelShape>()
|
|
||||||
|
|
||||||
if (it.getValue(CONNECTION_SOUTH)) {
|
|
||||||
shapes.add(
|
|
||||||
Shapes.box(
|
|
||||||
0.5 - width,
|
|
||||||
0.5 - width,
|
|
||||||
0.5 + width,
|
|
||||||
0.5 + width,
|
|
||||||
0.5 + width,
|
|
||||||
1.0
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (it.getValue(CONNECTION_NORTH)) {
|
|
||||||
shapes.add(
|
|
||||||
Shapes.box(
|
|
||||||
0.5 - width,
|
|
||||||
0.5 - width,
|
|
||||||
0.0,
|
|
||||||
0.5 + width,
|
|
||||||
0.5 + width,
|
|
||||||
0.5 - width
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (it.getValue(CONNECTION_DOWN)) {
|
|
||||||
shapes.add(
|
|
||||||
Shapes.box(
|
|
||||||
0.5 - width,
|
|
||||||
0.0,
|
|
||||||
0.5 - width,
|
|
||||||
0.5 + width,
|
|
||||||
0.5 - width,
|
|
||||||
0.5 + width
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (it.getValue(CONNECTION_UP)) {
|
|
||||||
shapes.add(
|
|
||||||
Shapes.box(
|
|
||||||
0.5 - width,
|
|
||||||
0.5 - width,
|
|
||||||
0.5 - width,
|
|
||||||
0.5 + width,
|
|
||||||
1.0,
|
|
||||||
0.5 + width
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (it.getValue(CONNECTION_EAST)) {
|
|
||||||
shapes.add(
|
|
||||||
Shapes.box(
|
|
||||||
0.5 + width,
|
|
||||||
0.5 - width,
|
|
||||||
0.5 - width,
|
|
||||||
1.0,
|
|
||||||
0.5 + width,
|
|
||||||
0.5 + width
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (it.getValue(CONNECTION_WEST)) {
|
|
||||||
shapes.add(
|
|
||||||
Shapes.box(
|
|
||||||
0.0,
|
|
||||||
0.5 - width,
|
|
||||||
0.5 - width,
|
|
||||||
0.5 - width,
|
|
||||||
0.5 + width,
|
|
||||||
0.5 + width
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
shapes.add(CORE_SHAPE)
|
|
||||||
return shapes
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private val shapes = getShapeForEachState {
|
|
||||||
val shapes = getShapeFor(it)
|
|
||||||
var finalShape = shapes[0]
|
|
||||||
|
|
||||||
for (i in 1 until shapes.size) {
|
|
||||||
finalShape = Shapes.joinUnoptimized(finalShape, shapes[i], BooleanOp.OR)
|
|
||||||
}
|
|
||||||
|
|
||||||
return@getShapeForEachState finalShape
|
|
||||||
}
|
|
||||||
|
|
||||||
@Suppress("OVERRIDE_DEPRECATION")
|
@Suppress("OVERRIDE_DEPRECATION")
|
||||||
override fun getShape(
|
override fun getShape(blockState: BlockState, accessor: BlockGetter, pos: BlockPos, context: CollisionContext): VoxelShape {
|
||||||
p_60555_: BlockState,
|
return shapes[blockState] ?: Shapes.block()
|
||||||
p_60556_: BlockGetter,
|
|
||||||
p_60557_: BlockPos,
|
|
||||||
p_60558_: CollisionContext
|
|
||||||
): VoxelShape {
|
|
||||||
return shapes[p_60555_] ?: CORE_SHAPE
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun newBlockEntity(blockPos: BlockPos, blockState: BlockState): BlockEntity {
|
override fun newBlockEntity(blockPos: BlockPos, blockState: BlockState): BlockEntity {
|
||||||
|
@ -21,7 +21,7 @@ import java.math.BigInteger
|
|||||||
import java.util.ArrayList
|
import java.util.ArrayList
|
||||||
import java.util.stream.Stream
|
import java.util.stream.Stream
|
||||||
|
|
||||||
abstract class AbstractMatteryDrive<T : StorageStack<T>> @JvmOverloads constructor(
|
abstract class AbstractMatteryDrive<T : StorageStack<T>>(
|
||||||
override var driveCapacity: BigInteger,
|
override var driveCapacity: BigInteger,
|
||||||
override val uuid: UUID = UUID.randomUUID(),
|
override val uuid: UUID = UUID.randomUUID(),
|
||||||
var maxDifferentStacks: Int = 0xFFFF
|
var maxDifferentStacks: Int = 0xFFFF
|
||||||
|
Loading…
Reference in New Issue
Block a user