一个为 Nukkit MOT 设计的高度可扩展物品管理插件
YRItems 是一个物品库插件,专注于提供强大的物品配置、脚本系统和节点功能。它本身不实现 RPG 属性计算(如攻击力、暴击等),而是提供完整的基础设施,让你可以通过脚本和配置文件自由实现各种功能。
注意:RPG 属性的实际效果(如战斗伤害计算、属性加成等)需要配合其他插件实现,例如 YRAttribute 插件(未开放)。
- 🎯 YAML 物品配置 - 通过配置文件定义物品属性、NBT 数据
- 🔧 JavaScript 脚本系统 - 使用 Rhino 引擎,支持事件监听和自定义逻辑
- 📊 节点系统 - 强大的随机属性生成框架(数值、权重、公式计算)
- 🎨 动态 Lore 显示 - 根据 NBT 数据实时生成物品说明(客户端显示)
- 🔄 热重载 - 无需重启服务器即可重载配置和脚本
- 🛠️ 高度可扩展 - 所有功能都可以通过配置和脚本自定义
- 下载
YRItems.jar - 放入服务器的
plugins/目录 - 重启服务器
- 插件将自动生成配置文件和示例脚本
/yritems give <玩家> <物品ID> [数量] - 给予玩家物品
/yritems reload - 重载配置和脚本
/yritems list - 列出所有已配置的物品
YRItems/
└── items/
├── weapons.yml # 武器配置
├── armor.yml # 防具配置
└── custom.yml # 自定义物品配置
# items/weapons.yml
legendary_sword:
identifier: "minecraft:diamond_sword" # 物品类型
name: "§6传说之刃" # 显示名称
lore: [] # 留空让动态 Lore 生成
# 自定义 NBT 数据
nbt:
YRAttributes:
level: 2 # 强化等级 (int)
Quality: "传说" # 品质 (string)
Damage: 150 # 基础攻击力
CritRate: 35 # 暴击率
Durability: 850 # 耐久度
# 原版附魔
enchantments:
- id: 9 # 锋利
level: 5/yritems give PlayerName legendary_sword 1YRItems 使用 Rhino JavaScript 引擎,支持完整的事件监听和自定义逻辑。
YRItems/
└── Scripts/
├── DynamicLore.js # 内置:动态 Lore 显示
├── ExampleScript.js # 示例脚本
└── YourCustomScript.js # 你的自定义脚本
使用 @Event 注解注册事件监听器:
/**
* 监听玩家交互事件
*/
// @Event(eventName = "cn.nukkit.event.player.PlayerInteractEvent", priority="NORMAL")
function onPlayerInteract(event) {
var player = event.getPlayer();
var item = event.getItem();
// 检查物品是否有自定义 NBT
var nbt = item.getNamedTag();
if (nbt.exist("YRAttributes")) {
var attr = nbt.getCompound("YRAttributes");
// 执行自定义逻辑
player.sendMessage("§a你使用了特殊物品!");
// 可以调用其他插件的 API
// 例如:触发技能、计算伤害等
}
}脚本中可以访问以下全局对象:
plugin // YRItems 插件实例
Server // Nukkit Server 实例
print(msg) // 输出日志到控制台
// Java 类访问
Packages.cn.nukkit.item.Item
Packages.cn.nukkit.Player
// ... 等等修改脚本后,使用 /yritems reload 即可重载,无需重启服务器。
节点系统用于在物品配置中生成随机属性值,支持多种随机算法和公式计算。
| 节点类型 | 说明 | 用途示例 |
|---|---|---|
NUMBER |
随机数值 | 生成攻击力:100-200 |
GAUSSIAN |
高斯分布数值 | 更自然的属性分布 |
WEIGHT |
权重随机选择 | 品质选择:普通(50%)、稀有(30%)、史诗(20%) |
STRINGS |
随机字符串列表 | 随机后缀名称 |
CALCULATION |
公式计算(JS引擎) | 基于其他节点计算复杂公式 |
FASTCALC |
快速公式计算 | 简单数学运算 |
WEIGHTDECLARE |
权重声明(多选) | 随机选择多个属性 |
JS |
JavaScript调用 | 完全自定义逻辑 |
legendary_sword:
identifier: "minecraft:diamond_sword"
name: "§6传说之刃"
# 节点定义
nodes:
# 基础攻击力:100-200之间
base_damage:
type: NUMBER
min: 100
max: 200
fixed: 0 # 整数
# 暴击率:高斯分布,平均25%
crit_rate:
type: GAUSSIAN
base: 25
spread: 0.1 # 波动10%
maxSpread: 0.3 # 最大波动30%
fixed: 1 # 保留1位小数mystery_box:
nodes:
# 品质选择
quality:
type: WEIGHT
values:
- "50::普通" # 50%概率
- "30::稀有" # 30%概率
- "15::史诗" # 15%概率
- "5::传说" # 5%概率enhanced_sword:
nodes:
base_damage:
type: NUMBER
min: 100
max: 150
# 最终伤害 = 基础伤害 * 1.5
final_damage:
type: CALCULATION
formula: "<base_damage> * 1.5"
fixed: 0custom_item:
nodes:
special_value:
type: JS
path: "MyScript.js::calculateSpecialValue"
args:
- "100"
- "200"对应的JavaScript函数:
function calculateSpecialValue(args) {
var min = parseInt(args[0]);
var max = parseInt(args[1]);
// 自定义计算逻辑
var value = min + Math.random() * (max - min);
return value;
}节点计算的结果可以应用到物品NBT中:
legendary_sword:
nodes:
damage_value:
type: NUMBER
min: 100
max: 200
# 将节点结果应用到NBT
nbt:
YRAttributes:
Damage: "<damage_value>" # 引用节点结果动态 Lore 是 YRItems 自带的强大功能,可以根据物品的 NBT 数据实时生成物品说明。
- 读取物品的
YRAttributesNBT 数据 - 根据
configs/display_rules.yml中的规则生成 Lore - 仅在客户端显示,不修改物品实际 NBT
- 支持热重载配置
配置文件位置:YRItems/configs/display_rules.yml
# ==================== 强化等级显示 ====================
enhance_level:
nbt_key: "level" # 读取的 NBT 键名
# 值映射:不同等级显示不同文本
value_mappings:
'0':
level_text: "§f强化等级 §71§f"
description: "§7初级强化"
'1':
level_text: "§f强化等级 §e2§f"
description: "§e中级强化"
'2':
level_text: "§f强化等级 §63§f"
description: "§6高级强化"
# ==================== 品质显示 ====================
quality:
nbt_key: "Quality"
value_mappings:
"普通":
display: "§f品质: 普通"
"稀有":
display: "§9品质: 稀有"
"史诗":
display: "§5品质: 史诗"
"传说":
display: "§6品质: 传说"
# ==================== 数值属性显示 ====================
damage:
nbt_key: "Damage"
display_format: "§c⚔ 攻击力: §f{value}"
crit_rate:
nbt_key: "CritRate"
display_format: "§e☆ 暴击率: §f{value}%"
# ==================== 范围映射(不同颜色)====================
durability:
nbt_key: "Durability"
display_format: "耐久: {value}/1000"
value_ranges:
- min: 0
max: 300
color: "§c" # 红色(低耐久)
- min: 301
max: 700
color: "§e" # 黄色(中等)
- min: 701
max: 1000
color: "§a" # 绿色(高耐久)物品 NBT:
YRAttributes:
level: 2
Quality: "传说"
Damage: 150
CritRate: 35
Durability: 850游戏内显示:
§8§m--------------------
§f强化等级 §63§f
§6高级强化
§6品质: 传说
§c⚔ 攻击力: §f150
§e☆ 暴击率: §f35%
§a耐久: 850/1000
§8§m--------------------
在 display_format 中可使用:
| 占位符 | 说明 | 示例 |
|---|---|---|
{value} |
NBT 原始值 | level=2 → "2" |
{value_plus_1} |
NBT 值 +1 | level=2 → "3" |
/yritems reload修改 display_rules.yml 后重载即可生效,无需重启服务器。
YRItems 支持多配置文件组织,所有配置都会在启动时自动加载。
YRItems/
├── config.yml # 主配置文件
├── items/ # 物品配置目录
│ ├── weapons.yml
│ ├── armor.yml
│ └── consumables.yml
├── configs/ # 自定义配置目录
│ ├── display_rules.yml # 动态 Lore 规则
│ ├── custom_config.yml # 你的自定义配置
│ └── ...
└── Scripts/ # 脚本目录
├── DynamicLore.js
└── ...
// 获取自定义配置文件
var configManager = plugin.getCustomConfigManager();
var myConfig = configManager.getConfig("custom_config.yml");
// 读取配置值
var value = myConfig.get("some_key");YRItems 是一个物品库插件,它提供:
✅ 物品配置和管理 ✅ NBT 数据存储 ✅ 动态 Lore 显示 ✅ 脚本和节点系统
但不提供:
❌ 战斗伤害计算 ❌ 属性加成效果 ❌ 技能系统 ❌ RPG 游戏逻辑
这些功能需要配合其他插件实现,例如:
- YRAttribute(未开放)- 实现属性计算和战斗系统
- 或者通过 YRItems 的脚本系统自行实现
- YRItems 定义物品,存储 NBT 数据(
Damage: 150,CritRate: 35) - YRItems 通过动态 Lore 显示这些属性给玩家看
- YRAttribute(或你的自定义插件)读取这些 NBT 数据
- YRAttribute 在战斗时计算实际伤害、暴击等效果
- 在物品中添加自定义 NBT:
magic_staff:
nbt:
YRAttributes:
MagicPower: 500
ManaRegen: 10- 在
configs/display_rules.yml中定义规则:
magic_power:
nbt_key: "MagicPower"
display_format: "§b✦ 魔法强度: §f{value}"
mana_regen:
nbt_key: "ManaRegen"
display_format: "§9◈ 法力回复: §f{value}/秒"- 重载插件:
/yritems reload
- 在
Scripts/目录创建MyScript.js - 使用
@Event注解监听事件 - 实现你的自定义逻辑
- 重载插件生效
通过节点系统可以为物品生成多样化的属性:
- 随机数值范围(攻击力、防御力)
- 高斯分布(更自然的属性波动)
- 权重随机(品质、类型选择)
- 公式计算(基于其他属性的复杂计算)
- JavaScript调用(完全自定义的随机逻辑)
如有问题或建议,欢迎联系作者:
- QQ: 1244894362
- GitHub: 提交 Issue
本项目采用 GNU AGPL v3 许可证,附加非商用条款。
- ✅ 可以:学习、修改、分发、私人使用
- ✅ 必须:开源你的修改版本(包括网络使用)
- ✅ 必须:保留作者署名
- ❌ 禁止:商业用途(需要单独授权)
- 遵循 GNU AGPL v3 协议
- 任何修改版本必须开源
- 网络使用也需公开源码(AGPL特性)
- 不可商用(需要商业授权请联系作者)
查看完整许可证:LICENSE
商业授权咨询:QQ 1244894362
使用 YRItems 打造你的专属 RPG 服务器!