Minecraft(我的世界)中文论坛

 找回密码
 注册(register)
查看: 8934|回复: 23

[插件开发教程] [Ni]ProtocolLib怎么玩|使用ProtocolLib发包或收包|突破Bukkit限制|只有想不到系列

[复制链接]
发表于 2016-3-20 17:24:56 | 显示全部楼层 |阅读模式

您尚未登录,立即登录享受更好的浏览体验!

您需要 登录 才可以下载或查看,没有帐号?注册(register)

x
本帖最后由 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]
复制代码
。我想这都是废话吧?

QQ截图20160320104557.png
发包和创建数据包监听器,都需要通过ProtocolManager来做到

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


向玩家发送数据包



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


就是这么简单

欢迎加入上古之石技术部

欢迎加入上古之石技术部


来自群组: 上古之石美工工作组

评分

参与人数 22人气 +35 金粒 +276 收起 理由
bluesadi + 1 + 20 MCBBS有你更精彩~
602723113 + 2 + 35 补分2333
1349905649 + 2 MCBBS有你更精彩~
耗子 + 2 MCBBS有你更精彩~
zghh008 + 1 楼主你太帅了~
byxiaobai + 1 MCBBS有你更精彩~
吕乐乐 + 2 以前我居然忘了评分???
tallmoon + 1 梨子大大求补图
cx62d + 2 话说梨子啥时候修图啊=a=
丶皇天 + 2 + 35 MCBBS有你更精彩~
henry5041 + 2 + 35 MCBBS有你更精彩~
1582952890 + 1 + 20 Mcbbs有你更精彩~
officeyutong + 2 netbeans大法好
914554688wyt + 2 + 35
hcrgm1 + 2 .
1174749969 + 1
1034701118 + 1 我抓到你了♂
RecursiveG + 1 + 20 已加入教程全家桶
1606140786 + 1 233
a390807154 + 20 肛 坐看加入教程全家桶

查看全部评分

发表于 2016-3-21 11:30:42 来自手机 | 显示全部楼层
受到梨子大大的召唤特地来此支持。(终于有这个教程了233)

评分

参与人数 1金粒 +1 收起 理由
andylizi + 1 你是召唤我来举报的吗

查看全部评分

回复

使用道具 举报

发表于 2016-3-21 12:44:17 | 显示全部楼层
似乎和我想象的不太一样太简单了
回复

使用道具 举报

发表于 2016-3-21 12:52:58 | 显示全部楼层
本帖最后由 tallmoon 于 2016-3-21 13:15 编辑

教程不错,不过赶脚略难

评分

参与人数 1金粒 +1 收起 理由
andylizi + 1 上面那句话的意思是“太简单了”.

查看全部评分

回复

使用道具 举报

发表于 2016-3-21 13:21:33 | 显示全部楼层
给你点赞,在满版的所谓"插件教程"的背景下能冒出来一个深入的真正有用的教程.看到简直是老泪纵横
回复

使用道具 举报

发表于 2016-3-21 16:05:18 | 显示全部楼层
虽然我之前都是抱着PL在spigot的页面啃食的。。
但是不得不说中文版就是舒服~
(顺带又找到了一个用NetBeans的同类)

评分

参与人数 1金粒 +1 收起 理由
andylizi + 1 Netbeans大法好入教保平安

查看全部评分

回复

使用道具 举报

发表于 2016-3-21 18:46:16 来自手机 | 显示全部楼层
能否顺便说说TinyProtocol是干什么的
回复

使用道具 举报

 楼主| 发表于 2016-3-21 18:50:25 | 显示全部楼层
4one_R 发表于 2016-3-21 18:46
能否顺便说说TinyProtocol是干什么的

那是一个比PL轻量级的插件,但是功能毫无疑问也少很多
回复

使用道具 举报

发表于 2016-3-21 19:47:43 | 显示全部楼层
非常感谢 之前本人想利用ProtocoLib 做一个拒绝服务器信息
奈何没有相应的教程 作者网站又被墙了 就放弃了

看到梨子出的这个教程 非常及时啊
回复

使用道具 举报

发表于 2016-3-21 22:03:23 | 显示全部楼层
本帖最后由 xiweihai 于 2016-3-21 22:07 编辑

我们又见面了,mc数据包大概的数据格式前3个字节是键名的哈希值后面两个字节储存的是该包后面的数据的长度故每个packet最大为256*256-1大概就是这样,做好线程同步就行了让数据包发送保持顺序就行了
回复

使用道具 举报

 楼主| 发表于 2016-3-21 22:07:34 | 显示全部楼层
xiweihai 发表于 2016-3-21 22:03
我们又见面了,mc数据包大概的数据格式前3个字节是键名的哈希值后面两个字节储存的是该包后面的数据的长度 ...

谢谢你的提醒,但这个贴跟这个有关系吗?
回复

使用道具 举报

发表于 2016-3-21 23:42:16 | 显示全部楼层
andylizi 发表于 2016-3-21 22:07
谢谢你的提醒,但这个贴跟这个有关系吗?

这样你就可以直接获取流自己写协议了
回复

使用道具 举报

 楼主| 发表于 2016-3-22 10:37:16 | 显示全部楼层
xiweihai 发表于 2016-3-21 23:42
这样你就可以直接获取流自己写协议了

完全没必要。MC已经提供了一个CustomPayload包用于创建一个”Channel“来传输自定义的信息。例如BungeeCord就注册了BungeeCord的Channel,插件可以通过bukkitapi,向BC代理的玩家(实际就是BC)发送数据包来传递信息
回复

使用道具 举报

发表于 2016-3-27 08:18:51 | 显示全部楼层
andylizi 发表于 2016-3-22 10:37
完全没必要。MC已经提供了一个CustomPayload包用于创建一个”Channel“来传输自定义的信息。例如BungeeCo ...

求解,BC那个通道传递信息是用来干啥的?另外spigot的bc模式也是用这个实现的吗?
回复

使用道具 举报

 楼主| 发表于 2016-3-27 13:20:10 | 显示全部楼层
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/

评分

参与人数 1人气 +1 收起 理由
splt + 1 讨厌英文qwq

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册(register)

本版积分规则

Archiver|小黑屋|Mcbbs.net ( 京ICP备15023768号-1 ) | 手机版本

GMT+8, 2018-10-21 18:01 , Processed in 0.153813 second(s), 8 queries , Memcache On.

"Minecraft"以及"我的世界"为Mojang Synergies AB的商标。本站与Mojang以及微软公司没有从属关系。

© 2010-2017 我的世界中文论坛 版权所有。本站原创图文内容版权属于原创作者,未经许可不得转载。

快速回复 返回顶部 返回列表