Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 9b382320a5 |
@@ -1,48 +0,0 @@
|
||||
# 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/`、`.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 接口可能在其它插件的异步线程被调用)。
|
||||
Reference in New Issue
Block a user