Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите Получение LivingEntity из PacketListener

Статус
Закрыто для дальнейших ответов.

Bars

Старожил
Девелопер
Пользователь
Баллы
173
Маскирую шлем на головах зомби через ProtocolLib (отлавливаю пакет Entity Equipment и модифицирую "на лету"), и мне нужно получить объект самой сущности:
Java:
        protocolManager.addPacketListener(
            new PacketAdapter(this, ListenerPriority.NORMAL, PacketType.Play.Server.ENTITY_EQUIPMENT) {
           @SuppressWarnings("deprecation")
            @Override
           public void onPacketSending(PacketEvent event) {
               if (event.getPacketType() == PacketType.Play.Server.ENTITY_EQUIPMENT) {
                  WrapperPlayServerEntityEquipment ee = new WrapperPlayServerEntityEquipment();
                  LivingEntity en = (LivingEntity)event.getPacket().getEntityModifier(event.getPlayer().getWorld()).read(0);
                  ee.setEntityId(en.getEntityId());
                  ee.setSlot((short)4);
                  if (en.getCustomName() == null)
                      ee.setItem(null);
                  else {
                      ItemStack head = new ItemStack(Material.SKULL_ITEM, 1, (byte)3);
                      SkullMeta skullMeta = (SkullMeta)head.getItemMeta();
                      skullMeta.setOwner(en.getCustomName());
                      head.setItemMeta(skullMeta);
                      ee.setItem(head);
                  }
                  for(Player online : getServer().getOnlinePlayers()) ee.sendPacket(online);
               }
           }
        });
Правильно я это делаю?
 
