Skip to content

出售 LySell

LySell 是一款物品出售界面插件。玩家可将物品放入界面,插件根据物品 Lore 中的价格信息或预设价格计算收益,再通过 Vault、PlayerPoints 或控制台指令发放对应货币。

插件支持配置多种货币、价格计算公式、禁止出售 Lore、快捷放入与取回按钮,并提供单件物品出售 API。

插件信息

项目内容
插件名LySell
插件版本2.0.6
作者离渊
主命令/lsell
Java 版本Java 8
API 声明1.13
编译 APIPaper 1.16.5-R0.1-SNAPSHOT
软依赖PlaceholderAPI、PlayerPoints、Vault

支持版本

项目没有声明明确的最低版本和最高版本,现有代码可确认以下兼容信息:

  • plugin.yml 中的 api-version1.13
  • 项目使用 Paper 1.16.5-R0.1-SNAPSHOT API 编译。
  • 材质工具同时支持英文材质名、旧版数字 ID 和子 ID。
  • 项目包含低于 Minecraft 1.13 的旧版材质兼容逻辑。
  • 是否能在其他版本正常运行,需要以实际服务端测试结果为准。

依赖说明

插件将 PlaceholderAPI、PlayerPoints 和 Vault 声明为软依赖。是否必须安装取决于使用的货币发放方式。

依赖使用场景说明
Vaultgive-from: 'Vault'用于向玩家的 Vault 经济账户存入金币,同时需要服务器存在可用的经济插件
PlayerPointsgive-from: 'PlayerPoints'用于向玩家发放整数点券
PlaceholderAPI自定义指令发放在控制台执行发放指令前解析玩家变量,例如 %player_name%

如果配置了某种发放方式,请安装并正确启用对应依赖。插件启动时会在控制台输出 PlayerPoints 和 Vault 的检测结果。

项目中没有 MySQL 存储功能,也没有 LyMySQLCore 依赖。

出售玩法

出售界面共有 54 个槽位,按用途分为以下区域:

槽位用途
0-35玩家放置待出售物品的区域
36-44界面分隔区域,其中 40 为出售按钮
45-53额外按钮区域,对应配置编号 0-8

玩家点击出售按钮后,插件会检查出售区内的每组物品:

  1. 检查物品是否命中禁止出售 Lore。
  2. 检查无物品元数据的物品是否存在预设价格。
  3. 检查物品 Lore 是否命中货币价格正则。
  4. 按物品数量累加价格,并执行货币公式。
  5. 按货币配置的格式保留小数位。
  6. 删除能够出售的物品并发放对应收益。
  7. 在控制台记录玩家、物品、数量和收益信息。

无法匹配任何价格的物品不会被删除。玩家关闭界面时,出售区内剩余物品会自动返回玩家背包。

核心功能

功能说明
出售界面玩家可将物品放入 36 格出售区域,再统一结算
实时收益统计出售按钮每秒刷新一次,显示当前物品能够获得的各类货币
Lore 价格提取使用正则表达式从物品 Lore 中提取数字价格
多货币结算一个物品可通过不同 Lore 行匹配不同货币
价格计算公式支持使用 {value} 参与 +-*/ 和括号运算
数量累加提取的单件价格会乘以物品堆叠数量
数值格式化每种货币可独立配置整数或指定小数位格式
Vault 发放将结算结果存入玩家的 Vault 经济账户
PlayerPoints 发放将结算结果作为整数点券发放
自定义指令发放以控制台身份执行配置的发放指令,并解析 PlaceholderAPI 变量
预设价格为无物品元数据的原版物品配置固定售价
禁止出售 LoreLore 包含指定文本时,不统计也不出售该物品
快捷放入按 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 玩家可以看到 openreload 的 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 全部配置键、货币、按钮与出售预设
出售规则价格提取、公式计算、出售判定和货币发放机制
APILySellAPI 获取方式与 trySell 方法说明
常见问题无法出售、收益异常、依赖缺失和物品返还问题
更新日志插件版本更新记录