78 lines
2.5 KiB
Kotlin
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
|
|
}
|
|
}
|