
水族馆
水、冰和雪,色彩缤纷。
查看大图
有颜色的水,依然是水。
加载器: Fabric • Minecraft: 26.2 • 侧: 客户端与服务端
流体很昂贵。颜色是免费的。
一个流体是一个注册表条目、一个方块、一个桶、一个标签成员关系,以及与游戏中每个生物、船、海绵、钓鱼竿和含水楼梯的兼容面。而一个颜色只是三个整数,渲染器会把它们乘到它本来就要绘制的四边形上。
所以 hydrarium 注册零个流体、零个方块。 染色的水就是 minecraft:water;
染色的冰是 minecraft:ice;染色的雪是 minecraft:snow。同样的标签、同样的桶、同样的游泳、同样的海绵、同样的含水楼梯。颜色是渲染器读取的一条旁路通道,游戏中其他任何东西都不需要知道它。
它自带 十九种水:十六种染料颜色,加上 ash_slurry、irradiated 和
lumewater,它们不仅携带颜色,还携带行为。消费者模组只需提供一个 JSON 文件就能添加自己的水——无需 Java。
它们彻头彻尾就是水 —— 染色的水就是
minecraft:water。它会流动,会淹死你,海绵会吸干它,船会浮在它上面,楼梯会在它里面含水,钓鱼竿能在它里面钓鱼——因为那些没有一样是这个模组写的代码。它们会流动,并在途中混合 —— 红色倒入蓝色会变成紫色,由原版自己的染料配方决定。没有配方的两种水会混浊成灰色,而不是去猜一个。
它们会冻结也会融化 —— 冰、浮冰、蓝冰、雪、雪层和细雪都会保留它们来源水的颜色,融化时会还回来。不用精准采集打破冰,它会变回它原本的水。
它们能装进东西里 —— 桶、瓶子、炼药锅和细雪桶都携带颜色,桶的工具提示会显示它是什么水。把染料丢进炼药锅会给它上色;那个炼药锅随后可以灌满有颜色的瓶子和桶。
未染色的世界不存储任何字节 —— 颜色存放在一个按位置稀疏的字段中,持久化在区块里,只同步给正在观察它的人。整个由同一种水构成的生物群系只花费一行目录,每个位置的花费为零。
什么都不需要知道 —— 一个用消费者模组的水保存、但在没有那个模组的情况下加载的世界,会在那些位置显示普通的水——当模组回归时会重新取回颜色。
所有 /water 子命令都需要权限等级 2。
/water give <targets> <water> [<count>] |
桶,已标记某种水 |
/water fill <from> <to> <water> |
给已经存在的水重新上色;它不放置任何东西。包括冰和雪——这是给从未被染色的水冻结成的湖泊上色的唯一方法 |
/water clear <from> <to> |
再次去掉油漆 |
/water at <pos> |
这里是什么水、是哪一层说的,以及它在哪个方块里 |
给源头刷漆,而不是水流。 源方块持有你给它的颜色;一个流动格会从供给它的东西推导颜色,并在下次刻更新时重新推导。
消费者模组不写任何 Java。在你自己的 jar 里提供一个文件:
assets/<your mod id>/hydrarium/catalogue.json
路径以你的模组 id 为键,这正是把你的水 id 放进你的命名空间的方式。 hydrarium 自己的十九种也是通过这同一个扫描器、从 hydrarium 自己 jar 里的这同一个路径读取的——内置的没有私有路径。
{
"waters": [
{ "id": "lumewater", "tint": 4251856, "effect": "glow", "biome_strength": 0.1 },
{ "id": "brine", "tint": 7385292, "dye": "light_blue" }
],
"biomes": [
{ "biome": "yourmod:glow_sea", "water": "yourmod:lumewater" }
]
}
waters 声明颜色:
| 字段 | ||
|---|---|---|
id |
必需 | 仅路径;命名空间是你的模组 id |
tint |
必需 | 一个普通的 0xRRGGBB,以十进制整数书写 |
effect |
可选 | none、glow、ash、decay 之一。未知名称会让该水失去其行为,保留其颜色,并记录日志——它绝不会使目录加载失败 |
biome_strength |
可选,默认 0.25 |
生物群系自身水色渗入的程度。0 表示各处都精确为这个颜色;1 是原版的直接相乘 |
dye |
可选 | 这种水就是这种染料。命名十六种之一会把这种水加入染料混合,而不必以染料命名。没有 dye 的水与除自身以外的任何东西混合都会变混浊成灰色 |
biomes 说明哪个生物群系由哪种水构成,并且不存储任何东西——整个星球的绿色海洋在这里只是一行,在任何区块中都不占一个字节。一个生物群系行可以命名其他模组目录声明的某种水;整个扫描在任何东西被连接之前就已解析完毕。
效果在 Java 中是刻意封闭的集合。 一个颜色是一个数字,所以一种新颜色就是一行; 一个效果是代码。目录可以从集合中选择并参数化它,这正是让“消费者不写任何 Java”成为事实而非几乎成为事实的原因。
解析顺序
一个位置的颜色由三层决定,/water at 会报告是哪一层给出的答案:
- 字段 —— 一个按位置的条目,稀疏,持久化在区块中并同步给正在观察它的人。这是唯一花费字节的层。
- 生物群系 —— 一行目录。每个位置花费为零。
- 原版 —— 普通的水,以普通的方式。
<sub>十九种内置的水。它们每一个都是 `minecraft:water`。</sub>
<sub>一条红色的溪流和一条蓝色的溪流相遇,下游的一切都变成紫色。</sub>
<sub>冰、浮冰、蓝冰、雪、雪层和细雪,每一个都保留它冻结自的水的颜色。</sub>
<sub>一个炼药锅持有一种颜色,并用它灌满瓶子和桶。</sub>
<sub>在水面之下雾也会随之改变——一个紫色的水池从内部看并不显蓝。</sub>
<sub>桶、瓶子、冰、雪块和雪球都携带它们水的颜色。</sub>
必需
| 模组 | 版本 | 备注 |
|---|---|---|
| Fabric Loader | >=0.19.3 | |
| Fabric API | — | 数据附件、流体渲染、方块颜色、区块生命周期 |
| Java | 25 |
| 模组 | 冲突 | 解决方法 |
|---|---|---|
| 重新贴图水桶的资源包 | hydrarium 覆盖了 assets/minecraft/items/ 下的八个文件——桶和冰冻物品——以给它们的颜色一个落脚点。这是这个模组唯一在它自己命名空间之外写入的地方。 |
|
| 将 hydrarium 加载在资源包之上,或去掉资源包的桶物品模型。 | ||
| 替换水的流体模型的模组 | 颜色通过 FluidRenderingRegistry 到达。一个在 hydrarium 之后为 minecraft:water 注册自己模型的模组会胜出,染色的水会绘制成普通的样子。 |
|
| 目前没有。报告它,就可以查看。 |
- 在 Java 25 上安装 Fabric Loader 0.19.3 或更新版本。
- 将
hydrarium.jar和 Fabric API 放入mods/。 - 启动。没有任何需要配置的东西。
对于服务器,请在两侧都安装它:字段在服务端存储和混合,在客户端绘制,没有它的客户端只会看到普通的水。
export JAVA_HOME=".../jdk-25"./gradlew build # jar,在 build/libs/ 中
./gradlew test # 40 项断言,无游戏引导
./gradlew runClient # 游玩测试
./gradlew runServer -Psmoke # 29 项世界内检查,然后它会停止
Minecraft、加载器和 Fabric API 的版本来自 com.mattmc.mcmod 约定插件,
而不是来自本仓库。CLAUDE.md 有构建面的其余内容,以及什么会静默失败。
这会添加新的流体吗?
不会——而这正是整个设计。添加一个流体意味着添加一个方块、一个桶、标签成员关系,以及与游戏中每个生物、船和海绵的兼容面。染色的水是 minecraft:water 披上一种颜色,所以所有这些都免费继续工作。
我的水颜色不对。为什么?
运行 /water at <pos>。它会说出是哪一层给出的答案——按位置的字段、生物群系行,还是原版——以及它在哪个方块里,这很重要,因为从上方看红冰和红水几乎一样。
我给一条溪流刷了漆,它却恢复了正常。
给源头刷漆,而不是水流。源方块持有颜色;流动格从供给它的东西推导颜色,并在下次刻更新时重新推导。给源头刷漆,让波浪携带它。
如果我移除这个模组,世界会怎样?
什么都不会坏。那些位置就是普通的水、冰和雪,它们渲染为普通的水、冰和雪。把模组放回来,颜色仍然在那里。
两个红色和两个蓝色雪球做出了一个灰色雪块。是 bug 吗?
是一个决定,而且是一个被钉住的决定。合成网格没有等级,因此没有配方书可以询问染料混合,所以在网格中两个红色和两个蓝色会混浊成灰色,而在两个红色和两个蓝色源会变成紫色。
构建于 Fabric 和 Fabric API 之上。
十六种染料颜色是原版自己的 DyeColor 值,混合表是原版自己的染料配方——所以红色的水和红色的床是同一种红。
源码开放,不可再分发。 可以游玩、为自己使用而修改、发送补丁。重新上传它或将其捆绑进整合包需要书面许可。确切条款见
LICENSE。
欢迎提交问题和补丁。
正在加载版本记录…





正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。