EnchantmentTransfer/src/main/kotlin/xyz/nuark/mcmod/enct/screen/EnchantmentTransferrerScreen.kt

134 lines
5.6 KiB
Kotlin

package xyz.nuark.mcmod.enct.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 xyz.nuark.mcmod.enct.Enchantmenttransfer
import xyz.nuark.mcmod.enct.block.entity.EnchantmentTransferrerBlockEntity
import xyz.nuark.mcmod.enct.menu.EnchantmentTransferrerMenu
class EnchantmentTransferrerScreen(
menu: EnchantmentTransferrerMenu,
playerInventory: Inventory,
title: Component
) : AbstractContainerScreen<EnchantmentTransferrerMenu>(menu, playerInventory, title) {
companion object {
val BACKGROUND_LOCATION: ResourceLocation = ResourceLocation.fromNamespaceAndPath(Enchantmenttransfer.ID, "textures/gui/enchantment_transferrer.png")
val PROGRESS_GAUGE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(Enchantmenttransfer.ID, "textures/gui/ets_gauge.png")
const val GAUGE_WIDTH = 117
const val GAUGE_HEIGHT = 7
}
override fun init() {
super.init()
imageWidth = 176
imageHeight = 154
}
override fun renderBg(guiGraphics: GuiGraphics, partialTick: Float, mouseX: Int, mouseY: Int) {
guiGraphics.blit(BACKGROUND_LOCATION, leftPos, topPos, 0, 0, imageWidth, imageHeight)
// Progress bar
if (menu.isProcessing()) {
val progress = menu.getProcessTime()
val total = menu.getTotalTime()
if (total > 0) {
val progressWidth = ((progress.toDouble() / total) * GAUGE_WIDTH).toInt()
guiGraphics.blit(PROGRESS_GAUGE, leftPos+33, topPos+5, 0f, 0f, progressWidth, GAUGE_HEIGHT, GAUGE_WIDTH, GAUGE_HEIGHT)
}
}
// Charge bar
val charge = menu.getCharge()
val maxCharge = EnchantmentTransferrerBlockEntity.MAX_CHARGE
if (charge > 0) {
val chargeWidth = ((charge.toDouble() / maxCharge) * GAUGE_WIDTH).toInt()
guiGraphics.blit(PROGRESS_GAUGE, leftPos+33, topPos+50, 0f, 0f, chargeWidth, GAUGE_HEIGHT, GAUGE_WIDTH, GAUGE_HEIGHT)
}
}
override fun renderLabels(guiGraphics: GuiGraphics, mouseX: Int, mouseY: Int) {
// No labels for me, thanks
}
override fun renderTooltip(guiGraphics: GuiGraphics, x: Int, y: Int) {
val xRange = (leftPos + 33)..(leftPos + 33 + GAUGE_WIDTH)
when (y) {
in (topPos + 5)..(topPos + 5 + GAUGE_HEIGHT) if x in xRange -> { // Over progress bar
val progress = menu.getProcessTime()
val total = menu.getTotalTime()
val processing = menu.isProcessing()
val status = if (total > 0 && processing) {
val perc = ((progress.toDouble() / total) * 100).toInt()
"$perc%"
} else if (total > 0) {
Component.translatable("container.enct.processing.waiting").withColor(0xFFFF00)
} else {
Component.translatable("container.enct.processing.idle").withColor(0x00FFFF)
}
guiGraphics.renderTooltip(
this.font,
Component.translatable("container.enct.processing", status),
x,
y
)
}
in (topPos + 50)..(topPos + 50 + GAUGE_HEIGHT) if x in xRange -> { // Over charge bar
val charge = menu.getCharge()
guiGraphics.renderTooltip(
this.font,
Component.translatable("container.enct.charge", charge.toString()),
x,
y
)
}
else -> {
val hoveredSlot = this.hoveredSlot
if (hoveredSlot != null && !hoveredSlot.hasItem()) { // Showing tooltips for empty slots
when (hoveredSlot.slotIndex) {
EnchantmentTransferrerBlockEntity.SLOT_MAIN -> guiGraphics.renderTooltip(
this.font,
Component.translatable("container.enct.info.main"),
x,
y
)
EnchantmentTransferrerBlockEntity.SLOT_TARGET -> guiGraphics.renderTooltip(
this.font,
Component.translatable("container.enct.info.target"),
x,
y
)
EnchantmentTransferrerBlockEntity.SLOT_BOOK -> guiGraphics.renderTooltip(
this.font,
Component.translatable("container.enct.info.book"),
x,
y
)
EnchantmentTransferrerBlockEntity.SLOT_FUEL -> guiGraphics.renderTooltip(
this.font,
Component.translatable("container.enct.info.fuel"),
x,
y
)
}
} else {
super.renderTooltip(guiGraphics, x, y)
}
}
}
}
override fun render(guiGraphics: GuiGraphics, mouseX: Int, mouseY: Int, partialTick: Float) {
renderBackground(guiGraphics, mouseX, mouseY, partialTick)
super.render(guiGraphics, mouseX, mouseY, partialTick)
renderTooltip(guiGraphics, mouseX, mouseY)
}
}