搜索

季节事件与流星雨

事件触发器、流星奖励箱、持久化、领地回退与奖励配置。

1.0.77 流星可使用 MythicMobs + ModelEngine 的 liseasons_meteor 岩核与火焰尾迹模型,跟随原有轨迹,结束后回收。模型不参与落点结算,关闭模型、模型缺失或达到模型配额均不增加/取消原有陨石奖励;粒子和模型可以同时显示。安装和中文配置见自然灾害与龙卷风。

自然触发流程

1.0.75 新增冰雹、沙尘暴和冻雨,1.0.77 进一步新增地震、蘑菇云、天坑、海啸、尸潮,持续灾害现在共有十三种。自然灾害与龙卷风介绍了全部灾害的预警、配置和避险;龙卷风保留移动立体风柱、卷吸抬升与范围伤害,默认不破坏建筑。

1.0.72 持续自然灾害

热浪、寒潮、暴风雪与雷暴沿用既有事件 ID 和触发概率,但改为“预警 → 持续影响 → 结束”。新机制位于 climate-survival.yml -> disasters,默认值如下:

事件 ID 灾害 总时长(包含 10 秒预警) 户外温差 户外脉冲
HOT_SUN 热浪 180 秒 +16℃ 火星提示,温伤另由暴露累计
EXTREME_COLD_NIGHT 寒潮 180 秒 -18℃ 雪花提示,冻伤另由暴露累计
HEAVY_SNOW 暴风雪 150 秒 -12℃ 雪花、短时缓慢
THUNDERSTORM_SEASON 雷暴 120 秒 -4℃ 每 10 秒 20% 概率雷声/电火花与 3 点基础伤害

预警期不附加温差或脉冲伤害。以上是个人灾害状态,不是全世界统一天气;每人最多一场,新触发覆盖旧场。屋顶下温差默认剩 25%,并跳过脉冲。暴风雪和雷暴尊重 Residence 等插件设置的个人晴天 WeatherType.CLEAR,但不会将个人晴天视为热浪/寒潮免疫。

本次雷暴不生成真实闪电实体、不点燃建筑;雷暴基础伤害走 Bukkit 伤害事件。季节变化、跨世界、离线、死亡、重载均清理灾害。开启新接管时不重复执行这四种事件的旧一次性效果;关闭持续接管会恢复旧效果,要完全禁用请使用 season-events.yml 的事件开关。

管理员可在游戏中用 /seasons event trigger hot-sun 验证热浪;其他默认配置 ID 为 extreme-cold-night、heavy-snow、thunderstorm-season。命令使用 season-events.yml 的小写节点 ID,不是上表的大写类型名,Tab 补全保留。自然发生仍受下列条件及冷却限制。个人生存伤害默认可致死,详细阈值见体温系统。

季节事件检查默认每 60 秒运行一次,每轮最多轮转检查 64 名在线玩家。单个玩家必须同时满足:

  1. 所在世界已启用季节系统;
  2. 事件属于当前季节并已启用;
  3. 兼容触发条件满足;
  4. 单事件个人冷却结束;
  5. 全局个人冷却结束;
  6. 本轮概率命中。

全局保护下限:

global:
  event-cooldown-seconds: 180
  check-interval-seconds: 60
  highest-priority-only: true

即使配置更低,代码仍会把事件全局冷却限制为至少 180 秒、检查周期限制为至少 60 秒。当前管理器每轮只选择第一个满足条件的事件,因此 highest-priority-only 在 1.0.65 中不会改变“一轮最多触发一个”的实际行为。

默认 25 个季节事件

季节 ID 名称 默认概率 单事件冷却
春 fair-weather 风和日丽 6% 600 秒
春 spring-breeze 微风习习 5% 720 秒
春 spring-cold 春寒料峭 4% 900 秒
春 spring-rain 春雨绵绵 3% 720 秒
春 earthquake 地震 1% 1200 秒
夏 nuke 蘑菇云 0%(仅手动) 1200 秒
夏 tsunami 海啸 1% 1200 秒
秋 sinkhole 天坑 1% 1200 秒
秋 zombie-apocalypse 尸潮 0%(仅手动) 1200 秒
春 hailstorm 冰雹 2% 1200 秒
夏 hot-sun 烈日炎炎 6% 600 秒
夏 summer-clear-sky 盛夏晴空 4% 900 秒
夏 meteor-night 流星之夜 6% 600 秒
夏 thunderstorm-season 雷暴季 3% 720 秒
夏 tornado 龙卷风 2% 1200 秒
秋 harvest-season 丰收时节 4% 900 秒
秋 falling-leaves 落叶纷飞 5% 720 秒
秋 autumn-rain 秋雨连绵 6% 600 秒
秋 pumpkin-festival 南瓜庆典 3% 900 秒
秋 sandstorm 沙尘暴 2% 1200 秒
冬 heavy-snow 大雪纷飞 6% 600 秒
冬 extreme-cold-night 极寒之夜 5% 720 秒
冬 frost-morning-fog 冰霜晨雾 4% 900 秒
冬 winter-celebration 冬日庆典 3% 720 秒
冬 freezing-rain 冻雨 2% 1200 秒

