From f6bebd133b82e665d6248c8264d4dbce5cd5528a Mon Sep 17 00:00:00 2001 From: Kariya Date: Sun, 7 Dec 2025 14:11:51 +0000 Subject: [PATCH] feat: Implement elevator plugin with jump/sneak listeners, command registration, and configuration, while updating dependencies and removing permits-lib. --- .gitmodules | 3 - build.gradle.kts | 26 +++---- kommand-lib | 2 +- permits-lib | 1 - settings.gradle.kts | 3 +- .../com/github/kaaariyaaa/elevator/App.kt | 16 ++++- .../elevator/command/CommandRegistrar.kt | 42 ++++++++++++ .../elevator/listeners/EventListener.kt | 67 +++++++++++++++++++ src/main/resources/config.yml | 4 ++ 9 files changed, 143 insertions(+), 21 deletions(-) delete mode 160000 permits-lib create mode 100644 src/main/kotlin/com/github/kaaariyaaa/elevator/command/CommandRegistrar.kt create mode 100644 src/main/kotlin/com/github/kaaariyaaa/elevator/listeners/EventListener.kt create mode 100644 src/main/resources/config.yml diff --git a/.gitmodules b/.gitmodules index d9ae06d..d3e40f8 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,3 @@ [submodule "kommand-lib"] path = kommand-lib url = git@gitea.hareworks.net:Hare/kommand-lib.git -[submodule "permits-lib"] - path = permits-lib - url = git@gitea.hareworks.net:Hare/permits-lib.git diff --git a/build.gradle.kts b/build.gradle.kts index 82d27a9..df31c7a 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -18,21 +18,21 @@ val exposedVersion = "1.0.0-rc-4" dependencies { compileOnly("io.papermc.paper:paper-api:1.21.10-R0.1-SNAPSHOT") - compileOnly("org.jetbrains.kotlin:kotlin-stdlib") + implementation("org.jetbrains.kotlin:kotlin-stdlib") - compileOnly("net.kyori:adventure-api:4.25.0") - compileOnly("net.kyori:adventure-text-minimessage:4.25.0") + implementation("net.kyori:adventure-api:4.25.0") + implementation("net.kyori:adventure-text-minimessage:4.25.0") - compileOnly("org.postgresql:postgresql:42.7.8") - compileOnly("org.jetbrains.kotlinx:kotlinx-datetime:0.7.1") - compileOnly("org.jetbrains.kotlinx:kotlinx-serialization-json:1.9.0") - compileOnly("org.jetbrains.exposed:exposed-core:$exposedVersion") - compileOnly("org.jetbrains.exposed:exposed-dao:$exposedVersion") - compileOnly("org.jetbrains.exposed:exposed-jdbc:$exposedVersion") - compileOnly("org.jetbrains.exposed:exposed-kotlin-datetime:$exposedVersion") - compileOnly("com.michael-bull.kotlin-result:kotlin-result:2.1.0") - compileOnly("net.hareworks:kommand-lib:1.1") - compileOnly("net.hareworks:permits-lib:1.1") + implementation("org.postgresql:postgresql:42.7.8") + implementation("org.jetbrains.kotlinx:kotlinx-datetime:0.7.1") + implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.9.0") + implementation("org.jetbrains.exposed:exposed-core:$exposedVersion") + implementation("org.jetbrains.exposed:exposed-dao:$exposedVersion") + implementation("org.jetbrains.exposed:exposed-jdbc:$exposedVersion") + implementation("org.jetbrains.exposed:exposed-kotlin-datetime:$exposedVersion") + implementation("com.michael-bull.kotlin-result:kotlin-result:2.1.0") + implementation("net.hareworks:kommand-lib:1.1") + implementation("net.hareworks:permits-lib:1.1") } tasks { withType { diff --git a/kommand-lib b/kommand-lib index 6c62d33..3835c9b 160000 --- a/kommand-lib +++ b/kommand-lib @@ -1 +1 @@ -Subproject commit 6c62d3306e2cc0e0fefe8ec7fb9b64a47caae3cb +Subproject commit 3835c9b9e2d488681b39f4cfd827e3e3371a1e1b diff --git a/permits-lib b/permits-lib deleted file mode 160000 index 660f9a3..0000000 --- a/permits-lib +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 660f9a343607513272346ac82b61eb38187b23e8 diff --git a/settings.gradle.kts b/settings.gradle.kts index 13b1a5b..daeca9e 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,4 +1,3 @@ rootProject.name = "elevator" -includeBuild("kommand-lib") -includeBuild("permits-lib") +includeBuild("kommand-lib") \ No newline at end of file diff --git a/src/main/kotlin/com/github/kaaariyaaa/elevator/App.kt b/src/main/kotlin/com/github/kaaariyaaa/elevator/App.kt index c4b9142..5effbee 100644 --- a/src/main/kotlin/com/github/kaaariyaaa/elevator/App.kt +++ b/src/main/kotlin/com/github/kaaariyaaa/elevator/App.kt @@ -1,8 +1,18 @@ package com.github.kaaariyaaa.elevator; +import com.github.kaaariyaaa.elevator.command.CommandRegistrar +import net.hareworks.kommand_lib.KommandLib +import net.hareworks.permits_lib.PermitsLib +import net.hareworks.permits_lib.domain.NodeRegistration + +import org.bukkit.permissions.PermissionDefault import org.bukkit.plugin.java.JavaPlugin public class App : JavaPlugin() { + + private var commands: KommandLib? = null + private val permits = PermitsLib.session(this) + companion object { lateinit var instance: App private set @@ -10,6 +20,10 @@ public class App : JavaPlugin() { override fun onEnable() { instance = this - logger.info("SamplePlugin enabled!!!!") + saveDefaultConfig() + server.pluginManager.registerEvents(com.github.kaaariyaaa.elevator.listeners.EventListener(this), this) + logger.info("Elevator plugin enabled!") + + commands = CommandRegistrar.register(this, permits) } } diff --git a/src/main/kotlin/com/github/kaaariyaaa/elevator/command/CommandRegistrar.kt b/src/main/kotlin/com/github/kaaariyaaa/elevator/command/CommandRegistrar.kt new file mode 100644 index 0000000..dc71711 --- /dev/null +++ b/src/main/kotlin/com/github/kaaariyaaa/elevator/command/CommandRegistrar.kt @@ -0,0 +1,42 @@ +package com.github.kaaariyaaa.elevator.command + +import com.github.kaaariyaaa.elevator.App +import net.hareworks.kommand_lib.KommandLib +import net.hareworks.kommand_lib.kommand +import net.hareworks.permits_lib.bukkit.MutationSession +import org.bukkit.permissions.PermissionDefault + +object CommandRegistrar { + fun register(plugin: App, permits: MutationSession): KommandLib { + return kommand(plugin) { + // Permission configuration + permissions { + namespace = "elevator" + defaultValue = PermissionDefault.TRUE + session(permits) + } + + // Main command structure + command("elevator", "el") { + description = "Elevator plugin main command" + + // Default execution if no arguments + executes { + sender.sendMessage("Elevator plugin v${plugin.description.version}") + } + + // Subcommand: /elevator reload + literal("reload") { + permission { + description = "Allows reloading the plugin" + defaultValue = PermissionDefault.OP + } + executes { + plugin.reloadConfig() + sender.sendMessage("Configuration reloaded.") + } + } + } + } + } +} diff --git a/src/main/kotlin/com/github/kaaariyaaa/elevator/listeners/EventListener.kt b/src/main/kotlin/com/github/kaaariyaaa/elevator/listeners/EventListener.kt new file mode 100644 index 0000000..f5fab6d --- /dev/null +++ b/src/main/kotlin/com/github/kaaariyaaa/elevator/listeners/EventListener.kt @@ -0,0 +1,67 @@ +package com.github.kaaariyaaa.elevator.listeners + +import org.bukkit.event.Listener +import org.bukkit.event.EventHandler +import org.bukkit.event.player.PlayerToggleSneakEvent +import com.destroystokyo.paper.event.player.PlayerJumpEvent +import org.bukkit.entity.Player +import org.bukkit.Material +import org.bukkit.block.Block + +import com.github.kaaariyaaa.elevator.App + +class EventListener(private val plugin: App) : Listener { + + private val oreBlock: Set + get() = plugin.config.getStringList("elevatorBlocks") + .mapNotNull { Material.matchMaterial(it) } + .toSet() + + @EventHandler + fun onJump(event: PlayerJumpEvent) { + val player = event.player + val blockUnder = player.location.subtract(0.0, 1.0, 0.0).block + + if (blockUnder.type.isSolid && blockUnder.type in oreBlock) { + var location = blockUnder.location + location = location.add(0.0, 1.0, 0.0) + + val maxHeight = plugin.config.getInt("maxHeight", 64) + var distance = 0 + + while (!location.block.type.isSolid && !(location.block.type in oreBlock) && distance < maxHeight) { + location = location.add(0.0, 1.0, 0.0) + distance++ + } + + if (location.block.type.isSolid && location.block.type in oreBlock) { + player.teleport(location.add(0.5, 1.0, 0.5).addRotation(player.location.yaw, player.location.pitch)) + } + } + } + + @EventHandler + fun onSneak(event: PlayerToggleSneakEvent) { + if (!event.isSneaking) return + + val player = event.player + val blockUnder = player.location.subtract(0.0, 1.0, 0.0).block + + if (blockUnder.type.isSolid && blockUnder.type in oreBlock) { + var location = blockUnder.location + location = location.subtract(0.0, 1.0, 0.0) + + val maxHeight = plugin.config.getInt("maxHeight", 64) + var distance = 0 + + while (!location.block.type.isSolid && !(location.block.type in oreBlock) && distance < maxHeight) { + location = location.subtract(0.0, 1.0, 0.0) + distance++ + } + + if (location.block.type.isSolid && location.block.type in oreBlock) { + player.teleport(location.add(0.5, 1.0, 0.5).addRotation(player.location.yaw, player.location.pitch)) + } + } + } +} diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml new file mode 100644 index 0000000..705c522 --- /dev/null +++ b/src/main/resources/config.yml @@ -0,0 +1,4 @@ +# Elevator Plugin Configuration + +# The maximum distance (in blocks) the elevator will search for a valid destination. +maxHeight: 64