出售 LySell
LySell 是一款物品出售界面插件。玩家可将物品放入界面,插件根据物品 Lore 中的价格信息或预设价格计算收益,再通过 Vault、PlayerPoints 或控制台指令发放对应货币。
插件支持配置多种货币、价格计算公式、禁止出售 Lore、快捷放入与取回按钮,并提供单件物品出售 API。
插件信息
| 项目 | 内容 |
|---|---|
| 插件名 | LySell |
| 插件版本 | 2.0.6 |
| 作者 | 离渊 |
| 主命令 | /lsell |
| Java 版本 | Java 8 |
| API 声明 | 1.13 |
| 编译 API | Paper 1.16.5-R0.1-SNAPSHOT |
| 软依赖 | PlaceholderAPI、PlayerPoints、Vault |
支持版本
项目没有声明明确的最低版本和最高版本,现有代码可确认以下兼容信息:
plugin.yml中的api-version为1.13。- 项目使用 Paper
1.16.5-R0.1-SNAPSHOTAPI 编译。 - 材质工具同时支持英文材质名、旧版数字 ID 和子 ID。
- 项目包含低于 Minecraft 1.13 的旧版材质兼容逻辑。
- 是否能在其他版本正常运行,需要以实际服务端测试结果为准。
依赖说明
插件将 PlaceholderAPI、PlayerPoints 和 Vault 声明为软依赖。是否必须安装取决于使用的货币发放方式。
| 依赖 | 使用场景 | 说明 |
|---|---|---|
| Vault | give-from: 'Vault' | 用于向玩家的 Vault 经济账户存入金币,同时需要服务器存在可用的经济插件 |
| PlayerPoints | give-from: 'PlayerPoints' | 用于向玩家发放整数点券 |
| PlaceholderAPI | 自定义指令发放 | 在控制台执行发放指令前解析玩家变量,例如 %player_name% |
如果配置了某种发放方式,请安装并正确启用对应依赖。插件启动时会在控制台输出 PlayerPoints 和 Vault 的检测结果。
项目中没有 MySQL 存储功能,也没有 LyMySQLCore 依赖。
出售玩法
出售界面共有 54 个槽位,按用途分为以下区域:
| 槽位 | 用途 |
|---|---|
0-35 | 玩家放置待出售物品的区域 |
36-44 | 界面分隔区域,其中 40 为出售按钮 |
45-53 | 额外按钮区域,对应配置编号 0-8 |
玩家点击出售按钮后,插件会检查出售区内的每组物品:
- 检查物品是否命中禁止出售 Lore。
- 检查无物品元数据的物品是否存在预设价格。
- 检查物品 Lore 是否命中货币价格正则。
- 按物品数量累加价格,并执行货币公式。
- 按货币配置的格式保留小数位。
- 删除能够出售的物品并发放对应收益。
- 在控制台记录玩家、物品、数量和收益信息。
无法匹配任何价格的物品不会被删除。玩家关闭界面时,出售区内剩余物品会自动返回玩家背包。
核心功能
| 功能 | 说明 |
|---|---|
| 出售界面 | 玩家可将物品放入 36 格出售区域,再统一结算 |
| 实时收益统计 | 出售按钮每秒刷新一次,显示当前物品能够获得的各类货币 |
| Lore 价格提取 | 使用正则表达式从物品 Lore 中提取数字价格 |
| 多货币结算 | 一个物品可通过不同 Lore 行匹配不同货币 |
| 价格计算公式 | 支持使用 {value} 参与 +、-、*、/ 和括号运算 |
| 数量累加 | 提取的单件价格会乘以物品堆叠数量 |
| 数值格式化 | 每种货币可独立配置整数或指定小数位格式 |
| Vault 发放 | 将结算结果存入玩家的 Vault 经济账户 |
| PlayerPoints 发放 | 将结算结果作为整数点券发放 |
| 自定义指令发放 | 以控制台身份执行配置的发放指令,并解析 PlaceholderAPI 变量 |
| 预设价格 | 为无物品元数据的原版物品配置固定售价 |
| 禁止出售 Lore | Lore 包含指定文本时,不统计也不出售该物品 |
| 快捷放入 | 按 Lore 文本、无 Lore 条件或物品 ID 批量放入物品 |
| 快捷取回 | 将出售区内的物品批量放回玩家背包 |
| 清空按钮 | 可配置 Shift + 右键出售按钮直接清空出售区 |
| 操作冷却 | 出售按钮与额外按钮具有 1 秒操作间隔 |
| 关闭返还 | 关闭界面时返还尚未出售的物品 |
| 单件出售 API | 其他插件可调用 API 尝试出售指定物品与数量 |
| 配置重载 | 无需重启服务器即可重新加载出售规则、按钮和预设价格 |
价格来源
Lore 价格
插件会移除常见颜色代码后,使用 economy 中配置的正则表达式匹配每一行 Lore。正则匹配结果必须能够转换为数字。
同一行 Lore 命中某个货币后,不会继续使用该行匹配其他货币。不同 Lore 行可以分别匹配不同货币。
价格计算过程如下:
text
正则提取值 × 物品数量 → 代入 formula → 按 round 格式化 → 发放货币其中:
{value}表示已经乘以物品数量的价格。formula支持整数、浮点数、四则运算和括号。round使用 Java 数字格式,例如%.2f或%.0f。
预设价格
sell-preset 用于给没有物品元数据的物品设置固定售价。键名支持数字物品 ID 或英文材质名,并要求包含子 ID,例如:
yaml
sell-preset:
'BOOK:0':
金币: 1预设价格可以同时包含多种货币。配置的货币名称需要与 economy 下的货币节点一致,否则结算时无法读取对应的发放规则。
货币发放方式
economy.<货币>.give-from 决定该货币的发放方式。
| 配置值 | 发放方式 | 注意事项 |
|---|---|---|
Vault | 存入 Vault 经济账户 | 需要 Vault 和可用的经济插件 |
PlayerPoints | 调用 PlayerPoints 发放点券 | 结果必须能按整数解析 |
| 其他文本 | 作为控制台指令执行 | 支持 {value},并通过 PlaceholderAPI 解析玩家变量 |
自定义指令中不要添加开头的 /。其中 {value} 会替换为格式化后的最终收益。
快捷按钮
额外按钮位于界面最下方,对应 extra-button 下的 0-8 编号。
type 格式 | 功能 |
|---|---|
get | 取回出售区内的全部物品 |
put:<Lore文本> | 放入 Lore 中包含指定文本的物品 |
put:not-lore | 放入没有物品元数据的物品 |
putid:<物品列表> | 按物品 ID 和子 ID 放入物品 |
putid 可使用逗号分隔多个物品,例如 putid:1,2,3,4:0,5:0。未填写子 ID 时按 0 处理。
快捷放入和取回会在目标背包空间不足时停止,避免继续移动后续物品。
清空出售区
当 clear-item-button 设置为 true 时,玩家可以对出售按钮使用 Shift + 右键,直接删除出售区 0-35 槽位内的全部物品。
该操作不会计算价格、不会发放货币,也不会返还被清空的物品。关闭此配置后,Shift + 右键不会触发清空功能。
指令
主命令:/lsell
| 指令 | 执行者 | 条件 | 说明 |
|---|---|---|---|
/lsell | 管理员 | 需要 OP | 显示插件指令提示 |
/lsell open | 玩家 | 代码未检查权限节点 | 打开出售界面 |
/lsell reload | 控制台或玩家 | 需要 OP | 重载配置、货币、额外按钮和出售预设 |
插件没有在 plugin.yml 中声明权限节点。管理操作直接通过 OP 状态判断。
只有 OP 玩家可以看到 open 和 reload 的 Tab 补全提示,但 /lsell open 的执行逻辑本身仅检查发送者是否为玩家。
API
插件提供 LySellAPI 接口:
java
boolean trySell(Player player, ItemStack item, int amount);该方法会根据当前配置尝试出售指定物品:
player:接收收益和出售消息的玩家。item:需要检查价格的物品。amount:参与价格计算的数量。- 返回
true:物品命中了预设价格或 Lore 价格。 - 返回
false:物品没有可用价格,或命中了禁止出售 Lore。
此方法负责计算并发放收益,但不会自动从玩家背包中删除传入的物品。调用方需要自行处理物品扣除,并根据返回值决定是否执行扣除操作。
使用限制
- 禁止出售规则只检查 Lore 是否包含配置文本,属于包含匹配,不是正则匹配。
- Lore 价格正则的匹配结果必须是可解析的数字。
- PlayerPoints 发放结果需要是整数,通常应使用
%.0f。 - 预设价格只匹配没有物品元数据的物品;带名称、Lore 或其他物品元数据的物品不会命中预设价格。
- 出售区最多容纳 36 格物品。
- 额外按钮只接受
0-8,超出范围的编号不会加载。 - 收益统计与按钮显示每 20 Tick 刷新一次,即通常约 1 秒一次。
- 出售按钮和额外按钮都有 1 秒点击冷却。
相关页面
| 页面 | 内容 |
|---|---|
| 配置说明 | config.yml 全部配置键、货币、按钮与出售预设 |
| 出售规则 | 价格提取、公式计算、出售判定和货币发放机制 |
| API | LySellAPI 获取方式与 trySell 方法说明 |
| 常见问题 | 无法出售、收益异常、依赖缺失和物品返还问题 |
| 更新日志 | 插件版本更新记录 |