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()
|
pitManager.reset()
|
||||||
|
|
||||||
plugin.lobbyItemManager.clearAll()
|
plugin.lobbyItemManager.clearAll()
|
||||||
|
assignTeamlessPlayers()
|
||||||
|
|
||||||
setGameState( GameState.INVINCIBILITY )
|
setGameState( GameState.INVINCIBILITY )
|
||||||
timer = invincibilityTime
|
timer = invincibilityTime
|
||||||
@@ -361,6 +362,52 @@ class GameManager(
|
|||||||
|
|
||||||
// --- Helfer Methoden ---
|
// --- 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 {
|
private fun buildWinnerName(anyAliveUUID: UUID?): String {
|
||||||
anyAliveUUID ?: return "N/A"
|
anyAliveUUID ?: return "N/A"
|
||||||
|
|
||||||
|
|||||||
@@ -165,9 +165,6 @@ class PresetTeamManager(
|
|||||||
) {
|
) {
|
||||||
val team = teamByPlayer.remove( player.uniqueId ) ?: return
|
val team = teamByPlayer.remove( player.uniqueId ) ?: return
|
||||||
team.members.remove( player.uniqueId )
|
team.members.remove( player.uniqueId )
|
||||||
|
|
||||||
// Tab-Prefix zurücksetzen
|
|
||||||
plugin.tablistManager.refreshTeamPrefix( player )
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Setzt alle Team-Slots zurück (Spielstart / Runden-Reset). */
|
/** Setzt alle Team-Slots zurück (Spielstart / Runden-Reset). */
|
||||||
|
|||||||
Reference in New Issue
Block a user