From a70fc0a77da9ba176ced962145c0965baed7d5aa Mon Sep 17 00:00:00 2001 From: Purpur Build Date: Mon, 29 Jun 2026 18:17:44 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E6=96=B0=E5=A2=9E=20CLAUDE.md=20?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=E9=A1=B9=E7=9B=AE=E7=BA=A6=E5=AE=9A=E4=B8=8E?= =?UTF-8?q?=E6=AF=8F=E6=AC=A1=E6=94=B9=E5=8A=A8=E5=90=8E=E7=9A=84=E5=8F=91?= =?UTF-8?q?=E8=A1=8C=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 --- CLAUDE.md | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 CLAUDE.md diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..0877ea1 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,48 @@ +# CraftBank — 项目约定 + +适用于 **Folia 1.21.8** 的经济与银行核心插件(Java 21+,Gradle 构建)。 + +## 仓库 + +- 远端:私有仓库 `dmz7p4xmqh-coder/CraftBank`(默认分支 `main`)。 +- `gh` 与 `git` 已安装并登录,可直接用于推送与发行。 + +## 每次改动后的固定流程 + +完成任何代码改动后,**主动执行**以下步骤(无需等用户再次要求): + +1. **构建验证**:运行 `./gradlew shadowJar`,确认编译通过并产出 `build/libs/CraftBank-.jar`。 +2. **更新 README**:若改动影响功能、指令、权限、配置项或 PlaceholderAPI 变量,同步更新 `README.md`。 +3. **提交并推送**到 `main`。 +4. **发布 Release**:用 `gh release create` 创建新发行版,附上编译好的 jar。 + +## 版本号约定(语义化版本) + +- 新功能 → 递增次版本号:`v1.x.0` +- Bug 修复 → 递增修订号:`v1.0.x` +- 不兼容的重大改动 → 递增主版本号:`v2.0.0` + +发行版 tag 与 `build.gradle.kts` 里的 `version`、`plugin.yml` 的版本需保持一致(`plugin.yml` 通过 `${version}` 占位符在构建时自动填充,改 `build.gradle.kts` 的 `version` 即可)。 + +## 构建注意事项 + +- 用当前 JDK(已验证 JDK 25)编译,通过 `--release 21` 产出 Java 21 字节码。 +- **不要**在 shadowJar 中启用包重定位(`relocate`):当前 shadow 8.3.5 的字节码重映射器在新 JDK 产出的 `invokedynamic` class 上会崩溃。如确需重定位,改用 JDK 21 编译或升级 shadow 插件。 +- MySQL 驱动默认不打包;需要时在 `build.gradle.kts` 取消相应依赖注释。 +- 不要提交 `build/`、`.gradle/`、`.claude/`(已在 `.gitignore` 中排除)。 + +## 架构速览 + +- 主类 `CraftBank`:初始化各子系统、注册 Vault(Highest)、封装 Folia 调度(`runAsync` / `runForPlayer` / `runGlobal`)。 +- `economy/`:`EconomyManager`(`ConcurrentHashMap` 缓存 + `synchronized` 账户)、`VaultEconomyProvider`(Vault 接口实现)。 +- `bank/BankManager`:活期复利结算、定期存款创建 / 锁定 / 到期结算。 +- `database/DatabaseManager`:SQLite/MySQL,定期领取用 `UPDATE ... WHERE claimed = 0` 原子置位防重复。 +- `items/`:银行卡与支票的 PDC 创建与防伪校验。 +- `commands/`、`listeners/`、`gui/`、`hooks/`:指令、事件、GUI、PlaceholderAPI。 + +## Folia 线程纪律 + +- 严禁 `Bukkit.getScheduler()`。 +- 数据库 / 排序 / 利息扫描等后台任务走 `AsyncScheduler`。 +- 操作玩家物品、开 GUI、发消息从异步切回时调度到 `player.getScheduler()`(实体区域线程)。 +- 经济数据操作必须线程安全(Vault 接口可能在其它插件的异步线程被调用)。