From a53a633b330cf09b38a1a46c97e5456120267dbe Mon Sep 17 00:00:00 2001 From: mewhenthe Date: Sat, 18 Apr 2026 12:56:20 +0200 Subject: [PATCH 1/4] unimportant stuff --- .../gui/{buffer => render}/BufferRenderer.kt | 0 .../neocomputers/gui/render/ScreenRenderer.kt | 96 ++++++++++++++++++ .../neocomputers/textures/gui/borders.png | Bin 0 -> 220 bytes stonecutter.gradle.kts | 2 +- 4 files changed, 97 insertions(+), 1 deletion(-) rename src/main/kotlin/org/neoflock/neocomputers/gui/{buffer => render}/BufferRenderer.kt (100%) create mode 100644 src/main/kotlin/org/neoflock/neocomputers/gui/render/ScreenRenderer.kt create mode 100644 src/main/resources/assets/neocomputers/textures/gui/borders.png diff --git a/src/main/kotlin/org/neoflock/neocomputers/gui/buffer/BufferRenderer.kt b/src/main/kotlin/org/neoflock/neocomputers/gui/render/BufferRenderer.kt similarity index 100% rename from src/main/kotlin/org/neoflock/neocomputers/gui/buffer/BufferRenderer.kt rename to src/main/kotlin/org/neoflock/neocomputers/gui/render/BufferRenderer.kt diff --git a/src/main/kotlin/org/neoflock/neocomputers/gui/render/ScreenRenderer.kt b/src/main/kotlin/org/neoflock/neocomputers/gui/render/ScreenRenderer.kt new file mode 100644 index 0000000..74de8ed --- /dev/null +++ b/src/main/kotlin/org/neoflock/neocomputers/gui/render/ScreenRenderer.kt @@ -0,0 +1,96 @@ +// package org.neoflock.neocomputers.gui.render; + +// import com.mojang.blaze3d.platform.NativeImage +// import com.mojang.blaze3d.systems.RenderSystem +// import com.mojang.blaze3d.vertex.BufferBuilder +// import com.mojang.blaze3d.vertex.DefaultVertexFormat +// import com.mojang.blaze3d.vertex.Tesselator +// import com.mojang.blaze3d.vertex.VertexFormat +// import net.minecraft.client.Minecraft +// import net.minecraft.client.gui.GuiGraphics +// import net.minecraft.client.renderer.texture.DynamicTexture +// import net.minecraft.resources.Identifier +// import org.neoflock.neocomputers.NeoComputers + +// class ScreenRenderer { +// val BORDERS: Identifier = Identifier.fromNamespaceAndPath(NeoComputers.MODID, "textures/gui/borders.png") +// var bound: Identifier = Identifier.fromNamespaceAndPath(NeoComputers.MODID, "screen/unbound") + +// val bordersize = 10 + +// fun render(graphics: GuiGraphics, x: Int, y: Int, width: Int, height: Int) { +// // RenderSystem.setShader(GameR) +// // top left corner, uv (0, 0) to (6,6) +// // graphics.blit(BORDERS, x-bordersize, y-bordersize, 0, 0, bordersize.toFloat(), bordersize.toFloat(), 6F, 6F) +// graphics.blit(BORDERS, 6, 6, 0, 0, (x-bordersize).toFloat(), (y-bordersize).toFloat(), bordersize.toFloat(), bordersize.toFloat()) +// // top border, uv (7,0) to (8,6) +// graphics.blit(BORDERS, 6, 1, 7, 0, x.toFloat(), (y-bordersize).toFloat(), width.toFloat(), bordersize.toFloat()) +// // graphics.blit(BORDERS, x, y-bordersize, 7, 0, width.toFloat(), bordersize.toFloat(), 1F, 6F) +// // top right corner, uv (9,0) to (15, 6) +// // graphics.blit(BORDERS, x+width, y-bordersize, 9, 0, bordersize.toFloat(), bordersize.toFloat(), 6F, 6F) +// graphics.blit(BORDERS, 6, 6, 9, 0, (x+width).toFloat(), (y-bordersize).toFloat(), bordersize.toFloat(), bordersize.toFloat()) + +// // left border, uv (0,7) to (6, 8) +// graphics.blit(BORDERS, 6, 1, 0, 7, (x-bordersize).toFloat(), (y).toFloat(), bordersize.toFloat(), height.toFloat()) +// // graphics.blit(BORDERS, x-bordersize, y, 0, 7, bordersize.toFloat(), height.toFloat(), 6F, 1F) +// // right border uv (9, 7) to (15, 8) +// graphics.blit(BORDERS, 6, 1, 9, 7, (x+width).toFloat(), (y).toFloat(), bordersize.toFloat(), height.toFloat()) +// // graphics.blit(BORDERS, x+width, y, 9, 7, bordersize.toFloat(), height.toFloat(), 6F, 1F) + +// // bottom left corner, uv (0, 9) to (6, 15) +// graphics.blit(BORDERS, 6, 6, 0, 9, (x-bordersize).toFloat(), (y+height).toFloat(), bordersize.toFloat(), bordersize.toFloat()) +// // graphics.blit(BORDERS, x-bordersize, y+height, 0, 9, bordersize.toFloat(), bordersize.toFloat(), 6F, 6F) +// // bottom border, uv (7, 9) to (8, 15) +// graphics.blit(BORDERS, 1, 6, 7, 9, (x).toFloat(), (y+height).toFloat(), width.toFloat(), bordersize.toFloat()) +// // graphics.blit(BORDERS, x, y+height, 7, 9, width.toFloat(), bordersize.toFloat(), 1F, 6F) +// // bottom right corner, uv (9, 9) to (15, 15) +// graphics.blit(BORDERS, 6, 6, 9, 9, (x+width).toFloat(), (y+height).toFloat(), bordersize.toFloat(), bordersize.toFloat()) +// // graphics.blit(BORDERS, x+width, y+height, 9, 9, bordersize.toFloat(), bordersize.toFloat(), 6F, 6F) + +// // texture +// // TODO: min mag filter thing +// graphics.blit(bound, 15, 15, 0, 0, x.toFloat(), y.toFloat(), width.toFloat(), height.toFloat()) +// // graphics.blit(bound, x, y, 0, 0, width.toFloat(), height.toFloat(), 15F, 15F) + +// } + +// // fun drawQuad(graphics: GuiGraphics, x: Int, y: Int, width: Int, height: Int, u1: Int, u2: Int, v1: Int, v2: Int) { +// // var t: Tesselator = Tesselator.getInstance() +// // var builder: BufferBuilder = t.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX) +// // builder.setUv1(u1, v1) +// // builder.setUv2(u2, v2) + +// // builder.addVertex(x.toFloat(), (y+height).toFloat(), 1f) +// // builder.addVertex((x+width).toFloat(), (y+height).toFloat(), 1f) +// // builder.addVertex((x+width).toFloat(), y.toFloat(), 1f) +// // builder.addVertex(x.toFloat(), y.toFloat(), 1f) + +// // builder.build() +// // } + +// fun bind(id: Identifier) { +// bound = id +// } + +// fun unbind() { +// bound = Identifier.fromNamespaceAndPath(NeoComputers.MODID, "screen/unbound") +// } + +// companion object Static { +// val img: NativeImage = NativeImage(1, 1, false) +// val tex: DynamicTexture = DynamicTexture({ "screen/unbound" }, img) + +// fun genUnboundTex() { +// img.fillRect(0, 0, 1, 1, 0xFF000000.toInt()) +// tex.upload() + +// Minecraft.getInstance().textureManager.register(Identifier.fromNamespaceAndPath(NeoComputers.MODID, "screen/unbound"), tex) +// } + +// fun cleanUnboundTex() { +// img.close() +// tex.close() +// Minecraft.getInstance().textureManager.release(Identifier.fromNamespaceAndPath(NeoComputers.MODID, "screen/unbound")) +// } +// } +// } \ No newline at end of file diff --git a/src/main/resources/assets/neocomputers/textures/gui/borders.png b/src/main/resources/assets/neocomputers/textures/gui/borders.png new file mode 100644 index 0000000000000000000000000000000000000000..9331627b22fdf6e159ac2bd56c06f3867f7bfe54 GIT binary patch literal 220 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!fop#Yx{*JH z=KV|d14aBiT^vIyZq@WV@*Pm%Iee+@&;Qfh3%c@dJ>%ZQ@6vjtS*4@0!0|gvxr5+A z$qzz@z8KU#(cN%wy}`AN-zC5A=j?3W;l|CrargS#JN29f4DbFkZtyyC=^fBy22WQ% Jmvv4FO#l^tS4sc? literal 0 HcmV?d00001 diff --git a/stonecutter.gradle.kts b/stonecutter.gradle.kts index 44e3c5b..2be3523 100644 --- a/stonecutter.gradle.kts +++ b/stonecutter.gradle.kts @@ -5,7 +5,7 @@ plugins { id("com.gradleup.shadow") version "9.3.0" apply false id("me.modmuss50.mod-publish-plugin") version "0.8.4" apply false } -stonecutter active "1.21.1-fabric" /* [SC] DO NOT EDIT */ +stonecutter active "1.21.11-fabric" /* [SC] DO NOT EDIT */ stonecutter.automaticPlatformConstants = true // Builds every version into `build/libs/{mod.version}/{loader}` From 8634bdb4cec158ba262769e9451561b55ea9303e Mon Sep 17 00:00:00 2001 From: mewhenthe Date: Sat, 18 Apr 2026 13:29:45 +0200 Subject: [PATCH 2/4] combustgui.png --- .../gui/screen/CombustionGeneratorScreen.kt | 4 +++- .../neocomputers/textures/gui/combustgui.png | Bin 0 -> 4460 bytes stonecutter.gradle.kts | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 src/main/resources/assets/neocomputers/textures/gui/combustgui.png diff --git a/src/main/kotlin/org/neoflock/neocomputers/gui/screen/CombustionGeneratorScreen.kt b/src/main/kotlin/org/neoflock/neocomputers/gui/screen/CombustionGeneratorScreen.kt index 3323d7a..0d833bf 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/gui/screen/CombustionGeneratorScreen.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/gui/screen/CombustionGeneratorScreen.kt @@ -6,12 +6,14 @@ import net.minecraft.network.RegistryFriendlyByteBuf import net.minecraft.network.chat.Component import net.minecraft.resources.ResourceLocation import net.minecraft.world.entity.player.Inventory +import org.neoflock.neocomputers.NeoComputers import org.neoflock.neocomputers.entity.BlockEntities import org.neoflock.neocomputers.gui.menu.CombustionGeneratorMenu import org.neoflock.neocomputers.utils.GenericContainerScreen class CombustionGeneratorScreen(abstractContainerMenu: CombustionGeneratorMenu, inventory: Inventory, component: Component) : GenericContainerScreen(abstractContainerMenu, inventory, component) { - override fun findMenuTexture(): ResourceLocation = ResourceLocation.withDefaultNamespace("textures/gui/container/dispenser.png") + // override fun findMenuTexture(): ResourceLocation = ResourceLocation.withDefaultNamespace("textures/gui/container/dispenser.png") + override fun findMenuTexture(): ResourceLocation = ResourceLocation.fromNamespaceAndPath(NeoComputers.MODID, "textures/gui/combustgui.png") var energy: Long = 0 var energyCapacity: Long = 1 diff --git a/src/main/resources/assets/neocomputers/textures/gui/combustgui.png b/src/main/resources/assets/neocomputers/textures/gui/combustgui.png new file mode 100644 index 0000000000000000000000000000000000000000..7f936d5977cffadf52eb179242c1dd4cce3f1d69 GIT binary patch literal 4460 zcmeHLeNYo;8sAtfHAoL?MN08pg4I&oWOuV6$sQ4qM3O=vgHU0_kIn9zxI#Wm782+v z9A{e#9=*1QqaHKhfevRYr_O0@ts;kFJK8JP+BvQDqgecE@uTfo=hS-dZXzGk&fG9_ z{g0hYcHigyJ-_#Pe(&?Xv+urY%g>3HC&&>5iME)Hg$N>pk1{0U5qRq=+gl88JvBuo zLLn1Cy*`hFuK=h}?FA?Z@(u(Ee(tiJiS0$F-gP!K)y;}gKh9rSs=ab&I`RF2C1;aT zAA9m*|FVyB_E+M3|KCcL`kc(hxUQJEng8Y*YQBw#UUs`ThuqQD@bt!GJKrtH&Fhdi zE3>L*^&Ltu9o(~K^6nW|XI8G+&_>p;JKGj(yI)GoIMY>dYDpP$Xu;gQdxu(YM1T65 zCw@#mVKpmCj0a^`QzQQpBcDSg&Q9#ar?zk}Gw6d$RP4EbJyRM}_;x}w%)pA%nTbc2*P2bK^;ORf{9!A7+GI*BpWa|gIw{{tZz}sw)D~)Xin6J` zyr*YYV{zmR=hB&Fle2C{uCJ}rrMzc;^?a@zv#0B>_a1ohwF7~=?ozPhsXSzd zg&zzqeyKmTK7K*QpKn@DoV;u#qCdV>`KwvWZw#a#zxzcio0+m{>dh%frfh#Y?$)EX zPHf-iKR35&*Pf1;)@cRtLe@Y|*KuX{YNh_0%bR19|Fn5-Q%ux0<;DY>nxmV8TXfqy z69(`4m8mW7=-&E_EMGvm(Louw^Xgg5_gX}f%MUq)YDzp{VTsoOv7cD<8dcUbM+ zR(Wsl9Q>}OroH`WQ(cei!oYj&AHH~a@bQ>6pFET8>p-lvyB~YM^`F|o-+sBI&GXUF z&V#Rg8j0pE-R7zLUG|Fiji^VVDB842qS4;H6cnKp>zDsFfa{Q$^_YdKFHpND_kx%wO#mm>}l% zCyNvz4kPfhKHe+v9ycm-GImd;U{EMvKl(5}m)B|?rg!_pDnLC{LB^{hl(@>}QjPZT z3#KYa5)SBRJ^V#*k*W%T-&5&hfvF0(h2+r`96Rjqt@Kq$>2RzHQ~(!*`r)X=m?3j4 zR@<_86qVJ4VDB6Pws0r87DZ=swIl2K_L12@FwID{b_!m11}nqd_5# zPjeoY=V<9sXXiKuC-fK#bXtsJv>c`*9SlZM9I$H%t(MYIqo^!yzreUzAW}hcB@cPj zI7w(ppu;E)fn$`Na$q`!#4$#zX7qZs-cD-pQ4|F}9#$n&F*+)dii1=H4&izoi;)^Y zV3e8#m`;<%V5|n$I0&4=?OMA;#j*54kI%)x>EvCE6R5myr_><|PG{LH1_h}MjVf7e z6^!734hBUY@2(7vK#O=6SR^o_nlRZk4MAwtgj%1b)oMpTF94q(R-(vB;7WB!5OG>) zm<$w_5$hBZNFFd3I@<>r!Q(6Pcq$AEF#uHb9PYNl<-{=pV`KyXNpUib#wnW66%lHh z)X^F|6(?zY6yC$}j_Ut~78ehi9-4A9?}y`8OQz6@S_D>yTA^kIFD)e$l@Y%GD5K%50A7=}~Wh+srmFjY8VmAGd-%s5^3 z6HU@3z^F|I`h{$8^MZS!YIrjYYX;-}C9m*Y{E|bU=)@r7(sx3x3Ax6lz_`E@)ioj4 zxD*%{c%r)gZ*s{;j#I!5-+}`0urznyy0!426>rNcGBMJj>%oHueSLk6jg7^{#qiY; zb{??@4Dcos3iB5snU_w%Q$HfJ=jIrZ^^<3sVPlHdTf+G5Nq3VuHH#qQ|(%=nkTWFMhcBZiBU)<>=Q1}o{gpR+6LTI;%u zh1KV-J@@S&m+$}T`P1O!M(;-{?QG(%0@=wbSzB&rZJ%s9;@GsLP%Hd@IAhYK95n#>IvV zbtW!0%v55$9xZ#@9;SHf)SQSbeY&=*$2JVq`OLC;)g9zu^9hCJjoD*<4Ywa%*4A)u SZSS(hqNl}_Z|qvIqW-^Q;xAnQ literal 0 HcmV?d00001 diff --git a/stonecutter.gradle.kts b/stonecutter.gradle.kts index 2be3523..44e3c5b 100644 --- a/stonecutter.gradle.kts +++ b/stonecutter.gradle.kts @@ -5,7 +5,7 @@ plugins { id("com.gradleup.shadow") version "9.3.0" apply false id("me.modmuss50.mod-publish-plugin") version "0.8.4" apply false } -stonecutter active "1.21.11-fabric" /* [SC] DO NOT EDIT */ +stonecutter active "1.21.1-fabric" /* [SC] DO NOT EDIT */ stonecutter.automaticPlatformConstants = true // Builds every version into `build/libs/{mod.version}/{loader}` From d48c7c3035e11dfd72e6c408cd18f35a93e78968 Mon Sep 17 00:00:00 2001 From: mewhenthe Date: Sat, 18 Apr 2026 16:24:51 +0200 Subject: [PATCH 3/4] screens stuffs --- .../org/neoflock/neocomputers/NeoComputers.kt | 15 +- .../neocomputers/block/ScreenBlock.kt | 1 + .../neoflock/neocomputers/gui/menu/Menus.kt | 2 + .../neocomputers/gui/menu/ScreenMenu.kt | 3 +- .../neocomputers/gui/render/BufferRenderer.kt | 9 +- .../neocomputers/gui/render/ScreenRenderer.kt | 162 +++++++++--------- .../neocomputers/gui/screen/ScreenScreen.kt | 26 ++- .../neocomputers/utils/GenericContainer.kt | 6 +- 8 files changed, 121 insertions(+), 103 deletions(-) diff --git a/src/main/kotlin/org/neoflock/neocomputers/NeoComputers.kt b/src/main/kotlin/org/neoflock/neocomputers/NeoComputers.kt index cfbd9b2..ab98ced 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/NeoComputers.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/NeoComputers.kt @@ -17,6 +17,7 @@ import net.minecraft.server.level.ServerPlayer import org.neoflock.neocomputers.block.NodeBlock import org.neoflock.neocomputers.block.NodeBlockEntity import org.neoflock.neocomputers.block.NodeSynchronizer +import org.neoflock.neocomputers.gui.render.ScreenRenderer import org.neoflock.neocomputers.item.Items import org.neoflock.neocomputers.item.Tabs import org.neoflock.neocomputers.network.Networking @@ -40,7 +41,6 @@ object NeoComputers { BlockEntities.BLOCKENTITIES.register() BlockEntities.registerPowerBlocks() Menus.MENUS.register() - Menus.registerScreens() Tabs.TABS.register() ClientLifecycleEvent.CLIENT_SETUP.register { @@ -48,16 +48,11 @@ object NeoComputers { } ClientLifecycleEvent.CLIENT_STARTED.register { FontProvider.load(ResourceLocation.fromNamespaceAndPath(MODID, "font/unscii.hex")) + ScreenRenderer.genUnboundTex(); + } - val buffer: ArrayList = arrayListOf(BufferRenderer.GPUChar('h'), BufferRenderer.GPUChar('a'), BufferRenderer.GPUChar('i')) - for (i in 0..<(400-3)) { - buffer.add(BufferRenderer.GPUChar(' ')) - } - val bufferRenderer = BufferRenderer(20, 20, ResourceLocation.fromNamespaceAndPath(MODID, "screen/test"), buffer) - bufferRenderer.drawBuffer() - // bufferRenderer.dump("/home/mewhenthe/code/NeoComputers/dump.png") // NOTE: CHANGE THIS BEFORE RUNNING!!!! - bufferRenderer.clean() - + ClientLifecycleEvent.CLIENT_STOPPING.register { + ScreenRenderer.cleanUnboundTex() } TickEvent.SERVER_POST.register { diff --git a/src/main/kotlin/org/neoflock/neocomputers/block/ScreenBlock.kt b/src/main/kotlin/org/neoflock/neocomputers/block/ScreenBlock.kt index 79acc04..d449c02 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/block/ScreenBlock.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/block/ScreenBlock.kt @@ -20,6 +20,7 @@ import org.neoflock.neocomputers.NeoComputers import org.neoflock.neocomputers.entity.BlockEntities 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 class ScreenBlock() : NodeBlock() { diff --git a/src/main/kotlin/org/neoflock/neocomputers/gui/menu/Menus.kt b/src/main/kotlin/org/neoflock/neocomputers/gui/menu/Menus.kt index e20439a..d4bc758 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/gui/menu/Menus.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/gui/menu/Menus.kt @@ -11,6 +11,7 @@ import net.minecraft.world.inventory.MenuType import org.neoflock.neocomputers.NeoComputers import org.neoflock.neocomputers.gui.menu.ScreenMenu import org.neoflock.neocomputers.gui.screen.CombustionGeneratorScreen +import org.neoflock.neocomputers.gui.screen.ScreenScreen object Menus { val MENUS: DeferredRegister> = DeferredRegister.create(NeoComputers.MODID, Registries.MENU) @@ -20,5 +21,6 @@ object Menus { fun registerScreens() { MenuScreens.register(Menus.COMBUSTGEN_MENU.get(), {m: CombustionGeneratorMenu, u, comp -> CombustionGeneratorScreen(m, u, comp)}) + MenuScreens.register(Menus.SCREEN_MENU.get(), ::ScreenScreen) } } \ No newline at end of file diff --git a/src/main/kotlin/org/neoflock/neocomputers/gui/menu/ScreenMenu.kt b/src/main/kotlin/org/neoflock/neocomputers/gui/menu/ScreenMenu.kt index c90bb1a..5eeb5fb 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/gui/menu/ScreenMenu.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/gui/menu/ScreenMenu.kt @@ -6,8 +6,9 @@ import net.minecraft.world.entity.player.Player import net.minecraft.world.inventory.AbstractContainerMenu import net.minecraft.world.inventory.MenuType import net.minecraft.world.item.ItemStack +import org.neoflock.neocomputers.utils.GenericContainerMenu -class ScreenMenu(i: Int, inv: Inventory) : AbstractContainerMenu(Menus.SCREEN_MENU.get(), i) { +class ScreenMenu(i: Int, inv: Inventory) : GenericContainerMenu(Menus.SCREEN_MENU.get(), i, null) { override fun stillValid(player: Player) = true // TODO: implement this properly override fun quickMoveStack(player: Player, i: Int): ItemStack = ItemStack.EMPTY // there's no container here anyways diff --git a/src/main/kotlin/org/neoflock/neocomputers/gui/render/BufferRenderer.kt b/src/main/kotlin/org/neoflock/neocomputers/gui/render/BufferRenderer.kt index 4e5411c..d4aee33 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/gui/render/BufferRenderer.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/gui/render/BufferRenderer.kt @@ -11,15 +11,10 @@ import java.io.File import kotlin.experimental.and import kotlin.experimental.xor -class BufferRenderer(width: Int, height: Int, id: ResourceLocation, buffer: MutableList) { // TODO: NN buffer +class BufferRenderer(private var width: Int, private var height: Int, private var id: ResourceLocation, private var buffer: MutableList) { // TODO: NN buffer val CHARW = 8 val CHARH = 16 - private var width: Int = width; - private var height: Int = height; - private var id: ResourceLocation = id; - private var buffer: MutableList = buffer; - private var texwidth: Int = width*CHARW; private var texheight: Int = height*CHARH; private var image: NativeImage = NativeImage(texwidth, texheight, true); // idk what the boolean is @@ -64,7 +59,7 @@ class BufferRenderer(width: Int, height: Int, id: ResourceLocation, buffer: Muta buffer[y*width+x] = c } - fun register() { // i would love to do this in the constructor but kotlin quirks blahblah + fun register() { Minecraft.getInstance().textureManager.register(this.id, tex) // also idk how to unregister this } diff --git a/src/main/kotlin/org/neoflock/neocomputers/gui/render/ScreenRenderer.kt b/src/main/kotlin/org/neoflock/neocomputers/gui/render/ScreenRenderer.kt index 74de8ed..baffc79 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/gui/render/ScreenRenderer.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/gui/render/ScreenRenderer.kt @@ -1,96 +1,96 @@ -// package org.neoflock.neocomputers.gui.render; +package org.neoflock.neocomputers.gui.render; -// import com.mojang.blaze3d.platform.NativeImage -// import com.mojang.blaze3d.systems.RenderSystem -// import com.mojang.blaze3d.vertex.BufferBuilder -// import com.mojang.blaze3d.vertex.DefaultVertexFormat -// import com.mojang.blaze3d.vertex.Tesselator -// import com.mojang.blaze3d.vertex.VertexFormat -// import net.minecraft.client.Minecraft -// import net.minecraft.client.gui.GuiGraphics -// import net.minecraft.client.renderer.texture.DynamicTexture -// import net.minecraft.resources.Identifier -// import org.neoflock.neocomputers.NeoComputers +import com.mojang.blaze3d.platform.GlConst +import com.mojang.blaze3d.platform.NativeImage +import com.mojang.blaze3d.systems.RenderSystem +import com.mojang.blaze3d.vertex.BufferBuilder +import com.mojang.blaze3d.vertex.BufferUploader +import com.mojang.blaze3d.vertex.DefaultVertexFormat +import com.mojang.blaze3d.vertex.Tesselator +import com.mojang.blaze3d.vertex.VertexFormat +import net.minecraft.client.Minecraft +import net.minecraft.client.gui.GuiGraphics +import net.minecraft.client.renderer.GameRenderer +import net.minecraft.client.renderer.texture.DynamicTexture +import net.minecraft.resources.ResourceLocation +import org.neoflock.neocomputers.NeoComputers -// class ScreenRenderer { -// val BORDERS: Identifier = Identifier.fromNamespaceAndPath(NeoComputers.MODID, "textures/gui/borders.png") -// var bound: Identifier = Identifier.fromNamespaceAndPath(NeoComputers.MODID, "screen/unbound") +class ScreenRenderer { + val BORDERS: ResourceLocation = ResourceLocation.fromNamespaceAndPath(NeoComputers.MODID, "textures/gui/borders.png") + var bound: ResourceLocation = ResourceLocation.fromNamespaceAndPath(NeoComputers.MODID, "screen/unbound") -// val bordersize = 10 + val bordersize = 10 -// fun render(graphics: GuiGraphics, x: Int, y: Int, width: Int, height: Int) { -// // RenderSystem.setShader(GameR) -// // top left corner, uv (0, 0) to (6,6) -// // graphics.blit(BORDERS, x-bordersize, y-bordersize, 0, 0, bordersize.toFloat(), bordersize.toFloat(), 6F, 6F) -// graphics.blit(BORDERS, 6, 6, 0, 0, (x-bordersize).toFloat(), (y-bordersize).toFloat(), bordersize.toFloat(), bordersize.toFloat()) -// // top border, uv (7,0) to (8,6) -// graphics.blit(BORDERS, 6, 1, 7, 0, x.toFloat(), (y-bordersize).toFloat(), width.toFloat(), bordersize.toFloat()) -// // graphics.blit(BORDERS, x, y-bordersize, 7, 0, width.toFloat(), bordersize.toFloat(), 1F, 6F) -// // top right corner, uv (9,0) to (15, 6) -// // graphics.blit(BORDERS, x+width, y-bordersize, 9, 0, bordersize.toFloat(), bordersize.toFloat(), 6F, 6F) -// graphics.blit(BORDERS, 6, 6, 9, 0, (x+width).toFloat(), (y-bordersize).toFloat(), bordersize.toFloat(), bordersize.toFloat()) + fun render(graphics: GuiGraphics, x: Int, y: Int, width: Int, height: Int) { + RenderSystem.setShader { GameRenderer.getPositionTexShader() } + RenderSystem.setShaderTexture(0, BORDERS); + // borders + val bordersize = 8; // TODO: this should scale i think + // top left corner, uv (0, 0) to (6,6) + // graphics.blit + drawQuad(graphics, x-bordersize, y-bordersize, bordersize, bordersize, 0F, 0F, 6F, 6F); + // top border, uv (7,0) to (8,6) + drawQuad(graphics, x, y-bordersize, width, bordersize, 7F, 0F, 8F, 6F); // x+bordersize-bordersize + // top right corner, uv (9,0) to (15, 6) + drawQuad(graphics, x+width, y-bordersize, bordersize, bordersize, 9F, 0F, 15F, 6F); + + // left border, uv (0,7) to (6, 8) + drawQuad(graphics, x-bordersize, y, bordersize, height, 0F, 7F, 6F, 8F); + // middle, uv (7, 7) to (8, 8) + // drawQuad(graphics, x+bordersize, y+bordersize, width-bordersize, height-bordersize, 7, 7, 8, 8); + // right border uv (9, 7) to (15, 8) + drawQuad(graphics, x+width, y, bordersize, height, 9F, 7F, 15F, 8F); + + // bottom left corner, uv (0, 9) to (6, 15) + drawQuad(graphics, x-bordersize, y+height, bordersize, bordersize, 0F, 9F, 6F, 15F); + // bottom border, uv (7, 9) to (8, 15) + drawQuad(graphics, x, y+height, width, bordersize, 7F, 9F, 8F, 15F); + // bottom right corner, uv (9, 9) to (15, 15) + drawQuad(graphics, x+width, y+height, bordersize, bordersize, 9F, 9F, 15F, 15F); -// // left border, uv (0,7) to (6, 8) -// graphics.blit(BORDERS, 6, 1, 0, 7, (x-bordersize).toFloat(), (y).toFloat(), bordersize.toFloat(), height.toFloat()) -// // graphics.blit(BORDERS, x-bordersize, y, 0, 7, bordersize.toFloat(), height.toFloat(), 6F, 1F) -// // right border uv (9, 7) to (15, 8) -// graphics.blit(BORDERS, 6, 1, 9, 7, (x+width).toFloat(), (y).toFloat(), bordersize.toFloat(), height.toFloat()) -// // graphics.blit(BORDERS, x+width, y, 9, 7, bordersize.toFloat(), height.toFloat(), 6F, 1F) + RenderSystem.setShaderTexture(0, bound); + RenderSystem.texParameter(GlConst.GL_TEXTURE_2D, GlConst.GL_TEXTURE_MIN_FILTER, GlConst.GL_NEAREST); + RenderSystem.texParameter(GlConst.GL_TEXTURE_2D, GlConst.GL_TEXTURE_MAG_FILTER, GlConst.GL_NEAREST); + + drawQuad(graphics, x, y, width, height, 0F, 0F, 15F, 15F); -// // bottom left corner, uv (0, 9) to (6, 15) -// graphics.blit(BORDERS, 6, 6, 0, 9, (x-bordersize).toFloat(), (y+height).toFloat(), bordersize.toFloat(), bordersize.toFloat()) -// // graphics.blit(BORDERS, x-bordersize, y+height, 0, 9, bordersize.toFloat(), bordersize.toFloat(), 6F, 6F) -// // bottom border, uv (7, 9) to (8, 15) -// graphics.blit(BORDERS, 1, 6, 7, 9, (x).toFloat(), (y+height).toFloat(), width.toFloat(), bordersize.toFloat()) -// // graphics.blit(BORDERS, x, y+height, 7, 9, width.toFloat(), bordersize.toFloat(), 1F, 6F) -// // bottom right corner, uv (9, 9) to (15, 15) -// graphics.blit(BORDERS, 6, 6, 9, 9, (x+width).toFloat(), (y+height).toFloat(), bordersize.toFloat(), bordersize.toFloat()) -// // graphics.blit(BORDERS, x+width, y+height, 9, 9, bordersize.toFloat(), bordersize.toFloat(), 6F, 6F) + } -// // texture -// // TODO: min mag filter thing -// graphics.blit(bound, 15, 15, 0, 0, x.toFloat(), y.toFloat(), width.toFloat(), height.toFloat()) -// // graphics.blit(bound, x, y, 0, 0, width.toFloat(), height.toFloat(), 15F, 15F) + private fun drawQuad(graphics: GuiGraphics, x: Int, y: Int, width: Int, height: Int, u1: Float, v1: Float, u2: Float, v2: Float) { + var t: Tesselator = Tesselator.getInstance() + var builder: BufferBuilder = t.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX) -// } + builder.addVertex(x.toFloat(), (y+height).toFloat(), 1f).setUv(u1/15F, v2/15F) + builder.addVertex((x+width).toFloat(), (y+height).toFloat(), 1f).setUv(u2/15F, v2/15F) + builder.addVertex((x+width).toFloat(), y.toFloat(), 1f).setUv(u2/15F, v1/15F) + builder.addVertex(x.toFloat(), y.toFloat(), 1f).setUv(u1/15F,v1/15F) -// // fun drawQuad(graphics: GuiGraphics, x: Int, y: Int, width: Int, height: Int, u1: Int, u2: Int, v1: Int, v2: Int) { -// // var t: Tesselator = Tesselator.getInstance() -// // var builder: BufferBuilder = t.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX) -// // builder.setUv1(u1, v1) -// // builder.setUv2(u2, v2) + BufferUploader.drawWithShader(builder.build()!!) + } -// // builder.addVertex(x.toFloat(), (y+height).toFloat(), 1f) -// // builder.addVertex((x+width).toFloat(), (y+height).toFloat(), 1f) -// // builder.addVertex((x+width).toFloat(), y.toFloat(), 1f) -// // builder.addVertex(x.toFloat(), y.toFloat(), 1f) + fun bind(id: ResourceLocation) { + bound = id + } -// // builder.build() -// // } + fun unbind() { + bound = ResourceLocation.fromNamespaceAndPath(NeoComputers.MODID, "screen/unbound") + } -// fun bind(id: Identifier) { -// bound = id -// } + companion object Static { + val img: NativeImage = NativeImage(1, 1, false) + val tex: DynamicTexture = DynamicTexture(img) -// fun unbind() { -// bound = Identifier.fromNamespaceAndPath(NeoComputers.MODID, "screen/unbound") -// } + fun genUnboundTex() { + img.fillRect(0, 0, 1, 1, 0xFF000000.toInt()) + tex.upload() -// companion object Static { -// val img: NativeImage = NativeImage(1, 1, false) -// val tex: DynamicTexture = DynamicTexture({ "screen/unbound" }, img) + Minecraft.getInstance().textureManager.register(ResourceLocation.fromNamespaceAndPath(NeoComputers.MODID, "screen/unbound"), tex) + } -// fun genUnboundTex() { -// img.fillRect(0, 0, 1, 1, 0xFF000000.toInt()) -// tex.upload() - -// Minecraft.getInstance().textureManager.register(Identifier.fromNamespaceAndPath(NeoComputers.MODID, "screen/unbound"), tex) -// } - -// fun cleanUnboundTex() { -// img.close() -// tex.close() -// Minecraft.getInstance().textureManager.release(Identifier.fromNamespaceAndPath(NeoComputers.MODID, "screen/unbound")) -// } -// } -// } \ No newline at end of file + fun cleanUnboundTex() { + img.close() + tex.close() + Minecraft.getInstance().textureManager.release(ResourceLocation.fromNamespaceAndPath(NeoComputers.MODID, "screen/unbound")) + } + } +} \ No newline at end of file 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 fdf102c..45b6773 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/gui/screen/ScreenScreen.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/gui/screen/ScreenScreen.kt @@ -7,12 +7,36 @@ import com.mojang.blaze3d.vertex.VertexFormat import net.minecraft.client.gui.GuiGraphics import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen import net.minecraft.network.chat.Component +import net.minecraft.resources.ResourceLocation import net.minecraft.world.entity.player.Inventory +import org.neoflock.neocomputers.NeoComputers +import org.neoflock.neocomputers.gui.buffer.BufferRenderer import org.neoflock.neocomputers.gui.menu.ScreenMenu +import org.neoflock.neocomputers.gui.render.ScreenRenderer -class ScreenScreen(abstractContainerMenu: ScreenMenu, inventory: Inventory, component: Component) : AbstractContainerScreen(abstractContainerMenu, inventory, component) { +class ScreenScreen : AbstractContainerScreen{ + private var renderer: ScreenRenderer = ScreenRenderer(); + + private var bufferRenderer: BufferRenderer? = null; + constructor(abstractContainerMenu: ScreenMenu, inventory: Inventory, component: Component) : super(abstractContainerMenu, inventory, component) { + val buffer: ArrayList = arrayListOf(BufferRenderer.GPUChar('h'), BufferRenderer.GPUChar('a'), BufferRenderer.GPUChar('i')) + for (i in 0..<(400-3)) { + buffer.add(BufferRenderer.GPUChar(' ')) + } + bufferRenderer = BufferRenderer(20, 20, ResourceLocation.fromNamespaceAndPath(NeoComputers.MODID, "screen/test"), buffer) + bufferRenderer!!.register() + bufferRenderer!!.drawBuffer() + + renderer.bind(ResourceLocation.fromNamespaceAndPath(NeoComputers.MODID, "screen/test")) + NeoComputers.LOGGER.info("created") + } 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() { + bufferRenderer!!.clean() } } \ No newline at end of file diff --git a/src/main/kotlin/org/neoflock/neocomputers/utils/GenericContainer.kt b/src/main/kotlin/org/neoflock/neocomputers/utils/GenericContainer.kt index ef8319f..140d5bf 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/utils/GenericContainer.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/utils/GenericContainer.kt @@ -60,7 +60,7 @@ interface GenericContainer : Container { } } -abstract class GenericContainerMenu(menuType: MenuType<*>, id: Int, var container: Container): AbstractContainerMenu(menuType, id) { +abstract class GenericContainerMenu(menuType: MenuType<*>, id: Int, var container: Container?): AbstractContainerMenu(menuType, id) { fun addInventorySlots(inventory: Inventory, x: Int, y: Int) { // Based off the code in ChestMenu for (i in 0..2) { @@ -86,7 +86,7 @@ abstract class GenericContainerMenu(menuType: MenuType<*>, id: Int, var containe val stack = slot.item val copied = stack.copy() - val contSize = container.containerSize + val contSize = container!!.containerSize if(i < contSize) { if(!this.moveItemStackTo(stack, contSize, slots.size, true)) { @@ -106,7 +106,7 @@ abstract class GenericContainerMenu(menuType: MenuType<*>, id: Int, var containe } override fun stillValid(player: Player): Boolean { - return container.stillValid(player) + return container!!.stillValid(player) } } From 07c8dc914dce9fd6a71a3418fd994660f2d45ef4 Mon Sep 17 00:00:00 2001 From: mewhenthe Date: Sat, 18 Apr 2026 18:34:36 +0200 Subject: [PATCH 4/4] oopsie --- src/main/kotlin/org/neoflock/neocomputers/NeoComputers.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/kotlin/org/neoflock/neocomputers/NeoComputers.kt b/src/main/kotlin/org/neoflock/neocomputers/NeoComputers.kt index ab98ced..6866e65 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/NeoComputers.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/NeoComputers.kt @@ -44,7 +44,7 @@ object NeoComputers { Tabs.TABS.register() ClientLifecycleEvent.CLIENT_SETUP.register { - MenuRegistry.registerScreenFactory(Menus.SCREEN_MENU.get(), ::ScreenScreen) + Menus.registerScreens() } ClientLifecycleEvent.CLIENT_STARTED.register { FontProvider.load(ResourceLocation.fromNamespaceAndPath(MODID, "font/unscii.hex"))