第 15 课:自助商店 (GUI Shop) —— 这里的购物不打烊

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

课程时长:120 分钟
技术栈:IntelliJ IDEA + Spigot API 1.21.1 + AI 助手
核心目标:实现 **GUI 界面(第 13 课)经济系统(第 14 课)**的深度整合。学习编写涉及多个模块的复杂业务逻辑,处理“库存检查”与“余额扣除”的同步性,培养模块化编程思维。


一、 任务背景 (Mission Background)

有了银行和货币,玩家们迫切需要一个花钱的地方。今天,你将担任**“全栈开发者”**,把之前的 UI 技术和银行技术结合起来,打造一个“自助商店”。玩家输入 /shop 即可打开精美的货架,点击商品自动扣费并发货。这是你迈向复杂系统集成的关键一步!


二、 学习路线图 (Technical Map)

  • 编程技能:跨类方法调用(在 Shop 类中调用 Bank 类的余额)、物品给予逻辑、条件分支判断。

  • 工程思维模块集成 (Integration) —— 确保商店扣的钱就是银行里的钱;异常处理 —— 钱够但背包满了怎么办?

  • AI 素养:利用 AI 优化“多重条件检查”逻辑(先检查钱,再检查位子,最后扣费),避免逻辑混乱。


三、 核心项目:商品交易引擎 (Sprint 1: 45 min)

1. 搭建货架(GUI)

我们需要一个 9 格的商店,第一格卖“钻石”,价格 500。

推荐 Prompt(提示词):

“我正在使用 Spigot 1.21.1。我已经有一个银行系统类 BankSystem 可以增删余额。请帮我写一个商店监听器:

  1. 监听 InventoryClickEvent,判断标题是否为‘§6§l自助商店’。

  2. 如果玩家点击了第 0 格(钻石图标):

    • 检查玩家余额是否大于等于 500。

    • 检查玩家背包是否有空位。

    • 如果满足条件:扣除 500 余额,给玩家 1 个钻石,发送成功消息。

    • 如果不满足:发送对应的错误提示音和文字。”

2. 代码解析:逻辑的“原子性”

  • 关键点:必须遵循 “检查 -> 扣除 -> 给予” 的顺序。

  • Vibe Check:问问 AI,为什么不能先给玩家钻石再扣钱?(提示:万一扣钱的代码执行失败了,玩家就白拿了钻石,这叫“刷物漏洞”)。


四、 多任务挑战:复杂交易功能 (Sprint 2: 45 min)

真正的商店不仅能买,还得能卖,还得能“批发”。

任务等级 任务名称 功能描述 AI 协助方向
基础版 批量购买 (Shift) 按住 Shift 点击时,一次性买一组(64个),并计算总价。 “如何在点击事件中识别 ShiftClick 并计算 amount * price?”
进阶版 回收模式 (Sell) 右键点击商品是“卖出”,按照原价的 50% 回收玩家手里的同类物品。 “如何检查玩家背包中某物品的数量并扣除,同时增加余额?”
专家版 动态库存 某些稀有商品(如下界合金)全服限购,买一个少一个。 “如何使用全局变量或配置文件存储商品的‘剩余库存’?”

五、 工程思维:模块间的“握手” (Engineering Logic: 15 min)

工程师的深度思考:

  1. 接口调用:商店插件怎么知道玩家在银行里有多少钱?

    • 建议:不要在商店类里重新写一套存钱逻辑。通过 Main.getBank().getBalance(uuid) 这种方式调用。这叫单一职责原则

  2. 安全性检查:如果玩家在商店打开时,通过其他手段(如另一个插件)花光了钱,点击瞬间会报错吗?

    • AI 任务:询问 AI “如何确保在高并发交易下(玩家手速极快),余额不会被扣成负数?”


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

  1. 穷光蛋测试:余额为 0 时点击钻石,确保既拿不到钻石也不会扣钱。

  2. 满背包测试:把背包塞满,看看钱是否会被扣除?(正确逻辑应该是:背包满了就不扣钱也不发货)。

  3. 刷钱测试:尝试快速连点,检查余额变动是否正常。

  4. AI 纠错:如果玩家拿走了货架上的图标(防盗失效),请将你的 InventoryClickEvent 代码发给 AI 检查哪个 setCancelled(true) 漏写了。


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

拓展思考:

  • 配置化商店:能否让 AI 写一个逻辑,从 shop.yml 里读取商品 ID、名字和价格,而不是在 Java 代码里写死?

  • 可视化反馈:购买成功时,在玩家头顶冒出绿色“+”粒子,失败时冒出红色烟雾。


八、 成果交付 (Deliverables)

  1. 演示:展示你从余额 1000 块开始,在商店购买钻石、余额实时变少、物品进入背包的全过程。

  2. 代码截图:展示你是如何引用 BankSystem 里的余额检查方法的。

  3. Prompt 记录:记录你如何通过 AI 实现“批量购买价格计算”的提示词。


九、 老师的 Vibe Tips (结语)

“今天你完成了一个真正的系统集成。在软件世界里,单一的功能(如 UI 或 数据库)很容易,但让它们协同工作(Integrated)才是最有挑战性的。利用 AI 帮你理清复杂的逻辑分支,而你作为系统架构师,要确保钱和物在你的规则下公平流动。”