init 20
This commit is contained in:
@@ -5,6 +5,7 @@ import net.kyori.adventure.text.format.NamedTextColor
|
|||||||
import net.kyori.adventure.text.format.Style
|
import net.kyori.adventure.text.format.Style
|
||||||
import net.kyori.adventure.text.format.TextDecoration
|
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 org.bukkit.Bukkit
|
import org.bukkit.Bukkit
|
||||||
import org.bukkit.Difficulty
|
import org.bukkit.Difficulty
|
||||||
import org.bukkit.GameMode
|
import org.bukkit.GameMode
|
||||||
@@ -245,21 +246,30 @@ class Console {
|
|||||||
* 加入猎人阵营
|
* 加入猎人阵营
|
||||||
*/
|
*/
|
||||||
fun joinHunter(player: Player) {
|
fun joinHunter(player: Player) {
|
||||||
hunterTeam.addEntry(player.name)
|
if (stage == GameStage.PREPARING && beginningCountdown == null) {
|
||||||
|
hunterTeam.addEntry(player.name)
|
||||||
|
player.sendMessage(Component.text("你已加入[猎人]"))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 加入速通者阵营
|
* 加入速通者阵营
|
||||||
*/
|
*/
|
||||||
fun joinSpeedrunner(player: Player) {
|
fun joinSpeedrunner(player: Player) {
|
||||||
speedrunnerTeam.addEntry(player.name)
|
if (stage == GameStage.PREPARING && beginningCountdown == null) {
|
||||||
|
speedrunnerTeam.addEntry(player.name)
|
||||||
|
player.sendMessage(Component.text("你已加入[速通者]"))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 加入观察者阵营
|
* 加入观察者阵营
|
||||||
*/
|
*/
|
||||||
fun joinSpectator(player: Player) {
|
fun joinSpectator(player: Player) {
|
||||||
spectatorTeam.addEntry(player.name)
|
if (stage == GameStage.PREPARING && beginningCountdown == null) {
|
||||||
|
spectatorTeam.addEntry(player.name)
|
||||||
|
player.sendMessage(Component.text("你已加入[观众]"))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -286,7 +296,8 @@ class Console {
|
|||||||
Bukkit.getOnlinePlayers().forEach {
|
Bukkit.getOnlinePlayers().forEach {
|
||||||
val title = Title.title(
|
val title = Title.title(
|
||||||
Component.text(countdown.toString(), NamedTextColor.DARK_PURPLE),
|
Component.text(countdown.toString(), NamedTextColor.DARK_PURPLE),
|
||||||
Component.text("开始倒计时", NamedTextColor.GRAY)
|
Component.text("开始倒计时", NamedTextColor.GRAY),
|
||||||
|
Title.Times.times(Ticks.duration(5), Ticks.duration(20), Ticks.duration(5))
|
||||||
)
|
)
|
||||||
it.showTitle(title)
|
it.showTitle(title)
|
||||||
}
|
}
|
||||||
@@ -311,6 +322,10 @@ class Console {
|
|||||||
* 游戏阶段由 PREPARING 变为 PROCESSING
|
* 游戏阶段由 PREPARING 变为 PROCESSING
|
||||||
*/
|
*/
|
||||||
private fun start() {
|
private fun start() {
|
||||||
|
// 速通者更改为生存模式,并加入speedrunnerList
|
||||||
|
speedrunnerTeam.entries.forEach { entry ->
|
||||||
|
Bukkit.getPlayer(entry)?.let { speedrunnerSet.add(it.uniqueId) }
|
||||||
|
}
|
||||||
if (speedrunnerSet.isEmpty()) throw RuntimeException("No Speedrunner")
|
if (speedrunnerSet.isEmpty()) throw RuntimeException("No Speedrunner")
|
||||||
|
|
||||||
// 修改游戏规则
|
// 修改游戏规则
|
||||||
@@ -321,6 +336,7 @@ class Console {
|
|||||||
world.setGameRule(GameRule.KEEP_INVENTORY, false)
|
world.setGameRule(GameRule.KEEP_INVENTORY, false)
|
||||||
world.setGameRule(GameRule.SPAWN_RADIUS, 10)
|
world.setGameRule(GameRule.SPAWN_RADIUS, 10)
|
||||||
world.difficulty = Difficulty.HARD
|
world.difficulty = Difficulty.HARD
|
||||||
|
overworld.worldBorder.size = 9999999.0
|
||||||
|
|
||||||
val spawnLocation = world.spawnLocation
|
val spawnLocation = world.spawnLocation
|
||||||
|
|
||||||
@@ -337,12 +353,9 @@ class Console {
|
|||||||
|
|
||||||
// 速通者更改为生存模式,并加入speedrunnerList
|
// 速通者更改为生存模式,并加入speedrunnerList
|
||||||
speedrunnerTeam.entries.forEach { entry ->
|
speedrunnerTeam.entries.forEach { entry ->
|
||||||
Bukkit.getPlayer(entry)?.let {
|
Bukkit.getPlayer(entry)?.let { it.gameMode = GameMode.SURVIVAL }
|
||||||
speedrunnerSet.add(it.uniqueId)
|
|
||||||
it.gameMode = GameMode.SURVIVAL
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
speedrunnerSet.toList()
|
speedrunnerList = speedrunnerSet.toList()
|
||||||
|
|
||||||
// 将猎人传送到世界底部,且指南针开始有所指向
|
// 将猎人传送到世界底部,且指南针开始有所指向
|
||||||
hunterTeam.entries.forEach { entry ->
|
hunterTeam.entries.forEach { entry ->
|
||||||
@@ -387,6 +400,7 @@ class Console {
|
|||||||
}
|
}
|
||||||
}, gameRules.getRuleValue(RuleKey.HUNTER_READY_CD) * 20L)
|
}, gameRules.getRuleValue(RuleKey.HUNTER_READY_CD) * 20L)
|
||||||
|
|
||||||
|
stage = GameStage.PROCESSING
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -536,7 +550,7 @@ class Console {
|
|||||||
playerListName.style(Style.style(TextDecoration.STRIKETHROUGH))
|
playerListName.style(Style.style(TextDecoration.STRIKETHROUGH))
|
||||||
player.playerListName(playerListName)
|
player.playerListName(playerListName)
|
||||||
// 如给所有hunter都淘汰,则游戏结束
|
// 如给所有hunter都淘汰,则游戏结束
|
||||||
if (outPlayers.size == hunterSet.size) {
|
if (outPlayers.size == speedrunnerSet.size) {
|
||||||
end("hunter")
|
end("hunter")
|
||||||
}
|
}
|
||||||
} else if (isHunter(player)) {
|
} else if (isHunter(player)) {
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ class MinehuntCommand(
|
|||||||
private val console: Console
|
private val console: Console
|
||||||
) : TabExecutor {
|
) : TabExecutor {
|
||||||
|
|
||||||
private val subCommands: List<String> = listOf("help", "join", "leave", "rule", "stat", "stop")
|
private val subCommands: List<String> = listOf("help", "join", "leave", "rule", "start", "stop")
|
||||||
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")
|
||||||
|
|
||||||
@@ -276,9 +276,12 @@ class MinehuntCommand(
|
|||||||
private fun onStart(sender: CommandSender, flag: Boolean): List<String>? {
|
private fun onStart(sender: CommandSender, flag: Boolean): List<String>? {
|
||||||
if (flag) {
|
if (flag) {
|
||||||
if (console.stage == Console.GameStage.PREPARING) {
|
if (console.stage == Console.GameStage.PREPARING) {
|
||||||
console.tryStart()
|
val result = console.tryStart()
|
||||||
|
if (result.isNotEmpty()) {
|
||||||
|
sender.sendMessage(Component.text("游戏开始失败,原因:${result}", NamedTextColor.RED))
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
sender.sendMessage("游戏已经开始或已经结束")
|
sender.sendMessage(Component.text("游戏已经开始或已经结束"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null
|
return null
|
||||||
|
|||||||
@@ -29,8 +29,6 @@ class PlayerListener(
|
|||||||
if (stage == GameStage.PREPARING && console.beginningCountdown == null) {
|
if (stage == GameStage.PREPARING && console.beginningCountdown == null) {
|
||||||
// 在准备阶段,玩家设为冒险模式
|
// 在准备阶段,玩家设为冒险模式
|
||||||
player.gameMode = GameMode.ADVENTURE
|
player.gameMode = GameMode.ADVENTURE
|
||||||
// 重置队伍信息
|
|
||||||
player.scoreboard.teams.forEach { it.removeEntry(player.name) }
|
|
||||||
// 自动加入观察者队伍
|
// 自动加入观察者队伍
|
||||||
console.spectatorTeam.addEntry(player.name)
|
console.spectatorTeam.addEntry(player.name)
|
||||||
}
|
}
|
||||||
@@ -40,15 +38,17 @@ class PlayerListener(
|
|||||||
* 参与游戏的玩家在倒计时阶段退出,则中断倒计时
|
* 参与游戏的玩家在倒计时阶段退出,则中断倒计时
|
||||||
*/
|
*/
|
||||||
@EventHandler
|
@EventHandler
|
||||||
fun onPlayerJoin(event: PlayerQuitEvent) {
|
fun onPlayerQuit(event: PlayerQuitEvent) {
|
||||||
val player = event.player
|
val player = event.player
|
||||||
val stage = console.stage
|
val stage = console.stage
|
||||||
if (stage == GameStage.PREPARING
|
if (stage == GameStage.PREPARING) {
|
||||||
&& console.beginningCountdown != null
|
// 重置队伍信息
|
||||||
&& (console.isHunter(player) || console.isSpeedrunner(player))
|
player.scoreboard.teams.forEach { it.removeEntry(player.name) }
|
||||||
) {
|
if (console.beginningCountdown != null && (console.isHunter(player) || console.isSpeedrunner(player))) {
|
||||||
console.interruptCountdownToStart()
|
console.interruptCountdownToStart()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user