From c986c4b5930bfed186228ed766e2293ea6104317 Mon Sep 17 00:00:00 2001 From: TDSTOS Date: Sun, 12 Apr 2026 05:13:50 +0200 Subject: [PATCH] Add LobbyAnnouncer with beta broadcasts Introduce a LobbyAnnouncer module that periodically broadcasts a MiniMessage announcement during the LOBBY state. The new class (game/modules/LobbyAnnouncer.kt) schedules broadcasts every 30 seconds when the new config flag game.beta is true and provides start/stop lifecycle methods. Integrate the announcer into the main plugin (SpeedHG.kt) by adding a lobbyAnnouncer field and starting it during initialization. Also update config.yml to add game.beta: true and change teams.enabled from true to false. --- .../kotlin/club/mcscrims/speedhg/SpeedHG.kt | 7 +++ .../speedhg/game/modules/LobbyAnnouncer.kt | 54 +++++++++++++++++++ src/main/resources/config.yml | 3 +- 3 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 src/main/kotlin/club/mcscrims/speedhg/game/modules/LobbyAnnouncer.kt diff --git a/src/main/kotlin/club/mcscrims/speedhg/SpeedHG.kt b/src/main/kotlin/club/mcscrims/speedhg/SpeedHG.kt index 00b7a88..35282a8 100644 --- a/src/main/kotlin/club/mcscrims/speedhg/SpeedHG.kt +++ b/src/main/kotlin/club/mcscrims/speedhg/SpeedHG.kt @@ -16,6 +16,7 @@ import club.mcscrims.speedhg.disaster.DisasterManager import club.mcscrims.speedhg.game.GameManager import club.mcscrims.speedhg.game.PodiumManager import club.mcscrims.speedhg.game.modules.AntiRunningManager +import club.mcscrims.speedhg.game.modules.LobbyAnnouncer import club.mcscrims.speedhg.game.modules.LobbyItemManager import club.mcscrims.speedhg.gui.listener.MenuListener import club.mcscrims.speedhg.kit.KitManager @@ -120,6 +121,9 @@ class SpeedHG : JavaPlugin() { lateinit var tablistManager: TablistManager private set + lateinit var lobbyAnnouncer: LobbyAnnouncer + private set + override fun onLoad() { instance = this @@ -190,6 +194,9 @@ class SpeedHG : JavaPlugin() { disasterManager = DisasterManager( this ) disasterManager.start() + lobbyAnnouncer = LobbyAnnouncer( this ) + lobbyAnnouncer.start() + registerKits() registerPerks() registerCommands() diff --git a/src/main/kotlin/club/mcscrims/speedhg/game/modules/LobbyAnnouncer.kt b/src/main/kotlin/club/mcscrims/speedhg/game/modules/LobbyAnnouncer.kt new file mode 100644 index 0000000..fcb6a62 --- /dev/null +++ b/src/main/kotlin/club/mcscrims/speedhg/game/modules/LobbyAnnouncer.kt @@ -0,0 +1,54 @@ +package club.mcscrims.speedhg.game.modules + +import club.mcscrims.speedhg.SpeedHG +import club.mcscrims.speedhg.game.GameState +import net.kyori.adventure.text.minimessage.MiniMessage +import org.bukkit.Bukkit +import org.bukkit.scheduler.BukkitTask + +/** + * Sendet periodische Informationen während der Lobby-Phase + */ +class LobbyAnnouncer( + private val plugin: SpeedHG +) { + + private val mm = MiniMessage.miniMessage() + private var task: BukkitTask? = null + + companion object { + private const val INTERVAL_TICKS = 30 * 20L + } + + /** + * Startet den Timer für die Lobby-Ankündigungen. + */ + fun start() + { + if (!plugin.config.getBoolean( "game.beta" )) + return + + task = Bukkit.getScheduler().runTaskTimer( plugin, { -> + if ( plugin.gameManager.currentState != GameState.LOBBY ) + return@runTaskTimer + + val message = mm.deserialize( + "\n[BETA] " + + "SpeedHG is currently in Beta! Your feedback is extremely helpful for us.\n" + + "Please share your ideas and suggestions in the #ideas forum on our Discord!\n" + ) + + Bukkit.broadcast( message ) + }, INTERVAL_TICKS, INTERVAL_TICKS ) + } + + /** + * Stoppt den Timer (z.B. beim Server-Shutdown). + */ + fun stop() + { + task?.cancel() + task = null + } + +} \ No newline at end of file diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 8f4fefb..891b0c8 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -4,6 +4,7 @@ # game: + beta: true min-players: 2 lobby-time: 60 invincibility-time: 60 @@ -27,7 +28,7 @@ lunarclient: variantName: 'SpeedHG - Solo' teams: - enabled: true + enabled: false max-size: 2 recraftNerf: