本帖最后由 innc 于 2020-7-15 11:58 编辑

本插件是根据wujipohhQuickShop重制而来

1.5版本的所有更新内容









相对原版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版本)




配置指南(For 1.5.1版本)
config.yml

item-names.yml





插件指令

指令 描述 权限
/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. 1. 问题具体表现在: (比如:箱子上的全系物品发生偏移)
  2. 2. 后台有无报错: (有/无,如果有请贴出 完整的 完整的 完整的 完整的 报错)
  3. 3. 服务端版本: (master 599)(默认认为是Nukkitx, 构建分支+构建代号)
  4. 4. 插件版本: (1.5.10)
  5. (其它额外说明部分...)
复制代码
如果不清楚构建分支和构建代号,请复制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版本没有对权限节点的检查

详细的调用栈如下:
  1. [main] ERROR - Throwing
  2. cn.nukkit.utils.EventException: null
  3.         at cn.nukkit.plugin.MethodEventExecutor.execute(MethodEventExecutor.java:34) ~[nukkit_1.14_b626.jar:?]
  4.         at cn.nukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:56) ~[nukkit_1.14_b626.jar:?]
  5.         at cn.nukkit.plugin.PluginManager.callEvent(PluginManager.java:546) ~[nukkit_1.14_b626.jar:?]
  6.         at cn.nukkit.Player.handleDataPacket(Player.java:2423) ~[nukkit_1.14_b626.jar:?]
  7.         at cz.creeperface.nukkit.gac.player.NukkitCheatPlayer.handleDataPacket(Unknown Source) ~[?:?]
  8.         at java.util.ArrayList.forEach(ArrayList.java:1257) [?:1.8.0_242]
  9.         at cn.nukkit.network.Network.processPackets(Network.java:197) [nukkit_1.14_b626.jar:?]
  10.         at cn.nukkit.network.Network.processBatch(Network.java:180) [nukkit_1.14_b626.jar:?]
  11.         at cn.nukkit.Player.handleDataPacket(Player.java:2099) [nukkit_1.14_b626.jar:?]
  12.         at cz.creeperface.nukkit.gac.player.NukkitCheatPlayer.handleDataPacket(Unknown Source) [%5B反作弊%5DGAC-1.0.jar:?]
  13.         at cn.nukkit.network.RakNetInterface.handleEncapsulated(RakNetInterface.java:157) [nukkit_1.14_b626.jar:?]
  14.         at cn.nukkit.raknet.server.ServerHandler.handlePacket(ServerHandler.java:132) [nukkit_1.14_b626.jar:?]
  15.         at cn.nukkit.network.RakNetInterface.process(RakNetInterface.java:66) [nukkit_1.14_b626.jar:?]
  16.         at cn.nukkit.network.Network.processInterfaces(Network.java:83) [nukkit_1.14_b626.jar:?]
  17.         at cn.nukkit.Server.tick(Server.java:1132) [nukkit_1.14_b626.jar:?]
  18.         at cn.nukkit.Server.tickProcessor(Server.java:911) [nukkit_1.14_b626.jar:?]
  19.         at cn.nukkit.Server.start(Server.java:888) [nukkit_1.14_b626.jar:?]
  20.         at cn.nukkit.Server.<init>(Server.java:573) [nukkit_1.14_b626.jar:?]
  21.         at cn.nukkit.Nukkit.main(Nukkit.java:112) [nukkit_1.14_b626.jar:?]
  22. Caused by: java.lang.NullPointerException
  23.         at cn.innc11.quickshopx.listener.CreateShopListener.createShop(CreateShopListener.java:90) ~[?:?]
  24.         at cn.innc11.quickshopx.listener.CreateShopListener.onPlayerInteract(CreateShopListener.java:155) ~[?:?]
  25.         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_242]
  26.         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_242]
  27.         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_242]
  28.         at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_242]
  29.         at cn.nukkit.plugin.MethodEventExecutor.execute(MethodEventExecutor.java:29) ~[nukkit_1.14_b626.jar:?]
  30.         ... 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