All Projects → deanveloper → Kotlinplugin

deanveloper / Kotlinplugin

A Bukkit/Spigot plugin done in Kotlin

Programming Languages

kotlin
9241 projects

Labels

Projects that are alternatives of or similar to Kotlinplugin

Akarin
Akarin is a powerful (not yet) server software from the 'new dimension'
Stars: ✭ 332 (+606.38%)
Mutual labels:  bukkit
Multiverse Core
The original Bukkit Multi-World Plugin!
Stars: ✭ 541 (+1051.06%)
Mutual labels:  bukkit
Unifiedmetrics
Fully-featured metrics collection agent for Minecraft servers. Supports Prometheus and InfluxDB. Dashboard included out-of-box.
Stars: ✭ 29 (-38.3%)
Mutual labels:  bukkit
Yatopia
The Most Powerful and Feature Rich Minecraft Server Software!
Stars: ✭ 408 (+768.09%)
Mutual labels:  bukkit
Mohist
Minecraft Forge Hybrid server implementing the Paper/Spigot/Bukkit API, formerly known as Thermos/Cauldron/MCPC+
Stars: ✭ 489 (+940.43%)
Mutual labels:  bukkit
Minecraftdev
Plugin for IntelliJ IDEA that gives special support for Minecraft modding projects.
Stars: ✭ 645 (+1272.34%)
Mutual labels:  bukkit
Authmereloaded
The best authentication plugin for the Bukkit/Spigot API!
Stars: ✭ 296 (+529.79%)
Mutual labels:  bukkit
Libby
A runtime dependency management library for plugins running in Java-based Minecraft server platforms.
Stars: ✭ 36 (-23.4%)
Mutual labels:  bukkit
Tuinity
Stars: ✭ 531 (+1029.79%)
Mutual labels:  bukkit
Blur
Minecraft Game Engine written in Java & Kotlin
Stars: ✭ 21 (-55.32%)
Mutual labels:  bukkit
Discordsrv
The Minecraft <-> Discord bridge plugin your mother warned you about. https://www.spigotmc.org/resources/discordsrv.18494/
Stars: ✭ 437 (+829.79%)
Mutual labels:  bukkit
Viaversion
Allows the connection of newer clients to older server versions for Minecraft servers.
Stars: ✭ 463 (+885.11%)
Mutual labels:  bukkit
Confiscate
Discover duplication glitches, abusive staff giving items, x-ray or simply poor server economy.
Stars: ✭ 23 (-51.06%)
Mutual labels:  bukkit
Slimefun4
Slimefun 4 - A unique Spigot/Paper plugin that looks and feels like a modpack. We've been giving you backpacks, jetpacks, reactors and much more since 2013.
Stars: ✭ 369 (+685.11%)
Mutual labels:  bukkit
Essentials
The essential plugin suite for Minecraft servers.
Stars: ✭ 957 (+1936.17%)
Mutual labels:  bukkit
Paper
High performance Spigot fork that aims to fix gameplay and mechanics inconsistencies
Stars: ✭ 5,293 (+11161.7%)
Mutual labels:  bukkit
Minecraftdeveloperguide
📝Minecraft developer Chinese guide,我的世界开发者中文指南
Stars: ✭ 574 (+1121.28%)
Mutual labels:  bukkit
Shopchest
ShopChest - Spigot/Bukkit Plugin
Stars: ✭ 38 (-19.15%)
Mutual labels:  bukkit
Kspigot
Extended Spigot and Bukkit API for Kotlin
Stars: ✭ 35 (-25.53%)
Mutual labels:  bukkit
Drivebackupv2
Uploads Minecraft backups to Google Drive/OneDrive or by (S)FTP
Stars: ✭ 26 (-44.68%)
Mutual labels:  bukkit

Kotlin makes things easier

Let's take a look at each basic plugin subsystem...


Listeners

Null Safety

Listeners are pretty similar to how we do them in Java. Although in some events, null is very common and very annoying to handle, a great example being in PlayerInteractEvent. With Kotlin, its null-safety makes everything much easier. The following in Java:

String s = "Unnamed";
if(e.hasItem() && e.getItem().hasItemMeta() && e.getItem().getItemMeta().hasDisplayName()) {
    s = e.getItem().getItemMeta().getDisplayName();
}

can be condensed all the way down to a single line of code:

val s = e.item?.itemMeta?.displayName ?: "Unnamed"
Infix Functions

Infix functions makes code look much cleaner. Take a common operation done in PlayerMoveEvent, making it so that the calculation is only done if the player moves a block. Normally what you would see is...

Location from = e.getFrom();
Location to = e.getTo();
if(!(from.getBlockX() == to.getBlockX() && from.getBlockY() == to.getBlockY() && from.getBlockZ() == to.getBlockZ())) {
    e.getPlayer().damage(0.0);
}

Some people would make it look a bit cleaner by doing this...

public boolean equalsBlock(Location from, Location to) {
    return from.getBlockX() == to.getBlockX() && from.getBlockY() == to.getBlockY() && from.getBlockZ() == to.getBlockZ()
}
public void onMove(PlayerMoveEvent e) {
    if(!equalsBlock(e.getFrom(), e.getTo()) {
        e.getPlayer().damage(0.0);
    }
}

But with Kotlin, we can make it look even CLEANER with an infix function!

infix fun Location.equalsBlock(other: Location) =
        this.blockX == other.blockX && this.blockY == other.blockY && this.blockZ == other.blockZ

public fun onMove(e: PlayerMoveEvent) {
    if(!(e.from equalsBlock e.to)) {
        e.player.damage(0.0);
    }
}

(File for reference: KotlinListener.kt)


Commands

Echo

Commands are now also much easier. An echo command can be made in one line without use of other external libraries (such as google guava's Joiner class). In Kotlin, we can just do sender!!.sendMessage(args?.joinToString(separator=" ")) to echo the arguments back to the sender.

(File for reference: KotlinEchoCmd.kt)

Safe Casting

Also, Kotlin has safe casting as well. This makes running player-specific funtions on a CommandSender very easy!

(sender as? Player)?.chat("I just ran the /player command!") ?: sender?.sendMessage("You aren't a player :(")

(File for reference: KotlinPlayerCmd.kt)


Before you say I missed something...

Check out the wiki

Epilogue

I hope you found this useful! Kotlin is very useful for creating Bukkit plugins, and I hope to see some really cool plugins in the future made with this language. If you found this useful, feel free to star the repo and check it out whenever you want. I'll definitely add more to it in the future!

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].