From cad059a376895c68d53e1c8de7be9c70117be076 Mon Sep 17 00:00:00 2001 From: ineanto Date: Sat, 13 Sep 2025 15:59:24 +0200 Subject: [PATCH] feat: convert to spigot plugin --- ...otlin-compiler-13630512019704424300.salive | 0 TODO.md | 5 +- build.gradle.kts | 14 ++++-- .../kotlin/xyz/ineanto/dragon/RunnerDragon.kt | 12 +++-- .../ineanto/dragon/commands/GameCommand.kt | 1 - .../dragon/event/end/FinalBlowListener.kt | 2 - .../dragon/schematic/SchematicLoader.kt | 47 +++++++++++++++++++ .../xyz/ineanto/dragon/world/WorldManager.kt | 13 +---- .../{paper-plugin.yml => plugin.yml} | 3 +- 9 files changed, 72 insertions(+), 25 deletions(-) create mode 100644 .kotlin/sessions/kotlin-compiler-13630512019704424300.salive create mode 100644 src/main/kotlin/xyz/ineanto/dragon/schematic/SchematicLoader.kt rename src/main/resources/{paper-plugin.yml => plugin.yml} (86%) diff --git a/.kotlin/sessions/kotlin-compiler-13630512019704424300.salive b/.kotlin/sessions/kotlin-compiler-13630512019704424300.salive new file mode 100644 index 0000000..e69de29 diff --git a/TODO.md b/TODO.md index 25aa553..1f1f398 100644 --- a/TODO.md +++ b/TODO.md @@ -1,5 +1,4 @@ - [ ] Système de bounties pour les nazes (objectifs à complèter) -- [ ] Système de palier par équipe (qui en est où par rapport au dragon) - [ ] Démarrage en forme de Title - [ ] spread le spawn dans un rayon de 1000 blocks @@ -11,4 +10,8 @@ balancer les coordonnées ```kotlin val advancement = Advancement.Builder.advancement().save({}, "runnerdragon:test").toBukkit() Player.getAdvancementProgress(advancement) + +// Localiser les structures proches +val locateNearestStructure = + player.world.locateNearestStructure(player.location, StructureType.STRONGHOLD, 300, false) ``` \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index 13bb9aa..59335d6 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -20,12 +20,12 @@ dependencies { paperweight.paperDevBundle("1.21.8-R0.1-SNAPSHOT") // Inventory UI - compileOnly(libs.invui) - compileOnly(libs.invui.kotlin) + implementation(libs.invui) + implementation(libs.invui.kotlin) - // Resource Pack (unused) - implementation(libs.glyphs.api) - implementation(libs.glyphs.resources) + // WorldEdit + compileOnly("com.sk89q.worldedit:worldedit-core:7.3.16-SNAPSHOT") + compileOnly("com.sk89q.worldedit:worldedit-bukkit:7.3.16-SNAPSHOT") implementation(libs.kotlin.stdlib) implementation(libs.commonsio) @@ -46,5 +46,9 @@ tasks { runServer { minecraftVersion("1.21.8") + + downloadPlugins { + url("https://cdn.modrinth.com/data/1u6JkXh5/versions/Jk1z2u7n/worldedit-bukkit-7.3.16.jar") + } } } \ No newline at end of file diff --git a/src/main/kotlin/xyz/ineanto/dragon/RunnerDragon.kt b/src/main/kotlin/xyz/ineanto/dragon/RunnerDragon.kt index b028544..7658f75 100644 --- a/src/main/kotlin/xyz/ineanto/dragon/RunnerDragon.kt +++ b/src/main/kotlin/xyz/ineanto/dragon/RunnerDragon.kt @@ -20,6 +20,7 @@ import xyz.ineanto.dragon.event.end.BlockPlaceListener import xyz.ineanto.dragon.event.end.FinalBlowListener import xyz.ineanto.dragon.event.waiting.WaitingListener import xyz.ineanto.dragon.player.PlayerManager +import xyz.ineanto.dragon.schematic.SchematicLoader import xyz.ineanto.dragon.scoreboard.ScoreboardTeams import xyz.ineanto.dragon.tasks.GracePeriodTask import xyz.ineanto.dragon.tasks.TimerTask @@ -27,6 +28,7 @@ import xyz.ineanto.dragon.teams.Team import xyz.ineanto.dragon.teams.TeamManager import xyz.ineanto.dragon.world.WorldManager import xyz.xenondevs.invui.InvUI +import java.io.File import java.time.Duration import java.time.Instant import java.util.* @@ -58,11 +60,13 @@ class RunnerDragon : JavaPlugin() { var DEAD_COWS = 0 var ELAPSED_TIME = 0 - var SPAWN_HEIGHT = 300 + var SPAWN_HEIGHT = 150 var TEAM_LOCK = false var NETHER_PORTAL_ENTERED = false var END_PORTAL_ENTERED = false + lateinit var LOBBY_SCHEMATIC: SchematicLoader + //............. // TASKS //............. @@ -129,8 +133,8 @@ class RunnerDragon : JavaPlugin() { DEAD_COWS = 0 logger.info("Génération du spawn...") - //LOBBY_SCHEMATIC = SchematicLoader(File("./lobby1.schem"), WORLD) - //val schematicSpawn = LOBBY_SCHEMATIC.spawnSchematicAt(0, SPAWN_HEIGHT, 0) + LOBBY_SCHEMATIC = SchematicLoader(File("./CloudCityTower.schem"), WorldManager.LIMBO_WORLD) + val schematicSpawn = LOBBY_SCHEMATIC.spawnSchematicAt(0, SPAWN_HEIGHT, 0) WorldManager.LIMBO_SPAWN = Location( WorldManager.LIMBO_WORLD, 0.0, @@ -177,7 +181,7 @@ class RunnerDragon : JavaPlugin() { .build() Bukkit.broadcast(launchComponent) - //LOBBY_SCHEMATIC.removeSchematic() + LOBBY_SCHEMATIC.removeSchematic() TIMER_TASK = TimerTask().runTaskTimer(instance, 0L, 20L) GRACE_PERIOD_TASK = GracePeriodTask().runTaskTimer(instance, 0L, 20L) diff --git a/src/main/kotlin/xyz/ineanto/dragon/commands/GameCommand.kt b/src/main/kotlin/xyz/ineanto/dragon/commands/GameCommand.kt index 7ca0cf0..715ccfb 100644 --- a/src/main/kotlin/xyz/ineanto/dragon/commands/GameCommand.kt +++ b/src/main/kotlin/xyz/ineanto/dragon/commands/GameCommand.kt @@ -9,7 +9,6 @@ import org.bukkit.Bukkit import org.bukkit.entity.Player import xyz.ineanto.dragon.RunnerDragon -@Suppress("UnstableApiUsage") class GameCommand : BasicCommand { override fun execute( stack: CommandSourceStack, diff --git a/src/main/kotlin/xyz/ineanto/dragon/event/end/FinalBlowListener.kt b/src/main/kotlin/xyz/ineanto/dragon/event/end/FinalBlowListener.kt index b4e0117..032a328 100644 --- a/src/main/kotlin/xyz/ineanto/dragon/event/end/FinalBlowListener.kt +++ b/src/main/kotlin/xyz/ineanto/dragon/event/end/FinalBlowListener.kt @@ -41,7 +41,6 @@ class FinalBlowListener : Listener { ) .build() - val teamComponent = Component.text() .append(RunnerDragon.PREFIX) .appendSpace() @@ -53,7 +52,6 @@ class FinalBlowListener : Listener { ) .appendSpace() - teamComponent.appendSpace() teamComponent.append(Component.text("!", NamedTextColor.WHITE, TextDecoration.BOLD)) diff --git a/src/main/kotlin/xyz/ineanto/dragon/schematic/SchematicLoader.kt b/src/main/kotlin/xyz/ineanto/dragon/schematic/SchematicLoader.kt new file mode 100644 index 0000000..1caa7ba --- /dev/null +++ b/src/main/kotlin/xyz/ineanto/dragon/schematic/SchematicLoader.kt @@ -0,0 +1,47 @@ +package xyz.ineanto.dragon.schematic + +import com.sk89q.worldedit.EditSession +import com.sk89q.worldedit.WorldEdit +import com.sk89q.worldedit.WorldEditException +import com.sk89q.worldedit.bukkit.BukkitAdapter +import com.sk89q.worldedit.extent.clipboard.Clipboard +import com.sk89q.worldedit.extent.clipboard.io.ClipboardFormats +import com.sk89q.worldedit.function.operation.Operation +import com.sk89q.worldedit.function.operation.Operations +import com.sk89q.worldedit.math.BlockVector3 +import com.sk89q.worldedit.session.ClipboardHolder +import org.bukkit.World +import java.io.File +import java.io.FileInputStream + + +class SchematicLoader(private val schematic: File, private val world: World) { + private lateinit var session: EditSession + + fun spawnSchematicAt(x: Int, y: Int, z: Int): Boolean { + val worldEditWorld = BukkitAdapter.adapt(world) + WorldEdit.getInstance().newEditSession(worldEditWorld).use operation@{ weSession -> + var clipboard: Clipboard + val format = ClipboardFormats.findByFile(schematic) + format!!.getReader(FileInputStream(schematic)).use { reader -> clipboard = reader.read() } + + session = weSession + val operation: Operation = ClipboardHolder(clipboard) + .createPaste(weSession) + .to(BlockVector3.at(x, y, z)) + .copyEntities(true) + .build() + try { + Operations.complete(operation) + return true + } catch (exception: WorldEditException) { + exception.printStackTrace() + return false + } + } + } + + fun removeSchematic() { + session.undo(session) + } +} \ No newline at end of file diff --git a/src/main/kotlin/xyz/ineanto/dragon/world/WorldManager.kt b/src/main/kotlin/xyz/ineanto/dragon/world/WorldManager.kt index 9313475..a4434ef 100644 --- a/src/main/kotlin/xyz/ineanto/dragon/world/WorldManager.kt +++ b/src/main/kotlin/xyz/ineanto/dragon/world/WorldManager.kt @@ -22,19 +22,10 @@ class WorldManager(private val instance: RunnerDragon) { fun init(): Boolean { val limboFolder = File(LIMBO_WORLD_NAME) - if (!limboFolder.exists()) { - // Limbo is the world where players are - // held (hostage) before the game starts. - instance.logger.severe("Limbo world doesn't exist! Generating an emergency spawn...") - LIMBO_WORLD = createWorld(LIMBO_WORLD_NAME, World.Environment.NORMAL, false) - } else { - // Load the Limbo world - LIMBO_WORLD = Bukkit.createWorld(WorldCreator(LIMBO_WORLD_NAME))!! - } - + LIMBO_WORLD = createWorld(LIMBO_WORLD_NAME, World.Environment.NORMAL, false) LIMBO_SPAWN = LIMBO_WORLD.spawnLocation LIMBO_WORLD.difficulty = Difficulty.PEACEFUL - cleanupPreviousWorlds() +// cleanupPreviousWorlds() createGameWorlds() return true } diff --git a/src/main/resources/paper-plugin.yml b/src/main/resources/plugin.yml similarity index 86% rename from src/main/resources/paper-plugin.yml rename to src/main/resources/plugin.yml index 54f1768..8459652 100644 --- a/src/main/resources/paper-plugin.yml +++ b/src/main/resources/plugin.yml @@ -2,7 +2,8 @@ name: RunnerDragon version: '1.1' api-version: '1.21' main: xyz.ineanto.dragon.RunnerDragon -loader: xyz.ineanto.dragon.RunnerDragonLoader +dependencies: + - WorldEdit commands: rd: