/EasySpigotAPI

A library for easy use of the Spigot API

Primary LanguageKotlinApache License 2.0Apache-2.0

EasySpigotAPI

GitHub release (latest by date) maven-central ktlint EasySpigotAPI

A library for easy use of the Spigot API.

サンプルコード

コマンドを簡単に作成することができます。

Without EasySpigotAPI

# plugin.yml
commands:
  teleport:
    # ...
override fun onEnable() {
    getCommand("teleport")?.setExecutor(TeleportCommand)
}

object TeleportCommand : CommandExecutor, TabExecutor {
    override fun onCommand(sender: CommandSender, command: Command, label: String, args: Array<out String>): Boolean {
        // ...
    }

    override fun onTabComplete(sender: CommandSender, command: Command, alias: String, args: Array<out String>): MutableList<String> {
        // ...
    }
}

With EasySpigotAPI

plugin.yml にコマンドを書く必要はありません。

plugin.command("teleport") {
    // タブ補完の設定を行える
    tab {
        // 引数が何も入力されていない場合の補完候補
        argument {
            add("here")
            addAll(onlinePlayerNames)
        }

        // 最初の引数が here の場合の補完候補
        argument("here **") {
            addAll(onlinePlayerNames)
        }
    }

    // 実行時の処理を設定できる
    execute {
        // ...
    }
}

TextComponentを簡単に生成するための関数・クラスを追加します。

コンフィグを簡単に読み込むことができます。

Without EasySpigotAPI

val file = File(plugin.dataFolder, "config.yml")
if (file.exists()) {
    val config = YamlConfiguration.loadConfiguration(file)
    val message = config.getString("message")
    // ...
}

// 複数ファイル
File(plugin.dataFolder, "mobs").listFiles()?.forEach { file ->
    val config = YamlConfiguration.loadConfiguration(file)
    val id = config.getString("id", file.nameWithoutExtension)
    config.getConfigurationSection("attribute")?.getKeys(false)?.forEach { name ->
        val level = config.getInt("attribute.$name.level", 1)
        // ...
    }
    // ...
}

With EasySpigotAPI

plugin.config(sender, "config.yml") {
    val message = get("message", ConfigDataType.String)
    // ...
}

// 複数ファイル
plugin.configDirectory(sender, "mobs") {
    val id = get("id", ConfigDataType.String, file.nameWithoutExtension)
    section("attribute")?.forEach { name ->
        val level = get("attribute.$name.level", ConfigDataType.Int, 1)
        // ...
    }
    // ...
}

イベント定義をラムダ式で書くことができます。

Without EasySpigotAPI

@EventHandler
fun on(e: PlayerJoinEvent) {
    e.joinMessage = ">> Join ${e.player.displayName}"
}

With EasySpigotAPI

event<PlayerJoinEvent> { e ->
    e.joinMessage = ">> Join ${it.player.displayName}"
}

インベントリを簡単に扱うことができます。

Without EasySpigotAPI

val inventoryTitle = "Inventory Title"

@EventHandler
fun on(event: InventoryClickEvent) {
    if (event.inventory == event.clickedInventory && event.view.title == inventoryTitle) {
        when (event.slot) {
            4 -> {
                val player = event.whoClicked as? Player ?: return
                player.playSound(player.location, Sound.ENTITY_PLAYER_LEVELUP, 1F, 1F)
            }
            13 -> {
                when (event.type) {
                    ClickType.LEFT -> {
                        event.inventory.setItem(13, ItemStack(Material.BUCKET))
                    }
                    ClickType.RIGHT -> {
                        event.inventory.setItem(13, ItemStack(Material.WATER_BUCKET))
                    }
                }
            }
        }
    }
}

fun open(player: Player) {
    player.openInventory(
        Bukkit.createInventory(null, 36, inventoryTitle).apply {
            setItem(4, ItemStack(Material.PUFFERFISH).apply {
                itemMeta = itemMeta?.apply {
                    setDisplayName("§6フグだょ")
                }
            })
            setItem(13, ItemStack(Material.WATER_BUCKET))
        }
    )
}

With EasySpigotAPI

inventory("Inventory Title", 4) {
    item(4, Material.PUFFERFISH, "&6フグだょ") {
        onClick {
            player.playSound(Sound.ENTITY_PLAYER_LEVELUP)
        }
    }
    item(13, Material.WATER_BUCKET) {
        onClick(ClickType.LEFT) {
            item(13, Material.BUCKET)
        }
        onClick(ClickType.RIGHT) {
            item(13, Material.WATER_BUCKET)
        }
    }
}.open(player)

アイテム関連の便利な関数を追加します。

メッセージ関連の便利な関数を追加します。

NMSを使うための関数を追加します。

パーティクル関連の便利な関数を追加します。

スケジューラを簡単に使うことができます。

Without EasySpigotAPI

object : BukkitRunnable() {
    override fun run() {
        // ...
    }
}.runTaskTimer(plugin, 0, 30 * 20)

object : BukkitRunnable() {
    override fun run() {
        // ...
    }
}.runTaskTimerAsynchronously(plugin, 0, 30 * 20)

With EasySpigotAPI

plugin.runTaskTimer(30 * 20) {
    // ...
}

plugin.runTaskTimer(30 * 20, async = true) {
    // ...
}

音関連の便利な関数を追加します。

文字列関連の便利な関数を追加します。

UUIDの便利な関数・クラスを追加します。

ワールド関連の便利なクラスを追加します。

その他

テンプレートプロジェクト

Spigot Paper Purpur Yatopia

導入

EasySpigotAPI をプラグインとして導入する

EasySpigotAPI を導入したプラグインに加えて EasySpigotAPI もサーバーのプラグインに追加する必要があります。

build.gradle

repositories {
    mavenCentral()
}

dependencies {
    api('com.github.sya-ri:EasySpigotAPI:2.3.2') {
        exclude group: 'org.spigotmc', module: 'spigot-api'
    }
}

build.gradle.kts

repositories {
    mavenCentral()
}

dependencies {
    api("com.github.sya-ri:EasySpigotAPI:2.3.2") {
        exclude(group = "org.spigotmc", module = "spigot-api")
    }
}

一つのプラグインの中に EasySpigotAPI もまとめる

EasySpigotAPI を導入したプラグインの中に必要なものが同梱され、EasySpigotAPI を別で導入する必要がありません。

build.gradle

plugins {
    id 'com.github.johnrengelman.shadow' version '6.1.0'
}

repositories {
    mavenCentral()
}

configurations {
    shadowApi
    api.extendsFrom shadowApi
}

dependencies {
    shadowApi('com.github.sya-ri:EasySpigotAPI:2.3.2') {
        exclude group: 'org.spigotmc', module: 'spigot-api'
    }
}

shadowJar {
    configurations = [project.configurations.shadowApi]
}

build.gradle.kts

plugins {
    id("com.github.johnrengelman.shadow") version "6.1.0"
}

val shadowApi by configurations.creating
configurations["api"].extendsFrom(shadowApi)

repositories {
    mavenCentral()
}

dependencies {
    shadowApi("com.github.sya-ri:EasySpigotAPI:2.3.2") {
        exclude(group = "org.spigotmc", module = "spigot-api")
    }
}

tasks.withType<ShadowJar> {
    configurations = listOf(shadowApi)
}

バッジ

EasySpigotAPI

[![EasySpigotAPI](https://img.shields.io/badge/EasySpigotAPI-%E2%AC%85-4D4.svg)](https://github.com/sya-ri/EasySpigotAPI)