Arena - Minecraft 竞技场插件 | [English Documention]
基于 Paper 1.21 的 Minecraft 竞技场生存插件,玩家通过传送门进入程序化生成的竞技场世界,挑战逐波增强的怪物。
- 程序化世界生成:基于 Simplex 噪声的地形高度变化 + 预设区块模板
- 事件驱动架构:无定时轮询,通过 Bukkit 事件监听实现状态流转
- 异步任务调度:怪物生成检测、玩家状态监控均为异步执行,主线程零阻塞
- 动态难度系统:怪物血量、装备品质随挑战次数递增
arena/
├── Arena.java # 插件入口,世界初始化
├── WorldManager.java # 世界创建/重置,自定义 ChunkGenerator
├── ChunkTemplate.java # 区块模板数据,Simplex 噪声地形生成
├── BlockPropertyUtil.java # 方块属性编解码(方向、半砖类型)
├── MobChain.java # 波次控制、怪物生成、胜利判定
├── MobContainer.java # 怪物类型定义、Team 管理
├── PortalListener.java # 传送门事件、死亡/变形事件处理
└── SaveChunkTemplateCommand.java # 开发工具:导出区块为模板代码
| 模块 | 设计 | 性能优势 |
|---|---|---|
| 世界生成 | ChunkGenerator.generateNoise() 覆写 |
仅在区块首次加载时执行,无运行时开销 |
| 波次监控 | BukkitRunnable.runTaskTimerAsynchronously() |
异步线程执行,不阻塞主线程 tick |
| BOSS 检测 | CompletableFuture + 主线程回调 |
避免异步直接访问 Bukkit API |
| 怪物管理 | Scoreboard Team | 原生 API 管理实体分组,无额外数据结构 |
| 模板存储 | 一维数组 int[] + Material[] |
内存紧凑,遍历高效 |
- 玩家站在镀金黑石上进入下界门 → 传送至竞技场
- 45 秒准备时间(蹲在黄色陶瓦上可退出)
- 5 波怪物挑战,每波 12 tick 刷怪周期
- 第 5 波为 BOSS 战(Warden / Iron Golem)
- 通关后烟花庆祝,进入下一轮(难度递增)
/arena- 导出当前区块为模板代码(开发用)