Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

MufHead/NK-YRItems

Repository files navigation

YRItems - 强大的物品库与脚本系统

一个为 Nukkit MOT 设计的高度可扩展物品管理插件

Nukkit License Non-Commercial


📖 简介

YRItems 是一个物品库插件,专注于提供强大的物品配置、脚本系统和节点功能。它本身不实现 RPG 属性计算(如攻击力、暴击等),而是提供完整的基础设施,让你可以通过脚本和配置文件自由实现各种功能。

注意:RPG 属性的实际效果(如战斗伤害计算、属性加成等)需要配合其他插件实现,例如 YRAttribute 插件(未开放)。

✨ 核心特性

  • 🎯 YAML 物品配置 - 通过配置文件定义物品属性、NBT 数据
  • 🔧 JavaScript 脚本系统 - 使用 Rhino 引擎,支持事件监听和自定义逻辑
  • 📊 节点系统 - 强大的随机属性生成框架(数值、权重、公式计算)
  • 🎨 动态 Lore 显示 - 根据 NBT 数据实时生成物品说明(客户端显示)
  • 🔄 热重载 - 无需重启服务器即可重载配置和脚本
  • 🛠️ 高度可扩展 - 所有功能都可以通过配置和脚本自定义

🚀 快速开始

安装

  1. 下载 YRItems.jar
  2. 放入服务器的 plugins/ 目录
  3. 重启服务器
  4. 插件将自动生成配置文件和示例脚本

基本命令

/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 1

🔧 脚本系统

YRItems 使用 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
 // 例如:触发技能、计算伤害等
 }
}

访问插件 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调用 完全自定义逻辑

节点配置示例

示例1:随机数值属性

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位小数

示例2:权重随机选择

mystery_box:
 nodes:
 # 品质选择
 quality:
 type: WEIGHT
 values:
 - "50::普通" # 50%概率
 - "30::稀有" # 30%概率
 - "15::史诗" # 15%概率
 - "5::传说" # 5%概率

示例3:公式计算

enhanced_sword:
 nodes:
 base_damage:
 type: NUMBER
 min: 100
 max: 150
 # 最终伤害 = 基础伤害 * 1.5
 final_damage:
 type: CALCULATION
 formula: "<base_damage> * 1.5"
 fixed: 0

示例4:JavaScript节点

custom_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 系统

动态 Lore 是 YRItems 自带的强大功能,可以根据物品的 NBT 数据实时生成物品说明。

工作原理

  1. 读取物品的 YRAttributes NBT 数据
  2. 根据 configs/display_rules.yml 中的规则生成 Lore
  3. 仅在客户端显示,不修改物品实际 NBT
  4. 支持热重载配置

显示规则配置

配置文件位置: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");

🔄 重要说明

关于 RPG 属性实现

YRItems 是一个物品库插件,它提供:

✅ 物品配置和管理 ✅ NBT 数据存储 ✅ 动态 Lore 显示 ✅ 脚本和节点系统

但不提供:

❌ 战斗伤害计算 ❌ 属性加成效果 ❌ 技能系统 ❌ RPG 游戏逻辑

这些功能需要配合其他插件实现,例如:

  • YRAttribute(未开放)- 实现属性计算和战斗系统
  • 或者通过 YRItems 的脚本系统自行实现

工作流程示例

  1. YRItems 定义物品,存储 NBT 数据(Damage: 150, CritRate: 35)
  2. YRItems 通过动态 Lore 显示这些属性给玩家看
  3. YRAttribute(或你的自定义插件)读取这些 NBT 数据
  4. YRAttribute 在战斗时计算实际伤害、暴击等效果

📚 高级用法

创建自定义显示规则

  1. 在物品中添加自定义 NBT:
magic_staff:
 nbt:
 YRAttributes:
 MagicPower: 500
 ManaRegen: 10
  1. configs/display_rules.yml 中定义规则:
magic_power:
 nbt_key: "MagicPower"
 display_format: "§b✦ 魔法强度: §f{value}"
mana_regen:
 nbt_key: "ManaRegen"
 display_format: "§9◈ 法力回复: §f{value}/秒"
  1. 重载插件:/yritems reload

编写自定义脚本

  1. Scripts/ 目录创建 MyScript.js
  2. 使用 @Event 注解监听事件
  3. 实现你的自定义逻辑
  4. 重载插件生效

使用节点系统生成随机属性

通过节点系统可以为物品生成多样化的属性:

  • 随机数值范围(攻击力、防御力)
  • 高斯分布(更自然的属性波动)
  • 权重随机(品质、类型选择)
  • 公式计算(基于其他属性的复杂计算)
  • JavaScript调用(完全自定义的随机逻辑)

🤝 支持与反馈

如有问题或建议,欢迎联系作者:

  • QQ: 1244894362
  • GitHub: 提交 Issue

📄 许可证

本项目采用 GNU AGPL v3 许可证,附加非商用条款。

简单说明

  • 可以:学习、修改、分发、私人使用
  • 必须:开源你的修改版本(包括网络使用)
  • 必须:保留作者署名
  • 禁止:商业用途(需要单独授权)

详细条款

  • 遵循 GNU AGPL v3 协议
  • 任何修改版本必须开源
  • 网络使用也需公开源码(AGPL特性)
  • 不可商用(需要商业授权请联系作者)

查看完整许可证:LICENSE

商业授权咨询:QQ 1244894362


使用 YRItems 打造你的专属 RPG 服务器!

About

面向NK-MOT平台的物品库插件

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

AltStyle によって変換されたページ (->オリジナル) /