Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Помогите client-server

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

  1. Автор темы
    RikkiTikkiTavi

    RikkiTikkiTavi Ньюби

    Баллы:
    1
    Добрый день.
    Ломаю голову над каналами. Вопрос в том, как на стороне клиента принять канал. Сам ничего не понимаю...
    https://dinnerbone.com/blog/2012/01/13/minecraft-plugin-channels-messaging/
    В английском не силен. Поверхностно разобрался, но сути все равно не понял.
    Буду благодарен если кто-то объяснит.
     
  2. Хостинг MineCraft
    <
  3. Arturik11

    Arturik11 Новичок

    Баллы:
    6
    Имя в Minecraft:
    _ARTEM_KLIS_
    Майнкрафт Каналы Плагин + Сообщений
    Написано Dinnerbone на Января. 13, 2012 в Майнкрафт, под bukkit.

    Некоторые наблюдательными разработчики уже заметили, что появился новый пакет в Minecraft 1.1, без цели или использования в любом месте в коде. Вы можете быть удивлены, почему это было добавлено, и чем это могло. Вам также может быть интересно, кому это надо, и зачем вы эту страницу открытой. Я здесь, чтобы ответить на все эти вопросы в миленький (оговорка: не может быть мало) блоге!

    Обновление: посмотрите FAQ по этому сюда! Теперь с простых вопросов типа "А что это фактически означает?"

    Предыстория
    Мы сделали некоторые думали некоторое время назад, о том, как государство модов клиента и сервера для minecraft модов не очень, что это может быть. Есть так много проблем с конфликтами и один мод вызывает ошибку в другом и так далее, что это действительно вредит потенциал в Minecraft моддинга в целом. Хотя мы отнюдь не считаем, что мы можем решить эту проблему, мы начали строить теории, которая позволила бы по крайней мере улучшить модов играть вместе, и попытаться сделать вещи лучше для всех - пользователей, клиент модеров, а модеров на сервере. Самое главное, те, кто подходит во всех вышеперечисленных!

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

    Честно говоря, весь этот бардак. Я уверен, что большинство людей согласятся со мной здесь. Есть попытки обходные пути, конечно, но они могут сломать с minecraft обновление и все становится только хуже. Так что это, где мы начали разговаривать с mojang по поводу улучшения этой.

    Мы разработали систему, с помощью Йенс, которая должна решить проблемы совместимости между клиентом и модами сервера, постоянно. Это вдохновило мир военных кораблей собственного подхода к сходным (но не совсем как большой) вопрос, и мы только расширили его. Я называю это плагин каналы.

    Для Всех Модеров
    Система является в основном следующим образом:

    Сервер и клиент имеют список своих установленных модами, и эти моды зарегистрироваться для конкретного канала(ов), каждый (их можно смешивать-н-matchбыл, или его нет вообще, это не важно). Клиент сообщает серверу, какие каналы он слушает, и сервер тут же к клиенту. Теперь у них есть хорошая идея о том, что другая сторона может поддержать.

    Затем клиент мод можете отправить сообщение плагин для сервера с помощью определенного канала для данного типа сообщения, которое он хочет отправить. Сервер получает это сообщение и мод на сервере будет читать его и делать свое дело с содержанием.

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

    Эта система реализуется в ванили, и Вы не врежетесь в любую ванильный клиент (или сервер!) используя эту систему, ни в будущем. Что не любить об этом?

    Пример
    Давайте представим, что наш сервере установлен мод, который позволяет создавать клиентские скины. Это работает путем отправки сообщения плагина на канале "секретом фирмы, защищенным многочисленными:установлено". Клиент мод того же автора прослушивает этот канал для Сообщения плагин, и получается, что в PNG, что очень легко, потому что все сообщения только файлы PNG сжатых в массив байтов. Затем он меняет игроков скин ПНГ при получении.

    У нас есть игрок присоединиться, "Джеймс". Он этот клиент установлен мод. Его клиент связывается с сервером и сообщает ему, что она имеет мод прослушивание "секретом фирмы, защищенным многочисленными:набор", и сервер запоминает это. У нас есть еще один игрок присоединится к "Сара". Она не имеет данный клиент установлен мод.

    Мод сервера решает дать обоим игрокам новый скин с футболочкой, так он посылает сообщение плагин для обоих игроков через канал "секретом фирмы, защищенным многочисленными:набор" с кожей, закодированных в сообщении. Мод сервера идет через любой API оболочки на месте, и он решил отправить сообщение для Джеймса, потому что он прослушивает этот канал и, таким образом, может поддерживать сообщение. Он не пошлет его в Сару, потому что ее клиент не сообщает серверу, что она может поддерживать это, потому что она не может.

    Джеймс идет в третьем лице-взгляд и замечает, у него есть классная футболка, и чудеса, что волшебство делает это возможным. Он говорит Саре сделать то же самое, потому что это выглядит действительно здорово. Она дает ему попробовать, но ничего не вышло - она не имеет мод установлен, так ничего и не получилось. Тем не менее, она не сломалась от получения плохой пакет - так она счастлива!

    Для авторы API
    Должен быть базовый API для этого система должна быть простой для обычного клиента и сервера модеров в использовании. Он должен обрабатывать, регистрирующих каналов плагин, регистрации и, если требуется, и должны убедиться в том, что не найден модуль отправки сообщений на любые клиенты, которые не объявил, что они слушают для этого конкретного канала.

    По шкале пакетов, это довольно просто. Идентификатор пакета составляет 250 (0xFA), и имеет следующий Формат:

    String, // Plugin Channel - something unique to the mod and this type of message. 16 chars max.
    int, // Message Length - length of the message, must be below short.MAX_LENGTH (32,767).
    byte[] // Plugin Message - the message itself, whatever it may be.

    Канал может быть все, что угодно, за двумя исключениями (в ближайшее время), но чувствителен к регистру. Он имеет 16-символьного ограничения, которые должны быть достаточно для теперь, но я уверен, что компания mojang увеличить его при необходимости. Содержание сообщения полностью зависит от мод, отправляющий сообщение, но имеет максимальную длину 32,766. Если это проблема, вы можете легко сделать что-то разбить на несколько сообщений.

    Когда у вас есть мод, который просит для прослушивания плагин канала, вы должны отправить сообщение плагин с каналом "зарегистрироваться", далее следует имя (или имена, разделенные \0) каналов, это сейчас слушает. Если плагин решил, что больше не прослушивает канал, вы можете отправить "отмена регистрации" сообщение точно так же, как "регистрация". Эти два канала будут помечены как закрытые, так и без модов должны быть способны регистрировать этих двух каналов. В настоящее время они являются только каналы.

    Под Bukkit Плагин Девс
    Этот API bukkit для уже разработана и на момент написания статьи, была отодвинута жить. Основное использование это:

    // This informs Bukkit that you will send messages through that channel
    Bukkit.getMessenger().registerOutgoingPluginChannel(plugin, channel);

    // This informs Bukkit that you want to receive messages through that channel, to myPluginMessageListener
    Bukkit.getMessenger().registerIncomingPluginChannel(plugin, channel, myPluginMessageListener);

    class MyPluginMessageListener implements PluginMessageListener {
    public void onPluginMessageReceived(String channel, Player player, byte[] message) {
    // Do something with this message from the player
    }
    }

    somePlayer.sendPluginMessage(plugin, channel, message);

    Для полной документации по API, обратитесь к документации. Вы можете найти совершал там

    Для пользователей
    Надеюсь, ты больше не будешь иметь никаких серьезных проблем между модов клиента и серверных модов. Радуйтесь :)

    Для тех, кто удосужился прочитать до дна
    Я Приветствую Вас.

    ДЕРЖИ
     

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