
Q Shop 附加组件 出售箱
QShop的自动售卖容器,可按计划或当GUI关闭时出售储存的物品,并付款给配置的所有者。
QShop Sell Box
QShop 的附属模组。
QShop Sell Box 是适用于 QShop 的 Forge 1.20.1 附属模组。它为使用 QShop 作为货币系统的服务器添加了一个专用的自动出售容器。
将物品放入售货箱,选择收益归属的玩家,并选择何时出售容器内的物品。售货箱可以按可配置的时间间隔自动出售,也可以在关闭 GUI 时出售其内容物。收益会存入所选归属玩家的 QShop 钱包,即使该玩家离线也会存入。
该模组旨在遵循原版容器界面的视觉和交互风格。
工作原理
- 将 QShop Sell Box 放置在世界中。
- 打开容器并将可出售物品放入其 27 个存储槽位。
- 打开设置标签页,从已加入服务器的玩家列表中选择一个归属玩家。
- 选择一种出售模式:
- 自动间隔: 在配置的秒、分钟、小时或游戏日之后出售存储的物品。
- 关闭 GUI 时出售: 在容器 GUI 关闭时出售存储的物品。
- 每个物品堆的最终价格在服务端计算,收益使用所选货币存入。


功能
- 专用的 27 格自动出售容器。
- 用于存储物品的原版风格物品栏标签页。
- 原版风格的归属玩家与设置标签页。
- 可从所有记录为已加入服务器的玩家中选择归属玩家。
- 基于 UUID 的归属关系,因此玩家改名不会改变未来收益的去向。
- 显示归属玩家的在线与离线状态。
- 每个容器独立的出售模式和间隔设置。
- 支持秒、分钟、小时和游戏日的间隔单位。
- 关闭 GUI 时出售模式,用于手动批量出售。
- 离线收益通过 QShop 的 UUID 货币 API 存储,并在归属玩家登录时可用。
- 可选的 Action Bar 和聊天栏出售通知及离线收益同步通知。
- 可选的物品价格提示。
- 服务端价格计算,确保提示与交易结果一致。
- 使用 QShop 货币 ID 和注册显示名称的可配置货币。
- 静态物品价格和针对 NBT 的精确价格规则。
- 通用 NBT 倍率,可匹配任何物品上的多个字段。
- KubeJS 动态定价,可访问物品 ID、堆叠数量、耐久值、完整嵌套 NBT 和物品标签。
- EMI 兼容性,防止隐藏的 EMI 条目拦截售货箱设置界面。
- 木桶风格的方块属性、声音、硬度、岩浆点燃和斧头挖掘行为。
- 方块被破坏时容器内容物会掉落。
前置要求
- Minecraft 1.20.1
- Forge 47.x
- QShop 1.1.0 或更高版本(2.0 以下)
- KubeJS 是可选的。仅在需要 KubeJS 价格脚本时才需要。
- EMI 是可选的。仅在存在 EMI 时启用兼容层。
QShop Sell Box 是一个附属模组,不提供独立的货币系统。必须安装 QShop,模组才能加载并存入收益。
安装
- 安装带有 Forge 47.x 的 Minecraft 1.20.1。
- 安装所需的 QShop 版本。
- 将
qshop-sellbox-1.0.2.jar放入服务端和客户端的mods文件夹。 - 启动游戏一次以生成通用配置文件。
该模组应同时安装在服务端和打开 GUI 的客户端上。服务端对归属、出售、价格和货币存入具有权威性。
配置
Forge COMMON 配置文件生成于:
config/qshop_sellbox-common.toml示例:
defaultCurrency = "coins"
priceRules = [
"minecraft:iron_ingot|2|coins",
"minecraft:diamond|100|coins",
"minecraft:diamond|120|coins|{rarity:rare}"
]
nbtMultipliers = [
"{rarity:rare}|1.2",
"{quality:refined}|1.1",
"minecraft:diamond|{rarity:rare,quality:refined}|1.15"
]
showPriceTooltip = true
debugDynamicPrice = false静态价格规则
priceRules 使用以下格式:
物品ID|价格|货币ID[|NBT]示例:
priceRules = [
"minecraft:iron_ingot|2|coins",
"minecraft:diamond|100|coins",
"minecraft:diamond|150|coins|{rarity:'rare'}"
]NBT 条件按子集匹配。物品必须具有指定的字段和值才能使用该规则。
通用 NBT 倍率
nbtMultipliers 支持适用于所有物品的规则或适用于单个物品的规则:
NBT|倍率
物品ID|NBT|倍率示例:
nbtMultipliers = [
"{rarity:'rare'}|1.2",
"{quality:'refined'}|1.1",
"minecraft:diamond|{rarity:'rare',quality:'refined'}|1.15"
]多个匹配的倍率会一起应用。例如,同时匹配 rarity:rare 和 quality:refined 的物品会获得 1.2 * 1.1 的倍率。
当注册了动态价格回调时,KubeJS 动态定价优先于静态价格规则。
KubeJS 动态定价
KubeJS 价格回调在服务端运行,并通过 event.item 接收完整的物品堆栈。回调应返回单件物品的价格和 QShop 货币 ID。
SellBox.price(event => {
const item = event.item
const nbt = item.nbt
let price = 1000
if (nbt && nbt.rarity == 'rare') {
price *= 1.2
}
if (item.maxDamage > 0) {
price *= 1.1
}
if (item.hasTag('minecards:cards')) {
price *= 2
}
return {
price: price,
currency: 'coins'
}
})返回的 price 是单价。售货箱会将其乘以从堆叠中移除的物品数量,因此回调不应将结果乘以 event.item.count。
可用的物品属性
event.item 提供:
id:带命名空间的物品 ID,例如minecraft:diamond。count:当前堆叠数量。damage:当前耐久损耗值。maxDamage:最大耐久值,对于不可损坏物品为0。isDamaged:物品当前是否具有耐久损耗。nbt:完整的物品 NBT,转换为 JavaScript 对象、数组、字符串和数字。hasTag(tagId):使用服务端当前的物品标签注册表检查物品标签。
标签参数可以带或不带 # 前缀:
item.hasTag('minecards:cards')
item.hasTag('#forge:tools')可以直接读取嵌套的 NBT 字段:
const rarity = event.item.nbt?.rarity
const quality = event.item.nbt?.quality_food?.quality
const attachment = event.item.nbt?.AttachmentEXTENDED_MAG?.tag?.AttachmentId当应使用配置的 defaultCurrency 时,回调可以只返回一个数字:
SellBox.price(event => {
return 100
})对于自定义货币,返回一个对象:
SellBox.price(event => {
return {
price: 100,
currency: 'base_money'
}
})返回的货币必须由 QShop 注册。提示、Action Bar 消息、聊天消息和离线存款在可用时使用货币的注册显示名称。
更改 KubeJS 价格脚本后,请使用 KubeJS 的服务端重载流程。安装或升级 Java 模组仍需要重启游戏或服务器。
通知和提示
设置标签页为以下各项提供独立复选框:
- Action Bar 出售通知。
- 聊天栏出售通知。
当归属玩家离线时,收益会写入基于 UUID 的钱包数据。当归属玩家登录时,待处理的收益会被存入,并显示所选的通知类型。
价格提示由 showPriceTooltip 控制。动态价格从服务端查询,因此为 NBT 定制物品显示的价格与出售交易中使用的价格一致。
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。