Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 29 additions & 1 deletion src/main/kotlin/com/coderjoe/atlas/NexoIntegration.kt
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,35 @@ class NexoIntegration(private val plugin: JavaPlugin) {
"fluid_pipe_side_filled_lava_up",
"fluid_pipe_side_filled_lava_down",
"fluid_pipe_side_filled_lava_left",
"fluid_pipe_side_filled_lava_right"
"fluid_pipe_side_filled_lava_right",
"fluid_container_front",
"fluid_container_back",
"fluid_container_side",
"fluid_container_top",
"fluid_container_front_water_low",
"fluid_container_back_water_low",
"fluid_container_side_water_low",
"fluid_container_top_water_low",
"fluid_container_front_water_medium",
"fluid_container_back_water_medium",
"fluid_container_side_water_medium",
"fluid_container_top_water_medium",
"fluid_container_front_water_full",
"fluid_container_back_water_full",
"fluid_container_side_water_full",
"fluid_container_top_water_full",
"fluid_container_front_lava_low",
"fluid_container_back_lava_low",
"fluid_container_side_lava_low",
"fluid_container_top_lava_low",
"fluid_container_front_lava_medium",
"fluid_container_back_lava_medium",
"fluid_container_side_lava_medium",
"fluid_container_top_lava_medium",
"fluid_container_front_lava_full",
"fluid_container_back_lava_full",
"fluid_container_side_lava_full",
"fluid_container_top_lava_full"
)
for (textureName in textures) {
val textureFile = File(texturesFolder, "$textureName.png")
Expand Down
6 changes: 3 additions & 3 deletions src/main/kotlin/com/coderjoe/atlas/fluid/FluidBlock.kt
Original file line number Diff line number Diff line change
Expand Up @@ -20,15 +20,15 @@ abstract class FluidBlock(
internal var testPlugin: JavaPlugin? = null
}

fun hasFluid(): Boolean = storedFluid != FluidType.NONE
open fun hasFluid(): Boolean = storedFluid != FluidType.NONE

fun storeFluid(type: FluidType): Boolean {
open fun storeFluid(type: FluidType): Boolean {
if (storedFluid != FluidType.NONE) return false
storedFluid = type
return true
}

fun removeFluid(): FluidType {
open fun removeFluid(): FluidType {
val fluid = storedFluid
storedFluid = FluidType.NONE
return fluid
Expand Down
12 changes: 10 additions & 2 deletions src/main/kotlin/com/coderjoe/atlas/fluid/FluidBlockData.kt
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.coderjoe.atlas.fluid

import com.coderjoe.atlas.fluid.block.FluidContainer
import com.coderjoe.atlas.fluid.block.FluidPipe
import com.coderjoe.atlas.fluid.block.FluidPump
import org.bukkit.Location
Expand All @@ -13,13 +14,19 @@ data class FluidBlockData(
val y: Int,
val z: Int,
val fluidType: String,
val facing: String? = null
val facing: String? = null,
val storedAmount: Int? = null
) {
companion object {
fun fromFluidBlock(fluidBlock: FluidBlock, blockId: String): FluidBlockData {
val loc = fluidBlock.location
val facing = when (fluidBlock) {
is FluidPipe -> fluidBlock.facing.name
is FluidContainer -> fluidBlock.facing.name
else -> null
}
val storedAmount = when (fluidBlock) {
is FluidContainer -> fluidBlock.storedAmount
else -> null
}
return FluidBlockData(
Expand All @@ -29,7 +36,8 @@ data class FluidBlockData(
y = loc.blockY,
z = loc.blockZ,
fluidType = fluidBlock.storedFluid.name,
facing = facing
facing = facing,
storedAmount = storedAmount
)
}
}
Expand Down
20 changes: 16 additions & 4 deletions src/main/kotlin/com/coderjoe/atlas/fluid/FluidBlockDialog.kt
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.coderjoe.atlas.fluid

import com.coderjoe.atlas.fluid.block.FluidContainer
import com.coderjoe.atlas.fluid.block.FluidPipe
import com.coderjoe.atlas.fluid.block.FluidPump
import io.papermc.paper.dialog.Dialog
Expand Down Expand Up @@ -93,14 +94,23 @@ object FluidBlockDialog {
private fun getBlockDisplayName(fluidBlock: FluidBlock): String = when (fluidBlock) {
is FluidPump -> "Fluid Pump"
is FluidPipe -> "Fluid Pipe (${fluidBlock.facing.name.lowercase().replaceFirstChar { it.uppercase() }})"
is FluidContainer -> "Fluid Container (${fluidBlock.facing.name.lowercase().replaceFirstChar { it.uppercase() }})"
else -> "Fluid Block"
}

private fun buildFluidInfo(fluidBlock: FluidBlock): Component {
val fluidName = when (fluidBlock.storedFluid) {
FluidType.WATER -> "Water"
FluidType.LAVA -> "Lava"
FluidType.NONE -> "Empty"
val fluidName = if (fluidBlock is FluidContainer && fluidBlock.storedAmount > 0) {
when (fluidBlock.storedFluid) {
FluidType.WATER -> "Water (${fluidBlock.storedAmount}/${FluidContainer.MAX_CAPACITY})"
FluidType.LAVA -> "Lava (${fluidBlock.storedAmount}/${FluidContainer.MAX_CAPACITY})"
FluidType.NONE -> "Empty"
}
} else {
when (fluidBlock.storedFluid) {
FluidType.WATER -> "Water"
FluidType.LAVA -> "Lava"
FluidType.NONE -> "Empty"
}
}

val fluidColor = when (fluidBlock.storedFluid) {
Expand All @@ -119,6 +129,8 @@ object FluidBlockDialog {
.color(NamedTextColor.GRAY)
is FluidPipe -> Component.text("Pipe - transports fluid in facing direction")
.color(NamedTextColor.GRAY)
is FluidContainer -> Component.text("Container - stores up to ${FluidContainer.MAX_CAPACITY} units of fluid")
.color(NamedTextColor.GRAY)
else -> Component.text("Fluid block")
.color(NamedTextColor.GRAY)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.coderjoe.atlas.fluid

import com.coderjoe.atlas.fluid.block.FluidContainer
import com.coderjoe.atlas.fluid.block.FluidPipe
import com.coderjoe.atlas.fluid.block.FluidPump
import org.bukkit.plugin.java.JavaPlugin
Expand Down Expand Up @@ -37,6 +38,13 @@ object FluidBlockInitializer {
}
}

plugin.logger.info("Registering FluidContainer variants...")
for (variantId in FluidContainer.ALL_VARIANT_IDS) {
FluidBlockFactory.register(variantId) { location, facing ->
FluidContainer(location, facing)
}
}

val registeredBlocks = FluidBlockFactory.getRegisteredBlockIds()
plugin.logger.info("Initialized ${registeredBlocks.size} fluid block type(s): ${registeredBlocks.joinToString(", ")}")
plugin.logger.info("FluidBlockInitializer complete")
Expand Down
49 changes: 44 additions & 5 deletions src/main/kotlin/com/coderjoe/atlas/fluid/FluidBlockListener.kt
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.coderjoe.atlas.fluid

import com.coderjoe.atlas.fluid.block.FluidContainer
import com.coderjoe.atlas.fluid.block.FluidPipe
import com.coderjoe.atlas.fluid.block.FluidPump
import com.nexomc.nexo.api.NexoBlocks
Expand Down Expand Up @@ -39,6 +40,32 @@ class FluidBlockListener(
return
}

// Handle fluid_container base item: swap to directional variant
if (blockId == FluidContainer.BLOCK_ID) {
val facing = getPlayerFacing(event)
val variantId = FluidContainer.DIRECTIONAL_IDS[facing]
if (variantId == null) {
plugin.logger.warning("No directional variant for facing $facing")
return
}

plugin.logger.info("Swapping fluid_container to directional variant: $variantId (facing $facing)")

val location = event.block.location.clone()
plugin.server.scheduler.runTask(plugin, Runnable {
location.block.setType(Material.AIR, false)
NexoBlocks.place(variantId, location)

val fluidBlock = FluidBlockFactory.createFluidBlock(variantId, location, facing)
if (fluidBlock != null) {
registry.registerFluidBlock(fluidBlock, variantId)
} else {
plugin.logger.warning("Failed to create fluid block for variant: $variantId")
}
})
return
}

// Handle fluid_pipe base item: swap to directional variant
if (blockId == FluidPipe.BLOCK_ID) {
val facing = getPlayerFacing(event)
Expand All @@ -65,11 +92,22 @@ class FluidBlockListener(
return
}

// Handle directional variant placed directly
val facing = FluidPipe.facingFromBlockId(blockId)
if (facing != null) {
plugin.logger.info("Directional fluid pipe placed: $blockId (facing $facing)")
val fluidBlock = FluidBlockFactory.createFluidBlock(blockId, event.block.location, facing)
// Handle directional variant placed directly (pipe)
val pipeFacing = FluidPipe.facingFromBlockId(blockId)
if (pipeFacing != null) {
plugin.logger.info("Directional fluid pipe placed: $blockId (facing $pipeFacing)")
val fluidBlock = FluidBlockFactory.createFluidBlock(blockId, event.block.location, pipeFacing)
if (fluidBlock != null) {
registry.registerFluidBlock(fluidBlock, blockId)
}
return
}

// Handle directional variant placed directly (container)
val containerFacing = FluidContainer.facingFromBlockId(blockId)
if (containerFacing != null) {
plugin.logger.info("Directional fluid container placed: $blockId (facing $containerFacing)")
val fluidBlock = FluidBlockFactory.createFluidBlock(blockId, event.block.location, containerFacing)
if (fluidBlock != null) {
registry.registerFluidBlock(fluidBlock, blockId)
}
Expand Down Expand Up @@ -97,6 +135,7 @@ class FluidBlockListener(
val baseItemId = when (fluidBlock) {
is FluidPump -> FluidPump.BLOCK_ID
is FluidPipe -> FluidPipe.BLOCK_ID
is FluidContainer -> FluidContainer.BLOCK_ID
else -> null
}

Expand Down
13 changes: 11 additions & 2 deletions src/main/kotlin/com/coderjoe/atlas/fluid/FluidBlockPersistence.kt
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.coderjoe.atlas.fluid

import com.coderjoe.atlas.fluid.block.FluidContainer
import org.bukkit.configuration.file.YamlConfiguration
import org.bukkit.plugin.java.JavaPlugin
import java.io.File
Expand Down Expand Up @@ -28,6 +29,9 @@ class FluidBlockPersistence(private val plugin: JavaPlugin) {
if (data.facing != null) {
map["facing"] = data.facing
}
if (data.storedAmount != null) {
map["storedAmount"] = data.storedAmount
}
blockDataList.add(map)
}

Expand Down Expand Up @@ -65,8 +69,9 @@ class FluidBlockPersistence(private val plugin: JavaPlugin) {
val z = (blockDataMap["z"] as? Number)?.toInt() ?: continue
val fluidType = blockDataMap["fluidType"] as? String ?: "NONE"
val facing = blockDataMap["facing"] as? String
val storedAmount = (blockDataMap["storedAmount"] as? Number)?.toInt()

val data = FluidBlockData(blockId, world, x, y, z, fluidType, facing)
val data = FluidBlockData(blockId, world, x, y, z, fluidType, facing, storedAmount)
val location = data.toLocation(plugin)

if (location == null) {
Expand All @@ -78,7 +83,11 @@ class FluidBlockPersistence(private val plugin: JavaPlugin) {
val fluidBlock = FluidBlockFactory.createFluidBlock(blockId, location, data.toBlockFace())

if (fluidBlock != null) {
fluidBlock.storedFluid = data.toFluidType()
if (fluidBlock is FluidContainer && data.storedAmount != null) {
fluidBlock.restoreState(data.toFluidType(), data.storedAmount)
} else {
fluidBlock.storedFluid = data.toFluidType()
}
registry.registerFluidBlock(fluidBlock, blockId)
loadedCount++
} else {
Expand Down
Loading