79 lines
4.1 KiB
Kotlin
79 lines
4.1 KiB
Kotlin
package net.shadowfacts.extrahoppers.block.gold
|
|
|
|
import net.minecraft.block.Block
|
|
import net.minecraft.block.BlockState
|
|
import net.minecraft.entity.EntityContext
|
|
import net.minecraft.item.ItemPlacementContext
|
|
import net.minecraft.state.StateManager
|
|
import net.minecraft.state.property.DirectionProperty
|
|
import net.minecraft.util.BooleanBiFunction
|
|
import net.minecraft.util.Identifier
|
|
import net.minecraft.util.math.BlockPos
|
|
import net.minecraft.util.math.Direction
|
|
import net.minecraft.util.shape.VoxelShape
|
|
import net.minecraft.util.shape.VoxelShapes
|
|
import net.minecraft.world.BlockView
|
|
|
|
/**
|
|
* @author shadowfacts
|
|
*/
|
|
class InvertedGoldHopperBlock: GoldHopperBlock() {
|
|
|
|
companion object {
|
|
val ID = Identifier("extrahoppers", "inverted_gold_hopper")
|
|
|
|
val INVERTED_FACING = DirectionProperty.of("inverted_facing") { direction: Direction -> direction != Direction.DOWN }
|
|
|
|
val INVERTED_TOP_SHAPE = createCuboidShape(0.0, 6.0, 0.0, 16.0, 0.0, 16.0)
|
|
val INVERTED_MIDDLE_SHAPE = createCuboidShape(4.0, 12.0, 4.0, 12.0, 6.0, 12.0)
|
|
val INVERTED_INSIDE_SHAPE = createCuboidShape(2.0, 5.0, 2.0, 14.0, 0.0, 14.0)
|
|
val INVERTED_OUTSIDE_SHAPE = VoxelShapes.union(INVERTED_MIDDLE_SHAPE, INVERTED_TOP_SHAPE)
|
|
val INVERTED_DEFAULT_SHAPE = VoxelShapes.combineAndSimplify(INVERTED_OUTSIDE_SHAPE, INVERTED_INSIDE_SHAPE, BooleanBiFunction.ONLY_FIRST)
|
|
val INVERTED_DOWN_SHAPE = VoxelShapes.union(INVERTED_DEFAULT_SHAPE, createCuboidShape(6.0, 16.0, 6.0, 10.0, 12.0, 10.0))
|
|
val INVERTED_EAST_SHAPE = VoxelShapes.union(INVERTED_DEFAULT_SHAPE, createCuboidShape(12.0, 12.0, 6.0, 16.0, 8.0, 10.0))
|
|
val INVERTED_NORTH_SHAPE = VoxelShapes.union(INVERTED_DEFAULT_SHAPE, createCuboidShape(6.0, 12.0, 0.0, 10.0, 8.0, 4.0))
|
|
val INVERTED_SOUTH_SHAPE = VoxelShapes.union(INVERTED_DEFAULT_SHAPE, createCuboidShape(6.0, 12.0, 12.0, 10.0, 8.0, 16.0))
|
|
val INVERTED_WEST_SHAPE = VoxelShapes.union(INVERTED_DEFAULT_SHAPE, createCuboidShape(0.0, 12.0, 6.0, 4.0, 8.0, 10.0))
|
|
val INVERTED_DOWN_RAY_TRACE_SHAPE = INVERTED_INSIDE_SHAPE
|
|
val INVERTED_EAST_RAY_TRACE_SHAPE = VoxelShapes.union(INVERTED_INSIDE_SHAPE, createCuboidShape(12.0, 8.0, 6.0, 16.0, 6.0, 10.0))
|
|
val INVERTED_NORTH_RAY_TRACE_SHAPE = VoxelShapes.union(INVERTED_INSIDE_SHAPE, createCuboidShape(6.0, 8.0, 0.0, 10.0, 6.0, 4.0))
|
|
val INVERTED_SOUTH_RAY_TRACE_SHAPE = VoxelShapes.union(INVERTED_INSIDE_SHAPE, createCuboidShape(6.0, 8.0, 12.0, 10.0, 6.0, 16.0))
|
|
val INVERTED_WEST_RAY_TRACE_SHAPE = VoxelShapes.union(INVERTED_INSIDE_SHAPE, createCuboidShape(0.0, 8.0, 6.0, 4.0, 6.0, 10.0))
|
|
}
|
|
|
|
override fun appendProperties(builder: StateManager.Builder<Block, BlockState>) {
|
|
builder.add(INVERTED_FACING)
|
|
}
|
|
|
|
override fun getOutlineShape(state: BlockState, world: BlockView, pos: BlockPos, entityContext: EntityContext): VoxelShape {
|
|
return when (state.get(INVERTED_FACING)) {
|
|
Direction.DOWN -> INVERTED_DOWN_SHAPE
|
|
Direction.NORTH -> INVERTED_NORTH_SHAPE
|
|
Direction.SOUTH -> INVERTED_SOUTH_SHAPE
|
|
Direction.WEST -> INVERTED_WEST_SHAPE
|
|
Direction.EAST -> INVERTED_EAST_SHAPE
|
|
else -> INVERTED_DEFAULT_SHAPE
|
|
}
|
|
}
|
|
|
|
override fun getRayTraceShape(state: BlockState, world: BlockView, pos: BlockPos): VoxelShape {
|
|
return when (state.get(INVERTED_FACING)) {
|
|
Direction.DOWN -> INVERTED_DOWN_RAY_TRACE_SHAPE
|
|
Direction.NORTH -> INVERTED_NORTH_RAY_TRACE_SHAPE
|
|
Direction.SOUTH -> INVERTED_SOUTH_RAY_TRACE_SHAPE
|
|
Direction.WEST -> INVERTED_WEST_RAY_TRACE_SHAPE
|
|
Direction.EAST -> INVERTED_EAST_RAY_TRACE_SHAPE
|
|
else -> INVERTED_INSIDE_SHAPE
|
|
}
|
|
}
|
|
|
|
override fun getPlacementState(context: ItemPlacementContext): BlockState {
|
|
val hitFacing = context.side.opposite
|
|
val facing = if (hitFacing.axis == Direction.Axis.Y) Direction.UP else hitFacing
|
|
return defaultState.with(INVERTED_FACING, facing)
|
|
}
|
|
|
|
override fun createBlockEntity(world: BlockView) = GoldHopperBlockEntity(true)
|
|
|
|
}
|