本帖最后由 berry64 于 2019-12-31 14:51 编辑
现招募Javadoc, Wiki & bbs帖子撰写者
有意者请论坛dm私聊联系 |
Libs64 v2.0-SNAPSHOT
#排版有待编辑
你这又脑抽做了什么?
插件前置库,给写插件的开发者提供种种迷惑方便的方法,提升插件开发效率
什么,你想学开发插件?点击这里让各路服主摆在你的石榴键盘下
下载地址: 这里尽量挑比较新的,名字里包含shaded的且结尾为.jar下载(.md5 .sha1不是插件)
P.S 以后会更新更好的下载界面现在先凑合使使吧
提示:插件仍在开发版中,有bug请回复/上github issue去
特点:
- 颠覆性的SQL数据库操作方式
- 简化繁琐的文件操作
- 一个方法call把资源文件导出到你想要的位置
- 一个方法完成配置文件的初始化/重载
- 简化多语言支持(Babel翻译)/I18N (开发中)- 动态修复NMS
食用方法
Maven:
把以下内容添加到你的插件pom.xml
<repositories>
<repository>
<id>berry64-repo</id>
<url><a href="https://raw.github.com/berry64/mvn-repo/master/</url" target="_blank">https://raw.github.com/berry64/mvn-repo/master/</url></a>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>net.berry64.libs64</groupId>
<artifactId>Libs64-api</artifactId>
<version>2.0-SNAPSHOT</version>
</dependency>
</dependencies>
当然,别忘了添加到你的plugins.yml
depends: Libs64
你问什么是颠覆性的sql数据操作?
前言: 虽然有很多MC插件都有数据库支持,但这些插件有很大一部分都是通过直接写SQL语句运行的。
这样虽然简单粗暴又有效,但需要开发者了解SQL才能实现。
这就有问题了:
学习是不可能学习的,这辈子不可能
点题了快夸我
|
于是出现了Libs64:
有了这个前置库之后你可以不碰任何sql给你的插件加上sql支持。
举个例子:
我要写一个插件,这个插件要用sqlite数据库储存玩家等级信息,假设我的主类叫Core.java
主类Core.java:
- package net.berry64.example;
- import net.berry64.libs64.sql.Lib64SQL;
- import org.bukkit.plugin.java.JavaPlugin;
- import java.io.File;
- public class Core extends JavaPlugin {
- Lib64SQL database; //这里是数据库
- @Override
- public void onEnable() {
- File databaseFile = new File(this.getDataFolder(), "database.db")); //把数据库文件位置设置成插件文件夹里的database.db文件
- database = Lib64SQL.createSQLite(databaseFile); //初始化数据库
- }
- }
复制代码
然后之后我们创建一个新的myPlayer类,来代表我们的数据库文件格式,我们让它继承net.berry64.libs64.sql.Model
(懂数据库的可以把这个想成表格框架)
myPlayer.java:
- import net.berry64.libs64.sql.DBData;
- import net.berry64.libs64.sql.DataType;
- import net.berry64.libs64.sql.Model;
- public class myPlayer extends Model {
- }
复制代码
然后我们写上数据库里需要储存的数据,以@DBData修饰, type为数据类型
避免原始数据类型(primitive data types)
比如不要用int, 用Integer, 不用double用Double - import net.berry64.libs64.sql.DBData;
- import net.berry64.libs64.sql.DataType;
- import net.berry64.libs64.sql.Model;
- public class mzPlayer extends Model {
- @DBData(PrimaryKey = true, NotNull = true, type = DataType.INT) //这里的PrimaryKey代表这个是SQL用来引索的数据,只能为数字类型
- public Integer playerID;
- @DBData(type = DataType.TEXT)
- public String name;
- @DBData(type = DataType.INT)
- public Integer level;
- }
复制代码
回到主类注册一下这个类: 不注册就尝试直接使用会报错
Core.java:
- package net.berry64.example;
- import net.berry64.libs64.sql.Lib64SQL;
- import org.bukkit.plugin.java.JavaPlugin;
- import java.io.File;
- public class Core extends JavaPlugin {
- Lib64SQL database;
- @Override
- public void onEnable() {
- File databaseFile = new File(this.getDataFolder(), "database.db"));
- database = Lib64SQL.createSQLite(databaseFile);
- database.register(myPlayer.class); //注册
- }
- }
复制代码
之后的所有操作都基本可以在java内以对象的形式操作了:
比如添加数据你就new 一个myPlayer, 并且给里面的变量附上值:
- myPlayer player = new myPlayer();
- player.name="DORK"; //实际你不应该这样直接改数据,用getter&setter
- player.level=9001;
- player.addTo(database); //这样数据就会添加到数据库里了
复制代码
那我们要怎么从数据库里读取数据呢?
这时候就要介绍自动补全系统了:
- myPlayer incompletePlayer = new myPlayer();
- incompletePlayer.level= 100; //注意这里我们只给了level变量赋值,也就是说这时候playerID与name为null
- List<myPlayer> completePlayers = database.fetchAll(incompletePlayer); //这里返回的就是所有符合level=100的数据,并转化成myPlayer实力
- for(myPlayer player : completePlayers){
- getLogger().info(player.name); //这里就会显示所有level为100的玩家名
- }
复制代码
- database.fetchOne(incompletePlayer);
复制代码 也是同理,不过它返回的只是第一个而不是所有
|
哪你的NMS补丁又咋用?
看这里
哇尽然这么好用,目前有什么已知bug嘛?
肯定有的:
1. 效率会比直接调用sql语句低 (这不肯定,反射都用上了)
2. 功能比直接调用sql语句少(这我没辙)
3. 目前还在开发,可能后续版本会对方法有一定的改动 |
emmmm开源的话再说吧...我先过过瘾
口嗨一时爽,一直口嗨一直爽, 唉嘿嘿