LSPlugin
! WARNING ! This project is still under development
DO NOT PUT INTO PRODUCTION ENVIRONMENT
一个专门为了 .DP7
群服务器 Charmless
的定制插件框架。未来Charmless
的一切开发都将基于这个框架
🏗️
平民使用方法
开发中 敬请期待
🚀
超级有用的功能(对于开发者)
-
⚡ 高效率的API:-
// 监听事件 // 不使用 LSPlugin object SomeHandler : Listener { @EventHandler fun onPlayerChat(e: AsyncPlayerChatEvent) { println("${ChatColor.RED} Event triggered Obj: $e") } } Bukkit.server.pluginManager.registerEvents(SomeHandler) // 使用 LSPlugin listen<AsyncPlayerChatEvent> { println("${ChatColor.RED} Event triggered Obj: $e") }
-
-
🏗️ 方便的底层管理 | 先进的Kotlin DSL
设计-
// 不使用 LSPlugin object For1_16 { fun doSomething(p: Player) { doSomeStuffFor1_16Only() val someStuff = (p as CraftPlayer).handle.b // ... } } object For1_17 { fun doSomething(p: Player) { val someStuff = (p as CraftPlayer).handle.c // ... } } //使用 LSPlugin fun doSomething(p: Player) { val someStuff = nms(p.asNMSPlayer) { // this -> NMSOperation version("1.16") { doSomeStuffFor1_16Only() } universal { memberMapping { field("playerConnection") { on("1.16.*", implmentation = Implementations.Spigot) { "b" } on("1.17.*", implmentation = Implementations.Spigot) { "c" } } } } fallback { // Do something } }.get("it.playerConnection") // 自动根据版本判断字段名字 //.call("it.playerConnection.disconnect()", "Disconnected") } // 担心运行时表达式解析效率?没关系,我们提供了提前准备的方案! val nmsAccess = nms(p.asNMSPlayer, prepared = true) { // ... } val getSomeField = nmsAccess.get("it.playerConnection") // 因为初始化nms操作时 prepared = true // 因此这里返回的是 PreparedNMSGet // 真正获取 val field = getSomeField.fetch() // 调用: callSomeFun.invoke(arg1, arg2)
-
-
🕛 便捷的多线程调用,完美避开无法正确判断类型问题-
// 不使用 LSPlugin Bukkit.getScheduler().runTask(YourPlugin.instance) {} // 错误!Lambda表达式无法正确判断类型 Bukkit.getScheduler().runTask(YourPlugin.instance, Runnable { }) // 需要手动标注类型 // 使用 LSPlugin sync { // 自动以LSPlugin的身份执行task // ... }
-
更多的例子就不展示了,相信各位开发者看到这里应该能感觉这个API很方便
但很可惜,这个API目前还在开发中,尽情期待