a menu for combustion generator, but sprites dont work.

Don't quest the test sprites.
This commit is contained in:
2026-04-14 23:23:59 +02:00
parent ab9d1baa36
commit 21746422f6
10 changed files with 125 additions and 11 deletions

View File

@@ -0,0 +1,67 @@
package org.neoflock.neocomputers.gui.menu
import net.minecraft.world.Container
import net.minecraft.world.SimpleContainer
import net.minecraft.world.entity.player.Inventory
import net.minecraft.world.entity.player.Player
import net.minecraft.world.inventory.AbstractContainerMenu
import net.minecraft.world.inventory.Slot
import net.minecraft.world.item.ItemStack
class CombustionGeneratorMenu: AbstractContainerMenu {
var container: Container
// Client-side constructor, idk forge tells me to do this
constructor(id: Int, inventory: Inventory): this(id, inventory, SimpleContainer(1))
// Server-side constructor
constructor(id: Int, inventory: Inventory, container: Container): super(Menus.COMBUSTGEN_MENU.get(), id) {
this.container = container
container.startOpen(inventory.player)
this.addSlot(Slot(container, 0, 80, 35))
// Based off the code in ChestMenu
for (l in 0..2) {
for (m in 0..8) {
this.addSlot(Slot(inventory, m + l * 9 + 9, 8 + m * 18, 84 + l * 18))
}
}
for (l in 0..8) {
this.addSlot(Slot(inventory, l, 8 + l * 18, 84 + 3 * 18 + 4))
}
}
// taken from https://docs.fabricmc.net/develop/blocks/container-menus
override fun quickMoveStack(player: Player, i: Int): ItemStack? {
val slot = slots[i]
if(!slot.hasItem()) return ItemStack.EMPTY
val stack = slot.item
val copied = stack.copy()
val contSize = container.containerSize
if(i < contSize) {
if(!this.moveItemStackTo(stack, contSize, slots.size, true)) {
return ItemStack.EMPTY
}
} else if(!this.moveItemStackTo(stack, 0, contSize, false)) {
return ItemStack.EMPTY
}
if(stack.isEmpty) {
slot.setByPlayer(ItemStack.EMPTY)
} else {
slot.setChanged()
}
return copied
}
override fun stillValid(player: Player): Boolean {
return container.stillValid(player)
}
}

View File

@@ -3,13 +3,22 @@ package org.neoflock.neocomputers.gui.menu;
import dev.architectury.registry.menu.MenuRegistry
import dev.architectury.registry.registries.DeferredRegister
import dev.architectury.registry.registries.RegistrySupplier
import net.minecraft.client.gui.screens.MenuScreens
import net.minecraft.core.registries.Registries
import net.minecraft.world.flag.FeatureFlagSet
import net.minecraft.world.flag.FeatureFlags
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
object Menus {
val MENUS: DeferredRegister<MenuType<*>> = DeferredRegister.create(NeoComputers.MODID, Registries.MENU)
val SCREEN_MENU: RegistrySupplier<MenuType<ScreenMenu>> = MENUS.register("screen_menu") { MenuRegistry.of(::ScreenMenu)} // "deprecated" my ass
val SCREEN_MENU: RegistrySupplier<MenuType<ScreenMenu>> = MENUS.register("screen_menu") { MenuType(::ScreenMenu, FeatureFlagSet.of()) }
val COMBUSTGEN_MENU: RegistrySupplier<MenuType<CombustionGeneratorMenu>> = MENUS.register("combustgen_menu") { MenuType(::CombustionGeneratorMenu, FeatureFlagSet.of() ) }
fun registerScreens() {
MenuScreens.register(Menus.COMBUSTGEN_MENU.get(), {m: CombustionGeneratorMenu, u, comp -> CombustionGeneratorScreen(m, u, comp)})
}
}

View File

@@ -0,0 +1,29 @@
package org.neoflock.neocomputers.gui.screen
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.menu.CombustionGeneratorMenu
class CombustionGeneratorScreen(abstractContainerMenu: CombustionGeneratorMenu, inventory: Inventory, component: Component) : AbstractContainerScreen<CombustionGeneratorMenu>(abstractContainerMenu, inventory, component) {
override fun init() {
super.init()
this.titleLabelX = (this.imageWidth - this.font.width(this.title)) / 2
}
override fun renderBg(guiGraphics: GuiGraphics, f: Float, i: Int, j: Int) {
val cx = (width - imageWidth) / 2
val cy = (height - imageHeight) / 2
val containerTexture: ResourceLocation = ResourceLocation.fromNamespaceAndPath(NeoComputers.MODID, "textures/gui/linux.png")
guiGraphics.blitSprite(containerTexture, cx, cy, imageWidth, imageHeight)
}
override fun render(graphics: GuiGraphics, mouseX: Int, mouseY: Int, something: Float) {
super.render(graphics, mouseX, mouseY, something)
super.renderTooltip(graphics, mouseX, mouseY)
}
}