aa0307bb


(根据https://www.mcbbs.net/forum.php?mod=viewthread&tid=568714仿写)
代码:

  1. import org.bukkit.entity.Player;
  2. import org.bukkit.plugin.java.JavaPlugin;

  3. import com.comphenix.protocol.PacketType;
  4. import com.comphenix.protocol.ProtocolLibrary;
  5. import com.comphenix.protocol.ProtocolManager;
  6. import com.comphenix.protocol.events.ListenerOptions;
  7. import com.comphenix.protocol.events.ListenerPriority;
  8. import com.comphenix.protocol.events.PacketAdapter;
  9. import com.comphenix.protocol.events.PacketContainer;
  10. import com.comphenix.protocol.events.PacketEvent;
  11. import com.comphenix.protocol.injector.GamePhase;

  12. public class PluginMain extends JavaPlugin {

  13.         ProtocolManager pm;
  14.                
  15.         @Override
  16.         public void onEnable() {
  17.                 pm = ProtocolLibrary.getProtocolManager();//pm放入对象
  18.                
  19.                 System.out.println("【PLIB】监听器开始创建");
  20.                 //创建数据包监听器
  21.                 pm.addPacketListener(
  22.                                 new PacketAdapter(
  23.                                                 PacketAdapter.params()
  24.                                                 .plugin(this)//必须
  25.                                                 .clientSide()
  26.                                                 .serverSide()
  27.                                                 .listenerPriority(ListenerPriority.NORMAL)
  28.                                                 .gamePhase(GamePhase.PLAYING)
  29.                                                 .optionAsync()
  30.                                                 .options(ListenerOptions.SKIP_PLUGIN_VERIFIER)
  31.                                                 .types(PacketType.Play.Server.TITLE, //必须
  32.                                                                 PacketType.Play.Client.FLYING
  33.                                                 )
  34.                                
  35.                                 ) {
  36.                                         @Override
  37.                                         public void onPacketReceiving(PacketEvent event) {
  38.                                                 PacketContainer packet = event.getPacket();
  39.                                                 PacketType packetType = event.getPacketType();
  40.                                                
  41.                                                 //PacketType.Play.Client.FLYING = net.minecraft.server.XXX.PacketPlayInFlying 类
  42.                                                 Player player = event.getPlayer();
  43.                                                
  44.                                                 if(packetType.equals(PacketType.Play.Client.FLYING)) {
  45.                                                        
  46.                                                         double x = packet.getDoubles().getValues().get(0);
  47.                                                         double y = packet.getDoubles().getValues().get(1);
  48.                                                         double z = packet.getDoubles().getValues().get(2);
  49.                                                        
  50.                                                         float yaw = packet.getFloat().getValues().get(0);
  51.                                                         float pitch = packet.getFloat().getValues().get(1);
  52.                                                        
  53.                                                         boolean onGround = packet.getBooleans().getValues().get(0);
  54.                                                         boolean hasPos = packet.getBooleans().getValues().get(1);
  55.                                                         boolean hasLook = packet.getBooleans().getValues().get(2);
  56.                                                         player.sendMessage("x:"+x+" y:"+y+" z:"+z);
  57.                                                         player.sendMessage("yaw:"+yaw+" pitch"+pitch);
  58.                                                         player.sendMessage("onGround:"+onGround+" hasPos:"+hasPos+" hasLook:"+hasLook);
  59.                                                 }
  60.                                                
  61.                                                
  62.                                         }
  63.                                         @Override
  64.                                         public void onPacketSending(PacketEvent event) {
  65.                                                 PacketContainer packet = event.getPacket();
  66.                                                 PacketType packetType = event.getPacketType();
  67.                                                 Player player = event.getPlayer();
  68.                                         }
  69.                                 }
  70.                 );
  71.                
  72.                 System.out.println("【PLIB】监听器创建完毕");
  73.                
  74.         }
  75.        
  76.        
  77.        
  78.        
  79.        
  80.                
  81. }
复制代码


报错原因:
  1. [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]
  2. java.lang.NoSuchMethodError: com.google.common.base.Objects.toStringHelper(Ljava/lang/Object;)Lcom/google/common/base/Objects$ToStringHelper;
  3.         at com.comphenix.protocol.events.ListeningWhitelist.toString(ListeningWhitelist.java:241) ~[?:?]
  4.         at java.lang.String.valueOf(Unknown Source) ~[?:1.8.0_211]
  5.         at java.lang.StringBuilder.append(Unknown Source) ~[?:1.8.0_211]
  6.         at com.comphenix.protocol.reflect.PrettyPrinter.printValue(PrettyPrinter.java:273) ~[?:?]
  7.         at com.comphenix.protocol.reflect.PrettyPrinter.printObject(PrettyPrinter.java:246) ~[?:?]
  8.         at com.comphenix.protocol.reflect.PrettyPrinter.printObject(PrettyPrinter.java:251) ~[?:?]
  9.         at com.comphenix.protocol.reflect.PrettyPrinter.printValue(PrettyPrinter.java:285) ~[?:?]
  10.         at com.comphenix.protocol.reflect.PrettyPrinter.printValue(PrettyPrinter.java:257) ~[?:?]
  11.         at com.comphenix.protocol.reflect.PrettyPrinter.printIterables(PrettyPrinter.java:144) ~[?:?]
  12.         at com.comphenix.protocol.reflect.PrettyPrinter.printValue(PrettyPrinter.java:277) ~[?:?]
  13.         at com.comphenix.protocol.reflect.PrettyPrinter.printObject(PrettyPrinter.java:246) ~[?:?]
  14.         at com.comphenix.protocol.reflect.PrettyPrinter.printObject(PrettyPrinter.java:124) ~[?:?]
  15.         at com.comphenix.protocol.reflect.PrettyPrinter.printObject(PrettyPrinter.java:102) ~[?:?]
  16.         at com.comphenix.protocol.reflect.PrettyPrinter.printObject(PrettyPrinter.java:89) ~[?:?]
  17.         at com.comphenix.protocol.error.DetailedErrorReporter.getStringDescription(DetailedErrorReporter.java:480) ~[?:?]
  18.         at com.comphenix.protocol.error.DetailedErrorReporter.reportDetailed(DetailedErrorReporter.java:369) ~[?:?]
  19.         at com.comphenix.protocol.error.DelegatedErrorReporter.reportDetailed(DelegatedErrorReporter.java:63) ~[?:?]
  20.         at com.comphenix.protocol.error.DelegatedErrorReporter.reportDetailed(DelegatedErrorReporter.java:87) ~[?:?]
  21.         at com.comphenix.protocol.injector.netty.ProtocolInjector$1.initChannel(ProtocolInjector.java:149) ~[?:?]
  22.         at io.netty.channel.ChannelInitializer.initChannel(ChannelInitializer.java:113) [ChannelInitializer.class:?]
  23.         at io.netty.channel.ChannelInitializer.handlerAdded(ChannelInitializer.java:105) [ChannelInitializer.class:?]
  24.         at io.netty.channel.DefaultChannelPipeline.callHandlerAdded0(DefaultChannelPipeline.java:597) [DefaultChannelPipeline.class:?]
  25.         at io.netty.channel.DefaultChannelPipeline.addLast(DefaultChannelPipeline.java:226) [DefaultChannelPipeline.class:?]
  26.         at io.netty.channel.DefaultChannelPipeline.addLast(DefaultChannelPipeline.java:392) [DefaultChannelPipeline.class:?]
  27.         at io.netty.channel.DefaultChannelPipeline.addLast(DefaultChannelPipeline.java:379) [DefaultChannelPipeline.class:?]
  28.         at com.comphenix.protocol.injector.netty.ProtocolInjector$2.initChannel(ProtocolInjector.java:159) [%5B前置-架构%5DProtocolLib.jar:4.0.1-b291]
  29.         at io.netty.channel.ChannelInitializer.initChannel(ChannelInitializer.java:113) [ChannelInitializer.class:?]
  30.         at io.netty.channel.ChannelInitializer.handlerAdded(ChannelInitializer.java:105) [ChannelInitializer.class:?]
  31.         at io.netty.channel.DefaultChannelPipeline.callHandlerAdded0(DefaultChannelPipeline.java:597) [DefaultChannelPipeline.class:?]
  32.         at io.netty.channel.DefaultChannelPipeline.access$000(DefaultChannelPipeline.java:44) [DefaultChannelPipeline.class:?]
  33.         at io.netty.channel.DefaultChannelPipeline$PendingHandlerAddedTask.execute(DefaultChannelPipeline.java:1387) [DefaultChannelPipeline$PendingHandlerAddedTask.class:?]
  34.         at io.netty.channel.DefaultChannelPipeline.callHandlerAddedForAllHandlers(DefaultChannelPipeline.java:1122) [DefaultChannelPipeline.class:?]
  35.         at io.netty.channel.DefaultChannelPipeline.invokeHandlerAddedIfNeeded(DefaultChannelPipeline.java:647) [DefaultChannelPipeline.class:?]
  36.         at io.netty.channel.AbstractChannel$AbstractUnsafe.register0(AbstractChannel.java:506) [AbstractChannel$AbstractUnsafe.class:?]
  37.         at io.netty.channel.AbstractChannel$AbstractUnsafe.access$200(AbstractChannel.java:419) [AbstractChannel$AbstractUnsafe.class:?]
  38.         at io.netty.channel.AbstractChannel$AbstractUnsafe$1.run(AbstractChannel.java:478) [AbstractChannel$AbstractUnsafe$1.class:?]
  39.         at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163) [AbstractEventExecutor.class:?]
  40.         at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:403) [SingleThreadEventExecutor.class:?]
  41.         at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:442) [NioEventLoop.class:?]
  42.         at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858) [SingleThreadEventExecutor$5.class:?]
  43.         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

