From 87806fb2723cbd710309e98675ce75edfbd31746 Mon Sep 17 00:00:00 2001 From: CoderJoe Date: Tue, 10 Mar 2026 18:22:07 -0500 Subject: [PATCH] Add lava generator power block Consumes lava from adjacent fluid blocks (pipes, containers, pumps) to generate power. Includes inactive/active visual states, crafting recipe, dialog integration, and comprehensive tests. --- src/main/kotlin/com/coderjoe/atlas/Atlas.kt | 3 +- .../coderjoe/atlas/power/PowerBlockDialog.kt | 4 + .../atlas/power/block/LavaGenerator.kt | 90 +++++++ .../resources/nexo/items/atlas_blocks.yml | 61 +++++ .../textures/block/lava_generator_bottom.png | Bin 0 -> 13874 bytes .../textures/block/lava_generator_side.png | Bin 0 -> 12854 bytes .../block/lava_generator_side_active.png | Bin 0 -> 15940 bytes .../textures/block/lava_generator_top.png | Bin 0 -> 13268 bytes .../block/lava_generator_top_active.png | Bin 0 -> 15909 bytes .../nexo/recipes/shapeless/atlas_recipes.yml | 15 ++ .../com/coderjoe/atlas/AtlasPluginTest.kt | 4 +- .../kotlin/com/coderjoe/atlas/TestHelper.kt | 4 +- .../coderjoe/atlas/power/LavaGeneratorTest.kt | 228 ++++++++++++++++++ .../atlas/power/PowerBlockInitializerTest.kt | 4 +- 14 files changed, 407 insertions(+), 6 deletions(-) create mode 100644 src/main/kotlin/com/coderjoe/atlas/power/block/LavaGenerator.kt create mode 100644 src/main/resources/nexo/pack/assets/atlas/textures/block/lava_generator_bottom.png create mode 100644 src/main/resources/nexo/pack/assets/atlas/textures/block/lava_generator_side.png create mode 100644 src/main/resources/nexo/pack/assets/atlas/textures/block/lava_generator_side_active.png create mode 100644 src/main/resources/nexo/pack/assets/atlas/textures/block/lava_generator_top.png create mode 100644 src/main/resources/nexo/pack/assets/atlas/textures/block/lava_generator_top_active.png create mode 100644 src/test/kotlin/com/coderjoe/atlas/power/LavaGeneratorTest.kt diff --git a/src/main/kotlin/com/coderjoe/atlas/Atlas.kt b/src/main/kotlin/com/coderjoe/atlas/Atlas.kt index f889028..7e4efa3 100644 --- a/src/main/kotlin/com/coderjoe/atlas/Atlas.kt +++ b/src/main/kotlin/com/coderjoe/atlas/Atlas.kt @@ -129,7 +129,8 @@ class Atlas : JavaPlugin() { com.coderjoe.atlas.power.block.SmallSolarPanel.descriptor, com.coderjoe.atlas.power.block.SmallDrill.descriptor, com.coderjoe.atlas.power.block.SmallBattery.descriptor, - com.coderjoe.atlas.power.block.PowerCable.descriptor + com.coderjoe.atlas.power.block.PowerCable.descriptor, + com.coderjoe.atlas.power.block.LavaGenerator.descriptor ).associateBy { it.baseBlockId } } diff --git a/src/main/kotlin/com/coderjoe/atlas/power/PowerBlockDialog.kt b/src/main/kotlin/com/coderjoe/atlas/power/PowerBlockDialog.kt index 0a87402..7bd7e55 100644 --- a/src/main/kotlin/com/coderjoe/atlas/power/PowerBlockDialog.kt +++ b/src/main/kotlin/com/coderjoe/atlas/power/PowerBlockDialog.kt @@ -2,6 +2,7 @@ package com.coderjoe.atlas.power import com.coderjoe.atlas.core.AtlasBlockDialog import com.coderjoe.atlas.core.BlockRegistry +import com.coderjoe.atlas.power.block.LavaGenerator import com.coderjoe.atlas.power.block.PowerCable import com.coderjoe.atlas.power.block.SmallBattery import com.coderjoe.atlas.power.block.SmallDrill @@ -123,6 +124,7 @@ object PowerBlockDialog { is SmallBattery -> "Small Battery" is SmallDrill -> "Small Drill" is PowerCable -> "Power Cable (${powerBlock.facing.name.lowercase().replaceFirstChar { it.uppercase() }})" + is LavaGenerator -> "Lava Generator" else -> "Power Block" } @@ -165,6 +167,8 @@ object PowerBlockDialog { } is PowerCable -> Component.text("Cable - transfers power in facing direction") .color(NamedTextColor.GRAY) + is LavaGenerator -> Component.text("Generator - produces ${LavaGenerator.POWER_PER_LAVA} power per lava unit") + .color(NamedTextColor.GRAY) else -> Component.text("Power block") .color(NamedTextColor.GRAY) } diff --git a/src/main/kotlin/com/coderjoe/atlas/power/block/LavaGenerator.kt b/src/main/kotlin/com/coderjoe/atlas/power/block/LavaGenerator.kt new file mode 100644 index 0000000..f07dff1 --- /dev/null +++ b/src/main/kotlin/com/coderjoe/atlas/power/block/LavaGenerator.kt @@ -0,0 +1,90 @@ +package com.coderjoe.atlas.power.block + +import com.coderjoe.atlas.atlasInfo +import com.coderjoe.atlas.core.BlockDescriptor +import com.coderjoe.atlas.core.PlacementType +import com.coderjoe.atlas.fluid.FluidBlockRegistry +import com.coderjoe.atlas.fluid.FluidType +import com.coderjoe.atlas.fluid.block.FluidContainer +import com.coderjoe.atlas.fluid.block.FluidPipe +import com.coderjoe.atlas.fluid.block.FluidPump +import com.coderjoe.atlas.power.PowerBlock +import org.bukkit.Location +import org.bukkit.block.BlockFace + +class LavaGenerator(location: Location) : PowerBlock(location, maxStorage = 50) { + + override val canReceivePower: Boolean = false + override val updateIntervalTicks: Long = 20L + + companion object { + const val BLOCK_ID = "lava_generator" + const val BLOCK_ID_ACTIVE = "lava_generator_active" + const val POWER_PER_LAVA = 5 + + private val ADJACENT_FACES = listOf( + BlockFace.NORTH, BlockFace.SOUTH, BlockFace.EAST, + BlockFace.WEST, BlockFace.UP, BlockFace.DOWN + ) + + val descriptor = BlockDescriptor( + baseBlockId = BLOCK_ID, + displayName = "Lava Generator", + description = "Generator - produces $POWER_PER_LAVA power per lava unit", + placementType = PlacementType.SIMPLE, + directionalVariants = emptyMap(), + allRegistrableIds = listOf(BLOCK_ID, BLOCK_ID_ACTIVE), + constructor = { loc, _ -> LavaGenerator(loc) } + ) + } + + override val baseBlockId: String = BLOCK_ID + + override fun getVisualStateBlockId(): String = when { + currentPower > 0 -> BLOCK_ID_ACTIVE + else -> BLOCK_ID + } + + override fun powerUpdate() { + if (currentPower >= maxStorage) return + + val fluidRegistry = FluidBlockRegistry.instance ?: return + + for (face in ADJACENT_FACES) { + val spaceAvailable = maxStorage - currentPower + if (spaceAvailable < POWER_PER_LAVA) break + + val source = fluidRegistry.getAdjacentFluidBlock(location, face) ?: continue + + val lava = tryPullLava(source, face) + if (lava) { + val generated = addPower(POWER_PER_LAVA) + plugin.logger.atlasInfo("LavaGenerator at ${location.blockX},${location.blockY},${location.blockZ} consumed 1 lava, generated $generated power (now $currentPower/$maxStorage)") + } + } + } + + private fun tryPullLava(source: com.coderjoe.atlas.fluid.FluidBlock, face: BlockFace): Boolean { + when (source) { + is FluidPump -> { + if (source.canRemoveFluidFrom(face.oppositeFace) && source.storedFluid == FluidType.LAVA) { + source.removeFluid() + return true + } + } + is FluidPipe -> { + if (source.hasFluid() && source.storedFluid == FluidType.LAVA) { + source.removeFluid() + return true + } + } + is FluidContainer -> { + if (source.canRemoveFluidFrom(face.oppositeFace) && source.storedFluid == FluidType.LAVA) { + source.removeFluid() + return true + } + } + } + return false + } +} diff --git a/src/main/resources/nexo/items/atlas_blocks.yml b/src/main/resources/nexo/items/atlas_blocks.yml index ba632ac..a3365e9 100644 --- a/src/main/resources/nexo/items/atlas_blocks.yml +++ b/src/main/resources/nexo/items/atlas_blocks.yml @@ -2648,3 +2648,64 @@ fluid_container_down_lava_full: loots: - nexo_item: fluid_container probability: 1.0 + +# ─── Lava Generator ─────────────────────────────────────────────── +lava_generator: + itemname: "Lava Generator" + material: paper + Pack: + generate_model: true + parent_model: block/cube + textures: + north: atlas:block/lava_generator_side + south: atlas:block/lava_generator_side + east: atlas:block/lava_generator_side + west: atlas:block/lava_generator_side + up: atlas:block/lava_generator_top + down: atlas:block/lava_generator_bottom + Mechanics: + custom_block: + type: NOTEBLOCK + custom_variation: 152 + hardness: 5 + block_sounds: + break_sound: block.metal.break + place_sound: block.metal.place + hit_sound: block.metal.hit + step_sound: block.metal.step + fall_sound: block.metal.fall + drop: + silktouch: false + loots: + - nexo_item: lava_generator + probability: 1.0 + +lava_generator_active: + itemname: "Lava Generator" + material: paper + Pack: + generate_model: true + parent_model: block/cube + textures: + north: atlas:block/lava_generator_side_active + south: atlas:block/lava_generator_side_active + east: atlas:block/lava_generator_side_active + west: atlas:block/lava_generator_side_active + up: atlas:block/lava_generator_top_active + down: atlas:block/lava_generator_bottom + Mechanics: + custom_block: + type: NOTEBLOCK + custom_variation: 153 + hardness: 5 + block_sounds: + break_sound: block.metal.break + place_sound: block.metal.place + hit_sound: block.metal.hit + step_sound: block.metal.step + fall_sound: block.metal.fall + drop: + silktouch: false + loots: + - nexo_item: lava_generator + probability: 1.0 diff --git a/src/main/resources/nexo/pack/assets/atlas/textures/block/lava_generator_bottom.png b/src/main/resources/nexo/pack/assets/atlas/textures/block/lava_generator_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..1eec45786470c8536e002ec43f98975387725a4c GIT binary patch literal 13874 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 UIkjrY^#A|>07*qoM6N<$f($k#-~a#s literal 0 HcmV?d00001 diff --git a/src/main/resources/nexo/pack/assets/atlas/textures/block/lava_generator_side_active.png b/src/main/resources/nexo/pack/assets/atlas/textures/block/lava_generator_side_active.png new file mode 100644 index 0000000000000000000000000000000000000000..dedb720abaceed5188dc643be5c959d1bfd9b3e7 GIT binary patch literal 15940 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 S|7fiM0000A`>LUJrF5Tt`e@egTDZA#SKUh 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 Hu0mjfOaJAQ literal 0 HcmV?d00001 diff --git a/src/main/resources/nexo/recipes/shapeless/atlas_recipes.yml b/src/main/resources/nexo/recipes/shapeless/atlas_recipes.yml index 9c5665b..703928b 100644 --- a/src/main/resources/nexo/recipes/shapeless/atlas_recipes.yml +++ b/src/main/resources/nexo/recipes/shapeless/atlas_recipes.yml @@ -92,3 +92,18 @@ fluid_container_recipe: C: amount: 1 minecraft_type: BUCKET + +lava_generator_recipe: + result: + nexo_item: lava_generator + amount: 1 + ingredients: + A: + amount: 3 + minecraft_type: IRON_INGOT + B: + amount: 3 + minecraft_type: REDSTONE + C: + amount: 1 + minecraft_type: MAGMA_BLOCK diff --git a/src/test/kotlin/com/coderjoe/atlas/AtlasPluginTest.kt b/src/test/kotlin/com/coderjoe/atlas/AtlasPluginTest.kt index 5f0d697..52f6155 100644 --- a/src/test/kotlin/com/coderjoe/atlas/AtlasPluginTest.kt +++ b/src/test/kotlin/com/coderjoe/atlas/AtlasPluginTest.kt @@ -24,9 +24,9 @@ class AtlasPluginTest { } @Test - fun `power system initializes with 17 block types`() { + fun `power system initializes with 19 block types`() { TestHelper.initPowerFactory() - assertEquals(17, PowerBlockFactory.getRegisteredBlockIds().size) + assertEquals(19, PowerBlockFactory.getRegisteredBlockIds().size) } @Test diff --git a/src/test/kotlin/com/coderjoe/atlas/TestHelper.kt b/src/test/kotlin/com/coderjoe/atlas/TestHelper.kt index 922b542..16413dc 100644 --- a/src/test/kotlin/com/coderjoe/atlas/TestHelper.kt +++ b/src/test/kotlin/com/coderjoe/atlas/TestHelper.kt @@ -11,6 +11,7 @@ import com.coderjoe.atlas.fluid.block.FluidPump import com.coderjoe.atlas.power.PowerBlock import com.coderjoe.atlas.power.PowerBlockFactory import com.coderjoe.atlas.power.PowerBlockRegistry +import com.coderjoe.atlas.power.block.LavaGenerator import com.coderjoe.atlas.power.block.PowerCable import com.coderjoe.atlas.power.block.SmallBattery import com.coderjoe.atlas.power.block.SmallDrill @@ -136,7 +137,8 @@ object TestHelper { fun initPowerFactory() { PowerBlockFactory.registerFromDescriptors(listOf( SmallSolarPanel.descriptor, SmallDrill.descriptor, - SmallBattery.descriptor, PowerCable.descriptor + SmallBattery.descriptor, PowerCable.descriptor, + LavaGenerator.descriptor )) } diff --git a/src/test/kotlin/com/coderjoe/atlas/power/LavaGeneratorTest.kt b/src/test/kotlin/com/coderjoe/atlas/power/LavaGeneratorTest.kt new file mode 100644 index 0000000..8ad1aea --- /dev/null +++ b/src/test/kotlin/com/coderjoe/atlas/power/LavaGeneratorTest.kt @@ -0,0 +1,228 @@ +package com.coderjoe.atlas.power + +import com.coderjoe.atlas.TestHelper +import com.coderjoe.atlas.TestHelper.callPowerUpdate +import com.coderjoe.atlas.fluid.FluidBlockRegistry +import com.coderjoe.atlas.fluid.FluidType +import com.coderjoe.atlas.fluid.block.FluidContainer +import com.coderjoe.atlas.fluid.block.FluidPipe +import com.coderjoe.atlas.fluid.block.FluidPump +import com.coderjoe.atlas.power.block.LavaGenerator +import org.bukkit.block.BlockFace +import org.junit.jupiter.api.* +import org.junit.jupiter.api.Assertions.* + +class LavaGeneratorTest { + + @BeforeEach + fun setup() { + TestHelper.setup() + } + + @AfterEach + fun teardown() { + TestHelper.teardown() + } + + @Test + fun `lava generator maxStorage is 50`() { + val gen = LavaGenerator(TestHelper.createLocation()) + assertEquals(50, gen.maxStorage) + } + + @Test + fun `lava generator canReceivePower is false`() { + val gen = LavaGenerator(TestHelper.createLocation()) + assertFalse(gen.canAcceptPower()) + } + + @Test + fun `lava generator visual state idle when no power`() { + val gen = LavaGenerator(TestHelper.createLocation()) + assertEquals("lava_generator", gen.getVisualStateBlockId()) + } + + @Test + fun `lava generator visual state active when has power`() { + val gen = LavaGenerator(TestHelper.createLocation()) + gen.currentPower = 5 + assertEquals("lava_generator_active", gen.getVisualStateBlockId()) + } + + @Test + fun `lava generator consumes lava from adjacent fluid pipe`() { + val fluidRegistry = FluidBlockRegistry(TestHelper.mockPlugin) + val powerRegistry = PowerBlockRegistry(TestHelper.mockPlugin) + + val genLoc = TestHelper.createLocation(0.0, 64.0, 0.0) + val gen = LavaGenerator(genLoc) + TestHelper.addToRegistry(powerRegistry, gen, "lava_generator") + + // Place a lava-filled pipe to the north (z-1) + val pipeLoc = TestHelper.createLocation(0.0, 64.0, -1.0) + val pipe = FluidPipe(pipeLoc, BlockFace.SOUTH) + pipe.storeFluid(FluidType.LAVA) + TestHelper.addToRegistry(fluidRegistry, pipe, "fluid_pipe_south_filled_lava") + + gen.callPowerUpdate() + + assertEquals(5, gen.currentPower) + assertFalse(pipe.hasFluid()) + } + + @Test + fun `lava generator ignores water from adjacent fluid pipe`() { + val fluidRegistry = FluidBlockRegistry(TestHelper.mockPlugin) + val powerRegistry = PowerBlockRegistry(TestHelper.mockPlugin) + + val genLoc = TestHelper.createLocation(0.0, 64.0, 0.0) + val gen = LavaGenerator(genLoc) + TestHelper.addToRegistry(powerRegistry, gen, "lava_generator") + + val pipeLoc = TestHelper.createLocation(0.0, 64.0, -1.0) + val pipe = FluidPipe(pipeLoc, BlockFace.SOUTH) + pipe.storeFluid(FluidType.WATER) + TestHelper.addToRegistry(fluidRegistry, pipe, "fluid_pipe_south_filled") + + gen.callPowerUpdate() + + assertEquals(0, gen.currentPower) + assertTrue(pipe.hasFluid()) + } + + @Test + fun `lava generator consumes lava from fluid container facing toward it`() { + val fluidRegistry = FluidBlockRegistry(TestHelper.mockPlugin) + val powerRegistry = PowerBlockRegistry(TestHelper.mockPlugin) + + val genLoc = TestHelper.createLocation(0.0, 64.0, 0.0) + val gen = LavaGenerator(genLoc) + TestHelper.addToRegistry(powerRegistry, gen, "lava_generator") + + // Container to the south (z+1) facing north (toward generator) + val containerLoc = TestHelper.createLocation(0.0, 64.0, 1.0) + val container = FluidContainer(containerLoc, BlockFace.NORTH) + container.restoreState(FluidType.LAVA, 3) + TestHelper.addToRegistry(fluidRegistry, container, "fluid_container_north_lava_low") + + gen.callPowerUpdate() + + assertEquals(5, gen.currentPower) + assertEquals(2, container.storedAmount) + } + + @Test + fun `lava generator does not consume from container facing away`() { + val fluidRegistry = FluidBlockRegistry(TestHelper.mockPlugin) + val powerRegistry = PowerBlockRegistry(TestHelper.mockPlugin) + + val genLoc = TestHelper.createLocation(0.0, 64.0, 0.0) + val gen = LavaGenerator(genLoc) + TestHelper.addToRegistry(powerRegistry, gen, "lava_generator") + + // Container to the south (z+1) facing south (away from generator) + val containerLoc = TestHelper.createLocation(0.0, 64.0, 1.0) + val container = FluidContainer(containerLoc, BlockFace.SOUTH) + container.restoreState(FluidType.LAVA, 3) + TestHelper.addToRegistry(fluidRegistry, container, "fluid_container_south_lava_low") + + gen.callPowerUpdate() + + assertEquals(0, gen.currentPower) + assertEquals(3, container.storedAmount) + } + + @Test + fun `lava generator stops consuming when full`() { + val fluidRegistry = FluidBlockRegistry(TestHelper.mockPlugin) + val powerRegistry = PowerBlockRegistry(TestHelper.mockPlugin) + + val genLoc = TestHelper.createLocation(0.0, 64.0, 0.0) + val gen = LavaGenerator(genLoc) + gen.currentPower = 48 + TestHelper.addToRegistry(powerRegistry, gen, "lava_generator") + + // Two lava pipes adjacent - only one should be consumed (48 + 5 = 53 > 50, but 48+5=53, wait no - space is 2, less than 5) + val pipeLoc = TestHelper.createLocation(0.0, 64.0, -1.0) + val pipe = FluidPipe(pipeLoc, BlockFace.SOUTH) + pipe.storeFluid(FluidType.LAVA) + TestHelper.addToRegistry(fluidRegistry, pipe, "fluid_pipe_south_filled_lava") + + gen.callPowerUpdate() + + // Should NOT consume because space (2) < POWER_PER_LAVA (5) + assertEquals(48, gen.currentPower) + assertTrue(pipe.hasFluid()) + } + + @Test + fun `lava generator consumes from multiple sources in one tick`() { + val fluidRegistry = FluidBlockRegistry(TestHelper.mockPlugin) + val powerRegistry = PowerBlockRegistry(TestHelper.mockPlugin) + + val genLoc = TestHelper.createLocation(0.0, 64.0, 0.0) + val gen = LavaGenerator(genLoc) + TestHelper.addToRegistry(powerRegistry, gen, "lava_generator") + + // Pipe to the north + val pipe1Loc = TestHelper.createLocation(0.0, 64.0, -1.0) + val pipe1 = FluidPipe(pipe1Loc, BlockFace.SOUTH) + pipe1.storeFluid(FluidType.LAVA) + TestHelper.addToRegistry(fluidRegistry, pipe1, "fluid_pipe_south_filled_lava") + + // Pipe to the south + val pipe2Loc = TestHelper.createLocation(0.0, 64.0, 1.0) + val pipe2 = FluidPipe(pipe2Loc, BlockFace.NORTH) + pipe2.storeFluid(FluidType.LAVA) + TestHelper.addToRegistry(fluidRegistry, pipe2, "fluid_pipe_north_filled_lava") + + gen.callPowerUpdate() + + assertEquals(10, gen.currentPower) + assertFalse(pipe1.hasFluid()) + assertFalse(pipe2.hasFluid()) + } + + @Test + fun `lava generator does nothing when no adjacent fluid blocks`() { + FluidBlockRegistry(TestHelper.mockPlugin) + PowerBlockRegistry(TestHelper.mockPlugin) + + val gen = LavaGenerator(TestHelper.createLocation()) + + gen.callPowerUpdate() + + assertEquals(0, gen.currentPower) + } + + @Test + fun `lava generator does nothing when already at max storage`() { + val fluidRegistry = FluidBlockRegistry(TestHelper.mockPlugin) + val powerRegistry = PowerBlockRegistry(TestHelper.mockPlugin) + + val genLoc = TestHelper.createLocation(0.0, 64.0, 0.0) + val gen = LavaGenerator(genLoc) + gen.currentPower = 50 + TestHelper.addToRegistry(powerRegistry, gen, "lava_generator") + + val pipeLoc = TestHelper.createLocation(0.0, 64.0, -1.0) + val pipe = FluidPipe(pipeLoc, BlockFace.SOUTH) + pipe.storeFluid(FluidType.LAVA) + TestHelper.addToRegistry(fluidRegistry, pipe, "fluid_pipe_south_filled_lava") + + gen.callPowerUpdate() + + assertEquals(50, gen.currentPower) + assertTrue(pipe.hasFluid()) + } + + @Test + fun `lava generator descriptor has correct properties`() { + val desc = LavaGenerator.descriptor + assertEquals("lava_generator", desc.baseBlockId) + assertEquals("Lava Generator", desc.displayName) + assertEquals(2, desc.allRegistrableIds.size) + assertTrue(desc.allRegistrableIds.contains("lava_generator")) + assertTrue(desc.allRegistrableIds.contains("lava_generator_active")) + } +} diff --git a/src/test/kotlin/com/coderjoe/atlas/power/PowerBlockInitializerTest.kt b/src/test/kotlin/com/coderjoe/atlas/power/PowerBlockInitializerTest.kt index bf677a2..8021de9 100644 --- a/src/test/kotlin/com/coderjoe/atlas/power/PowerBlockInitializerTest.kt +++ b/src/test/kotlin/com/coderjoe/atlas/power/PowerBlockInitializerTest.kt @@ -26,8 +26,8 @@ class PowerBlockRegistrationTest { TestHelper.initPowerFactory() val ids = PowerBlockFactory.getRegisteredBlockIds() - // 1 solar + 6 drill + 4 battery + 6 cable = 17 - assertEquals(17, ids.size) + // 1 solar + 6 drill + 4 battery + 6 cable + 2 lava generator = 19 + assertEquals(19, ids.size) } @Test