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

Помогите Bukkit/BungeeCord Plugin Messaging Channel forward

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

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

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

    Баллы:
    76
    Имя в Minecraft:
    Limon_MineDel
    У меня есть 2 моих плагина, 1 на BungeeCord другой на Spigot. Мне надо делать 2 запроса со Spigot где должна возращаться строка. Например есть типо запрос от Spigot с названием ismuted, ник и получаем значение в String, и запрос mutestring, ник и возращается тоже строка. Как это сделать с помощью
    Bukkit/BungeeCord Plugin Messaging Channel forward?
     
  2. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
  3. Автор темы
    Limon-mine

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

    Баллы:
    76
    Имя в Minecraft:
    Limon_MineDel
  4. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    По этим каналам можно "с одной стороны" отправить произвольный массив байт и принять его "с другой стороны".
    Для формирования массива байт используется DataOutputStream.
    Собственно, все необходимые данные и записываются в этот буфер.
    По ссылке выше показан пример передачи строки "Some kind of data here" и числа 123.
    Для передачи данных требуется онлайн-игрок (как, собственно, и для всех других каналов)
     
  5. Автор темы
    Limon-mine

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

    Баллы:
    76
    Имя в Minecraft:
    Limon_MineDel
    А как мне получать ник который был там написан? и на Screenshot.png указывается ник и данные, но мне не надо указывать ник откуда я отправляю данные, а на
    Screenshot (1).png не указывается ник, а мне надо получать данные.
     

    Вложения:

  6. Автор темы
    Limon-mine

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

    Баллы:
    76
    Имя в Minecraft:
    Limon_MineDel
    Мне надо на Bungee что б если приход запрос с ником и названием запроса, я отправлял данные . А на spigot я отправлял запрос с ником и назв запроса и мне приходили данные
     
  7. Автор темы
    Limon-mine

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

    Баллы:
    76
    Имя в Minecraft:
    Limon_MineDel
    задачка не решена
     
  8. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Не понял твоего вопроса.
    Что запишешь - то и прочитаешь.
    Можно и ник записать строкой.

    Где "там"?

    Данные игрока можно отправлять через любого игрока, который онлайн. Если сервер пуст - отправить данные ты не сможешь.

    Ну, с одной стороны отправляй, с другой получай. В чём конкретно проблема?

    Ещё раз - в чём конкретно проблема?
    Регистрируешь канал на банже и на спиготе, и для входящего, и для исходящего трафика.
    На банже при получении запроса отправляешь обратно на спигот ответ с нужной тебе информацией.

    Если совсем туго - скопируй пример, запусти, проверь, что всё работает. Затем уже меняй под себя, под свои задачи
     
  9. Автор темы
    Limon-mine

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

    Баллы:
    76
    Имя в Minecraft:
    Limon_MineDel
    Мне надо так. Я отправляю запрос со Spigot с ником игрока, Bungee мне возращает замучен ли игрок или нет, Если замучен то мне надо получить строку со Spigot, мне bungee возращает строку
     
  10. MurlikMurlik

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

    Баллы:
    96
    Попробуй использовать другой дизайн.
    Если ты пишешь систему мутов, напиши ее прямо на банжикорде и прямо на нем блокируй чат, сразу отпадет необходимость как то синхронизировать эти данные между серверами
     
  11. Автор темы
    Limon-mine

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

    Баллы:
    76
    Имя в Minecraft:
    Limon_MineDel
    Я пишу на чат плагин и на баны, а локальный чат обходит евент и пишет по другому в чат с помощью получение игроков которые вблизи и отправки каждому сообщение.
     
  12. Автор темы
    Limon-mine

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

    Баллы:
    76
    Имя в Minecraft:
    Limon_MineDel
    А если через MySQL сделать то я смогу смотреть замучен или нет, но как мне туда закинуть очень большую строку с русскими буквами в MySQL?
     
    Последнее редактирование: 16 янв 2022
  13. OJIEKCAHDP

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

    Баллы:
    76
    Имя в Minecraft:
    OJIEKCAHDP
    LONGTEXT используется для больших строк. MySQL нужен чтобы это всё хранить.

    BungeeCord:
    Код:
        @Override
        public void onEnable() {
            this.getProxy().registerChannel("ban:handler");
        }
    Listener:
    Код:
    @EventHandler
    public void on(PluginMessageEvent e) {
        if (!e.getTag().equalsIgnoreCase("ban:handler")) return;
        ByteArrayDataInput in = ByteStreams.newDataInput(e.getData());
        String subChannel = in.readUTF();
        if (e.getReceiver() instanceof ProxiedPlayer) {
            ProxiedPlayer player = (ProxiedPlayer) e.getReceiver();
            if (subChannel.startsWith("check player mute")) {
                //отсылаешь ответ
                return;
            }
        }
    }
        }
    Spigot:
    Код:
    this.getServer().getMessenger().registerIncomingPluginChannel(this, "ban:handler", new MessageListener());
    this.getServer().getMessenger().registerOutgoingPluginChannel(this, "ban:handler");
    
    MessageListener:
    Код:
    public class MessageListener implements PluginMessageListener {
        @Override
        public void onPluginMessageReceived(@NotNull String channel, @NotNull Player player, @NotNull byte[] bytes) {
            if (!channel.equals("ban:handler")) return;
            ByteArrayDataInput in = ByteStreams.newDataInput(bytes);
            String subChannel = in.readUTF();
            if (subchannel.startsWith("ответ банжи")) {
            //действие
          }
        }
    }
    
    Отправить сообщение:
    Код:
            
    Спигот:
    ByteArrayDataOutput out = ByteStreams.newDataOutput();
            out.writeUTF("check player mute");
            this.player.sendPluginMessage(main.getInstance(), "ban:handler", out.toByteArray());
    Банжа: 
    //то же самое начало
    this.player.getServer().getInfo().sendData("ban:handler", out.toByteArray());
    
     
Статус темы:
Закрыта.

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