diff --git a/build.gradle b/build.gradle
deleted file mode 100644
index 5498eeb..0000000
--- a/build.gradle
+++ /dev/null
@@ -1,49 +0,0 @@
-plugins {
- id 'java'
-}
-
-group = 'xyz.lncvrt'
-version = '1.0.0'
-
-repositories {
- mavenCentral()
- maven {
- name = "papermc-repo"
- url = "https://repo.papermc.io/repository/maven-public/"
- }
- maven {
- name = "sonatype"
- url = "https://oss.sonatype.org/content/groups/public/"
- }
-}
-
-dependencies {
- compileOnly("io.papermc.paper:paper-api:1.21.4-R0.1-SNAPSHOT")
-}
-
-def targetJavaVersion = 21
-java {
- def javaVersion = JavaVersion.toVersion(targetJavaVersion)
- sourceCompatibility = javaVersion
- targetCompatibility = javaVersion
- if (JavaVersion.current() < javaVersion) {
- toolchain.languageVersion = JavaLanguageVersion.of(targetJavaVersion)
- }
-}
-
-tasks.withType(JavaCompile).configureEach {
- options.encoding = 'UTF-8'
-
- if (targetJavaVersion >= 10 || JavaVersion.current().isJava10Compatible()) {
- options.release.set(targetJavaVersion)
- }
-}
-
-processResources {
- def props = [version: version]
- inputs.properties props
- filteringCharset 'UTF-8'
- filesMatching('plugin.yml') {
- expand props
- }
-}
diff --git a/build.gradle.kts b/build.gradle.kts
new file mode 100644
index 0000000..caace23
--- /dev/null
+++ b/build.gradle.kts
@@ -0,0 +1,45 @@
+plugins {
+ kotlin("jvm") version "2.1.20"
+ id("com.github.johnrengelman.shadow") version "8.1.1"
+ id("xyz.jpenilla.run-paper") version "2.3.1"
+}
+
+group = "xyz.lncvrt"
+version = "1.0.0"
+
+repositories {
+ mavenCentral()
+ maven("https://repo.papermc.io/repository/maven-public/") {
+ name = "papermc-repo"
+ }
+ maven("https://oss.sonatype.org/content/groups/public/") {
+ name = "sonatype"
+ }
+}
+
+dependencies {
+ compileOnly("io.papermc.paper:paper-api:1.21.4-R0.1-SNAPSHOT")
+ implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
+}
+
+val targetJavaVersion = 21
+kotlin {
+ jvmToolchain(targetJavaVersion)
+}
+
+tasks.build {
+ dependsOn("shadowJar")
+}
+
+tasks.processResources {
+ val props = mapOf("version" to version)
+ inputs.properties(props)
+ filteringCharset = "UTF-8"
+ filesMatching("plugin.yml") {
+ expand(props)
+ }
+}
+
+tasks.runServer {
+ minecraftVersion("1.21")
+}
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 37f853b..ed4c299 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-all.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
diff --git a/settings.gradle b/settings.gradle
deleted file mode 100644
index 6b98fc6..0000000
--- a/settings.gradle
+++ /dev/null
@@ -1 +0,0 @@
-rootProject.name = 'GalaxyCreations'
diff --git a/settings.gradle.kts b/settings.gradle.kts
new file mode 100644
index 0000000..969b482
--- /dev/null
+++ b/settings.gradle.kts
@@ -0,0 +1 @@
+rootProject.name = "GalaxyCreations"
diff --git a/src/main/java/xyz/lncvrt/galaxycreations/GalaxyCreations.java b/src/main/java/xyz/lncvrt/galaxycreations/GalaxyCreations.java
deleted file mode 100644
index 9a8b9bb..0000000
--- a/src/main/java/xyz/lncvrt/galaxycreations/GalaxyCreations.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package xyz.lncvrt.galaxycreations;
-
-import net.kyori.adventure.text.minimessage.MiniMessage;
-import org.bukkit.entity.Player;
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.Listener;
-import org.bukkit.event.player.PlayerJoinEvent;
-import org.bukkit.plugin.java.JavaPlugin;
-
-public final class GalaxyCreations extends JavaPlugin implements Listener {
- private final MiniMessage miniMessage = MiniMessage.miniMessage();
-
- @Override
- public void onEnable() {
- getServer().getPluginManager().registerEvents(this, this);
- }
-
- @EventHandler
- public void onPlayerJoinEvent(PlayerJoinEvent event) {
- Player player = event.getPlayer();
- if (!event.getPlayer().hasPlayedBefore()) {
- player.performCommand("p auto");
- player.sendMessage(miniMessage.deserialize(setPrefix("Welcome to Galaxy Network: Creative Server!\nYou have been teleported to your own plot!\nHere, you can build almost anything you want\nIf you need help, run the /discord command and we will help you!")));
- }
- }
-
- public String setPrefix(String message) {
- return "GalaxyNetwork » %s".formatted(message);
- }
-}
diff --git a/src/main/kotlin/xyz/lncvrt/galaxycreations/GalaxyCreations.kt b/src/main/kotlin/xyz/lncvrt/galaxycreations/GalaxyCreations.kt
new file mode 100644
index 0000000..d1356ae
--- /dev/null
+++ b/src/main/kotlin/xyz/lncvrt/galaxycreations/GalaxyCreations.kt
@@ -0,0 +1,19 @@
+package xyz.lncvrt.galaxycreations
+
+import net.kyori.adventure.text.minimessage.MiniMessage
+import org.bukkit.plugin.java.JavaPlugin
+import xyz.lncvrt.galaxycreations.events.PlayerJoinListener
+import xyz.lncvrt.galaxycreations.events.ProjectileLaunchListener
+
+class GalaxyCreations : JavaPlugin() {
+ internal val miniMessage = MiniMessage.miniMessage()
+
+ override fun onEnable() {
+ server.pluginManager.registerEvents(PlayerJoinListener(this), this)
+ server.pluginManager.registerEvents(ProjectileLaunchListener(), this)
+ }
+
+ internal fun setPrefix(message: String): String {
+ return "GalaxyNetwork » $message"
+ }
+}
diff --git a/src/main/kotlin/xyz/lncvrt/galaxycreations/events/PlayerJoinListener.kt b/src/main/kotlin/xyz/lncvrt/galaxycreations/events/PlayerJoinListener.kt
new file mode 100644
index 0000000..2edb930
--- /dev/null
+++ b/src/main/kotlin/xyz/lncvrt/galaxycreations/events/PlayerJoinListener.kt
@@ -0,0 +1,17 @@
+package xyz.lncvrt.galaxycreations.events
+
+import org.bukkit.event.EventHandler
+import org.bukkit.event.Listener
+import org.bukkit.event.player.PlayerJoinEvent
+import xyz.lncvrt.galaxycreations.GalaxyCreations
+
+class PlayerJoinListener(private val plugin: GalaxyCreations) : Listener {
+ @EventHandler
+ fun onPlayerJoinEvent(event: PlayerJoinEvent) {
+ val player = event.getPlayer()
+ if (!event.getPlayer().hasPlayedBefore()) {
+ player.performCommand("p auto")
+ player.sendMessage(plugin.miniMessage.deserialize(plugin.setPrefix("Welcome to Galaxy Network: Creative Server!\nYou have been teleported to your own plot!\nHere, you can build almost anything you want\nIf you need help, run the /discord command and we will help you!")))
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/xyz/lncvrt/galaxycreations/events/ProjectileLaunchListener.kt b/src/main/kotlin/xyz/lncvrt/galaxycreations/events/ProjectileLaunchListener.kt
new file mode 100644
index 0000000..6445893
--- /dev/null
+++ b/src/main/kotlin/xyz/lncvrt/galaxycreations/events/ProjectileLaunchListener.kt
@@ -0,0 +1,14 @@
+package xyz.lncvrt.galaxycreations.events
+
+import org.bukkit.entity.EntityType
+import org.bukkit.event.EventHandler
+import org.bukkit.event.Listener
+import org.bukkit.event.entity.ProjectileLaunchEvent
+
+class ProjectileLaunchListener : Listener {
+ @EventHandler
+ fun onProjectileLaunchEvent(event: ProjectileLaunchEvent) {
+ if (event.entityType == EntityType.ARROW) return
+ event.isCancelled = true
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/paper-plugin.yml b/src/main/resources/plugin.yml
similarity index 100%
rename from src/main/resources/paper-plugin.yml
rename to src/main/resources/plugin.yml