莫斯图迪
本帖最后由 azbh111 于 2019-7-16 23:00 编辑 6 w1 W  `& Z0 u6 b- k" v, `! x
. ]9 {6 x+ d  h; a# @0 M
背景(SpringBootPlugin简称SBP)

    相信各位开发者或多或少遇到过以下情况(当然,腐竹也可以装这个插件使用汉化和DevTools功能)
    每写一个监听器,都要注册一次(不爽,就不能自动嘛,我要自动化。)
    每个新的指令,都要在plugin.yml中声明,然后在代码里一堆if-else解析指令,一个方法几百行。过段时间来看,都看不懂解析指令的代码了(简直抓狂。。。我要自动化)
    处理玩家指令,各种数字解析,异常判断,权限控制,异步,并发等等(OMG!我要自动化)
    总要去写一个配置文件,然后用代码一项一项的读取,还要保证配置文件和代码的一致性,还要考虑配置文件乱码问题(神烦有木有。。。我要自动化啊)
    需要用数据库时,手动创建连接,传递sql参数,解析sql结果,释放连接(简直原始人有木有。。能不能自动啊)
    在服务端内,读取不到物品的汉化名(比如以前大名鼎鼎的QS商店,牌子上的物品是英文名)
    想用NMS时,却苦于多版本兼容很困难,反射又很麻烦,望而却步
    当插件逐渐壮大起来后,主类越来越大,启动逻辑越来越多,维护起来越来越难
    当然,还有很多。。
2 W+ `' m& Z8 E- L
以上这些问题,都是本人亲身经历
    于是在经历了PluginLoader到PluginBoot的迭代,最后本插件SpringBootPlugin诞生了。
    SpringBootPlugin基于SpringBoot(百度百科/中文索引),拥有其全部特性。在SpringBoot基础上,适配了Bukkit环境,对许多常用的NMS接口做了全版本封装,并提供了许多有助于开发的工具类,帮助腐竹进行快速开发,并构建可维护性强的插件!

5 Y) S/ J# ^  w. }( a! U# ]9 P1 ]1 p; Z9 b

1 `/ k; Q  i! t7 H" E; T
$ G* j4 w8 ]$ h1 r6 _: U4 |
& d3 Y5 B9 R/ _+ f, J

