
永久白昼或永久黑夜
一个Minecraft模组,通过命令在永久白天/永久夜晚/正常循环模式之间切换,引入了温度、口渴、水净化和实体增强等硬核生存机制。
永昼或永夜
一个 Minecraft 模组,可通过命令在永昼/永夜/正常循环模式之间切换,并引入温度、口渴、水净化、实体增强等硬核生存机制。 跳转到中文介绍: README.md
平台支持
| 加载器 | Minecraft 版本 | 模组版本 | 状态 |
|---|---|---|---|
| Fabric | 1.20.1 | 1.0.0 Fabric |
✅ 功能完整 |
需要 Fabric Loader 0.19.3+ 和 Fabric API 0.92.11+1.20.1。
特性
- 三模式切换:永昼(锁定在正午)、永夜(锁定在午夜)、正常循环 —— 无需任何按键即可在三种模式间自由切换
- 温度系统:体温受生物群系/维度/时间/天气/海拔/附近方块/手持物品/盔甲保温影响;极热会燃烧,极冷会冻僵
- 漂移累积:在永昼/永夜模式下,温度漂移每天按
dailyDriftAmount(默认 1°C)累积且不衰减;永续模式越久越极端;在昼↔夜之间切换会直接反转漂移方向 - 正常模式安全:纯环境温度被限制在 ±
normalSafeRange(默认 ±60°C)以内,防止死亡;方块与手持物品效果不受限制,仍可致命 - 口渴系统:玩家拥有一个水分值(默认初始 100),会随时间流逝;不同水源有不同的效果(淡水湖安全,海洋/盐湖/普通水有 75% 的脱水几率)
- 水净化:脏水瓶/脏水桶必须先在熔炉/高炉/烟熏炉中熔炼后才能饮用
- 直接饮用:空手右键水面即可饮水;淡水湖 100% 安全,其他水源有 75% 脱水几率
- 实体增强:在永昼/永夜模式下,敌对实体获得增强的属性与 AI(速度/攻击/生命值提升;中立生物会主动追踪玩家)
- HUD 显示:体温与水分合并显示在动作栏,不污染聊天框
- 数据持久化:玩家温度/口渴数据 + 全局漂移值跨会话持久保存;服务器重启不丢失数据
模式详情
| 模式 | 时间锁定 | 温度漂移 | 实体增强 |
|---|---|---|---|
正常循环(/pdopn cycle) |
跟随原版昼夜循环 | 无漂移(衰减至 0) | 无 |
永昼(/pdopn day) |
正午 6000 tick | 每天 +1°C,越来越热 | 亡灵燃烧,其他增强 |
永夜(/pdopn night) |
午夜 18000 tick | 每天 -1°C,越来越冷 | 所有敌对生物增强 |
漂移转换规则
| 切换场景 | 漂移处理 |
|---|---|
| 永昼 → 永夜 | +N°C → -N°C,继续向寒冷方向累积 |
| 永夜 → 永昼 | -N°C → +N°C,继续向炎热方向累积 |
| 永昼/永夜 → 正常 | 不反转,按 driftDecayRate 衰减至 0 |
| 正常 → 永昼/永夜 | 从 0 开始,正向/负向累积 |
命令
所有命令均需要 OP 权限(默认等级 2)。
| 命令 | 描述 |
|---|---|
/pdopn day |
切换到永昼模式 |
/pdopn night |
切换到永夜模式 |
/pdopn cycle |
恢复正常昼夜循环 |
/pdopn status |
显示当前模式 |
/pdopn temp |
显示你的体温 |
/pdopn temp set <value> |
设置你的体温(-100 到 100) |
/pdopn temp maxdays <days> |
设置最大生存天数(仅供参考) |
/pdopn temp hud |
切换温度 HUD 显示 |
/pdopn thirst |
显示你的水分值 |
/pdopn thirst set <value> |
设置你的水分值(0 到 100) |
/pdopn drift |
显示当前累积温度漂移(可在控制台使用) |
/pdopn drift reset |
清除累积漂移与天数计数器,无需重启服务器(可在控制台使用) |
/pdopn reload |
重新加载 pdopn.json(可在控制台使用) |
temp maxdays目前仅在达到该永续天数后作为一次性警告(HUD/ActionBar)的阈值。它不会结束游戏,也不会改变温度计算。
温度系统
温度因素
| 因素 | 描述 |
|---|---|
| 生物群系 | 沙漠 +45°C,冰刺 -25°C,下界荒地 +42°C,末地 -20°C 等 |
| 维度 | 下界基础 +40°C,末地基础 -20°C(覆盖生物群系温度) |
| 时间 | 白天 +5°C,夜晚 -5°C,黄昏 +2°C,黎明 -2°C |
| 天气 | 降雨 -3°C,雷暴 -5°C(户外全效果,室内 30%) |
| 海拔 | Y > 120:每格 -0.05°C,Y < 0:每格 -0.03°C |
| 附近方块 | 岩浆 +15(半径 5),火 +10(半径 3),冰 -5(半径 3)等 |
| 手持物品 | 岩浆桶 +0.03/tick,冰 -0.005/tick 等(每 20 tick 应用一次) |
| 盔甲保温 | 皮革套装 0.150.20,下界合金套装 0.130.18,降低环境温度影响速率 |
降温方式
炎热环境现在有两条可用的降温途径 (此前水对体温没有效果,导致永昼 + 沙漠无法生存):
| 方式 | 效果 |
|---|---|
| 站在水中 | 体温向水温靠拢。冻洋 -25°C,冻河 -20°C,寒冷海洋 +2°C,普通河流/湖泊 +12°C,温暖海洋 +22°C,丛林 +20°C |
| 饮用纯净水 | 每瓶 -6°C(每桶 -20°C),在 10 秒内生效;直接饮用淡水 -3°C,不安全水 -2°C |
水温由生物群系决定;只有当水温低于你的体温时才会降温, 因此站在温水中永远不会让你升温。 盔甲保温也会减缓冷却(厚甲保温)。 当体温低于 0°C 时,冷饮停止降温,因此你不会把自己冻僵。
温度效果
| 体温范围 | 效果 |
|---|---|
≥ 100°C |
烧死(火焰伤害,每次命中扣除 25% 最大生命值) |
≥ 70°C |
着火 + 反胃 III |
≥ 45°C |
缓慢 II + 虚弱 II |
≥ 25°C |
缓慢 I |
≤ -100°C |
冻死(冰冻伤害,每次命中扣除 25% 最大生命值) |
≤ -70°C |
凋零 II + 失明 |
≤ -45°C |
缓慢 II + 挖掘疲劳 II |
≤ -25°C |
缓慢 I |
致命温度伤害类型
温度极值处的致命伤害使用自定义伤害类型, 因此死亡消息是模组专属的,而非原版通用文本:
| 情况 | 伤害类型 | 死亡消息 |
|---|---|---|
≥ 100°C |
pdopn:heat |
%s's body temperature ran away and was consumed by extreme heat |
≤ -100°C |
pdopn:cold |
%s's body temperature ran away and froze to death |
定义于
data/pdopn/damage_type/heat.json和cold.json。 翻译键为"death.attack." + message_id,即death.attack.pdopn.heat/death.attack.pdopn.cold(以及存在击杀者时使用的.player变体)。
口渴系统
口渴阶段
| 水分范围 | 效果 |
|---|---|
≥ 60 |
舒适(无效果) |
40 ~ 60 |
轻度口渴(缓慢 I) |
25 ~ 40 |
中度脱水(缓慢 II + 虚弱 I) |
10 ~ 25 |
重度脱水(缓慢 III + 虚弱 II + 反胃 I) |
< 10 |
极度脱水(缓慢 IV + 虚弱 III + 反胃 II + 逐渐失去生命值) |
水源饮用效果
| 水源 | 饮用结果 |
|---|---|
| 淡水湖(河流/沼泽/红树林沼泽/沙滩生物群系,非盐湖) | 100% 恢复 15 水分 |
| 海洋 | 75% 几率脱水 15,25% 几率恢复 2.5 |
| 盐湖(哈希匹配的候选生物群系) | 75% 几率脱水 10,25% 几率恢复 2.5 |
| 普通水(其他生物群系的水) | 75% 几率脱水 5,25% 几率恢复 2.5 |
水净化配方
| 输入 | 设备 | 输出 | 时间 |
|---|---|---|---|
| 水瓶(脏) | 熔炉/高炉/烟熏炉 | 纯净水瓶 | 200 / 100 / 100 tick |
| 水桶(脏) | 熔炉/高炉/烟熏炉 | 纯净水桶 | 200 / 100 / 100 tick |
这些配方使用原版配方类型(
minecraft:smelting/blasting/smoking), 输入为原版水瓶或水桶。
⚠️ 已知限制:原版
IngredientJSON 仅支持item/tag,而其匹配 逻辑(isItemEqual→isOf(Item))不会比较 NBT,因此无法专门匹配“一个水瓶”。 结果是,任何药水(治疗/力量/抗火等)在熔炉中熔炼 都会变成纯净水瓶。不要把贵重药水放进熔炉。
历史记录:曾尝试用自定义
RecipeSerializer+ 自定义RecipeType来过滤输入,但方块 按类型索引配方并通过RecipeManager#getAllOfType查找它们 (recipes.getOrDefault(type, ...)),因此自定义类型会使配方落入一个永远不会被查询的桶中—— 表现为“配方存在但熔炉忽略它”。为保持配方正常工作, 它们被回退为原版配方类型。
饮用冷却
直接饮用(空手右键水面)有 40 tick(2 秒)冷却,以防止快速连点。
实体增强
永昼模式
| 实体类型 | 生命值 | 速度 | 攻击 |
|---|---|---|---|
| 普通敌对生物 | ×10 | ×1.5 | ×1.5 |
| Boss(末影龙/凋灵) | ×2.5 | ×1.5 | ×0.7 |
| 亡灵 | 不处理(阳光下燃烧) | — | — |
生命值以相对于基础值的倍数进行缩放(原版 20 血僵尸 → 200)。 旧版本使用固定的 200,实际上削弱了高血量生物如监守者;现在改为真正的倍数。 属性修饰符使用
MULTIPLY_TOTAL,因此 ×1.5 / ×0.7 等比例对任何实体都精确成立。
永夜模式
| 实体类型 | 生命值 | 速度 | 攻击 |
|---|---|---|---|
| 普通敌对生物 | ×50 | ×0.7 | ×5.0 |
| Boss(末影龙/凋灵) | ×10 | ×0.7 | ×3.0 |
生命值被限制在 1024,因此某些实体在高倍数下无法达到标称值。 中立敌对生物(末影人、蜘蛛、僵尸猪灵等)在永昼/永夜模式下会主动追踪玩家(通过注入的
ActiveTargetGoal)。
游戏规则
模组注册了一组按世界生效的游戏规则,可在运行时用原版
/gamerule 修改(需要 OP)。它们也会出现在“创建世界 → 游戏规则”界面中。
| 游戏规则 | 默认值 | 描述 |
|---|---|---|
pdopnTemperature |
true |
温度系统的总开关 |
pdopnThirst |
true |
口渴系统的总开关 |
pdopnDrift |
true |
漂移累积。关闭时,昼夜时间锁定仍然生效 —— 漂移只是停止累积 |
pdopnMaxDrift |
100 |
漂移绝对上限(°C)。0 = 无限制;默认 ±100 与致命阈值一致,约在第 100 天封顶 |
pdopnBlockTemp |
true |
附近危险方块(岩浆/火/冰等)的温度影响 |
pdopnLethalDamage |
true |
致命温度与脱水伤害。关闭时你仍会过热/冻僵/脱水,但不会死亡 |
pdopnMobBoost |
true |
敌对生物属性增强 |
pdopnNeutralAggro |
true |
中立生物(末影人/蜘蛛等)主动追踪玩家 |
pdopnHudDefault |
true |
新玩家的默认 HUD 状态(已关闭的玩家保留其选择) |
pdopnMaxDaysEnforce |
false |
将 maxDays 从“仅警告”升级为强制执行:到期时自动恢复为正常循环 |
为什么使用游戏规则而不是配置选项
pdopn.json 位于 .minecraft/config/,适用于服务器上的每个世界,
而模式和漂移是按世界的状态,温度是按玩家的状态。
游戏规则自带 /gamerule、OP 权限检查、世界存档持久化和
客户端同步——这些都不需要重新实现。
分工:配置提供全局默认值,游戏规则提供按世界的覆盖。
规则严格采用“开关/上限”语义;具体数值保留在配置中,因此两个
来源永远不会相互冲突。
典型用法:
/gamerule pdopnDrift false—— 保留永昼风景而不必承受 不断上升的温度压力。 或/gamerule pdopnMaxDrift 60—— 将漂移上限设为 ±60°C,使其保持在极端但可生存的范围内。
配置
配置文件位于 .minecraft/config/pdopn/pdopn.json;
使用 /pdopn reload 或重启服务器来应用更改。
所有具体的温度/口渴数值都在这里。
温度配置
| 选项 | 默认值 | 描述 |
|---|---|---|
baseEnvRate |
0.005 |
体温接近环境温度的速率 |
dailyDriftAmount |
1.0 |
在永昼/永夜模式下每天累积的漂移值(°C) |
driftDecayRate |
0.02 |
正常模式下每 tick 的漂移衰减 |
normalSafeRange |
60.0 |
正常模式下纯环境温度的安全范围(±°C) |
netherBaseTemp |
40.0 |
下界基础温度 |
endBaseTemp |
-20.0 |
末地基础温度 |
rainModifier |
-3.0 |
降雨温度修正 |
thunderModifier |
-5.0 |
雷暴温度修正 |
口渴配置
| 选项 | 默认值 | 描述 |
|---|---|---|
baseDrainRate |
0.005 |
每 tick 的基础口渴流逝 |
maxValue |
100.0 |
最大水分值 |
initialValue |
100.0 |
初始水分值 |
pureWaterBottleRestore |
15.0 |
纯净水瓶恢复量 |
pureWaterBucketRestore |
25.0 |
纯净水桶恢复量 |
freshwaterDrinkRestore |
15.0 |
淡水直接饮用恢复量 |
seawaterDrinkDrain |
-15.0 |
海水饮用脱水量 |
saltLakeDrinkDrain |
-10.0 |
盐湖饮用脱水量 |
unsafeDrinkChance |
0.75 |
非淡水来源的脱水几率 |
drinkCooldownTicks |
40 |
直接饮用冷却(tick) |
saltLakeChance |
0.25 |
盐湖生成几率 |
pureWaterBottleCooling |
6.0 |
每瓶纯净水降温的体温(°C) |
pureWaterBucketCooling |
20.0 |
每桶纯净水降温的体温(°C) |
freshwaterDrinkCooling |
3.0 |
直接饮用淡水降温(°C) |
unsafeDrinkCooling |
2.0 |
饮用不安全水降温(°C) |
coolantDurationTicks |
200 |
降温效果持续时间(tick;200 = 10 秒) |
实体增强选项
| 选项 | 默认值 | 描述 |
|---|---|---|
entity.whitelist |
[](空) |
允许被增强的实体 ID。空表示“除黑名单外的一切” |
entity.blacklist |
[](空) |
永不增强的实体 ID;优先于白名单 |
目的:避免与同样重写生物属性的模组(精英怪物、史诗战斗等)冲突。 例如
"blacklist": ["modid:elite_zombie"],或"whitelist": ["minecraft:zombie", "minecraft:skeleton"]。
配置版本
| 选项 | 默认值 | 描述 |
|---|---|---|
configVersion |
2 |
配置模式版本,用于自动迁移 |
使用
/pdopn reload应用配置更改而无需重启服务器。 如果文件中的configVersion低于当前版本,模组会填入新字段并将文件写回。
安装
- 安装 Minecraft 1.20.1
- 安装 Fabric Loader 0.19.3 或更高版本
- 下载 Fabric API 0.92.11+1.20.1
- 下载本模组的 jar 文件
- 将 Fabric API 与本模组的 jar 都放入
.minecraft/mods/目录 - 启动游戏
构建与开发
项目结构
Perpetual day or perpetual night/
├── src/main/java/yifei/pdopn/
│ ├── PerpetualDayOrPerpetualNight.java # Main entry
│ ├── client/ # Client entry
│ ├── command/ # Command system
│ ├── config/ # Config management
│ ├── entity/ # Entity attribute modification
│ ├── hud/ # HUD rendering
│ ├── items/ # Pure water bottle / bucket
│ ├── mixin/ # Mixin injections
│ ├── mode/ # Mode enum
│ ├── temperature/ # Temperature system
│ └── thirst/ # Thirst system
├── src/main/resources/
│ ├── assets/pdopn/ # Resources (lang/models/textures)
│ └── data/pdopn/ # Data files (recipes)
├── gradle.properties
└── README.md
构建命令
./gradlew build # Output → build/libs/pdopn-1.0.0 Fabric.jar
构建还会自动生成一个 -sources.jar 源码包。
技术栈
- 加载器:Fabric Loader 0.19.3
- API:Fabric API 0.92.11+1.20.1
- 映射:Yarn 1.20.1+build.10
- 构建工具:Fabric Loom 1.17-SNAPSHOT
- Java:17
许可证
本项目采用 MIT 许可证,见 LICENSE。
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。