单事件配置

summer-events:
  meteor-night:
    type: "METEOR_NIGHT"
    season: "SUMMER"
    trigger-mode: "season"
    priority: 7
    cooldown-seconds: 600
    chance-percent: 6
    enabled: true
    description: "流星之夜……"
    effects:
      - "SOUND:BLOCK_AMETHYST_BLOCK_CHIME:0.9:1.1"
      - "MESSAGE:<dark_purple>夜幕震颤……</dark_purple>"
  • type 必须是内置 SeasonEventType;
  • season 必须与该类型支持的季节一致;
  • trigger-mode: season 或 always 不检查温度;
  • above、below、range 只为旧温度触发配置兼容;
  • priority 越高越先检查;
  • chance-percent 会在每次检查时独立掷骰;
  • effects 按列表顺序执行。

除 METEOR_NIGHT 会启动专用流星服务外,事件类型和 description 只是分类与展示文本,不会自动实现描述中的额外玩法。真正执行的只有 effects 列表支持的效果。例如描述里写“动物生成率提升”“村民降价”“水位变化”,如果效果列表没有对应实现,就只会显示这段说明。默认事件效果也主要作用于本次命中的玩家,而不是给全世界添加一整天的持续规则。

季节事件效果语法

PARTICLE:<PARTICLE>:<amount>:<offsetX>:<offsetY>:<offsetZ>
POTION:<EFFECT>:<amplifier>:<seconds>
SOUND:<SOUND>:<volume>:<pitch>
MESSAGE:<MiniMessage 文本>
SCREEN_FREEZE:<ticks>
DAMAGE:<amount>
HEAL:<amount>
FIRE:<seconds>

MESSAGE 支持 {season}、{term}、{temperature}、{air_temperature}。季节事件的 SCREEN_FREEZE 实际用短时失明模拟;温度事件的同名效果则调用原版冻结刻度。

真正的夜间流星雨

METEOR_NIGHT 除普通事件条件外,还有独立约束:

  • 自然触发必须是夏季;
  • 世界时间必须在 13000~23000 tick;
  • 世界环境必须位于 allowed-environments,默认只允许 NORMAL;
  • allowed-worlds 为空或包含当前世界;
  • 同一玩家不能已有一场未结束的流星雨;
  • 全服同时流星雨数量不能超过 6。

管理员手动触发会绕过夜间限制,但不会绕过模块开关、世界环境/名称限制、玩家在线状态和并发上限。

/seasons event trigger meteor-night

该命令只能由拥有 liseasons.admin 的在线玩家执行。

高空轨迹

默认每场:

  • 8~13 颗流星;
  • 相邻发射间隔 5~24 tick;
  • 单颗飞行 12~22 tick;
  • 起点位于玩家视线上方 90~150 格;
  • 普通燃尽点至少保留在视线上方 55 格;
  • 轨迹水平长度 80~140 格;
  • 下降幅度 8~48 格;
  • 横向散布 28 格。

整场共享一个随机辐射方向。默认 78% 的流星沿这个方向并带最大 ±32° 偏差,22% 是完全随机方位的偶发流星。

每颗流星独立随机速度、长度、下降幅度、亮度、尾迹长度、位置和颜色。

粒子表现

1.0.70 会在运行时读取 Particle#getDataType()。Paper/Folia 1.21.10+ 的 FLASH 必须携带 org.bukkit.Color,插件会自动补入当前流星颜色;Paper 1.21.1 的同名粒子仍按无数据方式发送。无需为不同核心维护两份配置。

  • 点火:FLASH + 高亮 DUST;
  • 头部:FIREWORK + DUST + ELECTRIC_SPARK;
  • 尾部:12~22 个采样点,间距 0.45~0.8 格;
  • 尾迹每点都有渐变 DUST,每三个采样点补一次 END_ROD;
  • 普通流星末端用 SMOKE 与余辉模拟燃尽;
  • 亮度按飞行进度先升后降;
  • 高空粒子使用远距离强制显示参数。

