季节事件与流星雨
事件触发器、流星奖励箱、持久化、领地回退与奖励配置。
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 名在线玩家。单个玩家必须同时满足:
- 所在世界已启用季节系统;
- 事件属于当前季节并已启用;
- 兼容触发条件满足;
- 单事件个人冷却结束;
- 全局个人冷却结束;
- 本轮概率命中。
全局保护下限:
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 格半径内随机选择,并且只使用已加载区块。
坠地火流星不会一直亮到地面:
- 在离地 32~52 格处停止发光;
- 进入 10~22 tick 的不可见暗飞行;
- 在地面安全高度产生 6 个
FLASH和 120 个ELECTRIC_SPARK; - 播放大型烟花爆炸声音;
- 按奖励配置尝试生成奖励箱,无法安全放箱则散落物品。
它不会创建爆炸、不会破坏方块、不会造成爆炸伤害,也不会为了落点强制加载新区块。
陨石奖励箱(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,测试后再改回生产值。