skyone 发表于 2022-7-26 00:47:37

【插件发布】Kotlin基础库、末影箱插件、全服箱子插件

本文使用markdown渲染,如果无法显示,请检查你的网络



> 自己写了一些我的世界插件,虽然都很简单,但也发出来吧,就当是记录学习历程咯
>
> 所有的插件都可以运行在paper核心下,目前计划只编译最新版,需要特定版本可以留言

## Kotlin 支持库

> 代码就几行,找资源和写Gradle麻烦

Java写我的世界插件?什么年代了,自己拿来玩的项目肯定用 `Kotlin` 呀!

但是我的世界并没有内置 `Kotlin` 的 SDK,而在每个插件里都塞进SDK编译结果就太大了

这个插件提供常用的 kotlin 官方库,包含:

```
org.jetbrains.kotlin:kotlin-stdlib
org.jetbrains.kotlin:kotlin-stdlib-jdk8
org.jetbrains.kotlin:kotlin-stdlib-jdk7
org.jetbrains.kotlin:kotlin-reflect

org.jetbrains.kotlinx:kotlinx-coroutines-core
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm
org.jetbrains.kotlinx:kotlinx-coroutines-jdk8
org.jetbrains.kotlinx:kotlinx-serialization-core-jvm
org.jetbrains.kotlinx:kotlinx-serialization-json-jvm
org.jetbrains.kotlinx:kotlinx-serialization-cbor-jvm
org.jetbrains.kotlinx:atomicfu-jvm
org.jetbrains.kotlinx:kotlinx-datetime-jvm
```

目前我使用的版本如下

```kotlin
object Versions {
    const val kotlin = "1.6.21"
    const val coroutines = "1.6.2"
    const val serialization = "1.3.3"
    const val atomicfu = "0.17.3"
    const val datetime = "0.3.2"
}
```

下载链接:最下面(链接竟然解析不出来,我也是服了,老是被论坛自带的链接解析器截断)

也可以在Maven仓库找到这个工件:host.skyone.mc:paper-kotlin:0.1.0

源代码:[https://github.com/skyone-wzw/paper-kotlin]


https://repo1.maven.org/maven2/host/skyone/mc/paper-kotlin/0.1.0/paper-kotlin-0.1.0.jar
https://github.com/skyone-wzw/paper-kotlin/releases/download/v0.1.0/paper-kotlin-0.1.0.jar


skyone 发表于 2022-7-26 00:58:41

本文使用markdown渲染,如果无法显示,请检查你的网络



末影箱插件



## 末影箱插件


功能:清除你的等级,打开一次末影箱


命令:`/ec` 或 `/EnderChest`


下载链接:最下面


源代码:


```kotlin
package host.skyone.mc.plugin

import host.skyone.mc.plugin.ec.CommandHandle
import org.bukkit.Bukkit
import org.bukkit.plugin.java.JavaPlugin

class EnderChest : JavaPlugin() {
    override fun onEnable() {
      Inner.set(this)
      Bukkit.getPluginCommand("ec")?.setExecutor(CommandHandle())
    }

    // 后面的代码很离谱,bukkit对kotlin的支持不太行
    companion object {
      val INSTANCE: EnderChest
            get() = Inner.get()
    }

    private object Inner {
      var INSTANCE: EnderChest? = null
      fun set(instance: EnderChest) {
            if (INSTANCE == null) {
                INSTANCE = instance
            }
      }
      fun get(): EnderChest {
            return INSTANCE?: throw NullPointerException()
      }
    }
}

```


```kotlin
package host.skyone.mc.plugin.ec

import org.bukkit.command.Command
import org.bukkit.command.CommandExecutor
import org.bukkit.command.CommandSender
import org.bukkit.entity.Player

class CommandHandle : CommandExecutor {
    override fun onCommand(sender: CommandSender, command: Command, label: String, args: Array<out String>): Boolean {
      if (sender is Player) {
            sender.level = 0
            sender.openInventory(sender.enderChest)
            return true
      }
      return false
    }
}
```

```yml

name: EnderChest
version: '${version}'
main: host.skyone.mc.plugin.EnderChest
api-version: 1.19
commands:
ec:
    aliases:
      - EnderChest
    usage: "/ec | EnderChest"
    description: "Pay all levels to open your ender chest"
```











HatsuneMiku 发表于 2022-7-26 10:01:34


good

食树叶者 发表于 2022-7-27 08:15:40

{:5_209:}
页: [1]
查看完整版本: 【插件发布】Kotlin基础库、末影箱插件、全服箱子插件