体温系统
体温公式、潮湿、环境、装备、物品、HUD 与极端温度效果。
LISeasons 将温度拆成“空气温度”和“玩家体感温度”。空气温度由环境决定,玩家体温会按步长逐渐追近目标,并叠加潮湿、装备、手持物和临时食物效果。
计算流程
自 1.0.72 起,体感变化与室内保温按经过时间平滑,不再因频繁打开菜单而加速。附近冷热源分别取最强值后相加,熄灭的营火不生效;Folia 只扫描当前线程拥有且已加载的区块,检测半径限制为 1–6 格。
每日季节底温
+ 二十四节气修正
+ 原版群系温度换算
+ 群系关键词覆盖
+ 昼夜、天气、室内、遮阴、地下、海拔等环境修正
= 空气温度
空气温度
+ 潮湿/入水
+ 盔甲
+ 主副手物品
+ 附近冷热源
+ 消耗品临时效果
= 目标体感温度
当前体感温度 --每轮最多变化 body-temperature-step--> 目标体感温度
季节底温
默认使用每日随机模式:
| 季节 | 每日随机范围 |
|---|---|
| 春 | 8~22℃ |
| 夏 | 24~34℃ |
| 秋 | 10~24℃ |
| 冬 | -4~8℃ |
同一世界、同一个 Minecraft 世界天的随机底温保持稳定,不会每次检查重新跳变。它使用 world.getFullTime() / 24000 作为随机种子的一部分;当 world-days-per-calendar-day 大于 1 时,同一服内日历日内仍可能按世界天变化数次。
base-temperature:
mode: daily-random
将模式改为非 daily-random 值时,使用 season-base-temperature 的固定值:春 16、夏 26、秋 18、冬 2℃。
二十四节气修正
solar-term-modifier:
enable: true
默认从立春 -2 逐步升至大暑 +18,再下降至大寒 -13。每个节气键都可单独修改。
群系温度
原版温度换算:
(原版群系温度 - 0.8) × biome-vanilla-scale
默认 biome-vanilla-scale: 5.0。之后再叠加 biome-overrides 中所有匹配群系 ID 关键词的值,例如 snowy: -5、frozen: -6、desert: +3。
tropical-biomes 用于夏季白天额外升温及夏季僵尸转尸壳判定,默认包含 desert、badlands、jungle、savanna。
昼夜与天气
- 昼夜曲线以正午附近为最高点平滑变化,默认白天最多
+2℃、夜间最低-3℃。 condition.night是旧版兼容字段;当前主要使用night-min与day-max。- 露天降雨默认
-2.5℃,雷暴默认-4℃。 - 被方块遮挡时不会应用露天雨/雷修正。
遮阴、室内、地下与海拔
| 因素 | 默认值/行为 |
|---|---|
| 遮阴 | -1℃ |
| 室内检测 | 检查头顶 12 格内是否存在遮挡 |
| 春季室内 | +0.5℃ |
| 夏季室内 | -3℃ |
| 秋季室内 | +0.5℃ |
| 冬季室内 | +5℃ |
| 室内变化速度 | 每次检查最多改变 0.5℃,避免进出门瞬间跳变 |
| 地下 | +1.5℃ |
| 高海拔 | 从 Y=120 开始按高度阶梯降温,默认修正 -3℃ |
| 热带夏季白天 | 额外 +4℃ |
水与潮湿
进入水中会把湿度提高到完全潮湿。默认水体修正:
- 非冬季:
-4℃ × 当前湿度; - 冬季:
-10℃ × 当前湿度。
离水后每 40 tick 恢复一次,每次湿度减少 0.2。湿度从 1.0 到 0.0 逐步消退,不会离水瞬间消失。
盔甲保暖
每件盔甲按材质增加体感温度:
| 材质 | 每件默认值 |
|---|---|
| 皮革 | +4.0℃ |
| 锁链 | +1.5℃ |
| 铁 | +1.0℃ |
| 金 | +1.0℃ |
| 钻石 | +1.0℃ |
| 下界合金 | +0.75℃ |
空气温度高于 armor.leather-disabled-above(默认 25℃)时,皮革不再提供保暖,避免夏季形成额外过热陷阱。未匹配材质时使用旧版 condition.armor-per-piece 兜底值。
手持物与附近冷热源
默认手持修正:
- 火把
+1℃ - 灵魂火把
-2℃ - 岩浆桶
+5℃ - 雪球
-1℃ - 冰
-2℃ - 蓝冰
-4℃
同一种物品同时拿在两只手时只计算一次;不同物品可以分别计算。
附近默认 3 格识别火、灵魂火、已点燃的营火/灵魂营火、岩浆、冰、浮冰、蓝冰。1.0.72 分别取最强热源与最强冷源后相加,混放时结果不再随扫描顺序改变。
食物与饮品
items.consumables 的节点名可自定义,主要字段:
hot-soup:
material: MUSHROOM_STEW
modifier: 10.0
duration-seconds: 180
cooldown-seconds: 45
message: "<gold>热汤暖胃,体温 <modifier>,持续 <duration> 秒。</gold>"
material:Bukkit Material;modifier:临时体感修正,正数升温、负数降温;duration-seconds:持续时间;cooldown-seconds:同一物品再次生效的冷却;message:MiniMessage,支持<modifier>、<duration>。
默认包含蘑菇煲、兔肉煲、甜菜汤、蜂蜜瓶、奶桶和甜浆果。
HUD 与普通提示
action-bar:
# false 可全服关闭温度操作栏
enable: true
show-season: true
show-temperature: true
notice:
enable: true
cooldown-seconds: 30
min-temperature-delta: 2.0
操作栏文本在 messages.yml -> hud 中配置。服主可将 action-bar.enable 设为 false 后执行 /seasons reload 全服关闭温度操作栏。
季节增益 BossBar 使用 config.yml -> season-buff-boss-bar 控制开关、节气进度、分段和四季颜色,标题位于 messages.yml -> season-buff-boss-bar.title.*。玩家可用 /seasons hud off 同时关闭操作栏与 BossBar,用 /seasons hud on 恢复,个人选择会跟随玩家数据持久保存。普通体感变化提示同时受冷却与最小温差控制,避免环境小幅波动刷屏。
温度状态
| 体感温度 | 描述 |
|---|---|
| ≤ -30℃ | 极寒 |
| ≤ -20℃ | 严寒 |
| ≤ -10℃ | 寒冷 |
| ≤ 0℃ | 阴冷 |
| ≤ 10℃ | 偏凉 |
| ≤ 22℃ | 舒适 |
| ≤ 35℃ | 偏热 |
| ≤ 45℃ | 炎热 |
| > 45℃ | 酷热 |
温度事件
旧 temperature.yml 事件保留视觉和短时效果;SCREEN_FREEZE 实际限制在原版冻伤阈值以下,避免与下面的持续冻伤重复扣血。关闭 temperatureEventsEnabled 会同时关闭持续温度伤害,但不会关闭自然灾害的温差和雷暴脉冲。
全局设置:
event-interval-ticks: 40
temperatureEventsEnabled: true
temperature-event-mode: "highest-only"
temperature-event-cooldown-seconds: 5
highest-only 每轮只执行最高优先级的命中事件;其他值按 all 处理全部命中事件。每个事件还有自己的 cooldown-seconds。
默认阈值:
| 事件 | 模式 | 阈值 | 主要效果 |
|---|---|---|---|
freeze |
below | -26 | 冻结屏幕 160 tick、声音 |
ice_forming |
below | -20 | 冻结、雪花、声音 |
shivering |
below | -12 | 缓慢、轻微冻结 |
breath_visibility |
below | -2 | 眼前雪花模拟白气 |
sweating |
above | 38 | 水花粒子 |
heat_warning |
above | 46 | 虚弱、粒子、声音 |
heatstroke |
above | 56 | 反胃、受伤动画、火焰、声音 |
支持的效果语法:
SCREEN_FREEZE:<ticks>
PLAY_SOUND:<SOUND>:<volume>:<pitch>
PARTICLE:<PARTICLE>:<amount>:<offset> [@EyeHeight]
POTION:<EFFECT>:<amplifier>:<ticks>
BURN:<seconds>
ENTITY_EFFECT:<EFFECT>
温度事件的 POTION 最后一项单位是 tick;季节事件的 POTION 最后一项单位是秒,两套效果执行器不要混淆。
1.0.72 持续温度伤害
新增 climate-survival.yml,逐项带中文说明。这里的摄氏度都是游戏体感温度,不是人体核心体温;阈值和时间是玩法平衡参数,不可作为现实医学标准。
| 阶段 | 体感条件(含边界) | 累计暴露 | 每次基础伤害 / 间隔 |
|---|---|---|---|
| 热衰竭 | ≥ 40℃ | 60 秒 | 1 点 / 6 秒 |
| 中暑 | ≥ 50℃ | 30 秒 | 3 点 / 5 秒 |
| 极热灼伤 | ≥ 70℃ | 15 秒 | 4 点 / 4 秒,点燃 3 秒 |
| 失温 | ≤ 0℃ | 90 秒 | 1 点 / 6 秒 |
| 冻伤 | ≤ -15℃ | 45 秒 | 2 点 / 5 秒 |
| 极寒冻伤 | ≤ -30℃ | 20 秒 | 3 点 / 4 秒 |
2 点伤害为一颗心;护甲、药水与保护插件可能改变最终伤害。默认允许致死。首次进入危险范围只预警,累计到时才受伤;同轮只执行已经成熟的最高优先级阶段,不叠加多档。单次检测最多累计 5 秒,不因长时间卡顿一次补发多次伤害。
离开某档危险体感范围立即停止该档伤害,累计暴露每秒减少 2 秒;全部归零时提示恢复。回到安全环境后体感仍需逐步回落。死亡、重生、离线、切换世界、重载会清理状态,防止复活立即再次受伤。
enabled: false:关闭新增温度生存,不关闭旧视觉效果。allow-lethal-damage: false:本模块基础伤害最多扣到剩 1 点生命,且不点燃;不拦截其他来源伤害。disasters-enabled: false:关闭持续灾害接管,事件恢复执行season-events.yml原有效果。若要完全关闭某事件,请关闭season-events.yml中该事件。- 创造、旁观、无敌、无季节世界,以及拥有
liseasons.climate.bypass权限者免疫本模块。权限默认 false,OP 也需显式授予。 - 普通炎热不点燃;只有极热档使用游戏化灼伤效果。冷水、遮阴、衣物、室内、冷热源仍通过体感计算影响风险。
四种持续灾害的温差会先加入空气温度,再影响体感;详见季节事件与流星雨。设计参考了持续热暴露、避暑和冷水加剧热量流失的方向:NWS 热相关疾病、NWS 冷水安全。本插件并非生理模拟。
线程与快照
体温采样在玩家所属调度线程执行,并把结果保存为快照。PlaceholderAPI、TAB 等异步线程只读快照,不会调用 getHighestBlockYAt 或加载区块。
玩家刚加入、首份快照尚未生成时,温度类占位符会短暂返回空字符串。这是为了避免异步读取世界,并非计算崩溃。