CHelper代码贡献指南
CHelper是一个我的世界基岩版的命令助手,致力于为我的世界指令玩家提供帮助。
网页版(暂时只有命令补全):https://www.yanceymc.cn/chelper
安卓版(功能更全):https://www.yanceymc.cn/chelper/CHelper-lastest.apk
我们的功能
- 当您输入命令的时候,可以看到命令的语法结构,参数解释,命令错误,补全提示。
- 帮助您把旧语法命令转为新语法命令。
- 公共指令库,您可以上传自己的指令,也可以查看别人上传的指令。
- …
我们的优势:免费 - 开源 - 跨平台
受到ProjectXero的命令助手项目的启发,我想自己设计一个命令助手,我认为这真的是一件很酷的事情!!!
也许是受到开源精神的影响吧,我决定把整个项目开源,以此来吸引更多加入开发!!!
说到底,这个项目最开始只是出于我的兴趣,也从来没有想到过能坚持这么久。一路走来,感谢有你!!!
内核设计思路
CHelper-Resource
我们使用json:对于资源包,我们使用json格式的文件进行撰写,这方便了后续的修改。为了让大家都可以参与其中,我们对此写了一个文档:http://www.yanceymc.cn/blog/article/chelper-cpack/。
我们自制序列化框架:我们希望内核初始化的时候性能更加优越,因此我们设计了紧凑的二进制文件格式用于存储资源包。为了方便json文件和二进制文件读写,我们设计了一个序列化框架:https://github.com/Yancey2023/serialization。
CHelper-Core
我们重构过代码:在最开始的时候,所有的代码都是Java写的,因为代码质量低下,导致代码难以维护,每次更新后bug频繁发生,为了提高代码质量,我们决定对代码进行重构。
我们使用C++:在构思新架构的时候,我们在最开始设计时就考虑到了跨平台的需求,与此同时,我们也想追求最好的性能,经过抉择,我们选择了C++语言开发内核,再因地制宜开发出每个平台的原生应用,以此为用户创造最好的使用体验。(因为这个项目刚成立的时候作者对WebView跟反感,所以不用js)
Lexer:当我们得到一个命令的时候,我们使用Lexer将代码先分割成一个个token,以下是效果展示:
1 | lex command: setblock ~~~ candle_cake[lit= |
Parser:接下来,我们根据命令语法树构建AST (Abstract Syntax Tree)。在命令树中,最开始的节点称为起始节点,结束的节点为LF节点。我们只需要使用深度搜索遍历所有可能性,找到是否有一种方式可以到达LF节点。如果存在一种到达LF节点且正好能把所有token使用完,那么这个就是正确的命令。如果不能正好把所有token消耗完,那就找到能把token消耗最多的可能性,这个可能性的错误原因就是要反馈给用户的错误原因,如果有多个可能性消耗的token一样多,那么就都有可能是错误原因。既然有了AST,我们给每个节点加上获取命令结构、当前参数作用、补全提示等功能,把每个功能都设计成一个单独的函数。对于命令结构和参数作用作用,我们之需要找到构建AST时发现的那条最正确的路线即可。对于补全提示,只需要从AST根节点进行深度搜索,遍历所有可能性后过滤重复的补全提示即可。
试用:至此,您已经知道了我们的架构。您可以使用https://www.yanceymc.cn/chelper尝试我们的内核(这只是网页版,安卓版本有更加完善的功能)
项目 | 技术 | 介绍 |
---|---|---|
CHelper-Core | C++ | CHelper的内核,使用C++编写 |
CHelper-Android | java、kotlin | 基于CHelper-Core的安卓软件,目前功能最全 |
CHelper-Web | js、vue3 | 基于CHelper-Core的网页版 |
CHelper-Qt | C++、Qt | 电脑版软件,与CHelper-Core一起维护,用于开发和测试 |
加入我们
我们目前只是一个小团队,非常需要您的加入。如果您掌握以下任何一项技能或者对其感兴趣,都可以尝试加入我们:
- 维护资源包:我们的资源包使用json文件编写,易于扩展,仅需少量修改就可以适配新版本我的世界。
- 编写网页:使用vue3框架编写网页版命令助手。
- 维护安卓界面代码:我们的安卓软件加入更多功能。
- 维护内核代码:重写部分c++代码,提高代码质量,对外提供更多接口。
我们可以提供的:
- 友好的交流氛围:如果对我们的代码有感到疑惑的地方,您可以随时问我们,我们很乐意解答。
- 贡献署名:我们可以在软件的贡献名单中加上您的名字。
二次开发
我们鼓励大家使用我们的内核进行二次的开发。因为我们使用C++制作内核,所以我们可以与任何一门语言进行交互。其中,C/C++、Java和JavaScript的接口有官方提供的接口,您可以使用这些进行二次开发。
代码贡献
第一步:把我们的GitHub仓库克隆到您的GitHub账号下。
第二步:对您克隆的仓库进行修改。
第三步:向我们的代码仓库发送一份PR (Pull Request),我们会审查代码,代码审核通过后您的代码将会合并到我们仓库中。