Files
CraftBank/AGENTS.md
T
Purpur Build d5bc819684 feat: add transaction logs and custom bank inputs
Adds configurable fees, transaction history, chat amount input, and v1.1.0 release documentation.
2026-06-30 10:20:52 +08:00

49 lines
2.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# CraftBank — 项目约定
适用于 **Folia 1.21.8** 的经济与银行核心插件(Java 21+,Gradle 构建)。
## 仓库
- 远端:私有仓库 `dmz7p4xmqh-coder/CraftBank`(默认分支 `main`)。
- `gh``git` 已安装并登录,可直接用于推送与发行。
## 每次改动后的固定流程
完成任何代码改动后,**主动执行**以下步骤(无需等用户再次要求):
1. **构建验证**:运行 `./gradlew shadowJar`,确认编译通过并产出 `build/libs/CraftBank-<version>.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/``.Codex/`(已在 `.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 接口可能在其它插件的异步线程被调用)。