From 97b73b0c550fff409f89a7c615672fe60c6f9e58 Mon Sep 17 00:00:00 2001 From: azur Date: Sat, 6 Dec 2025 16:40:12 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=A6=8B=20Debugging=20for=20the=201.2.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/kotlin/fr/azur/tcoww/Tcoww.kt | 5 +- .../kotlin/fr/azur/tcoww/events/GameEvents.kt | 21 ++++++-- .../fr/azur/tcoww/events/PhaseEvents.kt | 46 ++++++++++++----- .../fr/azur/tcoww/events/PowerEvents.kt | 13 ++--- src/main/kotlin/fr/azur/tcoww/game/Game.kt | 49 +++++++++---------- .../fr/azur/tcoww/game/NightLightCycle.kt | 34 +++++++------ .../kotlin/fr/azur/tcoww/items/CustomItems.kt | 25 ++++++---- .../fr/azur/tcoww/roles/FortuneTeller.kt | 2 +- src/main/kotlin/fr/azur/tcoww/roles/Hunter.kt | 2 +- src/main/kotlin/fr/azur/tcoww/roles/Role.kt | 33 +++++++------ .../kotlin/fr/azur/tcoww/roles/Werewolf.kt | 14 ++++-- src/main/kotlin/fr/azur/tcoww/roles/Witch.kt | 4 +- .../fr/azur/tcoww/ui/PlayerSelectMenu.kt | 11 ++++- .../kotlin/fr/azur/tcoww/utils/Players.kt | 2 +- .../fr/azur/tcoww/utils/VoiceChatPlugin.kt | 15 ++++++ .../fr/azur/tcoww/utils/skins/Manager.kt | 5 +- src/main/resources/paper-plugin.yml | 2 +- 17 files changed, 182 insertions(+), 101 deletions(-) diff --git a/src/main/kotlin/fr/azur/tcoww/Tcoww.kt b/src/main/kotlin/fr/azur/tcoww/Tcoww.kt index 5326485..9ee3510 100644 --- a/src/main/kotlin/fr/azur/tcoww/Tcoww.kt +++ b/src/main/kotlin/fr/azur/tcoww/Tcoww.kt @@ -2,6 +2,7 @@ package fr.azur.tcoww import de.maxhenkel.voicechat.api.BukkitVoicechatService import fr.azur.tcoww.events.GameEvents +import fr.azur.tcoww.events.PhaseEvents import fr.azur.tcoww.events.PowerEvents import fr.azur.tcoww.events.ToolsEvents import fr.azur.tcoww.events.UIEvents @@ -36,6 +37,7 @@ class Tcoww : JavaPlugin() { registerEvents(GameEvents, this@Tcoww) registerEvents(PowerEvents, this@Tcoww) registerEvents(ToolsEvents, this@Tcoww) + registerEvents(PhaseEvents, this@Tcoww) } val service = server.servicesManager.load(BukkitVoicechatService::class.java) @@ -44,7 +46,7 @@ class Tcoww : JavaPlugin() { registerRoles() val mainScoreboard = server.scoreboardManager.mainScoreboard - if (mainScoreboard.getTeam("NoCollide") == null) { + if (mainScoreboard.getTeam("NoCollision") == null) { val team = server.scoreboardManager.mainScoreboard.registerNewTeam("NoCollision") team.setOption(Team.Option.COLLISION_RULE, Team.OptionStatus.NEVER) } @@ -55,6 +57,7 @@ class Tcoww : JavaPlugin() { fun reload() { this.reloadConfig() + Manager.reloadSkin() } private fun registerRoles() { diff --git a/src/main/kotlin/fr/azur/tcoww/events/GameEvents.kt b/src/main/kotlin/fr/azur/tcoww/events/GameEvents.kt index 3f8b210..11af2a7 100644 --- a/src/main/kotlin/fr/azur/tcoww/events/GameEvents.kt +++ b/src/main/kotlin/fr/azur/tcoww/events/GameEvents.kt @@ -7,6 +7,7 @@ import fr.azur.tcoww.game.NightLightCycle import fr.azur.tcoww.roles.Child import fr.azur.tcoww.roles.Role import fr.azur.tcoww.roles.Role.Companion.werewolfRole +import fr.azur.tcoww.roles.Werewolf import fr.azur.tcoww.roles.Witch import fr.azur.tcoww.utils.DataKeys.Insomnia import fr.azur.tcoww.utils.DataKeys.PlayerDead @@ -28,6 +29,7 @@ import org.bukkit.event.EventHandler import org.bukkit.event.EventPriority import org.bukkit.event.Listener import org.bukkit.event.entity.EntityDamageByEntityEvent +import org.bukkit.event.entity.EntityRegainHealthEvent import org.bukkit.event.entity.PlayerDeathEvent import org.bukkit.event.player.PlayerBedEnterEvent import org.bukkit.event.player.PlayerBedLeaveEvent @@ -101,18 +103,17 @@ object GameEvents : Listener { PersistentDataType.INTEGER, ) == 2 && (it.itemMeta as Damageable).damage != 1 - } + } ?: return@callback if (player.persistentDataContainer.get( PlayerDead, PersistentDataType.BOOLEAN, - ) == true + ) == false ) { return@callback } - if (item == null) return@callback - (item.itemMeta as Damageable).damage = 1 + player.inventory.remove(item) player.persistentDataContainer.set( NamespacedKey("tcoww", "dead"), @@ -144,7 +145,7 @@ object GameEvents : Listener { @EventHandler fun onHit(event: EntityDamageByEntityEvent) { val current = Game.current ?: return - if (current.timeGestion.phase != NightLightCycle.Phase.NIGHT) return + if (current.timeGestion.phase != NightLightCycle.Phase.NIGHT || Werewolf.remainingKill < 1) return val damager = event.damager val target = event.entity @@ -159,6 +160,7 @@ object GameEvents : Listener { target.health = 0.0 target.persistentDataContainer.set(Insomnia, PersistentDataType.BOOLEAN, true) if (target.isSleeping) target.wakeup(false) + Werewolf.remainingKill-- } } @@ -244,4 +246,13 @@ object GameEvents : Listener { } } } + + @EventHandler + fun disablePotionRegen(event: EntityRegainHealthEvent) { + val player = event.entity as? Player ?: return + + if (player.hasPotionEffect(PotionEffectType.WITHER)) { + event.isCancelled = true + } + } } diff --git a/src/main/kotlin/fr/azur/tcoww/events/PhaseEvents.kt b/src/main/kotlin/fr/azur/tcoww/events/PhaseEvents.kt index 0855c31..e362d41 100644 --- a/src/main/kotlin/fr/azur/tcoww/events/PhaseEvents.kt +++ b/src/main/kotlin/fr/azur/tcoww/events/PhaseEvents.kt @@ -7,10 +7,12 @@ import fr.azur.tcoww.game.NightLightCycle import fr.azur.tcoww.roles.Child import fr.azur.tcoww.roles.Role import fr.azur.tcoww.roles.Role.Companion.werewolfRole +import fr.azur.tcoww.roles.Werewolf import fr.azur.tcoww.utils.BedGestion.isOccupied import fr.azur.tcoww.utils.DataKeys.Insomnia import fr.azur.tcoww.utils.DataKeys.PlayerDead import fr.azur.tcoww.utils.DataKeys.PowerItems +import fr.azur.tcoww.utils.Players.corpseKey import fr.azur.tcoww.utils.Players.isTransformed import fr.azur.tcoww.utils.Players.kill import fr.azur.tcoww.utils.Players.tfHuman @@ -59,23 +61,39 @@ object PhaseEvents : Listener { } NightLightCycle.Phase.VOTE -> { + event.world.entities + .filter { + it.persistentDataContainer.getOrDefault( + corpseKey, + PersistentDataType.BOOLEAN, + false, + ) + }.forEach { it.remove() } + event.world.players.forEach { player -> - player.sendMessage( - Component - .text("Le jour se couche, ce soir un vote est organisé.") - .color(NamedTextColor.DARK_AQUA) - .appendNewline() - .append( - Component - .text("Faite /vote pour voter.") - .color(NamedTextColor.AQUA), - ), - ) + if (event.dayCount >= 1) { + player.sendMessage( + Component + .text("Le jour se couche, ce soir un vote est organisé.") + .color(NamedTextColor.DARK_AQUA) + .appendNewline() + .append( + Component + .text("Faite /vote pour voter.") + .color(NamedTextColor.AQUA), + ), + ) + } else { + player.sendMessage( + Component + .text("Le jour se couche, ce soir aucun vote n'est organisé. Faute de preuve.", NamedTextColor.DARK_AQUA), + ) + } } } NightLightCycle.Phase.NIGHT -> { - if (Vote.vote.isNotEmpty()) { + if (Vote.vote.isNotEmpty() && current.timeGestion.dayCount >= 1) { val voteMap = Vote.vote.values .groupingBy { it } @@ -103,6 +121,8 @@ object PhaseEvents : Listener { Vote.vote.clear() } + Werewolf.remainingKill = 1 + event.world.players.forEach { player -> player.sendMessage( Component @@ -148,7 +168,7 @@ object PhaseEvents : Listener { } } }, - Tcoww.instance.config.getLong("player-sleep"), + Tcoww.instance.config.getLong("player-sleep") * 20, ) } diff --git a/src/main/kotlin/fr/azur/tcoww/events/PowerEvents.kt b/src/main/kotlin/fr/azur/tcoww/events/PowerEvents.kt index c08cb1c..2b91c18 100644 --- a/src/main/kotlin/fr/azur/tcoww/events/PowerEvents.kt +++ b/src/main/kotlin/fr/azur/tcoww/events/PowerEvents.kt @@ -18,7 +18,6 @@ import org.bukkit.event.Listener import org.bukkit.event.inventory.InventoryMoveItemEvent import org.bukkit.event.player.PlayerDropItemEvent import org.bukkit.event.player.PlayerInteractEvent -import org.bukkit.inventory.meta.Damageable import org.bukkit.persistence.PersistentDataType import org.bukkit.potion.PotionEffect import org.bukkit.potion.PotionEffectType @@ -51,10 +50,11 @@ object PowerEvents : Listener { fun clickEvent(event: PlayerInteractEvent) { val item = event.item ?: return val player = event.player + if (!item.persistentDataContainer.has(NamespacedKey("tcoww", "power"))) return + event.isCancelled = true if (player.hasCooldown(item)) return when (item.persistentDataContainer.get(NamespacedKey("tcoww", "power"), PersistentDataType.INTEGER)) { 1 -> { - if ((item.itemMeta as Damageable).damage == 1) return val current = Game.current ?: return val menu = PlayerSelectMenu(current.remainingPlayer) @@ -62,15 +62,13 @@ object PowerEvents : Listener { menu.future.whenComplete { selectedPlayer, _ -> val target = selectedPlayer ?: return@whenComplete - (item.itemMeta as Damageable).damage = 1 + player.inventory.remove(item) target.addPotionEffect(PotionEffect(PotionEffectType.WITHER, 600, 4)) } } 2 -> { - if ((item.itemMeta as Damageable).damage == 1) return val current = Game.current ?: return - val menu = PlayerSelectMenu( current.remainingPlayer.filter { @@ -85,7 +83,7 @@ object PowerEvents : Listener { menu.future.whenComplete { selectedPlayer, _ -> val target = selectedPlayer ?: return@whenComplete - (item.itemMeta as Damageable).damage = 1 + player.inventory.remove(item) target.persistentDataContainer.set( NamespacedKey("tcoww", "dead"), PersistentDataType.BOOLEAN, @@ -104,13 +102,12 @@ object PowerEvents : Listener { } 3 -> { - player.setCooldown(item, 600) - if (player.isTransformed()) { player.tfHuman() } else { player.tfWerewolf() } + player.setCooldown(item, 200) } 4 -> { diff --git a/src/main/kotlin/fr/azur/tcoww/game/Game.kt b/src/main/kotlin/fr/azur/tcoww/game/Game.kt index b77ef46..e08d13f 100644 --- a/src/main/kotlin/fr/azur/tcoww/game/Game.kt +++ b/src/main/kotlin/fr/azur/tcoww/game/Game.kt @@ -3,6 +3,8 @@ package fr.azur.tcoww.game import fr.azur.tcoww.Tcoww import fr.azur.tcoww.roles.Role import fr.azur.tcoww.roles.Role.Companion.werewolfRole +import fr.azur.tcoww.utils.DataKeys.Insomnia +import fr.azur.tcoww.utils.DataKeys.PlayerDead import fr.azur.tcoww.utils.Players.tfHuman import net.kyori.adventure.text.Component import net.kyori.adventure.text.format.NamedTextColor @@ -73,7 +75,7 @@ class Game( } fun checkGameEnd(): Boolean { - val team = players.map { player -> player.werewolfRole.team }.toSet() + val team = remainingPlayer.map { player -> player.werewolfRole.team }.toSet() return team.count() <= 1 } @@ -82,33 +84,26 @@ class Game( current = null timeGestion.stop() world.time = 18000 + + val endComponent = + Component + .text("La partie est terminée !", NamedTextColor.DARK_GREEN) + + val winComponent = + Component + .text("Victoire des ", NamedTextColor.DARK_GREEN) + .append(remainingPlayer[0].werewolfRole.team.displayName) + .append(Component.text(".", NamedTextColor.DARK_GREEN)) + players.forEach { player -> player.gameMode = GameMode.SPECTATOR - player.sendMessage( - Component - .text("La partie est terminée !", NamedTextColor.DARK_GREEN) - .appendNewline() - .apply { - if (!withoutResult) return@apply - remainingPlayer.forEachIndexed { index, player -> - append(player.displayName()) - if (index != remainingPlayer.lastIndex) { - append( - Component.text( - when (index) { - remainingPlayer.lastIndex - 1 -> " et " - else -> ", " - }, - NamedTextColor.DARK_GREEN, - ), - ) - } - - append(Component.text(" ont gagné !", NamedTextColor.DARK_GREEN)) - } - }, - ) + player.sendMessage(endComponent) + if (remainingPlayer[0].werewolfRole.team == Role.Team.Solo) { + TODO() + } else { + if (!withoutResult) player.sendMessage(winComponent) + } } val lobbyLoc = plugin.config.getLocation("lobby-location") Bukkit.getScheduler().runTaskLater( @@ -117,6 +112,10 @@ class Game( players.forEach { player -> if (lobbyLoc != null) player.teleport(lobbyLoc) player.gameMode = GameMode.ADVENTURE + player.persistentDataContainer.remove(PlayerDead) + player.persistentDataContainer.remove(Insomnia) + player.inventory.clear() + player.resetCooldown() } }, 200, diff --git a/src/main/kotlin/fr/azur/tcoww/game/NightLightCycle.kt b/src/main/kotlin/fr/azur/tcoww/game/NightLightCycle.kt index 0b75c99..52135c0 100644 --- a/src/main/kotlin/fr/azur/tcoww/game/NightLightCycle.kt +++ b/src/main/kotlin/fr/azur/tcoww/game/NightLightCycle.kt @@ -23,6 +23,7 @@ class NightLightCycle( val world: World, val newPhase: Phase, val duration: Duration, + val dayCount: Int, ) : Event() { override fun getHandlers(): HandlerList = handlerList @@ -55,19 +56,19 @@ class NightLightCycle( val duration = Duration.fromPlugin(plugin) - var targetInstant: Long + var targetInstant: Long = 0 + var tick: Float = 0F var tickOrigin: Int = 0 - var realDifference: Int - var tickDifference: Int + var realDifference: Long = 0 + var tickDifference: Int = 0 + var realOrigin: Long = 0 var dayCount: Int = 0 init { world.setGameRule(GameRule.DO_DAYLIGHT_CYCLE, false) - realDifference = duration.day * 1000 - targetInstant = System.currentTimeMillis() + realDifference.toLong() - tickDifference = 12_000 - Bukkit.getPluginManager().callEvent(NightLightCyclePhaseChangeEvent(world, phase, duration)) + + changePhase(Phase.DAY) process = Bukkit.getScheduler().runTaskTimer( @@ -81,44 +82,49 @@ class NightLightCycle( } fun changePhase(newPhase: Phase) { + realOrigin = System.currentTimeMillis() when (newPhase) { Phase.DAY -> { tickDifference = 12_000 tickOrigin = 0 - realDifference = duration.day * 1000 + realDifference = duration.day * 1000L } Phase.VOTE -> { tickDifference = 1_000 tickOrigin = 12_000 - realDifference = duration.vote * 1000 + realDifference = duration.vote * 1000L } Phase.NIGHT -> { - tickDifference = 11_000 + tickDifference = 10_000 tickOrigin = 13_000 - realDifference = duration.night * 1000 + realDifference = duration.night * 1000L } Phase.CREPUSCULAR -> { tickDifference = 1_000 tickOrigin = 23_000 - realDifference = duration.crepuscular * 1000 + realDifference = duration.crepuscular * 1000L } } targetInstant = System.currentTimeMillis() + realDifference + tick = tickDifference / realDifference.toFloat() phase = newPhase - Bukkit.getPluginManager().callEvent(NightLightCyclePhaseChangeEvent(world, newPhase, duration)) + Bukkit.getPluginManager().callEvent(NightLightCyclePhaseChangeEvent(world, newPhase, duration, dayCount)) } fun tick() { - if (System.currentTimeMillis() >= targetInstant) { + val realtime = System.currentTimeMillis() + if (realtime >= targetInstant) { val phase = phases[(phases.indexOf(phase) + 1) % phases.count()] if (phase == Phase.DAY) { dayCount += 1 } changePhase(phase) } + val result = tickOrigin + (realtime - realOrigin) * tick + world.time = result.toLong().coerceIn(0, 23999) } fun stop() { diff --git a/src/main/kotlin/fr/azur/tcoww/items/CustomItems.kt b/src/main/kotlin/fr/azur/tcoww/items/CustomItems.kt index 1728b14..06deb53 100644 --- a/src/main/kotlin/fr/azur/tcoww/items/CustomItems.kt +++ b/src/main/kotlin/fr/azur/tcoww/items/CustomItems.kt @@ -59,10 +59,13 @@ enum class CustomItems( BlasTechDL44(true, { ItemStack.of(Material.CROSSBOW).apply { itemMeta = - (itemMeta as DamageableCrossbow).apply { + (itemMeta as CrossbowMeta).apply { addChargedProjectile(GunBullet.item) displayName(Component.text("BlasTech DL-44", NamedTextColor.GOLD)) addEnchant(Enchantment.INFINITY, 1, true) + } + itemMeta = + (itemMeta as Damageable).apply { setMaxDamage(1) } } @@ -87,9 +90,9 @@ enum class CustomItems( DeathPotion(true, { ItemStack.of(Material.POTION).apply { itemMeta = - (itemMeta as DamageablePotion).apply { + (itemMeta as PotionMeta).apply { setMaxStackSize(1) - setMaxDamage(1) + customName( Component.text("Potion de poison", NamedTextColor.DARK_PURPLE), ) @@ -105,14 +108,18 @@ enum class CustomItems( ), ) } + itemMeta = + (itemMeta as Damageable).apply { + setMaxDamage(1) + } } }), HealPotion(true, { ItemStack.of(Material.POTION).apply { itemMeta = - (itemMeta as DamageablePotion).apply { + (itemMeta as PotionMeta).apply { setMaxStackSize(1) - setMaxDamage(1) + customName( Component.text("Potion de vie", NamedTextColor.DARK_PURPLE), ) @@ -124,6 +131,10 @@ enum class CustomItems( color = Color.RED lore(listOf(Component.text("Click droit pour utiliser.", NamedTextColor.GOLD))) } + itemMeta = + (itemMeta as Damageable).apply { + setMaxDamage(1) + } } }), SpawnLocTool(true, { @@ -230,10 +241,6 @@ enum class CustomItems( } } - interface DamageableCrossbow : - Damageable, - CrossbowMeta - interface DamageablePotion : Damageable, PotionMeta { diff --git a/src/main/kotlin/fr/azur/tcoww/roles/FortuneTeller.kt b/src/main/kotlin/fr/azur/tcoww/roles/FortuneTeller.kt index e2b356d..e90038d 100644 --- a/src/main/kotlin/fr/azur/tcoww/roles/FortuneTeller.kt +++ b/src/main/kotlin/fr/azur/tcoww/roles/FortuneTeller.kt @@ -9,7 +9,7 @@ import org.bukkit.entity.Player object FortuneTeller : Role { override fun handle(player: Player) { - player.inventory.addItem(CustomItems.CrystalBall.item) + player.inventory.setItem(9, CustomItems.CrystalBall.item) } override val team = Role.Team.Villager diff --git a/src/main/kotlin/fr/azur/tcoww/roles/Hunter.kt b/src/main/kotlin/fr/azur/tcoww/roles/Hunter.kt index 2830960..d582045 100644 --- a/src/main/kotlin/fr/azur/tcoww/roles/Hunter.kt +++ b/src/main/kotlin/fr/azur/tcoww/roles/Hunter.kt @@ -9,7 +9,7 @@ import org.bukkit.entity.Player object Hunter : Role { override fun handle(player: Player) { - player.inventory.addItem(CustomItems.BlasTechDL44.item) + player.inventory.setItem(9, CustomItems.BlasTechDL44.item) } override val team = Role.Team.Villager diff --git a/src/main/kotlin/fr/azur/tcoww/roles/Role.kt b/src/main/kotlin/fr/azur/tcoww/roles/Role.kt index a5c6b72..15bd94c 100644 --- a/src/main/kotlin/fr/azur/tcoww/roles/Role.kt +++ b/src/main/kotlin/fr/azur/tcoww/roles/Role.kt @@ -1,6 +1,7 @@ package fr.azur.tcoww.roles import net.kyori.adventure.text.Component +import net.kyori.adventure.text.JoinConfiguration import net.kyori.adventure.text.format.NamedTextColor import org.bukkit.Material import org.bukkit.NamespacedKey @@ -37,12 +38,13 @@ interface Role { val description: List val lineDescription: Component get() { - return Component.empty().apply { - description.forEach { - append(it) - appendNewline() - } - } + val joinConfig = + JoinConfiguration + .builder() + .separator(Component.newline()) + .build() + + return Component.join(joinConfig, description) } companion object { @@ -56,19 +58,20 @@ interface Role { player.sendMessage( Component.text("Votre role est ", NamedTextColor.DARK_AQUA).append(role.displayName), ) + player.sendMessage(role.lineDescription) player.sendMessage( - role.lineDescription.append { - if (role.team == Team.Solo) { - Component.text("Vous gagnez Seul.", NamedTextColor.AQUA) - } else { - Component - .text("Vous gagnez avec les ", NamedTextColor.AQUA) - .append(role.team.displayName) - .append(Component.text(".", NamedTextColor.AQUA)) - } + if (role.team == Team.Solo) { + Component.text("Vous gagnez Seul.", NamedTextColor.AQUA) + } else { + Component + .text("Vous gagnez avec les ", NamedTextColor.AQUA) + .append(role.team.displayName) + .append(Component.text(".", NamedTextColor.AQUA)) }, ) + role.handle(player) + player.persistentDataContainer.set(roleKey, PersistentDataType.STRING, role.id.toString()) } diff --git a/src/main/kotlin/fr/azur/tcoww/roles/Werewolf.kt b/src/main/kotlin/fr/azur/tcoww/roles/Werewolf.kt index 3a7bf37..e05eeec 100644 --- a/src/main/kotlin/fr/azur/tcoww/roles/Werewolf.kt +++ b/src/main/kotlin/fr/azur/tcoww/roles/Werewolf.kt @@ -9,6 +9,7 @@ import org.bukkit.NamespacedKey import org.bukkit.entity.Player object Werewolf : Role { + var remainingKill = 0 override val team = Role.Team.LG override var id = NamespacedKey("tcoww", "werewolf") override val displayName = Component.text("Loup-Garou", NamedTextColor.DARK_GRAY) @@ -19,14 +20,21 @@ object Werewolf : Role { listOf( Component.text("Pour la faire courte, vous avez faim, très faim.", NamedTextColor.BLUE), Component.text( - "Votre but est de tuer les villageois. Sans vous faire atraper et voter. Toute les nuits, vous pouvez vous tranformer en loup pour manger un villageois.", + "Votre but est de tuer les villageois. Sans vous faire atraper et voter.", + NamedTextColor.BLUE, + ), + Component.text( + "Toute les nuits, vous pouvez vous tranformer en loup pour manger un villageois.", NamedTextColor.BLUE, ), ) override fun handle(player: Player) { val tfItem = CustomItems.WereWolfTransformItem.item - player.inventory.addItem(tfItem) - player.setCooldown(tfItem, ((Tcoww.instance.config.getInt("duration.day") + Tcoww.instance.config.getInt("duration.day")) * 20)) + player.inventory.setItem(9, tfItem) + player.setCooldown( + tfItem, + ((Tcoww.instance.config.getInt("duration.day") + Tcoww.instance.config.getInt("duration.day")) * 20), + ) } } diff --git a/src/main/kotlin/fr/azur/tcoww/roles/Witch.kt b/src/main/kotlin/fr/azur/tcoww/roles/Witch.kt index 6d8ca22..942d680 100644 --- a/src/main/kotlin/fr/azur/tcoww/roles/Witch.kt +++ b/src/main/kotlin/fr/azur/tcoww/roles/Witch.kt @@ -9,8 +9,8 @@ import org.bukkit.entity.Player object Witch : Role { override fun handle(player: Player) { - player.inventory.addItem(CustomItems.DeathPotion.item) - player.inventory.addItem(CustomItems.HealPotion.item) + player.inventory.setItem(9, CustomItems.DeathPotion.item) + player.inventory.setItem(10, CustomItems.HealPotion.item) } override val team = Role.Team.Villager diff --git a/src/main/kotlin/fr/azur/tcoww/ui/PlayerSelectMenu.kt b/src/main/kotlin/fr/azur/tcoww/ui/PlayerSelectMenu.kt index 011b386..6460474 100644 --- a/src/main/kotlin/fr/azur/tcoww/ui/PlayerSelectMenu.kt +++ b/src/main/kotlin/fr/azur/tcoww/ui/PlayerSelectMenu.kt @@ -1,6 +1,8 @@ package fr.azur.tcoww.ui import fr.azur.tcoww.Tcoww +import fr.azur.tcoww.utils.Players.isTransformed +import fr.azur.tcoww.utils.skins.Manager import net.kyori.adventure.text.Component import net.kyori.adventure.text.format.NamedTextColor import org.bukkit.Material @@ -25,7 +27,12 @@ class PlayerSelectMenu( ItemStack.of(Material.PLAYER_HEAD).apply { itemMeta = (itemMeta as SkullMeta).apply { - playerProfile = player.playerProfile + playerProfile = + if (player.isTransformed()) { + Manager.oldPlayerProfile[player.uniqueId] + } else { + player.playerProfile + } } } setItem(index, item) @@ -36,8 +43,10 @@ class PlayerSelectMenu( override fun onClick(event: InventoryClickEvent) { val index = event.slot + event.isCancelled = true if (index !in 0..() + var oldPlayerProfile = mutableMapOf() var wwPlayerFur = mutableMapOf() fun handle() { @@ -32,13 +34,14 @@ object Manager { maxSkinId = skinsValue.size skinsValue.forEachIndexed { index, skin -> - skinsRestorer.skinStorage.setCustomSkinData("tcoww$index", SkinProperty.of(skin.value, skin.signature)) + 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() + oldPlayerProfile[player.uniqueId] = player.playerProfile val result = skinsRestorer.skinStorage.findOrCreateSkinData("tcoww_${getWerewolfFur(player.uniqueId)}") diff --git a/src/main/resources/paper-plugin.yml b/src/main/resources/paper-plugin.yml index d1072db..4ae8025 100644 --- a/src/main/resources/paper-plugin.yml +++ b/src/main/resources/paper-plugin.yml @@ -1,5 +1,5 @@ name: tcoww -version: '1.0-SNAPSHOT' +version: '1.2.0' main: fr.azur.tcoww.Tcoww api-version: '1.21' load: POSTWORLD