Skip to content

Basic Kotlin Spigot Plugin Template for plugin developers who wants to use Kotlin. You can clone this repo or create a fork. You can change name, version and main from plugin.yml and they will change Gradle configuration.

License

Notifications You must be signed in to change notification settings

LiberaTeMetuMortis/KotlinSpigotPluginTemplate

Repository files navigation

How can you use this template?

How to clone

git clone https://github.com/MetuMortis-code/KotlinSpigotPluginTemplate.git

How to use

Configure project/src/main/resources/plugin.yml.
Set version, name, main, api-version and do more if you want.
You should run ./gradlew shadowJar to get usable jar.

Why Kotlin?

Which is in Java but better in Kotlin

Kotlin has tons of builtin methods while you are using an array you don't have to use stream library like in java.

val array = arrayOf(1, 2, 3, 4, 5)
val sum = array.sum()
val first = array.first()
val last = array.last()
val biggest = array.maxOrNull()

You don't have to create separate getter and setter methods for fields

var name = "John"
    get() = field.toUpperCase()
    set(value) {
        field = value.toLowerCase()
    }

You can use any Java library or api written in Java in Kotlin

import java.util.*
fun main(args: Array<String>) {
    val scanner = Scanner(System.`in`)
    print("Enter your name: ")
    val name = scanner.nextLine()
    println("Name is: $name")
    scanner.close()
}

What does Java doesn't have but Kotlin does have?

Kotlin has string templates.

val name = "John"
println("Hello, $name")

Kotlin has null safety, safe calls, elvis operator.

val nullableName: String? = null
val nameLength: Int = name?.length ?: -1
println(length)

Kotlin has data classes.

data class Person(val name: String, val age: Int)
val John = Person("John", 30)
val anotherJohn = Person("John", 30)
println(John.equals(anotherJohn))

Kotlin has keyword arguments like in Python.

fun sayHi(name: String = "No one", age: Integer) = println("Hi, $name, you are $age years old")
sayHi(age = 30)

Kotlin has ranges like in Python.

println(5 in 1..10)
for(i in 1..10) {
    println(i)
}

Kotlin has operator overloading.

data class Point(val x: Int, val y: Int)
operator fun Point.unaryMinus() = Point(-x, -y)
val point = Point(10, 20)
fun main() {
   println(-point)  // prints "Point(x=-10, y=-20)"
}

Kotlin has infix functions.

infix fun Int.powerOf(n: Int): Int {
    return this.pow(n)
}
println(2 powerOf 3)

Kotlin has extension functions.

fun MutableList<Int>.swap(index1: Int, index2: Int) {
    val tmp = this[index1] // 'this' corresponds to the list
    this[index1] = this[index2]
    this[index2] = tmp
}
val list = mutableListOf(1, 2, 3)
list.swap(0, 2) // 'this' inside 'swap()' will hold the value of 'list'

Kotlin has objects that don’t have any nontrivial supertypes.

val person = object {
    val name = "John"
    val age = 30
}
println(person.name)

Kotlin has destructuring declarations.

data class Person(val name: String, val age: Int)
val (name, age) = Person("John", 30)

Kotlin has scope functions.

data class Person(var name: String, var age: Int = 0, var city: String = "")
val adam = Person("Adam").apply {
    age = 32
    city = "London"        
}
println(adam) // Person(name=Adam, age=32, city=London)

Kotlin has smart casts.

fun getStringLength(obj: Any): Int? {
    if (obj is String) {
        return obj.length
    }
    return null
}

Kotlin

Why Gradle?

I used Gradle because scripting with Gradle using Kotlin is a lot easier than Maven

Gradle

About

Basic Kotlin Spigot Plugin Template for plugin developers who wants to use Kotlin. You can clone this repo or create a fork. You can change name, version and main from plugin.yml and they will change Gradle configuration.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages