本帖最后由 innc 于 2020-7-15 11:58 编辑
1.5版本的所有更新内容1.5.2版本:
1. 现在同时支持打掉箱子和打掉牌子来破坏商店
2. item-names.yml可以被/qs r重新加载,不用再重启插件就可以直接加载
3. 优化一些代码逻辑
1.5.1版本:
1. 支持用权限节点来限制创建商店个数(格式: quickshopx.create.<数量>),不显示指定的话默认是不会限制数量的(也可以设为0)
2. 修复在创建商店时,如果手上为空会创建一个空牌子的问题
1.5版本:
1. 修正英文语言中4个单词问题和语法问题
2. 调整控制面板布局(把相似的功能集中到一起)
3. 所有的语言相关配置文件大幅重构(风格变更,参考了Java版Essentials插件的置文件), 不与以前版本兼容,且全部由文件夹来管理
4. 删除所有语言相关配置文件占位符中$符号,直接使用{placeholder}形式
5. 调整商店数据文件(shops.yml)存储方式,根据世界进行文件夹分类(插件启动时会自动转换,无需手动配置)
7. 默认不再附带物品命名文件(item-names.yml)如有需要可手动下载并放到插件数据文件夹
8. 需要手动删除enchantments.yml/language.yml/signTexts.yml三个文件
9. 商店主人可以正常与自己的商店进行交易
10. 移除支持大箱子的计划,但依旧不影响当成两个小箱子使用
11. 修复英文语言文件中UI界面里的表达文字和中文语言不一致的问题
12. 完善英文版的"附魔命名"(跟随Java版命名)
13. config.yml文件进行了重构,并且增加了语言选项(可用项: cn或者en)
|
相对原版QuickShop的主要改进:
1. 创建商店不再需要在箱子上额外放置牌子,牌子的放置由插件接管,创建商店的方法和PC版一致,轻轻的饶一下输入价格即可
2. 增加牌子语言文件,几乎所有能见到的文字(98%)都可以自定义(包括牌子上的文字)
3. 在牌子上增加了商店库存的显示(动态更新,包括使用漏斗传输物品)
4. 增加了商店保护机制,包括对爆炸、活塞、燃烧做了相应的处理,不会出现箱子消失的情况
5. 完善了全息物品跨世界的问题,多世界的情况下也能很好的工作,发包操作放到了异步线程进行管理
6. 自带了中文物品名的config文件(基于Java版的物品命名)
7. 语言文件占位符由{}变化成{ITEM_NAME},可以自由改变占位符的前后顺序
8. 对商店增加了UI界面的支持,同时支持[聊天栏操作、聊天栏和UI操作共存、只有UI操作],可以自由配置
9. 对插件本身的配置也可以使用UI来配置(使用指令打开插件的控制面板)
10. 增加了对Residence插件的交互,更加进一步完善对商店的保护
11. QuickShop的"unlimited"概念变成了"server shop",但实际功能没有变化
12. 创造模式可以正常的创建商店(按住shift创建商店,也就是潜行模式下)
13. 更多可以查阅README
食用指南(For 1.5.2版本)
Android: 轻轻地饶一下箱子,但不要打掉箱子,然后切换到要上架的物品到手上,最后直接在聊天栏输入价格即可
Windows10: 左键点击箱子,然后切换到要上架的物品到手上,最后直接在聊天栏输入价格即可
在创造模式下: 需要在潜行状态下直接打掉箱子然后按上面的流程创建商店
-- 交易 --
插件支持三种方式: 聊天栏、界面、聊天栏和界面
聊天栏: 在点击商店的牌子之后直接输入要购买的数量即可
界面: 直接点击商店的牌子之后打开界面, 按界面提示进行购买出售即可
聊天栏和界面: 同时兼顾两者,双击牌子可以打开界面,单击牌子可以使用聊天栏操作(推荐此方式,小批量购买可以用UI界面,大批量购买可以用聊天栏)
-- 修改 --
聊天栏: 点击牌子后使用下方的指令进行修改商店即可
界面: 直接点击商店的牌子之后打开界面, 点击"打开商店设置界面"后按提示进行修改
聊天栏和界面: 可以同时使用聊天栏的方式和界面的方式,任选其一即可
-- 破坏商店 --
打掉商店的牌子或者商店的箱子
特别说明: 在领地内拥有build权限(也就是同时拥有放置和破坏权限)的人也可以打开商店箱子和破坏商店
|
配置指南(For 1.5.1版本)
config.yml
# 插件的配置文件版本,没事不要更改
version: 2
# 插件使用的语言,如果这里填写的语言在lang文件夹找不到是会报错的,目前只提供了en和cn,可以加入自定义语言文件进去(只要命名符合规范)
language: cn
# 商店的交互方式(原formOperate),请参考 食用指南 -> 交易 部分 ,可用的值: (ChatBar|Both|Interface)
interactionWay: Both
#与商店的交互时间,单位ms,也就是说点击商店需要输入价格,超过5秒以后输入的信息不会被当做交易数量而是会被当做普通聊天信息了
interactionTime: 5000
# 全系物品每秒最大发包量,跟随实际带宽填写,最大1000,如果出现全系物品偏移的情况请尝试调到30~100之间
packetSendLimit: 100
# 是否与领地插件交互(需要Residence插件存在),这个选项也是其它和Residence插件相关机制的总开关
linkWithResidencePlugin: true
# 是否只能在领地内创建商店(依赖linkWithResidencePlugin)
createShopInResidenceOnly: true
# 在领地内不会检查OP的build权限(平时推荐关闭,排查问题时再打开)(依赖linkWithResidencePlugin)
ignoreOpBuildPermission: false
# 漏斗是否只在领地内才可以与商店的箱子传输物品(普通箱子不受影响)(推荐打开)(依赖linkWithResidencePlugin)
hopperLimit: true
# 是否显示商店上方的全系物品
hologramItem: true
# 是否只有在潜行模式下才可以破坏商店(推荐关闭)
snakeModeDestroyShopOnly: false
#是否使用自定义物品命名,如果打开,物品显示的名称以item-name.yml为准,如果关闭则以Nukkit自带为准(英文)(依赖item-names.yml文件)
useCustomItemNames: true
# 调试(不建议开启)
debug: false
|
item-names.yml
自定义物品命名文件(跟随Java版命名),从1.5版本开始不再自带,需要手动下载并放到插件文件夹中(不要修改文件名)并使用/qs r重新加载,如果找到这个文件后台会有提示信息,随后在打开使用自定义物品命名开关即可,不然是不会生效的
|
插件指令
指令 | 描述 | 权限 |
/qs help(h) | 显示帮助信息 | player |
/qs buy(b) | 改变为购买类型的商店 | player |
/qs sell(s) | 改变为出售类型的商店 | player |
/qs price(p) <price> | 改变商店的交易价格 | player |
/qs server(se) | 改变商店为系统商店(ver1.3+) | op |
/qs version(v) | 显示插件的版本信息 | op |
/qs controlpanel(cp) | 显示插件的控制面板 | op |
/qs reload(r) | 重新加载插件的配置文件 | op |
更新日志(超长警告)#1.0.1:
1. 修改插件控制面板标题中显示的配置文件版本为插件版本
2. 添加商店破坏条件:是否在潜行下才能破坏,这个功能可以由配置文件进行控制
3. 优化部分默认语言文本
#1.1:
1. 优化语言配置文件读取机制,缺少的语言会自动补齐
2. 添加可监听的插件事件PlayerBuyEveny、PlayerSellEvent、PlayerCreateShopEvent、PlayerRemoveShopEvent
3. 交换商店店主页面的"打开商店设置面板"和"打开商店交易面板"的按钮的位置
4. 优化所有金额的显示格式
5. 修正"干海带"物品名称显示成"海泡菜"的问题
6. 修复聊天栏中输入价格时无法输入小数的问题
7. 添加配置文件中也会写入物品名称,用于辅助调试
8. 修改"系统商店"的概念为"服务器商店"
9. 修正一处语言文件的错误
10. 修复出售商店最大交易量计算不正确的问题
11. 修改商店主人显示信息
12. 修改"控制面板"中的"全息物品每秒最大发包量"的最大值由100提升到500
#1.2:
1. 移除了店主面板里面的"移除商店"按钮
2. 修复了插件事件无法触发的问题
3. 增加了对漏斗补货机制中牌子文字显示不更新的问题
4. 添加了对非商店主人或在领地内时没有build权限的人的商店箱子保护机制(不让他们打开)
5. 调整了修改商店主人的功能只能由OP使用
6. 修改"控制面板"中的"全息物品每秒最大发包量"的最大值由500提升到800
7. 增加了针对没有打开商店箱子权限时的提示(在语言文件里)
#1.2.1:
1. 修复了在领地内时有build权限却提示没有build权限而导致无法打开商店箱子的问题
2. 修复了plugin.yml文件中插件版本显示不正确的问题
#1.2.2:
1. 修复了交易面板和店主面板Title显示不正确的问题
#1.2.3:
1. 修复了取消了交易后等待交易数量输入的过程不会超时的问题(会导致把与商店交互后的第一条聊天信息作为交易数量处理)
2. 修复了对NBT物品的判断
3. 店主现在可以通过聊天栏来与自己的商店交易了(但不会有文字提示,但仍然可以交易)
4. 完善部分带有meta的物品命名显示(需要itemName.yml文件重新生成)
5. 修复大箱子报错的问题
6. 最大每秒发包由800提升至1000
#1.2.5:
1. 漏斗补货在领地外默认被禁用,防止他人使用漏斗窃取物品,领地内可以正常使用没有限制,可以由config.yml配置
2. 新增了'使用自定义物品命名'配置项,默认开启,开启会使用itemName.yml中的命名,关闭会使用Nukkit的命名
3. 添加了英文语言文件(language.yml和signText.yml)
4. 这个版本更新需要删除language.yml让其从新生成
5. 修复语言文件无法被/qs reload重载的问题
#1.3:
1. 支持NBT(附魔, Lore, CustomName)特性(物品上的CustomName不受"使用自定义物品命名"的影响,仍然会被显示,且会把原有的名字代替)
3. 修复always模式下商店牌子无法破坏的问题
4. 修复在"交互超时"时间以内创建商店会一起触发与上一次的商店的购买行为
5. 这个版本更新需要删除language.yml让其从新生成(记得备份,修改了 IM_SHOP_INFO_SHOW, FORM_TRADING__SHOP_INFO, FORM_MASTER__CONTENT, 以及新增了部分语言(在文件开头))
6. 修改/qs unlimited指令变为/qs server,功能不变
7. 修改美化signText.yml默认配色
#1.3.1:
1. 添加部分具有Damage值的物品的中文命名(需要删除itemName.yml并重启服务器来生效)
版本的重大的Bug,具体表现为在x轴坐标为负数的地方创建商店会导致所有玩家上线卡死然后被请出服务器,问题已定位,是构建实体UID时算法的问题。1.4版本中已经修复,在此特别感谢 紫凝蓝枫 提出的反馈!
#1.4:
1. 美化与QuickShop同时加载时的提示
2. 修复商店x轴坐标小于0时玩家登录卡住然后被踢出的问题
3. 美化部分中文语言文件(需要删除language.yml并重启服务器)
4. 修复一个潜在的bug
#1.4.1:
1. 调整控制面板的布局(调试按钮一般情况下不要打开)
2. 彻底修复商店x轴坐标或者y轴坐标小于0时玩家登录卡住然后被踢出的问题(实体eid冲突问题),感谢 szzz666 的反馈,(这次直接采用采用配置文件存储随机生成的id)
3. 美化配置文件的common字段带有颜色符号的问题
4. 去除一些代码注释
5. 建议删除language.yml重新生成,否则控制面板的"调试"开关文字可能无法正常显示,但不影响使用,如果有修改这个文件建议先备份
另外这次更新极其建议先备份shops.yml文件,升级后确认可以正常并且功能可以正常工作后再删除
#1.5:
1. 修正英文语言中4个单词问题和语法问题
2. 调整控制面板布局(把相似的功能集中到一起)
3. 所有的语言相关配置文件大幅重构(风格变更,参考了Java版Essentials插件的置文件), 不与以前版本兼容,且全部由文件夹来管理
4. 删除所有语言相关配置文件占位符中$符号,直接使用{placeholder}形式
5. 调整商店数据文件(shops.yml)存储方式,根据世界进行文件夹分类(插件启动时会自动转换,无需手动配置)
7. 默认不再附带物品命名文件(item-names.yml)如有需要可手动下载并放到插件数据文件夹
8. 需要手动删除enchantments.yml/language.yml/signTexts.yml三个文件
9. 商店主人可以正常与自己的商店进行交易
10. 移除支持大箱子的计划,但依旧不影响当成两个小箱子使用
11. 修复英文语言文件中UI界面里的表达文字和中文语言不一致的问题
12. 完善英文版的"附魔命名"(跟随Java版命名)
13. config.yml文件进行了重构,并且增加了语言选项(可用项: cn或者en)
#1.5.1:
1. 支持用权限节点来限制创建商店个数(格式: quickshopx.create.<数量>),不显示指定的话默认是不会限制数量的(也可以设为0)
2. 修复在创建商店时,如果手上为空会创建一个空牌子的问题
#1.5.2:
1. 现在同时支持打掉箱子和打掉牌子来破坏商店
2. item-names.yml可以被/qs r重新加载,不用再重启插件就可以直接加载
3. 优化一些代码逻辑
|
问题反馈
问题需要反馈时请按照以下格式回复(可以复制)- 1. 问题具体表现在: (比如:箱子上的全系物品发生偏移)
- 2. 后台有无报错: (有/无,如果有请贴出 完整的 完整的 完整的 完整的 报错)
- 3. 服务端版本: (master 599)(默认认为是Nukkitx, 构建分支+构建代号)
- 4. 插件版本: (1.5.10)
- (其它额外说明部分...)
复制代码如果不清楚构建分支和构建代号,请复制Nukkitx刚启动时输出的第七行文字(示例: <
此服务器正在运行 Nukkit git-e4c0f7f 版本 "" (API 1.0.9)>)填写到对应的行即可。关于报错,别直接贴个异常名字就完了(比如:
无法处理事件xxxxxxxxxxxx),把调用栈也要完整地贴出来
已知问题
1.5.1版本和
1.5.2与GAC反作弊插件有冲突,具体体现在可能是GAC对Nukkitx的底层API有所封装,导致本插件在创建商店时点击箱子时,插件会获取这个玩家身上所有的拥有的权限时,意外地返回了空指针
原因解释:
本插件之所以这么做是为了执行效率,如果为每次检查都单独构建一次字符串那么商店数量限制越多的情况下,执行效率会越低,特殊情况下会导致服务端主线程卡顿数秒(而且这个检测逻辑只能放在主线程中),这对性能非常敏感的主线程来说是完全不可接受的,虽然Java有相应优化机制,但这终究不是个合理的办法,具体可以参考我的源代码中的逻辑
目前提供两种解决方案:
1.禁用GAC插件
2.将本插件退回1.5版本,因为1.5版本没有对权限节点的检查
详细的调用栈如下:
- [main] ERROR - Throwing
- cn.nukkit.utils.EventException: null
- at cn.nukkit.plugin.MethodEventExecutor.execute(MethodEventExecutor.java:34) ~[nukkit_1.14_b626.jar:?]
- at cn.nukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:56) ~[nukkit_1.14_b626.jar:?]
- at cn.nukkit.plugin.PluginManager.callEvent(PluginManager.java:546) ~[nukkit_1.14_b626.jar:?]
- at cn.nukkit.Player.handleDataPacket(Player.java:2423) ~[nukkit_1.14_b626.jar:?]
- at cz.creeperface.nukkit.gac.player.NukkitCheatPlayer.handleDataPacket(Unknown Source) ~[?:?]
- at java.util.ArrayList.forEach(ArrayList.java:1257) [?:1.8.0_242]
- at cn.nukkit.network.Network.processPackets(Network.java:197) [nukkit_1.14_b626.jar:?]
- at cn.nukkit.network.Network.processBatch(Network.java:180) [nukkit_1.14_b626.jar:?]
- at cn.nukkit.Player.handleDataPacket(Player.java:2099) [nukkit_1.14_b626.jar:?]
- at cz.creeperface.nukkit.gac.player.NukkitCheatPlayer.handleDataPacket(Unknown Source) [%5B反作弊%5DGAC-1.0.jar:?]
- at cn.nukkit.network.RakNetInterface.handleEncapsulated(RakNetInterface.java:157) [nukkit_1.14_b626.jar:?]
- at cn.nukkit.raknet.server.ServerHandler.handlePacket(ServerHandler.java:132) [nukkit_1.14_b626.jar:?]
- at cn.nukkit.network.RakNetInterface.process(RakNetInterface.java:66) [nukkit_1.14_b626.jar:?]
- at cn.nukkit.network.Network.processInterfaces(Network.java:83) [nukkit_1.14_b626.jar:?]
- at cn.nukkit.Server.tick(Server.java:1132) [nukkit_1.14_b626.jar:?]
- at cn.nukkit.Server.tickProcessor(Server.java:911) [nukkit_1.14_b626.jar:?]
- at cn.nukkit.Server.start(Server.java:888) [nukkit_1.14_b626.jar:?]
- at cn.nukkit.Server.<init>(Server.java:573) [nukkit_1.14_b626.jar:?]
- at cn.nukkit.Nukkit.main(Nukkit.java:112) [nukkit_1.14_b626.jar:?]
- Caused by: java.lang.NullPointerException
- at cn.innc11.quickshopx.listener.CreateShopListener.createShop(CreateShopListener.java:90) ~[?:?]
- at cn.innc11.quickshopx.listener.CreateShopListener.onPlayerInteract(CreateShopListener.java:155) ~[?:?]
- at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_242]
- at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_242]
- at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_242]
- at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_242]
- at cn.nukkit.plugin.MethodEventExecutor.execute(MethodEventExecutor.java:29) ~[nukkit_1.14_b626.jar:?]
- ... 18 more
复制代码
下载
1. 需要EconomyAPI作为经济前置
2. 需要Residence作为软前置(没有Residence插件也能独立工作)
1.1:
QuickShopX-1.1.jar
(75.18 KB, 下载次数: 36)
1.2:
QuickShopX-1.2.jar
(78.48 KB, 下载次数: 29)
1.2.1:
QuickShopX-1.2.1.jar
(78.2 KB, 下载次数: 8)
1.2.3:
QuickShopX-1.2.3.jar
(124.04 KB, 下载次数: 2)
1.2.4:
QuickShopX-1.2.4.jar
(124.14 KB, 下载次数: 2)
1.2.5:
QuickShopX-1.2.5.jar
(129.06 KB, 下载次数: 116)
1.3:
QuickShopX-1.3.jar
(141.57 KB, 下载次数: 29)
1.3.1:
QuickShopX-1.3.1.jar
(140.68 KB, 下载次数: 122)
1.4:
QuickShopX-1.4.jar
(142.44 KB, 下载次数: 115)
1.4.1:
QuickShopX-1.4.1.jar
(146.61 KB, 下载次数: 448)
1.5:
Quickshopx-1.5.jar
(139.58 KB, 下载次数: 94)
1.5.1:
Quickshopx-1.5.1.jar
(140.71 KB, 下载次数: 104)
1.5.2:
Quickshopx-1.5.2.jar
(139.9 KB, 下载次数: 1424)
中文物品命名文件(Chinese, For 1.5.x):
item-names.yml
(17.44 KB, 下载次数: 909)
如果使用英语,则不需要这个文件,请直接关闭 "ControlPanel ->
useCustomItemNames"
本帖将不会再发布新版本,如没有特殊需求,建议使用我的另一个插件https://www.mcbbs.net/thread-1057414-1-1.html修复了GAC问题,加入了Land插件支持等等,只需要花几分钟将数据迁移过去就可以用
英文语言
插件默认使用中文如需英文语言请在config.yml设置即可
开源
https://github.com/innc11/QuickShopX