Skip to content

771835/dovetail

Repository files navigation

Dovetail

English Version | 中文版本

Minecraft数据包编译语言 | 面向对象的Minecraft DSL
该项目的实现不够成熟,若需要生产环境使用,请考虑其他相对成熟的项目

目标

  • 一次编写,处处编译
  • 基本面对对象支持
  • 完善的依赖库,不用手写指令
  • 更低学习曲线

长期计划

  • 优化错误显示
  • 统一调试信息输出
  • 完善插件api
  • 迭代版本跟上mojang版本更新
  • 提高优化效果
  • 寻找尽量节省性能的堆栈实现方法
  • 转译器国际化支持
  • 转译器多线程优化
  • 使大项目编译更省心
  • 允许通过简单的语法声明和调用其他数据包
  • 谓词,自定义数据等功能
  • 函数一等公民化
  • 自动化构建脚本支持

部署

环境要求

  • Python 3.10+

快速开始

git clone https://github.com/771835/dovetail.git
cd dovetail
pip install -r requirements.txt
python main.py -O2 xxx.mcdl

FAQ

Q: 为什么不支持递归?
A: 递归需要运行时维护栈帧,在Mc中实现非常繁琐复杂,因此你应当将递归改写成迭代实现
Q: 有很多技术可以解决递归,如CPS+TRO+闭包,为什么不使用
A: 因为技术所限,以及作者本身精力有限
Q: 编译器为什么提示未知的错误并给出了堆栈信息?如何解决?
A: 你可以在github上开启一个issue提交这个问题
Q: 明明我的代码没有错误,生成出的指令却无法正确执行
A: 请先尝试使用参数 -O0 ,若是再次生成的指令正确执行,请以ir优化错误为issue标题前缀,否则以未知错误作为标题前缀
Q: 生成出来的指令执行到一半就中止
A: 请尝试使用gamerule指令适当提高maxCommandChainLength规则的数量 Q: 找不到可用后端怎么办 A: 安装对应后端插件

许可证

本项目采用 Apache 2.0 授权

这意味着您可以自由地将其用于个人或商业目的,无需我的直接许可。

同时,如果您在项目/产品中无修改地使用了本作品并从中获得了商业价值,我非常欢迎您通过以下方式予以认可:

  • 注明来源:在您的产品文档或在关于页面中提及本项目。
  • 分享改进:将您基于本项目所做的改进回馈给社区。
  • 进行贡献:欢迎提交代码、报告问题、改进文档或提出建议,共同让项目变得更好。

感谢您的支持!

鸣谢

参与测试

  • 4424 在项目前期发现了诸多bug并提出了大量具有建设性的意见

代码使用

思路来源/大佬鸣谢

  • 大佬zmr-233 提出了cps变换的解决递归的思路
  • 项目MCFPP 处理堆栈一条不同技术路线