aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/kotlin')
-rw-r--r--src/main/kotlin/moe/nea/firmament/apis/Profiles.kt4
-rw-r--r--src/main/kotlin/moe/nea/firmament/commands/dsl.kt21
-rw-r--r--src/main/kotlin/moe/nea/firmament/commands/rome.kt6
-rw-r--r--src/main/kotlin/moe/nea/firmament/gui/profileviewer/SkillPage.kt2
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
)