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) {
|
||||
|
||||
@@ -19,10 +19,12 @@
|
||||
|
||||
package de.steamwar.tntleague.game
|
||||
|
||||
import de.steamwar.message.SubMessage
|
||||
import de.steamwar.tntleague.colorByTeam
|
||||
import de.steamwar.tntleague.config.TNTLeagueWorldConfig
|
||||
import de.steamwar.tntleague.config.targetedBlocks
|
||||
import de.steamwar.tntleague.game.TNTLeagueGame.WinReason
|
||||
import de.steamwar.tntleague.game.TNTLeagueGame.updateFightinfo
|
||||
import de.steamwar.tntleague.game.TNTLeagueGame.win
|
||||
import de.steamwar.tntleague.message
|
||||
import de.steamwar.tntleague.plugin
|
||||
@@ -62,7 +64,7 @@ data class TNTLeagueTeam(val config: TNTLeagueWorldConfig.TeamConfig, private va
|
||||
leader?.inventory?.setItem(4, readyItem())
|
||||
leader?.let { it.playSound(it.location, Sound.BLOCK_NOTE_BLOCK_PLING, 1f, 1f) }
|
||||
|
||||
message.broadcastActionbar(if (value) "IS_READY" else "IS_NOT_READY", name.colorByTeam(this))
|
||||
message.broadcastActionbar(if (value) "IS_READY" else "IS_NOT_READY", SubMessage(name))
|
||||
|
||||
if (value && opposite.isReady) {
|
||||
TNTLeagueGame.checkStart()
|
||||
@@ -73,7 +75,7 @@ data class TNTLeagueTeam(val config: TNTLeagueWorldConfig.TeamConfig, private va
|
||||
set(value) {
|
||||
field = value
|
||||
if (value >= targetedBlocks) {
|
||||
TNTLeagueGame.win(this, TNTLeagueGame.WinReason.DESTROYED)
|
||||
win(this, WinReason.DESTROYED)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -92,13 +94,15 @@ data class TNTLeagueTeam(val config: TNTLeagueWorldConfig.TeamConfig, private va
|
||||
teleport(config.spawnLocation)
|
||||
gameMode = GameMode.ADVENTURE
|
||||
inventory.clear()
|
||||
message.broadcast("JOIN_TEAM", name.colorByTeam(this@TNTLeagueTeam), this@TNTLeagueTeam.name.colorByTeam(this@TNTLeagueTeam))
|
||||
message.broadcast("JOIN_TEAM", name.colorByTeam(this@TNTLeagueTeam), SubMessage(name))
|
||||
}
|
||||
|
||||
if (leader == null) {
|
||||
leader = player
|
||||
}
|
||||
|
||||
updateFightinfo()
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
@@ -156,12 +160,13 @@ data class TNTLeagueTeam(val config: TNTLeagueWorldConfig.TeamConfig, private va
|
||||
teleport(TNTLeagueWorldConfig.lobby)
|
||||
gameMode = GameMode.SPECTATOR
|
||||
inventory.clear()
|
||||
message.broadcast("QUIT_TEAM", name.colorByTeam(this@TNTLeagueTeam), this@TNTLeagueTeam.name.colorByTeam(this@TNTLeagueTeam))
|
||||
message.broadcast("QUIT_TEAM", name.colorByTeam(this@TNTLeagueTeam), SubMessage(name))
|
||||
}
|
||||
updateFightinfo()
|
||||
}
|
||||
|
||||
enum class Team(val color: Char) {
|
||||
BLUE('9'),
|
||||
BLUE('3'),
|
||||
RED('c');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user