课程时长: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 开发银行插件。请帮我实现基础逻辑:
使用 HashMap<uuid, double=””></uuid,> 在内存中存储玩家余额。
当玩家加入服务器时,从 data.yml 读取其余额。如果不存在,则默认为 1000.0。
实现指令 /balance(或 /money):显示玩家当前的余额(绿色文字,保留两位小数)。
实现一个保存方法,在插件关闭时将所有 HashMap 里的数据写回 data.yml。”
2. 代码解析:UUID 的重要性
-
关键代码:player.getUniqueId()。
-
Vibe Check:问问 AI,如果玩家改了游戏名字(Name),他的钱会丢失吗?为什么使用 UUID 能避免这个问题?(提示:名字会变,但 UUID 是账号的终身身份证)。
四、 多任务挑战:转账逻辑与防御 (Sprint 2: 45 min)
银行系统最怕的就是“凭空造钱”或“负债累累”。
五、 工程思维:交易漏洞防御 (Engineering Logic: 15 min)
工程师的深度思考:
-
负数陷阱:如果玩家输入 /pay player -100 会发生什么?(他会从别人那里偷走 100 块)。
-
防御:在代码中强制检查 if (amount <= 0) return;。
-
-
自我转账:如果玩家转账给自己,金额会翻倍吗?
-
原子性:如果在扣了 A 的钱后,给 B 加钱的代码报错了,这笔钱是不是凭空消失了?
-
AI 任务:询问 AI “在编写转账逻辑时,如何确保扣钱和加钱操作是‘安全的’?”
-
六、 联机调试与 Debug (Testing: 15 min)
-
数值测试:输入 /pay <名字> 500.55。检查双方余额变动是否精确?
-
穷光蛋测试:余额只有 10 块时,尝试转账 100 块。插件会报错还是会阻止?
-
持久化测试:转账后关闭服务器,查看 data.yml 文件。数据是否被正确写入?
-
AI 纠错:如果输入 /pay <名字> abc(非数字)导致控制台报错,请问 AI:“如何使用 Try-Catch 捕获字符串转数字的异常(NumberFormatException)?”
七、 自学习与探究 (Self-Learning)
拓展思考:
-
排行榜:你能利用 AI 写一个 /money top 指令,显示全服最有钱的前 5 名玩家吗?(提示:涉及对 HashMap 进行排序)。
-
生态系统接入:了解什么是 Vault API。大多数 Minecraft 插件都用它作为货币的标准接口。你能让 AI 解释如何让你的银行支持 Vault 吗?
八、 成果交付 (Deliverables)
-
演示:展示你与另一名同学之间的成功转账,并展示当余额不足或输入非法数字时的错误拦截提醒。
-
数据文件展示:打开 data.yml,展示里面保存的 UUID 与金额列表。
-
Prompt 记录:记录你如何让 AI 帮你处理“保留两位小数”和“非法参数拦截”的提示词。
九、 老师的 Vibe Tips (结语)
“今天你处理的是程序员最敏感的神经——数据一致性。在金融系统中,逻辑漏洞就是金钱的流失。利用 AI 帮你处理繁琐的数据格式化,但你必须保持警惕:永远不要相信用户的输入。每一个 if (amount > balance) 都是你作为架构师修筑的防御工事。”