aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/features/inventory/buttons/InventoryButtonTemplates.kt
blob: 99b544b8aed06736de4a18ba609af6aee3ef11c2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package moe.nea.firmament.features.inventory.buttons

import kotlinx.serialization.decodeFromString
import kotlinx.serialization.encodeToString
import net.minecraft.text.Text
import moe.nea.firmament.Firmament
import moe.nea.firmament.util.MC
import moe.nea.firmament.util.TemplateUtil

object InventoryButtonTemplates {

    val legacyPrefix = "NEUBUTTONS/"
    val modernPrefix = "MAYBEONEDAYIWILLHAVEMYOWNFORMAT"

    fun loadTemplate(t: String): List<InventoryButton>? {
        val buttons = TemplateUtil.maybeDecodeTemplate<List<String>>(legacyPrefix, t) ?: return null
        return buttons.mapNotNull {
            try {
                Firmament.json.decodeFromString<InventoryButton>(it).also {
                    if (it.icon?.startsWith("extra:") == true || it.command?.any { it.isLowerCase() } == true) {
                        MC.sendChat(Text.translatable("firmament.inventory-buttons.import-failed"))
                    }
                }
            } catch (e: Exception) {
                null
            }
        }
    }

    fun saveTemplate(buttons: List<InventoryButton>): String {
        return TemplateUtil.encodeTemplate(legacyPrefix, buttons.map { Firmament.json.encodeToString(it) })
    }
}