diff options
author | nea <nea@nea.moe> | 2023-06-02 16:43:14 +0200 |
---|---|---|
committer | nea <nea@nea.moe> | 2023-06-02 16:43:14 +0200 |
commit | ccf1d1d0e97983509b29c276caa058b8c8284a66 (patch) | |
tree | 09718e30925fdfc7758668e08a991cdbaf8e447d | |
parent | add5eb6a4a1c8228e789f90ca100fc92f12baaea (diff) | |
download | firmament-ccf1d1d0e97983509b29c276caa058b8c8284a66.tar.gz firmament-ccf1d1d0e97983509b29c276caa058b8c8284a66.tar.bz2 firmament-ccf1d1d0e97983509b29c276caa058b8c8284a66.zip |
Fix ex MVP++ users being shown as unranked
4 files changed, 27 insertions, 6 deletions
diff --git a/src/main/kotlin/moe/nea/firmament/apis/Profiles.kt b/src/main/kotlin/moe/nea/firmament/apis/Profiles.kt index 3e6b2cb..2e483ee 100644 --- a/src/main/kotlin/moe/nea/firmament/apis/Profiles.kt +++ b/src/main/kotlin/moe/nea/firmament/apis/Profiles.kt @@ -58,7 +58,7 @@ enum class Skill(val accessor: KProperty1<Member, Double>, val color: DyeColor) @Serializable data class Member( - val pets: List<Pet>, + val pets: List<Pet> = listOf(), @SerialName("coop_invitation") val coopInvitation: CoopInvitation? = null, @SerialName("experience_skill_farming") @@ -129,7 +129,7 @@ data class PlayerData( val rankPlusColor: String = "GOLD" ) { val rankPlusDyeColor = LegacyFormattingCode.values().find { it.name == rankPlusColor } ?: LegacyFormattingCode.GOLD - val rankData get() = RepoManager.neuRepo.constants.misc.ranks[monthlyPackageRank ?: packageRank] + val rankData get() = RepoManager.neuRepo.constants.misc.ranks[if (monthlyPackageRank == "NONE" || monthlyPackageRank == null) packageRank else monthlyPackageRank] } @Serializable diff --git a/src/main/kotlin/moe/nea/firmament/commands/dsl.kt b/src/main/kotlin/moe/nea/firmament/commands/dsl.kt index 155e700..90018fa 100644 --- a/src/main/kotlin/moe/nea/firmament/commands/dsl.kt +++ b/src/main/kotlin/moe/nea/firmament/commands/dsl.kt @@ -25,6 +25,8 @@ import com.mojang.brigadier.builder.RequiredArgumentBuilder import com.mojang.brigadier.context.CommandContext import com.mojang.brigadier.suggestion.SuggestionProvider import java.lang.reflect.ParameterizedType +import java.lang.reflect.Type +import java.lang.reflect.TypeVariable import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource import moe.nea.firmament.util.iterate @@ -43,18 +45,31 @@ fun literal( ): LiteralArgumentBuilder<DefaultSource> = LiteralArgumentBuilder.literal<DefaultSource>(name).also(block) + +private fun normalizeGeneric(argument: Type): Class<*> { + return if (argument is Class<*>) { + argument + } else if (argument is TypeVariable<*>) { + normalizeGeneric(argument.bounds[0]) + } else if (argument is ParameterizedType) { + normalizeGeneric(argument.rawType) + } else { + Any::class.java + } +} + data class TypeSafeArg<T : Any>(val name: String, val argument: ArgumentType<T>) { val argClass by lazy { argument.javaClass .iterate<Class<in ArgumentType<T>>> { it.superclass } - .map { - it.genericSuperclass + .flatMap { + it.genericInterfaces.toList() } .filterIsInstance<ParameterizedType>() .find { it.rawType == ArgumentType::class.java }!! - .let { it.actualTypeArguments[0] as Class<*> } + .let { normalizeGeneric(it.actualTypeArguments[0]) } } @JvmName("getWithThis") diff --git a/src/main/kotlin/moe/nea/firmament/commands/rome.kt b/src/main/kotlin/moe/nea/firmament/commands/rome.kt index 9c47fd2..2baf076 100644 --- a/src/main/kotlin/moe/nea/firmament/commands/rome.kt +++ b/src/main/kotlin/moe/nea/firmament/commands/rome.kt @@ -59,6 +59,12 @@ fun firmamentCommand() = literal("firmament") { thenExecute { ProfileViewer.onCommand(source, MC.player!!.name.unformattedString) } + thenArgument("name", string()) { name -> + suggestsList { MC.world?.players?.map { it.name.unformattedString } ?: listOf() } + thenExecute { + ProfileViewer.onCommand(source, get(name)) + } + } } thenLiteral("price") { thenArgument("item", string()) { item -> diff --git a/src/main/kotlin/moe/nea/firmament/gui/profileviewer/SkillPage.kt b/src/main/kotlin/moe/nea/firmament/gui/profileviewer/SkillPage.kt index 88e477c..a485954 100644 --- a/src/main/kotlin/moe/nea/firmament/gui/profileviewer/SkillPage.kt +++ b/src/main/kotlin/moe/nea/firmament/gui/profileviewer/SkillPage.kt @@ -27,7 +27,7 @@ object SkillPage : ProfilePage { profileViewer.account.rankData?.let { ("§${it.color}[${it.tag}${profileViewer.account.rankPlusDyeColor.modern}" + "${it.plus ?: ""}§${it.color}] ${profileViewer.primaryName}") - } ?: "§${Formatting.GRAY}${profileViewer.primaryName}" + } ?: "${Formatting.GRAY}${profileViewer.primaryName}" ) ), 0, 0, 6, 1 ) |