From e1a8c9535aa16a46b58ca624dc764682af0482d3 Mon Sep 17 00:00:00 2001 From: Ammo Date: Sat, 14 Mar 2026 23:51:42 +0100 Subject: [PATCH] feat: add Rarity enum for item and entity rarity representation --- gradle.properties | 2 +- .../api/surf-api-bukkit-api.api | 16 +++++++ .../api/surf-api-core-api.api | 16 +++++++ .../surf/surfapi/core/api/rarity/Rarity.kt | 48 +++++++++++++++++++ 4 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 surf-api-core/surf-api-core-api/src/main/kotlin/dev/slne/surf/surfapi/core/api/rarity/Rarity.kt diff --git a/gradle.properties b/gradle.properties index 5543a359b..6f61c5b2c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,6 +7,6 @@ org.jetbrains.dokka.experimental.gradle.pluginMode=V2Enabled javaVersion=25 mcVersion=1.21.11 group=dev.slne.surf -version=1.21.11-2.63.1 +version=1.21.11-2.64.0 relocationPrefix=dev.slne.surf.surfapi.libs snapshot=false diff --git a/surf-api-bukkit/surf-api-bukkit-api/api/surf-api-bukkit-api.api b/surf-api-bukkit/surf-api-bukkit-api/api/surf-api-bukkit-api.api index 65610050c..0dc73bf24 100644 --- a/surf-api-bukkit/surf-api-bukkit-api/api/surf-api-bukkit-api.api +++ b/surf-api-bukkit/surf-api-bukkit-api/api/surf-api-bukkit-api.api @@ -2177,6 +2177,22 @@ public abstract class dev/slne/surf/surfapi/bukkit/api/permission/PermissionRegi public final fun create (Ljava/lang/String;)Ljava/lang/String; } +public final class dev/slne/surf/surfapi/bukkit/api/rarity/Rarity : java/lang/Enum, net/kyori/adventure/text/ComponentLike { + public static final field COMMON Ldev/slne/surf/surfapi/bukkit/api/rarity/Rarity; + public static final field EPIC Ldev/slne/surf/surfapi/bukkit/api/rarity/Rarity; + public static final field LEGENDARY Ldev/slne/surf/surfapi/bukkit/api/rarity/Rarity; + public static final field MYTHIC Ldev/slne/surf/surfapi/bukkit/api/rarity/Rarity; + public static final field RARE Ldev/slne/surf/surfapi/bukkit/api/rarity/Rarity; + public static final field UNCOMMON Ldev/slne/surf/surfapi/bukkit/api/rarity/Rarity; + public synthetic fun asComponent ()Lnet/kyori/adventure/text/Component; + public fun asComponent ()Lnet/kyori/adventure/text/TextComponent; + public final fun getColor ()Lnet/kyori/adventure/text/format/TextColor; + public final fun getDisplayName ()Lnet/kyori/adventure/text/TextComponent; + public static fun getEntries ()Lkotlin/enums/EnumEntries; + public static fun valueOf (Ljava/lang/String;)Ldev/slne/surf/surfapi/bukkit/api/rarity/Rarity; + public static fun values ()[Ldev/slne/surf/surfapi/bukkit/api/rarity/Rarity; +} + public abstract interface annotation class dev/slne/surf/surfapi/bukkit/api/scoreboard/ObsoleteScoreboardApi : java/lang/annotation/Annotation { } diff --git a/surf-api-core/surf-api-core-api/api/surf-api-core-api.api b/surf-api-core/surf-api-core-api/api/surf-api-core-api.api index e306b10e0..adcf183cc 100644 --- a/surf-api-core/surf-api-core-api/api/surf-api-core-api.api +++ b/surf-api-core/surf-api-core-api/api/surf-api-core-api.api @@ -8299,6 +8299,22 @@ public abstract interface class dev/slne/surf/surfapi/core/api/random/Weighted { public abstract fun getWeight ()D } +public final class dev/slne/surf/surfapi/core/api/rarity/Rarity : java/lang/Enum, net/kyori/adventure/text/ComponentLike { + public static final field COMMON Ldev/slne/surf/surfapi/core/api/rarity/Rarity; + public static final field EPIC Ldev/slne/surf/surfapi/core/api/rarity/Rarity; + public static final field LEGENDARY Ldev/slne/surf/surfapi/core/api/rarity/Rarity; + public static final field MYTHIC Ldev/slne/surf/surfapi/core/api/rarity/Rarity; + public static final field RARE Ldev/slne/surf/surfapi/core/api/rarity/Rarity; + public static final field UNCOMMON Ldev/slne/surf/surfapi/core/api/rarity/Rarity; + public synthetic fun asComponent ()Lnet/kyori/adventure/text/Component; + public fun asComponent ()Lnet/kyori/adventure/text/TextComponent; + public final fun getColor ()Lnet/kyori/adventure/text/format/TextColor; + public final fun getDisplayName ()Lnet/kyori/adventure/text/TextComponent; + public static fun getEntries ()Lkotlin/enums/EnumEntries; + public static fun valueOf (Ljava/lang/String;)Ldev/slne/surf/surfapi/core/api/rarity/Rarity; + public static fun values ()[Ldev/slne/surf/surfapi/core/api/rarity/Rarity; +} + public abstract interface annotation class dev/slne/surf/surfapi/core/api/reflection/Constructor : java/lang/annotation/Annotation { } diff --git a/surf-api-core/surf-api-core-api/src/main/kotlin/dev/slne/surf/surfapi/core/api/rarity/Rarity.kt b/surf-api-core/surf-api-core-api/src/main/kotlin/dev/slne/surf/surfapi/core/api/rarity/Rarity.kt new file mode 100644 index 000000000..f165c290a --- /dev/null +++ b/surf-api-core/surf-api-core-api/src/main/kotlin/dev/slne/surf/surfapi/core/api/rarity/Rarity.kt @@ -0,0 +1,48 @@ +package dev.slne.surf.surfapi.core.api.rarity + +import dev.slne.surf.surfapi.core.api.messages.adventure.buildText +import dev.slne.surf.surfapi.core.api.messages.builder.SurfComponentBuilder +import net.kyori.adventure.text.ComponentLike +import net.kyori.adventure.text.format.TextColor + +/** + * Represents the rarity of an item or entity within the system. + * + * Each rarity level is associated with a display name and a color, + * allowing visually distinct representations for different levels. + * + * @property displayName The visual display name of the rarity level. + * @property color The textual color associated with the rarity level. + */ +enum class Rarity( + displayName: SurfComponentBuilder.() -> Unit, + val color: TextColor +) : ComponentLike { + COMMON( + displayName = { spacer("Gewöhnlich") }, + color = TextColor.color(0xAAAAAA) + ), + UNCOMMON( + displayName = { spacer("Ungewöhnlich") }, + color = TextColor.color(0x55FF55) + ), + RARE( + displayName = { success("Selten") }, + color = TextColor.color(0x55FFFF) + ), + EPIC( + displayName = { info("Episch") }, + color = TextColor.color(0xFF55FF) + ), + LEGENDARY( + displayName = { warning("Legendär") }, + color = TextColor.color(0xFFAA00) + ), + MYTHIC( + displayName = { error("Mythisch") }, + color = TextColor.color(0xAA00AA) + ); + + val displayName = buildText(displayName) + override fun asComponent() = displayName +} \ No newline at end of file