的配置与生成原理)
低代码代码生成桌面应用游戏开发【免费下载链接】MCreatorMCreator 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 生物实体Living Entity编辑器中的可在水下呼吸逻辑条件entry 键entity/condition_can_breathe_underwater中文界面显示为可在水下呼吸展开说明它在实体编辑器中的位置、配置方式、与水生实体参数的联动关系并结合仓库源码剖析它最终如何被编译进 Minecraft 实体 Java 代码canDrownInFluidType/canBreatheUnderwater。读完本文你将掌握如何为一个自定义生物开启/关闭无限水下呼吸能力并理解其底层生成逻辑与版本差异。一、这个条件是什么MCreator 本地化帮助文档德语版对condition_can_breathe_underwater的原始描述为Wenn diese Bedingung wahr ist, kann die Entität auf unbestimmte Zeit wie Fisch oder Tintenfisch atmen.即当此条件为真时该实体可以像鱼或鱿鱼一样无限制地在水下呼吸。英文版帮助文件 condition_can_breathe_underwater.md 给出了相同的定义When this condition is true, the entity will be able to breathe underwater indefinitely like fish or squids.这是一个逻辑条件Logic Procedure类型的设置而不是一个简单的布尔开关——它既可以勾选一个固定值也可以绑定一段完整的程序Procedure用任意复杂的判断逻辑例如仅当实体处于特定生物群系、持有某物品、或世界处于白天时才可呼吸来决定结果。与之对应各语言文件中的界面文案如下语言界面文案语言文件位置简体中文可在水下呼吸texts_zh_CN.properties德语Du kannst unter Wasser atmentexts_de_DE.properties英语Can breathe underwatertexts.properties注本篇所依据的关联文档位于德语帮助目录 plugins/mcreator-localization/help/de_DE/entity/condition_can_breathe_underwater.md该目录下的全部帮助页与英文版内容一一对应共同构成 MCreator 内置的界面帮助体系。二、在实体编辑器中的位置与配置方式在 MCreator 中打开任意生物实体Living Entity类型的模组元素编辑器向下滚动到行为设置区域即可看到该条件控件。其 UI 定义位于编辑器实现类 LivingEntityGUI.javabreatheUnderwater new LogicProcedureSelector(this.withEntry(entity/condition_can_breathe_underwater), mcreator, L10N.t(elementgui.living_entity.condition_can_breathe_underwater), AbstractProcedureSelector.Side.BOTH, L10N.checkbox(elementgui.common.enable), 0, Dependency.fromString(x:number/y:number/z:number/world:world/entity:entity));从这段源码可以提取出该条件的四个关键特征类型为LogicProcedureSelector它是一个逻辑程序选择器用户既可以给一个布尔常量勾选框也可以挂接一个返回逻辑值的程序块。生效侧为Side.BOTH该条件同时在服务端Server与客户端Client逻辑中生效。默认固定值为0false新建实体默认不可在水下呼吸。可用依赖参数x:number / y:number / z:number / world:world / entity:entity——即实体所在位置坐标、所在世界以及实体本身这些变量会作为程序块的输入供条件逻辑使用。实体模型中对应的数据字段为 LivingEntity.java 中的public LogicProcedure breatheUnderwater;与waterMob水生实体、pushedByFluids流体可否推动相邻定义三者共同描述生物与水的交互行为。三、配置步骤速览在 MCreator 工作区中新建或打开一个生物实体模组元素在行为设置中找到可在水下呼吸选项直接勾选固定为true或点击程序选择器挂接一个返回逻辑值true/false的程序若挂接程序可使用x、y、z、world、entity依赖构造动态判断保存并生成代码编译后进入游戏验证条件为真时实体浸入水中不会消耗氧气值也不会溺水窒息。典型的挂接程序场景示例制作进入特定维度才可在水下呼吸的鱼人、只有持有呼吸药水效果才不溺水的生物或在条件中使用 entity_get_oxygen 等程序块做更精细的呼吸模拟。四、与水生实体waterMob参数的联动该条件与编辑器中的水生实体复选框help/en_GB/entity/water_entity.md存在自动联动关系。勾选水生实体后MCreator 会自动把可在水下呼吸固定为真同时把流体可否推动固定为假见 LivingEntityGUI.javawaterMob.addChangeListener(_ - { if (!isEditingMode()) { breatheUnderwater.setFixedValue(waterMob.isSelected()); pushedByFluids.setFixedValue(!waterMob.isSelected()); } });需要区分两个概念水生实体waterMob使实体拥有水生导航器与水运动控制器并允许世界生成器在流体中生成它参见 water_entity.md但它本身不会让实体不会溺水可在水下呼吸breatheUnderwater专门控制实体能否无限期在水下呼吸防止溺水。因此对于鱼、鱿鱼这类完全水生的生物二者通常同时开启而对于只在潜水时想免除氧气消耗的陆地生物可以只开启可在水下呼吸而不勾选水生实体。五、底层生成原理条件如何进入实体代码可在水下呼吸最终由代码生成器FreeMarker 模板编译进实体的 Java 源文件。以 NeoForge 1.21.1 生成器为例模板 livingentity.java.ftl 中#if data.breatheUnderwater?? (hasProcedure(data.breatheUnderwater) || data.breatheUnderwater.getFixedValue()) Override public boolean canDrownInFluidType(FluidType type) { double x this.getX(); double y this.getY(); double z this.getZ(); Level world this.level(); Entity entity this; return procedureOBJToConditionCode data.breatheUnderwater false true/; } /#if其逻辑是只有当该条件被设置非空且最终结果为真挂接了程序或固定值为 true时才生成canDrownInFluidType的重写方法方法内部把x/y/z/world/entity依赖注入条件程序并将程序返回值作为方法返回值。Minecraft 原版通过该钩子判断实体是否会在对应流体类型中溺水——返回false即不溺水实体可无限水下呼吸。NeoForge 26.3较新版本的额外处理在 NeoForge 26.3 生成器模板 livingentity.java.ftl 中除了同样的canDrownInFluidType生成逻辑外还额外生成canBreatheUnderwater方法并带有明确的注释#-- Fix #6456 - NeoForge did not patch canDrownInFluidType yet, so we also need use canBreatheUnderwater -- Override public boolean canBreatheUnderwater() { return !this.canDrownInFluidType(NeoForgeMod.WATER_TYPE.value()); }这是对上游问题 #6456 的兼容性修复较新版本的 NeoForge 尚未完整打通canDrownInFluidType的补丁链路因此 MCreator 额外重写canBreatheUnderwater()通过是否在水中可溺水的取反来间接表达能否在水下呼吸保证生成代码在目标版本上行为一致。这提醒读者同一条件在不同 Minecraft 版本生成器下的落地方式可能不同但最终语义条件为真 → 无限水下呼吸保持一致。六、历史转换与旧作品兼容该条件字段并非自始存在。仓库中的转换器 WaterEntitiesConverter.java 记录了 2023.4 版本workspace 版本号 55引入该字段时的迁移策略if (entity.waterMob) entity.breatheUnderwater new LogicProcedure(null, true); else entity.pushedByFluids new LogicProcedure(null, true);即旧版作品中勾选了水生实体的生物在升级工作区后会自动获得可在水下呼吸 true而未勾选水生实体的生物则自动获得流体可否推动 true。这一自动迁移保证了旧作品的生成代码行为与升级前一致也印证了可在水下呼吸在 2023.4 之后是独立于 waterMob 的正式配置项。七、常见问题与注意点为什么勾选了水生实体实体仍然溺水请检查可在水下呼吸是否被后续手工改回了 false。由于联动仅在非编辑模式下触发!isEditingMode()编辑已有实体时不会覆盖你已经手动设置的值。条件程序返回什么才生效生成器要求程序结果为逻辑值true/false。返回true→ 不溺水、可无限呼吸返回false→ 正常溺水机制生效。该条件与流体可否推动的区别可在水下呼吸控制的是氧气与溺水流体可否推动isPushedByFluid见 livingentity.java.ftl控制的是水流是否推动实体。二者在水生生物身上通常分别设为 true / false但用途完全不同。水生生物标签若实体的mobCreatureType设为 WATER生成器会自动为其添加minecraft:aquatic实体标签见 livingentity.definition.yaml这会影响游戏内相关机制对该实体的识别但与水下呼吸条件是两条独立路径。八、总结可在水下呼吸是 MCreator 生物实体编辑器中一个以逻辑条件形式存在的行为开关固定值为 true 时实体像鱼与鱿鱼一样无限期水下呼吸挂接程序时则可用x/y/z/world/entity依赖构造动态判定。它由 LivingEntityGUI.java 提供界面、由 livingentity.java.ftl及 26.3 版本的 增强实现编译为实体方法并通过 WaterEntitiesConverter 与旧版工作区无缝衔接。理解这一条件的界面配置与代码生成路径即可为你的自定义生物精确设计水下生存行为。赞分享低代码代码生成桌面应用游戏开发【免费下载链接】MCreatorMCreator 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 维度生成参数详解Generate aquifers含水层生成开关的配置与底层原理MCreator 维度生成参数详解Generate aquifers含水层生成开关的配置与底层原理 本文围绕 MCreator「维度Dimension低代码代码生成桌面应用游戏开发MCreator 方块元素中“骨粉可用”条件的原理与实现从 BlockGUI 配置到 NeoForge 生成代码MCreator 方块元素中“骨粉可用”条件的原理与实现从 BlockGUI 配置到 NeoForge 生成代码 本文讲解 MCreator 方块编辑器的“骨低代码代码生成桌面应用游戏开发MCreator 基岩版物品放置器block_placeable_on可放置方块配置与 use_on 生成原理详解MCreator 基岩版物品放置器block_placeable_on可放置方块配置与 use_on 生成原理详解 导读 在 MCreator 中制作 M低代码代码生成桌面应用游戏开发上一篇live-app-android如何在Android应用中快速实现实时位置共享功能下一篇快速上手CodeSage-Small基于PyTorch的代码嵌入提取极简示例创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考