类下托泣匹 发表于 2026-3-12 23:48:52

希望编写一个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。不过这是以后的事了。

林梦泽 发表于 2026-3-14 08:48:11

实际上这种方法会使得配置可读性极地,因为minecraft的材质包本质上是一堆配置文件、且JSON本质上就是一个人类高可读性的配置文件格式

更好的方法是通过开发脚手架封装配置,以利用TS编写配置在构建时生成高度压缩的json产物

类下托泣匹 发表于 2026-3-15 22:44:01

林梦泽 发表于 2026-3-14 08:48
实际上这种方法会使得配置可读性极地,因为minecraft的材质包本质上是一堆配置文件、且JSON本质上就是一个 ...

文章里的 (init-mcaddon) 就是脚手架,直接运行时生成项目结构。
另外这不是静态配置替换,是动态生成。比如 (generate-uuid) 执行时生成 UUID,不需要用工具生成了。
页: [1]
查看完整版本: 希望编写一个MC开发工具库