, D& i' `  O; E2 y; x/ f* r" R" @( i  g- S) P2 _8 B% e' O
7 p* {8 O1 m; g- c( B2 f; r2 l( N
基于SBP开发的插件


8 u" N1 `, r' y& t. Y; t% J2 `- [2 X# ?' X" _

9 N3 i1 h" F5 }. `: R. A9 G: F  z

, N8 q. Y4 D, V0 j+ U$ Q9 }8 ]9 S- _5 Q2 ~( `1 _4 N/ [
0 Q5 o  Y! N( p* _

+ L1 ^5 r- S# S
# c( w; ~0 J( f# ^& [& g2 U- j+ h& |# g

! t! [5 l! X: `8 h, T2 r' O1 ]
; L# g; M  [, u2 S0 t
插件功能

1. 拥有SpringBoot全部特性,有兴百度自行了解
2. 自动测监听器
这里以GuiProtector的核心代码为例
3. 自动注册指令(无需再plugin.yml中声明)
这里展示一个只有服务端版>=1.9时,才会注的指令
4.强大的指令参数解析
这里以我自己服自用的rpg指令为例(手动解析我可能要疯)
/frpg rangeAttack fan <攻击者> <范围> <角度> <高度> <高度偏移> <伤害> [--sound=<声音>,<声音类别>,<音量>,<角度>] [--effect=<粒子特效>,<data>,<能见度>]
6 }& a! Q; _: ]; g' U9 M
5. 配置文件注入(无需写配置文件,更无需手动读取配置文件)
展示一个完整的配置文件
除了截图内的东西,不需要在多谢任何代码或yml
6. 强大的定时任务
7. 服务端汉化功能 (汉化后许多会展示物品名字的插件,就会展示物品的中文名了,具体语言可在配置文件中修改)
服务端汉化说明
这里展示一份1.12的原版汉化文件 ->
本人收集的许多mod汉化文件 -> (你当然可以把它们全部放到plugins/SpringBootPlugin/lang 文件夹下)
0 I. q7 d9 a& L( u0 m: o2 x
8. 自带一个DevTools模块,方便腐竹和开发者对物品/方块/事件/ProtocolLib数据包等进行调试
8. 集成Druid连接池和Mybatis框架,操作数据库so easy!支持MysqlH2数据库
这里列举几个Taobao操作数据库的例子

0 r( M7 j; G  Z( ~4 v/ d3 z
9. 全版本兼容:基于SBP的插件,可直使用NMS和CB接口,SBP在运行时会将其兼容到当前服务端版本。
$ h8 `! `: [1 `3 R6 U  l
以SBP的ItemStackUtils中的toNBTTagCompound接口为例
此接口使用了1.7的nms,却可以在1.7-1.14所有版本中运行
跨版本原理(自定义ClassLoader,ASM,Remap)
. ]' S4 k0 w9 {' A2 P! Y0 t
10.封装大量常用好用的操作,其中不乏使用NMS实现的
11. JavaScript脚本支持
12. 太多了,说不完了。。。。

. B# z" P( K; Y% s7 r  Y
- _( d: g& k; q- X, k7 v6 C
; W3 ~" B3 Q5 H

7 o8 w% Z6 q1 C; {, O5 ?( ^5 G8 l- f" \2 u. E% u
  t5 a( v8 P8 X) F; R

% h& F  w0 [: {+ a. ^0 K$ M- l, |" \6 `; T) j
1 `* v. f7 {5 e) g) ~, T6 N& ]

; @/ a2 U" u- V" C! R; M
自带指令

devtools (需要op权限)
springboot (需要op权限)
7 J" }& O* n* A) W6 B" {1 \

, A. c* ^' M: M, x0 z* H
0 Y# f0 m, q5 p( ^! s  |& v0 D$ C
  X- J" j7 ]4 D0 _8 o6 E( k% Z* |. W1 J

- ^6 J# s( l9 ^4 j$ z9 l: N7 e% A1 D9 c5 Q
& ~) r4 t( C1 M+ {2 b( _

( Z2 b1 v& r! j7 e/ m& P4 S
, j# E. y4 I  F$ b9 @
安装

安装SBP
SpringBootPlugin-x.x.x.x.jar复制到服务端 plugins 目录下
启动服务器,将自动生成插件配置文件: plugins/SpringBootPlugin/config.conf
---------------------------------------------------------------------------------------------------------------------------------------------
安装SBP插件(基于SBP开发的插件,我称之为SBP插件)
将SBP插件复制到 plugins/SpringBootPlugin/plugins 端目录下
启动服务器,将自动生成插件的配置文件
---------------------------------------------------------------------------------------------------------------------------------------------
SBP目录结构
plugins/SpringBootPlugin/config.conf: SBP的配置文件
plugins/SpringBootPlugin/plugins: 放置SBP插件
plugins/SpringBootPlugin/data: 放置/springboot item 指令的数据文件
plugins/SpringBootPlugin/javascript: 放置js脚本,可用JSUtils加载
plugins/SpringBootPlugin/lang: 放置汉化文件
data/SpringBoot: 若使用h2作为数据库,数据库文件会存放于此
  w7 H  w9 w5 u: [9 g' z

2 I! i! @5 W, @1 t& O. e' c2 G7 ^: e/ W- F3 B, c9 X. n

6 m- E4 I' N( W' Q7 B
9 w; n1 y; K  \3 B' u; _5 ^

& C# p+ |. k( r. r7 S7 A+ x2 j, |
/ `6 I! P* {1 L0 T4 i" \* b; E& w* ]0 ^
* G3 x+ Z' n) t* {/ X# @4 Q
. k' ]) M7 v! P
$ q* p4 t; j% g' B0 }: f5 f
/ Z, S( o& v6 V/ q3 P1 y

" A# x, u. z% c3 X5 e$ x5 y
兼容性

兼容的核心有:Cauldron/KCauldron/Thermos/Uranium/Spigot/CatServer/Paper/Mohist
兼容的版本跨度为:1.7-1.14

1 P2 F* l- o. K" R+ ^
Cauldron 、KCauldron、Thermos这几个端不支持java8
需要更换SpecialSourc才能使用本插件
戳:

8 t: u) p" f- m" g) m2 {
注:若SBP启动失败,会主动关闭服务器,防止发生不必要的损失
后续将计划将是否关闭服务器改为可配置
' l# t% d9 `  X, p5 H/ t8 m5 R

" V! X. u# W: P0 M* h7 u2 [9 J" ^
9 ]% ^' }4 v$ q! N& b
( d8 r; E# x  u6 n( Q3 p
4 x6 w, H+ E0 [6 Q. L+ S

, B9 H/ h" d6 p8 g
  H' e# p0 s3 Q9 v! F& z
8 P! q. e) L' V: {4 ^& x
更新日志


+ t) A. H! x7 N# L
1 @" P" G5 w+ e) e8 k+ \7 |
% N8 ^# Z! V. e6 Q- q
: D0 j! l0 u9 A7 i
* K& H+ _# e, n! t! c& w  n1 q
6 g; X+ _& H/ q) M/ e) R, O
/ e7 u( _1 }# G) W4 A6 o1 x
链接:https://pan.baidu.com/s/1VeZ-rQZM3aeGOsFf2V4E6A  密码:ww04
) f  p8 y; q5 o0 n& Q) |/ h
文档(持续完善中)

! N8 w: V' u# P) s0 Q9 S5 V
开源地址

5 a6 }) z1 l& V
QQ群:628496236

1 A0 Y3 A  g9 v1 I/ T+ v本插件所用代码部分来自spring-boot开源项目
# k) P$ [/ A5 z% |5 t