diff --git a/src/main/kotlin/org/neoflock/neocomputers/block/ScreenBlock.kt b/src/main/kotlin/org/neoflock/neocomputers/block/ScreenBlock.kt index 5952c01..c4557e0 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/block/ScreenBlock.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/block/ScreenBlock.kt @@ -2,19 +2,26 @@ package org.neoflock.neocomputers.block; import dev.architectury.registry.menu.MenuRegistry import net.minecraft.core.BlockPos +import net.minecraft.core.Direction import net.minecraft.network.chat.Component import net.minecraft.server.level.ServerPlayer import net.minecraft.world.InteractionHand import net.minecraft.world.InteractionResult import net.minecraft.world.MenuProvider +import net.minecraft.world.entity.LivingEntity import net.minecraft.world.entity.player.Inventory 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.EntityBlock import net.minecraft.world.level.block.entity.BlockEntity import net.minecraft.world.level.block.state.BlockState +import net.minecraft.world.level.block.state.StateDefinition +import net.minecraft.world.level.block.state.properties.BooleanProperty +import net.minecraft.world.level.block.state.properties.EnumProperty +import net.minecraft.world.level.block.state.properties.EnumProperty.* import net.minecraft.world.phys.BlockHitResult import org.neoflock.neocomputers.NeoComputers import org.neoflock.neocomputers.entity.BlockEntities @@ -22,8 +29,17 @@ import org.neoflock.neocomputers.entity.ScreenEntity import org.neoflock.neocomputers.gui.menu.Menus import org.neoflock.neocomputers.gui.menu.ScreenMenu import org.neoflock.neocomputers.network.Networking +import kotlin.math.abs +import kotlin.math.max class ScreenBlock() : NodeBlock() { + companion object { + val FACING: EnumProperty = EnumProperty.create("facing", Direction::class.java) + } + + init { + registerDefaultState(stateDefinition.any().setValue(FACING, Direction.NORTH)) + } override fun newBlockEntity(blockPos: BlockPos, blockState: BlockState): BlockEntity? { val scr = ScreenEntity(blockPos, blockState) @@ -53,4 +69,26 @@ class ScreenBlock() : NodeBlock() { } return InteractionResult.SUCCESS } + + override fun createBlockStateDefinition(builder: StateDefinition.Builder) { + builder.add(FACING) + } + override fun setPlacedBy(level: Level, pos: BlockPos, state: BlockState, placer: LivingEntity?, stack: ItemStack) { + super.setPlacedBy(level, pos, state, placer, stack) +// state.setValue(state.) + level.setBlockAndUpdate(pos, state.setValue(FACING, lookingdir(placer!!))) + } + + private fun lookingdir(placer: LivingEntity): Direction { + val vec = placer.lookAngle + NeoComputers.LOGGER.info(vec.toString()) + val biggest = max(max(abs(vec.x), abs(vec.y)), abs(vec.z)) + when(biggest) { + abs(vec.x) -> if(vec.x < 0) return Direction.EAST else return Direction.WEST + abs(vec.y) -> if(vec.y < 0) return Direction.UP else return Direction.DOWN + abs(vec.z) -> if(vec.z < 0) return Direction.SOUTH else return Direction.NORTH + } + NeoComputers.LOGGER.warn("Failed to obtain looking direction!") + return Direction.NORTH // wtf + } } \ No newline at end of file diff --git a/src/main/resources/assets/neocomputers/blockstates/screen.json b/src/main/resources/assets/neocomputers/blockstates/screen.json index f05973a..f5cd085 100644 --- a/src/main/resources/assets/neocomputers/blockstates/screen.json +++ b/src/main/resources/assets/neocomputers/blockstates/screen.json @@ -1,7 +1,27 @@ { "variants": { - "": { + "facing=north": { "model": "neocomputers:block/screen" + }, + "facing=east": { + "model": "neocomputers:block/screen", + "y": 90 + }, + "facing=west": { + "model": "neocomputers:block/screen", + "y": -90 + }, + "facing=south": { + "model": "neocomputers:block/screen", + "y": 180 + }, + "facing=up": { + "model": "neocomputers:block/screen", + "x": -90 + }, + "facing=down": { + "model": "neocomputers:block/screen", + "x": 90 } } } \ No newline at end of file