WIP: Reforge recipes
This commit is contained in:
@@ -1,35 +1,37 @@
|
||||
|
||||
|
||||
package moe.nea.firmament.util
|
||||
|
||||
import net.minecraft.util.Formatting
|
||||
|
||||
enum class LegacyFormattingCode(val label: String, val char: Char, val index: Int) {
|
||||
BLACK("BLACK", '0', 0),
|
||||
DARK_BLUE("DARK_BLUE", '1', 1),
|
||||
DARK_GREEN("DARK_GREEN", '2', 2),
|
||||
DARK_AQUA("DARK_AQUA", '3', 3),
|
||||
DARK_RED("DARK_RED", '4', 4),
|
||||
DARK_PURPLE("DARK_PURPLE", '5', 5),
|
||||
GOLD("GOLD", '6', 6),
|
||||
GRAY("GRAY", '7', 7),
|
||||
DARK_GRAY("DARK_GRAY", '8', 8),
|
||||
BLUE("BLUE", '9', 9),
|
||||
GREEN("GREEN", 'a', 10),
|
||||
AQUA("AQUA", 'b', 11),
|
||||
RED("RED", 'c', 12),
|
||||
LIGHT_PURPLE("LIGHT_PURPLE", 'd', 13),
|
||||
YELLOW("YELLOW", 'e', 14),
|
||||
WHITE("WHITE", 'f', 15),
|
||||
OBFUSCATED("OBFUSCATED", 'k', -1),
|
||||
BOLD("BOLD", 'l', -1),
|
||||
STRIKETHROUGH("STRIKETHROUGH", 'm', -1),
|
||||
UNDERLINE("UNDERLINE", 'n', -1),
|
||||
ITALIC("ITALIC", 'o', -1),
|
||||
RESET("RESET", 'r', -1);
|
||||
BLACK("BLACK", '0', 0),
|
||||
DARK_BLUE("DARK_BLUE", '1', 1),
|
||||
DARK_GREEN("DARK_GREEN", '2', 2),
|
||||
DARK_AQUA("DARK_AQUA", '3', 3),
|
||||
DARK_RED("DARK_RED", '4', 4),
|
||||
DARK_PURPLE("DARK_PURPLE", '5', 5),
|
||||
GOLD("GOLD", '6', 6),
|
||||
GRAY("GRAY", '7', 7),
|
||||
DARK_GRAY("DARK_GRAY", '8', 8),
|
||||
BLUE("BLUE", '9', 9),
|
||||
GREEN("GREEN", 'a', 10),
|
||||
AQUA("AQUA", 'b', 11),
|
||||
RED("RED", 'c', 12),
|
||||
LIGHT_PURPLE("LIGHT_PURPLE", 'd', 13),
|
||||
YELLOW("YELLOW", 'e', 14),
|
||||
WHITE("WHITE", 'f', 15),
|
||||
OBFUSCATED("OBFUSCATED", 'k', -1),
|
||||
BOLD("BOLD", 'l', -1),
|
||||
STRIKETHROUGH("STRIKETHROUGH", 'm', -1),
|
||||
UNDERLINE("UNDERLINE", 'n', -1),
|
||||
ITALIC("ITALIC", 'o', -1),
|
||||
RESET("RESET", 'r', -1);
|
||||
|
||||
val modern = Formatting.byCode(char)!!
|
||||
companion object {
|
||||
val byCode = entries.associateBy { it.char }
|
||||
}
|
||||
|
||||
val formattingCode = "§$char"
|
||||
val modern = Formatting.byCode(char)!!
|
||||
|
||||
val formattingCode = "§$char"
|
||||
|
||||
}
|
||||
|
||||
@@ -125,10 +125,26 @@ val ItemStack.skyblockUUID: UUID?
|
||||
private val petDataCache = WeakCache.memoize<ItemStack, Optional<HypixelPetInfo>>("PetInfo") {
|
||||
val jsonString = it.extraAttributes.getString("petInfo")
|
||||
if (jsonString.isNullOrBlank()) return@memoize Optional.empty()
|
||||
ErrorUtil.catch<HypixelPetInfo?>("Could not decode hypixel pet info") { jsonparser.decodeFromString<HypixelPetInfo>(jsonString) }
|
||||
ErrorUtil.catch<HypixelPetInfo?>("Could not decode hypixel pet info") {
|
||||
jsonparser.decodeFromString<HypixelPetInfo>(jsonString)
|
||||
}
|
||||
.or { null }.intoOptional()
|
||||
}
|
||||
|
||||
fun ItemStack.getUpgradeStars(): Int {
|
||||
return extraAttributes.getInt("upgrade_level").takeIf { it > 0 }
|
||||
?: extraAttributes.getInt("dungeon_item_level").takeIf { it > 0 }
|
||||
?: 0
|
||||
}
|
||||
|
||||
@Serializable
|
||||
@JvmInline
|
||||
value class ReforgeId(val id: String)
|
||||
|
||||
fun ItemStack.getReforgeId(): ReforgeId? {
|
||||
return extraAttributes.getString("modifier").takeIf { it.isNotBlank() }?.let(::ReforgeId)
|
||||
}
|
||||
|
||||
val ItemStack.petData: HypixelPetInfo?
|
||||
get() = petDataCache(this).getOrNull()
|
||||
|
||||
|
||||
@@ -13,6 +13,13 @@ value class ItemType private constructor(val name: String) {
|
||||
return ItemType(name)
|
||||
}
|
||||
|
||||
private val obfuscatedRegex = "§[kK].*?(§[0-9a-fA-FrR]|$)".toRegex()
|
||||
fun fromEscapeCodeLore(lore: String): ItemType? {
|
||||
return lore.replace(obfuscatedRegex, "").trim().substringAfter(" ", "")
|
||||
.takeIf { it.isNotEmpty() }
|
||||
?.let(::ofName)
|
||||
}
|
||||
|
||||
fun fromItemStack(itemStack: ItemStack): ItemType? {
|
||||
if (itemStack.petData != null)
|
||||
return PET
|
||||
@@ -26,13 +33,31 @@ value class ItemType private constructor(val name: String) {
|
||||
if (type.isEmpty()) return null
|
||||
return ofName(type)
|
||||
}
|
||||
return null
|
||||
return itemStack.loreAccordingToNbt.lastOrNull()?.directLiteralStringContent?.let(::fromEscapeCodeLore)
|
||||
}
|
||||
|
||||
// TODO: some of those are not actual in game item types, but rather ones included in the repository to splat to multiple in game types. codify those somehow
|
||||
|
||||
val SWORD = ofName("SWORD")
|
||||
val DRILL = ofName("DRILL")
|
||||
val PICKAXE = ofName("PICKAXE")
|
||||
val GAUNTLET = ofName("GAUNTLET")
|
||||
val LONGSWORD = ofName("LONG SWORD")
|
||||
val EQUIPMENT = ofName("EQUIPMENT")
|
||||
val FISHING_WEAPON = ofName("FISHING WEAPON")
|
||||
val CLOAK = ofName("CLOAK")
|
||||
val BELT = ofName("BELT")
|
||||
val NECKLACE = ofName("NECKLACE")
|
||||
val BRACELET = ofName("BRACELET")
|
||||
val GLOVES = ofName("GLOVES")
|
||||
val ROD = ofName("ROD")
|
||||
val FISHING_ROD = ofName("FISHING ROD")
|
||||
val VACUUM = ofName("VACUUM")
|
||||
val CHESTPLATE = ofName("CHESTPLATE")
|
||||
val LEGGINGS = ofName("LEGGINGS")
|
||||
val HELMET = ofName("HELMET")
|
||||
val BOOTS = ofName("BOOTS")
|
||||
val NIL = ofName("__NIL")
|
||||
|
||||
/**
|
||||
* This one is not really official (it never shows up in game).
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
package moe.nea.firmament.util.skyblock
|
||||
|
||||
import kotlinx.serialization.KSerializer
|
||||
import kotlinx.serialization.Serializable
|
||||
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 net.minecraft.item.ItemStack
|
||||
import net.minecraft.text.Text
|
||||
import moe.nea.firmament.util.StringUtil.words
|
||||
@@ -10,6 +17,7 @@ import moe.nea.firmament.util.unformattedString
|
||||
|
||||
typealias RepoRarity = io.github.moulberry.repo.data.Rarity
|
||||
|
||||
@Serializable(with = Rarity.Serializer::class)
|
||||
enum class Rarity(vararg altNames: String) {
|
||||
COMMON,
|
||||
UNCOMMON,
|
||||
@@ -24,6 +32,19 @@ enum class Rarity(vararg altNames: String) {
|
||||
UNKNOWN
|
||||
;
|
||||
|
||||
object Serializer : KSerializer<Rarity> {
|
||||
override val descriptor: SerialDescriptor
|
||||
get() = PrimitiveSerialDescriptor(Rarity::class.java.name, PrimitiveKind.STRING)
|
||||
|
||||
override fun deserialize(decoder: Decoder): Rarity {
|
||||
return valueOf(decoder.decodeString().replace(" ", "_"))
|
||||
}
|
||||
|
||||
override fun serialize(encoder: Encoder, value: Rarity) {
|
||||
encoder.encodeString(value.name)
|
||||
}
|
||||
}
|
||||
|
||||
val names = setOf(name) + altNames
|
||||
|
||||
val neuRepoRarity: RepoRarity? = RepoRarity.entries.find { it.name == name }
|
||||
|
||||
Reference in New Issue
Block a user