Make TNTLeague Event System Capable

This commit is contained in:
2025-02-01 21:50:36 +01:00
parent 90666e2d20
commit 3d153d49b5
10 changed files with 182 additions and 79 deletions
@@ -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');
}
}