diff --git a/build.gradle.kts b/build.gradle.kts index d27cce7..fb3323a 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - kotlin("jvm") version "2.1.0" + kotlin("jvm") version "2.1.10" id("com.gradleup.shadow") version "8.3.5" } diff --git a/src/main/kotlin/xyz/fortern/minehunt/Console.kt b/src/main/kotlin/xyz/fortern/minehunt/Console.kt index 180e7a3..45ca821 100644 --- a/src/main/kotlin/xyz/fortern/minehunt/Console.kt +++ b/src/main/kotlin/xyz/fortern/minehunt/Console.kt @@ -110,12 +110,12 @@ class Console { private lateinit var speedrunnerList: List /** - * 玩家离开主世界时最后的位置 + * 速通者离开主世界时最后的位置 */ private val playerLocInWorld: MutableMap = HashMap() /** - * 玩家离开下界时最后的位置 + * 速通者离开下界时最后的位置 */ private val playerLocInNether: MutableMap = HashMap() @@ -258,7 +258,7 @@ class Console { * 加入观众阵营 */ fun joinAudience(player: Player) { - if (stage == GameStage.PREPARING && beginningCountdown == null) { + if (stage == GameStage.PREPARING) { audienceTeam.addPlayer(player) player.sendMessage(Component.text("你已加入[观众]")) } @@ -442,7 +442,7 @@ class Console { } votingEndMap[player.uniqueId] = true votingCount++ - player.sendMessage(Component.text("voting (${votingCount}/${votingEndMap.size})", NamedTextColor.RED)) + player.sendMessage(Component.text("Voting (${votingCount}/${votingEndMap.size})", NamedTextColor.RED)) if (votingCount != votingEndMap.size) { return } @@ -536,7 +536,15 @@ class Console { // 让指南针指向某一个猎人 val meta = itemStack.itemMeta as CompassMeta meta.isLodestoneTracked = false - meta.lodestone = speedrunner.location + if (hunter.world.uid == speedrunner.world.uid) { + meta.lodestone = speedrunner.location + } else if (hunter.world.uid == overworld.uid) { + meta.lodestone = playerLocInWorld[speedrunner.uniqueId] + } else if (hunter.world.uid == nether.uid) { + meta.lodestone = playerLocInNether[speedrunner.uniqueId] + } else { + meta.lodestone = null + } itemStack.itemMeta = meta itemStack.amount = 1 } @@ -630,7 +638,19 @@ class Console { */ fun giveCompassIfNeed(player: Player) { if (stage == GameStage.PROCESSING && isHunter(player)) { - player.give(hunterCompass) + val items = player.inventory.all(Material.COMPASS) + var have = false + for (item in items) { + if (item.value.lore().isNullOrEmpty()) continue + val component = item.value.lore()!![0] + if (component is TextComponent && component.content() == compassFlag) { + have = true + break + } + } + if (!have) { + player.give(hunterCompass) + } } } diff --git a/src/main/kotlin/xyz/fortern/minehunt/listener/PlayerListener.kt b/src/main/kotlin/xyz/fortern/minehunt/listener/PlayerListener.kt index 2226004..010d9ab 100644 --- a/src/main/kotlin/xyz/fortern/minehunt/listener/PlayerListener.kt +++ b/src/main/kotlin/xyz/fortern/minehunt/listener/PlayerListener.kt @@ -26,11 +26,11 @@ class PlayerListener( @EventHandler fun onPlayerJoin(event: PlayerJoinEvent) { val player = event.player - if (console.stage == GameStage.PREPARING && console.beginningCountdown == null) { + if (console.stage == GameStage.PREPARING) { // 在准备阶段,玩家设为冒险模式 player.gameMode = GameMode.ADVENTURE // 自动加入观察者队伍 - console.audienceTeam.addPlayer(player) + console.joinAudience(player) } }