package at.hannibal2.skyhanni.test import at.hannibal2.skyhanni.SkyHanniMod import at.hannibal2.skyhanni.utils.* import com.google.gson.GsonBuilder import com.google.gson.JsonElement import net.minecraft.client.gui.inventory.GuiContainer import net.minecraft.item.ItemStack import net.minecraft.nbt.NBTTagCompound import net.minecraftforge.client.event.GuiScreenEvent import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import java.io.InputStreamReader import java.io.Reader object TestExportTools { val gson = GsonBuilder() .registerTypeAdapterFactory(KotlinTypeAdapterFactory()) .registerTypeAdapter(NBTTagCompound::class.java, NBTTypeAdapter) .registerTypeAdapterFactory(ItemStackTypeAdapterFactory) .create() class Key internal constructor(val name: String) val Item = Key("Item") @KSerializable data class TestValue( val type: String, val data: JsonElement, ) fun toJson(key: Key, value: T): String { return gson.toJson(TestValue(key.name, gson.toJsonTree(value))) } inline fun fromJson(key: Key, reader: Reader): T { val serializable = gson.fromJson(reader) require(key.name == serializable.type) return gson.fromJson(serializable.data) } @SubscribeEvent fun onKeybind(event: GuiScreenEvent.KeyboardInputEvent.Post) { if (!OSUtils.isKeyHeld(SkyHanniMod.feature.dev.copyNBTDataCompressed)) return val gui = event.gui as? GuiContainer ?: return val focussedSlot = gui.slotUnderMouse ?: return val stack = focussedSlot.stack ?: return val json = toJson(Item, stack) OSUtils.copyToClipboard(json) LorenzUtils.chat("Copied test importable to clipbooard") } inline fun getTestData(category: Key, name: String): T { val reader = InputStreamReader(javaClass.getResourceAsStream("/testdata/${category.name}/$name.json")!!) return fromJson(category, reader) } }