最MC论坛

标题: [探讨向] 有关Protocollib插件的二次开发 [打印本页]

作者: 嘟嘟    时间: 2016-5-26 22:51
标题: [探讨向] 有关Protocollib插件的二次开发
本帖最后由 嘟嘟 于 2016-5-26 22:58 编辑

嘟嘟保留此文章所有权利 版权所有 严禁抄袭

关于此贴的发布首先要感谢McBBS的梨子大兄弟
他所写的一篇关于PL的教程对我的pl开发做了很大的帮助
其次也要感谢上古之石技术部众人 我在pl开发中的
疑问 大部分也是他们解决的

至此 献上真诚的感谢
---------------------------------------------------------普通的分割线--------------------------------------------------------------
本篇适合有一定bukkit插件开发基础的读者
站内有几篇不错的主题 值得一阅
一般来讲 有关pl的插件基本都稍简洁
为何如此可以参考以下解析

首先去Bukkit下载到Protocollib的最新版本
或者也可以到站内或mcbbs下载到此插件
按照一般bukkit插件的开发流程导入此插件为
声明全局变量    ProtocolManager pm并在OnEnable中赋值为ProtocolLibrary.getProtocolManager()
-------------------------------------------准备工作至此完成 开始伪造包发给客户端------------------------------------------
到现在为止 整个开发过程进入了最艰难的步骤之一
首先确认我们需要给客户端发什么包 例如梨子效果包(PacketPlayOutTitle)
引用梨子的模板:
Packet = 这是一个数据包
Play = 玩家在服务器中玩耍
Out = 客户端收到的包 即服务端发出的包
title = 不解释

其他包都类似于此
那么伪造数据包也同时需要伪造所有的参数
使用反编译工具(必须保证可以看见源码)打开服务端文件
反编译如下类:net.minecraft.server.XXX.Packetxxxx
由于nms(net.Minecraft.server的简称)中全局变量的都定义在了最开头
虽然有一些混淆但是很清晰 在title包中我们看到了有如下数据:
private EnumTitleAction a;
  private IChatBaseComponent b;
  private int c;
  private int d;
  private int e;

根据翻译我们得出
a = title种类(title subtitle之类)
b = title消息
c d e 淡入 持续 淡出
如果不能确定的话 也可以上这里查 (但是这里面可能有些数据不相应)

新建一个方法title 参数如下:「String text, int FadeIn, int FadeOut ,int Time」
定义一个变量 PacketContainer pc 赋值为new PacketContainer(PacketType.Play.Server.title)
之后就有些类似于反射了
  1. pc.getTitleActions().write(0, EnumWrappers.TitleAction.TITLE);
复制代码
其中getTitleActions获取到了包中所有的TitleAction
write表示写入参数 0代表了第一个数据
之后就是一个枚举 恩 就是这样 其他的也类似
  1.         pc.getChatComponents().write(0, WrappedChatComponent.fromText(text));
  2.         pc.getIntegers().write(0, FadeIn);
  3.         pc.getIntegers().write(1, Time);
  4.         pc.getIntegers().write(2, FadeOut);
复制代码
对 就是这样 那么我们已经伪造好了这个包
此时可以使用全局变量pc的方法sendServerPacket给玩家发出伪造包
参数有三: 玩家 包 一个布尔值
布尔值就代表着会不会被监听器监听 false就是不会 一般用false
好了 现在你可以在玩家登入的时候 调用这个方法 给玩家显现一个title



不要看这里

事实上 Player类有自带的方法sendTitle 有两个参数 第一个为title 第二个为subtitle 根本不用这么麻烦


关于此贴欢迎踊跃提出疑问 我会一一解答的 (反正梨子大哥也在这里我不方)



作者: zhouhaha    时间: 2016-5-26 22:55
然而那个sendTitle是弃用的,我怕在未来移除,没敢用
作者: 嘟嘟    时间: 2016-5-26 22:56
zhouhaha 发表于 2016-5-26 22:55
然而那个sendTitle是弃用的,我怕在未来移除,没敢用

梨子在zuimc居然比我等级高

事实上 到了1.9这个还没被移除
期待1.10会移除把
话说我为什么会期待这种东西
作者: 星燚    时间: 2016-5-31 08:29
你这个山寨的我给满分
作者: zuimc    时间: 2016-6-1 03:00
路过打个酱油。。
作者: zuimc    时间: 2016-6-1 03:00
路过打个酱油。。




欢迎光临 最MC论坛 (http://www.zuimc.com/) Powered by Discuz! X3.2