本帖最后由 Rothes 于 2023-2-7 02:02 编辑
本插件目前基于GNU GPLv3协议开源
来自群组: PluginsCDTribe
ProtocolStringReplacer |
| ┃ 简介 |
| ProtocolStringReplacer是一款通过修改网络数据包而实现替换字符串功能的插件,致力于优化效率、提供更多功能,以达到方便、实用的目标. 由于只修改了发送给玩家的数据包,故不会影响服务端上的处理. |
| ┃ 特性 |
更详细的列表请在 MCBBS v4 资源站中查看,此处列表不完整 修复服务端 Log4j 0day CVE 漏洞(全版本) [修复根源, 见截图] 独立版修改以下内容中的字符串,或者屏蔽:
不会增加服务器的带宽压力! 所有替换均在原数据包上操作. 支持对控制台的信息管理! 每一个字符都可以替换或屏蔽! 支持修改 Json, 对 Json 的智能处理, 即使不了解 Json 也可使用普通替换模式, 不会破坏任何数据. 针对修改物品制作的缓存机制, 处理一个窗口内所有物品仅需1毫秒 (于 支持替换为PAPI变量, 且更安全, 可以在配置文件中设定占位符使用格式 游戏内的指令修改功能 以及现代化的指令结构 多个替换配置文件系统 有序化的字符串替换 完全的注释保留功能 完全支持热加载 过滤系统 计划内容: 更多游戏内指令修改功能 更多过滤功能 扩展更多信息等修改 制作维基 …… |
| ┃ 指令 |
| /psr help 显示插件指令列表 /psr edit 游戏内替换配置编辑器 /psr parse 测试替换字符串 /psr capture 捕获部分数据包的内容 /psr reload 重载插件所有配置文件 详细的指令帮助请在游戏内输入子指令+ help 如/psr edit help |
| ┃ 权限 |
| protocolstringreplacer.command.edit 允许使用替换配置编辑器 protocolstringreplacer.command.parse 允许使用替换字符串测试功能 protocolstringreplacer.command.reload 允许重载插件配置文件 protocolstringreplacer.command.capture 允许捕获数据包的内容 protocolstringreplacer.feature.usermetacache 为创造模式恢复修改前的原物品 (防止创造模式替换到实际物品的特性) protocolstringreplacer.feature.usermetacache.noncreative 为非创造模式玩家也提供该功能 (用于一些奇怪的特殊情况, 若遇到无法移动物品等问题时尝试给予该权限) |
| ┃ 截图 |
| ┃ 配置文件 |
| 注意:替换配置文件必须放于plugins/ProtocolStringReplacer/Replacers文件夹或其子文件夹中 |
| ┃ 下载链接 |
请在 MCBBS v4 资源站中下载插件, 此贴内附件不是最新版本: 喜欢的话欢迎评论,别让这帖子沉啦 请安装前置插件 ProtocolLib 4.7.0+(Spigot 1.18 需 4.8.0+版本) PlaceholderAPI 2.10.9+ 请使用Java8+运行本插件 建议使用 Paper 或其分支服务端以获得最佳兼容性和效果 PSR 3.0.0 开发中! 3.0.0 将完全重写, 提供更多自定义项、提供一些 API, 并且模块化项目以便于适配其它平台,同时还会进一步优化插件 (目前预计适配 BungeeCord),许可证切换为 LGPL PSR 2.0.0 将可无损升级至 3.0.0 |
| ┃ 示例配置 |
用法: 安装本插件后,解压并替换(合并) plugins/ProtocolStringReplacer/Replacers 使用时请将 Slimefun 默认语言设为简体中文,适配1.14+全粘液版本 示例配置最后更新于2023/02/07 基于 PSR v2.17.1 |
| ┃ 更新日志 |
| ┃ 问题反馈 |
| 如果您在使用插件过程中遇到任何问题,欢迎在GitHub issue tracker上反馈。 有任何需要咨询的,可在贴内回复或私信,我每日都会检查MCBBS, 或直接在 QQ 上进行咨询: 空巢插件交流群: 422532220 机器人秒速审核, 如果没秒速就是炸了 插件维基编写中: https://rothes.gitbook.io/protocolstringreplacer/ |
| ┃ 常见问题 |
| 1. PAPI占位符无法替换 PSR 默认的占位符格式为{占位符}(全角字符), 而不是 %占位符% . 这是为了服务器安全性, 防止玩家通过发送占位符来获取服务器信息. 同时, 可以使 PSR 自动检测字符串中是否包含占位符, 若无则不会调用 PAPI API, 这可以大大加快替换效率. 您可以在插件的 Config.yml 中调整此设定. 2. 有时无法替换生物的名称 这是由 ProtocolLib 的问题导致. 该问题不在 PSR 可以处理的范围之内, 且不仅仅只影响到了 PSR 插件的处理. 目前 PSR 已将该报错屏蔽. 3. 插件导致服务器大幅卡顿 PSR 已经对插件进行了很极致的优化, 且所有运行的进程皆异步进行. 若您遇到此问题, 通常这是由于一些插件在主线程上进行了有关的网络处理, 而 PSR 扩大了此行为对主线程的影响. 请手动排除您的服务端插件. 4. 无法使用色彩符号 由于一些原因, PSR 使用 Minecraft 原版提供的色彩符号 '§' 而不是 Bukkit 中常用的色彩符号 '&'. 请尝试将您的替换配置中的所有色彩符号替换为 '§'. 5. 无法加载插件: Invalid plugin.yml 由于 MCBBS 附件下载常出问题, 通过备用链接(SpigotMC)下载即可. |
本插件目前基于GNU GPLv3协议开源
所用部分代码使用Apache等开源项目,其余皆为原创
感觉不错,很实用
优化效率就很不错 感谢分享 (希望能常更新. 支持
本帖最后由 小张up 于 2021-6-13 11:44 编辑
[11:36:31 INFO]: [ProtocolStringReplacer] Enabling ProtocolStringReplacer v1.1.5-beta
[11:36:31 ERROR]: Error occurred while enabling ProtocolStringReplacer v1.1.5-beta (Is it up to date?)
java.lang.NoClassDefFoundError: me/clip/placeholderapi/replacer/Replacer
at me.Rothes.ProtocolStringReplacer.ProtocolStringReplacer.initialize(ProtocolStringReplacer.java:77) ~[?:?]
at me.Rothes.ProtocolStringReplacer.ProtocolStringReplacer.onEnable(ProtocolStringReplacer.java:41) ~[?:?]
at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:263) ~[patched_1.16.5.jar:git-Paper-762]
at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:370) ~[patched_1.16.5.jar:git-Paper-762]
at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:500) ~[patched_1.16.5.jar:git-Paper-762]
at com.rylinaux.plugman.util.PluginUtil.load(PluginUtil.java:366) ~[?:?]
at com.rylinaux.plugman.util.PluginUtil.load(PluginUtil.java:318) ~[?:?]
at com.rylinaux.plugman.util.PluginUtil.reload(PluginUtil.java:380) ~[?:?]
at com.rylinaux.plugman.command.ReloadCommand.execute(ReloadCommand.java:122) ~[?:?]
at com.rylinaux.plugman.PlugManCommandHandler.onCommand(PlugManCommandHandler.java:95) ~[?:?]
at org.bukkit.command.PluginCommand.execute(PluginCommand.java:45) ~[patched_1.16.5.jar:git-Paper-762]
at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:159) ~[patched_1.16.5.jar:git-Paper-762]
at org.bukkit.craftbukkit.v1_16_R3.CraftServer.dispatchCommand(CraftServer.java:826) ~[patched_1.16.5.jar:git-Paper-762]
at org.bukkit.craftbukkit.v1_16_R3.CraftServer.dispatchServerCommand(CraftServer.java:788) ~[patched_1.16.5.jar:git-Paper-762]
at net.minecraft.server.v1_16_R3.DedicatedServer.handleCommandQueue(DedicatedServer.java:470) ~[patched_1.16.5.jar:git-Paper-762]
at net.minecraft.server.v1_16_R3.DedicatedServer.b(DedicatedServer.java:437) ~[patched_1.16.5.jar:git-Paper-762]
at net.minecraft.server.v1_16_R3.MinecraftServer.a(MinecraftServer.java:1342) ~[patched_1.16.5.jar:git-Paper-762]
at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:1130) ~[patched_1.16.5.jar:git-Paper-762]
at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$a$0(MinecraftServer.java:291) ~[patched_1.16.5.jar:git-Paper-762]
at java.lang.Thread.run(Thread.java:834) [?:?]
Caused by: java.lang.ClassNotFoundException: me.clip.placeholderapi.replacer.Replacer
at org.bukkit.plugin.java.PluginClassLoader.loadClass0(PluginClassLoader.java:153) ~[patched_1.16.5.jar:git-Paper-762]
at org.bukkit.plugin.java.PluginClassLoader.loadClass(PluginClassLoader.java:114) ~[patched_1.16.5.jar:git-Paper-762]
at java.lang.ClassLoader.loadClass(ClassLoader.java:521) ~[?:?]
... 20 more
[11:38:07 INFO]: [PlugMan] Plugin Information: ProtocolLib
[11:38:07 INFO]: - Version: 4.6.1-SNAPSHOT-b501
[11:38:07 INFO]: - Author(s): dmulloy2, comphenix
[11:38:07 INFO]: - Status: Enabled
[11:38:58 INFO]: [PlugMan] Plugin Information: PlaceholderAPI
[11:38:58 INFO]: - Version: 2.10.4
[11:38:58 INFO]: - Author(s): extended_clip, Glare
[11:38:58 INFO]: - Status: Enabled
看了看你的maven构建脚本,我的Papi貌似过时了
[11:36:31 ERROR]: Error occurred while enabling ProtocolStringReplacer v1.1.5-beta (Is it up to date?)
java.lang.NoClassDefFoundError: me/clip/placeholderapi/replacer/Replacer
at me.Rothes.ProtocolStringReplacer.ProtocolStringReplacer.initialize(ProtocolStringReplacer.java:77) ~[?:?]
at me.Rothes.ProtocolStringReplacer.ProtocolStringReplacer.onEnable(ProtocolStringReplacer.java:41) ~[?:?]
at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:263) ~[patched_1.16.5.jar:git-Paper-762]
at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:370) ~[patched_1.16.5.jar:git-Paper-762]
at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:500) ~[patched_1.16.5.jar:git-Paper-762]
at com.rylinaux.plugman.util.PluginUtil.load(PluginUtil.java:366) ~[?:?]
at com.rylinaux.plugman.util.PluginUtil.load(PluginUtil.java:318) ~[?:?]
at com.rylinaux.plugman.util.PluginUtil.reload(PluginUtil.java:380) ~[?:?]
at com.rylinaux.plugman.command.ReloadCommand.execute(ReloadCommand.java:122) ~[?:?]
at com.rylinaux.plugman.PlugManCommandHandler.onCommand(PlugManCommandHandler.java:95) ~[?:?]
at org.bukkit.command.PluginCommand.execute(PluginCommand.java:45) ~[patched_1.16.5.jar:git-Paper-762]
at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:159) ~[patched_1.16.5.jar:git-Paper-762]
at org.bukkit.craftbukkit.v1_16_R3.CraftServer.dispatchCommand(CraftServer.java:826) ~[patched_1.16.5.jar:git-Paper-762]
at org.bukkit.craftbukkit.v1_16_R3.CraftServer.dispatchServerCommand(CraftServer.java:788) ~[patched_1.16.5.jar:git-Paper-762]
at net.minecraft.server.v1_16_R3.DedicatedServer.handleCommandQueue(DedicatedServer.java:470) ~[patched_1.16.5.jar:git-Paper-762]
at net.minecraft.server.v1_16_R3.DedicatedServer.b(DedicatedServer.java:437) ~[patched_1.16.5.jar:git-Paper-762]
at net.minecraft.server.v1_16_R3.MinecraftServer.a(MinecraftServer.java:1342) ~[patched_1.16.5.jar:git-Paper-762]
at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:1130) ~[patched_1.16.5.jar:git-Paper-762]
at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$a$0(MinecraftServer.java:291) ~[patched_1.16.5.jar:git-Paper-762]
at java.lang.Thread.run(Thread.java:834) [?:?]
Caused by: java.lang.ClassNotFoundException: me.clip.placeholderapi.replacer.Replacer
at org.bukkit.plugin.java.PluginClassLoader.loadClass0(PluginClassLoader.java:153) ~[patched_1.16.5.jar:git-Paper-762]
at org.bukkit.plugin.java.PluginClassLoader.loadClass(PluginClassLoader.java:114) ~[patched_1.16.5.jar:git-Paper-762]
at java.lang.ClassLoader.loadClass(ClassLoader.java:521) ~[?:?]
... 20 more
[11:38:07 INFO]: [PlugMan] Plugin Information: ProtocolLib
[11:38:07 INFO]: - Version: 4.6.1-SNAPSHOT-b501
[11:38:07 INFO]: - Author(s): dmulloy2, comphenix
[11:38:07 INFO]: - Status: Enabled
[11:38:58 INFO]: [PlugMan] Plugin Information: PlaceholderAPI
[11:38:58 INFO]: - Version: 2.10.4
[11:38:58 INFO]: - Author(s): extended_clip, Glare
[11:38:58 INFO]: - Status: Enabled
看了看你的maven构建脚本,我的Papi貌似过时了
小张up 发表于 2021-6-13 11:37
[11:36:31 INFO]: Enabling ProtocolStringReplacer v1.1.5-beta
[11:36:31 ERROR]: Error occurred while ...
PlaceholderAPI不是最新的,试试更新到
PlaceholderAPI-2.10.9
Rothes 发表于 2021-6-13 11:42
PlaceholderAPI不是最新的,试试更新到
PlaceholderAPI-2.10.9
嗯,刚刚看到了
好像挺不错的,不过会不会跟tr菜单冲突呢
LINKCHUM 发表于 2021-6-13 16:49
好像挺不错的,不过会不会跟tr菜单冲突呢
应该不会。而且提供了过滤功能,如果字符串有冲突,也可以通过调整配置文件自行修复
本帖最后由 Rothes 于 2021-6-16 19:48 编辑
已兼容1.17,请安装1.17的专用ProtocolLib (来自官方预览版)
https://ci.dmulloy2.net/job/ProtocolLib/lastSuccessfulBuild/
目前ProtocolLib还有一些问题,如监听包错误,我只提供了兼容,这代表1.17可能部分功能失效。
这不是我的问题,请大家等待ProtocolLib方支持.
由于不知道ProtocolLib何时才能完全提供向后支持,新版已提供完全适配功能。
已兼容1.17,请安装1.17的专用ProtocolLib (来自官方预览版)
https://ci.dmulloy2.net/job/ProtocolLib/lastSuccessfulBuild/
这不是我的问题,请大家等待ProtocolLib方支持.
由于不知道ProtocolLib何时才能完全提供向后支持,新版已提供完全适配功能。
我在1.17里面使用psr打示例的''我的名字''没有输出变量,不晓得是啥问题
本帖最后由 小张up 于 2021-6-20 21:23 编辑
复制代码我的配置文件是这样的,但为什么正则语句没用
在正则测试器中这个句子没问题
但在这个插件里却无效
是最新版
而且,使用插件后,容器都变英文了
- # 是否开启本替换配置. 若为false则不会为这个文件处理. 若未定义, 默认为false.
- Enable: true
- # 本文件的优先级. 若有多个替换配置, 优先级高的最早替换. 默认为5.
- Priority: 30
- # 匹配字符串的方式. 可选值:
- # 'contain' : 只要包含就替换 (默认)
- # 'equal' : 要求设置与原字符串完全匹配
- # 'regex' : 使用正则表达式
- Match-Type: 'regex'
- # 筛选功能. 用于指定此文件替换字符串的条件.
- Filter:
- # 指定替换的数据包类型. 默认为全部. 可选值:
- # WINDOW_ITEMS 监听打开窗口中的物品
- # SET_SLOT 监听窗口中槽位的物品
- # OPEN_WINDOW 监听窗口的标题文本
- # CHAT 监听聊天文本
- # ENTITY_METADATA 监听实体名称
- # TILE_ENTITY_DATA 监听tile的nbt数据. 目前仅支持修改告示牌信息
- Packet-Types:
- - CHAT
- Replaces:
- # 左侧的key为原字符串 右侧的value为替换后的字符串.
- 'me' : '我'
- '/(?<=\[123\] .*)\[123\] /g' : ''
在正则测试器中这个句子没问题
但在这个插件里却无效
是最新版
而且,使用插件后,容器都变英文了
本帖最后由 Rothes 于 2021-6-20 22:38 编辑
现在json和chat组件的修改不是很完善。可能容器用的是translate,但是插件也解析了。等我完善之后应该就好。容器的问题,就麻烦暂时先手动修改一下OPEN_WINDOW数据包吧。
正则的问题我待会看看
小张up 发表于 2021-6-20 21:11
我的配置文件是这样的,但为什么正则语句没用
在正则测试器中这个句子没问题
现在json和chat组件的修改不是很完善。可能容器用的是translate,但是插件也解析了。等我完善之后应该就好。容器的问题,就麻烦暂时先手动修改一下OPEN_WINDOW数据包吧。
正则的问题我待会看看
26880 发表于 2021-6-20 17:05
我在1.17里面使用psr打示例的''我的名字''没有输出变量,不晓得是啥问题
我没有把这个添加进 示例配置文件。 你需要手动添加
'我的名字': '{player_name}'
Rothes 发表于 2021-6-20 22:37
现在json和chat组件的修改不是很完善。可能容器用的是translate,但是插件也解析了。等我完善之后应该就好 ...
好,这么晚还在查阅消息辛苦了
加油
小张up 发表于 2021-6-20 22:42
好,这么晚还在查阅消息辛苦了
加油
这几天我重构了一部分代码,之前没有上传这一部分。我待会上传新版插件,貌似已修复正则问题
Rothes 发表于 2021-6-20 22:37
我没有把这个添加进 示例配置文件。 你需要手动添加
'我的名字': '{player_name}' ...
啊这,但是我这里直接放进plugins后生成的文件有示例一样的文件,单纯的替换也有效果,但是变量就拉了跨了

