第 2 课:公告与自定义登录 (JoinMessage Plus) —— 打造第一印象

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

课程时长:120 分钟
技术栈:IntelliJ IDEA + Spigot API 1.21.1 + AI 助手 (Cursor/ChatGPT)
核心目标:理解“事件驱动编程”模型,学习如何通过 AI 实现复杂的视觉反馈(Title 和 Action Bar),并初步接触“变量驱动”的设计思维。


一、 任务背景 (Mission Background)

一个专业的服务器,第一印象至关重要。当新玩家进入世界时,你应该用最华丽的方式迎接他,而不是仅仅显示一句枯燥的 Player joined the game。今天,你的任务是设计一套全方位的欢迎系统


二、 学习路线图 (Technical Map)

  • 编程技能:监听器接口 (Listener)、事件注解 (@EventHandler)、字符串替换 (String.replace)。

  • 工程思维:变量化设计(用 %player% 代替具体名字)、优先级管理(取消系统默认消息)。

  • AI 素养:描述视觉需求(Prompting for UI/UX)、利用 AI 查找特定 API(如 Title API)。


三、 核心项目:自定义欢迎系统 (Sprint 1: 45 min)

1. 事件驱动逻辑 (Event-Driven)

在 Minecraft 插件中,大部分功能是靠“监听”发生的。我们需要监听 PlayerJoinEvent

推荐 Prompt(提示词):

“我正在使用 Spigot 1.21.1。请帮我写一个玩家加入事件的监听器:
1.取消系统默认的玩家进入提示。
2.发送一条自定义消息:‘[+] 欢迎 [玩家名] 来到我的世界!’。
3.消息需要支持颜色代码。”

2. 代码集成:注册监听器

  • 关键点:AI 可能会写出代码,但它无法帮你修改 onEnable

  • 手动操作:在主类中添加 getServer().getPluginManager().registerEvents(new MyListener(), this);

  • Vibe Check:如果没有这一行,你的插件就像一个没插电的收音机,永远听不到玩家进入的消息。


四、 多任务挑战:视觉全家桶 (Sprint 2: 45 min)

玩家进入时,只发聊天框消息太低调了。我们需要同时触发多种效果:

任务等级 任务名称 功能描述 AI 协助方向
基础版 屏幕大标题 (Title) 在玩家屏幕正中央显示巨大的欢迎词。 “如何发送包含主标题和副标题的 Title?”
进阶版 动作栏消息 (ActionBar) 在快捷栏上方显示:‘当前在线人数:X/20’。 “如何获取服务器在线人数并显示在 Action Bar?”
专家版 进服烟花 (Firework) 在玩家脚下自动释放一束随机颜色的烟花。 “编写代码在玩家坐标生成随机效果的烟花。”

五、 工程思维:变量与占位符 (Engineering Logic: 15 min)

思考题: 如果你想把消息从“欢迎”改为“Hi”,你愿意每次都修改代码、重新打包、重启服务器吗?

  • 变量替换逻辑:学习如何定义一个字符串模板。

    • 代码逻辑:String msg = “欢迎你,%player%!”;

    • 替换动作:msg.replace(“%player%”, player.getName());

  • AI 任务:让 AI 解释为什么使用 .replace() 而不是直接写死名字对“软件通用性”更有好处。


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

  1. 多玩家测试:邀请你的同学进入你的服务器。看看记分板或 ActionBar 上的“在线人数”是否实时更新?

  2. 视觉重叠测试:如果 Title 停留时间太长,会不会遮挡玩家视线?

  3. AI 纠错:如果烟花伤害到了玩家,请向 AI 提问:“如何让插件生成的烟花不造成任何伤害?”


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

探索 API 文档:

  • 除了 PlayerJoinEvent,还有 PlayerQuitEvent(退出事件)。

  • 挑战任务:尝试利用 AI 制作一个“离线告别”功能,显示 [-] 玩家 XXX 离开了,大家会想他的。


八、 成果交付 (Deliverables)

  1. 演示:展示玩家进入时,屏幕大标题、动作栏、聊天框同步出现的“华丽三连击”。

  2. 代码截图:标注出 @EventHandler 的位置。

  3. Prompt 记录:记录你如何通过 AI 获取“在线人数”这个具体参数的(提示:Bukkit.getOnlinePlayers().size())。


九、 老师的 Vibe Tips (结语)

“好的程序员不只是在写逻辑,更是在设计用户体验。今天你通过 AI 掌握了 Title 和 Action Bar 的用法,这就像是学会了装修。记住,代码的目的是为了让世界更生动,而不是为了让代码更长。”