
低代码代码生成桌面应用游戏开发【免费下载链接】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 远程物品Ranged Item编辑器中“Shoot constantly when active?”持续射击这一选项展开。该选项让远程武器在玩家按住右键期间持续发射弹射物是实现“机关枪”“自动炮台”类自定义物品的关键开关。读完本文你将掌握该选项在编辑界面中的位置与联动逻辑、它生成的 Minecraft 代码形态、与“蓄力射击”的互斥关系以及弹药、耐久和触发事件在持续射击模式下的行为。MCreator 是一款开源的 Minecraft Java 版模组、基岩版 Add-On、资源包与数据包制作工具其内置的可视化物品编辑器支持定义远程武器可发射弹射物的物品。帮助文档默认英文 对该选项的核心语义描述为“If checked, the ranged item will constantly shoot when the player right-clicks it.”勾选后玩家右击远程物品时将不断射击对应的简体中文帮助条目表述为“如果勾选该参数在玩家右击时远程物品时将不断射击”。本文将以这一选项为线索结合仓库源码说明其完整工作链路。一、选项位置远程物品属性面板在 MCreator 的 GUI 编辑界面中该选项位于Ranged item properties远程物品属性面板。从源码看面板布局与选项组织定义在 ItemGUI.java面板包含enableRanged是否启用远程/发射弹射物、projectile选择弹射物、projectileDisableAmmoCheck是否跳过弹药检查、shootConstantly持续射击与rangedItemChargesPower是否蓄力射击五个控件每个控件都通过HelpUtils.wrapWithHelpButton绑定对应的帮助条目其中shootConstantly绑定的正是item/shoot_constantly帮助文档点击问号即可看到本文开头引用的说明文字选项文案 “Shoot constantly when active?” 定义于本地化文件 texts.properties。二、与“蓄力射击”的互斥联动shootConstantly与rangedItemChargesPower蓄力射击类似原版弓的拉弦蓄力在逻辑上是互斥的。这一联动在 ItemGUI.java 中实现shootConstantly.addActionListener(_ - { rangedItemChargesPower.setEnabled(!shootConstantly.isSelected()); if (shootConstantly.isSelected()) rangedItemChargesPower.setSelected(false); });即一旦勾选“持续射击”“蓄力射击”复选框会立即被取消勾选并置灰反过来取消“持续射击”后“蓄力射击”重新可选。这符合游戏机制——持续射击模式每次发射都是满威力直发不需要也不应该存在“按住蓄力”的行为。另外该选项只有在enableRanged启用远程被勾选时才可用。updateRangedPanel()方法ItemGUI.java负责联动启用远程时shootConstantly、projectile、projectileDisableAmmoCheck等控件全部激活关闭远程时则全部禁用且界面会自动把使用时长use duration恢复为 0、把渲染类型和动画切回普通物品。三、保存与加载的数据模型该选项在数据模型层面对应物品元素Item的一个布尔字段。定义见 Item.javapublic boolean enableRanged; public boolean shootConstantly; public boolean rangedItemChargesPower; NonNullIf(enableRanged) public ProjectileEntry projectile;shootConstantly与enableRanged、rangedItemChargesPower并列均为布尔字段projectile字段带有NonNullIf(enableRanged)注解表示只要启用了远程射击就必须指定弹射物与之配套的还有 useDuration使用时长字段其初始值为 0、取值范围为 -100 ~ 128000。界面读写时通过shootConstantly.setSelected(item.shootConstantly)加载、item.shootConstantly shootConstantly.isSelected()保存见 ItemGUI.java 与 ItemGUI.java。值得注意的是RangedItemToProjectileAndItemConverter2023.4 版本引入的转换器也会引用该字段——这是 MCreator 将旧版“远程物品”模型迁移为新“远程物品 弹射物”模型时保留该选项语义的证据。四、代码生成持续射击的底层实现MCreator 生成模组代码时会把该选项翻译成 MinecraftItem子类中对releaseUsing与onUseTick两个方法的重写。核心逻辑位于 NeoForge 生成器模板 item.java.ftl。4.1 普通远程武器松开右键才发射当enableRanged为真且shootConstantly为假时模板生成releaseUsing(...)方法即玩家松开右键时才执行发射逻辑模板第 330-354 行#if hasProcedure(data.onStoppedUsing) || (data.enableRanged !data.shootConstantly) Override public void releaseUsing(ItemStack itemstack, Level world, LivingEntity entity, int time) { ... #if data.enableRanged !data.shootConstantly if (!world.isClientSide() entity instanceof ServerPlayer player) { #if data.rangedItemChargesPower float pullingPower BowItem.getPowerForTime(this.getUseDuration(itemstack, player) - time); if (pullingPower 0.1) return; /#if arrowShootCode/ } /#if } /#if可以看到若同时启用了蓄力射击rangedItemChargesPower还会通过BowItem.getPowerForTime(...)计算拉弦力度力度过小 0.1则不发射——这正是原版弓的手感。4.2 持续射击每 tick 发射并立即结束使用当enableRanged与shootConstantly同时为真时模板生成onUseTick(...)方法模板第 356-376 行#if hasProcedure(data.everyTickWhileUsing) || (data.enableRanged data.shootConstantly) Override public void onUseTick(Level world, LivingEntity entity, ItemStack itemstack, int time) { ... #if data.enableRanged data.shootConstantly if (!world.isClientSide() entity instanceof ServerPlayer player) { arrowShootCode/ entity.releaseUsingItem(); } /#if } /#ifonUseTick是 Minecraft 中“物品正在被使用期间每个游戏刻tick1/20 秒回调”的钩子。该模板在每个 tick都执行一次arrowShootCode发射弹射物随后立即调用entity.releaseUsingItem()结束本次使用。由于玩家仍按住右键物品会立刻重新进入使用状态于是下一个 tick 再次发射——最终呈现的效果就是“按住右键持续连射”也就是帮助文档所说的“不断射击”。同时注意第 330 行的条件当shootConstantly为真时releaseUsing只在存在“停止使用”事件onStoppedUsing流程时生成避免与onUseTick中的自动releaseUsingItem产生重复发射。五、发射宏弹药、耐久与触发事件模板中的arrowShootCode/宏item.java.ftl是每一次发射的完整动作其行为对持续射击模式同样适用弹药检索通过findAmmo(player)查找玩家手中或背包中匹配的弹射物物品若勾选了projectileDisableAmmoCheck跳过弹药检查则直接构造弹射物、无需消耗弹药第 379-395 行发射判定只有创造模式instabuild或身上有弹药时才真正发射自定义弹射物调用其shoot(...)原版箭则shootFromRotation(...)以固定 3.15 的速度射出蓄力模式会乘以pullingPower音效播放entity.arrow.shoot音效耐久消耗若物品设置了伤害次数damageCount ! 0每次发射hurtAndBreak(1, ...)弹药消耗非创造模式下若弹药栈可损耗则hurtAndBreak(1, ...)否则stack.shrink(1)减少数量事件触发若定义了“远程物品使用后”onRangedItemUsed流程每次发射都会执行。因此在持续射击模式下只要玩家背包弹药充足或处于创造模式武器会以每 tick 一发每秒 20 发的频率倾泻弹药同时以同样频率消耗耐久与触发事件流程——设计自动武器时必须留意弹药消耗速度与耐久上限。六、不同生成器版本的一致性同样的选项逻辑也存在于较新的生成器插件中。在 generator-26.3.x 的 neoforge-26.3 模板 中releaseUsing与onUseTick的生成条件、持续射击分支结构与 1.21.1 生成器完全一致releaseUsing仅在enableRanged !shootConstantly时发射、onUseTick在enableRanged shootConstantly时每 tick 发射并releaseUsingItem。这意味着你在 MCreator 中基于不同 Minecraft 版本的生成器制作远程武器时“持续射击”的行为保持一致。七、使用时长Use Duration与注意事项持续射击依赖“按住右键期间物品一直处于使用中”这一前提因此useDuration使用时长必须足够长。界面逻辑会在启用远程时自动将使用时长调整为 72000 tick即 Minecraft 中一小时约等于无限使用时间见 ItemGUI.javaif ((int) useDuration.getValue() 0) useDuration.setValue(72000);与此对应若使用时长为 0“停止使用”事件onStoppedUsing会被禁用ItemGUI.java。也就是说持续射击模式通常与 72000 的默认使用时长配合使用不建议手动把时长改小否则可能在一次右键期间无法完成足够多次发射。从源码结构看还有两点值得注意若同时勾选“持续射击”并在“使用中每 tick”事件everyTickWhileUsing中编写了流程则每个 tick 会先执行该流程、再执行发射见模板第 358-368 行可用于实现射击冷却、连发数统计等自定义逻辑仓库的集成测试数据生成器 TestWorkspaceDataProvider.java 中测试用例刻意将shootConstantly与rangedItemChargesPower设为互斥取值item.rangedItemChargesPower !item.shootConstantly印证了二者不可同时启用的设计约束。八、小结“持续射击”是 MCreator 远程物品编辑器中一个“小而关键”的开关它在 GUI 上表现为一个复选框在数据模型中对应Item.shootConstantly布尔字段在生成代码层面则通过onUseTick每 tick 发射并调用releaseUsingItem实现按住右键的自动连发。它与“蓄力射击”互斥依赖 72000 tick 的长使用时长并受弹药检查、耐久消耗与事件触发等既有机制的共同约束。理解这一选项的完整链路可以帮助你更精确地设计诸如自动步枪、机关炮台、激光炮等自定义远程武器。延伸阅读远程物品帮助条目英文默认、简体中文版本Item 数据模型定义物品 GUI 面板与联动逻辑NeoForge 1.21.1 物品代码模板NeoForge 26.3 物品代码模板集成测试中的选项互斥验证赞分享低代码代码生成桌面应用游戏开发【免费下载链接】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 工具效率Efficiency参数详解从界面配置到代码生成原理MCreator 工具效率Efficiency参数详解从界面配置到代码生成原理 本文围绕 MCreator 的「工具」Tool元素中「效率」Effi低代码代码生成桌面应用游戏开发MCreator 进度弹窗通知Show Toast配置详解从界面选项到 JSON 生成原理MCreator 进度弹窗通知Show Toast配置详解从界面选项到 JSON 生成原理 导读 本文聚焦 MCreator 中进度Advanceme低代码代码生成桌面应用游戏开发MCreator 弹射物击退Knockback参数详解从配置含义到生成代码实现MCreator 弹射物击退Knockback参数详解从配置含义到生成代码实现 导读 本文围绕 MCreator 项目 项目根目录 https://li低代码代码生成桌面应用游戏开发上一篇Rivet Actors Rust SDK 之 NsApi 解析用 create_namespace 创建 Namespace 的完整指南下一篇TanStack Form TypeScript 完全指南类型安全表单状态管理的内核解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考