screen progress
This commit is contained in:
@@ -64,11 +64,14 @@ class ScreenBlock() : NodeBlock() {
|
|||||||
player.sendSystemMessage(Component.literal("Not enough power."))
|
player.sendSystemMessage(Component.literal("Not enough power."))
|
||||||
return InteractionResult.SUCCESS
|
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 getDisplayName(): Component = Component.literal("SCREEEEEN!")
|
||||||
override fun createMenu(i: Int, inventory: Inventory, player: Player): AbstractContainerMenu {
|
override fun createMenu(i: Int, inventory: Inventory, player: Player): AbstractContainerMenu {
|
||||||
// return Menus.SCREEN_MENU.get().create(i, inventory);
|
// 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?) {
|
override fun saveExtraData(buf: FriendlyByteBuf?) {
|
||||||
|
|||||||
@@ -259,6 +259,9 @@ class CaseBlockEntity(blockPos: BlockPos, blockState: BlockState): NodeBlockEnti
|
|||||||
super.tickNode(level)
|
super.tickNode(level)
|
||||||
if(!level.isClientSide) {
|
if(!level.isClientSide) {
|
||||||
if (isRunning()) {
|
if (isRunning()) {
|
||||||
|
if(getMachineComponentsUsed() > getMachineComponentsTotal()) {
|
||||||
|
crash("too many components")
|
||||||
|
}
|
||||||
if (!node.consumeEnergy(1)) {
|
if (!node.consumeEnergy(1)) {
|
||||||
crash("out of energy")
|
crash("out of energy")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
package org.neoflock.neocomputers.entity;
|
package org.neoflock.neocomputers.entity;
|
||||||
|
|
||||||
import net.minecraft.core.BlockPos
|
import net.minecraft.core.BlockPos
|
||||||
|
import net.minecraft.network.FriendlyByteBuf
|
||||||
import net.minecraft.resources.ResourceLocation
|
import net.minecraft.resources.ResourceLocation
|
||||||
|
import net.minecraft.server.level.ServerPlayer
|
||||||
import net.minecraft.world.level.Level
|
import net.minecraft.world.level.Level
|
||||||
import net.minecraft.world.level.block.state.BlockState
|
import net.minecraft.world.level.block.state.BlockState
|
||||||
import org.neoflock.neocomputers.NeoComputers
|
import org.neoflock.neocomputers.NeoComputers
|
||||||
@@ -17,8 +19,17 @@ class ScreenEntity(blockPos: BlockPos, blockState: BlockState) :
|
|||||||
var bound = "screen/unbound"
|
var bound = "screen/unbound"
|
||||||
var render_on_block = false
|
var render_on_block = false
|
||||||
|
|
||||||
|
val scrwidth: Short = 160
|
||||||
|
val scrheight: Short = 50
|
||||||
|
|
||||||
private var cleanrenderer: () -> Unit = { }; // TODO: THIS SUCKS, FIND A BETTER WAY
|
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) {
|
override fun tickNode(level: Level) {
|
||||||
super.tickNode(level)
|
super.tickNode(level)
|
||||||
if (bound == "screen/unbound" && level.isClientSide) { // am i epstein or am i just retarded?
|
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) {
|
if (level!!.isClientSide) {
|
||||||
var buffer: MutableList<BufferRenderer.GPUChar> = mutableListOf()
|
var buffer: MutableList<BufferRenderer.GPUChar> = mutableListOf()
|
||||||
for(char in node.address.toString()) {
|
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(' '))
|
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()
|
renderer.drawBuffer()
|
||||||
cleanrenderer = { renderer.clean() }
|
cleanrenderer = { renderer.clean() }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import com.mojang.blaze3d.vertex.Tesselator
|
|||||||
import com.mojang.blaze3d.vertex.VertexFormat
|
import com.mojang.blaze3d.vertex.VertexFormat
|
||||||
import net.minecraft.client.gui.GuiGraphics
|
import net.minecraft.client.gui.GuiGraphics
|
||||||
import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen
|
import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen
|
||||||
|
import net.minecraft.network.FriendlyByteBuf
|
||||||
import net.minecraft.network.chat.Component
|
import net.minecraft.network.chat.Component
|
||||||
import net.minecraft.resources.ResourceLocation
|
import net.minecraft.resources.ResourceLocation
|
||||||
import net.minecraft.world.entity.player.Inventory
|
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.buffer.BufferRenderer
|
||||||
import org.neoflock.neocomputers.gui.menu.ScreenMenu
|
import org.neoflock.neocomputers.gui.menu.ScreenMenu
|
||||||
import org.neoflock.neocomputers.gui.render.ScreenRenderer
|
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();
|
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) {
|
constructor(abstractContainerMenu: ScreenMenu, inventory: Inventory, component: Component) : super(abstractContainerMenu, inventory, component) {
|
||||||
var ent: ScreenEntity = abstractContainerMenu.entity!!;
|
var ent: ScreenEntity = abstractContainerMenu.entity!!;
|
||||||
renderer.bind(ResourceLocation.fromNamespaceAndPath(NeoComputers.MODID, ent.bound))
|
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() {
|
// override fun onClose() {
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package org.neoflock.neocomputers.utils
|
package org.neoflock.neocomputers.utils
|
||||||
|
|
||||||
// based off the ImplementedContainer of https://docs.fabricmc.net/develop/blocks/block-containers
|
// 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.GuiGraphics
|
||||||
import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen
|
import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen
|
||||||
import net.minecraft.world.Container;
|
import net.minecraft.world.Container;
|
||||||
|
|||||||
Reference in New Issue
Block a user