init 11
This commit is contained in:
@@ -17,6 +17,7 @@ import org.bukkit.scheduler.BukkitRunnable
|
|||||||
import org.bukkit.scheduler.BukkitTask
|
import org.bukkit.scheduler.BukkitTask
|
||||||
import org.bukkit.scoreboard.Team
|
import org.bukkit.scoreboard.Team
|
||||||
import xyz.fortern.minehunt.rule.RuleItem
|
import xyz.fortern.minehunt.rule.RuleItem
|
||||||
|
import java.util.*
|
||||||
import java.util.concurrent.ConcurrentHashMap
|
import java.util.concurrent.ConcurrentHashMap
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -61,6 +62,11 @@ class Console {
|
|||||||
*/
|
*/
|
||||||
private val spectatorSet: MutableSet<Player> = HashSet()
|
private val spectatorSet: MutableSet<Player> = HashSet()
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 淘汰玩家集合
|
||||||
|
*/
|
||||||
|
private val outPlayers: MutableSet<UUID> = HashSet()
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 终止游戏的投票统计
|
* 终止游戏的投票统计
|
||||||
*/
|
*/
|
||||||
@@ -360,7 +366,7 @@ class Console {
|
|||||||
// 统计参与投票的玩家
|
// 统计参与投票的玩家
|
||||||
speedrunnerSet.forEach {
|
speedrunnerSet.forEach {
|
||||||
// 生存模式的速通者统计进来
|
// 生存模式的速通者统计进来
|
||||||
if (it.isOnline && it.gameMode == GameMode.SURVIVAL) {
|
if (it.isOnline && !outPlayers.contains(it.uniqueId)) {
|
||||||
votingEndMap[it.name] = false
|
votingEndMap[it.name] = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -386,29 +392,31 @@ class Console {
|
|||||||
}
|
}
|
||||||
// 投票完成,游戏结束
|
// 投票完成,游戏结束
|
||||||
Bukkit.getOnlinePlayers().forEach {
|
Bukkit.getOnlinePlayers().forEach {
|
||||||
it.sendMessage(Component.text("投票完成,游戏结束", NamedTextColor.GOLD))
|
it.sendMessage(Component.text("--------投票完成--------", NamedTextColor.GOLD))
|
||||||
}
|
}
|
||||||
end()
|
end(null)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 结束处理
|
* 结束处理
|
||||||
*/
|
*/
|
||||||
private fun end() {
|
fun end(winner: String?) {
|
||||||
// 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)
|
|
||||||
}
|
|
||||||
stage = GameStage.OVER
|
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++
|
||||||
j %= speedrunnerList.size
|
j %= speedrunnerList.size
|
||||||
val speedrunner = speedrunnerList[i]
|
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
|
trackRunnerMap[playerName] = j
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
@@ -440,11 +448,15 @@ class Console {
|
|||||||
* 处理玩家死亡
|
* 处理玩家死亡
|
||||||
*/
|
*/
|
||||||
fun handlePlayerDeath(player: Player) {
|
fun handlePlayerDeath(player: Player) {
|
||||||
if (isHunter(player)) {
|
if (isSpeedrunner(player)) {
|
||||||
// 猎人置为旁观者模式
|
// 速通者置为旁观者模式,加入淘汰名单
|
||||||
player.gameMode = GameMode.SPECTATOR
|
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
|
player.gameMode = GameMode.SPECTATOR
|
||||||
val task = Bukkit.getScheduler().runTaskLater(Minehunt.instance(), Runnable {
|
val task = Bukkit.getScheduler().runTaskLater(Minehunt.instance(), Runnable {
|
||||||
player.gameMode = GameMode.SURVIVAL
|
player.gameMode = GameMode.SURVIVAL
|
||||||
|
|||||||
@@ -2,9 +2,13 @@ package xyz.fortern.minehunt.command
|
|||||||
|
|
||||||
import net.kyori.adventure.text.Component
|
import net.kyori.adventure.text.Component
|
||||||
import org.bukkit.Bukkit
|
import org.bukkit.Bukkit
|
||||||
|
import org.bukkit.Material
|
||||||
import org.bukkit.command.Command
|
import org.bukkit.command.Command
|
||||||
import org.bukkit.command.CommandExecutor
|
import org.bukkit.command.CommandExecutor
|
||||||
import org.bukkit.command.CommandSender
|
import org.bukkit.command.CommandSender
|
||||||
|
import org.bukkit.enchantments.Enchantment
|
||||||
|
import org.bukkit.entity.Player
|
||||||
|
import org.bukkit.inventory.ItemStack
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 开发过程中的测试命令
|
* 开发过程中的测试命令
|
||||||
@@ -39,6 +43,20 @@ class TestCommand : CommandExecutor {
|
|||||||
else
|
else
|
||||||
sender.sendMessage("玩家 $name 不存在")
|
sender.sendMessage("玩家 $name 不存在")
|
||||||
}
|
}
|
||||||
|
// 获得32k
|
||||||
|
"get32k" -> {
|
||||||
|
if (sender is Player) {
|
||||||
|
sender.give(
|
||||||
|
// 锋利等级被限制为255
|
||||||
|
ItemStack(Material.DIAMOND_SWORD).apply {
|
||||||
|
this.addUnsafeEnchantment(
|
||||||
|
Enchantment.SHARPNESS,
|
||||||
|
32000
|
||||||
|
)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
package xyz.fortern.minehunt.listener
|
package xyz.fortern.minehunt.listener
|
||||||
|
|
||||||
import org.bukkit.GameMode
|
import org.bukkit.GameMode
|
||||||
|
import org.bukkit.entity.EnderDragon
|
||||||
import org.bukkit.event.EventHandler
|
import org.bukkit.event.EventHandler
|
||||||
import org.bukkit.event.Listener
|
import org.bukkit.event.Listener
|
||||||
|
import org.bukkit.event.entity.EntityDeathEvent
|
||||||
import org.bukkit.event.entity.PlayerDeathEvent
|
import org.bukkit.event.entity.PlayerDeathEvent
|
||||||
import org.bukkit.event.player.PlayerDropItemEvent
|
import org.bukkit.event.player.PlayerDropItemEvent
|
||||||
import org.bukkit.event.player.PlayerJoinEvent
|
import org.bukkit.event.player.PlayerJoinEvent
|
||||||
@@ -74,4 +76,14 @@ class PlayerListener(
|
|||||||
console.handlePlayerDeath(player)
|
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