Вопрос Помогите с ProtocolLib

Harm

Пользователь
Сообщения
20
Не понимаю как работать с этой библиотекой. Пытаюсь подменить броню, но у меня выводит ошибку. Вот код:

Java:
        manager.addPacketListener(new PacketAdapter(this, PacketType.Play.Server.ENTITY_EQUIPMENT) {
            @Override
            public void onPacketSending(PacketEvent event) {
                if (event.getPacketType() == PacketType.Play.Server.ENTITY_EQUIPMENT) {
                    if (!(event.getPacket().getItemModifier().read(0).getType() == Material.AIR)) {
                        if (event.getPacket().getItemModifier().read(0).getItemMeta().getLocalizedName().equals("test")) {
                            ItemStack playerItem = event.getPacket().getItemModifier().read(0);
                            ItemMeta playerItemItemMeta = playerItem.getItemMeta();
                            Material material = playerItem.getType();

                            ItemStack itemStack = new ItemStack(material);
                            ItemMeta itemMeta = itemStack.getItemMeta();

                            LeatherArmorMeta playerLeatherArmorMeta = (LeatherArmorMeta) playerItemItemMeta;
                            Color color = playerLeatherArmorMeta.getColor();

                            LeatherArmorMeta leatherArmorMeta = (LeatherArmorMeta) itemMeta;
                            leatherArmorMeta.setColor(color);

                            event.getPacket().getItemModifier().write(0, itemStack);
                        }
                    }
                }
            }
        });

А вот ошибка:

[17:13:19] [Server thread/ERROR]: [ConquerorSet] Unhandled exception occurred in onPacketSending(PacketEvent) for ConquerorSet
com.comphenix.protocol.reflect.FieldAccessException: Field index 0 is out of bounds for length 0
 
Решение
Java:
ProtocolLibrary.getProtocolManager().addPacketListener(new PacketAdapter(this, PacketType.Play.Server.ENTITY_EQUIPMENT) {
            @Override
            public void onPacketSending(PacketEvent event) {
                if (event.getPacketType() == PacketType.Play.Server.ENTITY_EQUIPMENT) {
                    PacketContainer container = event.getPacket();

                    List<Pair<EnumWrappers.ItemSlot, ItemStack>> stackPairs = container.getSlotStackPairLists().read(0);

                    for (Pair<EnumWrappers.ItemSlot, ItemStack> pair : stackPairs) {
                        ItemStack item = pair.getSecond();
                        if (item.getType().isEmpty() || !item.getItemMeta().getLocalizedName().equals("test"))...
Java:
ProtocolLibrary.getProtocolManager().addPacketListener(new PacketAdapter(this, PacketType.Play.Server.ENTITY_EQUIPMENT) {
            @Override
            public void onPacketSending(PacketEvent event) {
                if (event.getPacketType() == PacketType.Play.Server.ENTITY_EQUIPMENT) {
                    PacketContainer container = event.getPacket();

                    List<Pair<EnumWrappers.ItemSlot, ItemStack>> stackPairs = container.getSlotStackPairLists().read(0);

                    for (Pair<EnumWrappers.ItemSlot, ItemStack> pair : stackPairs) {
                        ItemStack item = pair.getSecond();
                        if (item.getType().isEmpty() || !item.getItemMeta().getLocalizedName().equals("test")) continue;

                        ItemStack itemStack = new ItemStack(Material.DIAMOND_CHESTPLATE);

                        pair.setSecond(itemStack);
                    }

                    container.getSlotStackPairLists().write(0, stackPairs);
                }
            }
        });

Должно работать, не проверял
 
  • Мне нравится (+1)
Реакции: Harm
Назад
Сверху Снизу