第 11 课:法术卷轴 (Magic Scrolls) —— 元素奥义大师

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

课程时长:120 分钟
技术栈:IntelliJ IDEA + Spigot API 1.21.1 + AI 助手
核心目标:掌握远程投射物(Projectiles)的发射与控制,学习利用 BukkitRunnable 实现延时任务(如:火焰自动熄灭),构建一套完整的“技能释放 -> 效果产生 -> 环境恢复”的逻辑闭环。


一、 任务背景 (Mission Background)

普通的附魔剑已经无法应对日益强大的怪物。今天,你将化身为**“大魔导师”。你要利用“纸”作为媒介,注入元素力量,制作出三种法术卷轴**:

  1. 火球卷轴 (Fireball Scroll):右键向准星方向发射一颗巨大的火球,撞击处引发爆炸。

  2. 元素痕迹:火球爆炸后,地面会留下一圈持续 5 秒的“魔法火焰”,随后自动熄灭。

  3. 冰霜新星:让周围 5 格内的敌人瞬间陷入冰冻(减速)状态。


二、 学习路线图 (Technical Map)

  • 编程技能launchProjectile 发射投射物、BukkitRunnable (延时任务)、getNearbyEntities (范围搜寻)。

  • 工程思维清理机制 (Cleanup) —— 魔法产生的火如果永不熄灭,服务器会变成废墟。学会“负责任”的代码编写。

  • AI 素养:利用 AI 编写“球体/圆形范围判定”逻辑,并学习如何通过 AI 实现复杂的“状态检查”。


三、 核心项目:烈焰卷轴 (Sprint 1: 45 min)

1. 发射火球逻辑

我们要捕捉玩家手持特定纸张右键点击空气的动作。

推荐 Prompt(提示词):

“我正在使用 Spigot 1.21.1。请帮我写一个 PlayerInteractEvent 监听器:

  1. 检查玩家是否右键点击了空气或方块。

  2. 检查手中物品是否为名为‘§c火球卷轴’的纸张。

  3. 如果是,让玩家发射一个 Fireball(火球)。

  4. 设置火球的射速(yield)和方向。

  5. 消耗一张卷轴数量(amount – 1)。”

2. 代码解析:投射物 API

  • 关键代码p.launchProjectile(Fireball.class, p.getLocation().getDirection().multiply(2));

  • Vibe Check:问问 AI,为什么发射投射物通常要用 multiply(2)?(提示:默认初速度可能太慢,不符合“法术”的打击感)。


四、 多任务挑战:环境交互与清理 (Sprint 2: 45 min)

魔法不应该只是破坏,更应该包含“时间管理”。

任务等级 任务名称 功能描述 AI 协助方向
基础版 延时熄火 火球炸开后,在地面生成一圈火。5 秒后,这些火必须自动消失。 “如何结合 BukkitRunnable 实现 5 秒后将特定坐标的 FIRE 方块变回 AIR?”
进阶版 冰霜新星 制作‘冰霜卷轴’,点击后让周围 5 格敌人获得‘缓慢’效果并产生蓝色粒子。 “如何获取玩家周围的 Entity 列表并过滤掉玩家自己,然后施加 PotionEffect?”
专家版 法术前摇 释放强力卷轴前,玩家必须原地站立 2 秒(伴随粒子充电特效),移动则失败。 “如何利用定时器实现释放前的‘蓄力’判断逻辑?”

五、 工程思维:资源循环与副作用处理 (Engineering Logic: 15 min)

工程师的深度思考:

  1. 世界保护:如果玩家在别人的领地乱放火球怎么办?

    • 解决方案:在火球爆炸事件 (ProjectileHitEvent) 中增加区域权限检查。

  2. 垃圾回收 (Garbage Collection)

    • 每一团火都是一个定时器。如果一秒钟产生了 100 团火,5 秒后 100 个定时器同时触发,会造成瞬间卡顿吗?

    • AI 任务:询问 AI “在处理大量定时任务时,如何有效地管理内存和 CPU 占用?”


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

  1. 威力测试:火球能炸毁方块吗?(如果不想破坏地形,需要设置 fireball.setIsIncendiary(false))。

  2. 熄灭测试:放出火球后,盯着地面的火。倒数 5 秒,火是否如期消失?

  3. 多任务冲突:如果你一边跑一边蓄力,法术会自动打断吗?

  4. AI 纠错:如果火球在发射瞬间炸到了玩家自己,请问 AI:“如何设置投射物的 Shooter 并忽略对发射者的初始碰撞?”


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

拓展思考:

  • 组合法术:如果先放“水卷轴”打湿敌人,再放“雷卷轴”,伤害能否翻倍?

  • 自定义外观:能否利用 AI 获取代码,让火球飞行的过程中拖着一串长长的“末影粒子”?


八、 成果交付 (Deliverables)

  1. 演示:展示你手持不同卷轴,精准打击远处僵尸,并看到火焰在 5 秒后自动熄灭、世界恢复原样的完整过程。

  2. 代码截图:展示 BukkitRunnable 匿名内部类或 Lambda 表达式的代码部分。

  3. Prompt 记录:记录你如何让 AI 实现“范围搜寻敌人并施加效果”的提示词。


九、 老师的 Vibe Tips (结语)

“今天你学习了时间的魔法。优秀的程序员不仅要考虑‘代码如何开始’,更要考虑‘代码如何优雅地结束’。利用 AI 帮你生成那些枯燥的坐标转换,你只需专注于设计法术的节奏感:多久爆炸?多久熄灭?这种对细节的掌控,就是法术卷轴的奥义所在。”