ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

MCreator 流体雾效(Has Fog)详解:配置、数据模型与代码生成原理

MCreator 流体雾效(Has Fog)详解:配置、数据模型与代码生成原理
  • 低代码
  • 代码生成
  • 桌面应用
  • 游戏开发

【免费下载链接】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.

项目地址:https://gitcode.com/gh_mirrors/mc/MCreator
点击查看免费下载

导读

本文围绕 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_fogHas fog?是否存在雾?
elementgui.fluid.fog_colorFog color override:雾的颜色:
elementgui.fluid.fog_start_distanceFog start distance:雾开始渲染距离:
elementgui.fluid.fog_end_distanceFog 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)。

实际操作顺序为:

  1. 打开流体元素的编辑器,找到“视觉设置”区域;
  2. 勾选“是否存在雾?(Has fog?)”复选框;
  3. 勾选后,下方的“雾的颜色”“雾开始渲染距离”“雾结束渲染距离”三个控件会被自动启用(由refreshFogSettings()中的fogColor.setEnabled(hasFogSelected)等调用控制,见 FluidGUI.java#L461-L465);
  4. 按需设置颜色与雾距,保存即可。

这三个配套选项各自的官方说明如下(均来自帮助文档目录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),即结束距离不会超过当前的渲染距离,防止雾距超出可视范围造成穿帮。

4.2 NeoForge 26.3 版本

在较新的 fluidtype_client.java.ftl 中,实现改用新版渲染 API:modifyFogColor直接修改传入的Vector4f fluidFogColor(保留 alpha 分量),而modifyFogRender则改写FogData的environmentalStart与environmentalEnd字段,达到同样的雾距控制效果,并同样保留了“过程化雾距”与“结束距离钳制到渲染距离”的行为。

从两个版本的模板可以看出,MCreator 的雾效实现具备两项稳定的代码级保证:

  1. 动态化:雾距字段支持 CLIENT 侧过程(NumberProcedureSelector 的 Side 指定为AbstractProcedureSelector.Side.CLIENT,见 FluidGUI.java#L134-L139),可以制作随玩家生命值、时间或距离变化的“呼吸感”雾效;
  2. 安全性:雾结束距离在超出渲染距离时会被自动钳制,避免异常渲染。

五、实战建议:用雾效塑造流体个性

基于上述机制,可以总结出几条可落地的配置思路:

  • 清澈类流体(如自定义清水、药水):保持勾选雾效但使用小雾距或贴近默认的雾色,让视野通透;
  • 危险类流体(酸液、毒液、岩浆变种):指定深色或高对比的雾颜色(例如暗绿、暗红),并将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.

项目地址:https://gitcode.com/gh_mirrors/mc/MCreator
点击查看免费下载

相关推荐

上一篇:my-tv 电视直播软件:免注册5步遥控器直接看
下一篇:GTA5线上小助手:5个强大功能彻底改变你的洛圣都冒险体验

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进