screen progress

This commit is contained in:
2026-04-23 20:23:52 +02:00
parent a8ca4b1e35
commit 3bfc07c392
5 changed files with 45 additions and 10 deletions

View File

@@ -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?) {

View File

@@ -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")
}

View File

@@ -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<BufferRenderer.GPUChar> = 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() }
}

View File

@@ -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<ScreenMenu>{
class ScreenScreen : GenericContainerScreen<ScreenMenu>{
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) {
if(scrWidth > 0) {
imageWidth = scrWidth * 4
imageHeight = scrHeight * 8
renderer.render(guiGraphics, imageX, imageY, imageWidth, imageHeight)
}
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 onClose() {

View File

@@ -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;