希望编写一个MC开发工具库
最近试了下Common Lisp的cl-who库,html可以这样写:(:html(:head (:title "test")(:meta "…"))
(:body (:p "xxx")(:a :href "")))
这不是比html标签简单多了?
于是我在想:BE资源包用的json,经过封装之后,语法可能就是这样
;;分号和python里的#一样是注释
(:format-version 2 ;使用lisp的列表和关键字
:header
(:description "这里写附加包描述"
:name "这里写附加包名称"
:uuid (generate-uuid);;直接调用函数生成uuid
:version #(1 0 0) ;#()是lisp的数组
:min-engine-version #(1 19 50))
:modules #((:type "data"
:uuid uuid ;;lisp变量复用
:version #(1 0 0))))
等效json:
{
"format_version": 2,
"header": {
"description": "这里写附加包描述",
"name": "这里写附加包名称",
"uuid": "这里写uuid,要和其他任何uuid不一样,下文有获取uuid的方法",
"version": , //版本号
"min_engine_version":
},
"modules": [
{
"type": "data",
"uuid": "这里写uuid,要和其他任何uuid不一样,下文有获取uuid的方法",
"version":
}
]
}
可能还是太麻烦?其实还可以更简单,封装成一个函数:
(init-mcaddon :name "附加包名称" ……),项目结构就出来了。
然后要一个方块?(add-block …),自动处理材质包和行为包。
实体?(add-entity …)
至于是否简化了开发,我就不清楚了。可以对于C-V编程要遭殃了。
当然现在还有疑问,就是json的键是否对大小写敏感。因为lisp中间不区分大小写。
sapi怎么办?
还有就是我第一次接触资源包开发,所以需要一些指导。
补充内容0
其实不需要会lisp编程的。因为你所需要的就是那些封装的函数,基本不需要用到默认函数。除非你想contribute我的项目。
补充内容1
在编辑内容时,我发现bbcode也很麻烦。为什么我不能(:b "xxx")呢?为什么不能(:code "xxx")呢?
补充内容2
lisp通过cffi可以调用c语言leveldb库,从而可以操作mc存档nbt。不过这是以后的事了。 实际上这种方法会使得配置可读性极地,因为minecraft的材质包本质上是一堆配置文件、且JSON本质上就是一个人类高可读性的配置文件格式
更好的方法是通过开发脚手架封装配置,以利用TS编写配置在构建时生成高度压缩的json产物 林梦泽 发表于 2026-3-14 08:48
实际上这种方法会使得配置可读性极地,因为minecraft的材质包本质上是一堆配置文件、且JSON本质上就是一个 ...
文章里的 (init-mcaddon) 就是脚手架,直接运行时生成项目结构。
另外这不是静态配置替换,是动态生成。比如 (generate-uuid) 执行时生成 UUID,不需要用工具生成了。
页: [1]