From a356b8381776d20aa3a72b9e3f93bafe9d7477c3 Mon Sep 17 00:00:00 2001 From: CoderJoe Date: Tue, 10 Mar 2026 21:45:38 -0500 Subject: [PATCH] Add conveyor belt block and transport system MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit New transport block system parallel to power and fluid, with full registry, factory, persistence, and dialog infrastructure. Conveyor belt is a directional CHORUSBLOCK (6px tall) that teleports dropped items 1 block forward every second. Uses custom model JSON for reduced height, with directional top textures showing arrows. Also fixes directional placement fallback for blocks that only support horizontal directions (NORTH/SOUTH/EAST/WEST) — applies to both DIRECTIONAL and DIRECTIONAL_OPPOSITE placement types. --- src/main/kotlin/com/coderjoe/atlas/Atlas.kt | 45 ++++- .../com/coderjoe/atlas/NexoIntegration.kt | 23 +++ .../coderjoe/atlas/core/AtlasBlockListener.kt | 13 +- .../atlas/transport/TransportBlock.kt | 20 ++ .../atlas/transport/TransportBlockDialog.kt | 78 ++++++++ .../atlas/transport/TransportBlockFactory.kt | 12 ++ .../transport/TransportBlockPersistence.kt | 18 ++ .../atlas/transport/TransportBlockRegistry.kt | 30 +++ .../atlas/transport/block/ConveyorBelt.kt | 61 ++++++ .../resources/nexo/items/atlas_blocks.yml | 151 ++++++++++++++ .../atlas/models/block/conveyor_belt.json | 19 ++ .../textures/block/conveyor_belt_back.png | Bin 0 -> 12526 bytes .../textures/block/conveyor_belt_bottom.png | Bin 0 -> 13562 bytes .../textures/block/conveyor_belt_front.png | Bin 0 -> 12674 bytes .../textures/block/conveyor_belt_side.png | Bin 0 -> 13629 bytes .../textures/block/conveyor_belt_top_east.png | Bin 0 -> 13077 bytes .../block/conveyor_belt_top_north.png | Bin 0 -> 13724 bytes .../block/conveyor_belt_top_south.png | Bin 0 -> 13641 bytes .../textures/block/conveyor_belt_top_west.png | Bin 0 -> 12995 bytes .../nexo/recipes/shapeless/atlas_recipes.yml | 12 ++ .../com/coderjoe/atlas/AtlasPluginTest.kt | 26 +++ .../kotlin/com/coderjoe/atlas/TestHelper.kt | 39 ++++ .../atlas/transport/ConveyorBeltTest.kt | 186 ++++++++++++++++++ 23 files changed, 730 insertions(+), 3 deletions(-) create mode 100644 src/main/kotlin/com/coderjoe/atlas/transport/TransportBlock.kt create mode 100644 src/main/kotlin/com/coderjoe/atlas/transport/TransportBlockDialog.kt create mode 100644 src/main/kotlin/com/coderjoe/atlas/transport/TransportBlockFactory.kt create mode 100644 src/main/kotlin/com/coderjoe/atlas/transport/TransportBlockPersistence.kt create mode 100644 src/main/kotlin/com/coderjoe/atlas/transport/TransportBlockRegistry.kt create mode 100644 src/main/kotlin/com/coderjoe/atlas/transport/block/ConveyorBelt.kt create mode 100644 src/main/resources/nexo/pack/assets/atlas/models/block/conveyor_belt.json create mode 100644 src/main/resources/nexo/pack/assets/atlas/textures/block/conveyor_belt_back.png create mode 100644 src/main/resources/nexo/pack/assets/atlas/textures/block/conveyor_belt_bottom.png create mode 100644 src/main/resources/nexo/pack/assets/atlas/textures/block/conveyor_belt_front.png create mode 100644 src/main/resources/nexo/pack/assets/atlas/textures/block/conveyor_belt_side.png create mode 100644 src/main/resources/nexo/pack/assets/atlas/textures/block/conveyor_belt_top_east.png create mode 100644 src/main/resources/nexo/pack/assets/atlas/textures/block/conveyor_belt_top_north.png create mode 100644 src/main/resources/nexo/pack/assets/atlas/textures/block/conveyor_belt_top_south.png create mode 100644 src/main/resources/nexo/pack/assets/atlas/textures/block/conveyor_belt_top_west.png create mode 100644 src/test/kotlin/com/coderjoe/atlas/transport/ConveyorBeltTest.kt diff --git a/src/main/kotlin/com/coderjoe/atlas/Atlas.kt b/src/main/kotlin/com/coderjoe/atlas/Atlas.kt index 7e4efa3..56429cd 100644 --- a/src/main/kotlin/com/coderjoe/atlas/Atlas.kt +++ b/src/main/kotlin/com/coderjoe/atlas/Atlas.kt @@ -10,6 +10,10 @@ import com.coderjoe.atlas.power.PowerBlockDialog import com.coderjoe.atlas.power.PowerBlockFactory import com.coderjoe.atlas.power.PowerBlockPersistence import com.coderjoe.atlas.power.PowerBlockRegistry +import com.coderjoe.atlas.transport.TransportBlockDialog +import com.coderjoe.atlas.transport.TransportBlockFactory +import com.coderjoe.atlas.transport.TransportBlockPersistence +import com.coderjoe.atlas.transport.TransportBlockRegistry import org.bukkit.plugin.java.JavaPlugin import org.bukkit.scheduler.BukkitTask @@ -20,6 +24,8 @@ class Atlas : JavaPlugin() { private lateinit var powerBlockPersistence: PowerBlockPersistence private lateinit var fluidBlockRegistry: FluidBlockRegistry private lateinit var fluidBlockPersistence: FluidBlockPersistence + private lateinit var transportBlockRegistry: TransportBlockRegistry + private lateinit var transportBlockPersistence: TransportBlockPersistence private var autoSaveTask: BukkitTask? = null override fun onEnable() { @@ -42,9 +48,11 @@ class Atlas : JavaPlugin() { PowerBlockDialog.init(this) FluidBlockDialog.init(this) + TransportBlockDialog.init(this) initPowerSystem() initFluidSystem() + initTransportSystem() // Register unified listener val powerSystem = BlockSystem( @@ -67,8 +75,18 @@ class Atlas : JavaPlugin() { } ) + val transportSystem = BlockSystem( + name = "transport", + registry = transportBlockRegistry, + factory = TransportBlockFactory, + descriptors = transportDescriptors(), + showDialog = { player, block -> + TransportBlockDialog.showTransportDialog(player, block as com.coderjoe.atlas.transport.TransportBlock, transportBlockRegistry) + } + ) + server.pluginManager.registerEvents( - AtlasBlockListener(this, listOf(powerSystem, fluidSystem)), + AtlasBlockListener(this, listOf(powerSystem, fluidSystem, transportSystem)), this ) @@ -76,6 +94,7 @@ class Atlas : JavaPlugin() { autoSaveTask = server.scheduler.runTaskTimer(this, Runnable { powerBlockPersistence.save(powerBlockRegistry) fluidBlockPersistence.save(fluidBlockRegistry) + transportBlockPersistence.save(transportBlockRegistry) }, 6000L, 6000L) logger.atlasInfo("Atlas plugin enabled!") @@ -92,8 +111,13 @@ class Atlas : JavaPlugin() { fluidBlockPersistence.save(fluidBlockRegistry) } + if (::transportBlockPersistence.isInitialized && ::transportBlockRegistry.isInitialized) { + transportBlockPersistence.save(transportBlockRegistry) + } + PowerBlockDialog.cleanup() FluidBlockDialog.cleanup() + TransportBlockDialog.cleanup() if (::powerBlockRegistry.isInitialized) { powerBlockRegistry.stopAll() @@ -103,6 +127,10 @@ class Atlas : JavaPlugin() { fluidBlockRegistry.stopAll() } + if (::transportBlockRegistry.isInitialized) { + transportBlockRegistry.stopAll() + } + logger.atlasInfo("Atlas plugin has been disabled!") } @@ -124,6 +152,21 @@ class Atlas : JavaPlugin() { logger.atlasInfo("Fluid system initialized with ${FluidBlockFactory.getRegisteredBlockIds().size} block types") } + fun initTransportSystem() { + TransportBlockFactory.registerFromDescriptors(transportDescriptors().values) + transportBlockRegistry = TransportBlockRegistry(this) + transportBlockPersistence = TransportBlockPersistence(this) + transportBlockPersistence.load(transportBlockRegistry) + + logger.atlasInfo("Transport system initialized with ${TransportBlockFactory.getRegisteredBlockIds().size} block types") + } + + private fun transportDescriptors(): Map { + return listOf( + com.coderjoe.atlas.transport.block.ConveyorBelt.descriptor + ).associateBy { it.baseBlockId } + } + private fun powerDescriptors(): Map { return listOf( com.coderjoe.atlas.power.block.SmallSolarPanel.descriptor, diff --git a/src/main/kotlin/com/coderjoe/atlas/NexoIntegration.kt b/src/main/kotlin/com/coderjoe/atlas/NexoIntegration.kt index 751da9d..84bd986 100644 --- a/src/main/kotlin/com/coderjoe/atlas/NexoIntegration.kt +++ b/src/main/kotlin/com/coderjoe/atlas/NexoIntegration.kt @@ -12,6 +12,7 @@ class NexoIntegration(private val plugin: JavaPlugin) { fun initialize() { copyItemConfigurations() copyTextures() + copyModels() copyRecipes() plugin.logger.atlasInfo("Atlas Nexo integration initialized") } @@ -78,6 +79,28 @@ class NexoIntegration(private val plugin: JavaPlugin) { } } + private fun copyModels() { + val modelsFolder = File(nexoFolder, "pack/assets/atlas/models/block") + if (!modelsFolder.exists()) { + modelsFolder.mkdirs() + } + + val prefix = "nexo/pack/assets/atlas/models/block/" + val modelPaths = discoverResources(prefix, ".json") + + for (resourcePath in modelPaths) { + val fileName = resourcePath.substringAfterLast("/") + val modelFile = File(modelsFolder, fileName) + plugin.saveResource(resourcePath, true) + val sourceFile = File(plugin.dataFolder, resourcePath) + if (sourceFile.exists()) { + sourceFile.copyTo(modelFile, overwrite = true) + sourceFile.delete() + plugin.logger.atlasInfo("Copied ${fileName.removeSuffix(".json")} model to Nexo") + } + } + } + private fun copyRecipes() { val recipesFolder = File(nexoFolder, "recipes/shapeless") if (!recipesFolder.exists()) { diff --git a/src/main/kotlin/com/coderjoe/atlas/core/AtlasBlockListener.kt b/src/main/kotlin/com/coderjoe/atlas/core/AtlasBlockListener.kt index 9eabb5f..356e488 100644 --- a/src/main/kotlin/com/coderjoe/atlas/core/AtlasBlockListener.kt +++ b/src/main/kotlin/com/coderjoe/atlas/core/AtlasBlockListener.kt @@ -60,7 +60,7 @@ class AtlasBlockListener( createAndRegister(system, blockId, location, facing) } PlacementType.DIRECTIONAL -> { - val facing = getPlayerFacing(event) + val facing = getDirectionalFacing(event, descriptor) val variantId = descriptor.directionalVariants[facing] ?: return val location = event.block.location.clone() plugin.server.scheduler.runTask(plugin, Runnable { @@ -70,7 +70,7 @@ class AtlasBlockListener( }) } PlacementType.DIRECTIONAL_OPPOSITE -> { - val facing = getPlayerFacing(event).oppositeFace + val facing = getDirectionalFacing(event, descriptor, opposite = true) val variantId = descriptor.directionalVariants[facing] ?: blockId val location = event.block.location.clone() plugin.server.scheduler.runTask(plugin, Runnable { @@ -146,6 +146,15 @@ class AtlasBlockListener( } companion object { + fun getDirectionalFacing(event: BlockPlaceEvent, descriptor: BlockDescriptor, opposite: Boolean = false): BlockFace { + val raw = getPlayerFacing(event) + val facing = if (opposite) raw.oppositeFace else raw + if (descriptor.directionalVariants.containsKey(facing)) return facing + // Fall back to the player's horizontal look direction + val fallback = event.player.facing + return if (opposite) fallback.oppositeFace else fallback + } + fun getPlayerFacing(event: BlockPlaceEvent): BlockFace { val against = event.blockAgainst.location val placed = event.block.location diff --git a/src/main/kotlin/com/coderjoe/atlas/transport/TransportBlock.kt b/src/main/kotlin/com/coderjoe/atlas/transport/TransportBlock.kt new file mode 100644 index 0000000..0b9bfd8 --- /dev/null +++ b/src/main/kotlin/com/coderjoe/atlas/transport/TransportBlock.kt @@ -0,0 +1,20 @@ +package com.coderjoe.atlas.transport + +import com.coderjoe.atlas.core.AtlasBlock +import com.coderjoe.atlas.core.BlockRegistry +import org.bukkit.Location + +abstract class TransportBlock( + location: Location +) : AtlasBlock(location) { + + protected abstract fun transportUpdate() + + override fun blockUpdate() { + transportUpdate() + } + + override fun getRegistry(): BlockRegistry<*> { + return TransportBlockRegistry.instance ?: throw IllegalStateException("TransportBlockRegistry not initialized") + } +} diff --git a/src/main/kotlin/com/coderjoe/atlas/transport/TransportBlockDialog.kt b/src/main/kotlin/com/coderjoe/atlas/transport/TransportBlockDialog.kt new file mode 100644 index 0000000..0fa5d60 --- /dev/null +++ b/src/main/kotlin/com/coderjoe/atlas/transport/TransportBlockDialog.kt @@ -0,0 +1,78 @@ +package com.coderjoe.atlas.transport + +import com.coderjoe.atlas.core.AtlasBlockDialog +import com.coderjoe.atlas.core.BlockRegistry +import com.coderjoe.atlas.transport.block.ConveyorBelt +import io.papermc.paper.dialog.Dialog +import io.papermc.paper.registry.data.dialog.ActionButton +import io.papermc.paper.registry.data.dialog.DialogBase +import io.papermc.paper.registry.data.dialog.action.DialogAction +import io.papermc.paper.registry.data.dialog.action.DialogActionCallback +import io.papermc.paper.registry.data.dialog.body.DialogBody +import io.papermc.paper.registry.data.dialog.type.DialogType +import net.kyori.adventure.text.Component +import net.kyori.adventure.text.event.ClickCallback +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 body = DialogBody.plainMessage(bodyText) + + val closeAction = DialogAction.customClick( + DialogActionCallback { _, audience -> + val p = audience as? Player ?: return@DialogActionCallback + onClose(p) + }, + ClickCallback.Options.builder().build() + ) + + val closeButton = ActionButton.builder(Component.text("Close")) + .action(closeAction) + .build() + + val dialog = Dialog.create { factory -> + factory.empty() + .base( + DialogBase.builder(title) + .body(listOf(body)) + .canCloseWithEscape(false) + .afterAction(DialogBase.DialogAfterAction.CLOSE) + .build() + ) + .type(DialogType.notice(closeButton)) + } + + player.showDialog(dialog) + } + + private fun getBlockDisplayName(block: TransportBlock): String = when (block) { + is ConveyorBelt -> "Conveyor Belt (${block.facing.name.lowercase().replaceFirstChar { it.uppercase() }})" + else -> "Transport Block" + } + + private fun getBlockDescription(block: TransportBlock): Component = when (block) { + is ConveyorBelt -> Component.text("Moves items forward 1 block every second") + .color(NamedTextColor.GRAY) + else -> Component.text("Transport block") + .color(NamedTextColor.GRAY) + } +} diff --git a/src/main/kotlin/com/coderjoe/atlas/transport/TransportBlockFactory.kt b/src/main/kotlin/com/coderjoe/atlas/transport/TransportBlockFactory.kt new file mode 100644 index 0000000..ad47df5 --- /dev/null +++ b/src/main/kotlin/com/coderjoe/atlas/transport/TransportBlockFactory.kt @@ -0,0 +1,12 @@ +package com.coderjoe.atlas.transport + +import com.coderjoe.atlas.core.BlockFactory +import org.bukkit.Location +import org.bukkit.block.BlockFace + +object TransportBlockFactory : BlockFactory() { + + fun createTransportBlock(blockId: String, location: Location, facing: BlockFace = BlockFace.SELF): TransportBlock? { + return create(blockId, location, facing) + } +} diff --git a/src/main/kotlin/com/coderjoe/atlas/transport/TransportBlockPersistence.kt b/src/main/kotlin/com/coderjoe/atlas/transport/TransportBlockPersistence.kt new file mode 100644 index 0000000..06af196 --- /dev/null +++ b/src/main/kotlin/com/coderjoe/atlas/transport/TransportBlockPersistence.kt @@ -0,0 +1,18 @@ +package com.coderjoe.atlas.transport + +import com.coderjoe.atlas.core.BlockPersistence +import org.bukkit.plugin.java.JavaPlugin + +class TransportBlockPersistence(plugin: JavaPlugin) { + private val persistence = BlockPersistence( + plugin = plugin, + fileName = "transport_blocks.yml", + yamlKey = "transport_blocks", + factory = TransportBlockFactory, + serialize = { _, _ -> emptyMap() }, + restore = { _, _ -> } + ) + + fun save(registry: TransportBlockRegistry) = persistence.save(registry) + fun load(registry: TransportBlockRegistry) = persistence.load(registry) +} diff --git a/src/main/kotlin/com/coderjoe/atlas/transport/TransportBlockRegistry.kt b/src/main/kotlin/com/coderjoe/atlas/transport/TransportBlockRegistry.kt new file mode 100644 index 0000000..36bfbe0 --- /dev/null +++ b/src/main/kotlin/com/coderjoe/atlas/transport/TransportBlockRegistry.kt @@ -0,0 +1,30 @@ +package com.coderjoe.atlas.transport + +import com.coderjoe.atlas.core.BlockRegistry +import org.bukkit.Location +import org.bukkit.block.BlockFace +import org.bukkit.plugin.java.JavaPlugin + +class TransportBlockRegistry(plugin: JavaPlugin) : BlockRegistry(plugin) { + + companion object { + var instance: TransportBlockRegistry? = null + private set + + fun locationKey(location: Location): String = BlockRegistry.locationKey(location) + } + + init { + instance = this + } + + fun registerTransportBlock(block: TransportBlock, blockId: String) = register(block, blockId) + + fun unregisterTransportBlock(location: Location): TransportBlock? = unregister(location) + + fun getTransportBlock(location: Location): TransportBlock? = getBlock(location) + + fun getAdjacentTransportBlock(location: Location, face: BlockFace): TransportBlock? = getAdjacentBlock(location, face) + + fun getAllTransportBlocksWithIds(): List> = getAllBlocksWithIds() +} diff --git a/src/main/kotlin/com/coderjoe/atlas/transport/block/ConveyorBelt.kt b/src/main/kotlin/com/coderjoe/atlas/transport/block/ConveyorBelt.kt new file mode 100644 index 0000000..5f8fd08 --- /dev/null +++ b/src/main/kotlin/com/coderjoe/atlas/transport/block/ConveyorBelt.kt @@ -0,0 +1,61 @@ +package com.coderjoe.atlas.transport.block + +import com.coderjoe.atlas.core.BlockDescriptor +import com.coderjoe.atlas.core.PlacementType +import com.coderjoe.atlas.transport.TransportBlock +import org.bukkit.Location +import org.bukkit.block.BlockFace +import org.bukkit.entity.Item + +class ConveyorBelt(location: Location, override val facing: BlockFace) : TransportBlock(location) { + + companion object { + const val BLOCK_ID = "conveyor_belt" + private const val MOVE_DISTANCE = 1.0 + + val DIRECTIONAL_IDS = mapOf( + BlockFace.NORTH to "conveyor_belt_north", + BlockFace.SOUTH to "conveyor_belt_south", + BlockFace.EAST to "conveyor_belt_east", + BlockFace.WEST to "conveyor_belt_west" + ) + + val ID_TO_FACING = DIRECTIONAL_IDS.entries.associate { (face, id) -> id to face } + + fun facingFromBlockId(blockId: String): BlockFace? = ID_TO_FACING[blockId] + + val descriptor = BlockDescriptor( + baseBlockId = BLOCK_ID, + displayName = "Conveyor Belt", + description = "Moves items forward in the facing direction", + placementType = PlacementType.DIRECTIONAL, + directionalVariants = DIRECTIONAL_IDS, + allRegistrableIds = DIRECTIONAL_IDS.values.toList(), + constructor = { loc, face -> ConveyorBelt(loc, face) } + ) + } + + override val baseBlockId: String = BLOCK_ID + + override val updateIntervalTicks: Long = 20L + + override fun getVisualStateBlockId(): String = DIRECTIONAL_IDS[facing]!! + + override fun transportUpdate() { + val world = location.world ?: return + + // Belt surface is at y + 6/16 (0.375), scan items resting on top + val scanCenter = location.clone().add(0.5, 0.75, 0.5) + val nearbyItems = world.getNearbyEntities(scanCenter, 0.5, 0.75, 0.5) + .filterIsInstance() + + if (nearbyItems.isEmpty()) return + + val dx = facing.direction.x * MOVE_DISTANCE + val dz = facing.direction.z * MOVE_DISTANCE + + for (item in nearbyItems) { + item.teleportAsync(item.location.add(dx, 0.0, dz)) + } + } +} diff --git a/src/main/resources/nexo/items/atlas_blocks.yml b/src/main/resources/nexo/items/atlas_blocks.yml index a3365e9..a1f0759 100644 --- a/src/main/resources/nexo/items/atlas_blocks.yml +++ b/src/main/resources/nexo/items/atlas_blocks.yml @@ -2709,3 +2709,154 @@ lava_generator_active: loots: - nexo_item: lava_generator probability: 1.0 + +# ─── Conveyor Belt ──────────────────────────────────────────────── +conveyor_belt: + itemname: "Conveyor Belt" + material: paper + Pack: + generate_model: true + parent_model: atlas:block/conveyor_belt + textures: + north: atlas:block/conveyor_belt_front + south: atlas:block/conveyor_belt_back + east: atlas:block/conveyor_belt_side + west: atlas:block/conveyor_belt_side + up: atlas:block/conveyor_belt_top_north + down: atlas:block/conveyor_belt_bottom + Mechanics: + custom_block: + type: CHORUSBLOCK + custom_variation: 44 + hardness: 3 + 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: conveyor_belt + probability: 1.0 + +conveyor_belt_north: + itemname: "Conveyor Belt" + material: paper + Pack: + generate_model: true + parent_model: atlas:block/conveyor_belt + textures: + north: atlas:block/conveyor_belt_front + south: atlas:block/conveyor_belt_back + east: atlas:block/conveyor_belt_side + west: atlas:block/conveyor_belt_side + up: atlas:block/conveyor_belt_top_north + down: atlas:block/conveyor_belt_bottom + Mechanics: + custom_block: + type: CHORUSBLOCK + custom_variation: 45 + hardness: 3 + 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: conveyor_belt + probability: 1.0 + +conveyor_belt_south: + itemname: "Conveyor Belt" + material: paper + Pack: + generate_model: true + parent_model: atlas:block/conveyor_belt + textures: + north: atlas:block/conveyor_belt_back + south: atlas:block/conveyor_belt_front + east: atlas:block/conveyor_belt_side + west: atlas:block/conveyor_belt_side + up: atlas:block/conveyor_belt_top_south + down: atlas:block/conveyor_belt_bottom + Mechanics: + custom_block: + type: CHORUSBLOCK + custom_variation: 46 + hardness: 3 + 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: conveyor_belt + probability: 1.0 + +conveyor_belt_east: + itemname: "Conveyor Belt" + material: paper + Pack: + generate_model: true + parent_model: atlas:block/conveyor_belt + textures: + north: atlas:block/conveyor_belt_side + south: atlas:block/conveyor_belt_side + east: atlas:block/conveyor_belt_front + west: atlas:block/conveyor_belt_back + up: atlas:block/conveyor_belt_top_east + down: atlas:block/conveyor_belt_bottom + Mechanics: + custom_block: + type: CHORUSBLOCK + custom_variation: 47 + hardness: 3 + 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: conveyor_belt + probability: 1.0 + +conveyor_belt_west: + itemname: "Conveyor Belt" + material: paper + Pack: + generate_model: true + parent_model: atlas:block/conveyor_belt + textures: + north: atlas:block/conveyor_belt_side + south: atlas:block/conveyor_belt_side + east: atlas:block/conveyor_belt_back + west: atlas:block/conveyor_belt_front + up: atlas:block/conveyor_belt_top_west + down: atlas:block/conveyor_belt_bottom + Mechanics: + custom_block: + type: CHORUSBLOCK + custom_variation: 48 + hardness: 3 + 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: conveyor_belt + probability: 1.0 diff --git a/src/main/resources/nexo/pack/assets/atlas/models/block/conveyor_belt.json b/src/main/resources/nexo/pack/assets/atlas/models/block/conveyor_belt.json new file mode 100644 index 0000000..ea82db7 --- /dev/null +++ b/src/main/resources/nexo/pack/assets/atlas/models/block/conveyor_belt.json @@ -0,0 +1,19 @@ +{ + "textures": { + "particle": "#up" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 6, 16], + "faces": { + "north": { "texture": "#north", "uv": [0, 10, 16, 16] }, + "south": { "texture": "#south", "uv": [0, 10, 16, 16] }, + "east": { "texture": "#east", "uv": [0, 10, 16, 16] }, + "west": { "texture": "#west", "uv": [0, 10, 16, 16] }, + "up": { "texture": "#up" }, + "down": { "texture": "#down", "cullface": "down" } + } + } + ] +} diff --git a/src/main/resources/nexo/pack/assets/atlas/textures/block/conveyor_belt_back.png b/src/main/resources/nexo/pack/assets/atlas/textures/block/conveyor_belt_back.png new file mode 100644 index 0000000000000000000000000000000000000000..3afc14f80271f4c60903bee494fe96f1fbe9be90 GIT binary patch literal 12526 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 Ap8x;= literal 0 HcmV?d00001 diff --git a/src/main/resources/nexo/pack/assets/atlas/textures/block/conveyor_belt_front.png b/src/main/resources/nexo/pack/assets/atlas/textures/block/conveyor_belt_front.png new file mode 100644 index 0000000000000000000000000000000000000000..01037ccb38a53081d1df485b8101a9cbe5edebf5 GIT binary patch literal 12674 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/nexo/pack/assets/atlas/textures/block/conveyor_belt_side.png b/src/main/resources/nexo/pack/assets/atlas/textures/block/conveyor_belt_side.png new file mode 100644 index 0000000000000000000000000000000000000000..c445ab940228fc3dc79e60279ba451aeae2c3866 GIT binary patch literal 13629 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 FV1mjj5)uFa 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 703928b..587ff75 100644 --- a/src/main/resources/nexo/recipes/shapeless/atlas_recipes.yml +++ b/src/main/resources/nexo/recipes/shapeless/atlas_recipes.yml @@ -107,3 +107,15 @@ lava_generator_recipe: C: amount: 1 minecraft_type: MAGMA_BLOCK + +conveyor_belt_recipe: + result: + nexo_item: conveyor_belt + amount: 4 + ingredients: + A: + amount: 3 + minecraft_type: IRON_INGOT + B: + amount: 3 + minecraft_type: REDSTONE diff --git a/src/test/kotlin/com/coderjoe/atlas/AtlasPluginTest.kt b/src/test/kotlin/com/coderjoe/atlas/AtlasPluginTest.kt index 52f6155..058ae3e 100644 --- a/src/test/kotlin/com/coderjoe/atlas/AtlasPluginTest.kt +++ b/src/test/kotlin/com/coderjoe/atlas/AtlasPluginTest.kt @@ -6,6 +6,9 @@ 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.* import org.junit.jupiter.api.Assertions.* @@ -16,6 +19,7 @@ class AtlasPluginTest { TestHelper.setup() PowerBlockDialog.init(TestHelper.mockPlugin) FluidBlockDialog.init(TestHelper.mockPlugin) + TransportBlockDialog.init(TestHelper.mockPlugin) } @AfterEach @@ -35,6 +39,12 @@ class AtlasPluginTest { assertEquals(63, FluidBlockFactory.getRegisteredBlockIds().size) } + @Test + fun `transport system initializes with 4 block types`() { + TestHelper.initTransportFactory() + assertEquals(4, TransportBlockFactory.getRegisteredBlockIds().size) + } + @Test fun `power registry is set after creation`() { val registry = PowerBlockRegistry(TestHelper.mockPlugin) @@ -49,11 +59,19 @@ class AtlasPluginTest { assertSame(registry, FluidBlockRegistry.instance) } + @Test + fun `transport registry is set after creation`() { + val registry = TransportBlockRegistry(TestHelper.mockPlugin) + assertNotNull(TransportBlockRegistry.instance) + assertSame(registry, TransportBlockRegistry.instance) + } + @Test fun `dialog cleanup does not throw`() { assertDoesNotThrow { PowerBlockDialog.cleanup() FluidBlockDialog.cleanup() + TransportBlockDialog.cleanup() } } @@ -73,6 +91,14 @@ class AtlasPluginTest { assertEquals(0, registry.getAllFluidBlocksWithIds().size) } + @Test + fun `stopAll clears transport blocks`() { + TestHelper.initTransportFactory() + val registry = TransportBlockRegistry(TestHelper.mockPlugin) + registry.stopAll() + assertEquals(0, registry.getAllTransportBlocksWithIds().size) + } + @Test fun `auto-save interval is 6000 ticks`() { // The Atlas plugin schedules auto-save at 6000L ticks diff --git a/src/test/kotlin/com/coderjoe/atlas/TestHelper.kt b/src/test/kotlin/com/coderjoe/atlas/TestHelper.kt index 16413dc..68f2e96 100644 --- a/src/test/kotlin/com/coderjoe/atlas/TestHelper.kt +++ b/src/test/kotlin/com/coderjoe/atlas/TestHelper.kt @@ -11,6 +11,10 @@ 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.transport.TransportBlock +import com.coderjoe.atlas.transport.TransportBlockFactory +import com.coderjoe.atlas.transport.TransportBlockRegistry +import com.coderjoe.atlas.transport.block.ConveyorBelt import com.coderjoe.atlas.power.block.LavaGenerator import com.coderjoe.atlas.power.block.PowerCable import com.coderjoe.atlas.power.block.SmallBattery @@ -88,6 +92,12 @@ object TestHelper { method.invoke(this) } + fun TransportBlock.callTransportUpdate() { + val method = TransportBlock::class.java.getDeclaredMethod("transportUpdate") + method.isAccessible = true + method.invoke(this) + } + fun addToRegistry(registry: PowerBlockRegistry, block: PowerBlock, blockId: String) { val blocksField = BlockRegistry::class.java.getDeclaredField("blocks") blocksField.isAccessible = true @@ -104,6 +114,22 @@ object TestHelper { blockIds[key] = blockId } + fun addToRegistry(registry: TransportBlockRegistry, block: TransportBlock, blockId: String) { + val blocksField = BlockRegistry::class.java.getDeclaredField("blocks") + blocksField.isAccessible = true + @Suppress("UNCHECKED_CAST") + val blocks = blocksField.get(registry) as java.util.concurrent.ConcurrentHashMap + + val blockIdsField = BlockRegistry::class.java.getDeclaredField("blockIds") + blockIdsField.isAccessible = true + @Suppress("UNCHECKED_CAST") + val blockIds = blockIdsField.get(registry) as java.util.concurrent.ConcurrentHashMap + + val key = TransportBlockRegistry.locationKey(block.location) + blocks[key] = block + blockIds[key] = blockId + } + fun addToRegistry(registry: FluidBlockRegistry, block: FluidBlock, blockId: String) { val blocksField = BlockRegistry::class.java.getDeclaredField("blocks") blocksField.isAccessible = true @@ -132,6 +158,12 @@ object TestHelper { instanceField.isAccessible = true instanceField.set(FluidBlockRegistry.Companion, null) } catch (_: Exception) {} + + try { + val instanceField = TransportBlockRegistry.Companion::class.java.getDeclaredField("instance") + instanceField.isAccessible = true + instanceField.set(TransportBlockRegistry.Companion, null) + } catch (_: Exception) {} } fun initPowerFactory() { @@ -149,8 +181,15 @@ object TestHelper { )) } + fun initTransportFactory() { + TransportBlockFactory.registerFromDescriptors(listOf( + ConveyorBelt.descriptor + )) + } + private fun clearFactories() { PowerBlockFactory.clear() FluidBlockFactory.clear() + TransportBlockFactory.clear() } } diff --git a/src/test/kotlin/com/coderjoe/atlas/transport/ConveyorBeltTest.kt b/src/test/kotlin/com/coderjoe/atlas/transport/ConveyorBeltTest.kt new file mode 100644 index 0000000..9890063 --- /dev/null +++ b/src/test/kotlin/com/coderjoe/atlas/transport/ConveyorBeltTest.kt @@ -0,0 +1,186 @@ +package com.coderjoe.atlas.transport + +import com.coderjoe.atlas.TestHelper +import com.coderjoe.atlas.TestHelper.callTransportUpdate +import com.coderjoe.atlas.transport.block.ConveyorBelt +import io.mockk.every +import io.mockk.mockk +import io.mockk.verify +import org.bukkit.Location +import org.bukkit.World +import org.bukkit.block.BlockFace +import org.bukkit.entity.Item +import org.bukkit.util.BoundingBox +import org.junit.jupiter.api.* +import org.junit.jupiter.api.Assertions.* +import java.util.concurrent.CompletableFuture + +class ConveyorBeltTest { + + @BeforeEach + fun setup() { + TestHelper.setup() + } + + @AfterEach + fun teardown() { + TestHelper.teardown() + } + + @Test + fun `conveyor belt has correct facing`() { + val belt = ConveyorBelt(TestHelper.createLocation(), BlockFace.NORTH) + assertEquals(BlockFace.NORTH, belt.facing) + } + + @Test + fun `conveyor belt visual state matches facing`() { + for ((face, id) in ConveyorBelt.DIRECTIONAL_IDS) { + val belt = ConveyorBelt(TestHelper.createLocation(), face) + assertEquals(id, belt.getVisualStateBlockId()) + } + } + + @Test + fun `conveyor belt base block ID is conveyor_belt`() { + val belt = ConveyorBelt(TestHelper.createLocation(), BlockFace.SOUTH) + assertEquals("conveyor_belt", belt.baseBlockId) + } + + @Test + fun `conveyor belt descriptor has correct properties`() { + val desc = ConveyorBelt.descriptor + assertEquals("conveyor_belt", desc.baseBlockId) + assertEquals("Conveyor Belt", desc.displayName) + assertEquals(4, desc.allRegistrableIds.size) + assertTrue(desc.allRegistrableIds.contains("conveyor_belt_north")) + assertTrue(desc.allRegistrableIds.contains("conveyor_belt_south")) + assertTrue(desc.allRegistrableIds.contains("conveyor_belt_east")) + assertTrue(desc.allRegistrableIds.contains("conveyor_belt_west")) + } + + @Test + fun `conveyor belt descriptor has directional placement`() { + val desc = ConveyorBelt.descriptor + assertEquals(com.coderjoe.atlas.core.PlacementType.DIRECTIONAL, desc.placementType) + assertEquals(4, desc.directionalVariants.size) + } + + @Test + fun `facingFromBlockId returns correct facing`() { + assertEquals(BlockFace.NORTH, ConveyorBelt.facingFromBlockId("conveyor_belt_north")) + assertEquals(BlockFace.SOUTH, ConveyorBelt.facingFromBlockId("conveyor_belt_south")) + assertEquals(BlockFace.EAST, ConveyorBelt.facingFromBlockId("conveyor_belt_east")) + assertEquals(BlockFace.WEST, ConveyorBelt.facingFromBlockId("conveyor_belt_west")) + } + + @Test + fun `facingFromBlockId returns null for unknown ID`() { + assertNull(ConveyorBelt.facingFromBlockId("conveyor_belt_up")) + assertNull(ConveyorBelt.facingFromBlockId("unknown")) + } + + @Test + fun `all directional IDs are registered`() { + TestHelper.initTransportFactory() + for (id in ConveyorBelt.DIRECTIONAL_IDS.values) { + assertTrue(TransportBlockFactory.isRegistered(id), "Missing conveyor belt ID: $id") + } + } + + @Test + fun `factory creates ConveyorBelt from directional ID`() { + TestHelper.initTransportFactory() + val block = TransportBlockFactory.createTransportBlock("conveyor_belt_north", TestHelper.createLocation(), BlockFace.NORTH) + assertTrue(block is ConveyorBelt) + assertEquals(BlockFace.NORTH, block!!.facing) + } + + @Test + fun `transport update does not throw with no nearby entities`() { + TransportBlockRegistry(TestHelper.mockPlugin) + val belt = ConveyorBelt(TestHelper.createLocation(), BlockFace.NORTH) + + every { TestHelper.mockWorld.getNearbyEntities(any(), any(), any(), any()) } returns emptyList() + + assertDoesNotThrow { + belt.callTransportUpdate() + } + } + + @Test + fun `transport update moves item north`() { + TransportBlockRegistry(TestHelper.mockPlugin) + val belt = ConveyorBelt(TestHelper.createLocation(0.0, 64.0, 0.0), BlockFace.NORTH) + + val itemLoc = Location(TestHelper.mockWorld, 0.5, 64.375, 0.5) + val mockItem = mockk(relaxed = true) + every { mockItem.location } returns itemLoc + every { mockItem.teleportAsync(any()) } returns CompletableFuture.completedFuture(true) + + every { TestHelper.mockWorld.getNearbyEntities(any(), any(), any(), any()) } returns listOf(mockItem) + + belt.callTransportUpdate() + + verify { mockItem.teleportAsync(match { loc -> + loc.z < 0.5 && loc.x == 0.5 + }) } + } + + @Test + fun `transport update moves item east`() { + TransportBlockRegistry(TestHelper.mockPlugin) + val belt = ConveyorBelt(TestHelper.createLocation(0.0, 64.0, 0.0), BlockFace.EAST) + + val itemLoc = Location(TestHelper.mockWorld, 0.5, 64.375, 0.5) + val mockItem = mockk(relaxed = true) + every { mockItem.location } returns itemLoc + every { mockItem.teleportAsync(any()) } returns CompletableFuture.completedFuture(true) + + every { TestHelper.mockWorld.getNearbyEntities(any(), any(), any(), any()) } returns listOf(mockItem) + + belt.callTransportUpdate() + + verify { mockItem.teleportAsync(match { loc -> + loc.x > 0.5 && loc.z == 0.5 + }) } + } + + @Test + fun `transport update moves multiple items`() { + TransportBlockRegistry(TestHelper.mockPlugin) + val belt = ConveyorBelt(TestHelper.createLocation(0.0, 64.0, 0.0), BlockFace.SOUTH) + + val item1 = mockk(relaxed = true) + val item2 = mockk(relaxed = true) + every { item1.location } returns Location(TestHelper.mockWorld, 0.3, 64.4, 0.3) + every { item2.location } returns Location(TestHelper.mockWorld, 0.7, 64.4, 0.7) + every { item1.teleportAsync(any()) } returns CompletableFuture.completedFuture(true) + every { item2.teleportAsync(any()) } returns CompletableFuture.completedFuture(true) + + every { TestHelper.mockWorld.getNearbyEntities(any(), any(), any(), any()) } returns listOf(item1, item2) + + belt.callTransportUpdate() + + verify { item1.teleportAsync(any()) } + verify { item2.teleportAsync(any()) } + } + + @Test + fun `transport update ignores non-item entities`() { + TransportBlockRegistry(TestHelper.mockPlugin) + val belt = ConveyorBelt(TestHelper.createLocation(), BlockFace.NORTH) + + val mockPlayer = mockk(relaxed = true) + every { TestHelper.mockWorld.getNearbyEntities(any(), any(), any(), any()) } returns listOf(mockPlayer) + + assertDoesNotThrow { + belt.callTransportUpdate() + } + } + + @Test + fun `descriptor description mentions direction`() { + assertTrue(ConveyorBelt.descriptor.description.contains("forward")) + } +}