diff options
| author | Linnea Gräf <nea@nea.moe> | 2025-11-17 19:55:02 +0100 |
|---|---|---|
| committer | Linnea Gräf <nea@nea.moe> | 2025-11-17 19:55:02 +0100 |
| commit | c93a04a001b0f66b2724d46b04b6d1ed49a08d07 (patch) | |
| tree | 5869ca70acc482ef0362f27785c3d3f1cbb9ffae /src/main/kotlin/features/inventory/storageoverlay | |
| parent | af9893b59407c69d31ebd2ed513f0396ab4d2dc9 (diff) | |
| download | Firmament-c93a04a001b0f66b2724d46b04b6d1ed49a08d07.tar.gz Firmament-c93a04a001b0f66b2724d46b04b6d1ed49a08d07.tar.bz2 Firmament-c93a04a001b0f66b2724d46b04b6d1ed49a08d07.zip | |
refactor: port to mojmaps
Diffstat (limited to 'src/main/kotlin/features/inventory/storageoverlay')
6 files changed, 160 insertions, 160 deletions
diff --git a/src/main/kotlin/features/inventory/storageoverlay/StorageBackingHandle.kt b/src/main/kotlin/features/inventory/storageoverlay/StorageBackingHandle.kt index d7346c2..964f415 100644 --- a/src/main/kotlin/features/inventory/storageoverlay/StorageBackingHandle.kt +++ b/src/main/kotlin/features/inventory/storageoverlay/StorageBackingHandle.kt @@ -4,9 +4,9 @@ package moe.nea.firmament.features.inventory.storageoverlay import kotlin.contracts.ExperimentalContracts import kotlin.contracts.contract -import net.minecraft.client.gui.screen.Screen -import net.minecraft.client.gui.screen.ingame.GenericContainerScreen -import net.minecraft.screen.GenericContainerScreenHandler +import net.minecraft.client.gui.screens.Screen +import net.minecraft.client.gui.screens.inventory.ContainerScreen +import net.minecraft.world.inventory.ChestMenu import moe.nea.firmament.util.ifMatches import moe.nea.firmament.util.unformattedString @@ -16,19 +16,19 @@ import moe.nea.firmament.util.unformattedString sealed interface StorageBackingHandle { sealed interface HasBackingScreen { - val handler: GenericContainerScreenHandler + val handler: ChestMenu } /** * The main storage overview is open. Clicking on a slot will open that page. This page is accessible via `/storage` */ - data class Overview(override val handler: GenericContainerScreenHandler) : StorageBackingHandle, HasBackingScreen + data class Overview(override val handler: ChestMenu) : StorageBackingHandle, HasBackingScreen /** * An individual storage page is open. This may be a backpack or an enderchest page. This page is accessible via * the [Overview] or via `/ec <index + 1>` for enderchest pages. */ - data class Page(override val handler: GenericContainerScreenHandler, val storagePageSlot: StoragePageSlot) : + data class Page(override val handler: ChestMenu, val storagePageSlot: StoragePageSlot) : StorageBackingHandle, HasBackingScreen companion object { @@ -46,13 +46,13 @@ sealed interface StorageBackingHandle { returnsNotNull() implies (screen != null) } if (screen == null) return null - if (screen !is GenericContainerScreen) return null + if (screen !is ContainerScreen) return null val title = screen.title.unformattedString - if (title == "Storage") return Overview(screen.screenHandler) + if (title == "Storage") return Overview(screen.menu) return title.ifMatches(enderChestName) { - Page(screen.screenHandler, StoragePageSlot.ofEnderChestPage(it.groupValues[1].toInt())) + Page(screen.menu, StoragePageSlot.ofEnderChestPage(it.groupValues[1].toInt())) } ?: title.ifMatches(backPackName) { - Page(screen.screenHandler, StoragePageSlot.ofBackPackPage(it.groupValues[1].toInt())) + Page(screen.menu, StoragePageSlot.ofBackPackPage(it.groupValues[1].toInt())) } } } diff --git a/src/main/kotlin/features/inventory/storageoverlay/StorageOverlay.kt b/src/main/kotlin/features/inventory/storageoverlay/StorageOverlay.kt index 7dbb02a..7f96637 100644 --- a/src/main/kotlin/features/inventory/storageoverlay/StorageOverlay.kt +++ b/src/main/kotlin/features/inventory/storageoverlay/StorageOverlay.kt @@ -3,12 +3,12 @@ package moe.nea.firmament.features.inventory.storageoverlay import io.github.notenoughupdates.moulconfig.ChromaColour import java.util.SortedMap import kotlinx.serialization.serializer -import net.minecraft.client.gui.screen.ingame.GenericContainerScreen -import net.minecraft.client.gui.screen.ingame.HandledScreen -import net.minecraft.entity.player.PlayerInventory -import net.minecraft.item.Items -import net.minecraft.network.packet.c2s.play.CloseHandledScreenC2SPacket -import net.minecraft.text.Text +import net.minecraft.client.gui.screens.inventory.ContainerScreen +import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen +import net.minecraft.world.entity.player.Inventory +import net.minecraft.world.item.Items +import net.minecraft.network.protocol.game.ServerboundContainerClosePacket +import net.minecraft.network.chat.Component import moe.nea.firmament.annotations.Subscribe import moe.nea.firmament.events.ChestInventoryUpdateEvent import moe.nea.firmament.events.ScreenChangeEvent @@ -71,7 +71,7 @@ object StorageOverlay { (MC.screen as? StorageOverlayScreen) ?: (MC.handledScreen?.customGui as? StorageOverlayCustom)?.overview ?: return - val stack = event.slot.stack ?: return + val stack = event.slot.item ?: return val search = storageOverlayScreen.searchText.get().takeIf { it.isNotBlank() } ?: return if (storageOverlayScreen.matchesSearch(stack, search)) { event.context.fill( @@ -100,7 +100,7 @@ object StorageOverlay { @Subscribe fun onClick(event: SlotClickEvent) { - if (lastStorageOverlay != null && event.slot.inventory !is PlayerInventory && event.slot.index < 9 + if (lastStorageOverlay != null && event.slot.container !is Inventory && event.slot.containerSlot < 9 && event.stack.item != Items.BLACK_STAINED_GLASS_PANE ) { skipNextStorageOverlayBackflip = true @@ -111,18 +111,18 @@ object StorageOverlay { fun onScreenChange(it: ScreenChangeEvent) { if (it.old == null && it.new == null) return val storageOverlayScreen = it.old as? StorageOverlayScreen - ?: ((it.old as? HandledScreen<*>)?.customGui as? StorageOverlayCustom)?.overview + ?: ((it.old as? AbstractContainerScreen<*>)?.customGui as? StorageOverlayCustom)?.overview var storageOverviewScreen = it.old as? StorageOverviewScreen - val screen = it.new as? GenericContainerScreen + val screen = it.new as? ContainerScreen rememberContent(currentHandler) val oldHandler = currentHandler currentHandler = StorageBackingHandle.fromScreen(screen) if (storageOverviewScreen != null && oldHandler is StorageBackingHandle.HasBackingScreen) { val player = MC.player assert(player != null) - player?.networkHandler?.sendPacket(CloseHandledScreenC2SPacket(oldHandler.handler.syncId)) - if (player?.currentScreenHandler === oldHandler.handler) { - player.currentScreenHandler = player.playerScreenHandler + player?.connection?.send(ServerboundContainerClosePacket(oldHandler.handler.containerId)) + if (player?.containerMenu === oldHandler.handler) { + player.containerMenu = player.inventoryMenu } } storageOverviewScreen = storageOverviewScreen ?: lastStorageOverlay @@ -164,7 +164,7 @@ object StorageOverlay { handler: StorageBackingHandle.Overview, data: SortedMap<StoragePageSlot, StorageData.StorageInventory> ) { - for ((index, stack) in handler.handler.stacks.withIndex()) { + for ((index, stack) in handler.handler.items.withIndex()) { // TODO: replace with slot iteration // Ignore unloaded item stacks if (stack.isEmpty) continue val slot = StoragePageSlot.fromOverviewSlotIndex(index) ?: continue @@ -186,7 +186,7 @@ object StorageOverlay { data: SortedMap<StoragePageSlot, StorageData.StorageInventory> ) { val newStacks = - VirtualInventory(handler.handler.stacks.take(handler.handler.rows * 9).drop(9).map { it.copy() }) + VirtualInventory(handler.handler.items.take(handler.handler.rowCount * 9).drop(9).map { it.copy() }) data.compute(handler.storagePageSlot) { slot, existingInventory -> (existingInventory ?: StorageData.StorageInventory( slot.defaultName(), diff --git a/src/main/kotlin/features/inventory/storageoverlay/StorageOverlayCustom.kt b/src/main/kotlin/features/inventory/storageoverlay/StorageOverlayCustom.kt index a4199c9..f291dba 100644 --- a/src/main/kotlin/features/inventory/storageoverlay/StorageOverlayCustom.kt +++ b/src/main/kotlin/features/inventory/storageoverlay/StorageOverlayCustom.kt @@ -2,22 +2,22 @@ package moe.nea.firmament.features.inventory.storageoverlay import me.shedaniel.math.Point import me.shedaniel.math.Rectangle -import net.minecraft.client.MinecraftClient -import net.minecraft.client.gui.Click -import net.minecraft.client.gui.DrawContext -import net.minecraft.client.gui.screen.ingame.GenericContainerScreen -import net.minecraft.client.input.CharInput -import net.minecraft.client.input.KeyInput -import net.minecraft.entity.player.PlayerInventory -import net.minecraft.screen.slot.Slot +import net.minecraft.client.Minecraft +import net.minecraft.client.input.MouseButtonEvent +import net.minecraft.client.gui.GuiGraphics +import net.minecraft.client.gui.screens.inventory.ContainerScreen +import net.minecraft.client.input.CharacterEvent +import net.minecraft.client.input.KeyEvent +import net.minecraft.world.entity.player.Inventory +import net.minecraft.world.inventory.Slot import moe.nea.firmament.mixins.accessor.AccessorHandledScreen import moe.nea.firmament.util.customgui.CustomGui import moe.nea.firmament.util.focusedItemStack class StorageOverlayCustom( - val handler: StorageBackingHandle, - val screen: GenericContainerScreen, - val overview: StorageOverlayScreen, + val handler: StorageBackingHandle, + val screen: ContainerScreen, + val overview: StorageOverlayScreen, ) : CustomGui() { override fun onVoluntaryExit(): Boolean { overview.isExiting = true @@ -29,18 +29,18 @@ class StorageOverlayCustom( return overview.getBounds() } - override fun afterSlotRender(context: DrawContext, slot: Slot) { - if (slot.inventory !is PlayerInventory) + override fun afterSlotRender(context: GuiGraphics, slot: Slot) { + if (slot.container !is Inventory) context.disableScissor() } - override fun beforeSlotRender(context: DrawContext, slot: Slot) { - if (slot.inventory !is PlayerInventory) + override fun beforeSlotRender(context: GuiGraphics, slot: Slot) { + if (slot.container !is Inventory) overview.createScissors(context) } override fun onInit() { - overview.init(MinecraftClient.getInstance(), screen.width, screen.height) + overview.init(Minecraft.getInstance(), screen.width, screen.height) overview.init() screen as AccessorHandledScreen screen.x_Firmament = overview.measurements.x @@ -52,7 +52,7 @@ class StorageOverlayCustom( override fun isPointOverSlot(slot: Slot, xOffset: Int, yOffset: Int, pointX: Double, pointY: Double): Boolean { if (!super.isPointOverSlot(slot, xOffset, yOffset, pointX, pointY)) return false - if (slot.inventory !is PlayerInventory) { + if (slot.container !is Inventory) { if (!overview.getScrollPanelInner().contains(pointX, pointY)) return false } @@ -63,31 +63,31 @@ class StorageOverlayCustom( return false } - override fun mouseReleased(click: Click): Boolean { + override fun mouseReleased(click: MouseButtonEvent): Boolean { return overview.mouseReleased(click) } - override fun mouseDragged(click: Click, offsetX: Double, offsetY: Double): Boolean { + override fun mouseDragged(click: MouseButtonEvent, offsetX: Double, offsetY: Double): Boolean { return overview.mouseDragged(click, offsetX, offsetY) } - override fun keyReleased(input: KeyInput): Boolean { + override fun keyReleased(input: KeyEvent): Boolean { return overview.keyReleased(input) } - override fun keyPressed(input: KeyInput): Boolean { + override fun keyPressed(input: KeyEvent): Boolean { return overview.keyPressed(input) } - override fun charTyped(input: CharInput): Boolean { + override fun charTyped(input: CharacterEvent): Boolean { return overview.charTyped(input) } - override fun mouseClick(click: Click, doubled: Boolean): Boolean { + override fun mouseClick(click: MouseButtonEvent, doubled: Boolean): Boolean { return overview.mouseClicked(click, doubled, (handler as? StorageBackingHandle.Page)?.storagePageSlot) } - override fun render(drawContext: DrawContext, delta: Float, mouseX: Int, mouseY: Int) { + override fun render(drawContext: GuiGraphics, delta: Float, mouseX: Int, mouseY: Int) { overview.drawBackgrounds(drawContext) overview.drawPages( drawContext, @@ -95,7 +95,7 @@ class StorageOverlayCustom( mouseY, delta, (handler as? StorageBackingHandle.Page)?.storagePageSlot, - screen.screenHandler.slots.take(screen.screenHandler.rows * 9).drop(9), + screen.menu.slots.take(screen.menu.rowCount * 9).drop(9), Point((screen as AccessorHandledScreen).x_Firmament, screen.y_Firmament) ) overview.drawScrollBar(drawContext) @@ -103,7 +103,7 @@ class StorageOverlayCustom( } override fun moveSlot(slot: Slot) { - val index = slot.index + val index = slot.containerSlot if (index in 0..<36) { val (x, y) = overview.getPlayerInventorySlotPosition(index) slot.x = x - (screen as AccessorHandledScreen).x_Firmament diff --git a/src/main/kotlin/features/inventory/storageoverlay/StorageOverlayScreen.kt b/src/main/kotlin/features/inventory/storageoverlay/StorageOverlayScreen.kt index d2fff9c..3e0bb4b 100644 --- a/src/main/kotlin/features/inventory/storageoverlay/StorageOverlayScreen.kt +++ b/src/main/kotlin/features/inventory/storageoverlay/StorageOverlayScreen.kt @@ -13,17 +13,17 @@ import io.github.notenoughupdates.moulconfig.observer.Property import java.util.TreeSet import me.shedaniel.math.Point import me.shedaniel.math.Rectangle -import net.minecraft.client.gui.Click -import net.minecraft.client.gui.DrawContext -import net.minecraft.client.gui.screen.Screen -import net.minecraft.client.gui.screen.ingame.HandledScreen -import net.minecraft.client.input.CharInput -import net.minecraft.client.input.KeyInput -import net.minecraft.item.ItemStack -import net.minecraft.screen.slot.Slot -import net.minecraft.text.Text -import net.minecraft.util.Formatting -import net.minecraft.util.Identifier +import net.minecraft.client.input.MouseButtonEvent +import net.minecraft.client.gui.GuiGraphics +import net.minecraft.client.gui.screens.Screen +import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen +import net.minecraft.client.input.CharacterEvent +import net.minecraft.client.input.KeyEvent +import net.minecraft.world.item.ItemStack +import net.minecraft.world.inventory.Slot +import net.minecraft.network.chat.Component +import net.minecraft.ChatFormatting +import net.minecraft.resources.ResourceLocation import moe.nea.firmament.events.SlotRenderEvents import moe.nea.firmament.gui.EmptyComponent import moe.nea.firmament.gui.FirmButtonComponent @@ -43,7 +43,7 @@ import moe.nea.firmament.util.render.enableScissorWithoutTranslation import moe.nea.firmament.util.tr import moe.nea.firmament.util.unformattedString -class StorageOverlayScreen : Screen(Text.literal("")) { +class StorageOverlayScreen : Screen(Component.literal("")) { companion object { val PLAYER_WIDTH = 184 @@ -122,20 +122,20 @@ class StorageOverlayScreen : Screen(Text.literal("")) { fun getMaxScroll() = lastRenderedInnerHeight.toFloat() - getScrollPanelInner().height - val playerInventorySprite = Identifier.of("firmament:storageoverlay/player_inventory") - val upperBackgroundSprite = Identifier.of("firmament:storageoverlay/upper_background") - val slotRowSprite = Identifier.of("firmament:storageoverlay/storage_row") - val scrollbarBackground = Identifier.of("firmament:storageoverlay/scroll_bar_background") - val scrollbarKnob = Identifier.of("firmament:storageoverlay/scroll_bar_knob") - val controllerBackground = Identifier.of("firmament:storageoverlay/storage_controls") + val playerInventorySprite = ResourceLocation.parse("firmament:storageoverlay/player_inventory") + val upperBackgroundSprite = ResourceLocation.parse("firmament:storageoverlay/upper_background") + val slotRowSprite = ResourceLocation.parse("firmament:storageoverlay/storage_row") + val scrollbarBackground = ResourceLocation.parse("firmament:storageoverlay/scroll_bar_background") + val scrollbarKnob = ResourceLocation.parse("firmament:storageoverlay/scroll_bar_knob") + val controllerBackground = ResourceLocation.parse("firmament:storageoverlay/storage_controls") - override fun close() { + override fun onClose() { isExiting = true resetScroll() - super.close() + super.onClose() } - override fun render(context: DrawContext, mouseX: Int, mouseY: Int, delta: Float) { + override fun render(context: GuiGraphics, mouseX: Int, mouseY: Int, delta: Float) { super.render(context, mouseX, mouseY, delta) drawBackgrounds(context) drawPages(context, mouseX, mouseY, delta, null, null, Point()) @@ -148,7 +148,7 @@ class StorageOverlayScreen : Screen(Text.literal("")) { return scroll / getMaxScroll() } - fun drawScrollBar(context: DrawContext) { + fun drawScrollBar(context: GuiGraphics) { val sbRect = getScrollBarRect() context.drawGuiTexture( scrollbarBackground, @@ -164,8 +164,8 @@ class StorageOverlayScreen : Screen(Text.literal("")) { fun editPages() { isExiting = true - MC.instance.send { - val hs = MC.screen as? HandledScreen<*> + MC.instance.schedule { + val hs = MC.screen as? AbstractContainerScreen<*> if (StorageBackingHandle.fromScreen(hs) is StorageBackingHandle.Overview) { hs.customGui = null hs.init(MC.instance, width, height) @@ -204,7 +204,7 @@ class StorageOverlayScreen : Screen(Text.literal("")) { guiContext.adopt(controlComponent) } - fun drawControls(context: DrawContext, mouseX: Int, mouseY: Int) { + fun drawControls(context: GuiGraphics, mouseX: Int, mouseY: Int) { context.drawGuiTexture( controllerBackground, measurements.controlX, @@ -219,7 +219,7 @@ class StorageOverlayScreen : Screen(Text.literal("")) { ) } - fun drawBackgrounds(context: DrawContext) { + fun drawBackgrounds(context: GuiGraphics) { context.drawGuiTexture( upperBackgroundSprite, measurements.x, @@ -246,12 +246,12 @@ class StorageOverlayScreen : Screen(Text.literal("")) { ) } - fun drawPlayerInventory(context: DrawContext, mouseX: Int, mouseY: Int, delta: Float) { - val items = MC.player?.inventory?.mainStacks ?: return + fun drawPlayerInventory(context: GuiGraphics, mouseX: Int, mouseY: Int, delta: Float) { + val items = MC.player?.inventory?.nonEquipmentItems ?: return items.withIndex().forEach { (index, item) -> val (x, y) = getPlayerInventorySlotPosition(index) - context.drawItem(item, x, y, 0) - context.drawStackOverlay(textRenderer, item, x, y) + context.renderItem(item, x, y, 0) + context.renderItemDecorations(font, item, x, y) } } @@ -273,7 +273,7 @@ class StorageOverlayScreen : Screen(Text.literal("")) { ) } - fun createScissors(context: DrawContext) { + fun createScissors(context: GuiGraphics) { val rect = getScrollPanelInner() context.enableScissorWithoutTranslation( rect.minX.toFloat(), rect.minY.toFloat(), @@ -282,10 +282,10 @@ class StorageOverlayScreen : Screen(Text.literal("")) { } fun drawPages( - context: DrawContext, mouseX: Int, mouseY: Int, delta: Float, - excluding: StoragePageSlot?, - slots: List<Slot>?, - slotOffset: Point + context: GuiGraphics, mouseX: Int, mouseY: Int, delta: Float, + excluding: StoragePageSlot?, + slots: List<Slot>?, + slotOffset: Point ) { createScissors(context) val data = StorageOverlay.Data.data ?: StorageData() @@ -310,11 +310,11 @@ class StorageOverlayScreen : Screen(Text.literal("")) { get() = guiContext.focusedElement == knobStub set(value) = knobStub.setFocus(value) - override fun mouseClicked(click: Click, doubled: Boolean): Boolean { + override fun mouseClicked(click: MouseButtonEvent, doubled: Boolean): Boolean { return mouseClicked(click, doubled, null) } - override fun mouseReleased(click: Click): Boolean { + override fun mouseReleased(click: MouseButtonEvent): Boolean { if (knobGrabbed) { knobGrabbed = false return true @@ -330,7 +330,7 @@ class StorageOverlayScreen : Screen(Text.literal("")) { return super.mouseReleased(click) } - override fun mouseDragged(click: Click, offsetX: Double, offsetY: Double): Boolean { + override fun mouseDragged(click: MouseButtonEvent, offsetX: Double, offsetY: Double): Boolean { if (knobGrabbed) { val sbRect = getScrollBarRect() val percentage = (click.x - sbRect.getY()) / sbRect.getHeight() @@ -341,7 +341,7 @@ class StorageOverlayScreen : Screen(Text.literal("")) { return super.mouseDragged(click, offsetX, offsetY) } - fun mouseClicked(click: Click, doubled: Boolean, activePage: StoragePageSlot?): Boolean { + fun mouseClicked(click: MouseButtonEvent, doubled: Boolean, activePage: StoragePageSlot?): Boolean { guiContext.setFocusedElement(null) // Blur all elements. They will be refocused by clickMCComponentInPlace if in doubt, and we don't have any double click components. val mouseX = click.x val mouseY = click.y @@ -374,12 +374,12 @@ class StorageOverlayScreen : Screen(Text.literal("")) { return false } - override fun charTyped(input: CharInput): Boolean { + override fun charTyped(input: CharacterEvent): Boolean { if (typeMCComponentInPlace( controlComponent, measurements.controlX, measurements.controlY, CONTROL_WIDTH, CONTROL_HEIGHT, - KeyboardEvent.CharTyped(input.asString().first()) // TODO: i dont like this .first() + KeyboardEvent.CharTyped(input.codepointAsString().first()) // TODO: i dont like this .first() ) ) { return true @@ -387,12 +387,12 @@ class StorageOverlayScreen : Screen(Text.literal("")) { return super.charTyped(input) } - override fun keyReleased(input: KeyInput): Boolean { + override fun keyReleased(input: KeyEvent): Boolean { if (typeMCComponentInPlace( controlComponent, measurements.controlX, measurements.controlY, CONTROL_WIDTH, CONTROL_HEIGHT, - KeyboardEvent.KeyPressed(input.keycode, input.scancode, false) + KeyboardEvent.KeyPressed(input.input(), input.scancode, false) ) ) { return true @@ -404,12 +404,12 @@ class StorageOverlayScreen : Screen(Text.literal("")) { return this === MC.screen // Fixes this UI closing the handled screen on Escape press. } - override fun keyPressed(input: KeyInput): Boolean { + override fun keyPressed(input: KeyEvent): Boolean { if (typeMCComponentInPlace( controlComponent, measurements.controlX, measurements.controlY, CONTROL_WIDTH, CONTROL_HEIGHT, - KeyboardEvent.KeyPressed(input.keycode, input.scancode, true) + KeyboardEvent.KeyPressed(input.input(), input.scancode, true) ) ) { return true @@ -463,7 +463,7 @@ class StorageOverlayScreen : Screen(Text.literal("")) { val filter = getFilteredPages() for ((page, inventory) in data.storageInventories.entries) { if (page !in filter) continue - val currentHeight = inventory.inventory?.let { it.rows * SLOT_SIZE + 6 + textRenderer.fontHeight } + val currentHeight = inventory.inventory?.let { it.rows * SLOT_SIZE + 6 + font.lineHeight } ?: 18 maxHeight = maxOf(maxHeight, currentHeight) val rect = Rectangle( @@ -484,22 +484,22 @@ class StorageOverlayScreen : Screen(Text.literal("")) { } fun drawPage( - context: DrawContext, - x: Int, - y: Int, - page: StoragePageSlot, - inventory: StorageData.StorageInventory, - slots: List<Slot>?, - slotOffset: Point, - mouseX: Int, - mouseY: Int, + context: GuiGraphics, + x: Int, + y: Int, + page: StoragePageSlot, + inventory: StorageData.StorageInventory, + slots: List<Slot>?, + slotOffset: Point, + mouseX: Int, + mouseY: Int, ): Int { val inv = inventory.inventory if (inv == null) { context.drawGuiTexture(upperBackgroundSprite, x, y, PAGE_WIDTH, 18) - context.drawText( - textRenderer, - Text.literal("TODO: open this page"), + context.drawString( + font, + Component.literal("TODO: open this page"), x + 4, y + 4, -1, @@ -509,34 +509,34 @@ class StorageOverlayScreen : Screen(Text.literal("")) { } assertTrueOr(slots == null || slots.size == inv.stacks.size) { return 0 } val name = inventory.title - val pageHeight = inv.rows * SLOT_SIZE + 8 + textRenderer.fontHeight + val pageHeight = inv.rows * SLOT_SIZE + 8 + font.lineHeight if (slots != null && StorageOverlay.TConfig.outlineActiveStoragePage) - context.drawStrokedRectangle( + context.submitOutline( x, - y + 3 + textRenderer.fontHeight, + y + 3 + font.lineHeight, PAGE_WIDTH, inv.rows * SLOT_SIZE + 4, StorageOverlay.TConfig.outlineActiveStoragePageColour.getEffectiveColourRGB() ) - context.drawText( - textRenderer, Text.literal(name), x + 6, y + 3, + context.drawString( + font, Component.literal(name), x + 6, y + 3, if (slots == null) 0xFFFFFFFF.toInt() else 0xFFFFFF00.toInt(), true ) context.drawGuiTexture( slotRowSprite, x + 2, - y + 5 + textRenderer.fontHeight, + y + 5 + font.lineHeight, PAGE_SLOTS_WIDTH, inv.rows * SLOT_SIZE ) inv.stacks.forEachIndexed { index, stack -> val slotX = (index % 9) * SLOT_SIZE + x + 3 - val slotY = (index / 9) * SLOT_SIZE + y + 5 + textRenderer.fontHeight + 1 + val slotY = (index / 9) * SLOT_SIZE + y + 5 + font.lineHeight + 1 if (slots == null) { val fakeSlot = FakeSlot(stack, slotX, slotY) SlotRenderEvents.Before.publish(SlotRenderEvents.Before(context, fakeSlot)) - context.drawItem(stack, slotX, slotY) - context.drawStackOverlay(textRenderer, stack, slotX, slotY) + context.renderItem(stack, slotX, slotY) + context.renderItemDecorations(font, stack, slotX, slotY) SlotRenderEvents.After.publish(SlotRenderEvents.After(context, fakeSlot)) val rect = getScrollPanelInner() if (StorageOverlay.TConfig.showInactivePageTooltips && !stack.isEmpty && @@ -544,11 +544,11 @@ class StorageOverlayScreen : Screen(Text.literal("")) { mouseX <= slotX + 16 && mouseY <= slotY + 16 && mouseY >= rect.minY && mouseY <= rect.maxY) { try { - context.drawItemTooltip(textRenderer, stack, mouseX, mouseY) + context.setTooltipForNextFrame(font, stack, mouseX, mouseY) } catch (e: IllegalStateException) { - context.drawTooltip(textRenderer, listOf(Text.of(Formatting.RED.toString() + - "Error Getting Tooltip!"), Text.of(Formatting.YELLOW.toString() + - "Open page to fix" + Formatting.RESET)), mouseX, mouseY) + context.setComponentTooltipForNextFrame(font, listOf(Component.nullToEmpty(ChatFormatting.RED.toString() + + "Error Getting Tooltip!"), Component.nullToEmpty(ChatFormatting.YELLOW.toString() + + "Open page to fix" + ChatFormatting.RESET)), mouseX, mouseY) } } } else { diff --git a/src/main/kotlin/features/inventory/storageoverlay/StorageOverviewScreen.kt b/src/main/kotlin/features/inventory/storageoverlay/StorageOverviewScreen.kt index a55b5ac..3c40fc6 100644 --- a/src/main/kotlin/features/inventory/storageoverlay/StorageOverviewScreen.kt +++ b/src/main/kotlin/features/inventory/storageoverlay/StorageOverviewScreen.kt @@ -4,19 +4,19 @@ package moe.nea.firmament.features.inventory.storageoverlay import org.lwjgl.glfw.GLFW import kotlin.math.max -import net.minecraft.block.Blocks -import net.minecraft.client.gui.Click -import net.minecraft.client.gui.DrawContext -import net.minecraft.client.gui.screen.Screen -import net.minecraft.client.input.KeyInput -import net.minecraft.item.Item -import net.minecraft.item.Items -import net.minecraft.text.Text -import net.minecraft.util.DyeColor +import net.minecraft.world.level.block.Blocks +import net.minecraft.client.input.MouseButtonEvent +import net.minecraft.client.gui.GuiGraphics +import net.minecraft.client.gui.screens.Screen +import net.minecraft.client.input.KeyEvent +import net.minecraft.world.item.Item +import net.minecraft.world.item.Items +import net.minecraft.network.chat.Component +import net.minecraft.world.item.DyeColor import moe.nea.firmament.util.MC import moe.nea.firmament.util.toShedaniel -class StorageOverviewScreen() : Screen(Text.empty()) { +class StorageOverviewScreen() : Screen(Component.empty()) { companion object { val emptyStorageSlotItems = listOf<Item>( Blocks.RED_STAINED_GLASS_PANE.asItem(), @@ -37,19 +37,19 @@ class StorageOverviewScreen() : Screen(Text.empty()) { scroll = scroll.coerceAtMost(getMaxScroll()).coerceAtLeast(0) } - override fun close() { + override fun onClose() { if (!StorageOverlay.TConfig.retainScroll) scroll = 0 - super.close() + super.onClose() } - override fun render(context: DrawContext, mouseX: Int, mouseY: Int, delta: Float) { + override fun render(context: GuiGraphics, mouseX: Int, mouseY: Int, delta: Float) { super.render(context, mouseX, mouseY, delta) context.fill(0, 0, width, height, 0x90000000.toInt()) layoutedForEach { (key, value), offsetX, offsetY -> - context.matrices.pushMatrix() - context.matrices.translate(offsetX.toFloat(), offsetY.toFloat()) + context.pose().pushMatrix() + context.pose().translate(offsetX.toFloat(), offsetY.toFloat()) renderStoragePage(context, value, mouseX - offsetX, mouseY - offsetY) - context.matrices.popMatrix() + context.pose().popMatrix() } } @@ -74,12 +74,12 @@ class StorageOverviewScreen() : Screen(Text.empty()) { lastRenderedHeight = totalHeight + currentMaxHeight } - override fun mouseClicked(click: Click, doubled: Boolean): Boolean { + override fun mouseClicked(click: MouseButtonEvent, doubled: Boolean): Boolean { layoutedForEach { (k, p), x, y -> val rx = click.x - x val ry = click.y - y if (rx in (0.0..pageWidth.toDouble()) && ry in (0.0..getStorePageHeight(p).toDouble())) { - close() + onClose() StorageOverlay.lastStorageOverlay = this k.navigateTo() return true @@ -89,7 +89,7 @@ class StorageOverviewScreen() : Screen(Text.empty()) { } fun getStorePageHeight(page: StorageData.StorageInventory): Int { - return page.inventory?.rows?.let { it * 19 + MC.font.fontHeight + 2 } ?: 60 + return page.inventory?.rows?.let { it * 19 + MC.font.lineHeight + 2 } ?: 60 } override fun mouseScrolled( @@ -106,31 +106,31 @@ class StorageOverviewScreen() : Screen(Text.empty()) { private fun getMaxScroll() = lastRenderedHeight - height + 2 * StorageOverlay.TConfig.margin - private fun renderStoragePage(context: DrawContext, page: StorageData.StorageInventory, mouseX: Int, mouseY: Int) { - context.drawText(MC.font, page.title, 2, 2, -1, true) + private fun renderStoragePage(context: GuiGraphics, page: StorageData.StorageInventory, mouseX: Int, mouseY: Int) { + context.drawString(MC.font, page.title, 2, 2, -1, true) val inventory = page.inventory if (inventory == null) { // TODO: Missing texture context.fill(0, 0, pageWidth, 60, DyeColor.RED.toShedaniel().darker(4.0).color) - context.drawCenteredTextWithShadow(MC.font, Text.literal("Not loaded yet"), pageWidth / 2, 30, -1) + context.drawCenteredString(MC.font, Component.literal("Not loaded yet"), pageWidth / 2, 30, -1) return } for ((index, stack) in inventory.stacks.withIndex()) { val x = (index % 9) * 19 - val y = (index / 9) * 19 + MC.font.fontHeight + 2 + val y = (index / 9) * 19 + MC.font.lineHeight + 2 if (((mouseX - x) in 0 until 18) && ((mouseY - y) in 0 until 18)) { context.fill(x, y, x + 18, y + 18, 0x80808080.toInt()) } else { context.fill(x, y, x + 18, y + 18, 0x40808080.toInt()) } - context.drawItem(stack, x + 1, y + 1) - context.drawStackOverlay(MC.font, stack, x + 1, y + 1) + context.renderItem(stack, x + 1, y + 1) + context.renderItemDecorations(MC.font, stack, x + 1, y + 1) } } - override fun keyPressed(input: KeyInput): Boolean { - if (input.keycode == GLFW.GLFW_KEY_ESCAPE) + override fun keyPressed(input: KeyEvent): Boolean { + if (input.input() == GLFW.GLFW_KEY_ESCAPE) isClosing = true return super.keyPressed(input) } diff --git a/src/main/kotlin/features/inventory/storageoverlay/VirtualInventory.kt b/src/main/kotlin/features/inventory/storageoverlay/VirtualInventory.kt index fddc189..69d686f 100644 --- a/src/main/kotlin/features/inventory/storageoverlay/VirtualInventory.kt +++ b/src/main/kotlin/features/inventory/storageoverlay/VirtualInventory.kt @@ -13,12 +13,12 @@ import kotlinx.serialization.descriptors.SerialDescriptor import kotlinx.serialization.encoding.Decoder import kotlinx.serialization.encoding.Encoder import kotlin.jvm.optionals.getOrNull -import net.minecraft.item.ItemStack -import net.minecraft.nbt.NbtCompound +import net.minecraft.world.item.ItemStack +import net.minecraft.nbt.CompoundTag import net.minecraft.nbt.NbtIo -import net.minecraft.nbt.NbtList +import net.minecraft.nbt.ListTag import net.minecraft.nbt.NbtOps -import net.minecraft.nbt.NbtSizeTracker +import net.minecraft.nbt.NbtAccounter import moe.nea.firmament.Firmament import moe.nea.firmament.features.inventory.storageoverlay.VirtualInventory.Serializer.writeToByteArray import moe.nea.firmament.util.Base64Util @@ -44,21 +44,21 @@ data class VirtualInventory( object Serializer : KSerializer<VirtualInventory> { fun writeToByteArray(value: VirtualInventory): ByteArray { - val list = NbtList() + val list = ListTag() val ops = getOps() value.stacks.forEach { - if (it.isEmpty) list.add(NbtCompound()) + if (it.isEmpty) list.add(CompoundTag()) else list.add(ErrorUtil.catch("Could not serialize item") { ItemStack.CODEC.encode( it, ops, - NbtCompound() + CompoundTag() ).orThrow } - .or { NbtCompound() }) + .or { CompoundTag() }) } val baos = ByteArrayOutputStream() - NbtIo.writeCompressed(NbtCompound().also { it.put(INVENTORY, list) }, baos) + NbtIo.writeCompressed(CompoundTag().also { it.put(INVENTORY, list) }, baos) return baos.toByteArray() } @@ -68,11 +68,11 @@ data class VirtualInventory( override fun deserialize(decoder: Decoder): VirtualInventory { val s = decoder.decodeString() - val n = NbtIo.readCompressed(ByteArrayInputStream(Base64Util.decodeBytes(s)), NbtSizeTracker.of(100_000_000)) + val n = NbtIo.readCompressed(ByteArrayInputStream(Base64Util.decodeBytes(s)), NbtAccounter.create(100_000_000)) val items = n.getList(INVENTORY).getOrNull() val ops = getOps() return VirtualInventory(items?.map { - it as NbtCompound + it as CompoundTag if (it.isEmpty) ItemStack.EMPTY else ErrorUtil.catch("Could not deserialize item") { ItemStack.CODEC.parse(ops, it).orThrow |
