本帖最后由 byxiaobai 于 2022-12-4 13:44 编辑 
这是TabooLib的使用教程。
阅读本篇教程的前置条件:1.java基础 2.能开发简单的bukkit插件
本教程正在更新,目前不是完整教程
这是TabooLib的使用教程。
阅读本篇教程的前置条件:1.java基础 2.能开发简单的bukkit插件
本教程正在更新,目前不是完整教程
 本帖最后由 byxiaobai 于 2022-12-4 13:23 编辑 
待更新:HostSQLite部分
1.HostSQL&datasource使用HostSQL可以连接MySQL数据库
复制代码示例Table复制代码
2.HostSQLite
使用HostSQLite可以连接本地文件数据库
待更新:HostSQLite部分
1.HostSQL&datasource使用HostSQL可以连接MySQL数据库
- val host by lazy{
 
-         HostSQL(
 
-             SQLSettings.mySqlIp,
 
-             SQLSettings.mySqlPort.toString(),
 
-             SQLSettings.mySqlUserName,
 
-             SQLSettings.mySqlPassword,
 
-             SQLSettings.mySqlDatabaseName
 
-         )
 
-     }
 
 
 
- val dataSource by lazy { host.createDataSource() }
 
- @SkipTo(LifeCycle.LOAD)
 
- object RpgAttributeTable {
 
 
-     val host = SQLData.host
 
-     val dataSource= SQLData.dataSource
 
 
-     val table by lazy{
 
-         Table(SQLSettings.PREFIX+"RpgAttribute", host) {
 
-             add { id() }
 
-             add("PlayerName") {
 
-                 type(ColumnTypeSQL.VARCHAR, 64) {
 
-                     options(ColumnOptionSQL.KEY)
 
-                 }
 
-             }
 
-             add("AttributeName") {
 
-                 type(ColumnTypeSQL.VARCHAR, 64)
 
-             }
 
-             add("ChangeValue") {
 
-                 type(ColumnTypeSQL.DOUBLE)
 
-             }
 
-         }
 
-     }
 
 
-     fun init() {
 
-         table.createTable(dataSource)
 
-     }
 
 
 
-     fun addData(playerName: String, attributeName: String, changeValue: Double) {
 
-         submit(async = true) {
 
-             val nowValue= getValue(playerName,attributeName)
 
-             val newValue=nowValue+changeValue
 
-             updateOrInsert(playerName,attributeName,newValue)
 
-         }
 
-     }
 
 
-     fun clear(){
 
-         submit(async = true) {
 
-             table.delete(dataSource){}
 
-         }
 
-     }
 
 
-     fun getStringList(playerName: String, callBack: CallBack<List<String>?>) {
 
-         submit(async = true) {
 
-             val list=table.select(dataSource){
 
-                 where("PlayerName" eq playerName)
 
-             }.map {
 
-                 val attributeName=getString("AttributeName")
 
-                 val changeValue=getDouble("ChangeValue")
 
-                 "$attributeName $changeValue"
 
-             }
 
-             callBack.call(list)
 
-         }
 
-     }
 
 
-     fun getKeys(callBack: CallBack<Set<String>>) {
 
-         submit(async = true) {
 
-             val list=table.select(dataSource){
 
-             }.map {
 
-                 getString("PlayerName")
 
-             }
 
-             val set=HashSet<String>()
 
-             for(str in list){
 
-                 set.add(str)
 
-             }
 
-             callBack.call(set)
 
-         }
 
-     }
 
 
-     private fun getValue(playerName: String, attributeName: String):Double{
 
-         return table.select(dataSource){
 
-             where("PlayerName" eq playerName)
 
-             where("AttributeName" eq attributeName)
 
-         }.firstOrNull {
 
-             getDouble("ChangeValue")
 
-         }?:0.0
 
-     }
 
 
-     private fun hasData(playerName: String, attributeName: String):Boolean{
 
-         return table.select(dataSource){
 
-             where("PlayerName" eq playerName)
 
-             where("AttributeName" eq attributeName)
 
-         }.find()
 
-     }
 
 
-     private fun updateOrInsert(playerName: String, attributeName: String,newValue:Double){
 
-         if(hasData(playerName,attributeName)){
 
-             table.update(dataSource){
 
-                 where("PlayerName" eq playerName)
 
-                 where("AttributeName" eq attributeName)
 
-                 set("ChangeValue",newValue)
 
-             }
 
-         }else{
 
-             table.insert(dataSource,"PlayerName","AttributeName","ChangeValue"){
 
-                 value(playerName,attributeName,newValue)
 
-             }
 
-         }
 
 
-     }
 
 
- }
2.HostSQLite
使用HostSQLite可以连接本地文件数据库
 本帖最后由 byxiaobai 于 2022-12-7 10:54 编辑 
待更新:
1.插件主类与获取BukkitPlugin
2.插件依赖
3.taboolib的适用条件与taboolib的本质属性
5.Demo插件本体
6.补充内容: Demo插件项目源码(GitHub);taboolib源码地址;推荐书籍(kotlin)
项目快速生成器:https://get.tabooproject.org/
待更新:
1.插件主类与获取BukkitPlugin
2.插件依赖
3.taboolib的适用条件与taboolib的本质属性
5.Demo插件本体
6.补充内容: Demo插件项目源码(GitHub);taboolib源码地址;推荐书籍(kotlin)
项目快速生成器:https://get.tabooproject.org/
配置文件模块
无实体寻路模块
语言文件模块
 本帖最后由 byxiaobai 于 2022-12-4 13:34 编辑 
taboolib的常见BUG
1.arclight下不能使用module-configuration
2.不支持1.7.10
taboolib的常见BUG
1.arclight下不能使用module-configuration
2.不支持1.7.10
占楼待用。。。
占楼待用。。。
占楼待用。。。
 本帖最后由 byxiaobai 于 2022-12-7 10:54 编辑 
1.为什么要用kotlin和taboolib?
Kotlin的特性使得你能够更高效率地开发插件,同时保证代码的正确性。
而Taboolib封装了许多常用工具,如配置文件、数据库等。
比如,在java下需要new BukkitRunnable然后runTaskLater才能实现延时执行方法。
但在Taboolib下,你只需要使用一行submit{}即可完成这一任务。
2.maven与gradle的基本概念
①maven:
②gradle:
前置知识
1.为什么要用kotlin和taboolib?
Kotlin的特性使得你能够更高效率地开发插件,同时保证代码的正确性。
而Taboolib封装了许多常用工具,如配置文件、数据库等。
比如,在java下需要new BukkitRunnable然后runTaskLater才能实现延时执行方法。
但在Taboolib下,你只需要使用一行submit{}即可完成这一任务。
2.maven与gradle的基本概念
①maven:
②gradle:
收藏一下,等楼主大力更新
好东西 (喜
占个楼等更新
占个楼等更新
等个更新~ 
催更一下。
6啊,作者666666
666太好了太棒了