1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

[Решено] Bungee Velocity не выполняется Event

Тема в разделе "Разработка плагинов для новичков", создана пользователем LilClick, 2 дек 2022.

Статус темы:
Закрыта.
  1. Автор темы
    LilClick

    LilClick Активный участник Пользователь

    Баллы:
    61
    Имя в Minecraft:
    Lil_Click
    Доброго времени суток, проблема такова, что Велосити просто не выполняет PluginMessageEvent

    Эвент зареган.

    Velocity:
    Код:
     @Subscribe
        public void onServerMessage(PluginMessageEvent e) {
            System.out.println("123455555");
            String tag = e.getIdentifier().getId();
            v.getLogger().info(tag);
            if (!tag.equals("BungeeCord")) return;
            DataInputStream inputStream = new DataInputStream(new ByteArrayInputStream(e.getData()));
            String channel = null;
            try {
                channel = inputStream.readUTF();
            } catch (IOException ex) {
                throw new RuntimeException(ex);
            }
            v.getLogger().info(channel);
    //            System.out.println(channel);
            switch (channel) {
                case "Burn":
                    v.getLogger().info("Ok");
                    try {
                        String owner = inputStream.readUTF();
                        String playerNick = inputStream.readUTF();
                        double value = inputStream.readDouble();
                        ByteArrayOutputStream stream = new ByteArrayOutputStream();
                        DataOutputStream outputStream = new DataOutputStream(stream);
                        outputStream.writeUTF(channel);
                        outputStream.writeUTF(owner);
                        outputStream.writeUTF(playerNick);
                        outputStream.writeDouble(value);
                        server.getPlayer(playerNick).get().getCurrentServer().get().getServer().sendPluginMessage(() -> "BungeeCord", stream.toByteArray());
                    } catch (IOException ex) {
                        ex.printStackTrace();
                    }
                    break;
            }
        }

    Bukkit:

    Код:
        public static void sendRequestWhiteList(String owner, String playerNick, double value) {
            ByteArrayDataOutput out = ByteStreams.newDataOutput();
            out.writeUTF("Burn");
            out.writeUTF(owner);
            out.writeUTF(playerNick);
            out.writeDouble(value);
            getInstance().getServer().sendPluginMessage(getInstance(), "bungeecord:main", out.toByteArray());
            log.info(out + " ");
        }
     
  2. Lemar98

    Lemar98 Активный участник Пользователь

    Баллы:
    76
    Не смотря на код сразу предупрежу, что на сервере должен быть онлайн, чтобы plugin messaging работал
     
  3. Автор темы
    LilClick

    LilClick Активный участник Пользователь

    Баллы:
    61
    Имя в Minecraft:
    Lil_Click
    Я знаю, я просто пытаюсь затестить Велосити т.к. многие говорят что это лучше чем Банжа

    Скажем учусь.
     
  4. Dymeth

    Dymeth Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Попробуй использовать произвольное название канала вместо bungeecord:main. Есть вариант, что этот канал обрабатывает сам Velocity и дальше не пускает сообщения на обработку.

    А если используешь канал банжи, то надо пользоваться саб-каналами Forward и ForwardToPlayer:
    https://www.spigotmc.org/wiki/bukkit-bungee-plugin-messaging-channel/#forward
    https://www.spigotmc.org/wiki/bukkit-bungee-plugin-messaging-channel/#forwardtoplayer
     
  5. Автор темы
    LilClick

    LilClick Активный участник Пользователь

    Баллы:
    61
    Имя в Minecraft:
    Lil_Click
    Привет, спасибо за ответ, нет, не работает к сожалению, я использовал и произвольные названия и каналы, просто не хочет работать сам эвент обработчик, просто эвент не отвечает запросам.
     
  6. Автор темы
    LilClick

    LilClick Активный участник Пользователь

    Баллы:
    61
    Имя в Minecraft:
    Lil_Click
    Вообщем, решили проблему
    Так как Velocity использует bungeecord:main для своих нужд
    Dymeth был прав, ток надо было зарегать канал.

    Velocity:
    Код:
    server.getChannelRegistrar().register(MinecraftChannelIdentifier.create("yourplugin", "main"));
            

    Bukkit:
    Код:
         Bukkit.getMessenger().registerOutgoingPluginChannel(this, "yourplugin:main");
            Bukkit.getMessenger().registerIncomingPluginChannel(this, "yourplugin:main", this);
    
     
Статус темы:
Закрыта.

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