项目

CLI 与编辑器

一个工具 crafting,用于安装、创建模组、检查模组,以及无需打开游戏就能测试。另有一个语言服务器,让你的编辑器显示与加载模组时相同的错误。

command not found: crafting。构建完成后,可执行文件位于 crafting-cli/build/install/crafting/bin/crafting。把该文件夹加入 PATH,或从一个已在其中的文件夹建立链接,例如 ln -s "$PWD/crafting-cli/build/install/crafting/bin/crafting" /usr/local/bin/crafting。

命令

命令 作用
install --mc 26.3 [--dir DIR] 把 Crafting 配置添加到官方启动器。
install --mc 26.3 --server DIR 配置一个带有 start-crafting.sh 和 .bat 的服务器文件夹。
new <name> [--kind script|kotlin|plugin] 创建新模组。
check <file.craft>… 检查语法和类型。
sandbox [folder] 模拟服务器,无需游戏即可测试模组。
mods [folder] 列出游戏文件夹中的模组并检查其依赖。
lsp 供编辑器使用的语言服务器(由编辑器启动)。
version Crafting 版本。

创建模组

创建一个已按职责拆分好的模组,正如组织模组中所推荐的:

命令 创建的内容
crafting new gems main.craft、content/items.craft、content/blocks.craft、content/recipes.craft、events/welcome.craft、commands/gem.craft
crafting new gems --kind kotlin GemsMod.kt(只负责连接各部分)、content/ModContent.kt、events/Welcome.kt、commands/GemCommand.kt、一个清单文件,以及面向 Java 25 的 build.gradle.kts
crafting new gems --kind plugin 入口类、events/ChatFilter.kt 和 commands/HelloCommand.kt

检查模组

检查一个或多个 .craft 文件的语法和类型,并跟随它们的导入。每个错误都包含文件和行号,存在相似名称时还会给出建议。有错误时以非零状态码退出,因此可以用于持续集成。

终端
crafting check mods/rubies/main.craft

在沙盒中测试

一个拥有与游戏相同 API 的模拟服务器。它以开发模式加载 <folder>/mods 和 <folder>/plugins 中的模组:保存文件即重新加载模组。

沙盒中的命令文本
join <name>                   一名玩家加入
leave <name>                  离开
as <name> <chat or /command>  以该玩家身份聊天或执行命令
/<command>                    以控制台身份执行命令
break <name> <x> <y> <z>      破坏一个方块
tick [n]                      前进 n 刻
op <name>                     授予管理员权限
inv <name>                    显示物品栏
reload <mod>                  重新加载脚本或插件
quit                          退出

编辑器

所有编辑器都使用同一个语言服务器 crafting lsp,它运行的是真正的 CraftScript 检查器。需要 crafting 位于 PATH 中。

VS Code

CraftScript 扩展提供:语法高亮(包括字符串中的 {interpolation} 和 &a 颜色)、输入时的错误提示、类型感知的自动补全(在 player.、on、: 之后,以及你的类和导入的模块)、悬停信息、代码片段,以及 Check current file 和 Run sandbox server for this mod 命令。

终端
git clone <extension-repository> craftscript-vscode && cd craftscript-vscode
npm install --omit=dev
npx @vscode/vsce package --allow-missing-repository
code --install-extension craftscript-0.1.0.vsix

如果 crafting 不在 PATH 中,在 craftscript.craftingPath 设置中指定它的路径。

Neovim 0.11+

~/.config/nvim/plugin/craftscript.luaLua
vim.filetype.add({ extension = { craft = "craftscript" } })

vim.lsp.config("craftscript", {
  cmd = { "crafting", "lsp" },
  filetypes = { "craftscript" },
  root_markers = { "main.craft", ".git" },
})
vim.lsp.enable("craftscript")

Helix

~/.config/helix/languages.tomlTOML
[language-server.craftscript]
command = "crafting"
args = ["lsp"]

[[language]]
name = "craftscript"
scope = "source.craftscript"
file-types = ["craft"]
roots = ["main.craft"]
comment-token = "//"
indent = { tab-width = 4, unit = "    " }
language-servers = ["craftscript"]

Sublime Text 与 JetBrains

Sublime Text:使用 LSP 包,为 .craft 文件配置命令 ["crafting", "lsp"],并使用 CraftScript.tmLanguage.json 语法文件。JetBrains:使用 LSP4IJ 插件配置相同的命令,并把语法文件作为 TextMate bundle 导入。该语法文件适用于任何能读取 .tmLanguage 文件的编辑器。