第 14 课:私人银行 (Bank System) —— 数字化金融架构师

课程时长:120 分钟技...

课程时长:120 分钟
技术栈:IntelliJ IDEA + Spigot API 1.21.1 + AI 助手
核心目标:理解数值型数据的持久化存储,学习使用 HashMap 管理内存数据,掌握交易原子性(Transactional Logic)——即如何确保在扣钱和加钱的过程中数据不出错。


一、 任务背景 (Mission Background)

在你的世界里,物物交换太落后了!作为**“首席金融架构师”**,你需要为服务器建立一套数字货币体系。玩家将拥有自己的“银行账户”,可以随时查询余额,并向其他玩家进行转账。每一分钱都必须被精准记录在硬盘里,即使服务器断电,财富也不会消失。


二、 学习路线图 (Technical Map)

  • 编程技能HashMap<uuid, double=””></uuid,>(内存存储)、Double 数据类型、自定义 YAML 数据文件读写、指令多参数解析。

  • 工程思维交易安全(Transaction Security)——防止余额变成负数;唯一标识符(UUID)——为什么要用 UUID 而不是玩家名字来存钱?

  • AI 素养:利用 AI 编写复杂的“数值转换与检查”逻辑,确保转账金额必须是正数且为数字。


三、 核心项目:银行核心引擎 (Sprint 1: 45 min)

1. 建立账户映射

我们需要在内存中记录谁有多少钱。

推荐 Prompt(提示词):

“我正在使用 Spigot 1.21.1 开发银行插件。请帮我实现基础逻辑:

  1. 使用 HashMap<uuid, double=””></uuid,> 在内存中存储玩家余额。

  2. 当玩家加入服务器时,从 data.yml 读取其余额。如果不存在,则默认为 1000.0。

  3. 实现指令 /balance(或 /money):显示玩家当前的余额(绿色文字,保留两位小数)。

  4. 实现一个保存方法,在插件关闭时将所有 HashMap 里的数据写回 data.yml。”

2. 代码解析:UUID 的重要性

  • 关键代码player.getUniqueId()

  • Vibe Check:问问 AI,如果玩家改了游戏名字(Name),他的钱会丢失吗?为什么使用 UUID 能避免这个问题?(提示:名字会变,但 UUID 是账号的终身身份证)。


四、 多任务挑战:转账逻辑与防御 (Sprint 2: 45 min)

银行系统最怕的就是“凭空造钱”或“负债累累”。

任务等级 任务名称 功能描述 AI 协助方向
基础版 管理员调额 实现指令 /eco set 强制设置某人的余额。 “如何获取指定在线玩家的 UUID 并修改 HashMap 中的值?”
进阶版 玩家转账 (Pay) 实现指令 /pay 。必须检查自己是否有足够的钱,且目标玩家必须在线。 “编写转账逻辑:1. 检查余额是否充足;2. 扣除自己的钱;3. 增加对方的钱;4. 双方发送提示。”
专家版 自动存盘任务 每隔 5 分钟自动将内存中的数据同步到 data.yml,防止崩溃丢数据。 “如何结合 BukkitRunnable 实现定期保存数据的方法?”

五、 工程思维:交易漏洞防御 (Engineering Logic: 15 min)

工程师的深度思考:

  1. 负数陷阱:如果玩家输入 /pay player -100 会发生什么?(他会从别人那里偷走 100 块)。

    • 防御:在代码中强制检查 if (amount <= 0) return;

  2. 自我转账:如果玩家转账给自己,金额会翻倍吗?

  3. 原子性:如果在扣了 A 的钱后,给 B 加钱的代码报错了,这笔钱是不是凭空消失了?

    • AI 任务:询问 AI “在编写转账逻辑时,如何确保扣钱和加钱操作是‘安全的’?”


六、 联机调试与 Debug (Testing: 15 min)

  1. 数值测试:输入 /pay <名字> 500.55。检查双方余额变动是否精确?

  2. 穷光蛋测试:余额只有 10 块时,尝试转账 100 块。插件会报错还是会阻止?

  3. 持久化测试:转账后关闭服务器,查看 data.yml 文件。数据是否被正确写入?

  4. AI 纠错:如果输入 /pay <名字> abc(非数字)导致控制台报错,请问 AI:“如何使用 Try-Catch 捕获字符串转数字的异常(NumberFormatException)?”


七、 自学习与探究 (Self-Learning)

拓展思考:

  • 排行榜:你能利用 AI 写一个 /money top 指令,显示全服最有钱的前 5 名玩家吗?(提示:涉及对 HashMap 进行排序)。

  • 生态系统接入:了解什么是 Vault API。大多数 Minecraft 插件都用它作为货币的标准接口。你能让 AI 解释如何让你的银行支持 Vault 吗?


八、 成果交付 (Deliverables)

  1. 演示:展示你与另一名同学之间的成功转账,并展示当余额不足或输入非法数字时的错误拦截提醒。

  2. 数据文件展示:打开 data.yml,展示里面保存的 UUID 与金额列表。

  3. Prompt 记录:记录你如何让 AI 帮你处理“保留两位小数”和“非法参数拦截”的提示词。


九、 老师的 Vibe Tips (结语)

“今天你处理的是程序员最敏感的神经——数据一致性。在金融系统中,逻辑漏洞就是金钱的流失。利用 AI 帮你处理繁琐的数据格式化,但你必须保持警惕:永远不要相信用户的输入。每一个 if (amount > balance) 都是你作为架构师修筑的防御工事。”