From 086f7dba1027ace435b00c488e87e8f3d3a6b706 Mon Sep 17 00:00:00 2001 From: Alex Zenla Date: Sat, 28 Jan 2023 19:01:20 -0800 Subject: [PATCH] chaos: boss bar --- .../pizza/foundation/chaos/ChaosController.kt | 27 +++++++++++++++++-- .../foundation/chaos/modules/ChaosModule.kt | 1 + .../foundation/chaos/modules/ChaosModules.kt | 4 ++- .../chaos/modules/KillRandomPlayer.kt | 14 ++++++++++ .../chaos/modules/NearestPlayerEntitySpawn.kt | 3 ++- .../TeleportAllEntitiesNearestPlayer.kt | 3 ++- .../foundation/chaos/modules/TntAllPlayers.kt | 16 +++++++++++ 7 files changed, 63 insertions(+), 5 deletions(-) create mode 100644 foundation-chaos/src/main/kotlin/gay/pizza/foundation/chaos/modules/KillRandomPlayer.kt create mode 100644 foundation-chaos/src/main/kotlin/gay/pizza/foundation/chaos/modules/TntAllPlayers.kt diff --git a/foundation-chaos/src/main/kotlin/gay/pizza/foundation/chaos/ChaosController.kt b/foundation-chaos/src/main/kotlin/gay/pizza/foundation/chaos/ChaosController.kt index 8f553a2..090bbcb 100644 --- a/foundation-chaos/src/main/kotlin/gay/pizza/foundation/chaos/ChaosController.kt +++ b/foundation-chaos/src/main/kotlin/gay/pizza/foundation/chaos/ChaosController.kt @@ -4,8 +4,13 @@ import gay.pizza.foundation.chaos.model.ChaosConfig import gay.pizza.foundation.chaos.modules.ChaosModule import gay.pizza.foundation.chaos.modules.ChaosModules import net.kyori.adventure.text.Component +import org.bukkit.boss.BarColor +import org.bukkit.boss.BarStyle +import org.bukkit.boss.BossBar +import org.bukkit.event.EventHandler import org.bukkit.event.HandlerList import org.bukkit.event.Listener +import org.bukkit.event.player.PlayerJoinEvent import org.bukkit.plugin.Plugin import java.util.concurrent.atomic.AtomicBoolean @@ -17,6 +22,8 @@ class ChaosController(val plugin: Plugin, val config: ChaosConfig) : Listener { private var allowedModules: List = emptyList() private var activeModules = mutableSetOf() + var bossBar: BossBar? = null + fun load() { if (state.get()) { return @@ -24,6 +31,10 @@ class ChaosController(val plugin: Plugin, val config: ChaosConfig) : Listener { allowedModules = allModules.filter { config.enable[it.id()] ?: true } state.set(true) selectorController.schedule() + bossBar = plugin.server.createBossBar("Chaos Mode", BarColor.RED, BarStyle.SOLID) + for (player in plugin.server.onlinePlayers) { + bossBar?.addPlayer(player) + } } fun activateAll() { @@ -39,14 +50,19 @@ class ChaosController(val plugin: Plugin, val config: ChaosConfig) : Listener { plugin.server.pluginManager.registerEvents(module, plugin) module.activate() activeModules.add(module) - plugin.server.broadcast(Component.text("Chaos Module Activated: ${module.id()}")) + updateBossBar() } fun deactivate(module: ChaosModule) { HandlerList.unregisterAll(module) module.deactivate() activeModules.remove(module) - plugin.server.broadcast(Component.text("Chaos Module Deactivated: ${module.id()}")) + updateBossBar() + } + + fun updateBossBar() { + val activeModuleText = activeModules.joinToString(", ") { it.name() } + bossBar?.setTitle("Chaos Mode: $activeModuleText") } fun deactivateAll() { @@ -55,11 +71,18 @@ class ChaosController(val plugin: Plugin, val config: ChaosConfig) : Listener { } } + @EventHandler + fun onPlayerJoin(event: PlayerJoinEvent) { + bossBar?.addPlayer(event.player) + } + fun unload() { if (!state.get()) { return } deactivateAll() + bossBar?.removeAll() + bossBar = null state.set(false) selectorController.cancel() } diff --git a/foundation-chaos/src/main/kotlin/gay/pizza/foundation/chaos/modules/ChaosModule.kt b/foundation-chaos/src/main/kotlin/gay/pizza/foundation/chaos/modules/ChaosModule.kt index 8d5161f..b0ca3dc 100644 --- a/foundation-chaos/src/main/kotlin/gay/pizza/foundation/chaos/modules/ChaosModule.kt +++ b/foundation-chaos/src/main/kotlin/gay/pizza/foundation/chaos/modules/ChaosModule.kt @@ -4,6 +4,7 @@ import org.bukkit.event.Listener interface ChaosModule : Listener { fun id(): String + fun name(): String fun what(): String fun activate() {} fun deactivate() {} diff --git a/foundation-chaos/src/main/kotlin/gay/pizza/foundation/chaos/modules/ChaosModules.kt b/foundation-chaos/src/main/kotlin/gay/pizza/foundation/chaos/modules/ChaosModules.kt index d040e89..c6a5396 100644 --- a/foundation-chaos/src/main/kotlin/gay/pizza/foundation/chaos/modules/ChaosModules.kt +++ b/foundation-chaos/src/main/kotlin/gay/pizza/foundation/chaos/modules/ChaosModules.kt @@ -5,6 +5,8 @@ import org.bukkit.plugin.Plugin object ChaosModules { fun all(plugin: Plugin) = listOf( NearestPlayerEntitySpawn(plugin), - TeleportAllEntitiesNearestPlayer(plugin) + TeleportAllEntitiesNearestPlayer(plugin), + KillRandomPlayer(plugin), + TntAllPlayers(plugin) ) } diff --git a/foundation-chaos/src/main/kotlin/gay/pizza/foundation/chaos/modules/KillRandomPlayer.kt b/foundation-chaos/src/main/kotlin/gay/pizza/foundation/chaos/modules/KillRandomPlayer.kt new file mode 100644 index 0000000..889290d --- /dev/null +++ b/foundation-chaos/src/main/kotlin/gay/pizza/foundation/chaos/modules/KillRandomPlayer.kt @@ -0,0 +1,14 @@ +package gay.pizza.foundation.chaos.modules + +import org.bukkit.plugin.Plugin + +class KillRandomPlayer(val plugin: Plugin) : ChaosModule { + override fun id(): String = "kill-random-player" + override fun name(): String = "Random Kill" + override fun what(): String = "Kill a random player." + + override fun activate() { + val player = plugin.server.onlinePlayers.randomOrNull() ?: return + player.damage(1000000.0) + } +} diff --git a/foundation-chaos/src/main/kotlin/gay/pizza/foundation/chaos/modules/NearestPlayerEntitySpawn.kt b/foundation-chaos/src/main/kotlin/gay/pizza/foundation/chaos/modules/NearestPlayerEntitySpawn.kt index a1b2d36..2d9a9c5 100644 --- a/foundation-chaos/src/main/kotlin/gay/pizza/foundation/chaos/modules/NearestPlayerEntitySpawn.kt +++ b/foundation-chaos/src/main/kotlin/gay/pizza/foundation/chaos/modules/NearestPlayerEntitySpawn.kt @@ -7,7 +7,8 @@ import org.bukkit.plugin.Plugin class NearestPlayerEntitySpawn(val plugin: Plugin) : ChaosModule { override fun id(): String = "nearest-player-entity-spawn" - override fun what(): String = "Teleports all entities on spawn to the nearest player." + override fun name(): String = "Monster Me" + override fun what(): String = "Teleport all spawned entities to the nearest player" @EventHandler fun onMobSpawn(e: EntitySpawnEvent) { diff --git a/foundation-chaos/src/main/kotlin/gay/pizza/foundation/chaos/modules/TeleportAllEntitiesNearestPlayer.kt b/foundation-chaos/src/main/kotlin/gay/pizza/foundation/chaos/modules/TeleportAllEntitiesNearestPlayer.kt index 63804b2..62f86ea 100644 --- a/foundation-chaos/src/main/kotlin/gay/pizza/foundation/chaos/modules/TeleportAllEntitiesNearestPlayer.kt +++ b/foundation-chaos/src/main/kotlin/gay/pizza/foundation/chaos/modules/TeleportAllEntitiesNearestPlayer.kt @@ -5,7 +5,8 @@ import org.bukkit.plugin.Plugin class TeleportAllEntitiesNearestPlayer(val plugin: Plugin) : ChaosModule { override fun id(): String = "teleport-all-entities-nearest-player" - override fun what(): String = "Teleports all entities to the nearest player." + override fun name(): String = "Monster Me Once" + override fun what(): String = "Teleport all entities to the nearest player" override fun activate() { for (world in plugin.server.worlds) { diff --git a/foundation-chaos/src/main/kotlin/gay/pizza/foundation/chaos/modules/TntAllPlayers.kt b/foundation-chaos/src/main/kotlin/gay/pizza/foundation/chaos/modules/TntAllPlayers.kt new file mode 100644 index 0000000..8555525 --- /dev/null +++ b/foundation-chaos/src/main/kotlin/gay/pizza/foundation/chaos/modules/TntAllPlayers.kt @@ -0,0 +1,16 @@ +package gay.pizza.foundation.chaos.modules + +import org.bukkit.entity.TNTPrimed +import org.bukkit.plugin.Plugin + +class TntAllPlayers(val plugin: Plugin) : ChaosModule { + override fun id(): String = "tnt-all-players" + override fun name(): String = "TNT Us All" + override fun what(): String = "TNT All Players" + + override fun activate() { + for (player in plugin.server.onlinePlayers) { + player.world.spawn(player.location, TNTPrimed::class.java) + } + } +}