- 低代码
- 代码生成
- 桌面应用
- 游戏开发
【免费下载链接】MCreator
MCreator is an open-source software used to make Minecraft Java Edition mods, Minecraft Bedrock Edition Add-Ons, resource packs, and data packs using an intuitive easy-to-learn interface or with an integrated code editor. It is used worldwide by Minecraft players, aspiring mod developers, for education, online classes, and STEM workshops.
导读
本文围绕 MCreator 中自定义流体(Fluid)元素的“雾效(Fog)”能力展开,核心线索是 de_DE 帮助文档 has_fog.md 中对该选项的描述:启用后,玩家浸入该流体时,流体区域将显示雾效。文章将带你掌握该选项在图形界面中的位置、配套的雾颜色与雾距参数、数据模型的持久化方式,以及代码生成模板如何把它翻译成 NeoForge 客户端的渲染代码,从而打造出类似水、岩浆乃至自定义毒液、酸液等独特视觉体验。
一、选项含义:什么是“流体雾效”
原文档(has_fog.md)给出的定义非常精炼:
Wenn diese Option aktiviert ist, wird der Flüssigkeit einen Nebel anzeigen, während der Spieler untergeht.
翻译过来即:当该选项启用时,玩家浸入(下潜)流体时,流体将为玩家显示雾效。这与英文原文(default 版本文档)“If this option is enabled, the fluid will display a fog while the player is submerged.” 完全一致,是 MCreator 本地化帮助体系中的一个标准条目。
在 MCreator 中,每种自定义流体都可以决定玩家置身其中时看到的视觉效果。雾效是其中最关键的一项:它决定了“进入流体的瞬间能看多远”,直接关系到流体给人的第一印象——清澈的水几乎无雾,岩浆浓烟滚滚,而自定义的酸液或毒液则可以用浓雾营造危险感。
在图形界面中,这一选项的标签来自本地化键elementgui.fluid.has_fog(英文为 “Has fog?”),中文译为“是否存在雾?”,见 texts_zh_CN.properties。同组配置项还包括:
| 本地化键 | 英文标签 | 中文标签 |
|---|---|---|
elementgui.fluid.has_fog | Has fog? | 是否存在雾? |
elementgui.fluid.fog_color | Fog color override: | 雾的颜色: |
elementgui.fluid.fog_start_distance | Fog start distance: | 雾开始渲染距离: |
elementgui.fluid.fog_end_distance | Fog end distance: | 雾结束渲染距离: |
对应条目见 texts.properties。
二、界面位置与操作流程
在 Fluid 元素编辑器中,雾效相关控件集中在“视觉设置(Visual settings)”面板中。从 FluidGUI.java 可以看到完整的控件组织逻辑:
hasFog是一个复选框(JCheckBox),标签来自elementgui.common.enable与elementgui.fluid.has_fog,并通过HelpUtils.wrapWithHelpButton(this.withEntry("fluid/has_fog"), ...)挂接帮助按钮,点击后弹出本文所述的帮助文档(FluidGUI.java#L202-L210);fogColor是颜色选择器 JColor,挂接fluid/fog_color帮助条目(FluidGUI.java#L212-L214);fogStartDistance与fogEndDistance是两个 NumberProcedureSelector(数值/过程选择器),分别挂接fluid/fog_start_distance与fluid/fog_end_distance帮助条目(FluidGUI.java#L134-L139)。
实际操作顺序为:
- 打开流体元素的编辑器,找到“视觉设置”区域;
- 勾选“是否存在雾?(Has fog?)”复选框;
- 勾选后,下方的“雾的颜色”“雾开始渲染距离”“雾结束渲染距离”三个控件会被自动启用(由
refreshFogSettings()中的fogColor.setEnabled(hasFogSelected)等调用控制,见 FluidGUI.java#L461-L465); - 按需设置颜色与雾距,保存即可。
这三个配套选项各自的官方说明如下(均来自帮助文档目录plugins/mcreator-localization/help/de_DE/fluid/):
- fog_color(fog_color.md):此参数决定流体雾的颜色;留空(不指定)则使用默认的流体颜色处理逻辑。
- fog_start_distance(fog_start_distance.md):决定雾从距摄像机多远的位置开始出现。
- fog_end_distance(fog_end_distance.md):决定雾在距摄像机多远的位置完全遮蔽视线;雾离摄像机越近,看起来越浓密。
三、数据模型:雾效字段在源码中的定义
在数据模型层,雾效由 Fluid.java 中的四个字段承载:
public boolean hasFog; public Color fogColor; @NonNullIf("hasFog") public NumberProcedure fogStartDistance; @NonNullIf("hasFog") public NumberProcedure fogEndDistance;要点解读:
hasFog是总开关,序列化到工作区时以布尔值保存;fogColor是java.awt.Color类型,对应界面上的颜色选择器;fogStartDistance与fogEndDistance的类型是NumberProcedure——这意味着它们既可以是固定数值,也可以是一个客户端过程(Procedure),从而让雾距在运行时动态变化;- 注解
@NonNullIf("hasFog")表明:当hasFog为真时,这两个距离字段被视为必需项。这个注解会被 MCreator 的 UI 框架读取,用于在校验阶段强制要求用户为开启雾效的流体填写雾距,避免生成出非法代码。
界面与模型之间的双向同步发生在 FluidGUI 中:加载时hasFog.setSelected(fluid.hasFog)、fogColor.setColor(fluid.fogColor)、fogStartDistance.setSelectedProcedure(...)、fogEndDistance.setSelectedProcedure(...)(FluidGUI.java#L498-L501);保存时反向写回(FluidGUI.java#L560-L563)。
四、代码生成:雾效如何变成 NeoForge 客户端代码
雾效属于纯客户端渲染行为,因此 MCreator 的代码生成器只在客户端流体类型扩展(IClientFluidTypeExtensions)中生成对应代码。不同生成器插件各有实现,但逻辑一脉相承。
4.1 NeoForge 1.21.1 版本
在 fluidtype.java.ftl 中,模板用<#if data.hasFog>包裹两个方法:
modifyFogColor:当用户在界面中指定了fogColor时生成,把Color的 R/G/B(0–255)除以 255 转成 0.0–1.0 的浮点 Vector3f 返回,从而覆盖默认雾色;modifyFogRender:设置雾的形状为球体(RenderSystem.setShaderFogShape(FogShape.SPHERE)),再写入雾的起点与终点:- 若雾距是过程(Procedure),则通过
<@procedureOBJToNumberCode .../>生成过程调用代码,使雾距在运行时可计算; - 若为固定值,直接输出字面量;
- 特别地,当
fogEndDistance的固定值大于 16 时,模板会生成Math.min(值, renderDistance),即结束距离不会超过当前的渲染距离,防止雾距超出可视范围造成穿帮。
- 若雾距是过程(Procedure),则通过
4.2 NeoForge 26.3 版本
在较新的 fluidtype_client.java.ftl 中,实现改用新版渲染 API:modifyFogColor直接修改传入的Vector4f fluidFogColor(保留 alpha 分量),而modifyFogRender则改写FogData的environmentalStart与environmentalEnd字段,达到同样的雾距控制效果,并同样保留了“过程化雾距”与“结束距离钳制到渲染距离”的行为。
从两个版本的模板可以看出,MCreator 的雾效实现具备两项稳定的代码级保证:
- 动态化:雾距字段支持 CLIENT 侧过程(NumberProcedureSelector 的 Side 指定为
AbstractProcedureSelector.Side.CLIENT,见 FluidGUI.java#L134-L139),可以制作随玩家生命值、时间或距离变化的“呼吸感”雾效; - 安全性:雾结束距离在超出渲染距离时会被自动钳制,避免异常渲染。
五、实战建议:用雾效塑造流体个性
基于上述机制,可以总结出几条可落地的配置思路:
- 清澈类流体(如自定义清水、药水):保持勾选雾效但使用小雾距或贴近默认的雾色,让视野通透;
- 危险类流体(酸液、毒液、岩浆变种):指定深色或高对比的雾颜色(例如暗绿、暗红),并将
fog_end_distance设小,让玩家一进入就被浓雾包裹,强化压迫感; - 动态雾效:雾距不填固定值,而是关联一个客户端过程,例如按玩家剩余生命值动态收缩雾距,实现“生命越低视野越窄”的机制玩法;
- 雾颜色留空:若希望流体雾自动跟随流体的渲染颜色体系(如水雾、天空雾等),可以不指定
fog_color,由默认颜色处理逻辑接管(依据 fog_color.md)。
六、结语
从一行德语帮助文本出发,可以看到 MCreator 的“流体雾效”是一条贯穿 UI、数据模型与代码生成器的完整功能链:hasFog开关负责总控,fogColor决定色调,fogStartDistance/fogEndDistance控制浓密程度,三者经 Fluid.java 持久化,最终由 NeoForge 生成模板(1.21.1 模板、26.3 模板)转换为客户端渲染代码。理解这一链路后,你便能在 MCreator 中随心定制流体雾效,为自己的流体元素赋予独特的视觉语言。
- 低代码
- 代码生成
- 桌面应用
- 游戏开发
【免费下载链接】MCreator
MCreator is an open-source software used to make Minecraft Java Edition mods, Minecraft Bedrock Edition Add-Ons, resource packs, and data packs using an intuitive easy-to-learn interface or with an integrated code editor. It is used worldwide by Minecraft players, aspiring mod developers, for education, online classes, and STEM workshops.
相关推荐
ZeroClaw Slack 频道接入实战:Socket Mode 机器人配置、线程上下文与流式回复全指南
ZeroClaw Slack 频道接入实战:Socket Mode 机器人配置、线程上下文与流式回复全指南 将 ZeroClaw 以 Slack 机器人身份接入
低代码代码生成桌面应用游戏开发MCreator 生物群系水雾颜色(Water Fog Color)参数详解:从界面配置到数据包 JSON 生成原理
MCreator 生物群系水雾颜色(Water Fog Color)参数详解:从界面配置到数据包 JSON 生成原理 水雾颜色(Water Fog Color)
低代码代码生成桌面应用游戏开发MCreator 维度雾颜色(Fog Color)配置完全指南:原理、优先级与生成实现
MCreator 维度雾颜色(Fog Color)配置完全指南:原理、优先级与生成实现 本篇指南聚焦 MCreator 自定义维度(Dimension)中"维度
低代码代码生成桌面应用游戏开发
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考