From 3bfc07c39218f20721820feb4629e48ebe09b0b8 Mon Sep 17 00:00:00 2001 From: IonutParau Date: Thu, 23 Apr 2026 20:23:52 +0200 Subject: [PATCH 1/2] screen progress --- .../neocomputers/block/ScreenBlock.kt | 7 +++-- .../neocomputers/entity/CaseBlockEntity.kt | 3 +++ .../neocomputers/entity/ScreenEntity.kt | 17 +++++++++--- .../neocomputers/gui/screen/ScreenScreen.kt | 27 +++++++++++++++---- .../neocomputers/utils/GenericContainer.kt | 1 + 5 files changed, 45 insertions(+), 10 deletions(-) diff --git a/src/main/kotlin/org/neoflock/neocomputers/block/ScreenBlock.kt b/src/main/kotlin/org/neoflock/neocomputers/block/ScreenBlock.kt index 4238179..45d1efc 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/block/ScreenBlock.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/block/ScreenBlock.kt @@ -64,11 +64,14 @@ class ScreenBlock() : NodeBlock() { player.sendSystemMessage(Component.literal("Not enough power.")) return InteractionResult.SUCCESS }; - MenuRegistry.openExtendedMenu(player as ServerPlayer, object : ExtendedMenuProvider { + val sp = player as ServerPlayer + val ent = level.getBlockEntity(blockPos, BlockEntities.SCREEN_ENTITY.get()).get() + NodeSynchronizer.registerPlayerScreen(sp, ent) + MenuRegistry.openExtendedMenu(sp, object : ExtendedMenuProvider { override fun getDisplayName(): Component = Component.literal("SCREEEEEN!") override fun createMenu(i: Int, inventory: Inventory, player: Player): AbstractContainerMenu { // return Menus.SCREEN_MENU.get().create(i, inventory); - return ScreenMenu(i, inventory, level.getBlockEntity(blockPos, BlockEntities.SCREEN_ENTITY.get()).get()) + return ScreenMenu(i, inventory, ent) } override fun saveExtraData(buf: FriendlyByteBuf?) { diff --git a/src/main/kotlin/org/neoflock/neocomputers/entity/CaseBlockEntity.kt b/src/main/kotlin/org/neoflock/neocomputers/entity/CaseBlockEntity.kt index 66f5158..e48a820 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/entity/CaseBlockEntity.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/entity/CaseBlockEntity.kt @@ -259,6 +259,9 @@ class CaseBlockEntity(blockPos: BlockPos, blockState: BlockState): NodeBlockEnti super.tickNode(level) if(!level.isClientSide) { if (isRunning()) { + if(getMachineComponentsUsed() > getMachineComponentsTotal()) { + crash("too many components") + } if (!node.consumeEnergy(1)) { crash("out of energy") } diff --git a/src/main/kotlin/org/neoflock/neocomputers/entity/ScreenEntity.kt b/src/main/kotlin/org/neoflock/neocomputers/entity/ScreenEntity.kt index 7694124..a73d280 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/entity/ScreenEntity.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/entity/ScreenEntity.kt @@ -1,7 +1,9 @@ package org.neoflock.neocomputers.entity; import net.minecraft.core.BlockPos +import net.minecraft.network.FriendlyByteBuf import net.minecraft.resources.ResourceLocation +import net.minecraft.server.level.ServerPlayer import net.minecraft.world.level.Level import net.minecraft.world.level.block.state.BlockState import org.neoflock.neocomputers.NeoComputers @@ -17,8 +19,17 @@ class ScreenEntity(blockPos: BlockPos, blockState: BlockState) : var bound = "screen/unbound" var render_on_block = false + val scrwidth: Short = 160 + val scrheight: Short = 50 + private var cleanrenderer: () -> Unit = { }; // TODO: THIS SUCKS, FIND A BETTER WAY + override fun encodeScreenData(player: ServerPlayer, packet: FriendlyByteBuf) { + super.encodeScreenData(player, packet) + packet.writeShort(scrwidth.toInt()) + packet.writeShort(scrheight.toInt()) + } + override fun tickNode(level: Level) { super.tickNode(level) if (bound == "screen/unbound" && level.isClientSide) { // am i epstein or am i just retarded? @@ -38,13 +49,13 @@ class ScreenEntity(blockPos: BlockPos, blockState: BlockState) : if (level!!.isClientSide) { var buffer: MutableList = mutableListOf() for(char in node.address.toString()) { - buffer.add(BufferRenderer.GPUChar(char, 0xFFFF00, 0x0000FF)) + buffer.add(BufferRenderer.GPUChar(char)) } - for (i in 0..((40*20)-36)) { + for (i in 0..((scrwidth*scrheight)-36)) { buffer.add(BufferRenderer.GPUChar(' ')) } - var renderer: BufferRenderer = BufferRenderer(40, 20, ResourceLocation.fromNamespaceAndPath(NeoComputers.MODID, bound), buffer) + var renderer: BufferRenderer = BufferRenderer(scrwidth.toInt(), scrheight.toInt(), ResourceLocation.fromNamespaceAndPath(NeoComputers.MODID, bound), buffer) renderer.drawBuffer() cleanrenderer = { renderer.clean() } } diff --git a/src/main/kotlin/org/neoflock/neocomputers/gui/screen/ScreenScreen.kt b/src/main/kotlin/org/neoflock/neocomputers/gui/screen/ScreenScreen.kt index 3720c0b..0e9612d 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/gui/screen/ScreenScreen.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/gui/screen/ScreenScreen.kt @@ -6,6 +6,7 @@ import com.mojang.blaze3d.vertex.Tesselator import com.mojang.blaze3d.vertex.VertexFormat import net.minecraft.client.gui.GuiGraphics import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen +import net.minecraft.network.FriendlyByteBuf import net.minecraft.network.chat.Component import net.minecraft.resources.ResourceLocation import net.minecraft.world.entity.player.Inventory @@ -14,18 +15,34 @@ import org.neoflock.neocomputers.entity.ScreenEntity import org.neoflock.neocomputers.gui.buffer.BufferRenderer import org.neoflock.neocomputers.gui.menu.ScreenMenu import org.neoflock.neocomputers.gui.render.ScreenRenderer +import org.neoflock.neocomputers.utils.GenericContainerScreen +import kotlin.math.min -class ScreenScreen : AbstractContainerScreen{ +class ScreenScreen : GenericContainerScreen{ private var renderer: ScreenRenderer = ScreenRenderer(); + var scrWidth: Short = 0 + var scrHeight: Short = 0 + + override fun processScreenStatePacket(buf: FriendlyByteBuf) { + super.processScreenStatePacket(buf) + scrWidth = buf.readShort() + scrHeight = buf.readShort() + } + constructor(abstractContainerMenu: ScreenMenu, inventory: Inventory, component: Component) : super(abstractContainerMenu, inventory, component) { var ent: ScreenEntity = abstractContainerMenu.entity!!; renderer.bind(ResourceLocation.fromNamespaceAndPath(NeoComputers.MODID, ent.bound)) + // advanced graphics programming + this.titleLabelX = Int.MAX_VALUE + this.inventoryLabelX = Int.MAX_VALUE } - override fun renderBg(guiGraphics: GuiGraphics, f: Float, i: Int, j: Int) {} - override fun render(graphics: GuiGraphics, mouseX: Int, mouseY: Int, something: Float) { - super.render(graphics, mouseX, mouseY, something) - renderer.render(graphics, 50, 50, 100, 200) + override fun renderBg(guiGraphics: GuiGraphics, f: Float, i: Int, j: Int) { + if(scrWidth > 0) { + imageWidth = scrWidth * 4 + imageHeight = scrHeight * 8 + renderer.render(guiGraphics, imageX, imageY, imageWidth, imageHeight) + } } // override fun onClose() { diff --git a/src/main/kotlin/org/neoflock/neocomputers/utils/GenericContainer.kt b/src/main/kotlin/org/neoflock/neocomputers/utils/GenericContainer.kt index ef16e28..1de3349 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/utils/GenericContainer.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/utils/GenericContainer.kt @@ -1,6 +1,7 @@ package org.neoflock.neocomputers.utils // based off the ImplementedContainer of https://docs.fabricmc.net/develop/blocks/block-containers +import dev.architectury.registry.menu.MenuRegistry import net.minecraft.client.gui.GuiGraphics import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen import net.minecraft.world.Container; From 40f3ce9083cbd5d188914349228c6ba015e0926d Mon Sep 17 00:00:00 2001 From: ionut Date: Fri, 24 Apr 2026 10:34:03 +0000 Subject: [PATCH 2/2] case item model --- src/main/resources/assets/neocomputers/models/item/case.json | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 src/main/resources/assets/neocomputers/models/item/case.json diff --git a/src/main/resources/assets/neocomputers/models/item/case.json b/src/main/resources/assets/neocomputers/models/item/case.json new file mode 100644 index 0000000..cfbbf41 --- /dev/null +++ b/src/main/resources/assets/neocomputers/models/item/case.json @@ -0,0 +1,3 @@ +{ + "parent": "neocomputers:block/case" +} \ No newline at end of file