• 欢迎加入MineBBS QQ讨论群:点击查看所有的官方讨论群
  • 我们将于近期对服务器进行迁移,服务可能中断至多2日。请各位安排好自己的访问计划,造成不便敬请谅解!
  • MineBBS入站考试已经上线!想要成为【正式会员】解锁更多功能吗?快来参与吧!【点我去看】
YRItems

原创 YRItems 1.0.2

请登录后获取
通过修改包 欺骗达到避免物品读取不相同导致不触发切换物品事件等问题
更新了脚本支持(事件监听)
以及自定义配置文件
以及自带脚本新增(发包虚拟lore
- 引入“自定义节点系统”,在生成物品时一次性评估所有节点,并在名称、Lore、NBT 中统一复用同一批随机结果。
- 占位符深度解析:在写入 NBT 之前对配置数据做递归替换,包含字符串、列表、嵌套复合结构,无需二次兜底。
- 新增 NBT 类型写法:支持 type/value 对象和 "type:value" 字符串两种方式,便于属性插件按数值读取。
适用场景

- 固定伤害与百分比加成这类“成对数值”需要在多个位置复用。
- 属性插件(YRAttribute)既能读字符串范围(如 10-20 ),也能读数值标签(如 mainhandMin: 10.0 )。
核心设计

- 一次评估、全局复用:节点在 sections 中定义,只评估一次;名称、Lore、NBT 使用 <节点ID> 占位符拿到同一结果。
- 统一占位符语法:
- <id> :节点的默认字符串表示。
- <id.0> 、 <id.1> :取结果列表第 n 个值。
- <id.length> :结果列表长度。
- <id.else.0> 、 <id.else.length> :备用结果列表访问(用于部分节点的“次要输出”)。
- 深度解析策略:在构建 NBT 前,对 Map、List、String 逐层替换占位符,再按类型写入 NBT;列表中如包含复合结构(Map),写成 ListTag<CompoundTag> ,否则写成 ListTag<StringTag> 。
节点类型

- number :在区间内生成随机数,可配置小数位。
- 适合最小/最大、百分比等。
- calculation :对已有节点做表达式计算(加减乘除、括号)。
- 适合由基础值派生出新值,例如百分比上下限。
- 提示:节点结果既可以是单值也可以是“主/副列表”,按占位符语法选择输出。
配置结构

- 在物品 YAML 中添加 sections ,定义节点;在 name 、 lore 、 nbt 中通过 <节点ID> 引用。
示例 A:属性插件能读字符串范围

identifier: minecraft:iron_sword
name: "测试"
lore:
- "固定伤害:<fixedMin>-<fixedMax>"
- "百分比加成:
<percentMin>%-<percentMax>%"

sections:
fixedMin:
type: number
min: 15
max: 25
decimal: 1
fixedMax:
type: calculation
expr: "<fixedMin> + 10"
# 基于 fixedMin 推导最大值
decimal: 1
percentMin:
type: number
min: 54
max: 63
decimal: 1
percentMax:
type: calculation
expr: "<percentMin> + 9"
decimal: 1

nbt:
Unbreakable: 1
YRAttributes:
Damage:
- "<fixedMin>-<fixedMax>"
-
"<percentMin>%-<percentMax>%"



- 效果: Lore 和 YRAttributes->Damage 列表显示同一批数值。
- 校验: /yritems get sword_string_range → /yritems nbt 。
示例 B(推荐):属性插件读数值型标签

identifier: minecraft:iron_sword
name: "测试(数值标签)"
lore:
- "固定伤害:<fixedMin>-<fixedMax>"
- "百分比加成:
<percentMin>%-<percentMax>%"

sections:
fixedMin:
type: number
min: 15
max: 25
decimal: 1
fixedMax:
type: calculation
expr: "<fixedMin> + 10"
decimal: 1
percentMin:
type: number
min: 54
max: 63
decimal: 1
percentMax:
type: calculation
expr: "<percentMin> + 9"
decimal: 1

nbt:
Unbreakable: { type: "byte",
value: 1 }
YRAttributes:
mainhandMin: { type: "float",
value: "<fixedMin>" }
mainhandMax: { type: "float",
value: "<fixedMax>" }
percentMin: { type: "float",
value: "<percentMin>" }
percentMax: { type: "float",
value: "<percentMax>" }



- 效果:插件可直接按数值读取,避免解析字符串的兼容差异。
- 提示:也支持 "int:63" 这类写法,等价于 type/value 。
命令与验证

- 获取与查看:
- /yritems list :查看可用物品 ID。
- /yritems get <id> 或 /yritems give <id> [玩家] [数量] :获取物品。
- /yritems nbt 或 /yritems tags :查看手持物品的 NBT。

- 统一 ID: sections 中的节点 ID 要与占位符一致(区分大小写)。
- 一次评估:同一物品生成过程中,所有 <id> 都复用同一结果(例如重复调用不会再次随机),确保不同地方调用结果始终一致。
- 列表写法: nbt 中列表包含 Map 时视为复合结构;否则一律当字符串列表处理(占位符已深度解析)。
- 类型优先:数值字段尽量用 type/value 写法,减少第三方插件解析歧义。
常见问题

- 未刷新旧物品:旧物品不会自动更新,请重新生成再验证。
- YAML 缩进/引号:包含 : 时建议使用引号或 type/value 格式,避免被 YAML 误解析。
- 节点未生效:检查 /yritems nbt 是否仍显示 <id> ,若是,通常为 ID 不匹配或 sections 缺失。
后退
顶部 底部