init 11
This commit is contained in:
@@ -17,6 +17,7 @@ import org.bukkit.scheduler.BukkitRunnable
|
||||
import org.bukkit.scheduler.BukkitTask
|
||||
import org.bukkit.scoreboard.Team
|
||||
import xyz.fortern.minehunt.rule.RuleItem
|
||||
import java.util.*
|
||||
import java.util.concurrent.ConcurrentHashMap
|
||||
|
||||
/**
|
||||
@@ -61,6 +62,11 @@ class Console {
|
||||
*/
|
||||
private val spectatorSet: MutableSet<Player> = HashSet()
|
||||
|
||||
/**
|
||||
* 淘汰玩家集合
|
||||
*/
|
||||
private val outPlayers: MutableSet<UUID> = HashSet()
|
||||
|
||||
/**
|
||||
* 终止游戏的投票统计
|
||||
*/
|
||||
@@ -360,7 +366,7 @@ class Console {
|
||||
// 统计参与投票的玩家
|
||||
speedrunnerSet.forEach {
|
||||
// 生存模式的速通者统计进来
|
||||
if (it.isOnline && it.gameMode == GameMode.SURVIVAL) {
|
||||
if (it.isOnline && !outPlayers.contains(it.uniqueId)) {
|
||||
votingEndMap[it.name] = false
|
||||
}
|
||||
}
|
||||
@@ -386,29 +392,31 @@ class Console {
|
||||
}
|
||||
// 投票完成,游戏结束
|
||||
Bukkit.getOnlinePlayers().forEach {
|
||||
it.sendMessage(Component.text("投票完成,游戏结束", NamedTextColor.GOLD))
|
||||
it.sendMessage(Component.text("--------投票完成--------", NamedTextColor.GOLD))
|
||||
}
|
||||
end()
|
||||
end(null)
|
||||
}
|
||||
|
||||
/**
|
||||
* 结束处理
|
||||
*/
|
||||
private fun end() {
|
||||
// TODO 延迟传送至出生点
|
||||
|
||||
// 取消剩余的复活任务
|
||||
val iterator = hunterRespawnTasks.iterator()
|
||||
while (iterator.hasNext()) {
|
||||
iterator.next().value.cancel()
|
||||
iterator.remove()
|
||||
}
|
||||
// 所有人传送至出生点,设为生存模式
|
||||
Bukkit.getOnlinePlayers().forEach {
|
||||
it.gameMode = GameMode.SURVIVAL
|
||||
it.teleport(overworld.spawnLocation)
|
||||
}
|
||||
fun end(winner: String?) {
|
||||
stage = GameStage.OVER
|
||||
// 所有人设为生存模式
|
||||
Bukkit.getOnlinePlayers().forEach {
|
||||
it.sendMessage(Component.text("--------游戏结束--------", NamedTextColor.GREEN))
|
||||
if (winner != null) {
|
||||
it.sendMessage(Component.text("获胜者:$winner", NamedTextColor.GOLD))
|
||||
} else {
|
||||
it.sendMessage(Component.text("没有赢家", NamedTextColor.GOLD))
|
||||
}
|
||||
it.gameMode = GameMode.SURVIVAL
|
||||
}
|
||||
// 取消剩余的复活任务
|
||||
hunterRespawnTasks.forEach {
|
||||
it.value.cancel()
|
||||
}
|
||||
hunterRespawnTasks.clear()
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -429,7 +437,7 @@ class Console {
|
||||
j++
|
||||
j %= speedrunnerList.size
|
||||
val speedrunner = speedrunnerList[i]
|
||||
if (speedrunner.gameMode == GameMode.SURVIVAL && speedrunner.isOnline || i == j) {
|
||||
if (!outPlayers.contains(speedrunner.uniqueId) && speedrunner.isOnline || i == j) {
|
||||
trackRunnerMap[playerName] = j
|
||||
break
|
||||
}
|
||||
@@ -440,11 +448,15 @@ class Console {
|
||||
* 处理玩家死亡
|
||||
*/
|
||||
fun handlePlayerDeath(player: Player) {
|
||||
if (isHunter(player)) {
|
||||
// 猎人置为旁观者模式
|
||||
if (isSpeedrunner(player)) {
|
||||
// 速通者置为旁观者模式,加入淘汰名单
|
||||
player.gameMode = GameMode.SPECTATOR
|
||||
} else if (isSpeedrunner(player)) {
|
||||
// 猎人置为旁观者模式
|
||||
outPlayers.add(player.uniqueId)
|
||||
if (outPlayers.size == hunterSet.size) {
|
||||
end("hunter")
|
||||
}
|
||||
} else if (isHunter(player)) {
|
||||
// 猎人置为旁观者模式,稍后复活
|
||||
player.gameMode = GameMode.SPECTATOR
|
||||
val task = Bukkit.getScheduler().runTaskLater(Minehunt.instance(), Runnable {
|
||||
player.gameMode = GameMode.SURVIVAL
|
||||
|
||||
@@ -2,9 +2,13 @@ package xyz.fortern.minehunt.command
|
||||
|
||||
import net.kyori.adventure.text.Component
|
||||
import org.bukkit.Bukkit
|
||||
import org.bukkit.Material
|
||||
import org.bukkit.command.Command
|
||||
import org.bukkit.command.CommandExecutor
|
||||
import org.bukkit.command.CommandSender
|
||||
import org.bukkit.enchantments.Enchantment
|
||||
import org.bukkit.entity.Player
|
||||
import org.bukkit.inventory.ItemStack
|
||||
|
||||
/**
|
||||
* 开发过程中的测试命令
|
||||
@@ -39,7 +43,21 @@ class TestCommand : CommandExecutor {
|
||||
else
|
||||
sender.sendMessage("玩家 $name 不存在")
|
||||
}
|
||||
// 获得32k
|
||||
"get32k" -> {
|
||||
if (sender is Player) {
|
||||
sender.give(
|
||||
// 锋利等级被限制为255
|
||||
ItemStack(Material.DIAMOND_SWORD).apply {
|
||||
this.addUnsafeEnchantment(
|
||||
Enchantment.SHARPNESS,
|
||||
32000
|
||||
)
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
package xyz.fortern.minehunt.listener
|
||||
|
||||
import org.bukkit.GameMode
|
||||
import org.bukkit.entity.EnderDragon
|
||||
import org.bukkit.event.EventHandler
|
||||
import org.bukkit.event.Listener
|
||||
import org.bukkit.event.entity.EntityDeathEvent
|
||||
import org.bukkit.event.entity.PlayerDeathEvent
|
||||
import org.bukkit.event.player.PlayerDropItemEvent
|
||||
import org.bukkit.event.player.PlayerJoinEvent
|
||||
@@ -74,4 +76,14 @@ class PlayerListener(
|
||||
console.handlePlayerDeath(player)
|
||||
}
|
||||
|
||||
/**
|
||||
* 末影龙死亡事件
|
||||
*/
|
||||
@EventHandler
|
||||
fun onDragonDeath(event: EntityDeathEvent) {
|
||||
if (event.entity is EnderDragon && console.stage == GameStage.PROCESSING) {
|
||||
console.end("speedrunner")
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user