forked from SteamWar/SteamWar
Make TNTLeague Event System Capable
This commit is contained in:
@@ -64,8 +64,8 @@ object TNTLeagueGame {
|
||||
|
||||
var gameTimeRemaining: Int = TNTLeagueConfig.config.gameTime
|
||||
|
||||
val blueTeam = TNTLeagueTeam(TNTLeagueWorldConfig.blueTeam, TNTLeagueTeam.Team.BLUE)
|
||||
val redTeam = TNTLeagueTeam(TNTLeagueWorldConfig.redTeam, TNTLeagueTeam.Team.RED)
|
||||
val blueTeam = TNTLeagueTeam(TNTLeagueConfig.config.blueTeam)
|
||||
val redTeam = TNTLeagueTeam(TNTLeagueConfig.config.redTeam)
|
||||
|
||||
private lateinit var start: Timestamp
|
||||
|
||||
@@ -156,10 +156,18 @@ object TNTLeagueGame {
|
||||
|
||||
fun getTeam(player: Player) = if (player in blueTeam.members) blueTeam else if (player in redTeam.members) redTeam else null
|
||||
|
||||
fun getFreeTeam(player: Player) = if (blueTeam.leader == null && (TNTLeagueConfig.config.blueLeader == null || player.uniqueId == TNTLeagueConfig.config.blueLeader)) blueTeam
|
||||
fun getFreeTeam(player: Player) = if (TNTLeagueConfig.isEvent()) getEventFreeTeam(player) else getNormalFreeTeam(player)
|
||||
|
||||
private fun getNormalFreeTeam(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
|
||||
|
||||
private fun getEventFreeTeam(player: Player) = SteamwarUser.get(player.uniqueId).let { user ->
|
||||
if (user.team == TNTLeagueConfig.config.eventTeamBlue.teamId && blueTeam.members.size < TNTLeagueConfig.config.event.maximumTeamMembers) blueTeam
|
||||
else if (user.team == TNTLeagueConfig.config.eventTeamRed.teamId && redTeam.members.size < TNTLeagueConfig.config.event.maximumTeamMembers) redTeam
|
||||
else null
|
||||
}
|
||||
|
||||
fun checkStart() {
|
||||
if (blueTeam.isReady && redTeam.isReady) {
|
||||
blueTeam.leader?.inventory?.clear()
|
||||
@@ -209,18 +217,26 @@ object TNTLeagueGame {
|
||||
fun win(tntLeagueTeam: TNTLeagueTeam, reason: WinReason) {
|
||||
if (state != GameState.RUNNING) return
|
||||
end()
|
||||
plugin.server.onlinePlayers.forEach { message.send("TEAM_WIN", it, SubMessage(tntLeagueTeam.name)) }
|
||||
plugin.server.onlinePlayers.forEach { message.send("TEAM_WIN", it, tntLeagueTeam.name) }
|
||||
explode(tntLeagueTeam.opposite)
|
||||
|
||||
if (TNTLeagueConfig.isEvent()) {
|
||||
TNTLeagueConfig.config.eventFight.ergebnis = tntLeagueTeam.ergebnisInt
|
||||
}
|
||||
}
|
||||
|
||||
fun draw(reason: WinReason) {
|
||||
if (state != GameState.RUNNING) return
|
||||
end()
|
||||
message.broadcast("DRAW")
|
||||
|
||||
if (TNTLeagueConfig.isEvent()) {
|
||||
TNTLeagueConfig.config.eventFight.ergebnis = 3
|
||||
}
|
||||
}
|
||||
|
||||
fun explode(team: TNTLeagueTeam) {
|
||||
Area(team.config.spawnLocation.clone().add(20.0, 30.0, 20.0), team.config.spawnLocation.clone().subtract(20.0, 0.0, 20.0).add(0.0, 30.0, 0.0))
|
||||
Area(team.config.worldConfig.spawnLocation.clone().add(20.0, 30.0, 20.0), team.config.worldConfig.spawnLocation.clone().subtract(20.0, 0.0, 20.0).add(0.0, 30.0, 0.0))
|
||||
.locations
|
||||
.filterIndexed { index, _ -> index % 7 == 0 }
|
||||
.forEachIndexed { index, location ->
|
||||
@@ -235,8 +251,8 @@ object TNTLeagueGame {
|
||||
plugin.server.worlds.first().name,
|
||||
"TNTLeague",
|
||||
"",
|
||||
blueTeam.name.colorByTeam(blueTeam),
|
||||
redTeam.name.colorByTeam(redTeam),
|
||||
blueTeam.name.message.colorByTeam(blueTeam),
|
||||
redTeam.name.message.colorByTeam(redTeam),
|
||||
state.lobbyName,
|
||||
TNTLeagueConfig.config.gameTime - gameTimeRemaining,
|
||||
blueTeam.leader?.let { SteamwarUser.get(it.uniqueId).id } ?: 0,
|
||||
|
||||
@@ -22,6 +22,7 @@ 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.TeamConfig
|
||||
import de.steamwar.tntleague.config.targetedBlocks
|
||||
import de.steamwar.tntleague.game.TNTLeagueGame.WinReason
|
||||
import de.steamwar.tntleague.game.TNTLeagueGame.updateFightinfo
|
||||
@@ -32,11 +33,10 @@ import net.kyori.adventure.text.Component
|
||||
import org.bukkit.GameMode
|
||||
import org.bukkit.Material
|
||||
import org.bukkit.Sound
|
||||
import org.bukkit.enchantments.Enchantment
|
||||
import org.bukkit.entity.Player
|
||||
import org.bukkit.inventory.ItemStack
|
||||
|
||||
data class TNTLeagueTeam(val config: TNTLeagueWorldConfig.TeamConfig, private val team: Team) {
|
||||
data class TNTLeagueTeam(val config: TeamConfig) {
|
||||
|
||||
var leader: Player? = null
|
||||
set(player) {
|
||||
@@ -52,11 +52,11 @@ data class TNTLeagueTeam(val config: TNTLeagueWorldConfig.TeamConfig, private va
|
||||
val members = mutableListOf<Player>()
|
||||
val invites = mutableListOf<Player>()
|
||||
|
||||
val name: String
|
||||
get() = team.name.uppercase()
|
||||
val name: SubMessage
|
||||
get() = config.name
|
||||
|
||||
val color: Char
|
||||
get() = team.color
|
||||
get() = config.color
|
||||
|
||||
var isReady: Boolean = false
|
||||
set(value) {
|
||||
@@ -64,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", SubMessage(name))
|
||||
message.broadcastActionbar(if (value) "IS_READY" else "IS_NOT_READY", name)
|
||||
|
||||
if (value && opposite.isReady) {
|
||||
TNTLeagueGame.checkStart()
|
||||
@@ -82,19 +82,27 @@ data class TNTLeagueTeam(val config: TNTLeagueWorldConfig.TeamConfig, private va
|
||||
var coins: Int = 0
|
||||
|
||||
val opposite: TNTLeagueTeam
|
||||
get() = when (team) {
|
||||
Team.BLUE -> TNTLeagueGame.redTeam
|
||||
Team.RED -> TNTLeagueGame.blueTeam
|
||||
get() = when (this) {
|
||||
TNTLeagueGame.redTeam -> TNTLeagueGame.blueTeam
|
||||
TNTLeagueGame.blueTeam -> TNTLeagueGame.redTeam
|
||||
else -> error("Invalid Team")
|
||||
}
|
||||
|
||||
val ergebnisInt: Int
|
||||
get() = when (this) {
|
||||
TNTLeagueGame.redTeam -> 2
|
||||
TNTLeagueGame.blueTeam -> 3
|
||||
else -> error("Invalid Team")
|
||||
}
|
||||
|
||||
fun join(player: Player): Boolean {
|
||||
members.add(player)
|
||||
|
||||
with(player) {
|
||||
teleport(config.spawnLocation)
|
||||
teleport(config.worldConfig.spawnLocation)
|
||||
gameMode = GameMode.ADVENTURE
|
||||
inventory.clear()
|
||||
message.broadcast("JOIN_TEAM", name.colorByTeam(this@TNTLeagueTeam), SubMessage(this@TNTLeagueTeam.name))
|
||||
message.broadcast("JOIN_TEAM", name.colorByTeam(this@TNTLeagueTeam), this@TNTLeagueTeam.name)
|
||||
}
|
||||
|
||||
if (leader == null) {
|
||||
@@ -154,13 +162,8 @@ 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), SubMessage(this@TNTLeagueTeam.name))
|
||||
message.broadcast("QUIT_TEAM", name.colorByTeam(this@TNTLeagueTeam), this@TNTLeagueTeam.name)
|
||||
}
|
||||
updateFightinfo()
|
||||
}
|
||||
|
||||
enum class Team(val color: Char) {
|
||||
BLUE('3'),
|
||||
RED('c');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user