Auto-assign teamless players; remove tablist reset
Call assignTeamlessPlayers() at game start and add helper to auto-assign online players without a team into preset teams. The helper computes the minimal number of active teams based on maxTeamSize, fills non-full teams (choosing the smallest), logs assignments, and is a no-op if preset teams are disabled. Also remove the automatic tab-prefix refresh when a player leaves a team in PresetTeamManager (prefix handling moved/changed elsewhere).
This commit is contained in:
@@ -167,6 +167,7 @@ class GameManager(
|
||||
pitManager.reset()
|
||||
|
||||
plugin.lobbyItemManager.clearAll()
|
||||
assignTeamlessPlayers()
|
||||
|
||||
setGameState( GameState.INVINCIBILITY )
|
||||
timer = invincibilityTime
|
||||
@@ -361,6 +362,52 @@ class GameManager(
|
||||
|
||||
// --- Helfer Methoden ---
|
||||
|
||||
/**
|
||||
* Weist alle Spieler ohne Team einem zufälligen Team mit freiem Platz zu.
|
||||
*
|
||||
* Aufruf: direkt am Anfang von [startGame], **bevor** Spieler teleportiert
|
||||
* oder Kits verteilt werden.
|
||||
*/
|
||||
private fun assignTeamlessPlayers()
|
||||
{
|
||||
if ( !plugin.presetTeamManager.isEnabled ) return
|
||||
|
||||
val teamManager = plugin.presetTeamManager
|
||||
|
||||
val teamlessPlayers = Bukkit.getOnlinePlayers()
|
||||
.filter { teamManager.getTeam( it ) == null }
|
||||
.shuffled()
|
||||
|
||||
if ( teamlessPlayers.isEmpty() ) return
|
||||
|
||||
// Berechne wie viele Teams wir tatsächlich brauchen, um alle unterzubringen.
|
||||
// ceil( gesamtSpieler / maxSize ) → minimale Teamanzahl für volle Teams.
|
||||
val totalPlayers = Bukkit.getOnlinePlayers().size
|
||||
val maxSize = teamManager.maxTeamSize
|
||||
val teamsNeeded = ( totalPlayers + maxSize - 1 ) / maxSize
|
||||
|
||||
// Nur die ersten N Teams befüllen — der Rest bleibt leer.
|
||||
val activeTeams = teamManager.presetTeams.take( teamsNeeded )
|
||||
|
||||
// Spieler die bereits in einem der aktiven Teams sind, zählen mit.
|
||||
// Teamlose Spieler werden der Reihe nach in den ersten nicht-vollen Slot gesteckt.
|
||||
teamlessPlayers.forEach { player ->
|
||||
val target = activeTeams
|
||||
.filter { !it.isFull }
|
||||
.minByOrNull { it.size }
|
||||
?: run {
|
||||
plugin.logger.warning( "[GameManager] Kein aktives Team mehr frei für ${player.name}!" )
|
||||
return@forEach
|
||||
}
|
||||
|
||||
teamManager.join( player, target )
|
||||
|
||||
plugin.logger.info(
|
||||
"[GameManager] ${player.name} wurde automatisch '${target.name}' zugewiesen."
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private fun buildWinnerName(anyAliveUUID: UUID?): String {
|
||||
anyAliveUUID ?: return "N/A"
|
||||
|
||||
|
||||
@@ -165,9 +165,6 @@ class PresetTeamManager(
|
||||
) {
|
||||
val team = teamByPlayer.remove( player.uniqueId ) ?: return
|
||||
team.members.remove( player.uniqueId )
|
||||
|
||||
// Tab-Prefix zurücksetzen
|
||||
plugin.tablistManager.refreshTeamPrefix( player )
|
||||
}
|
||||
|
||||
/** Setzt alle Team-Slots zurück (Spielstart / Runden-Reset). */
|
||||
|
||||
Reference in New Issue
Block a user