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-version 为 1.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 玩家可以看到 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 全部配置键、货币、按钮与出售预设
出售规则价格提取、公式计算、出售判定和货币发放机制
APILySellAPI 获取方式与 trySell 方法说明
常见问题无法出售、收益异常、依赖缺失和物品返还问题
更新日志插件版本更新记录