A library for easy use of the Spigot API.
コマンドを簡単に作成することができます。
# 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> {
// ...
}
}
plugin.yml
にコマンドを書く必要はありません。
plugin.command("teleport") {
// タブ補完の設定を行える
tab {
// 引数が何も入力されていない場合の補完候補
argument {
add("here")
addAll(onlinePlayerNames)
}
// 最初の引数が here の場合の補完候補
argument("here **") {
addAll(onlinePlayerNames)
}
}
// 実行時の処理を設定できる
execute {
// ...
}
}
TextComponentを簡単に生成するための関数・クラスを追加します。
コンフィグを簡単に読み込むことができます。
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)
// ...
}
// ...
}
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)
// ...
}
// ...
}
イベント定義をラムダ式で書くことができます。
@EventHandler
fun on(e: PlayerJoinEvent) {
e.joinMessage = ">> Join ${e.player.displayName}"
}
event<PlayerJoinEvent> { e ->
e.joinMessage = ">> Join ${it.player.displayName}"
}
インベントリを簡単に扱うことができます。
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))
}
)
}
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を使うための関数を追加します。
パーティクル関連の便利な関数を追加します。
スケジューラを簡単に使うことができます。
object : BukkitRunnable() {
override fun run() {
// ...
}
}.runTaskTimer(plugin, 0, 30 * 20)
object : BukkitRunnable() {
override fun run() {
// ...
}
}.runTaskTimerAsynchronously(plugin, 0, 30 * 20)
plugin.runTaskTimer(30 * 20) {
// ...
}
plugin.runTaskTimer(30 * 20, async = true) {
// ...
}
音関連の便利な関数を追加します。
文字列関連の便利な関数を追加します。
UUIDの便利な関数・クラスを追加します。
ワールド関連の便利なクラスを追加します。
EasySpigotAPI を導入したプラグインに加えて EasySpigotAPI もサーバーのプラグインに追加する必要があります。
repositories {
mavenCentral()
}
dependencies {
api('com.github.sya-ri:EasySpigotAPI:2.3.2') {
exclude group: 'org.spigotmc', module: 'spigot-api'
}
}
repositories {
mavenCentral()
}
dependencies {
api("com.github.sya-ri:EasySpigotAPI:2.3.2") {
exclude(group = "org.spigotmc", module = "spigot-api")
}
}
EasySpigotAPI を導入したプラグインの中に必要なものが同梱され、EasySpigotAPI を別で導入する必要がありません。
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]
}
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](https://img.shields.io/badge/EasySpigotAPI-%E2%AC%85-4D4.svg)](https://github.com/sya-ri/EasySpigotAPI)