aa0307bb
疾风暗影 发表于 2020-6-30 23:40
protocollib与mc版本不兼容
高度怀疑你下载了latest dev build,这个构筑版本只兼容1.16.1

的确是版本不匹配……
顺带问一下,
PacketType.Play.Client.FLYING

这个是监听什么事件?
只要玩家处于飞行状态就会触发?
(可是我的这三行↓语句始终没有被发到玩家聊天框中)
  1. player.sendMessage("x:"+x+" y:"+y+" z:"+z);
  2.                                                         player.sendMessage("yaw:"+yaw+" pitch"+pitch);
  3.                                                         player.sendMessage("onGround:"+onGround+" hasPos:"+hasPos+" hasLook:"+hasLook);
复制代码

天辉胡萝卜
aa0307bb 发表于 2020-7-1 01:04
的确是版本不匹配……
顺带问一下,
这个是监听什么事件?

这个就是监测飞行事件的,应该是玩家飞行状态改变时触发

aa0307bb
疾风暗影 发表于 2020-7-1 01:40
这个就是监测飞行事件的,应该是玩家飞行状态改变时触发

emmmm
但是测过,无论是创造模式下 飞行变落地,落地变飞行
还是生存模式下 落地变鞘翅飞行 还是 鞘翅飞行变落地 还是创造飞行变生存落地
%^&*(*&^
几乎都不触发
(唯一一次触发是在生存模式下不知道干了什么就触发了...)