Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
32
Help us understand the problem. What is going on with this article?
@ReyADayer

2017年のMinecraftプラグイン開発はKotlinで決まり!Kotlin導入方法!

More than 1 year has passed since last update.

Kotlinとは?

プログラミング言語Kotlinには以下のような特徴があります

  • KotlinとはJavaと100%互換がある
    • JavaとKotlinの混在が可能
    • JavaからKotlinの呼び出し、KotlinからJavaの呼び出しが可能
  • Null安全
    • NullPointerExceptionをコンパイル段階で防げる
  • 自然に簡単に記述することができる
  • 開発元がJetBrainsでなおかつ、オープンソースなので、開発が止まるということが考えられにくい

この他にも様々な特徴があります。

Androidアプリでは、JavaからKotlinへの置き換えが進んでいるようです。
こうなったら、MinecraftでもKotlinへの置き換えを推進しようということで、この記事を書いてみました。

環境設定

IntelliJ IDEAのダウンロード

Minecraft Developmentプラグインのダウンロード

IntelliJ IDEAのプラグイン設定画面で、Browse Repositoryをクリック
Preferences.png

Minecraftと検索すると、MinecraftDevelopmentというプラグインが見つかるのでインストールして再起動します。
Browse_Repositories.png

同様に、Kotlinのプラグインも導入しておいてください。

プロジェクト作成

IntelliJ IDEAをリスタートして、新規プロジェクトを作成します。
MinecraftDevelopmentプラグインをインストールすると、Minecraft Pluginという項目が増えています。
その中から今回はSpigotPluginを選択して次へ進みます。

New_Project_1.png

プロジェクトの情報を入力します。
Gradleを選択して次へ進んでください
New_Project_2.png

Minecraftのバージョンを選択します。今回は1.11にして次へ進みます。
New_Project_3.png

プロジェクトの名前を入力して完了です。
New_Project_4.png

Gradleの設定

Gradleは以下のように設定しました。

build.gradle
apply plugin: 'java'
apply plugin: 'kotlin'

group = pluginGroup
version = pluginVersion

sourceCompatibility = 1.8
targetCompatibility = 1.8

configurations {
    embed
    compile.extendsFrom(embed)
}

repositories {
    mavenCentral()
    maven {
        name = 'spigotmc-repo'
        url = 'https://hub.spigotmc.org/nexus/content/groups/public/'
    }
    maven {
        name = 'sonatype'
        url = 'https://oss.sonatype.org/content/groups/public/'
    }
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.11'
    compile 'org.spigotmc:spigot-api:1.11-R0.1-SNAPSHOT'
    embed "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
}

import org.apache.tools.ant.filters.ReplaceTokens

processResources {
    from(sourceSets.main.resources.srcDirs) {
        filter ReplaceTokens, tokens: [version: version]
    }
}
buildscript {
    ext.kotlin_version = '1.0.5-3'
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

sourceSets {
    main.java.srcDirs += 'src/main/kotlin'
}

jar {
    from { configurations.embed.collect { it.isDirectory() ? it : zipTree(it) } }
}

別の方も記事を書いているのでそちらも参考にしてみてください
Kotlin で Spigot プラグインを作るための build.gradle - Qiita

Kotlinへの変換

Shiftボタン2回押すとダイアログが出てくるので、Kotlinと入力して、
Convert Java File to Kotlin File

を押して変換してください

スクリーンショット 2016-12-26 2.07.40.png

変換した後、以下のようにコードを変更してください。

KotlinPlugin.kt
package me.reyad.kotlin.kotlinplugin

import org.bukkit.plugin.java.JavaPlugin

class KotlinPlugin : JavaPlugin() {

    override fun onEnable() {
        // Plugin startup logic
        logger.info("Hello Kotlin!")
    }

    override fun onDisable() {
        // Plugin shutdown logic
    }
}

プラグインを有効にすると、サーバーログに「Hello Kotlin!」と出力されます。

Javaでは以下のように書いていました。

getLogger().info("Hello Kotlin!");

Kotlinでは以下のように書くことができます。

getLogger()をloggerとして書くことができます。

logger.info("Hello Kotlin!")

Build

ビルドボタンを押すと、Jarファイルが作成されます
KotlinPlugin_kt_-_KotlinPlugin_-____IdeaProjects_KotlinPlugin_.png

実行後、buildディレクトリにJarファイルが出力されています。
これをspigotのpluginディレクトリに入れれば動作します。

終わりに

上記のようにして、MinecraftでKotlinライフをスタートすることができます。
みなさんもKotlinの素晴らしさを体験してください!

32
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
kunlab
KUNの参加型マインクラフト企画に関する技術を共有します

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
32
Help us understand the problem. What is going on with this article?