第 12 课:全息显示屏 (Holograms) —— 世界的信息窗口

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

课程时长:120 分钟
技术栈:IntelliJ IDEA + Spigot API 1.21.1 + AI 助手
核心目标:理解 Minecraft 实体的妙用,掌握利用“隐形盔甲架(ArmorStand)”渲染悬浮文字的技术。学习动态数据更新逻辑,并探讨实体的生命周期管理与数据存储。


一、 任务背景 (Mission Background)

在专业的服务器主城,你总能看到一些悬浮在空中的彩色文字,介绍着规则或显示排行榜。这可不是什么魔法,而是**“UI 工程师”**的杰作。今天,你将利用不可见的盔甲架作为“载体”,在你的世界里部署“全息显示屏”,实时显示服务器状态或欢迎信息。


二、 学习路线图 (Technical Map)

  • 编程技能ArmorStand 实体操作、setGravity(false)(反重力)、setCustomNameVisible(true)(显示名字)、setMarker(true)(无体积碰撞)。

  • 工程思维载体思维 —— 学习利用现有对象(实体)实现非原生功能(UI)。垃圾清理 —— 实体是永久存在的,如果不小心生成了 1000 个,服务器会崩溃。

  • AI 素养:利用 AI 快速处理复杂的“多行堆叠坐标计算”(每一行文字其实是一个盔甲架,它们需要垂直排列)。


三、 核心项目:悬浮文字发射器 (Sprint 1: 45 min)

1. 召唤“隐形看板”

我们要通过指令在玩家指着的地方生成一个悬浮文字。

推荐 Prompt(提示词):

“我正在使用 Spigot 1.21.1。请帮我写一个指令 /holo

  1. 在玩家当前坐标(Location)召唤一个 ArmorStand

  2. 设置其为不可见(setInvisible(true))。

  3. 设置其不具有重力(setGravity(false))。

  4. 设置其 CustomName 为指令输入的 (支持颜色代码),并设为可见。

  5. 重要:设置其为 Marker(true),确保玩家无法点击或碰到它,且不产生碰撞体积。”

2. 代码解析:实体的属性组合

  • 关键代码ArmorStand as = (ArmorStand) world.spawnEntity(loc, EntityType.ARMOR_STAND);

  • Vibe Check:问问 AI,为什么要开启 setMarker(true)?(提示:如果不开启,玩家挖方块时会准星会卡在隐形的文字上,非常影响游戏体验)。


四、 多任务挑战:动态与多行显示 (Sprint 2: 45 min)

单行文字太简单了,我们要让显示屏“动”起来。

任务等级 任务名称 功能描述 AI 协助方向
基础版 多行全息图 输入一次指令生成 3 行文字。 “如何计算坐标偏移量,让多个 ArmorStand 垂直等距排列?”
进阶版 动态在线人数 制作一个全息图,每隔 5 秒自动更新内容,显示‘当前在线:X 人’。 “如何结合 BukkitRunnable 定期修改已有 ArmorStand 的 CustomName?”
专家版 自动跟随屏 召唤一个全息图,它会始终悬浮在玩家头顶上方 1 格处并跟随移动。 “如何在定时器中将全息图的 Location 设置为玩家坐标 + 1 格 Y 轴?”

五、 工程思维:实体持久化与清理 (Engineering Logic: 15 min)

工程师的深度思考:

  1. 实体泄露 (Entity Leak):如果你每输入一次指令就生成一个实体,重启服务器后这些隐形人会堆满世界。

    • 预防:给生成的全息图加上特定的 Metadata(元数据)或 ScoreboardTag

    • AI 任务:询问 AI “如何编写一个指令 /holoclear,一键清除周围 5 格内所有带有‘mcp_holo’标签的全息盔甲架?”

  2. 数据保存:如果你想让全息图在服务器重启后依然显示,你需要把它们的 UUID 和文字存入第 4 课学到的 config.yml 中。


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

  1. 可见性测试:如果不设为 Invisible,你能看到那个举着名字的盔甲架吗?

  2. 高度微调:多行显示时,行距是多少最舒服?(通常是 0.25 到 0.3 格)。

  3. 重启测试:关闭服务器再开启。全息图还在吗?它们是变成了可见的盔甲架,还是消失了?

  4. AI 纠错:如果全息图无法被攻击删除,请问 AI:“如何通过代码强制删除(kill)特定范围内的实体?”


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

拓展思考:

  • 交互式看板:虽然设置了 Marker,但能否通过监听 PlayerInteractAtEntityEvent(点击实体事件),让玩家点击全息图时获得奖励?

  • 排行榜显示:结合第 14 课的经济系统,制作一个“全服首富榜”全息显示屏。


八、 成果交付 (Deliverables)

  1. 演示:展示你创建的彩色多行欢迎看板,以及那个实时跳动显示在线人数的动态全息图。

  2. 代码截图:展示 AI 帮你生成的“多行坐标计算”逻辑。

  3. Prompt 记录:记录你如何描述“让全息图跟随玩家”这个意图的提示词。


九、 老师的 Vibe Tips (结语)

“今天你学会了游戏开发中最重要的技巧之一:实体伪装。在 Minecraft 里,很多酷炫的视觉效果背后其实都是一堆‘隐形的盔甲架’。利用 AI 帮你处理枯燥的坐标堆叠,你只需要专注于信息的设计。记住,好的全息屏应该是信息的灯塔,而不是遮挡视线的垃圾。”