Последнее редактирование:
14.02.2015 11:46:59 [SEVERE] [OnlyMZ] Unhandled exception occured in onPacketSending(PacketEvent) for OnlyMZ
14.02.2015 11:46:59 java.lang.IllegalArgumentException: Unknown packet type:S0CPacketSpawnPlayer[legacy: 20]
14.02.2015 11:46:59 at ru.onlymc.OnlyMZ.MineZ$1.onPacketSending(MineZ.java:170) ~[OnlyMZ-obf.jar:?]
14.02.2015 11:46:59 at com.comphenix.protocol.injector.SortedPacketListenerList.invokeSendingListener(SortedPacketListenerList.java:195) [ProtocolLib_v3.6.0.jar:?]
14.02.2015 11:46:59 at com.comphenix.protocol.injector.SortedPacketListenerList.invokePacketSending(SortedPacketListenerList.java:149) [ProtocolLib_v3.6.0.jar:?]
14.02.2015 11:46:59 at com.comphenix.protocol.injector.PacketFilterManager.handlePacket(PacketFilterManager.java:634) [ProtocolLib_v3.6.0.jar:?]
14.02.2015 11:46:59 at com.comphenix.protocol.injector.PacketFilterManager.invokePacketSending(PacketFilterManager.java:610) [ProtocolLib_v3.6.0.jar:?]
14.02.2015 11:47:00 at com.comphenix.protocol.injector.netty.NettyProtocolInjector.packetQueued(NettyProtocolInjector.java:286) [ProtocolLib_v3.6.0.jar:?]
14.02.2015 11:47:00 at com.comphenix.protocol.injector.netty.NettyProtocolInjector.onPacketSending(NettyProtocolInjector.java:254) [ProtocolLib_v3.6.0.jar:?]
14.02.2015 11:47:00 at com.comphenix.protocol.injector.netty.ChannelInjector.processSending(ChannelInjector.java:385) [ProtocolLib_v3.6.0.jar:?]
14.02.2015 11:47:00 at com.comphenix.protocol.injector.netty.ChannelInjector.access$500(ChannelInjector.java:61) [ProtocolLib_v3.6.0.jar:?]
14.02.2015 11:47:00 at com.comphenix.protocol.injector.netty.ChannelInjector$5.handleScheduled(ChannelInjector.java:349) [ProtocolLib_v3.6.0.jar:?]
14.02.2015 11:47:00 at com.comphenix.protocol.injector.netty.ChannelInjector$5.onMessageScheduled(ChannelInjector.java:317) [ProtocolLib_v3.6.0.jar:?]
14.02.2015 11:47:00 at com.comphenix.protocol.injector.netty.ChannelProxy$2.schedulingRunnable(ChannelProxy.java:110) [ProtocolLib_v3.6.0.jar:?]
14.02.2015 11:47:00 at com.comphenix.protocol.injector.netty.EventLoopProxy.execute(EventLoopProxy.java:76) [ProtocolLib_v3.6.0.jar:?]
14.02.2015 11:47:00 at net.minecraft.network.NetworkManager.func_150732_b(NetworkManager.java:188) [ej.class:?]
14.02.2015 11:47:00 at net.minecraft.network.NetworkManager.func_150725_a(NetworkManager.java:158) [ej.class:?]
14.02.2015 11:47:00 at net.minecraft.network.NetHandlerPlayServer.func_147359_a(NetHandlerPlayServer.java:1022) [nh.class:?]
14.02.2015 11:47:00 at net.minecraft.entity.EntityTrackerEntry.func_73117_b(EntityTrackerEntry.java:435) [my.class:?]
14.02.2015 11:47:00 at net.minecraft.entity.EntityTracker.func_85172_a(EntityTracker.java:338) [mn.class:?]
14.02.2015 11:47:00 at net.minecraft.entity.player.EntityPlayerMP.localOnUpdate(EntityPlayerMP.java:382) [mw.class:?]
14.02.2015 11:47:00 at api.player.server.ServerPlayerAPI.onUpdate(ServerPlayerAPI.java:5065) [ServerPlayerAPI.class:?]
14.02.2015 11:47:00 at api.player.server.ServerPlayerAPI.onUpdate(ServerPlayerAPI.java:5051) [ServerPlayerAPI.class:?]
14.02.2015 11:47:00 at net.minecraft.entity.player.EntityPlayerMP.func_70071_h_(EntityPlayerMP.java) [mw.class:?]
14.02.2015 11:47:00 at net.minecraft.world.World.func_72866_a(World.java:2633) [ahb.class:?]
14.02.2015 11:47:00 at net.minecraft.world.WorldServer.func_72866_a(WorldServer.java:838) [mt.class:?]
14.02.2015 11:47:00 at net.minecraft.world.World.func_72870_g(World.java:2586) [ahb.class:?]
14.02.2015 11:47:00 at net.minecraft.world.World.func_72939_s(World.java:2398) [ahb.class:?]
14.02.2015 11:47:00 at net.minecraft.world.WorldServer.func_72939_s(WorldServer.java:669) [mt.class:?]
14.02.2015 11:47:00 at net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.java:943) [MinecraftServer.class:?]
14.02.2015 11:47:00 at net.minecraft.server.dedicated.DedicatedServer.func_71190_q(DedicatedServer.java:423) [lt.class:?]
14.02.2015 11:47:00 at net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:798) [MinecraftServer.class:?]
14.02.2015 11:47:00 at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:658) [MinecraftServer.class:?]
14.02.2015 11:47:00 at java.lang.Thread.run(Unknown Source) [?:1.7.0_71]
Java:
        protocolManager.addPacketListener(
            new PacketAdapter(this, ListenerPriority.NORMAL, PacketType.Play.Server.ENTITY_EQUIPMENT, PacketType.Play.Server.NAMED_ENTITY_SPAWN) {
            @Override
           public void onPacketSending(PacketEvent event) {
              PacketContainer packet = event.getPacket();
                PacketType type = event.getPacketType();
               
                // The entity that is being displayed on the player's screen
                LivingEntity en = (LivingEntity) packet.getEntityModifier(event).read(0); // Visible entity
                //Player p = event.getPlayer(); // Observing player
               if (PacketType.Play.Server.ENTITY_EQUIPMENT.equals(type)) {
                  WrapperPlayServerEntityEquipment ee = new WrapperPlayServerEntityEquipment();
                  ee.setEntityId(en.getEntityId());
                  ee.setSlot((short)4);
                  if (en.getCustomName() == null)
                      ee.setItem(null);
                  else {
                      ItemStack head = new ItemStack(Material.SKULL_ITEM, 1, (byte)3);
                      SkullMeta skullMeta = (SkullMeta)head.getItemMeta();
                      skullMeta.setOwner(en.getCustomName());
                      head.setItemMeta(skullMeta);
                      ee.setItem(head);
                  }
                  event.setPacket(ee.getHandle());
                } else {
                    throw new IllegalArgumentException("Unknown packet type: " + type);
                }
           }
        });
170-я строчка (на ней ошибка) - это throw new IllegalArgumentException.
А зачем тебе это, если не секрет?
Зомби теряют скорость днём и вяло тащатся в тень, откуда ноль реакции на игроков. Когда на них шлем, они не прячутся. Вот и вся логика)
 
Зомби теряют скорость днём и вяло тащатся в тень, откуда ноль реакции на игроков. Когда на них шлем, они не прячутся. Вот и вся логика)
Круто. В паблик кинешь?
 
Когда ты получаешь NAMED_ENTITY_SPAWN на вход ты бросаешь исключение. Естественно это не работает. Следи за логикой блин.
 
Когда ты получаешь NAMED_ENTITY_SPAWN на вход ты бросаешь исключение. Естественно это не работает. Следи за логикой блин.
Аа, точно. Это наверное из-за NAMED_ENTITY_SPAWN. К нему ещё прилагался else (перед else throw), который я убрал. Всё, спасибо
 
Статус
Закрыто для дальнейших ответов.

Поделиться этой страницей

Назад
Верх