From 6d20d204a6ac9fde2d82746785b09caca820fa63 Mon Sep 17 00:00:00 2001 From: IonutParau Date: Thu, 23 Apr 2026 00:52:59 +0200 Subject: [PATCH] case model --- .../neoflock/neocomputers/block/CaseBlock.kt | 25 ++++++++++++++++-- .../neocomputers/entity/CaseBlockEntity.kt | 2 ++ .../gui/render/ScreenEntityRenderer.kt | 1 + .../assets/neocomputers/blockstates/case.json | 19 +++++++++++++ .../neocomputers/models/block/case.json | 12 +++++++++ .../neocomputers/textures/block/case_back.png | Bin 0 -> 634 bytes .../textures/block/case_bottom.png | Bin 0 -> 494 bytes .../textures/block/case_front.png | Bin 0 -> 634 bytes .../neocomputers/textures/block/case_side.png | Bin 0 -> 570 bytes .../neocomputers/textures/block/case_top.png | Bin 0 -> 339 bytes 10 files changed, 57 insertions(+), 2 deletions(-) create mode 100644 src/main/resources/assets/neocomputers/blockstates/case.json create mode 100644 src/main/resources/assets/neocomputers/models/block/case.json create mode 100644 src/main/resources/assets/neocomputers/textures/block/case_back.png create mode 100644 src/main/resources/assets/neocomputers/textures/block/case_bottom.png create mode 100644 src/main/resources/assets/neocomputers/textures/block/case_front.png create mode 100644 src/main/resources/assets/neocomputers/textures/block/case_side.png create mode 100644 src/main/resources/assets/neocomputers/textures/block/case_top.png 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 0000000000000000000000000000000000000000..638a181b8c877916cb4dc7ea56c597c76d252380 GIT binary patch literal 634 zcmV-=0)_pFP)XZDNP=yf><3PM(KsK+w3^EmqI9d zmZ|Tb1%u_F;1vnL&!)dMwok&BmA5_TP!OqgZ~OLL==8F%lFA_Qmdbfn(3aP3H!BDN zal^-ESKB_QR)@9(_~ zGcq$kKtMk}KSf1FIXXE-MMfGL8c|SDKR-S_JUkW_7Dz`&LqkFv8yh(~I!jDTZOFe* z0002lNklGbOd(ey$%zGmg;JU4s z<8=er&KE*5lOG|^O^vmla~!Fmek*fW44B3MQYtWYwN`)SQr1wRP{}=i;mzWk(l=E` zsP!GU{PcBdp1idv8oiyOKzryG6=-*zcX}A3s{>f#0T zyI!hZB2c6>C?S+eNe=0ikl!H{qEH1BLa-4JV~p(zJ&J*iY^QOtS!*`W`fwW$njt{Y kh~7Uye`xke>AwI200DLn7+i__@c;k-07*qoM6N<$f;?oc@&Et; literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..5da1148c336d94bbc4783d230f499abb189a1319 GIT binary patch literal 634 zcmV-=0)_pFP)0NGd8SD=RBXN=hUoBq=E=Y;0^jJv|>EA3i=lIXO8`Pft}VIyyRNXlPkkSzB9MMMXtzZEZwEL@+Qg zF)=Y#R#r1JGaMWoZfA|E-o%iOiWlwhtvaDc0Eq!u0C**>+eorP#g7^fv z&nmvvoDHei1ARn;ZDlm7pEq51;0hf z8RE^Eq$s3vE1pWpWgBJLa3S4G?I&Th>l3|r$k@9MNhJ{{NZ2kDz*Gm3!oL6m0Hw$o UU0;n<2LJ#707*qoM6N<$f(q2%2LJ#7 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..02724e856faca6aae4a97de099d6fdd0e6920c77 GIT binary patch literal 570 zcmV-A0>%A_P)^SNJtP65JyKx3=9l&b8|*UMs##^ zL_|al3=L{(YFk@dSXfvoDJgAjZAL{#_4V}=6BAcgR%mEws;a6`P*7)QXB8C{78Vvt zNlA8gc3fOsSy@?BR8($mZbL#tQc_ZIaBx~$T4Q2jYiny=U0oR%8C6wPWMpJ-Z*L0= z3t(Vi8X6i)OG{;CWn<|vF8}}l;7LS5RCwAHP}P#eFbuPrv`NbC7PehxIA+G(WBUKU zIalKsYh;fkq6W4jC?*ndvuM2>e9rsJXRQY}b0SB(mDRxIsSa4NlM5HX5nzeY3lpVf z0p6tF0`gHQh%O}1Hs--FW1q63P-q=XsikRy3Y(l=75#mbQKWiI?6G3=gRJK#N%6f+ z;yZ`L$q<>B-VReQL-o!+&QoALdG)+C;65?&8-~Ew{cHxj)m@vY8|Ih58GE~u>YAU9 zjq;^0>sm?WFF5Eb2&Svf;_-0Y38n#`I2^laz!v+&E&K~G04qQeP_3=lDgXcg07*qo IM6N<$f=IW^x&QzG literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..f646fc7f226cabcf3556cd2a0c895a9bd0dcca4d GIT binary patch literal 339 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!forvRT2S2Z=Yf`Wql{QSbg!o0k^oSdAZqN3c~+~VTml9Cct zRaFfQ4Rv+(($doM^78ELY!wxiva+&@ii)hPtjx?zO-)VL_I_cYY0Eub978H@iA-=$ zVm0J&p7=uU{GUlr{)O|VxmI>46}^dyzNhrNmg##~n8}^5!AhsMOg3TH-6wM>9 zfOreewS2WD65W?{g&yzaDdBaOJ+w@5!3&c|lcrvsR{Pm6^}k%xOXX-Eg&ircAAE5! zt6ZkT9Q3)5FXE+&Ox9FM=DHl0r|Xt|dMNV1Y>~oVop