和平旗帜
和平旗帜是可合成物品,可在指定区块半径内阻止常规自然生成向精英的转换。设置 suppressEvents: true 时,也会抑制 EliteMobs 处理的动作事件和定时事件生成尝试。它不会阻止任意自定义或区域 Boss 的生成,不会移除已有精英,也不提供通用生物保护。
工作原理
- 合成: 玩家使用默认配方(或管理员配置的自定义配方)合成和平旗帜。默认配方需要骨头环绕任意颜色的旗帜。
- 放置: 功能启用时,放置和平旗帜会立即登记保护。默认半径 4 覆盖以所在区块为中心的 9×9 区块正方形,不限制高度;它不是从旗帜方块量起的圆形。
- 移除: 破坏和平旗帜方块会移除保护区域,允许精英怪物再次在该区域生成。
- 持久化: 已放置的和平旗帜会保存到磁盘,并在服务器重启后持续生效。当包含和平旗帜的区块加载时,插件会验证旗帜方块是否仍然存在,如果已被其他方式破坏则自动移除保护。
默认合成配方
BBB
BWB
BBB
- B = 骨头
- W = 任意旗帜(支持全部 16 种旗帜颜色)
该配方会生成一面带有自定义图案、显示名称和描述的蓝色旗帜,标识为和平旗帜。
配置
所有和平旗帜设置位于 PeaceBanner.yml 中。完整参考请查看配置设置页面。
| 设置 | 默认值 | 描述 |
|---|---|---|
enabled | true | 是否启用和平旗帜功能 |
craftable | true | 玩家是否可以合成和平旗帜 |
chunkRadius | 4 | 已放置旗帜周围抑制精英怪物的半径(以区块为单位) |
suppressEvents | true | 已放置的旗帜是否同时抑制 EliteMobs 事件(动作事件和定时事件) |
recipeShape | BBB / BWB / BBB | 合成台布局 |
recipeIngredients | B: BONE, W: ANY_BANNER | 配方字符到材料的映射 |
itemName | &aPeace Banner | 和平旗帜物品的显示名称 |
itemLore | (见配置) | 物品上显示的描述行 |
placedMessage | (见配置) | 放置旗帜时发送的消息 |
removedMessage | (见配置) | 破坏旗帜时发送的消息 |
chunkRadius 在每面旗帜放置时读取并随旗帜保存。修改配置不会改变现有旗帜的范围,重启后也一样;要使用新半径,请重新放置旗帜。默认物品描述中的 4 是固定文字,不会跟随半径变化,而 placedMessage 会替换 $radius。
enabled: false 会禁用生成抑制、放置、破坏和加载处理以及合成配方。它不会删除已保存的旗帜记录,也不会禁止管理员给予命令。craftable: false 只禁用配方。
管理员命令
| 命令 | 权限 | 描述 |
|---|---|---|
/em peacebanner give <player> | elitemobs.peacebanner.admin | 给在线玩家一面和平旗帜;物品栏已满时掉落在玩家位置 |
/em peacebanner list | elitemobs.peacebanner.admin | 列出所有已放置的和平旗帜及其坐标和区块半径 |
重叠旗帜
多个和平旗帜可以放置在保护区域重叠的位置。系统使用引用计数,因此只要至少有一个旗帜覆盖某个区块,该区块就保持受保护状态。移除单个旗帜只会取消未被其他旗帜覆盖的区块的保护。
技术细节
- 新放置的和平旗帜通过物品的持久化数据容器(PDC)标签识别,而非外观。在未登记位置放置普通旗帜不会创建保护。
- 旗帜数据存储在
plugins/EliteMobs/data/peace-banners.yml中。 - 区块加载时的验证只检查保存位置是否存在任意旗帜方块,不会重新检查和平旗帜标签或图案。如果该位置不再是旗帜,例如被爆炸或世界编辑移除,保护会在此时取消,而不是在外部修改发生时立即取消。
- 已保存的记录归属于世界的 UUID。EliteMobs 初始化时未加载的世界,其记录会保持未激活状态,直到该世界加载,届时保护会自动激活。使用相同名称的另一个世界不会继承这些记录;EliteMobs 会改为记录一条警告。