MCreator 自定义属性:min/max value 参数如何约束属性取值范围
低代码代码生成桌面应用游戏开发【免费下载链接】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 中 Attribute自定义属性元素的min/max value参数——它决定了属性值被修改、叠加修饰器modifier之后允许落入的取值边界。读完本篇你能理解该参数在数据模型中的定义、在属性编辑界面中的校验规则以及它最终如何被写入生成的 NeoForge 模组代码RangedAttribute构造从而为自己的实体设计一个“永远不会越界”的属性。参数语义属性值的硬性上下限官方帮助文档 plugins/mcreator-localization/help/default/attribute/min_max_value.md 对这一参数的完整定义只有一句话This parameter controls the minimum and maximum values the attributes value can be set to. 该参数控制属性值可以被设置到的最小值和最大值。这句话的隐含前提可以在同目录的另一篇帮助文档 default_value.md 中找到它解释了属性值与基值base value的区别The value of an attribute is the number that is calculated after modifiers and min/max restrictions are applied on its base value. 属性的“值”是在其基值上应用修饰器以及 min/max 限制之后计算得到的数字。也就是说min/max value并不改变属性本身的基值而是作为一道“钳制”边界当游戏内通过命令、过程procedure或修饰器改变属性基值并叠加各类 modifier 后最终生效的属性值会被限制在[minValue, maxValue]区间内。数据模型minValue 与 maxValue 字段在 MCreator 的元素类型定义中该参数对应 Attribute.java 中的两个double字段Numeric(init 0, min -Double.MAX_VALUE, max Double.MAX_VALUE, step 1.0) public double minValue; Numeric(init 1, min -Double.MAX_VALUE, max Double.MAX_VALUE, step 1.0) public double maxValue; Numeric(init 0, min -Double.MAX_VALUE, max Double.MAX_VALUE, step 1.0) public double defaultValue;从注解可以读出该参数的取值特性项目说明字段类型double支持小数合法范围-Double.MAX_VALUE ~ Double.MAX_VALUE即理论上不限步进1.0数值编辑器按步长递增新建时的初始值minValue 0、maxValue 1、defaultValue 0由Numeric(init ...)决定值得注意的细节是初始值min0、max1恰好让默认的defaultValue0落在区间内因此新建一个属性时界面校验是天然通过的。编辑器界面JMinMaxSpinner 与两条校验规则在属性编辑界面中min/max value 并不是两个独立的输入框而是一个成对的“最小-最大”联动控件。AttributeGUI.java 中可以看到private final JMinMaxSpinner minMaxValue ComponentFromAnnotation.minMaxSpinner(Attribute.class, minValue, maxValue);控件上的帮助按钮指向的正是本文的主题文档条目attribute/min_max_valueAttributeGUI.java界面标签在中文语言包中翻译为“属性值的范围”texts_zh_CN.properties。更重要的是界面为该参数注册了两条实时校验规则AttributeGUI.javaminMaxValue.setValidator(() - { if (minMaxValue.getMinValue() (double) defaultValue.getValue()) return new ValidationResult(ValidationResult.Type.ERROR, L10N.t(elementgui.attribute.default_lower_than_min)); else if (minMaxValue.getMaxValue() (double) defaultValue.getValue()) return new ValidationResult(ValidationResult.Type.ERROR, L10N.t(elementgui.attribute.default_higher_than_max)); return ValidationResult.PASSED; });对应中文语言包中的错误文案texts_zh_CN.propertieselementgui.attribute.default_lower_than_min→ “默认基值不能小于最小值。”elementgui.attribute.default_higher_than_max→ “默认基值不能大于最大值。”实操含义min/max value与default value是强耦合的——默认基值必须落在[min, max]区间内否则该元素无法通过校验、不能保存生成。调整上下限时务必同步检查默认基值这是使用此参数最常见的坑。代码生成min/max 如何进入 RangedAttribute在 MCreator 的 NeoForge 生成器中属性元素会由全局模板 attributes.java.ftl 生成一个注册类26.3 生成器使用同构模板 plugins/generator-26.3.x/neoforge-26.3/templates/elementinits/attributes.java.ftl。关键片段为#list attributes as attribute public static final DeferredHolderAttribute, Attribute ${...REGISTRYNAME...} REGISTRY.register(${...}, () - new RangedAttribute(attribute.${modid}.${...}, ${attribute.defaultValue}d, ${attribute.minValue}d, ${attribute.maxValue}d) .setSyncable(true) #if attribute.sentiment ! POSITIVE.setSentiment(Attribute.Sentiment.${attribute.sentiment})/#if); /#list从模板结构可以看出min/max 直接传入 Minecraft 的RangedAttribute构造函数——构造签名为RangedAttribute(key, defaultValue, minValue, maxValue)四个数值参数按“默认值、最小值、最大值”的顺序以double字面量后缀d写入生成代码生成的属性默认调用.setSyncable(true)属性值可同步到客户端同目录生成的...Attributes.java文件头部带有MCreator note: This file will be REGENERATED on each build注释提示该文件每次构建会重新生成不应手工修改。因此从源码结构看取值范围的强制执行发生在 Minecraft 自身的RangedAttribute/属性实例逻辑中MCreator 的职责是把你界面上填写的minValue、maxValue原样落到构造函数里属性叠加 modifier 后是否被钳制回区间内由RangedAttribute的实现保证。若需要验证实际效果可参考 default_value.md 所述属性“值” 基值 modifiers再经 min/max 限制。参数速查参数数据字段生成目标约束最小值Attribute.minValueAttribute.javaRangedAttribute第 3 个构造参数必须 ≤ 默认基值否则界面报default_lower_than_min最大值Attribute.maxValueAttribute.javaRangedAttribute第 4 个构造参数必须 ≥ 默认基值否则界面报default_higher_than_max默认基值关联参数Attribute.defaultValueRangedAttribute第 2 个构造参数必须位于[min, max]内与相邻参数的配合min/max value通常与同一编辑页的其他参数一起决策AttributeGUI.javadefault value默认基值属性的初始数值详见 default_value.mdsentiment属性性质POSITIVE/NEUTRAL/NEGATIVE影响属性修饰器在原版界面中的颜色对应 sentiment.mdentities / add to players / add to all entities决定该属性挂载到哪些实体Attribute.java详见 entities.md、add_to_players.md、add_to_all_entities.md。生成器会在EntityAttributeModificationEvent回调中为所选实体类型逐个注册该属性见 attributes.java.ftl。小结MCreator 的min/max value参数是自定义属性取值边界的“最后一公里”它在数据层由 Attribute.java 的两个双精度字段承载在界面层由JMinMaxSpinner提供成对编辑并对默认基值做区间校验最终由 FreeMarker 模板原样写入RangedAttribute构造函数。设计属性时只要记住“默认基值必须落在 min/max 区间内越界值会在运行时被 RangedAttribute 钳制回区间”这一条就能正确使用该参数。赞分享低代码代码生成桌面应用游戏开发【免费下载链接】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 自定义属性Attribute最小/最大值参数解析取值范围设置、界面校验与代码生成MCreator 自定义属性Attribute最小/最大值参数解析取值范围设置、界面校验与代码生成 本文围绕 MCreator 中「属性Attribut低代码代码生成桌面应用游戏开发Psalm 的 InternalProperty 问题详解如何用 internal 与 psalm-internal 约束属性访问范围Psalm 的 InternalProperty 问题详解如何用 internal 与 psalm internal 约束属性访问范围 InternalP开发工具代码质量质量保障Layui日期范围选择面板的min/max属性与默认显示问题解析Layui日期范围选择面板的min/max属性与默认显示问题解析 问题现象 在使用Layui的日期范围选择组件时开发者可能会遇到一个特殊现象当设置了min和前端UI组件上一篇Spacebot消息绑定Bindings详解如何把不同平台的群聊精准路由给同一个AI Agent下一篇LongCat-Video Triton GPU内核优化TMA描述符与自动调优策略全解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考