- 版权类型
- 原创
- 插件中文名称
- 桶代码
- 插件英文名称
- BukkitCode
- 支持的核心(服务端)
- Spigot
- Paper
- Folia
- 语言支持
- 多语言
- 适配版本(Java)
- 1.21
- 1.20
- 1.19
- 1.18
- 1.17
- 1.16
- 1.15
- 1.14
- 1.13
- 1.12
[MD]
# BukkitCode:无需编写代码——AI AI-Agent直接生成 Bukkit 插件
---

---
**使用AI-Agent构建 Bukkit 插件。**
你只需在浏览器中与 BukkitCode 的AI-Agent聊天,描述你的玩法想法和需求。AI-Agent会为你设计并生成一个完整的 Bukkit 插件项目(导出为项目文件)。然后,你服务器上的 BukkitCode 编译器插件会将该项目编译成可加载的插件 JAR,并且支持 **加载 / 卸载 / 重载 / 一键部署**——全程无需重启服务器。
无需在本地安装 IDE、构建工具或 JDK 项目模板。
你的主要精力集中在与AI-Agent讨论“插件应该如何实现和表现”。
编译器插件只负责“安全、稳定地将AI-Agent生成的项目转换为可运行的 Bukkit 插件”。
## 🚀 从想法到 Bukkit 插件:整体工作流程
1. **打开 BukkitCode 网页应用**(在浏览器中访问 https://bukkitcode.com/chat ),注册并登录,然后直接与AI-Agent聊天:
- 首先选择你希望插件兼容的 Minecraft 版本;
- 然后告诉AI-Agent你想要什么——例如“挖矿时随机掉落金苹果”或“制作一个邮箱插件”;
- 你无需担心配置、权限或玩家体验的格式问题。
2. **AI-Agent会根据你的描述创建或修改 Bukkit 插件项目:**
- 自动规划 `plugin.yml`、命令、权限、插件依赖等;
- 生成核心逻辑代码和所需资源文件;
- 唯一目标是让该项目能够作为 Bukkit 插件在服务器上运行。
3. **运行编译或测试**——在网页界面中,点击 **“导出插件项目 (.sirc)”** 获取 `.sirc` 项目文件,将其放入 `plugins\BukkitCode\project`,并执行 `/bukkitcode compiler`。
(如果你已经有一个 `.sirc` 文件,也可以直接将其 **导入** 网页应用,从上次的进度继续。)
(如果你的服务器和 BukkitCode 编辑器处于同一环境,它们会被关联,你可以点击 **“构建插件”** 一键编译并部署到服务器。)
4. **当你之后想改变插件行为时**,回到网页应用,告诉AI-Agent要修改什么,导出新的 `.sirc`,然后重新编译。
**一句话总结**:网页端AI-Agent负责 **“设计和编写代码”**,而你服务器上的 BukkitCode 负责 **“编译和加载”**。
---

---
## 💬 网页端在线构建器:bukkitcode.com/chat
网页应用是 BukkitCode 的在线构建器——**你无需自行部署任何东西**。在这里你可以:
- 用自然语言描述玩法和规则,AI-Agent会帮助生成和调整项目结构与代码;
- 像文件管理器一样管理虚拟项目文件——查看、添加、编辑和预览它们;
- 导入现有的 `.sirc` 项目,并基于之前的进度继续开发;
- 一键导出 `.sirc` 项目文件,交给服务器上的 BukkitCode 编译器插件。
**简单来说**:你在应用中构建“项目”,服务器上的 BukkitCode 将其编译成可运行的插件。
---

---
## 🔧 安装:安装 BukkitCode 编译器插件
1. 获取最新的 `BukkitCode.jar` 并将其放入服务器的 `plugins/` 目录;
2. 启动服务器(**你必须使用 JDK 而不是 JRE 运行服务器,否则无法获取编译器——参见 [常见问题](#-faq)**);
3. 首次启动后,插件会自动在 `plugins/BukkitCode/` 下创建配置和工作目录。
BukkitCode 编译器插件不要求你在本地设置任何 IDE、Maven/Gradle 项目或 JDK 项目模板。它仅依赖于正在运行的 Minecraft 服务器环境。
## 📜 快速开始(使用编译器 `BukkitCode.jar`)
1. 将 `.sirc` 项目文件放入 `plugins/BukkitCode/project/`;
2. 在控制台运行以下命令:
```text
bukkitcode compiler MyPlugin.sirc # 仅编译;输出到目标目录
bukkitcode compiler MyPlugin.sirc deploy # 编译 + 自动部署到 plugins/ 并立即加载
bukkitcode sirctree MyPlugin.sirc # 查看 .sirc 文件的内部文件树
bukkitcode load MyPlugin # 从 plugins/ 目录加载插件
bukkitcode unload MyPlugin # 完全卸载插件
bukkitcode reload MyPlugin # 重新加载插件(卸载并从 jar 重新加载)
```
主命令别名:`/bcode`。
> **注意**:所有命令都可以在控制台执行。玩家在游戏中执行需要相应权限。实际参数以 `/bukkitcode help` 为准。
## 📜 命令参考
| 命令 | 权限 | 描述 |
|---|---|---|
| `/bukkitcode help` | bukkitcode.view | 查看帮助 |
| `/bukkitcode compiler <project.sirc> [deploy]` | bukkitcode.admin | 编译项目;添加 `deploy` 可在编译后自动部署并加载 |
| `/bukkitcode sirctree <project.sirc>` | bukkitcode.view | 查看 .sirc 文件的虚拟文件树 |
| `/bukkitcode load <plugin>` | bukkitcode.admin | 加载插件(通过插件名或 jar 文件名) |
| `/bukkitcode unload <plugin>` | bukkitcode.admin | 完全卸载插件 |
| `/bukkitcode reload <plugin>` | bukkitcode.admin | 重新加载插件 |
贴心的 Tab 补全:`load` 只提示 **尚未加载** 的插件;`unload` / `reload` 提示已加载的插件;`compiler` 的第三个参数提示 `deploy`。
### 权限
| 权限 | 默认值 | 描述 |
|---|---|---|
| bukkitcode.admin | OP | 编译项目和管理插件 |
| bukkitcode.view | OP | 查看帮助和文件树 |
---
## 📁 目录结构
首次运行后,将在 `plugins/BukkitCode/` 下生成以下标准目录结构:
```text
plugins/
├── BukkitCode/
│ ├── config.yml # 配置文件
│ ├── library/ # 附加依赖 jar(自动添加到编译类路径)
│ ├── project/ # .sirc 输入文件
│ ├── target/ # 编译输出 jar(默认)
│ ├── build-cache/ # 临时编译目录
│ └── messages/ # 自定义语言文件
└── ...
```
`config.yml` 可以控制输出目录、编译限制、语言、插件保护列表等行为。大多数情况下,默认配置就足够了。
## ⚙️ 配置参考(config.yml)
```yaml
compiler:
output-directory: "target" # 编译产物的输出目录(相对于插件数据目录)
output-to-plugins: false # 为 true 时,产物直接输出到服务器的 plugins 目录
plugins-directory-name: "plugins" # output-to-plugins=true 时的目标目录名
projects-directory: "project" # .sirc 项目文件的目录
lib-directory: "library" # 附加依赖 jar 的目录(编译类路径中的优先项)
build-cache-directory: "build-cache"# 临时编译目录
verbose-logging: false # 详细的 javac 日志
max-concurrent-jobs: 1 # 并发编译数(出于安全强制为 1)
timeout-seconds: 120 # 编译超时秒数
max-single-file-size-kb: 1024 # 解包 .sirc 后单个文件的最大大小
max-total-size-kb: 20480 # 解包后总大小的最大值
tree-max-lines: 400 # sirctree 显示的最大行数
copy-retry-times: 5 # 输出复制重试次数(文件被锁定时)
copy-retry-wait-ms: 200 # 重试间隔毫秒
language:
current: "en_US" # 语言:en_US / zh_CN
enable-custom: true # 允许自定义语言文件覆盖
permissions:
admin-permission: "bukkitcode.admin"
view-permission: "bukkitcode.view"
plugin-manager:
# 禁止被 /bukkitcode unload|reload 卸载的插件(不区分大小写)
# BukkitCode 本身始终受保护,即使不在此列表中也不会被卸载
ignored-plugins:
- BukkitCode
```
---
## 📦 关于 .sirc 项目文件
`.sirc` 是 BukkitCode 网页应用导出的项目文件。它包含插件的完整项目文件和配置。只需将 `.sirc` 文件放入 `plugins/BukkitCode/project/`,BukkitCode 编译器就会自动识别并解析它——无需手动处理。
`.sirc` 文件是自包含的,便于备份、分享和在服务器之间迁移。你也可以将其重新导入网页应用以继续编辑。
---
## 🌍 多语言支持
- 内置 `en_US` 和 `zh_CN`,可通过 config.yml 中的 `language.current` 切换;
- 将内置语言文件复制到 `plugins/BukkitCode/messages/` 并修改,即可自定义覆盖(UTF-8 编码)。
---
## ❓ 常见问题
**Q1:使用 BukkitCode 需要懂 Java 吗?**
不需要。你主要通过自然语言与网页端AI-Agent对话来开发插件,AI-Agent负责代码和结构。你只需要在服务器上为编译器插件运行几个命令。
**Q2:服务器可以在 JRE 上运行吗?**
不可以。编译依赖于 JDK 捆绑的系统编译器(`ToolProvider.getSystemJavaCompiler`),JRE 中没有该编译器。请使用 JDK 运行服务器。
**Q3:`compiler` 和 `deploy` 有什么区别?**
`compiler` 只进行编译,输出到 `target/` 目录。添加 `deploy` 参数后,编译成功会自动执行一键部署:“卸载旧版本 → 将旧 jar 重命名为 `.jard` → 复制新 jar → 立即加载。”
**Q4:编译失败怎么办?**
查看错误报告——它会指出 `文件:行号` 并保留完整的错误信息。你可以直接将其复制给 AI 模型进行排查,或者发送回网页应用让AI-Agent修复后重新导出。
**Q5:为什么有些插件无法卸载?**
有两种可能:第一,Paper 原生插件(`paper-plugin.yml`)不支持热卸载,会被明确拒绝;第二,插件受 config.yml 中的 `ignored-plugins` 列表保护(BukkitCode 本身始终受保护)。
**Q6:卸载后可以立即替换 jar 文件吗?**
可以。卸载过程会断开类加载器的内部引用循环,关闭类加载器,并主动调用 `System.gc()`,从而在 Windows 中释放 jar 文件的文件锁。
---
## ⚠️ 已知限制
- 服务器必须运行在 **JDK** 上(编译依赖 JDK 系统编译器);
- 编译在服务器上进行,因此非常大的项目会消耗服务器 CPU/内存(有超时和大小限制作为安全措施);
- Paper 原生插件不支持热卸载;持有静态引用或自行创建线程的插件无法被任何热卸载方案回收。
---
## 🙏 致谢
- 感谢 Minecraft / Bukkit / Spigot / Paper 社区长期以来维护其生态和文档;
- 感谢参与 BukkitCode 测试和反馈的服务器管理员和开发者。你们的建议直接推动了产品的改进。
立即开始:打开 https://bukkitcode.com/chat ,描述你的玩法想法,导出 `.sirc`,在你的服务器上编译并部署——将你的想法变成真正运行的插件!
[/MD]