26880 发表于 2021-6-21 10:51
啊这,但是我这里直接放进plugins后生成的文件有示例一样的文件,单纯的替换也有效果,但是变量就拉了跨 ...
检查一下PlaceholderAPI是否下载了Player变量。使用/papi ecloud download player
Rothes 发表于 2021-6-21 12:34
检查一下PlaceholderAPI是否下载了Player变量。使用/papi ecloud download player
哦草,问题解决是我的锅,我还以为这个变量是papi自带的,浏览一圈变量网站被翻译器生草翻译骗过去了
不兼容Loliserver呀,可惜了
3401286177 发表于 2021-6-25 11:33
不兼容Loliserver呀,可惜了
检查了一下,看起来主要是前置ProtocolLib不支持。
小张up 发表于 2021-6-20 21:11
我的配置文件是这样的,但为什么正则语句没用
在正则测试器中这个句子没问题
容器变为英文的问题已经修复,抱歉拖得有点久啦
本帖最后由 小张up 于 2021-6-26 18:51 编辑
没事,插件已经非常优秀了
(另外我那个正则咋样改才能编译过)
Rothes 发表于 2021-6-26 16:09
容器变为英文的问题已经修复,抱歉拖得有点久啦
没事,插件已经非常优秀了
(另外我那个正则咋样改才能编译过)