- 积分
- 4073
- 帖子
- 主题
- 精华
贡献- 份
爱心- 心
- 钻石
- 颗
- 人气
- 点
- 下界之星
- 枚
- 最后登录
- 1970-1-1
- 注册时间
- 2015-5-24
|
服务端插件
英文名称: |
ProtocolStringReplacer |
中文名称: |
网络协议字符串文本替换者 |
插件来源: |
原创 |
适用服务端: |
Spigot Paper |其它| |
插件类型: |
信息 管理 |
语言支持: |
简体中文 |
适用版本: |
1.19.X 1.18.X 1.17.X 1.16.X 1.15.X 1.14.X 1.13.X 1.12 1.11 1.10 1.9 1.8 |
前置Mod|插件: |
必需:ProtocolLib PlaceholderAPI |
下载地址: |
https://beta.mcbbs.net/resource/servermod/xmkw2tv1 |
原帖地址: |
- |
插件Logo: |
|
插件简介: |
修改各处显示的字符串文本 |
本帖最后由 Rothes 于 2022-6-13 23:56 编辑
┃ 简介
| ProtocolStringReplacer是一款通过修改网络数据包而实现替换字符串功能的插件,致力于优化效率、提供更多功能,以达到方便、实用的目标.
由于只修改了发送给玩家的数据包,故不会影响服务端上的处理.
| ┃ 特性
| 修复服务端 Log4j 0day CVE 漏洞(全版本) [修复根源, 见截图] 独立版
修改以下内容中的字符串,或者屏蔽:
- 物品的DisplayName和Lore
- 成书的内容/署名
- Boss血量条文本
- 任何控制台信息
- 告示牌信息
- 计分板信息
- 标题消息
- 聊天信息
- 窗口标题
- 实体名称
字符串替换采用 AC 算法! 十分迅速!
不会增加服务器的带宽压力! 所有替换均在原数据包上操作.
支持对控制台的信息管理! 每一个字符都可以替换或屏蔽!
支持修改 Json, 对 Json 的智能处理, 即使不了解 Json 也可使用普通替换模式, 不会破坏任何数据.
针对修改物品制作的缓存机制, 处理一个窗口内所有物品仅需1毫秒 (于i3-2120 + 已缓存情况下测试)
支持替换为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文件夹或其子文件夹中
Config.yml - # 请勿手动修改Configs-Version值!
- Configs-Version: 5
- Options:
- # 本地语言. 将在 ProtocolStringReplacer/Locales 中寻找对应 yml 文件.
- # 此设定也涉及一些内部操作, 建议按照规范 语言缩写(小写)-地区缩写(大写) 来填写.
- Locale: zh-CN
- # 设置检测更新服务器的域名. 默认为 'raw.githubusercontent.com'.
- # 若连接不上此加速线路, 应自行选择其它加速线路.
- Git-Raw-Host: 'raw.fastgit.org'
- Features:
- # 控制台相关设定.
- Console:
- # 在控制台内显示加载的替换配置文件.
- Print-Replacer-Config-When-Loaded: true
- # 自定义插件占位符的使用格式. 建议使用玩家想不到的格式
- # 以防止玩家通过占位符获取到不该获取的信息.
- # 在默认值下, 使用如{player_name}的格式来获取占位符的变量.
- Placeholder:
- # 使用占位符的前缀. 仅允许一个字符.
- Placeholder-Head: {
- # 使用占位符的后缀. 仅允许一个字符.
- Placeholder-Tail: }
- # 是否为显示在控制台的文本解析占位符.
- Parse-For-Console: true
- # 关于已替换物品缓存表的相关设定.
- ItemMetaCache:
- # 每多少秒执行一次清理缓存的任务.
- Purge-Task-Interval: 600
- # 只清理多少秒未读取过的缓存条目.
- Purge-Access-Interval: 300
- # 关于网络数据包监听器的相关设定.
- Packet-Listener:
- # 定义 ProtocolStringReplacer 监听数据包全局优先度. 不要随意修改.
- Listener-Priority: HIGHEST
- # 是否强行修改不允许修改的数据包.
- Force-Replace: false
复制代码
示例替换配置 (Example.yml) - # 此替换配置文件的相关设定.
- Options:
- # 是否开启本替换配置. 若为false则不会为这个文件处理. 若未定义, 默认为false.
- Enable: true
- # 本文件的优先级. 若有多个替换配置, 优先级高的最早替换. 默认为5.
- Priority: 5
- # 可选参数
- Version: '1.210805'
- # 可选参数
- Author: 'Rothes'
- # 匹配字符串的方式. 可选值:
- # 'Contain' : 只要包含就替换 (默认)
- # 'Equal' : 要求设置与原字符串完全匹配
- # 'Regex' : 使用Java正则表达式
- # 不区分大小写.
- Match-Mode: 'Contain'
- # 筛选功能. 用于指定此文件替换字符串的条件.
- Filter:
- # 监听类型.
- # 指定替换何处的字符串. 默认为全部. 可选值:
- # Chat 替换聊天(chat|actionbar)信息文本
- # Sign 替换告示牌文本
- # Title 替换标题(title|subtitle)文本
- # Entity 替换实体名文本
- # Boss-Bar 替换Boss血量条文本
- # ItemStack 替换物品(物品名|Lore|书署名|书内容)文本
- # Window-Title 替换容器标题文本
- # ScoreBoard 替换计分板(标题|实体名称)
- # 不区分大小写.
- Listen-Types:
- - Chat
- - Window-Title
- - ItemStack
- - Sign
- # 针对计分板监听的特定过滤
- ScoreBoard:
- # 是否替换计分板标题. 默认为false.
- Replace-Title: false
- # 是否替换计分板中的实体名称. 默认为false.
- # 注: 对于玩家, 实体名称为玩家名称; 对于非玩家则为UUID.
- Replace-Entity-Name: false
- # 替换的字符串列表.
- # 左侧的key为原字符串 右侧的value为替换后的字符串.
- # 替换模式优先度: Json > Common, 忽略文件优先度.
- Replaces:
- # 常规文本替换模式.
- Common:
- - Original: '我的名字'
- Replacement: '{player_name}'
- - Original: '一个命名牌'
- Replacement: '我的命名牌'
- - Original: '这样来换行'
- Replacement: |-
- 这样
- 来换行
- # Json 替换模式, 适合高级用户.
- # 不支持使用 Json 替换的监听类型有:
- # ItemStack(版本1.12及以上书内容除外)、控制台消息,
- # 以及计分板中的实体名称、版本1.12及以下的计分板标题.
- Json:
- # 修改客户端上熔炉界面标题显示的名称.
- - Original: '{"translate":"container.furnace"}'
- Replacement: '{"text":"恭喜您打开了一个熔炉! 666!"}'
- # 屏蔽的字符串列表. 如果一个数据包中的任何字符串被匹配,
- # 这个数据包将整个被屏蔽发送给玩家.
- # 此功能同样适用于控制台消息.
- Blocks:
- Common:
- - '这条消息会被屏蔽'
- - '这条同样也会'
- Json:
- - '{"text":"这条json会被屏蔽"}'
复制代码
|
| ┃ 下载链接
| 请在 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 | ┃ 更新日志
| 2.6.5 2022-02-23: - 修复在一些服务端上会错误地移除控制台中的Ansi色彩码的问题. 2.6.4 2022-02-15: - 修复在旧版本服务端上执行 /psr capture list 会发生 NoSushMethodError 的问题. 2.6.3 2022-02-15: - 支持 1.17-1.18 的 Boss-Bar 修改. 2.6.2 2022-02-13: - 修复因为 CommentYamlConfiguration 在新版本更改后未设定 SplitLines, 导致配置文件因注释保留而损坏的问题. 2.6.1 2022-02-13: - 添加限制 ProtocolLib 导致的报错的显示次数的配置项. 2.6.0 2022-02-13: - 修复缓存清理 Schedule 时间单位错误问题, 可能导致内存泄漏. - 新增更新玩家库存时清理用户缓存, 降低内存占用. - 修复用户缓存系统不正常工作的问题. - 改进 ProtocolLib 报错的屏蔽措施. - 内部代码修改. 2.5.2 2022-02-06: - 修复 TemporaryPlayer 的相关问题. 2.5.1 2022-02-06: - 修复一些 ItemHoverEvent 消息导致的 NPE 报错. - 修复在 Spigot 1.8 中的 BossBar 警告信息. - 支持 1.17-1.18 ActionBar 消息的修改. - 修复 Console 监听类型在替换配置关闭时仍然处理的问题. 2.5.0 2022-01-16: - 优化内存占用. - 重新编写控制台信息替换, 现在可以对每一个字符进行替换、屏蔽, 且支持 1.8-1.18 全版本! 2.4.0 2022-01-02: - 适配 Spigot 近期在 1.18.1 做出的一些更改.
- 适配一些 Forge/Fabric 服务端做出的一些更改. - 适配 NachoSpigot 1.8 服务端做出的一些更改. - 改进 Console 替换方式, 自适配选择最优挂钩方式.
- 修复某些情况 /psr edit 不可修改 Replaces 和 Blocks 的问题. 2.3.3 2021-12-13: - 修复 1.18 以上版本因 log4j JDNI 修复导致的 NPE. 2.3.2 2021-12-13: - 新增修复服务端 Log4j 0day CVE 漏洞(1.8-1.18) - 修复更新检查器小错误. 2.3.1 2021-12-05: - 修复在 Airplane 核心或者其他的一些核心上的 NPE 导致无法加载的问题. - 更新检测器信息默认使用 UTF-8 编码. - 改进更新检测提醒功能. 2.3.0 2021-12-04: - 升级至 Spigot 1.18 版本. - 修复多处潜在的 NPE 错误, 提升插件兼容性. - 改进插件 Logger 前缀修改实现方式. - 重写更新检测提醒功能. - 修复一些服务端的 Gui 控制台仍显示 Ansi 转义符的问题. 2.2.1 2021-12-02: - 重写更新检测机制. - 检查 MapChunk 包中是否包含所需修改的键. 1.18 适配预计在周末发布, 以便于进行测试. 2.2.0 2021-12-01: - 重命名多个类名以符合代码规范. - 保存原始 MessageFactory 以防止在一些服务端上关闭插件时出现错误, 提升插件兼容性.
- 通过 Log4j2 插件注册表获取 LoggerNamePatternSelector 以防止在一些服务端上由于类迁移导致插件无法初始化, 提升插件兼容性. - 优化插件, 降低内存占用. 1.18 适配预计在周末发布, 以便于进行测试. 2.1.2.1 2021-11-14: - 修复一些控制台消息导致的 NPE. 2.1.2 2021-11-14: - 修复由旧版本 Log4j2 内 Bug 导致的异常. (只在旧版本服务端发生) 2.1.1 2021-11-13: - 新增 Options.Git-Raw-Host 配置项, 可以自行选择更新服务器的加速线路. 2.1.0 2021-11-13: - 改进 1.12 及以上版本的 Console 替换方式: 现在可以为所欲为修改所有文本, 并且日志文件内不再显示 Ansi 码, 更干净. - Config.yml 添加是否为 Console 解析占位符的选项. 2.0.5 2021-11-08: - 改进用户目前窗口标题方法. - 更正拼写错误.
2.0.4 2021-10-23: - 更换依赖 'commons-lang3' 至 'commons-lang'. - 降低插件 jar 文件大小. - 重命名 Config.yml 中的 'Localization' 为 'Locale' - 添加替换配置过滤: User.Permission 2.0.3 2021-10-18: - 修复捕获功能报错. - 修正英文语言. 2.0.2 2021-10-16: - 重构 User 包路径. - 重制 Capture 功能系统, 现可捕获除 Console 外所有字符串. - 优化 ItemStack 处理. - 修复控制台信息的 NPE 报错. 2.0.1 2021-10-02: - 修复无法加载的问题. 2.0.0 2021-10-01: - 核心代码重写. - 大幅重构重复代码.
- 迁移、更新依赖库.
- 使用 Logger 打印控制台信息.
- 新增多语言系统.
- 新增修改控制台信息.
- 新增屏蔽数据包/屏蔽消息.
- 新增版本更新检查.
- 修复指令TAB不会合并引号的bug.
- 修复一些潜在的错误.
- 移除了不必要的一些消息.
- 优化编辑器使用体验, 显示彩色符号.
- 优化 Equal 匹配模式效率.
- 略微提高插件总体效率.
- 配置文件架构修改(自动从旧版本升级).
- 防止保存 Yml 时自动换行.
- 改进注释保留系统. 1.5.5 2021-08-23: - 修复一些报错. - 部分重构. 1.5.4 2021-08-22: - 修复部分Chat Json捕获不到的问题. 1.5.3 2021-08-22: - 支持捕获数据包内容. (目前只支持Json) - 防止因为替换配置文件中正则错误导致整个插件无法加载. 1.5.2 2021-08-19: - 修复上个版本的NPE报错. 1.5.1 2021-08-18: - 再次针对 Contain 匹配模式进行优化, 现采用 AC 算法, 再次提升 50%~85% 效率. - 不再支持同一替换配置中的累加替换(A->B, B->A). - 不再处理空字符串. 1.5.0 2021-08-17: - 针对 Contain 匹配模式进行优化, 字符串越长越明显, 提升 50%~75% 效率. - 优化编辑器相关处理效率. 1.4.16 2021-08-15: - 修复1.12-1.15处理HoverEvent报错的问题.
- 修复EntityMeta报错的问题. 1.4.15 2021-08-11: - 修复添加缺失配置项不是默认以UTF-8编码添加的问题.
- 修复reload指令不能重载监听优先级的问题. - UserCache 部分重构. - 修复了上个版本新增的N/A个虫. 1.4.14 2021-08-11: - 新增了N/A个虫. 1.4.13 2021-08-09: - 迁移依赖库, 避免和其它插件冲突. 1.4.12 2021-08-06: - 修复错误. 1.4.11 2021-08-05: - 代码重构. - 新增支持修改计分板信息. - 新增支持强制修改只读数据包. - 修复自动添加缺失配置的一些注释处理问题. 1.4.10 2021-08-03: - 新增支持 Java 8 - Java 10 使用. 1.4.9 2021-07-31: - 修复了一些玄学问题. - 检测 ENTITY_META 是否为 NULL. - 调整 Paper 服务端检测机制. 1.4.8 2021-07-31: - 允许自定义数据包监听优先级. - 新增 Listen-Dropped-Item-Entity 配置, 用于临时解决在 1.17 或更高版本服务器上因 ProtocolLib 而导致的一个问题.
- 新增自检测配置文件是否缺失项目. - 新增防止修改只读数据包. 1.4.7 2021-07-30: - 优化 Json/Component 修改效率. - 优化占位符处理效率.
- 完善对 BookMeta 中 Json 的修改. - 修复另外的一些小问题. 1.4.6 2021-07-29: - 完善了Json/Component修改功能.
- 重新支持了Json修改. 请参考Example.yml. - 修复了一些问题. 1.4.5 2021-07-29: - 修复ItemContent展示头颅导致的警告信息.
- 修复EntityMeta修改的报错. 1.4.4.1 2021-07-28: - 修复手快导致的一个问题. 1.4.4 2021-07-28: - 修复v1.4.2更新导致的不兼容旧版本服务端的问题.
- 新增自适配修改物品展示框中物品功能. - 迁移替换配置文件中Replaces到Replaces.Common, 以便于之后的更新. (安装新版本后自动更新) 1.4.3 2021-07-27: - 修复检测不到前置启用的玄学问题.
- 支持修改物品展示框中物品的displayname和lore. 1.4.2 2021-07-27: - 支持修改TextComponent原有的文本颜色.
- 支持修改Component的HoverEvent文本. 1.4.1 2021-07-18: - 统一替换配置文件中的大小写.
- 替换配置文件中匹配类型、监听类型不再大小写严格.
- 修复Print-Replacer-Config-When-Loaded配置不生效的问题.
- 使用纳秒计时, 更精确. - 忽略ENTITY_METADATA数据包报错. 1.4.0 2021-07-17: - 修复entity监听可能会修改实际实体的问题. - 重构包名, 代码规范. 1.3.4 2021-07-16: - 优化Chat数据包的处理. - 优化对json信息修改的处理. (近期较忙, 暂未添加任何内容, 深表歉意.) 1.3.3 2021-07-14: - 支持修改TranslatableComponent中的附加文本. 1.3.2 2021-07-14: - 修复上个版本导致的一个问题. 1.3.1 2021-07-14: - 修复Chat数据包因json格式问题导致的报错. 1.3.0 2021-07-04: - 大幅重构插件. - 过滤器Packet-Types更改为Listeners-Types,以方便适配版本以及更换版本. - 完全支持了1.8-1.10版本.(1.7也可能支持, 没有测试) - 更改配置文件的架构(安装新版本插件后自动更新). - 新增parse指令,用于测试设置的替换配置文件是否生效并了解字符串替换的流程. - 修复了一些已知的报错和问题. 1.2.1 2021-06-29: - 修复1.11及以下版本控制台不可使用指令的问题. 1.2.0 2021-06-29: - 兼容了1.11-1.12服务端. - 对低于1.13的服务端采用lore的方式存储usercache. - 修复使用替换配置编辑器创建的替换配置版本不为2的问题. - 修复使用替换项编辑器set子指令不检测重复key的问题. - 更新示例配置文件. 1.1.20 2021-06-27: - 检测负数EntityId,防止报错. 1.1.19 2021-06-26: - 修复Spigot端ChatComponent无法修改的问题.
- 支持修改Paper端在 1.17+ 新增的Component. - 修复升级替换配置文件后出现两个TITLE监听的问题. - 修复窗口使用"translate"仍会替换,导致标题变为英文的问题.
- 检测服务端,若不是Spigot或其衍生服务端(如Bukkit)将强行关闭插件. - 改进设定数据包是否替换字符串的实现方式. 1.1.18 2021-06-25: - 修复一些服务端版本上玩家执行指令抛出NPE的问题. - 在plugin.yml中补充了Edit指令的权限节点. - 优化替换项目列表浏览. 1.1.17 2021-06-24: - 完整的注释保留功能. - 增加游戏内指令编辑器. - 修改了替换配置文件架构. (安装新版插件后会强制自动更新) - 一些细微的优化. - 修复正则匹配模式无法使用问题. - 一些我自己都忘记做了啥的重构. 1.1.15 2021-06-20: 1.1.14 2021-06-18: - 完善注释保留类系统(尚仅支持Key-Value式数据). 1.1.13 2021-06-16: 1.1.12-beta 2021-06-15: - 修复未加载玩家数据时修改包,可能抛出NPE的问题. |
| ┃ 问题反馈
| 如果您在使用插件过程中遇到任何问题,欢迎在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等开源项目,其余皆为原创 来自群组: PluginsCDTribe |
评分
-
查看全部评分
|