Add Some Fixes and Improvements

This commit is contained in:
2024-12-22 21:57:54 +01:00
parent 1ea6bd61f8
commit aaa808f90f
14 changed files with 242 additions and 58 deletions
@@ -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) {