Merge branch 'main' of https://gitea.codersquack.nl/NeoFlock/NeoComputers
This commit is contained in:
@@ -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?) {
|
||||
|
||||
@@ -262,6 +262,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")
|
||||
}
|
||||
|
||||
@@ -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() }
|
||||
}
|
||||
|
||||
@@ -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) {}
|
||||
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() {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"parent": "neocomputers:block/case"
|
||||
}
|
||||
Reference in New Issue
Block a user