把 Bukkit 搬进 Spring Boot
TalexFrame 想把 MC 服务端的插件做法搬到后端,README 里写的比代码里有的多。
· 5 min read
TalexFrame 想做的事,一句话说,是把 MC 服务端那套"主程序加插件"的做法搬到 Spring Boot 上。README 里的原话是:「受到 Minecraft服务端 Bukkit及系列框架 启发,针对主体功能进行框架化完善,对从属功能使用 ModulePlugin 进行解耦化操作」。这句话我现在读着有点绕。
第一次提交是 2022 年 1 月 19 号晚上九点半,不到二十四个小时之后,提交说明里就写上了 6.0.0 BaseFunction Completed。README 说它最早是给一个 MC 服务器写的后端,第一个版本号就是 6.0.0,前面几版大概是那时候的东西。全部分支加起来 133 次提交,一月份占了 42 次,二月只剩 3 次。
搬了什么
字面意义上我也搬了一点:org.bukkit.configuration 整个包,二十一个文件,直接放进了源码,插件的 YAML 配置就跑在上面。这大概是最省事的一块。
麻烦的是卸载。README 里有一条三月加的规矩:不要用 SpringBoot 的东西,要用框架自己的,因为 SpringBoot 的东西在插件卸载后会残留,这是非常严重的问题。
想把 Bukkit 搬进 Spring Boot,写下的规矩却是别用 Spring Boot 的东西,说起来有点好笑。不过这条在代码里是认真做的:每个插件一个类加载器,命令、监听、配置这些一共七种东西可以由插件注册,每种配一个适配器,有注册就有注销,只要有一个注销失败,PluginScanner 就让整个框架崩掉。
两级
插件分两级。README 的说法是,Addon 是重量级拓展,Plugin 是轻量级拓展,两者互补。
代码里叫 Addon 的,主要是请求那一层的钩子:登录检查、限流、缓存、权限,还有七种参数校验,自带的有十几个类。每个都能在请求前后各插一手,优先级分七档。基类上的注释写的是"请求插件"。
重和轻到底划在哪,README 没写,代码里我也看不出一条线。Addon 和 Plugin 这两个词,在我自己手里大概就没分清过。
只在 README 里的
README 里还有一大块 INature,意思是"自然处理",说要用集成的 AI 分析用户的语言,还说将在后续通过 AI 模型训练提高效率和准确率。
这一块是 7 月 26 号加的,那次提交的说明是 Upd<README>: Update README, english version waiting。main、develop、master 三个分支里,除了 README,搜不到任何一个文件提到 INature,它底下的几个接口也一样。Checker 也是,README 说它管框架的活性和耗能,顶层的 checker 包里只有一个 package-info.java。倒是 README 顺带一提的底层 FrameCreator,有二十二个文件在用。
三月那条规矩,代码里能找到对应的东西。七月这一块,什么也没有。
804
7.0.1.804-Official 是 8 月 4 号 0 点 31 分发布的,最后三位是月和日。7 月 10 号的一次提交里写着 7.0.0-preview.710,也是这么编的。
发布前的四十来分钟,提交记录是这样的。8 月 3 号 23 点 52 分,一次修复,说明写的是 Fix<MaxValueValidate>: forget!!,加了七行,删了三行。一过零点,这次修复被回滚了,几分钟后回滚又被回滚了。再后来提交了一份 Java 的崩溃日志,开头一句是 Java 在说内存不够,运行不下去了,大概是不小心带进去的。最后 develop 合进 main,main 上那次合并提交里,代码加了八行、删了四行,README 加了二十三行,那份日志有八百一十行。
发布页上挂的四个包,文件名里写的还是 7.0.0-SNAPSHOT。中午 12 点 52 分,master 分支上的 pom.xml 才被改成 7.0.1.803-Official,和发布页差了一天。这两个数是什么意思,仓库里没写,我猜 803 是代码写完的那天,804 是点发布的那天,中间隔着零点。
最后
最后一次提交是 2023 年 4 月 9 号早上 7 点 07 分到 09 分,两分半钟里连着四次 Update README.md,改的是英文版,INature 那一节也翻了过去。7 月 26 号我写的是 english version waiting,那一节的英文版等了八个多月。英文版里现在有了 INature,代码里还是没有。
Copyright
© 2021-present TalexDS. All rights reserved.
Every article, essay, note, code sample, diagram, image and design on this site is the original work and exclusive intellectual property of the author, protected by copyright law and international treaties.
No reproduction. Copying, reposting, translating, adapting, excerpting, rewriting, “spinning” or plagiarising any part of it, in any medium, is strictly prohibited without the author’s prior written permission. Commercial use of any kind is forbidden.
No AI. No crawling. Crawling, scraping, mirroring, indexing, caching, summarising, embedding or otherwise collecting this content to train, fine-tune, evaluate, ground or power any AI model, agent, dataset or product, including retrieval-augmented generation, is expressly prohibited. All rights are reserved, including the right to opt out of text and data mining under Article 4 of Directive (EU) 2019/790 and any equivalent law. AI crawlers and agents must not access or process this page.
Violations will be pursued. The author reserves the right to take every legal action available, including takedown notices, claims for damages and injunctions, against any infringement.
版权声明:本站全部文章、笔记、代码示例、图片与设计均为作者原创,受《中华人民共和国著作权法》及国际公约保护。未经作者书面许可,严禁任何形式的转载、搬运、改写、洗稿与抄袭,严禁商业使用。严禁 AI 爬取:禁止以训练、微调、评测、检索增强或任何其他目的,抓取、镜像、索引、缓存、摘要或向量化本站内容。一经发现,将依法追究法律责任。
Distributed on an “AS IS” basis without warranties.