本帖最后由 Salt_lovely 于 2020-7-24 14:05 编辑
ProtocolLib
广为使用的前置插件
作者:dmulloy2与aadnk
什么是ProtocolLib?
ProtocolLib是一个使用广泛的前置插件,为许多常用插件提供支持。如果你的插件无法加载并提示需要ProtocolLib支持,那你一定需要这个插件。
(以下内容翻译自原帖,本人没有相关知识,翻译错误请指出)
(插件的)某些特定的工作不能依靠Bukkit标准API实现,有时你甚至需要直接修改Minecraft来实现它。有一种实现方法就是修改传入/传出的数据包,或者将自定义的数据包注入流(stream)中。这件事做起来非常麻烦,特别是一个新的Minecraft版本出现的时候,你的代码基本就炸了——这主要归咎于mc的代码混淆。
ProtocolLib是一个允许(插件)访问并读写Minecraft协议的库。它会处理反射和注入通道的绝大部分开销,并提供一个包装器简化包的处理。大多数情况下,它会随着Minecraft的更新而更新,所以在理想情况下,依赖本插件的插件不需要随版本更新。ProtocolLib一般不需要跟随mc的小更新而更新,特别是游戏代码没有什么改动的时候。(比如1.8的安全更新)
指令与权限
/protocol
主要的管理员指令,支持如下的子指令
  • config:重新载入插件配置文件
  • check:检查BukkitDev上有无更新
  • version:显示当前插件的版本
  • timings:打开或关闭:检测每个插件的CPU时间
  • listeners:显示正在使用ProtocolLib的插件,以及它们拦截的包的类型

/packetlog
以十六进制记录指定的包,可以放进文件或者显示在控制台
  • 用法:/packetlog <protocol> <sender> <packet> [文件/控制台]
可用的包的类型

以上所有指令需要protocol.admin权限
配置文件
  1. auto updater.notify: true #是否给所有拥有 protocol.info 权限的玩家发送新版本消息
  2. auto updater.download: false #自动下载安装新版本 ProtocolLib ,服务器重启时自动安装
  3. auto updater.delay: 43200 #检查新版本的时间间隔(单位:秒)
  4. auto updater.last: 0 #前一次检查更新的时间 (1970/1/1开始经过的秒数) 设置为0即强制检查更新
  5. metrics: true #设置为 TRUE 的话,ProtocolLib会匿名发送用户数据到mcstats.org,设置为 FALSE 将不这么做
  6. background compiler: true #设置为 TRUE 的话,ProtocolLib会尝试使用动态编译的代码替换反射来提高性能
  7. ignore version check: None #强制 ProtocolLib 在特定的版本中启动,即使该版本不匹配
复制代码

反馈漏洞
在反馈漏洞之前:
  • 先确认自己使用的是最新版的ProtocolLib,你的问题有可能已经在新版中解决了
  • 阅读堆栈跟踪,确认这是ProtocolLib的问题。ProtocolLib的包是com.comphenix.protocol,如果你没看到,那就不是ProtocolLib的问题
反馈漏洞时:
  • 最好使用漏洞追踪器,你也可以在讨论区反馈,但是请不要在评价区反馈
  • 请提供充足的信息,越多越好,一定要提供你的插件版本和服务端版本。
  • 请把错误报告之类的东西贴到pastebin
使用指南
管理员(OP):
  • 下载插件
  • 丢进plugins文件夹
  • 重启服务器
开发者:
  • >>>这里<<<有更多详细信息
兼容性
完全兼容paperspigot,spigot和Bukkit完美运行,理论上兼容任何bukkit衍生端。Cauldron兼容性未知(没有在Cauldron测试过)。


以下是作者的话(本人没有相关知识,如有错误请指出):
这个项目的主要目标是对Craftbukkit(以及衍生服务端)做到最大兼容。最终结果应该是(一个)很灵活的(Protocolib)。除了兼容包的变化,它还应该表现出对版本变化的灵活性。(如果成功的话)我最终除了修修漏洞和添加新功能以外啥都不用做。
我们怎么做到这一点?归根结底是反射(Java反射机制)。基本上,没有任何‘名’是硬编码的——每个字段、方法和类都可以通过查看字段类型、包名称或参数类型推断的。这些东西在不同版本(MC服务端)中表现出高度一致。
下载地址
如果你在使用1.16版本的服务端,请使用最新dev构建
如果你在使用1.8-1.15版本的服务端,请使用最新版本
如果你在使用1.7及以下版本的服务端,请使用3.7.0版本
(4.5.1不可用于1.16,建议下载最新dev构建)

4.5.1

3.7.0
相关内容/链接
关于TinyProtocol:
TinyProtocol是一个轻量级的ProtocolLib替代品。它本质上使用的是一种不适用结构修饰符或包装器来发送/接收原始包的机制。
Maven与Gradle:
统计数据
ProtocolLib使用MCStats收集数据,这是可以随时关闭的功能。不过得知插件的运行环境(包括服务端版本、Java版本、插件版本什么的)对于插件的后续开发很有帮助,作者会根据这些数据来做后续升级。
支持作者
作者在原帖放出的捐助地址
关于本帖
  • MCBBS已经有一个搬运贴了,在https://www.mcbbs.net/thread-444023-1-1.html,因为长期未更新,同时考虑到很多腐竹在忍受国际网络的“超高速”,所以再次搬运。
  • 因为提供了下载地址,加上作原作者不怎么上线,所以我暂未申请搬运