Forge recipes and coin items
This commit is contained in:
@@ -56,6 +56,7 @@ value class SkyblockId(val neuItem: String) {
|
||||
}
|
||||
|
||||
companion object {
|
||||
val COINS: SkyblockId = SkyblockId("SKYBLOCK_COIN")
|
||||
private val bazaarEnchantmentRegex = "ENCHANTMENT_(\\D*)_(\\d+)".toRegex()
|
||||
val NULL: SkyblockId = SkyblockId("null")
|
||||
}
|
||||
|
||||
39
src/main/kotlin/moe/nea/firmament/util/item/SkullItemData.kt
Normal file
39
src/main/kotlin/moe/nea/firmament/util/item/SkullItemData.kt
Normal file
@@ -0,0 +1,39 @@
|
||||
@file:UseSerializers(DashlessUUIDSerializer::class, InstantAsLongSerializer::class)
|
||||
|
||||
package moe.nea.firmament.util.item
|
||||
|
||||
import com.mojang.authlib.GameProfile
|
||||
import com.mojang.authlib.minecraft.MinecraftProfileTexture
|
||||
import com.mojang.authlib.properties.Property
|
||||
import java.util.UUID
|
||||
import kotlinx.datetime.Clock
|
||||
import kotlinx.datetime.Instant
|
||||
import kotlinx.serialization.Serializable
|
||||
import kotlinx.serialization.UseSerializers
|
||||
import kotlinx.serialization.encodeToString
|
||||
import net.minecraft.client.texture.PlayerSkinProvider
|
||||
import moe.nea.firmament.Firmament
|
||||
import moe.nea.firmament.util.json.DashlessUUIDSerializer
|
||||
import moe.nea.firmament.util.json.InstantAsLongSerializer
|
||||
|
||||
@Serializable
|
||||
data class MinecraftProfileTextureKt(
|
||||
val url: String,
|
||||
val metadata: Map<String, String> = mapOf(),
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class MinecraftTexturesPayloadKt(
|
||||
val textures: Map<MinecraftProfileTexture.Type, MinecraftProfileTextureKt>,
|
||||
val profileId: UUID,
|
||||
val profileName: String,
|
||||
val isPublic: Boolean = true,
|
||||
val timestamp: Instant = Clock.System.now(),
|
||||
)
|
||||
|
||||
fun GameProfile.setTextures(textures: MinecraftTexturesPayloadKt) {
|
||||
val json = Firmament.json.encodeToString(textures)
|
||||
val encoded = java.util.Base64.getEncoder().encodeToString(json.encodeToByteArray())
|
||||
properties.put(PlayerSkinProvider.TEXTURES, Property(PlayerSkinProvider.TEXTURES, encoded))
|
||||
}
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
package moe.nea.firmament.util.json
|
||||
|
||||
import java.util.UUID
|
||||
import kotlinx.serialization.KSerializer
|
||||
import kotlinx.serialization.Serializer
|
||||
import kotlinx.serialization.descriptors.PrimitiveKind
|
||||
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
|
||||
import kotlinx.serialization.descriptors.SerialDescriptor
|
||||
import kotlinx.serialization.encoding.Decoder
|
||||
import kotlinx.serialization.encoding.Encoder
|
||||
import moe.nea.firmament.util.parseDashlessUUID
|
||||
|
||||
object DashlessUUIDSerializer : KSerializer<UUID> {
|
||||
override val descriptor: SerialDescriptor =
|
||||
PrimitiveSerialDescriptor("DashlessUUIDSerializer", PrimitiveKind.STRING)
|
||||
|
||||
override fun deserialize(decoder: Decoder): UUID {
|
||||
return parseDashlessUUID(decoder.decodeString())
|
||||
}
|
||||
|
||||
override fun serialize(encoder: Encoder, value: UUID) {
|
||||
encoder.encodeString(value.toString().replace("-", ""))
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package moe.nea.firmament.util.json
|
||||
|
||||
import kotlinx.datetime.Instant
|
||||
import kotlinx.serialization.KSerializer
|
||||
import kotlinx.serialization.descriptors.PrimitiveKind
|
||||
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
|
||||
import kotlinx.serialization.descriptors.SerialDescriptor
|
||||
import kotlinx.serialization.encoding.Decoder
|
||||
import kotlinx.serialization.encoding.Encoder
|
||||
|
||||
object InstantAsLongSerializer : KSerializer<Instant> {
|
||||
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("InstantAsLongSerializer", PrimitiveKind.LONG)
|
||||
override fun deserialize(decoder: Decoder): Instant {
|
||||
return Instant.fromEpochMilliseconds(decoder.decodeLong())
|
||||
}
|
||||
|
||||
override fun serialize(encoder: Encoder, value: Instant) {
|
||||
encoder.encodeLong(value.toEpochMilliseconds())
|
||||
}
|
||||
}
|
||||
10
src/main/kotlin/moe/nea/firmament/util/uuid.kt
Normal file
10
src/main/kotlin/moe/nea/firmament/util/uuid.kt
Normal file
@@ -0,0 +1,10 @@
|
||||
package moe.nea.firmament.util
|
||||
|
||||
import java.math.BigInteger
|
||||
import java.util.UUID
|
||||
|
||||
fun parseDashlessUUID(dashlessUuid: String): UUID {
|
||||
val most = BigInteger(dashlessUuid.substring(0, 16), 16)
|
||||
val least = BigInteger(dashlessUuid.substring(16, 32), 16)
|
||||
return UUID(most.toLong(), least.toLong())
|
||||
}
|
||||
Reference in New Issue
Block a user