低代码代码生成桌面应用游戏开发【免费下载链接】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 仓库中的帮助文档 result_item.md德文版另有 en_GB 与 zh_CN 对应版本展开。该文档正文只有一句话但其对应的「Eating item result / Essensergebnis」参数却横跨 Java Edition 与 Bedrock Edition 两条生成链路背后涉及物品数据模型、条件判定逻辑与两套 NeoForge 模板实现。本文将围绕这个参数从界面操作到源码生成逐层展开帮助你在 MCreator 中正确配置「吃完食物后留下/获得某个物品」的行为并理解其底层原理。一、这个参数是什么一句话定位帮助文档德文版的原文是Dieser Parameter legt fest, welcher Gegenstand dem Inventar der Entität hinzugefügt werden soll, die diese Nahrung aß.即该参数定义了「食用该食品的实体」的物品栏中应被添加的物品。英文版表述为 what item should be added to inventory of the entity that ate this food中文版为「该参数定义了食用该食品的实体的物品栏中应添加的物品」。需要特别注意的是文档说的是添加到食用者物品栏而不是替换掉被吃掉的那格物品。实际上它在游戏中的完整表现是吃完食物后如果原物品栈被消耗为空则食用结果物品作为替代返回如果原物品栈还有剩余可堆叠食物则结果物品会被尝试放入食用者物品栏放不下时直接掉落在地。这一点可以从生成模板的代码中精确验证详见下文第四节。在 MCreator 的界面文案中该参数的完整提示是见 texts.propertiesEating item result: Leave empty to consume the food.中文含义「食用结果物品」——留空则直接消耗该食物。这是理解本参数行为的关键分界线留空食物吃完即被消耗不产出任何物品多数食物如此填入物品吃完后向食用者返回/发放该物品。二、界面位置在哪个编辑器里配置2.1 Java Edition物品元素Item的「Food」子面板在 Java Edition 的物品元素编辑器中该参数位于Food食物子面板内其控件定义在 ItemGUI.javaprivate final MCItemHolder eatResultItem new MCItemHolder(mcreator, ElementUtil::loadBlocksAndItems);它使用MCItemHolder方块/物品选择器候选列表来自ElementUtil::loadBlocksAndItems即工作区中全部自定义方块与物品。它与帮助按钮的绑定在 ItemGUI.javafoodSubpane.add(HelpUtils.wrapWithHelpButton(this.withEntry(item/result_item), L10N.label(elementgui.item.eating_result))); foodSubpane.add(PanelUtils.centerInPanel(eatResultItem));this.withEntry(item/result_item)正是帮助系统到本文档item/result_item.md的映射入口。同面板还包含营养值Nutritional value默认 4范围 -1000~1000、饱和度修正Saturation modifier默认 0.3、「Is always edible?」等参数它们共同构成 MCreator 的食物定义。2.2 Bedrock EditionBE 物品的同一帮助入口该参数同样服务于 Bedrock EditionAdd-On的物品编辑器。在 BEItemGUI.java 中食物属性面板使用同一个帮助文档入口item/result_item对应控件为usingConvertsTofoodProperties.add(HelpUtils.wrapWithHelpButton(this.withEntry(item/result_item), L10N.label(elementgui.item.eating_result))); foodProperties.add(PanelUtils.centerInPanel(usingConvertsTo));所以这份「result_item」帮助文档同时被 Java Edition 与 Bedrock Edition 两个编辑器引用——只是两个平台对「食用结果物品」的底层实现与数据字段名不同eatResultItemvsusingConvertsTo下文将分别剖析。三、数据模型与生效条件源码如何判定3.1 Java EditionItem.eatResultItem该参数的数据字段定义在 Item.java 的 Food 分组中// Food public boolean isFood; Numeric(init 4, min -1000, max 1000, step 1) public int nutritionalValue; Numeric(init 0.3, min -1000, max 1000, step 0.1) public double saturation; public MItemBlock eatResultItem; public boolean isMeat; public boolean isAlwaysEdible; NonNullMappable(eat) public ItemUseAnimation animation;字段类型为MItemBlock与方块/物品选择器MCItemHolder对应。围绕它有两个重要的判定方法Item.javapublic boolean hasEatResultItem() { return isFood eatResultItem ! null !eatResultItem.isEmpty(); } public boolean hasCustomEatResultItem() { return isFood eatResultItem ! null !eatResultItem.isEmpty() eatResultItem.getUnmappedValue() .startsWith(CUSTOM:); }从中可以提炼出三条硬性生效规则必须以isFood是食物为前提——否则即使填了物品也不会生成任何相关代码结果物品不能为空!eatResultItem.isEmpty()才算有结果物品hasCustomEatResultItem()进一步区分当结果物品是本工作区自定义元素映射值以CUSTOM:开头时走一套独立的生成分支见第五节。3.2 UI 的联动控制界面加载与保存时ItemGUI在 ItemGUI.java 与 L909 处完成双向绑定eatResultItem.setBlock(item.eatResultItem); // 加载模型 → 控件 item.eatResultItem eatResultItem.getBlock(); // 保存控件 → 模型同时该控件仅在「是食物」被勾选时启用ItemGUI.javaeatResultItem.setEnabled(foodSelected);避免在非食物物品上误配置。Bedrock 侧同理BEItemGUI.updateFoodPanel()会在isFood未勾选时禁用usingConvertsToBEItemGUI.java。四、Java EditionNeoForge 1.21.1代码生成finishUsingItem重写MCreator 的代码生成器通过 FreeMarker 模板产出最终的 Java 类。在 item.java.ftl 中只要满足hasProcedure(data.onFinishUsingItem) || data.hasEatResultItem()就会重写finishUsingItemOverride public ItemStack finishUsingItem(ItemStack itemstack, Level world, LivingEntity entity) { ItemStack retval #if data.hasEatResultItem() ${mappedMCItemToItemStackCode(data.eatResultItem, 1)}; // 食用结果物品数量 1 /#if super.finishUsingItem(itemstack, world, entity); #if data.hasEatResultItem() if (itemstack.isEmpty()) { return retval; // 原物品已吃完 → 直接返回结果物品 } else { if (entity instanceof Player player !player.getAbilities().instabuild) { if (!player.getInventory().add(retval)) // 优先放入物品栏 player.drop(retval, false); // 放不下则掉落 } return itemstack; // 返回剩余食物可堆叠场景 } /#if }这段生成代码完整实现了帮助文档所述的语义实体吃完食物LivingEntity不限于玩家后食用结果物品以数量 1 生成原食物栈被吃空时结果物品作为retval返回相当于留下该物品原食物栈仍有剩余时例如可堆叠的堆叠型食物结果物品优先添加进玩家物品栏getInventory().add背包已满则掉落在实体位置drop——这正是文档中添加到实体物品栏这一表述在真实游戏代码中的落地方式创造模式instabuild下不额外发放避免复制物品。该模板同时处理onFinishUsingItem过程吃完后触发的 MCreator 过程说明食用结果物品与吃完触发过程可以同时配置、互不冲突。五、新版 NeoForge26.3.x生成usingConvertsTo与USE_REMAINDER组件在较新的 26.3.x 生成器对应较新的 Minecraft 版本中实现方式改为基于数据组件Data Components。模板 item.java.ftl 中存在两条分支分支一普通非自定义食用结果物品—— 直接在食物的 Consumables 构建器中调用usingConvertsTo#if data.hasEatResultItem() !data.hasCustomEatResultItem() .usingConvertsTo(${mappedMCItemToItem(data.eatResultItem)}) /#if这会把结果物品写入食物的USE_REMAINDER数据组件由原版游戏机制在处理吃完/使用完时自动产出剩余物品。分支二自定义CUSTOM:前缀食用结果物品—— 由于自定义元素在构造阶段尚未注册需要通过事件在运行时补挂组件item.java.ftlSubscribeEvent public static void modifyItemComponents(ModifyDefaultComponentsEvent event) { event.modify(${JavaModName}Items.${REGISTRYNAME}.get(), (builder, _, _) - builder.set(DataComponents.USE_REMAINDER, new UseRemainder(new ItemStackTemplate(${mappedMCItemToItem(data.eatResultItem)})))); }对应地类上会标注EventBusSubscriberitem.java.ftl。可以看到hasCustomEatResultItem()这个方法的引入正是为了区分可直接内联进构建器的原版物品与需运行时解析的自定义物品两种生成路径。六、Bedrock Edition Add-Onusing_converts_toJSON 字段Bedrock 侧的数据模型字段为usingConvertsToBEItem.java位于 Food 分组// Food public boolean isFood; Numeric(init 4, min -1000, max 1000, step 1) public int foodNutritionalValue; Numeric(init 0.3, min -1000, max 1000, step 0.1) public double foodSaturation; public boolean foodCanAlwaysEat; public MItemBlock usingConvertsTo;Add-On 生成模板在 item.json.ftl 中将其输出为行为包物品 JSON 的using_converts_to字段#if data.usingConvertsTo?? !data.usingConvertsTo.isEmpty(), using_converts_to: ${mappedMCItemToRegistryNameNoTags(data.usingConvertsTo)} /#ifBedrock 的行为包物品定义正是通过using_converts_to声明使用该物品后转化为哪个物品。MCreator 的usingConvertsTo选择器与 Java 版一样使用MCItemHolderBEItemGUI.java确保你能从工作区现有方块/物品中直接选取。七、典型应用场景结合上述实现这个参数最常见的用途包括吃完留下容器/空容器如吃完一碗蘑菇煲后留下碗、喝完牛奶后留下桶——把碗/桶填入「食用结果物品」即可这正是原版同款交互消耗型产出吃完某个特殊食物后获得骨头、羽毛、金粒等副产品如原版鸡吃完种子后产出骨粉的玩法在 Mod 中的复刻堆叠食物的剩余返还可堆叠且带usingConvertsTo的食物吃最后一口时才返还结果物品其余情况尝试放入物品栏——细节见第四节生成的itemstack.isEmpty()判断跨平台同步Java Edition 与 Bedrock Edition 编辑器共用同一份帮助文档同一设计意图在两个平台上分别落地为eatResultItemNeoForge与using_converts_toAdd-On JSON。八、配置注意事项必须先在食物子面板勾选「Is food? / 是食物」否则该参数不生效hasEatResultItem()与hasCustomEatResultItem()均以isFood为前提UI 上控件也会被禁用留空 直接消耗不填任何物品吃完即消失这是绝大多数普通食物的默认行为自定义元素的选择在 Java Edition 26.3.x 生成器中选取本工作区自定义物品CUSTOM:前缀会走ModifyDefaultComponentsEvent的运行时挂载分支属于预期行为而非异常数量固定为 1生成代码中结果物品数量写死为1mappedMCItemToItemStackCode(data.eatResultItem, 1)如需数量变化应配合onFinishUsingItem过程实现帮助文档复用item/result_item帮助入口同时被 ItemGUI.java 与 BEItemGUI.java 引用修改配置前建议先阅读该帮助条目确认平台差异。相关帮助文档与源码索引该参数在食物配置中与其他参数紧密协作可一并阅读同目录下的相关帮助文档营养值与饱和度item/nutritional_value.md、item/saturation.md是否始终可食用item/always_edible.md食用动画item/animation.md关键源码与模板数据模型与判定Item.java、BEItem.java编辑器界面ItemGUI.java、BEItemGUI.java生成模板item.java.ftl1.21.1、item.java.ftl26.3.x、item.json.ftlAdd-On界面文案texts.properties、texts_de_DE.properties赞分享低代码代码生成桌面应用游戏开发【免费下载链接】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 物品使用时长use_duration参数详解食物进食时间与物品使用持续时间的配置指南MCreator 物品使用时长use_duration参数详解食物进食时间与物品使用持续时间的配置指南 本篇文章围绕 MCreator 中“物品使用时长低代码代码生成桌面应用游戏开发MCreator 食物物品参数深度解析Always Edible饱食度已满时仍可食用MCreator 食物物品参数深度解析Always Edible饱食度已满时仍可食用 本文围绕 MCreator 中食物物品Item的 Always低代码代码生成桌面应用游戏开发MCreator 食物物品「饱和度修饰符」参数详解从饥饿机制到源码实现MCreator 食物物品「饱和度修饰符」参数详解从饥饿机制到源码实现 MCreator 是一款用于制作 Minecraft Java 版模组、基岩版 Add低代码代码生成桌面应用游戏开发上一篇老电脑装不了新系统用 Rufus 把 U 盘做成启动盘从格式化到隐藏开关一次讲清下一篇DeepStream-Yolo终极指南快速集成YOLO目标检测模型 创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考