Minecraft(我的世界)中文论坛

标题: [Ni]ProtocolLib怎么玩|使用ProtocolLib发包或收包|突破Bukkit限制|只有想不到系列

作者: andylizi    时间: 2016-3-20 17:24
标题: [Ni]ProtocolLib怎么玩|使用ProtocolLib发包或收包|突破Bukkit限制|只有想不到系列
本帖最后由 andylizi 于 2016-3-20 17:35 编辑
ProtocolLib原帖地址: DevBukkit SpigotMC
JavaDoc: 作者的CI 最近这个地址似乎出毛病了, 框架里变空白,如果发现这种现象可以去这里查看
GitHub: Here
关于版本问题,目前我的结论是: 1.7.9以下使用3.4.0,1.7.9以上使用3.6.5,1.9使用3.6.5或还是测试版的3.7.0-BETA(只能在SpigotMC上下载到)

以前认为ProtocolLib只是管MC通讯协议的,现在发现大部分跟nms有关的操作都涉及到了比如NBT。此贴只讲
其中大部分功能都是我自己摸索出来的,所以有错误欢迎指出不要介意
为了保证您能愉快的阅读下面的内容,请确保您学会了Java面向对象的完整知识

对了,此贴的所有代码都用截图表现,我帮你写好是没用的,自己摸索才是正道。


首先啊,如果你要在插件中使用ProtocolLib(下简称PL)的任意功能,肯定得先在项目中添加PL的依赖,然后在plugin.yml里加入前置
  1. depend: [ProtocolLib]
复制代码
,如果这个插件不是必须使用PL的,那么可以加入软前置
  1. softdepend: [ProtocolLib]
复制代码
。我想这都是废话吧?


发包和创建数据包监听器,都需要通过ProtocolManager来做到

创建数据包监听器、如何操作数据包对象


向玩家发送数据包



让服务端认为接受到了一个玩家发送的数据包


就是这么简单


[groupid=324]上古之石美工工作组[/groupid]
作者: hhttll    时间: 2016-3-21 11:30
受到梨子大大的召唤特地来此支持。(终于有这个教程了233)
作者: 1434967947    时间: 2016-3-21 12:44
似乎和我想象的不太一样太简单了
作者: tallmoon    时间: 2016-3-21 12:52
本帖最后由 tallmoon 于 2016-3-21 13:15 编辑

教程不错,不过赶脚略难
作者: t9044    时间: 2016-3-21 13:21
给你点赞,在满版的所谓"插件教程"的背景下能冒出来一个深入的真正有用的教程.看到简直是老泪纵横
作者: rtz43    时间: 2016-3-21 16:05
虽然我之前都是抱着PL在spigot的页面啃食的。。
但是不得不说中文版就是舒服~
(顺带又找到了一个用NetBeans的同类)
作者: 4one_R    时间: 2016-3-21 18:46
能否顺便说说TinyProtocol是干什么的
作者: andylizi    时间: 2016-3-21 18:50
4one_R 发表于 2016-3-21 18:46
能否顺便说说TinyProtocol是干什么的

那是一个比PL轻量级的插件,但是功能毫无疑问也少很多
作者: q549365815    时间: 2016-3-21 19:47
非常感谢 之前本人想利用ProtocoLib 做一个拒绝服务器信息
奈何没有相应的教程 作者网站又被墙了 就放弃了

看到梨子出的这个教程 非常及时啊
作者: xiweihai    时间: 2016-3-21 22:03
本帖最后由 xiweihai 于 2016-3-21 22:07 编辑

我们又见面了,mc数据包大概的数据格式前3个字节是键名的哈希值后面两个字节储存的是该包后面的数据的长度故每个packet最大为256*256-1大概就是这样,做好线程同步就行了让数据包发送保持顺序就行了
作者: andylizi    时间: 2016-3-21 22:07
xiweihai 发表于 2016-3-21 22:03
我们又见面了,mc数据包大概的数据格式前3个字节是键名的哈希值后面两个字节储存的是该包后面的数据的长度 ...

谢谢你的提醒,但这个贴跟这个有关系吗?
作者: xiweihai    时间: 2016-3-21 23:42
andylizi 发表于 2016-3-21 22:07
谢谢你的提醒,但这个贴跟这个有关系吗?