head-particle、tail-particle、burnout-particle、flash-particle、burst-particle 可使用无需额外数据或只需要 org.bukkit.Color 的 Bukkit 粒子。方块、物品、振动等需要其他专用数据的粒子会回退到安全粒子,不再终止整颗流星。

默认颜色池:

配色 权重 头部 尾迹
蓝白 55 248,252,255 112,188,255
暖白 30 255,250,225 255,170,78
淡绿 15 238,255,242 112,255,178

坠地、暗飞行与爆闪

每颗流星默认只有 8% 概率尝试坠地。落点在触发玩家周围 42 格半径内随机选择,并且只使用已加载区块。

坠地火流星不会一直亮到地面:

  1. 在离地 32~52 格处停止发光;
  2. 进入 10~22 tick 的不可见暗飞行;
  3. 在地面安全高度产生 6 个 FLASH 和 120 个 ELECTRIC_SPARK;
  4. 播放大型烟花爆炸声音;
  5. 按奖励配置尝试生成奖励箱,无法安全放箱则散落物品。

它不会创建爆炸、不会破坏方块、不会造成爆炸伤害,也不会为了落点强制加载新区块。

陨石奖励箱(1.0.81)

默认将成功抽取的奖励存入落点上的真实单箱。玩家共用同一份库存,可打开领取,也可正常破坏箱子获得剩余物品;不是每名玩家各抽一份。箱子与物品随世界保存,重启、重载、玩家离线不会重新发奖,也没有超时删除未领取奖励的机制。

只在已加载、安全有支撑且上方为空的位置放箱,不替换建筑、水、植物或已有容器,不与相邻箱子合并。Residence/Dominion领地、保护查询失败、区域不归属当前线程或其他插件取消创建时,改用同一批物品散落,不重抽、不额外发奖。

配置位于 season-events.yml → meteor-shower.rewards.chest:

配置 默认 用途
enabled true 开启奖励箱;false 使用原散落模式
remove-when-empty true 取空并关闭、漏斗取空或区块再次加载后清理本插件空单箱
title 星陨奖励箱渐变名称 MiniMessage文本,空字符串使用原版名称
message 奖励箱位置提示 发给触发玩家,空字符串关闭;支持 <amount>、<stacks>、<x>、<y>、<z>

空箱清理只删除带本插件持久标记、无物品、无人查看的单箱;普通箱子不受影响。若玩家后来将其合并成双箱,或将该位置圈为领地,则不自动删除。关闭 remove-when-empty 后新生成的箱子保留为空箱;已生成箱子沿用生成时的设置。

提供 Bukkit 可取消事件 com.liseasons.api.event.MeteorRewardChestCreateEvent,在落点区域线程、创建之前触发。其他保护插件需要监听此事件取消创建;并非自动支持所有领地插件。

原有概率与奖励池

默认坠地成功后有 70% 概率生成奖励,每次抽取 1~2 次:

物品 数量 权重 显示名
AMETHYST_SHARD 2~5 45 星辉紫晶
IRON_NUGGET 4~10 30 陨铁碎片
GOLD_NUGGET 2~6 18 星金碎片
ECHO_SHARD 1 7 寂星残片

在关闭奖励箱或无法安全放箱的回退模式中,奖励实体默认发光,20 tick 后可拾取;每堆奖励会在落点同一方块内随机散开并向上弹起。scatter-radius-blocks 默认 0.4、最大 0.45,这个边界保证 Folia 下奖励仍在原落点区域线程生成;upward-velocity 默认 0.28。这些实体参数不影响箱内物品。

drop-message 支持 <amount>(物品总数)、<stacks>(掉落实体堆数)、<x>、<y>、<z>。单颗流星拥有一次性落点与完成门闩,即使调度取消和退休回调同时出现,也不会重复生成奖励或提前结束整场流星雨。

权重是相对值,不要求总和等于 100。单次抽中后数量会在该物品的最小值和最大值之间随机。

为什么测试时可能看不到奖励

按默认值估算,单颗流星同时满足“8% 坠地”与“70% 掉落”的概率为 5.6%。一场 8~13 颗不保证一定有坠地,也不保证坠地后一定掉奖励。

测试视觉时应抬头看高空;测试落点和奖励时可临时提高 impact-chance-percent 与 drop-chance-percent,测试后再改回生产值。

返回首页