
低代码代码生成桌面应用游戏开发【免费下载链接】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 的普通物品Item与工具Tool元素都内置了两个极易混淆的「右键」事件当右键点击空气时右击空气时与当右键点击方块时右击方块时。本文以插件仓库中对应帮助文档 item/when_right_clicked.md 为骨架结合 item/when_right_clicked_block.md 与生成器源码讲清两个事件的触发时机、依赖项、ActionResultTypeSUCCESS/CONSUME/PASS/FAIL的语义以及如何用返回值控制「空中右键」与「方块右键」两个事件的分流。读完你将能精确设计出「右键物品打开 GUI」「右键空气才触发的技能」「右键方块才生效的交互道具」等典型玩法并知道生成后的 Java 代码长什么样。两个右键事件触发时机与坐标差异在物品Item或工具Tool元素的事件列表中MCreator 提供了两个看似相同、实则分工明确的事件。对应本地化文案见 texts_zh_CN.properties 中的elementgui.common.event_right_clicked_air/event_right_clicked_block清楚地体现了差异事件界面文案中文触发条件记录坐标onRightClickedInAir右击空气时实体的位置玩家手持该物品右键且没有对准任何方块实体位置entity.getX/Y/ZonRightClickedOnBlock右击方块时方块的位置玩家手持该物品右键且指针指向某个方块方块位置context.getClickedPos()两个事件在界面上的完整名称分别是「当右键点击时实体的位置」与「当右键点击方块时方块的位置」英文原文为When right-clicked (entity pos.)与When right-clicked on block (block pos.)。这里的“位置”差异是使用中最容易踩坑的地方如果你的流程依赖坐标参数务必确认自己用的是实体坐标还是方块坐标。依赖项Dependencies一览在 ItemGUI.java 中可以看到两个事件注册时声明的依赖项onRightClickedInAir右击空气时x:number / y:number / z:number—— 实体坐标world:world—— 世界对象entity:entity—— 执行右键的玩家itemstack:itemstack—— 手中的物品onRightClickedOnBlock右击方块时x:number / y:number / z:number——方块坐标world:world、entity:entity、itemstack:itemstack额外多出direction:direction被点击方块的朝向/面与blockstate:blockstate被点击方块的方块状态也就是说「右击方块时」事件还向流程额外提供了“点到了哪个面、点中的方块处于什么状态”这两个上下文适合做与方块交互的逻辑例如对草方块施肥、对箱子开锁、根据朝向放置物品等而「右击空气时」事件更适合做施法、举盾、开关装备等不依赖方块目标的逻辑。两个事件各自的生成入口「右击空气时」逻辑在生成时挂载到物品类的use()方法上。以 NeoForge 1.21.1 生成器模板 templates/item/item.java.ftl 为例Override public InteractionResultHolderItemStack use(Level world, Player entity, InteractionHand hand) { InteractionResultHolderItemStack ar super.use(world, entity, hand); // ... 远程武器 / 蓄力 / 右键打开 GUI 等前置逻辑 ... if (hasProcedure(data.onRightClickedInAir)) { onRightClickedInAirProcedure.execute(entity.getX(), entity.getY(), entity.getZ(), world, entity, ar.getObject()); } return ar; }「右击方块时」逻辑则挂在useOn()方法上由公共宏onItemUsedOnBlock生成见 utils/triggers.java.ftl26.3 分支同构见 utils/triggers.java.ftlOverride public InteractionResult useOn(UseOnContext context) { super.useOn(context); // 流程执行后返回 ActionResult若流程未返回值则回退为 SUCCESS return onRightClickedOnBlockProcedure.execute(...) 或 InteractionResult.SUCCESS; }在工具Tool元素中两个事件通过 templates/tool.java.ftl 以相同方式接入use()与useOn()。返回值 ActionResultTypeSUCCESS / CONSUME / PASS / FAIL 的语义「右击方块时」事件是 MCreator 中少数需要或可以返回ActionResultType的事件之一。在 ItemGUI.java 中可以看到该事件注册时指定了返回类型ACTIONRESULTTYPE并且.makeReturnValueOptional()——即返回值可选。可在流程编辑器的「动作结果类型」下拉块中选择其可选值定义在 action_result_type.jsonSUCCESS交互成功。表示该物品确实与方块发生了交互。CONSUME交互成功且消耗这次点击不继续传递。与 SUCCESS 类似但语义上强调“本次点击已被消费”。PASS没有发生交互将点击事件继续传递给后续逻辑如放置方块等默认行为。FAIL交互失败本次点击被阻止。对应的原版枚举为net.minecraft.world.InteractionResult四个值直接映射到其 SUCCESS / CONSUME / PASS / FAIL。不返回任何值时默认是 PASS「右击方块时」帮助文档when_right_clicked_block.md明确说明如果流程没有返回任何值结果将被视为 PASS。这一点在生成宏procedureCodeWithOptResult见 utils/procedures.java.ftl中体现得十分直接#if hasReturnValueOf(object, type) return procedureCode object dependencies/ #-- 流程返回了 ActionResultType -- #else procedureCode object dependencies/ return ${defaultResult}; #-- 未返回回退到默认值 -- /#if而onItemUsedOnBlock宏传入的defaultResult是InteractionResult.SUCCESS——注意这里生成器的“代码回退值”是 SUCCESS与文档描述存在一处细微差别文档语义层面约定“流程未返回值视为 PASS事件继续向后传递”代码回退层面则直接返回 SUCCESS。实际工程中的理解应以生成代码为准未返回值的流程会得到InteractionResult.SUCCESS。若你需要严格的“继续传递”行为请在流程末尾显式返回PASS。用返回值分流让「右击空气时」只在空中触发这是原文档when_right_clicked.md重点强调的核心技巧如果希望「右击空气时」流程只在玩家于空中未对准方块右键时被调用那么「右击方块时」流程必须始终返回 SUCCESS/CONSUME。原理如下当玩家右键时Minecraft 会先尝试对指针指向的方块调用useOn()即「右击方块时」。如果该方法返回 PASS点击事件会被“放行”并继续触发use()即「右击空气时」如果返回 SUCCESS/CONSUME则点击被判定为已处理use()不再被调用因此「右击空气时」不会触发。由此得出两条实用规则想要空中右键生效、方块右键也生效保持默认。右击方块时事件返回 PASS或不返回值use()与useOn()都会执行。只想要空中右键生效方块右键不触发空中逻辑在「右击方块时」流程末尾放置一个「动作结果类型」块并设置为SUCCESS 或 CONSUME。这样对准方块右键时事件被消费空中逻辑不会运行而对空右键时useOn()根本不会被调用空中逻辑照常执行。反之如果「右击方块时」返回 PASS那么玩家右键任何方块时空中右键流程也会一并执行——这常常导致“想点方块触发 A结果空中技能 B 也被触发了”的 bug。实战场景三种典型设计结合 Item.java 中声明的三个字段openGUIOnRightClick、onRightClickedInAir、onRightClickedOnBlock以下是常见玩法与事件配置对照需求onRightClickedInAironRightClickedOnBlock说明右键物品打开 GUI可留空留空使用元素自带「右键时打开 GUI」开关openGUIOnRightClick无需流程。注意若同时绑定 GUI 与两个右键流程生成逻辑会先处理 GUI 打开再执行流程见 item.java.ftl右键方块施肥/放火空中不触发留空执行逻辑返回 SUCCESS借助blockstate判断目标方块direction决定效果朝向空中右键施法/蓄力方块右键不误触施法流程直接返回 SUCCESS/CONSUME满足帮助文档的分流条件生成后的完整 Java 形态NeoForge 1.21.1将上述配置导出为模组后物品类中会同时出现两个重写方法。1.21.1NeoForge生成的代码形如// 空中右键依赖世界、实体坐标、玩家、物品堆 Override public InteractionResultHolderItemStack use(Level world, Player entity, InteractionHand hand) { InteractionResultHolderItemStack ar super.use(world, entity, hand); if (hasProcedure(data.onRightClickedInAir)) { MyItemOnRightClickedInAirProcedure.execute(entity.getX(), entity.getY(), entity.getZ(), world, entity, ar.getObject()); } return ar; } // 方块右键依赖额外包含 blockstate 与 direction Override public InteractionResult useOn(UseOnContext context) { super.useOn(context); MyItemOnRightClickedOnBlockProcedure.execute( context.getLevel(), context.getClickedPos().getX(), context.getClickedPos().getY(), context.getClickedPos().getZ(), context.getLevel().getBlockState(context.getClickedPos()), context.getPlayer(), context.getClickedFace(), context.getItemInHand()); return InteractionResult.SUCCESS; // 若流程返回了 ActionResultType则此处 return 流程结果 }若使用 NeoForge 26.3较新版本线生成器use()的签名改为public InteractionResult use(...)见 templates/item/item.java.ftl但useOn()的接入方式与返回语义保持一致。因此基于不同生成器版本排查右键问题时优先确认InteractionResultHolderItemStack与InteractionResult两种签名差异其余逻辑结构基本相同。常见排查清单坐标用错了空中事件用entity.getX/Y/Z方块事件用context.getClickedPos()不要在方块事件里误取实体坐标做放置偏移。两个事件同时触发确认「右击方块时」是否返回了 PASS或未返回值导致点击被放行后又执行了空中逻辑。返回块类型不匹配ActionResultType 下拉块只能在指定返回类型的事件中使用若流程结构里没有「动作结果类型」块生成代码会走默认回退值。与 GUI 冲突右键打开 GUI 与右键流程共用use()入口若 GUI 打开条件未满足流程仍会继续执行注意用条件块如openGUIOnRightClick的判断隔离。至此两个右键事件的触发边界、返回值语义、分流技巧与生成代码形态均已覆盖。实际开发时建议先在流程末尾显式返回PASS或SUCCESS再结合游戏内行为观察即可快速确定事件流向是否符合预期。赞分享低代码代码生成桌面应用游戏开发【免费下载链接】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 方块右击事件When Right Clicked完整指南ActionResult 返回语义与底层实现解析MCreator 方块右击事件When Right Clicked完整指南ActionResult 返回语义与底层实现解析 导读 本文围绕 MCreato低代码代码生成桌面应用游戏开发PokemonRedExperiments事件触发条件get_all_events_reward返回值解析PokemonRedExperiments事件触发条件get_all_events_reward返回值解析 在强化学习Reinforcement Learn强化学习深度学习AI应用MCreator 基岩版Bedrock物品教程用实体放置组件制作右键生成实体的物品MCreator 基岩版Bedrock物品教程用实体放置组件制作右键生成实体的物品 本教程围绕 MCreator 基岩版物品BEItem编辑器中的低代码代码生成桌面应用游戏开发上一篇GHelper 替换 Armoury Crate华硕本性能模式与风扇曲线快速上手下一篇小模型NPU横评EXAONE-3.5-2.4B-Instruct_rai_1.8.0_medusa_1.0_npu vs Qwen3、SmolLM性能与效果终极对比创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考