丑话说前头
我不是专业的反作弊developer,你就当参考看就行了。
反作弊的组成部分?
主要分为
- Check(检测)
- Command(命令,没啥讲的)
- PacketListener(有些叫PacketHandler,也有可能像hackclient是EventManager,都是一个东西)
- EventListener(与PacketListener类似,有些人可能会把packet和event写成一个EventManager)
- PlayerData(存储数据用的,比如lastLocation,sneaking,blocking之类的)
然后你可能还需要一个Config系统,用来生成/加载checks,yml啥的
以及一些util类来计算BoundingBox,AABB之类的
PacketEvents还是Protocollib?
NMS?
在这里顺带讲一下NMS,这个其实就是net.minecraft.server的缩写
NMS每个版本都不一样,你需要重新做适配/兼容
NMS存放的其实就是服务器的代码,你使用它,可以更加底层的获取一些东西
不过这些都是老资历用的了。我们初次写反作弊还是用Protocollib或者PacketEvents这种API比较好
Protocollib
Protocollib是一个很老牌的库了
它的README是这样子说的
某些任务使用标准的 Bukkit API 是无法完成的,可能需要直接操作 Minecraft 本身来进行处理。一种常见的做法是修改传入和传出的数据包,或者向数据流中插入自定义数据包。不过,这种操作相当繁琐,而且大多数实现方式在发布新版本的 Minecraft 后就会失效,主要是因为代码难以理解的问题。
那很明显了,它是支持多版本的,它说的一种常见的做法是修改传入和传出的数据包,或者向数据流中插入自定义数据包就是我们刚才提到的NMS了
但是Protocollib有几个缺点:
- 性能开销(通过反射实现,并且Protocollib的官方评论区有人说到会导致服务器lag)
- 代码质量(有人说道,Protocollib的dev已经开始使用AI来生成代码了)(AI生成的代码可能会导致更多的bug)
- API易用性(相较于PacketEvents更为复杂)
- 稳定性(很多人反馈说:
它会导致不稳定问题,还会引发与原始数据包相关的问题...)
可能还会有其他的bug
所以,选择PacketEvents!
PacketEvents
README说:
PacketEvents 是一个专为 Minecraft Java 版设计的协议库,旨在方便数据包的处理与传输。
PacketEvents有很多优点,比如:
- 多平台支持(Paper,Fabric,Spigot,Sponge,Velocity,Bungeecord等)
- 高性能
- 高稳定性
- 多版本支持(通过数据包封装来实现,相较于反射更好)
目前PacketEvents也在积极维护中
总之,你要是想写一个性能好的反作弊,首选PacketEvents
代码方面
如果你不怎么会Minecraft相关的东西,你可以去参考一些开源的反作弊,如FairFight(MIT协议)
好了后面的以后再写
转载请注明出处