跳到主要内容

和平旗帜

和平旗帜是可合成物品,可在指定区块半径内阻止常规自然生成向精英的转换。设置 suppressEvents: true 时,也会抑制 EliteMobs 处理的动作事件和定时事件生成尝试。它不会阻止任意自定义或区域 Boss 的生成,不会移除已有精英,也不提供通用生物保护。

工作原理​

  1. 合成: 玩家使用默认配方(或管理员配置的自定义配方)合成和平旗帜。默认配方需要骨头环绕任意颜色的旗帜。
  2. 放置: 功能启用时,放置和平旗帜会立即登记保护。默认半径 4 覆盖以所在区块为中心的 9×9 区块正方形,不限制高度;它不是从旗帜方块量起的圆形。
  3. 移除: 破坏和平旗帜方块会移除保护区域,允许精英怪物再次在该区域生成。
  4. 持久化: 已放置的和平旗帜会保存到磁盘,并在服务器重启后持续生效。当包含和平旗帜的区块加载时,插件会验证旗帜方块是否仍然存在,如果已被其他方式破坏则自动移除保护。

默认合成配方​

BBB
BWB
BBB
  • B = 骨头
  • W = 任意旗帜(支持全部 16 种旗帜颜色)

该配方会生成一面带有自定义图案、显示名称和描述的蓝色旗帜,标识为和平旗帜。

配置​

所有和平旗帜设置位于 PeaceBanner.yml 中。完整参考请查看配置设置页面。

设置默认值描述
enabledtrue是否启用和平旗帜功能
craftabletrue玩家是否可以合成和平旗帜
chunkRadius4已放置旗帜周围抑制精英怪物的半径(以区块为单位)
suppressEventstrue已放置的旗帜是否同时抑制 EliteMobs 事件(动作事件和定时事件)
recipeShapeBBB / BWB / BBB合成台布局
recipeIngredientsB: 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 listelitemobs.peacebanner.admin列出所有已放置的和平旗帜及其坐标和区块半径

重叠旗帜​

多个和平旗帜可以放置在保护区域重叠的位置。系统使用引用计数,因此只要至少有一个旗帜覆盖某个区块,该区块就保持受保护状态。移除单个旗帜只会取消未被其他旗帜覆盖的区块的保护。

技术细节​

  • 新放置的和平旗帜通过物品的持久化数据容器(PDC)标签识别,而非外观。在未登记位置放置普通旗帜不会创建保护。
  • 旗帜数据存储在 plugins/EliteMobs/data/peace-banners.yml 中。
  • 区块加载时的验证只检查保存位置是否存在任意旗帜方块,不会重新检查和平旗帜标签或图案。如果该位置不再是旗帜,例如被爆炸或世界编辑移除,保护会在此时取消,而不是在外部修改发生时立即取消。
  • 已保存的记录归属于世界的 UUID。EliteMobs 初始化时未加载的世界,其记录会保持未激活状态,直到该世界加载,届时保护会自动激活。使用相同名称的另一个世界不会继承这些记录;EliteMobs 会改为记录一条警告。