PShop是一个商店插件,服主可以在商店中添加固定的售卖和回收物品,支持addon物品,带有箱子商店(仿QuickShop-Hikari)等
前置组件
必选
LeviLaminaLegacyScriptEngineGMLIBGMLIB-LegacyRemoteCallApiiListenAttentivelyiListenAttentively-LseExportSMoney- 此插件需要LL3的LSE-nodejs加载器下运行,使用前请确保您已安装了该加载器
安装
- 将文件夹
PShop解压到此路径下:BDS/plugins/ - 更新插件请在保存必要配置文件删除原PShop插件配置目录
Planet/PShop/重新启动自动生成配置文件
注册指令说明
/shop
/shop (gui) - 打开总GUI/shop buy - 打开购买物品GUI/shop sell - 打开出售物品GUI
/chestshop
/chestshop mgr - 打开面向商店的配置界面/chestshop delete - 删除商店/chestshop reload - 重载箱子商店
/pshop
/pshop reload - 重新加载配置文件/pshop version - 查询版本信息
配置文件说明
更改配置文件请注意 JSON 文件格式,不推荐使用记事本修改配置文件!
本插件有且仅有3个配置文件
config.json文件
js
{
"version": "4.0.0",//插件版本
"commands": {
"shop": {
"cmd": "shop",//系统商店指令
"desc": "PShop-系统商店"//指令描述
},
"chestshop": {
"cmd": "chestshop",//箱子商店管理与快捷命令指令
"desc": "PShop-箱子商店管理与快捷命令"
},
"pshop": {
"cmd": "pshop",//主命令指令
"desc": "PShop-主命令"
}
},
"prefix": {
"shop": "[系统商店]",//商店系统前缀
"chestshop": "[箱子商店]"//箱子商店前缀
},
"enable": {
"shop": true,//是否启用系统商店
"chestshop": true,//是否启用箱子商店
"log": true//是否启用log
},
"icon": {
"default": "textures/blocks/missing_tile",//默认图标
"shop:buy": "textures/ui/MCoin",//购买按钮图标
"shop:sell": "textures/items/emerald",//出售按钮图标
"form:back": "textures/ui/icon_import",//返回按钮图标
"form:confirm": "textures/ui/check",//确认按钮图标
"form:cancel": "textures/ui/cancel",//取消按钮图标
"form:prev": "textures/ui/arrow_left",//上一页按钮图标
"form:next": "textures/ui/arrow_right"//下一页按钮图标
},//GUI按钮图标,支持材质包路径
"item_per_page": 6,//GUI每页显示商品数量
"shop_ignore_aux_default": false,//系统商店默认是否忽略物品数据值(Aux)
"textures_path": {
"default": "textures/blocks/missing_tile"//默认材质路径
},
"nbt": {
"MatchBucketEntityCustomName": false,//是否匹配桶装实体的自定义名称,建议关闭
"MatchRepairCost": false//是否匹配修理的花费,建议保持关闭
},
"gamelang": "zh_CN",//游戏语言,匹配bds\resource_packs\vanilla\texts\下的xxx.lang文件名
"itemtranslateCode": "zh_CN",//物品翻译代码
"protectChestAndSign": true,//是否保护商店箱子和木牌免受破坏
"banitems": [
"minecraft:bedrock"
],//不允许交易的物品id列表,可填多个,如["minecraft:bedrock","minecraft:dirt"]
"update_url": "http://update.mcmap.top/?name=PShop",//更新链接,建议保持默认
"chestshop_sounds": {
"success": {
"sound": "random.orb",//交易成功音效
"volume": 1,//音量
"pitch": 1//音调
},
"fail": {
"sound": "mob.villager.no",//交易失败音效
"volume": 1,
"pitch": 1
},
"create": {
"sound": "random.levelup",//商店创建成功音效
"volume": 1,
"pitch": 1
},
"click": {
"sound": "note.hat",//点击音效
"volume": 0.8,
"pitch": 1
},
"pending": {
"sound": "note.pling",//等待输入音效
"volume": 1,
"pitch": 1.2
},
"timeout": {
"sound": "note.bass",//超时音效
"volume": 1,
"pitch": 0.8
}
},//箱子商店音效配置,每组含sound(音效名)、volume(音量)、pitch(音调)
"keys.cancel": [
"c",
"取消",
"q"
]//聊天栏取消交互的关键词列表
}lang.json文件
js
{
"update.NewVersion": "检测到{name}的新版本:{version}",
"update.Notice": "更新公告:{notice}",
"update.Download": "下载链接:{url}",
"log.update.error": "检查更新时出现错误:错误码:{code}错误:{result}",
"command.ori.typeerror": "请不要在命令方块或控制台使用PShop的命令",
"keys.or": "'或'",
"form.tip": "提示",
"form.back": "返回",
"form.cancel": "取消",
"form.confirm": "确认",
"form.action.do": "干",
"form.action.buy": "买",
"form.action.sell": "卖",
"form.group.content": "第 {page}/{totalPages} 页",
"form.prev_page": "上一页",
"form.next_page": "下一页",
"form.shop.main.title": "{prefix.shop}系统商店-主菜单",
"form.shop.main.content": "来干点什么?",
"form.shop.main.button.buy": "购买",
"form.shop.main.button.sell": "出售",
"form.shop.group.title": "{prefix.shop}{name}§r",
"form.shop.group.content": "来{action}点什么?",
"form.item.content.shop": "该商品信息如下:",
"form.item.content.shop.name": "{prefix.type}名称:{prefix.end}{iname}§r",
"form.item.content.shop.price": "{prefix.type}价格:{prefix.end}{price}/个",
"form.item.content.name": "({name}§r)",
"form.item.content.count": " x{count}",
"form.item.content.prefix.step": " ",
"form.item.content.damage": "{prefix.type}耐久:{prefix.end}{damage}/{maxdamage}",
"form.item.name": "{prefix.type}物品名称:{prefix.end}{name}§r",
"form.item.content.lore.step": "|{text}",
"form.item.content.ench.step": "#{ench}",
"form.item.potion": "{prefix.type}效果:{prefix.end}{potion}.",
"form.item.items": "{prefix.type}含有物品:{prefix.end}",
"form.item.items.step": "{prefix.slot}[{slot}格]{prefix.end}",
"form.item.items.step.zb": "┗━━",
"form.shop.buy.item.title": "{prefix.shop}购买商品:{name}",
"form.shop.buy.item.count": "输入数量,你有{plmoney}{moneyname},可购买{count}个,留空返回",
"form.shop.buy.item.count.max": "你钱不够!你无法购买{input}个!你最多只能购买:{maxcount}个",
"form.shop.buy.item.confirm": "你确定要购买{count}个{iname}吗?\n这将会花费{totalCost}{moneyname},你将会剩余{plmoney}{moneyname}",
"form.shop.buy.item.success": "购买成功!你获得了{plcount}{iname}!\n当前余额:{plmoney}{moneyname}",
"form.shop.buy.item.fail": "购买失败!你剩余{plmoney}{moneyname}",
"form.shop.sell.item.title": "{prefix.shop}出售商品:{name}",
"form.shop.sell.item.count": "输入数量,你有{count}个{iname}§r,留空返回",
"form.shop.sell.item.count.max": "你最多只能出售{maxcount}个",
"form.shop.sell.item.confirm": "你确定要出售{count}个{iname}§r吗?\n这将会获得{totalgive} {moneyname},你将会剩余{plcount}个{iname}",
"form.shop.sell.item.success": "出售成功!你获得了{totalgive}{moneyname}!\n当前余额:{plmoney}{moneyname}",
"form.shop.item.count.type": "应该输入正整数!可你输入了:{input}",
"tell.chestshop.count.type": "应该输入正整数!可你输入了:{msg}",
"tell.chestshop.count.type2": "您现在最多能够{action} {count} 个,可你却输入了:{msg}",
"tell.chestshop.moneytype": "{prefix.chestshop}价格应该为正整数,可你输入了:{input}",
"tell.chestshop.moneytype.decimal": "{prefix.chestshop} §c价格必须是大于0的有效数字(支持小数),可你输入了:{input}",
"log.shop.buy": "购买物品:{item.name} 数量:{quantity} 价格:{totalCost}",
"log.shop.sell": "出售物品:{item.name} 数量:{quantity} 价格:{totalCost}",
"prefix.ench": "§d",
"prefix.count": "§a",
"prefix.type": "§6",
"prefix.slot": "§s",
"prefix.end": "§r",
"form.chestshop.title": "{prefix.chestshop}",
"chestshop.system": "系统商店",
"chestshop.infinite": "无限",
"chestshop.info": "§u┌-----------------------------\n§u| §c商店信息:\n§u| §a所有者: §r{ownername}\n§u| §a物品信息: §r{item}\n§u| {count}\n§u| §a价格: §e{money}{moneyname}§a/个\n§u└-----------------------------",
"chestshop.info.form": "§c商店信息:\n§a所有者: §r{ownername}\n§a物品信息: §r{item}\n{count}\n§a价格: §e{money}{moneyname}§a/个",
"chestshop.info.count": "{action} §fx{count}§r",
"chestshop.info.count.null": "§c缺货§r",
"chestshop.info.count.full": "§c箱子已满!§r",
"chestshop.sign.line1": "§e{plname}§r",
"chestshop.sign.line2": "{action} §bx{count}§r",
"chestshop.sign.line2.null": "§c缺货§r",
"chestshop.sign.line2.full": "§c箱子已满!§r",
"chestshop.sign.line3": "{itemname}",
"chestshop.sign.line4": "{money}{moneyname}/个",
"chestshop.action.buy": "§a收购§r",
"chestshop.action.sell": "§a出售§r",
"chestshop.action.plbuy": "§a购买§r",
"chestshop.action.plsell": "§a出售§r",
"tell.chestshop.create.money": "{prefix.chestshop}在聊天栏输入价格: \n{prefix.chestshop}输入 '{keys.cancel}' 取消",
"tell.chestshop.exit": "{prefix.chestshop}已退出交互",
"tell.chestshop.trade": "在聊天栏输入你想要 {action} 的数量,您现在能够{action} {count} 个,输入all{action}全部物品",
"tell.chestshop.sign.notair": "告示牌所在位置:{pos}非空气方块,请你清除",
"tell.chestshop.create": "{prefix.chestshop} §a商店创建成功!",
"tell.chestshop.create.checkperm": "{prefix.chestshop} 现在请你打开箱子然后再次关闭完成创建(仅供校验权限)!",
"form.chestshop.buy.title": "{prefix.chestshop} 确认购买: {name}",
"form.chestshop.buy.confirm": "你确定要向该商店购买 {count}个 {iname} 吗?\n这将会花费 {totalCost} {moneyname}, 你的余额将剩余 {plmoney} {moneyname}",
"form.chestshop.sell.title": "{prefix.chestshop} 确认出售: {name}",
"form.chestshop.sell.confirm": "你确定要向该商店出售 {count}个 {iname} 吗?\n这将会获得 {totalgive} {moneyname}, 你的余额将变为 {plmoney} {moneyname}",
"form.chestshop.manage.title": "{prefix.chestshop} §l商店配置管理",
"form.chestshop.manage.label": "您可以在此修改您的箱子商店参数:",
"form.chestshop.manage.input.price": "商品单价",
"form.chestshop.manage.input.price.placeholder": "请输入有效数字(支持小数)",
"form.chestshop.manage.dropdown.type": "商店类型",
"form.chestshop.manage.switch.showitem": "展示悬浮物品",
"form.chestshop.manage.switch.hopper_search": "允许漏斗/矿车吸出物品",
"form.chestshop.manage.switch.hopper_push": "允许漏斗/矿车注入物品",
"tell.chestshop.manage.success": "{prefix.chestshop} §a商店配置已成功更新!",
"form.chestshop.manage.switch.delete": "§c删除该商店 (危险操作)§r",
"tell.chestshop.manage.delete.success": "{prefix.chestshop} §a商店已成功删除!",
"notice.shop.income": "{prefix.chestshop} §a[收益通知] 您位于 §e{pos} §a的商店售出了 {count}个 {itemname}!",
"notice.shop.empty": "{prefix.chestshop} §c[库存警告] 您位于 §e{pos} §c的商店(出售:{itemname}) 已经 §l脱销了§r§c,请及时补货!",
"notice.shop.full": "{prefix.chestshop} §c[空间警告] 您位于 §e{pos} §c的商店(收购:{itemname}) 已经 §l没有剩余空间了§r§c,请及时清理!",
"notice.shop.expense": "{prefix.chestshop} §e[支出通知] 您位于 §e{pos} §e的商店收购了 {count}个 {itemname},共支出 {money}{moneyname}!",
"tell.chestshop.buy.success": "{prefix.chestshop} §a购买成功! 你花费了 {totalCost}{moneyname} 购买了 {iname}, 当前余额: {plmoney}{moneyname}",
"tell.chestshop.buy.fail": "{prefix.chestshop} §c购买失败! 可能是商店库存不足或你的背包已满.",
"tell.chestshop.sell.success": "{prefix.chestshop} §a出售成功! 你出售了 {iname}, 获得了 {totalgive}{moneyname}, 当前余额: {plmoney}{moneyname}",
"tell.chestshop.sell.fail": "{prefix.chestshop} §c出售失败! 可能是商店空间已满或你的物品不足.",
"tell.chestshop.error.block": "§c无法获取箱子方块(请确保商店所在区块已加载)!",
"tell.chestshop.error.container": "§c无法访问箱子容器(该方块可能已不是箱子或被破坏)!",
"tell.chestshop.error.system": "§c交易期间发生系统错误,请联系管理员查看控制台日志!",
"form.chestshop.manage.label.op": "\n§d[OP]§r 当前所有者: §e{ownername}§r\n(UUID: {uuid})",
"form.chestshop.manage.switch.system_shop": "§d[OP]§r 设为系统商店 (无限库存/无视所有者)",
"log.chestshop.create": "创建箱子商店 位置:{pos} 物品:{item.name} 价格:{money}",
"log.chestshop.buy": "在箱子商店购买 位置:{pos} 店主:{owner} 物品:{item.name} 数量:{quantity} 总花费:{totalCost}",
"log.chestshop.sell": "向箱子商店出售 位置:{pos} 店主:{owner} 物品:{item.name} 数量:{quantity} 总收益:{totalCost}",
"log.chestshop.delete": "删除箱子商店 位置:{pos} ID:{shopid}",
"command.chestshop.reload.success": "§a[PShop] 数据重载成功!",
"command.chestshop.reload.fail": "§c[PShop] 数据重载失败!",
"command.chestshop.permission.denied": "§c权限不足!你没有执行此操作的权限.",
"command.chestshop.target.invalid": "§c错误:请准心对准您的箱子商店或木牌再执行此命令!",
"command.chestshop.target.not_shop": "§c错误:该方块不是有效的箱子商店!"
}shopdata.json文件
js
{
"Buy": [//购买配置
{
"name": "示例",//名字
"type": "group",//类别,仅有item和group可选
"image": "",//图片,详见:和config的icon一样
"data": [//数据,item模式使用[{数据}],group使用[{数据},{数据}]
{
"name": "示例(苹果)",
"type": "item",
"image": "",
"data": [
{
"id": "minecraft:apple",//物品id,要有命名空间前缀
"aux": 0,//数据值
"money": 10//单个的价格
}
]
}
]
},
{
"name": "示例2",
"type": "group",
"image": "",
"data": [
{
"name": "盒子",
"type": "item",
"image": "",
"data": [
{
"snbt": true,//SNBT模式,设为true时使用snbtstr定义物品
"snbtstr": "{\"Block\":{\"name\":\"minecraft:undyed_shulker_box\",...},\"Count\":1b,...}",//SNBT物品字符串,支持附魔、自定义名称、容器内物品等复杂NBT
"money": 10
}
]
}
]
}
],
"Sell": [//出售配置,同Buy
{
"name": "示例",
"type": "group",
"image": "",
"data": [
{
"name": "示例(苹果)",
"type": "item",
"image": "",
"data": [
{
"snbt": true,//SNBT模式也支持出售配置
"snbtstr": "{\"Count\":64b,\"Damage\":0s,\"Name\":\"minecraft:apple\",\"WasPickedUp\":0b}",
"money": 10
}
]
}
]
},
{
"name": "示例2",
"type": "group",
"image": "",
"data": [
{
"name": "示例(羊毛)",
"type": "item",
"image": "",
"data": [
{
"id": "minecraft:white_wool",
"aux": 0,
"auxStrict": true,//是否严格匹配数据值,启用后仅匹配指定aux的物品
"money": 10
}
]
}
]
}
]
}商品配置支持两种模式:
- 普通模式 - 使用
id+aux+money定义简单物品,出售时可使用auxStrict严格匹配数据值- SNBT模式 - 设
"snbt": true,通过snbtstr定义含附魔、自定义名称、容器物品等复杂NBT的物品
导出接口
目前没有导出接口哦:(((