Files
TCOWW/src/main/kotlin/fr/azur/tcoww/utils/skins/Manager.kt
2025-11-30 17:22:48 +01:00

78 lines
2.5 KiB
Kotlin

package fr.azur.tcoww.utils.skins
import fr.azur.tcoww.Tcoww
import net.skinsrestorer.api.SkinsRestorer
import net.skinsrestorer.api.SkinsRestorerProvider
import net.skinsrestorer.api.property.SkinIdentifier
import net.skinsrestorer.api.property.SkinProperty
import org.bukkit.entity.Player
import java.util.UUID
import kotlin.jvm.optionals.getOrNull
import kotlin.random.Random
object Manager {
var maxSkinId: Int = 0
private lateinit var skinsRestorer: SkinsRestorer
var oldPlayerSkin = mutableMapOf<UUID, SkinIdentifier?>()
var wwPlayerFur = mutableMapOf<UUID, Int>()
fun handle() {
skinsRestorer = SkinsRestorerProvider.get()
reloadSkin()
}
fun reloadSkin() {
val skinsValue =
Tcoww.config
.getList("werewolf-skins")
.orEmpty()
.mapNotNull { it as? WerewolfSkin }
wwPlayerFur.clear()
maxSkinId = skinsValue.size
skinsValue.forEachIndexed { index, skin ->
skinsRestorer.skinStorage.setCustomSkinData("tcoww$index", SkinProperty.of(skin.value, skin.signature))
}
}
fun applyWerewolfFur(player: Player) {
val skin = skinsRestorer.playerStorage.getSkinIdOfPlayer(player.uniqueId)
oldPlayerSkin[player.uniqueId] = skin.getOrNull()
val result = skinsRestorer.skinStorage.findOrCreateSkinData("tcoww_${getWerewolfFur(player.uniqueId)}")
if (!result.isEmpty) {
skinsRestorer.playerStorage.setSkinIdOfPlayer(player.uniqueId, result.get().identifier)
skinsRestorer.getSkinApplier(Player::class.java).applySkin(player)
}
}
fun unapplySkin(player: Player) {
val skin = oldPlayerSkin[player.uniqueId]
if (skin == null) {
skinsRestorer.playerStorage.removeSkinIdOfPlayer(player.uniqueId)
} else {
skinsRestorer.playerStorage.setSkinIdOfPlayer(player.uniqueId, skin)
}
skinsRestorer.getSkinApplier(Player::class.java).applySkin(player)
}
private fun getWerewolfFur(playerUUID: UUID): Int =
wwPlayerFur[playerUUID]
?: randomFur(playerUUID)
private fun randomFur(playerUUID: UUID): Int {
val id =
if (maxSkinId == 0) {
0
} else {
Random(playerUUID.mostSignificantBits xor playerUUID.leastSignificantBits).nextInt(
maxSkinId,
)
}
wwPlayerFur[playerUUID] = id
return id
}
}