From 5196b4a86091bb436d4d266aabcb2789304a773b Mon Sep 17 00:00:00 2001 From: CoderJoe Date: Fri, 27 Mar 2026 00:18:54 -0500 Subject: [PATCH] Consolidate duplicated dialog init/cleanup/show boilerplate into AtlasBlockDialog Each subsystem dialog (Power, Fluid, Transport) duplicated identical init(), cleanup(), and sendDialog() methods that just delegated to AtlasBlockDialog. Add a generic showBlockDialog() helper that accepts display-name and body-builder lambdas, letting each subsystem dialog become a pure content provider. --- src/main/kotlin/com/coderjoe/atlas/Atlas.kt | 9 ++--- .../coderjoe/atlas/core/AtlasBlockDialog.kt | 17 +++++++++ .../coderjoe/atlas/fluid/FluidBlockDialog.kt | 24 +------------ .../coderjoe/atlas/power/PowerBlockDialog.kt | 36 +++---------------- .../atlas/transport/TransportBlockDialog.kt | 24 +------------ .../com/coderjoe/atlas/AtlasPluginTest.kt | 12 ++----- .../atlas/fluid/FluidBlockDialogTest.kt | 5 +-- .../atlas/power/PowerBlockDialogTest.kt | 5 +-- 8 files changed, 35 insertions(+), 97 deletions(-) diff --git a/src/main/kotlin/com/coderjoe/atlas/Atlas.kt b/src/main/kotlin/com/coderjoe/atlas/Atlas.kt index 32ad11c..83c2e55 100644 --- a/src/main/kotlin/com/coderjoe/atlas/Atlas.kt +++ b/src/main/kotlin/com/coderjoe/atlas/Atlas.kt @@ -1,5 +1,6 @@ package com.coderjoe.atlas +import com.coderjoe.atlas.core.AtlasBlockDialog import com.coderjoe.atlas.core.AtlasBlockListener import com.coderjoe.atlas.core.BlockDescriptor import com.coderjoe.atlas.core.BlockSystem @@ -64,9 +65,7 @@ class Atlas : JavaPlugin() { server.pluginManager.registerEvents(PlayerJoinListener(), this) - PowerBlockDialog.init(this) - FluidBlockDialog.init(this) - TransportBlockDialog.init(this) + AtlasBlockDialog.init(this) initPowerSystem() initFluidSystem() @@ -149,9 +148,7 @@ class Atlas : JavaPlugin() { transportBlockPersistence.save(transportBlockRegistry) } - PowerBlockDialog.cleanup() - FluidBlockDialog.cleanup() - TransportBlockDialog.cleanup() + AtlasBlockDialog.cleanup() if (::powerBlockRegistry.isInitialized) { powerBlockRegistry.stopAll() diff --git a/src/main/kotlin/com/coderjoe/atlas/core/AtlasBlockDialog.kt b/src/main/kotlin/com/coderjoe/atlas/core/AtlasBlockDialog.kt index 629b999..41a47dd 100644 --- a/src/main/kotlin/com/coderjoe/atlas/core/AtlasBlockDialog.kt +++ b/src/main/kotlin/com/coderjoe/atlas/core/AtlasBlockDialog.kt @@ -63,6 +63,23 @@ object AtlasBlockDialog { } } + @Suppress("UNCHECKED_CAST") + fun showBlockDialog( + player: Player, + block: T, + registry: BlockRegistry<*>, + displayName: (T) -> String, + buildBody: (T) -> Component, + ) { + showDialog(player, block, registry) { p, b, onClose -> + val typed = b as T + val title = Component.text(displayName(typed)) + val body = buildBody(typed) + val dialog = createNoticeDialog(title, body, onClose) + p.showDialog(dialog) + } + } + fun showDialog( player: Player, block: AtlasBlock, diff --git a/src/main/kotlin/com/coderjoe/atlas/fluid/FluidBlockDialog.kt b/src/main/kotlin/com/coderjoe/atlas/fluid/FluidBlockDialog.kt index 1328d0d..425cc45 100644 --- a/src/main/kotlin/com/coderjoe/atlas/fluid/FluidBlockDialog.kt +++ b/src/main/kotlin/com/coderjoe/atlas/fluid/FluidBlockDialog.kt @@ -12,36 +12,14 @@ import net.kyori.adventure.text.Component import net.kyori.adventure.text.format.NamedTextColor import net.kyori.adventure.text.format.TextDecoration import org.bukkit.entity.Player -import org.bukkit.plugin.java.JavaPlugin object FluidBlockDialog { - fun init(plugin: JavaPlugin) { - AtlasBlockDialog.init(plugin) - } - fun showFluidDialog( player: Player, fluidBlock: FluidBlock, registry: BlockRegistry<*>, ) { - AtlasBlockDialog.showDialog(player, fluidBlock, registry) { p, block, onClose -> - sendDialog(p, block as FluidBlock, onClose) - } - } - - fun cleanup() { - AtlasBlockDialog.cleanup() - } - - private fun sendDialog( - player: Player, - fluidBlock: FluidBlock, - onClose: (Player) -> Unit, - ) { - val title = Component.text(getBlockDisplayName(fluidBlock)) - val bodyText = buildFluidInfo(fluidBlock) - val dialog = AtlasBlockDialog.createNoticeDialog(title, bodyText, onClose) - player.showDialog(dialog) + AtlasBlockDialog.showBlockDialog(player, fluidBlock, registry, ::getBlockDisplayName, ::buildFluidInfo) } private fun getBlockDisplayName(fluidBlock: FluidBlock): String = diff --git a/src/main/kotlin/com/coderjoe/atlas/power/PowerBlockDialog.kt b/src/main/kotlin/com/coderjoe/atlas/power/PowerBlockDialog.kt index d469d1e..7de1a41 100644 --- a/src/main/kotlin/com/coderjoe/atlas/power/PowerBlockDialog.kt +++ b/src/main/kotlin/com/coderjoe/atlas/power/PowerBlockDialog.kt @@ -28,50 +28,22 @@ import net.kyori.adventure.text.event.ClickCallback import net.kyori.adventure.text.format.NamedTextColor import net.kyori.adventure.text.format.TextDecoration import org.bukkit.entity.Player -import org.bukkit.plugin.java.JavaPlugin object PowerBlockDialog { - fun init(plugin: JavaPlugin) { - AtlasBlockDialog.init(plugin) - } - fun showPowerDialog( player: Player, powerBlock: PowerBlock, registry: BlockRegistry<*>, - ) { - AtlasBlockDialog.showDialog(player, powerBlock, registry) { p, block, onClose -> - sendDialog(p, block as PowerBlock, onClose) - } - } - - fun cleanup() { - AtlasBlockDialog.cleanup() - } - - private fun sendDialog( - player: Player, - powerBlock: PowerBlock, - onClose: (Player) -> Unit, ) { if (powerBlock is SmallDrill) { - sendDrillDialog(player, powerBlock, onClose) + AtlasBlockDialog.showDialog(player, powerBlock, registry) { p, block, onClose -> + sendDrillDialog(p, block as SmallDrill, onClose) + } } else { - sendDefaultDialog(player, powerBlock, onClose) + AtlasBlockDialog.showBlockDialog(player, powerBlock, registry, ::getBlockDisplayName, ::buildPowerInfo) } } - private fun sendDefaultDialog( - player: Player, - powerBlock: PowerBlock, - onClose: (Player) -> Unit, - ) { - val title = Component.text(getBlockDisplayName(powerBlock)) - val bodyText = buildPowerInfo(powerBlock) - val dialog = AtlasBlockDialog.createNoticeDialog(title, bodyText, onClose) - player.showDialog(dialog) - } - private fun sendDrillDialog( player: Player, drill: SmallDrill, diff --git a/src/main/kotlin/com/coderjoe/atlas/transport/TransportBlockDialog.kt b/src/main/kotlin/com/coderjoe/atlas/transport/TransportBlockDialog.kt index 49262c2..d62bb9e 100644 --- a/src/main/kotlin/com/coderjoe/atlas/transport/TransportBlockDialog.kt +++ b/src/main/kotlin/com/coderjoe/atlas/transport/TransportBlockDialog.kt @@ -7,36 +7,14 @@ import com.coderjoe.atlas.transport.block.ConveyorBelt import net.kyori.adventure.text.Component import net.kyori.adventure.text.format.NamedTextColor import org.bukkit.entity.Player -import org.bukkit.plugin.java.JavaPlugin object TransportBlockDialog { - fun init(plugin: JavaPlugin) { - AtlasBlockDialog.init(plugin) - } - fun showTransportDialog( player: Player, block: TransportBlock, registry: BlockRegistry<*>, ) { - AtlasBlockDialog.showDialog(player, block, registry) { p, b, onClose -> - sendDialog(p, b as TransportBlock, onClose) - } - } - - fun cleanup() { - AtlasBlockDialog.cleanup() - } - - private fun sendDialog( - player: Player, - block: TransportBlock, - onClose: (Player) -> Unit, - ) { - val title = Component.text(getBlockDisplayName(block)) - val bodyText = getBlockDescription(block) - val dialog = AtlasBlockDialog.createNoticeDialog(title, bodyText, onClose) - player.showDialog(dialog) + AtlasBlockDialog.showBlockDialog(player, block, registry, ::getBlockDisplayName, ::getBlockDescription) } private fun getBlockDisplayName(block: TransportBlock): String = diff --git a/src/test/kotlin/com/coderjoe/atlas/AtlasPluginTest.kt b/src/test/kotlin/com/coderjoe/atlas/AtlasPluginTest.kt index c6a5bb5..4ac588a 100644 --- a/src/test/kotlin/com/coderjoe/atlas/AtlasPluginTest.kt +++ b/src/test/kotlin/com/coderjoe/atlas/AtlasPluginTest.kt @@ -1,12 +1,10 @@ package com.coderjoe.atlas -import com.coderjoe.atlas.fluid.FluidBlockDialog +import com.coderjoe.atlas.core.AtlasBlockDialog import com.coderjoe.atlas.fluid.FluidBlockFactory import com.coderjoe.atlas.fluid.FluidBlockRegistry -import com.coderjoe.atlas.power.PowerBlockDialog import com.coderjoe.atlas.power.PowerBlockFactory import com.coderjoe.atlas.power.PowerBlockRegistry -import com.coderjoe.atlas.transport.TransportBlockDialog import com.coderjoe.atlas.transport.TransportBlockFactory import com.coderjoe.atlas.transport.TransportBlockRegistry import org.junit.jupiter.api.AfterEach @@ -21,9 +19,7 @@ class AtlasPluginTest { @BeforeEach fun setup() { TestHelper.setup() - PowerBlockDialog.init(TestHelper.mockPlugin) - FluidBlockDialog.init(TestHelper.mockPlugin) - TransportBlockDialog.init(TestHelper.mockPlugin) + AtlasBlockDialog.init(TestHelper.mockPlugin) } @AfterEach @@ -73,9 +69,7 @@ class AtlasPluginTest { @Test fun `dialog cleanup does not throw`() { assertDoesNotThrow { - PowerBlockDialog.cleanup() - FluidBlockDialog.cleanup() - TransportBlockDialog.cleanup() + AtlasBlockDialog.cleanup() } } diff --git a/src/test/kotlin/com/coderjoe/atlas/fluid/FluidBlockDialogTest.kt b/src/test/kotlin/com/coderjoe/atlas/fluid/FluidBlockDialogTest.kt index 97d0187..54a6a83 100644 --- a/src/test/kotlin/com/coderjoe/atlas/fluid/FluidBlockDialogTest.kt +++ b/src/test/kotlin/com/coderjoe/atlas/fluid/FluidBlockDialogTest.kt @@ -2,6 +2,7 @@ package com.coderjoe.atlas.fluid import com.coderjoe.atlas.TestHelper import com.coderjoe.atlas.TestHelper.callFluidUpdate +import com.coderjoe.atlas.core.AtlasBlockDialog import com.coderjoe.atlas.fluid.block.FluidPipe import com.coderjoe.atlas.fluid.block.FluidPump import net.kyori.adventure.text.Component @@ -19,7 +20,7 @@ class FluidBlockDialogTest { @BeforeEach fun setup() { TestHelper.setup() - FluidBlockDialog.init(TestHelper.mockPlugin) + AtlasBlockDialog.init(TestHelper.mockPlugin) } @AfterEach @@ -152,6 +153,6 @@ class FluidBlockDialogTest { @Test fun `cleanup does not throw`() { - assertDoesNotThrow { FluidBlockDialog.cleanup() } + assertDoesNotThrow { AtlasBlockDialog.cleanup() } } } diff --git a/src/test/kotlin/com/coderjoe/atlas/power/PowerBlockDialogTest.kt b/src/test/kotlin/com/coderjoe/atlas/power/PowerBlockDialogTest.kt index 6132a2c..cbaafdd 100644 --- a/src/test/kotlin/com/coderjoe/atlas/power/PowerBlockDialogTest.kt +++ b/src/test/kotlin/com/coderjoe/atlas/power/PowerBlockDialogTest.kt @@ -1,6 +1,7 @@ package com.coderjoe.atlas.power import com.coderjoe.atlas.TestHelper +import com.coderjoe.atlas.core.AtlasBlockDialog import com.coderjoe.atlas.power.block.PowerCable import com.coderjoe.atlas.power.block.SmallBattery import com.coderjoe.atlas.power.block.SmallSolarPanel @@ -19,7 +20,7 @@ class PowerBlockDialogTest { @BeforeEach fun setup() { TestHelper.setup() - PowerBlockDialog.init(TestHelper.mockPlugin) + AtlasBlockDialog.init(TestHelper.mockPlugin) } @AfterEach @@ -108,7 +109,7 @@ class PowerBlockDialogTest { @Test fun `cleanup clears all active dialogs`() { // Just verify it doesn't throw - assertDoesNotThrow { PowerBlockDialog.cleanup() } + assertDoesNotThrow { AtlasBlockDialog.cleanup() } } private fun flattenText(component: Component): String {