init 23
This commit is contained in:
@@ -3,8 +3,6 @@ package xyz.fortern.minehunt
|
|||||||
import net.kyori.adventure.text.Component
|
import net.kyori.adventure.text.Component
|
||||||
import net.kyori.adventure.text.TextComponent
|
import net.kyori.adventure.text.TextComponent
|
||||||
import net.kyori.adventure.text.format.NamedTextColor
|
import net.kyori.adventure.text.format.NamedTextColor
|
||||||
import net.kyori.adventure.text.format.Style
|
|
||||||
import net.kyori.adventure.text.format.TextDecoration
|
|
||||||
import net.kyori.adventure.title.Title
|
import net.kyori.adventure.title.Title
|
||||||
import net.kyori.adventure.util.Ticks
|
import net.kyori.adventure.util.Ticks
|
||||||
import org.bukkit.Bukkit
|
import org.bukkit.Bukkit
|
||||||
@@ -517,9 +515,9 @@ class Console {
|
|||||||
val speedrunner = Bukkit.getPlayer(uuid)
|
val speedrunner = Bukkit.getPlayer(uuid)
|
||||||
if (!outPlayers.contains(uuid) && speedrunner != null) {
|
if (!outPlayers.contains(uuid) && speedrunner != null) {
|
||||||
trackRunnerMap[hunter.uniqueId] = j
|
trackRunnerMap[hunter.uniqueId] = j
|
||||||
val location = speedrunner.location
|
|
||||||
// hunter操作指南针时立即刷新位置
|
// hunter操作指南针时立即刷新位置
|
||||||
refreshCompassTrack(hunter, speedrunner)
|
refreshCompassTrack(hunter, speedrunner)
|
||||||
|
hunter.sendActionBar(Component.text("指向 ${speedrunner.name}"))
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -529,12 +527,11 @@ class Console {
|
|||||||
* 使hunter的指南针指向此时speedrunner的位置
|
* 使hunter的指南针指向此时speedrunner的位置
|
||||||
*/
|
*/
|
||||||
private fun refreshCompassTrack(hunter: Player, speedrunner: Player) {
|
private fun refreshCompassTrack(hunter: Player, speedrunner: Player) {
|
||||||
val items = hunter.inventory.all(hunterCompass)
|
val items = hunter.inventory.all(Material.COMPASS)
|
||||||
items.firstNotNullOf { (_, itemStack) ->
|
items.firstNotNullOfOrNull { (_, itemStack) ->
|
||||||
val lore = itemStack.lore()
|
if (itemStack.lore().isNullOrEmpty()) return@firstNotNullOfOrNull
|
||||||
if (lore.isNullOrEmpty()) return@firstNotNullOf
|
|
||||||
|
|
||||||
val component = lore[0]
|
val component = itemStack.lore()!![0]
|
||||||
if (component is TextComponent && component.content() == compassFlag) {
|
if (component is TextComponent && component.content() == compassFlag) {
|
||||||
// 让指南针指向某一个猎人
|
// 让指南针指向某一个猎人
|
||||||
val meta = itemStack.itemMeta as CompassMeta
|
val meta = itemStack.itemMeta as CompassMeta
|
||||||
@@ -557,10 +554,6 @@ class Console {
|
|||||||
// 速通者置为旁观者模式,加入淘汰名单
|
// 速通者置为旁观者模式,加入淘汰名单
|
||||||
player.gameMode = GameMode.SPECTATOR
|
player.gameMode = GameMode.SPECTATOR
|
||||||
outPlayers.add(uuid)
|
outPlayers.add(uuid)
|
||||||
// 给淘汰的玩家名字上加删除线
|
|
||||||
val playerListName = player.playerListName()
|
|
||||||
playerListName.style(Style.style(TextDecoration.STRIKETHROUGH))
|
|
||||||
player.playerListName(playerListName)
|
|
||||||
// 如给所有hunter都淘汰,则游戏结束
|
// 如给所有hunter都淘汰,则游戏结束
|
||||||
if (outPlayers.size == speedrunnerSet.size) {
|
if (outPlayers.size == speedrunnerSet.size) {
|
||||||
Bukkit.getScheduler().runTaskLater(Minehunt.instance(), Runnable { end("Hunter") }, 0)
|
Bukkit.getScheduler().runTaskLater(Minehunt.instance(), Runnable { end("Hunter") }, 0)
|
||||||
@@ -632,6 +625,15 @@ class Console {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 给予猎人追踪指南针
|
||||||
|
*/
|
||||||
|
fun giveCompassIfNeed(player: Player) {
|
||||||
|
if (stage == GameStage.PROCESSING && isHunter(player)) {
|
||||||
|
player.give(hunterCompass)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 游戏阶段
|
* 游戏阶段
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -17,9 +17,10 @@ class MinehuntCommand(
|
|||||||
private val console: Console
|
private val console: Console
|
||||||
) : TabExecutor {
|
) : TabExecutor {
|
||||||
|
|
||||||
private val subCommands: List<String> = listOf("help", "join", "leave", "rule", "start", "stop")
|
private val subCommands: List<String> = listOf("help", "join", "leave", "rule", "start", "stop", "give")
|
||||||
private val teams: List<String> = listOf("hunter", "speedrunner", "spectator")
|
private val teams: List<String> = listOf("hunter", "speedrunner", "spectator")
|
||||||
private val rules: List<String> = listOf("hunter_respawn_cd", "hunter_ready_cd", "friendly_fire")
|
private val rules: List<String> = listOf("hunter_respawn_cd", "hunter_ready_cd", "friendly_fire")
|
||||||
|
private val items: List<String> = listOf("compass")
|
||||||
|
|
||||||
private val helpMessages = listOf(
|
private val helpMessages = listOf(
|
||||||
Component.text("Minehunt v${Minehunt.instance().pluginMeta.version}", NamedTextColor.GREEN),
|
Component.text("Minehunt v${Minehunt.instance().pluginMeta.version}", NamedTextColor.GREEN),
|
||||||
@@ -29,18 +30,20 @@ class MinehuntCommand(
|
|||||||
.append(Component.text("加入一个阵营", NamedTextColor.WHITE)),
|
.append(Component.text("加入一个阵营", NamedTextColor.WHITE)),
|
||||||
Component.text("/minehunt leave ", NamedTextColor.GOLD)
|
Component.text("/minehunt leave ", NamedTextColor.GOLD)
|
||||||
.append(Component.text("加入观察者阵营", NamedTextColor.WHITE)),
|
.append(Component.text("加入观察者阵营", NamedTextColor.WHITE)),
|
||||||
Component.text("/minehunt rule ", NamedTextColor.GOLD)
|
Component.text("/minehunt rule <ruleKey> ", NamedTextColor.GOLD)
|
||||||
.append(Component.text("查看或修改游戏规则", NamedTextColor.WHITE)),
|
.append(Component.text("查看或修改游戏规则", NamedTextColor.WHITE)),
|
||||||
Component.text("/minehunt start ", NamedTextColor.GOLD)
|
Component.text("/minehunt start ", NamedTextColor.GOLD)
|
||||||
.append(Component.text("开始游戏", NamedTextColor.WHITE)),
|
.append(Component.text("开始游戏", NamedTextColor.WHITE)),
|
||||||
Component.text("/minehunt stop ", NamedTextColor.GOLD)
|
Component.text("/minehunt stop ", NamedTextColor.GOLD)
|
||||||
.append(Component.text("进行中止游戏的投票", NamedTextColor.WHITE))
|
.append(Component.text("进行中止游戏的投票", NamedTextColor.WHITE)),
|
||||||
|
Component.text("/minehunt give ", NamedTextColor.GOLD)
|
||||||
|
.append(Component.text("给予游戏中所需的特殊物品", NamedTextColor.WHITE)),
|
||||||
)
|
)
|
||||||
private val ruleHelpMessages = listOf(
|
private val ruleHelpMessages = listOf(
|
||||||
Component.text("/minehunt rule <ruleItem> ", NamedTextColor.GREEN)
|
Component.text("/minehunt rule <ruleItem> ", NamedTextColor.GREEN)
|
||||||
.append(Component.text("查看一项规则的详情", NamedTextColor.WHITE)),
|
.append(Component.text("查看一项规则的详情", NamedTextColor.WHITE)),
|
||||||
Component.text("/minehunt rule <ruleItem> <value> ", NamedTextColor.GREEN)
|
Component.text("/minehunt rule <ruleItem> <value> ", NamedTextColor.GREEN)
|
||||||
.append(Component.text("为一项规则设置新的值", NamedTextColor.WHITE))
|
.append(Component.text("为一项规则设置新的值", NamedTextColor.WHITE)),
|
||||||
)
|
)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -112,6 +115,10 @@ class MinehuntCommand(
|
|||||||
onStop(sender, flag)
|
onStop(sender, flag)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
"give" -> {
|
||||||
|
onGive(sender, args, flag)
|
||||||
|
}
|
||||||
|
|
||||||
else -> {
|
else -> {
|
||||||
if (flag) {
|
if (flag) {
|
||||||
sender.sendMessage(Component.text("错误的子命令"))
|
sender.sendMessage(Component.text("错误的子命令"))
|
||||||
@@ -301,14 +308,50 @@ class MinehuntCommand(
|
|||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 给予玩家特殊物品
|
||||||
|
*/
|
||||||
|
private fun onGive(sender: CommandSender, args: List<String>, flag: Boolean): List<String>? {
|
||||||
|
// args[0] == give
|
||||||
|
if (args.size == 1) {
|
||||||
|
if (flag) {
|
||||||
|
sender.sendMessage("缺少参数")
|
||||||
|
}
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
val item = args[1]
|
||||||
|
if (flag) {
|
||||||
|
if (sender !is Player) {
|
||||||
|
sender.sendMessage(Component.text("The sender is not a player.", NamedTextColor.RED))
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
when (item) {
|
||||||
|
"compass" -> {
|
||||||
|
console.giveCompassIfNeed(sender)
|
||||||
|
}
|
||||||
|
|
||||||
|
else -> {
|
||||||
|
sender.sendMessage(Component.text("输入正确的队伍名称", NamedTextColor.RED))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null
|
||||||
|
} else {
|
||||||
|
if (args.size == 2) {
|
||||||
|
return items.filter { it.startsWith(item) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 发送规则详情
|
* 发送规则详情
|
||||||
*/
|
*/
|
||||||
private fun sendRuleInfo(sender: CommandSender, ruleKey: RuleKey<*>) {
|
private fun sendRuleInfo(sender: CommandSender, ruleKey: RuleKey<*>) {
|
||||||
sender.sendMessage("游戏规则: " + ruleKey.name)
|
sender.sendMessage(Component.text("游戏规则: ${ruleKey.name}"))
|
||||||
sender.sendMessage("描述: " + ruleKey.info)
|
sender.sendMessage(Component.text("描述: ${ruleKey.info}"))
|
||||||
sender.sendMessage("值类型: " + ruleKey.typeInfo)
|
sender.sendMessage(Component.text("值类型: ${ruleKey.typeInfo}"))
|
||||||
sender.sendMessage("数值: " + console.gameRules.getRuleValue(ruleKey))
|
sender.sendMessage(Component.text("数值: ${console.gameRules.getRuleValue(ruleKey)}"))
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import org.bukkit.event.player.PlayerMoveEvent
|
|||||||
import org.bukkit.event.player.PlayerPortalEvent
|
import org.bukkit.event.player.PlayerPortalEvent
|
||||||
import org.bukkit.event.player.PlayerQuitEvent
|
import org.bukkit.event.player.PlayerQuitEvent
|
||||||
import org.bukkit.event.player.PlayerTeleportEvent
|
import org.bukkit.event.player.PlayerTeleportEvent
|
||||||
|
import org.spigotmc.event.player.PlayerSpawnLocationEvent
|
||||||
import xyz.fortern.minehunt.Console
|
import xyz.fortern.minehunt.Console
|
||||||
import xyz.fortern.minehunt.Console.GameStage
|
import xyz.fortern.minehunt.Console.GameStage
|
||||||
|
|
||||||
@@ -25,8 +26,7 @@ class PlayerListener(
|
|||||||
@EventHandler
|
@EventHandler
|
||||||
fun onPlayerJoin(event: PlayerJoinEvent) {
|
fun onPlayerJoin(event: PlayerJoinEvent) {
|
||||||
val player = event.player
|
val player = event.player
|
||||||
val stage = console.stage
|
if (console.stage == GameStage.PREPARING && console.beginningCountdown == null) {
|
||||||
if (stage == GameStage.PREPARING && console.beginningCountdown == null) {
|
|
||||||
// 在准备阶段,玩家设为冒险模式
|
// 在准备阶段,玩家设为冒险模式
|
||||||
player.gameMode = GameMode.ADVENTURE
|
player.gameMode = GameMode.ADVENTURE
|
||||||
// 自动加入观察者队伍
|
// 自动加入观察者队伍
|
||||||
@@ -40,15 +40,21 @@ class PlayerListener(
|
|||||||
@EventHandler
|
@EventHandler
|
||||||
fun onPlayerQuit(event: PlayerQuitEvent) {
|
fun onPlayerQuit(event: PlayerQuitEvent) {
|
||||||
val player = event.player
|
val player = event.player
|
||||||
val stage = console.stage
|
if (console.stage == GameStage.PREPARING) {
|
||||||
if (stage == GameStage.PREPARING) {
|
|
||||||
if (console.beginningCountdown != null && (console.isHunter(player) || console.isSpeedrunner(player))) {
|
if (console.beginningCountdown != null && (console.isHunter(player) || console.isSpeedrunner(player))) {
|
||||||
console.interruptCountdownToStart()
|
console.interruptCountdownToStart()
|
||||||
}
|
}
|
||||||
// 将离开的玩家从team中移除
|
// 将离开的玩家从team中移除
|
||||||
player.scoreboard.teams.forEach { it.removePlayer(player) }
|
player.scoreboard.teams.forEach { it.removePlayer(player) }
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 猎人重生时给予追踪指南针
|
||||||
|
*/
|
||||||
|
@EventHandler
|
||||||
|
fun onPlayerSpawn(event: PlayerSpawnLocationEvent) {
|
||||||
|
console.giveCompassIfNeed(event.player)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user