这样你就可以直接获取流自己写协议了
作者: andylizi    时间: 2016-3-22 10:37
xiweihai 发表于 2016-3-21 23:42
这样你就可以直接获取流自己写协议了

完全没必要。MC已经提供了一个CustomPayload包用于创建一个”Channel“来传输自定义的信息。例如BungeeCord就注册了BungeeCord的Channel,插件可以通过bukkitapi,向BC代理的玩家(实际就是BC)发送数据包来传递信息
作者: 云闪    时间: 2016-3-27 08:18
andylizi 发表于 2016-3-22 10:37
完全没必要。MC已经提供了一个CustomPayload包用于创建一个”Channel“来传输自定义的信息。例如BungeeCo ...

求解,BC那个通道传递信息是用来干啥的?另外spigot的bc模式也是用这个实现的吗?
作者: andylizi    时间: 2016-3-27 13:20
splt 发表于 2016-3-27 08:18
求解,BC那个通道传递信息是用来干啥的?另外spigot的bc模式也是用这个实现的吗? ...

插件Channel详解:http://wiki.vg/Plugin_channel
BC的Channel:https://www.spigotmc.org/wiki/bu ... -messaging-channel/
作者: 喵喵人    时间: 2016-4-5 16:32
真想不到幼儿园大班的孩子能自学到这个程度  佩服佩服{:10_512:}
作者: 在下小熊猫    时间: 2016-7-28 03:45
好复杂,但是暂时还没用到
作者: RE_OVO    时间: 2016-10-9 06:13
可否讲解下 PacketListener接口
作者: andylizi    时间: 2016-10-9 18:13
jebme 发表于 2016-10-9 06:13
可否讲解下 PacketListener接口 呢

帖内讲到的PacketAdapter就是一个PacketListener的实现,方便创建监听器。如果不闲麻烦直接实现PacketListener接口也行。其内部的所有抽象方法从名字上大概就能猜出意思吧,另外也有完整的javadoc。。

创建一个ListeningWhitelist可以使用ListeningWhitelist类里的静态构造器方法
作者: RE_OVO    时间: 2016-10-15 10:05
andylizi 发表于 2016-10-9 18:13
帖内讲到的PacketAdapter就是一个PacketListener的实现,方便创建监听器。如果不闲麻烦直接实现PacketLis ...

PL的doc好迷,老是打不开
作者: tyxiaomin    时间: 2016-10-15 15:27
可以在任何服务端内使用吗
作者: tallmoon    时间: 2016-11-4 19:46
本帖最后由 tallmoon 于 2016-11-4 19:48 编辑

梨子大大图貌似只有下载下来才能看
作者: syn614211648    时间: 2017-7-28 15:56
从此误入了Minecraft 插件开发另一深渊 ( 笑
作者: Easted    时间: 2017-8-14 23:01
LZ,如何获取科技枪的伤害?
作者: @TGL    时间: 2019-3-1 15:47
有办法知道数据包是哪个插件发送的吗
作者: Akron    时间: 2019-3-6 14:11
第一次看感觉非常晕,第二次看发现这pl真的很强大,也不难理解,,梨子用心了
作者: Permafrost    时间: 2019-4-21 20:59
是编程大佬吗?
作者: 2425701120    时间: 2019-5-8 18:07
ssssssssssssss
作者: 梦星桐    时间: 2020-1-1 22:00
请问pm是什么
作者: oldkingOK    时间: 2020-3-11 09:50
梨子大大,像这种Set类型的数据该怎么write()和read()?

作者: 一条小柴鱼    时间: 2020-4-6 15:57
我感觉我好笨,看不懂。。。

作者: xiaomaaaa    时间: 2020-5-2 22:45
MCBBS有你更精彩~我还在纳闷viaversion是怎么修改数据包的呢,感谢感谢
作者: Klos_shizi    时间: 2020-5-2 23:10
66666666023
作者: 向天笑Kerin    时间: 2021-2-5 15:46
1.16.5 mohist服务端装那个版本呀,把protocollib.jar复制到plugins文件夹,重启服务器之后,protocollib.jar文件就没了,也没有成功载入.