153 lines
4.7 KiB
Kotlin
153 lines
4.7 KiB
Kotlin
package co.sirblob.gui
|
|
|
|
import co.sirblob.network.CobbleSyncPackets
|
|
import net.fabricmc.api.EnvType
|
|
import net.fabricmc.api.Environment
|
|
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking
|
|
import net.minecraft.client.gui.GuiGraphics
|
|
import net.minecraft.client.gui.components.Button
|
|
import net.minecraft.client.gui.screens.Screen
|
|
import net.minecraft.network.chat.Component
|
|
|
|
@Environment(EnvType.CLIENT)
|
|
class CobbleSyncScreen : Screen(Component.literal("CobbleSync")) {
|
|
|
|
// Status message to display feedback
|
|
private var statusMessage: Component = Component.literal("")
|
|
private var statusColor: Int = 0xFFFFFF
|
|
|
|
// Buttons
|
|
private lateinit var syncButton: Button
|
|
private lateinit var loadButton: Button
|
|
private lateinit var closeButton: Button
|
|
|
|
override fun init() {
|
|
super.init()
|
|
|
|
val buttonWidth = 200
|
|
val buttonHeight = 20
|
|
val centerX = width / 2
|
|
val centerY = height / 2
|
|
|
|
// Sync Button - uploads Box 30 to the server
|
|
syncButton =
|
|
Button.builder(Component.literal("⬆ Sync Box 30")) { _ ->
|
|
setStatus(Component.literal("Syncing..."), 0xFFFF55)
|
|
ClientPlayNetworking.send(CobbleSyncPackets.SyncRequestPayload())
|
|
}
|
|
.bounds(centerX - buttonWidth / 2, centerY - 40, buttonWidth, buttonHeight)
|
|
.build()
|
|
|
|
// Load Button - downloads saved Pokemon to empty slots
|
|
loadButton =
|
|
Button.builder(Component.literal("⬇ Load Pokémon")) { _ ->
|
|
setStatus(Component.literal("Loading..."), 0xFFFF55)
|
|
ClientPlayNetworking.send(CobbleSyncPackets.LoadRequestPayload())
|
|
}
|
|
.bounds(centerX - buttonWidth / 2, centerY - 10, buttonWidth, buttonHeight)
|
|
.build()
|
|
|
|
// Close Button
|
|
closeButton =
|
|
Button.builder(Component.literal("Close")) { _ -> onClose() }
|
|
.bounds(centerX - buttonWidth / 2, centerY + 30, buttonWidth, buttonHeight)
|
|
.build()
|
|
|
|
addRenderableWidget(syncButton)
|
|
addRenderableWidget(loadButton)
|
|
addRenderableWidget(closeButton)
|
|
}
|
|
|
|
override fun render(guiGraphics: GuiGraphics, mouseX: Int, mouseY: Int, partialTick: Float) {
|
|
// Render background
|
|
renderBackground(guiGraphics, mouseX, mouseY, partialTick)
|
|
|
|
// Draw title
|
|
guiGraphics.drawCenteredString(
|
|
font,
|
|
Component.literal("§6§lCobbleSync"),
|
|
width / 2,
|
|
height / 2 - 80,
|
|
0xFFFFFF
|
|
)
|
|
|
|
// Draw subtitle/description
|
|
guiGraphics.drawCenteredString(
|
|
font,
|
|
Component.literal("§7Sync your Pokémon across servers"),
|
|
width / 2,
|
|
height / 2 - 65,
|
|
0xAAAAAA
|
|
)
|
|
|
|
// Draw separator line
|
|
guiGraphics.fill(
|
|
width / 2 - 100,
|
|
height / 2 - 55,
|
|
width / 2 + 100,
|
|
height / 2 - 54,
|
|
0xFF444444.toInt()
|
|
)
|
|
|
|
// Draw status message
|
|
if (statusMessage.string.isNotEmpty()) {
|
|
guiGraphics.drawCenteredString(
|
|
font,
|
|
statusMessage,
|
|
width / 2,
|
|
height / 2 + 60,
|
|
statusColor
|
|
)
|
|
}
|
|
|
|
// Draw info text
|
|
guiGraphics.drawCenteredString(
|
|
font,
|
|
Component.literal("§8Sync: Upload Box 30 (max 12 Pokémon)"),
|
|
width / 2,
|
|
height / 2 + 80,
|
|
0x888888
|
|
)
|
|
guiGraphics.drawCenteredString(
|
|
font,
|
|
Component.literal("§8Load: Download to empty PC slots"),
|
|
width / 2,
|
|
height / 2 + 92,
|
|
0x888888
|
|
)
|
|
|
|
super.render(guiGraphics, mouseX, mouseY, partialTick)
|
|
}
|
|
|
|
override fun isPauseScreen(): Boolean = false
|
|
|
|
fun setStatus(message: Component, color: Int) {
|
|
this.statusMessage = message
|
|
this.statusColor = color
|
|
}
|
|
|
|
companion object {
|
|
// Singleton instance for updating status from network handlers
|
|
var currentInstance: CobbleSyncScreen? = null
|
|
private set
|
|
|
|
fun open(screen: CobbleSyncScreen) {
|
|
currentInstance = screen
|
|
}
|
|
|
|
fun close() {
|
|
currentInstance = null
|
|
}
|
|
}
|
|
|
|
override fun onClose() {
|
|
CobbleSyncScreen.close()
|
|
super.onClose()
|
|
}
|
|
|
|
override fun added() {
|
|
super.added()
|
|
CobbleSyncScreen.open(this)
|
|
}
|
|
}
|