(根据https://www.mcbbs.net/forum.php?mod=viewthread&tid=568714仿写)
代码:
- import org.bukkit.entity.Player;
- import org.bukkit.plugin.java.JavaPlugin;
- import com.comphenix.protocol.PacketType;
- import com.comphenix.protocol.ProtocolLibrary;
- import com.comphenix.protocol.ProtocolManager;
- import com.comphenix.protocol.events.ListenerOptions;
- import com.comphenix.protocol.events.ListenerPriority;
- import com.comphenix.protocol.events.PacketAdapter;
- import com.comphenix.protocol.events.PacketContainer;
- import com.comphenix.protocol.events.PacketEvent;
- import com.comphenix.protocol.injector.GamePhase;
- public class PluginMain extends JavaPlugin {
- ProtocolManager pm;
-
- @Override
- public void onEnable() {
- pm = ProtocolLibrary.getProtocolManager();//pm放入对象
-
- System.out.println("【PLIB】监听器开始创建");
- //创建数据包监听器
- pm.addPacketListener(
- new PacketAdapter(
- PacketAdapter.params()
- .plugin(this)//必须
- .clientSide()
- .serverSide()
- .listenerPriority(ListenerPriority.NORMAL)
- .gamePhase(GamePhase.PLAYING)
- .optionAsync()
- .options(ListenerOptions.SKIP_PLUGIN_VERIFIER)
- .types(PacketType.Play.Server.TITLE, //必须
- PacketType.Play.Client.FLYING
- )
-
- ) {
- @Override
- public void onPacketReceiving(PacketEvent event) {
- PacketContainer packet = event.getPacket();
- PacketType packetType = event.getPacketType();
-
- //PacketType.Play.Client.FLYING = net.minecraft.server.XXX.PacketPlayInFlying 类
- Player player = event.getPlayer();
-
- if(packetType.equals(PacketType.Play.Client.FLYING)) {
-
- double x = packet.getDoubles().getValues().get(0);
- double y = packet.getDoubles().getValues().get(1);
- double z = packet.getDoubles().getValues().get(2);
-
- float yaw = packet.getFloat().getValues().get(0);
- float pitch = packet.getFloat().getValues().get(1);
-
- boolean onGround = packet.getBooleans().getValues().get(0);
- boolean hasPos = packet.getBooleans().getValues().get(1);
- boolean hasLook = packet.getBooleans().getValues().get(2);
- player.sendMessage("x:"+x+" y:"+y+" z:"+z);
- player.sendMessage("yaw:"+yaw+" pitch"+pitch);
- player.sendMessage("onGround:"+onGround+" hasPos:"+hasPos+" hasLook:"+hasLook);
- }
-
-
- }
- @Override
- public void onPacketSending(PacketEvent event) {
- PacketContainer packet = event.getPacket();
- PacketType packetType = event.getPacketType();
- Player player = event.getPlayer();
- }
- }
- );
-
- System.out.println("【PLIB】监听器创建完毕");
-
- }
-
-
-
-
-
-
- }
报错原因:
- [23:30:06] [Netty Server IO #1/WARN]: Failed to initialize a channel. Closing: [id: 0x0b35f21f, L:/192.168.1.104:25564 - R:/192.168.1.104:9386]
- java.lang.NoSuchMethodError: com.google.common.base.Objects.toStringHelper(Ljava/lang/Object;)Lcom/google/common/base/Objects$ToStringHelper;
- at com.comphenix.protocol.events.ListeningWhitelist.toString(ListeningWhitelist.java:241) ~[?:?]
- at java.lang.String.valueOf(Unknown Source) ~[?:1.8.0_211]
- at java.lang.StringBuilder.append(Unknown Source) ~[?:1.8.0_211]
- at com.comphenix.protocol.reflect.PrettyPrinter.printValue(PrettyPrinter.java:273) ~[?:?]
- at com.comphenix.protocol.reflect.PrettyPrinter.printObject(PrettyPrinter.java:246) ~[?:?]
- at com.comphenix.protocol.reflect.PrettyPrinter.printObject(PrettyPrinter.java:251) ~[?:?]
- at com.comphenix.protocol.reflect.PrettyPrinter.printValue(PrettyPrinter.java:285) ~[?:?]
- at com.comphenix.protocol.reflect.PrettyPrinter.printValue(PrettyPrinter.java:257) ~[?:?]
- at com.comphenix.protocol.reflect.PrettyPrinter.printIterables(PrettyPrinter.java:144) ~[?:?]
- at com.comphenix.protocol.reflect.PrettyPrinter.printValue(PrettyPrinter.java:277) ~[?:?]
- at com.comphenix.protocol.reflect.PrettyPrinter.printObject(PrettyPrinter.java:246) ~[?:?]
- at com.comphenix.protocol.reflect.PrettyPrinter.printObject(PrettyPrinter.java:124) ~[?:?]
- at com.comphenix.protocol.reflect.PrettyPrinter.printObject(PrettyPrinter.java:102) ~[?:?]
- at com.comphenix.protocol.reflect.PrettyPrinter.printObject(PrettyPrinter.java:89) ~[?:?]
- at com.comphenix.protocol.error.DetailedErrorReporter.getStringDescription(DetailedErrorReporter.java:480) ~[?:?]
- at com.comphenix.protocol.error.DetailedErrorReporter.reportDetailed(DetailedErrorReporter.java:369) ~[?:?]
- at com.comphenix.protocol.error.DelegatedErrorReporter.reportDetailed(DelegatedErrorReporter.java:63) ~[?:?]
- at com.comphenix.protocol.error.DelegatedErrorReporter.reportDetailed(DelegatedErrorReporter.java:87) ~[?:?]
- at com.comphenix.protocol.injector.netty.ProtocolInjector$1.initChannel(ProtocolInjector.java:149) ~[?:?]
- at io.netty.channel.ChannelInitializer.initChannel(ChannelInitializer.java:113) [ChannelInitializer.class:?]
- at io.netty.channel.ChannelInitializer.handlerAdded(ChannelInitializer.java:105) [ChannelInitializer.class:?]
- at io.netty.channel.DefaultChannelPipeline.callHandlerAdded0(DefaultChannelPipeline.java:597) [DefaultChannelPipeline.class:?]
- at io.netty.channel.DefaultChannelPipeline.addLast(DefaultChannelPipeline.java:226) [DefaultChannelPipeline.class:?]
- at io.netty.channel.DefaultChannelPipeline.addLast(DefaultChannelPipeline.java:392) [DefaultChannelPipeline.class:?]
- at io.netty.channel.DefaultChannelPipeline.addLast(DefaultChannelPipeline.java:379) [DefaultChannelPipeline.class:?]
- at com.comphenix.protocol.injector.netty.ProtocolInjector$2.initChannel(ProtocolInjector.java:159) [%5B前置-架构%5DProtocolLib.jar:4.0.1-b291]
- at io.netty.channel.ChannelInitializer.initChannel(ChannelInitializer.java:113) [ChannelInitializer.class:?]
- at io.netty.channel.ChannelInitializer.handlerAdded(ChannelInitializer.java:105) [ChannelInitializer.class:?]
- at io.netty.channel.DefaultChannelPipeline.callHandlerAdded0(DefaultChannelPipeline.java:597) [DefaultChannelPipeline.class:?]
- at io.netty.channel.DefaultChannelPipeline.access$000(DefaultChannelPipeline.java:44) [DefaultChannelPipeline.class:?]
- at io.netty.channel.DefaultChannelPipeline$PendingHandlerAddedTask.execute(DefaultChannelPipeline.java:1387) [DefaultChannelPipeline$PendingHandlerAddedTask.class:?]
- at io.netty.channel.DefaultChannelPipeline.callHandlerAddedForAllHandlers(DefaultChannelPipeline.java:1122) [DefaultChannelPipeline.class:?]
- at io.netty.channel.DefaultChannelPipeline.invokeHandlerAddedIfNeeded(DefaultChannelPipeline.java:647) [DefaultChannelPipeline.class:?]
- at io.netty.channel.AbstractChannel$AbstractUnsafe.register0(AbstractChannel.java:506) [AbstractChannel$AbstractUnsafe.class:?]
- at io.netty.channel.AbstractChannel$AbstractUnsafe.access$200(AbstractChannel.java:419) [AbstractChannel$AbstractUnsafe.class:?]
- at io.netty.channel.AbstractChannel$AbstractUnsafe$1.run(AbstractChannel.java:478) [AbstractChannel$AbstractUnsafe$1.class:?]
- at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163) [AbstractEventExecutor.class:?]
- at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:403) [SingleThreadEventExecutor.class:?]
- at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:442) [NioEventLoop.class:?]
- at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858) [SingleThreadEventExecutor$5.class:?]
- at java.lang.Thread.run(Unknown Source) [?:1.8.0_211]
protocollib与mc版本不兼容
高度怀疑你下载了latest dev build,这个构筑版本只兼容1.16.1
直接下载https://github.com/dmulloy2/ProtocolLib/releases/tag/4.5.1
高度怀疑你下载了latest dev build,这个构筑版本只兼容1.16.1
直接下载https://github.com/dmulloy2/ProtocolLib/releases/tag/4.5.1
疾风暗影 发表于 2020-6-30 23:40
protocollib与mc版本不兼容
高度怀疑你下载了latest dev build,这个构筑版本只兼容1.16.1
的确是版本不匹配……
顺带问一下,
PacketType.Play.Client.FLYING
这个是监听什么事件?
只要玩家处于飞行状态就会触发?
(可是我的这三行↓语句始终没有被发到玩家聊天框中)
- player.sendMessage("x:"+x+" y:"+y+" z:"+z);
- player.sendMessage("yaw:"+yaw+" pitch"+pitch);
- player.sendMessage("onGround:"+onGround+" hasPos:"+hasPos+" hasLook:"+hasLook);
aa0307bb 发表于 2020-7-1 01:04
的确是版本不匹配……
顺带问一下,
这个是监听什么事件?
这个就是监测飞行事件的,应该是玩家飞行状态改变时触发
疾风暗影 发表于 2020-7-1 01:40
这个就是监测飞行事件的,应该是玩家飞行状态改变时触发
emmmm
但是测过,无论是创造模式下 飞行变落地,落地变飞行
还是生存模式下 落地变鞘翅飞行 还是 鞘翅飞行变落地 还是创造飞行变生存落地
%^&*(*&^
几乎都不触发
(唯一一次触发是在生存模式下不知道干了什么就触发了...)