
本地化天气
一个Fabric模组,用局部天气区域取代Minecraft的全球天气。每个256×256方块区域拥有自己的天气,降雨、降雪和雷暴在世界各地独立发生,并具有生物群系感知规则、平滑过渡以及块状
功能简介
原版 Minecraft 整个世界只有一种天气状态。Localized Weather 将其替换为 256×256 方块区域的网格,每个区域按照各自的节奏独立演化天气——然后对交界处进行混合,让你永远看不到生硬的边界。
其结果是带有地理特征的天气。风暴有它所在的位置、它来自的方向,以及它将要前往的方向。
特性
| 特性 | 你实际看到的效果 | |
|---|---|---|
| 🗺️ | 局部区域 | 每个 256×256 方块区域独立运行各自的天气 |
| ⛈️ | 移动的雷暴单体 | 单体风暴随风漂移,逐渐增强,并在自己的生命周期结束时消散 |
| 🌧️ | 雨墙与雨带 | 每个风暴核心下方垂挂着一道倾斜的雨幕,后方拖曳着弧形雨带——即使风暴远在天边,它依然会被绘制出来 |
| 🌾 | 生物群系感知规则 | 无降水的生物群系保持干燥,寒冷的生物群系将雨变为雪,每个区域根据 5×5 的地表采样决定,因此一小片沙漠不会让整个区域变干 |
| 🧊 | 冰雹风暴 | 偶发的冰冷狂风,带有自定义的下落冰雹粒子 |
| 🌬️ | 风驱动的锋面 | 全局风向缓慢旋转;天气从上风向的邻近区域传播而来 |
| 🎚️ | 无缝过渡 | 雨、雾和天空颜色在 20 秒内沿区域边界双线性混合 |
| ☁️ | 风暴云 | 风暴区域上方有方块风格的 Minecraft 云层,远处也能看见 |
| 🌑 | 方向性变暗 | 天空、雾和云会朝逼近的风暴方向变暗,而非均匀变暗 |
| 🔊 | 方向性雷声 | 雷声从风暴的方位传来,音量根据距离变化 |
| 🧩 | 渲染器友好 | 驱动 Minecraft 自身的云渲染器而非替换它,因此 VulkanMod 等模组仍可正常工作 |
工作原理
天气自动发生。无需配置,也无需学习任何命令。
| 阶段 | 持续时间 | 备注 |
|---|---|---|
| 晴朗天空 | 10 分钟 – 2.5 小时 | 之后进行天气判定 |
| 雨 / 冰雹 / 风暴 | 10 – 20 分钟 | 之后区域再次放晴 |
| 区域过渡 | 20 秒 | 沿边界混合,绝不生硬切换 |
| 风向变化 | 每 2.5 – 10 分钟 | 缓慢旋转;锋面随之移动 |
一个转为雷暴的区域会生成一个 风暴单体——一个直径 70–130 方块的移动核心,存活 4–10 分钟,以约每秒 3–6 方块的速度移动,并携带其雨墙和雨带。当核心经过你上方时,雨随雨墙到来,并在核心经过后离去。
距离超过雾视界的风暴不会被剔除。它们的几何体被投影到视界上,外观尺寸保持不变,因此数个区域之外的雷暴仍然可以在天际线上看到为一道雨墙。
环境要求
- Minecraft 1.21.9 – 1.21.11,或 26.1 – 26.2(参见下方版本表)
- 在 1.21.x 上需要 Fabric Loader 0.19.2+,在 26.x 上需要 0.19.5+
- Fabric API
- 1.21.x 上使用 Java 21,26.x 上使用 Java 25
安装
- 安装 Fabric Loader 和 Fabric API——或使用 NeoForge,后者两者都不需要
- 将与你的 Minecraft 版本和加载器匹配的 jar 文件放入
mods文件夹 - 启动游戏——天气会自行处理后续事宜
Jar 文件的命名格式为 localweather-<模组版本>+<Minecraft 版本>[-加载器].jar。
不带后缀的名称是 Fabric 构建;-quilt 和 -neoforge 是其他版本。
例如,在 Minecraft 26.1.2 上:Fabric 使用 localweather-1.4.0+26.1.2.jar,
NeoForge 使用 localweather-1.4.0+26.1.2-neoforge.jar。
可选: Mod Menu,用于游戏内模组信息。
版本与加载器
| Minecraft | 构建目标 | Fabric API | Java |
|---|---|---|---|
| 1.21.9 | -Pmc=1.21.9 |
0.134.1+1.21.9 | 21 |
| 1.21.10 | -Pmc=1.21.10 |
0.138.4+1.21.10 | 21 |
| 1.21.11 | -Pmc=1.21.11 |
0.141.6+1.21.11 | 21 |
| 26.1, 26.1.1, 26.1.2 | -Pmc=26.1.2(默认) |
0.155.3+26.1.2 | 25 |
| 26.2 | -Pmc=26.2 |
0.159.0+26.2 | 25 |
一个仓库构建所有目标;每个目标都是 versions/ 中的一个文件。
1.21.x 和 26.x 系列保持各自的源码目录,因为 Minecraft 在两者之间的命名方式不同——参见 docs/loader-support.md。
| 加载器 | 状态 |
|---|---|
| Fabric | ✅ 主要支持的加载器 |
| Quilt | ✅ 仅 1.21.x——Quilt 未发布 26.x 的中间命名空间,因此那里不构建 Quilt jar |
| NeoForge | ✅ 26.1.x 上的 neoforge/——模拟、完整的客户端呈现和服务端 mixin,全部来自与 Fabric 相同的共享代码 |
| Forge | 🚧 26.1.x 上的 forge/,与 NeoForge 处于同一层级——来自相同共享代码的服务端模拟,无客户端同步,非发布产物 |
完整详情参见 docs/loader-support.md。
致模组开发者
LocalWeatherAPI 允许其他模组查询任意位置的局部天气。
import net.fentbusgaming.localweather.api.LocalWeatherAPI;
// 这里的天气是什么?
WeatherZone.WeatherType weather = LocalWeatherAPI.getWeatherAt(world, pos);
if (LocalWeatherAPI.isThunderingAt(world, pos)) {
// 避雷针逻辑、生物生成、作物生长……
}
// 这个位置是否处于移动风暴核心之下?
if (LocalWeatherAPI.isInStormCell(world, pos)) {
// 大雨、能见度降低……
}
// 天气从哪里来?
double windX = LocalWeatherAPI.getWindDirectionX();
double windZ = LocalWeatherAPI.getWindDirectionZ();
其他可用方法:getWeatherInZone、getTargetWeatherInZone、getTransitionProgress、isRainingAt、isHailingAt、getStormCells、getStormCellAt、toZoneCoords 和 getZoneSizeBlocks。
从源码构建
git clone https://github.com/rustybusgaming/LocalizedWeather.git
cd LocalizedWeather
./gradlew build # 默认目标 (26.1.2)
./gradlew build -Pmc=26.2 # versions/ 中的任意目标
./gradlew printTarget # 显示解析后的目标
1.21.x 目标需要 JDK 21,26.x 需要 JDK 25。你不必安装它们:如果你的机器上没有,Gradle 会在首次构建时获取匹配的 JDK。Jar 文件会以 localweather-<模组版本>+<minecraft 版本>.jar 的形式生成到 build/libs/ 中。
在 1.21.9 上,风暴云、冰雹粒子和雨墙不可用——该版本的 Fabric API 未暴露世界渲染钩子。其他一切功能均正常工作。
致谢
创意来自 Discord 上的 Mr. Random。
许可证
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。