forked from SteamWar/SteamWar
Add Some Fixes and Improvements
This commit is contained in:
@@ -20,6 +20,9 @@
|
||||
package de.steamwar.tntleague.game
|
||||
|
||||
import de.steamwar.kotlin.util.Area
|
||||
import de.steamwar.message.SubMessage
|
||||
import de.steamwar.network.NetworkSender
|
||||
import de.steamwar.network.packets.common.FightInfoPacket
|
||||
import de.steamwar.scoreboard.SWScoreboard
|
||||
import de.steamwar.sql.Fight
|
||||
import de.steamwar.sql.FightPlayer
|
||||
@@ -80,6 +83,8 @@ object TNTLeagueGame {
|
||||
blueTeam.start()
|
||||
redTeam.start()
|
||||
|
||||
updateFightinfo()
|
||||
|
||||
message.broadcast("GAME_STARTED")
|
||||
|
||||
val tnt = ItemStack(Material.TNT)
|
||||
@@ -143,13 +148,17 @@ object TNTLeagueGame {
|
||||
|
||||
shutdown--
|
||||
}, 20, 20)
|
||||
|
||||
updateFightinfo()
|
||||
}
|
||||
|
||||
private fun spawnItems(loc: Location, item: ItemStack) = plugin.server.worlds.first().dropItem(loc, item)
|
||||
|
||||
fun getTeam(player: Player) = if (player in blueTeam.members) blueTeam else if (player in redTeam.members) redTeam else null
|
||||
|
||||
fun getFreeTeam() = if (blueTeam.leader == null) blueTeam else if (redTeam.leader == null) redTeam else null
|
||||
fun getFreeTeam(player: Player) = if (blueTeam.leader == null && (TNTLeagueConfig.config.blueLeader == null || player.uniqueId == TNTLeagueConfig.config.blueLeader)) blueTeam
|
||||
else if (redTeam.leader == null && TNTLeagueConfig.config.redLeader == null || player.uniqueId == TNTLeagueConfig.config.redLeader) redTeam
|
||||
else null
|
||||
|
||||
fun checkStart() {
|
||||
if (blueTeam.isReady && redTeam.isReady) {
|
||||
@@ -173,6 +182,8 @@ object TNTLeagueGame {
|
||||
if (task == -1) {
|
||||
error("Failed to start countdown task")
|
||||
}
|
||||
|
||||
updateFightinfo()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -191,12 +202,14 @@ object TNTLeagueGame {
|
||||
task = task?.also { plugin.server.scheduler.cancelTask(it) }.let { null }
|
||||
state = GameState.LOBBY
|
||||
}
|
||||
|
||||
updateFightinfo()
|
||||
}
|
||||
|
||||
fun win(tntLeagueTeam: TNTLeagueTeam, reason: WinReason) {
|
||||
if (state != GameState.RUNNING) return
|
||||
end()
|
||||
plugin.server.onlinePlayers.forEach { message.send("TEAM_WIN", it, message.parse(tntLeagueTeam.name, it).colorByTeam(tntLeagueTeam)) }
|
||||
plugin.server.onlinePlayers.forEach { message.send("TEAM_WIN", it, SubMessage(tntLeagueTeam.name)) }
|
||||
explode(tntLeagueTeam.opposite)
|
||||
}
|
||||
|
||||
@@ -217,18 +230,23 @@ object TNTLeagueGame {
|
||||
}
|
||||
}
|
||||
|
||||
private fun addTeamMember(team: TNTLeagueTeam, fightId: Int) {
|
||||
team.members.filter { team.leader != it }
|
||||
.forEach {
|
||||
FightPlayer.create(
|
||||
fightId,
|
||||
SteamwarUser.get(it.uniqueId).id,
|
||||
team == blueTeam,
|
||||
"TNTLeague",
|
||||
0,
|
||||
false
|
||||
)
|
||||
}
|
||||
fun updateFightinfo() {
|
||||
NetworkSender.send(FightInfoPacket(
|
||||
plugin.server.worlds.first().name,
|
||||
"TNTLeague",
|
||||
"",
|
||||
blueTeam.name.colorByTeam(blueTeam),
|
||||
redTeam.name.colorByTeam(redTeam),
|
||||
state.name,
|
||||
TNTLeagueConfig.config.gameTime - gameTimeRemaining,
|
||||
blueTeam.leader?.let { SteamwarUser.get(it.uniqueId).id } ?: 0,
|
||||
redTeam.leader?.let { SteamwarUser.get(it.uniqueId).id } ?: 0,
|
||||
0,
|
||||
0,
|
||||
blueTeam.members.map { SteamwarUser.get(it.uniqueId).id },
|
||||
redTeam.members.map { SteamwarUser.get(it.uniqueId).id },
|
||||
plugin.server.onlinePlayers.filter {! blueTeam.members.contains(it) && !redTeam.members.contains(it) }.map { SteamwarUser.get(it.uniqueId).id }
|
||||
))
|
||||
}
|
||||
|
||||
enum class GameState(val listener: Listener) {
|
||||
|
||||
Reference in New Issue
Block a user