diff --git a/src/main/kotlin/org/neoflock/neocomputers/block/CaseBlock.kt b/src/main/kotlin/org/neoflock/neocomputers/block/CaseBlock.kt index 1b64059..6fcd9c5 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/block/CaseBlock.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/block/CaseBlock.kt @@ -11,15 +11,20 @@ import net.minecraft.sounds.SoundSource import net.minecraft.util.RandomSource import net.minecraft.world.Containers import net.minecraft.world.InteractionResult +import net.minecraft.world.entity.LivingEntity import net.minecraft.world.entity.player.Player +import net.minecraft.world.item.ItemStack +import net.minecraft.world.item.context.BlockPlaceContext import net.minecraft.world.level.BlockGetter 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.FurnaceBlock import net.minecraft.world.level.block.SoundType 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.phys.BlockHitResult import org.neoflock.neocomputers.NeoComputers import org.neoflock.neocomputers.block.CombustionGeneratorBlock.Companion.COMBUSTGEN_ACTIVE @@ -30,6 +35,7 @@ import org.neoflock.neocomputers.sounds.Sounds class CaseBlock() : NodeBlock(Properties.of().sound(SoundType.METAL).lightLevel(CaseBlock::getLuminance)) { // placeholder stuff companion object { + val FACING: EnumProperty = EnumProperty.create("facing", Direction::class.java) val COMPUTER_RUNNING = BooleanProperty.create("running")!! fun getLuminance(blockState: BlockState): Int { @@ -37,10 +43,15 @@ class CaseBlock() : NodeBlock(Properties.of().sound(SoundType.METAL).lightLevel( } } + init { + registerDefaultState(stateDefinition.any().setValue(FACING, Direction.NORTH).setValue(COMPUTER_RUNNING, false)) + } + override fun newBlockEntity(blockPos: BlockPos, blockState: BlockState) = CaseBlockEntity(blockPos, blockState).initNetworking() override fun createBlockStateDefinition(builder: StateDefinition.Builder) { builder.add(COMPUTER_RUNNING) + builder.add(FACING) } fun getMachine(level: BlockGetter, blockPos: BlockPos): CaseBlockEntity { @@ -70,6 +81,10 @@ class CaseBlock() : NodeBlock(Properties.of().sound(SoundType.METAL).lightLevel( super.onPlace(blockState, level, blockPos, blockState2, bl) } + override fun getStateForPlacement(context: BlockPlaceContext): BlockState? { + return defaultBlockState().setValue(FACING, context.horizontalDirection.opposite) + } + override fun neighborChanged( blockState: BlockState, level: Level, @@ -94,8 +109,14 @@ class CaseBlock() : NodeBlock(Properties.of().sound(SoundType.METAL).lightLevel( ): InteractionResult { if(!level.isClientSide) { val ent = level.getBlockEntity(blockPos, BlockEntities.CASE_ENTITY.get()).get() - MenuRegistry.openMenu(player as ServerPlayer, ent) - NodeSynchronizer.registerPlayerScreen(player, ent) + if(player.isCrouching) { + // Quickstat + ent.start() + } else { + // Open menu + MenuRegistry.openMenu(player as ServerPlayer, ent) + NodeSynchronizer.registerPlayerScreen(player, ent) + } } return InteractionResult.SUCCESS } diff --git a/src/main/kotlin/org/neoflock/neocomputers/entity/CaseBlockEntity.kt b/src/main/kotlin/org/neoflock/neocomputers/entity/CaseBlockEntity.kt index 6c08cd3..66f5158 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/entity/CaseBlockEntity.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/entity/CaseBlockEntity.kt @@ -49,11 +49,13 @@ class CaseBlockEntity(blockPos: BlockPos, blockState: BlockState): NodeBlockEnti override fun encodeDownstreamData(packet: FriendlyByteBuf) { super.encodeDownstreamData(packet) packet.writeBoolean(isOn) + packet.writeUtf(err ?: "") } override fun syncWithUpstream(packet: FriendlyByteBuf) { super.syncWithUpstream(packet) setRunning(packet.readBoolean()) + err = packet.readUtf().ifEmpty { null } } override fun processScreenInteraction(player: ServerPlayer, packet: FriendlyByteBuf) { diff --git a/src/main/kotlin/org/neoflock/neocomputers/gui/render/ScreenEntityRenderer.kt b/src/main/kotlin/org/neoflock/neocomputers/gui/render/ScreenEntityRenderer.kt index 5d84b36..c39f387 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/gui/render/ScreenEntityRenderer.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/gui/render/ScreenEntityRenderer.kt @@ -6,6 +6,7 @@ import com.mojang.math.Axis import net.minecraft.client.renderer.MultiBufferSource import net.minecraft.client.renderer.blockentity.BlockEntityRenderer import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider +import net.minecraft.client.renderer.blockentity.ChestRenderer import net.minecraft.core.Direction import net.minecraft.resources.ResourceLocation import net.minecraft.world.level.block.state.properties.EnumProperty diff --git a/src/main/resources/assets/neocomputers/blockstates/case.json b/src/main/resources/assets/neocomputers/blockstates/case.json new file mode 100644 index 0000000..81acfab --- /dev/null +++ b/src/main/resources/assets/neocomputers/blockstates/case.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=north": { + "model": "neocomputers:block/case" + }, + "facing=east": { + "model": "neocomputers:block/case", + "y": 90 + }, + "facing=west": { + "model": "neocomputers:block/case", + "y": -90 + }, + "facing=south": { + "model": "neocomputers:block/case", + "y": 180 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/neocomputers/models/block/case.json b/src/main/resources/assets/neocomputers/models/block/case.json new file mode 100644 index 0000000..552a676 --- /dev/null +++ b/src/main/resources/assets/neocomputers/models/block/case.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "up": "neocomputers:block/case_top", + "down": "neocomputers:block/case_bottom", + "north": "neocomputers:block/case_front", + "south": "neocomputers:block/case_back", + "east": "neocomputers:block/case_side", + "west": "neocomputers:block/case_side", + "particle": "neocomputers:block/case_top" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/neocomputers/textures/block/case_back.png b/src/main/resources/assets/neocomputers/textures/block/case_back.png new file mode 100644 index 0000000..638a181 Binary files /dev/null and b/src/main/resources/assets/neocomputers/textures/block/case_back.png differ diff --git a/src/main/resources/assets/neocomputers/textures/block/case_bottom.png b/src/main/resources/assets/neocomputers/textures/block/case_bottom.png new file mode 100644 index 0000000..77de679 Binary files /dev/null and b/src/main/resources/assets/neocomputers/textures/block/case_bottom.png differ diff --git a/src/main/resources/assets/neocomputers/textures/block/case_front.png b/src/main/resources/assets/neocomputers/textures/block/case_front.png new file mode 100644 index 0000000..5da1148 Binary files /dev/null and b/src/main/resources/assets/neocomputers/textures/block/case_front.png differ diff --git a/src/main/resources/assets/neocomputers/textures/block/case_side.png b/src/main/resources/assets/neocomputers/textures/block/case_side.png new file mode 100644 index 0000000..02724e8 Binary files /dev/null and b/src/main/resources/assets/neocomputers/textures/block/case_side.png differ diff --git a/src/main/resources/assets/neocomputers/textures/block/case_top.png b/src/main/resources/assets/neocomputers/textures/block/case_top.png new file mode 100644 index 0000000..f646fc7 Binary files /dev/null and b/src/main/resources/assets/neocomputers/textures/block/case_top.png differ