Помогите (Надо почитать немного код =) ) getValue() возвращает null

  • Автор темы Автор темы slime_j
  • Дата начала Дата начала

slime_j

Участник
Пользователь
Баллы
36
Имя в Minecraft
slime_j
Версия 1.17.1 spigot почему getValue() возвращает null

Код:
private Object getValue(Object instance, String name) {

        try {

            Field field = instance.getClass().getDeclaredField(name);
            field.setAccessible(true);
            return field.get(instance);

        } catch (Exception e) {

            e.printStackTrace();

        }

        return null;
    }
ему передаются данные из
Код:
public void readPacket(Player player, Packet<?> packet) {
        if(packet.getClass().getSimpleName().equalsIgnoreCase("PacketPlayInUseEntity")) {
            System.out.println("1" + packet);
            if(getValue(packet, "action").toString().equalsIgnoreCase("ATTACK")) {
                return;
            }
            if(getValue(packet, "d").toString().equalsIgnoreCase("OFF_HAND")) {
                return;
            }
            if(getValue(packet, "action").toString().equalsIgnoreCase("INTERACT_AT")) {
                return;
            }
            int id = (int) getValue(packet, "a");
            
            if(getValue(packet, "action").toString().equalsIgnoreCase("INTERACT")) {
                for (EntityPlayer npc : NPC.getNPCs()) {
                    if(npc.getId() == id) {
                        Bukkit.getScheduler().scheduleSyncDelayedTask(Main.getPlugin(Main.class), new Runnable() {
                            @Override
                            public void run() {
                                Bukkit.getPluginManager().callEvent(new RightClickNPC(player, npc));   
                            }
                        }, 0);
                    }
                }
            }
        }
    }

а readPacket() получает данные из
Код:
public void inject(Player player) {
        
        CraftPlayer craftPlayer = (CraftPlayer) player;
        channel = craftPlayer.getHandle().b.a.k;
        if(channel==null) return;
        channels.put(player.getUniqueId(), channel);
        
        if( channel.pipeline().get("PacketInjector") != null)
            return;
        
        channel.pipeline().addAfter("decoder", "PacketInjektor", new MessageToMessageDecoder<Packet<?>>() {
            @Override
            protected void decode(ChannelHandlerContext channel, Packet<?> packet, List<Object> arg) throws Exception {
                arg.add(packet);
                readPacket(player, packet);
            }
        });
    }
player берется при заходе NPC на сервер
Код:
PacketReader reader = new PacketReader();
        reader.inject(event.getPlayer());
 
Пакеты уже лет сто все отправляют ProtocolLib'ом.
Ошибки есть в консоли?
 
Проблема заключается в том что в версии 1 17 убрали поля "action" и я не знаю как теперь проверить правый клик или левый делается по NPC поэтому я просто пропустил эту проверку и всё работает. Если кто-то знает как преобразовать поле "action" под 1 17 отпишите пожалуйста
 
Проблема заключается в том что в версии 1 17 убрали поля "action" и я не знаю как теперь проверить правый клик или левый делается по NPC поэтому я просто пропустил эту проверку и всё работает. Если кто-то знает как преобразовать поле "action" под 1 17 отпишите пожалуйста
Зайти в нужный и посмотреть новое название.
Но если бы проблема была действительно в отсутствии полей - ты бы видел ошибки в консоли. Но, судя по твоим словам, ошибок в консоли не было
 
Зайти в нужный и посмотреть новое название.
Но если бы проблема была действительно в отсутствии полей - ты бы видел ошибки в консоли. Но, судя по твоим словам, ошибок в консоли не было
мне просто выбивало ошибку getValue return null
А null он возвращал из-за того что поля "action" не существует
 
мне просто выбивало ошибку getValue return null
А null он возвращал из-за того что поля "action" не существует
Помимо нулла ещё одна ошибка должна быть, поскольку ты выводишь стек при броске исключения. Ну, в общем, не важно. Главное, что разобрался
 
Для начала нет там никакого поля Action начиная как раз с 1.17.1. Там теперь полне в котором хранится конкретный инстанс кодека действия. О чём тебе кстати должно было быть написано в трейсе ошибки.
 
Назад
Верх