Protocollib плагин за что отвечает
Плагин ProtocolLib | Вспомогательная библиотека для сервере Minecraft
- Опубликовано 08-06-2021, 17:36 Категория Плагины / 1.17 / 1.16 / 1.15 / 1.14 / 1.13 / 1.12 / 1.11 / 1.10 / 1.9 / 1.8 Просмотров 2 137
Описание плагина:
Основные команды:
Пример конфига:
auto updater.notify: true #Информировать любого игрока с protocol.info разрешение при появлении новой версии ProtocolLib выходит.
auto updater.download: false #Автоматически загружать и устанавливать новейшую версию ProtocolLib. Установка вступит в силу после перезапуска сервера.
auto updater.delay: 43200 #Количество секунд между каждой проверкой нового обновления.
auto updater.last: 0 #Это просто записывает последний раз (в секундах с 01.01.1970) была выполнена проверка обновления. Установите его в 0 в силу новая проверка обновлений.
metrics: true #Если TRUE, ProtocolLib опубликует анонимные данные об использовании в mcstats.org. Установите значение FALSE, чтобы отказаться.
background compiler: true #Если TRUE, ProtocolLib попытается улучшить производительность, заменив отражение скомпилированным кодом на лету.
ignore version check: None #Принудительно запустить ProtocolLib для указанной версии Minecraft, даже если она несовместима.
Установка:
2. Возьмите скачанный файл и перенесите в папку plugins вашего сервера.
Bukkit
Bukkit Plugins
Pages
Tutorial
Table of Contents
A new API
ProtocolLib attempts to solve the network compatibility problem by providing a event API, much like Bukkit, that allow plugins to monitor, modify or cancel packets sent and received. But more importantly, the API also hides all the gritty, obfuscated classes with a simple index based read/write system. You no longer have to reference CraftBukkit!
Using ProtocolLib
To use the library, first add ProtocolLib.jar to your Java build path. Then, add ProtocolLib as a dependency (or soft-dependency, if you can live without it) to your plugin.yml file: Code:
In Eclipse, you can add the online JavaDoc documentation by right-clicking the JAR file in Project Explorer. Choose Properties, and from the left pane choose JavaDoc Location. Finally enter the following URL:
The first thing you need is a reference to ProtocolManager. Just add the following in onEnable() and you’re good to go.
ProtocolLib uses an event API similar to Bukkit. The base listener class is PacketListener, but most people use PacketAdapter, which handles some of the overhead. In this tutorial, we will use PacketAdapter.
To listen for packets sent by the server to a client, add a server-side listener:
In the above code snippet, we created a PacketAdapter that will listen for sounds. The arguments are: your plugin instance, listener priority (optional), and a variable argument array of PacketTypes to listen for. In this case, we only listened for one packet, but theoretically you could listen for all of them.
It’s also possible to read and modify the content of these packets. For instance, you can create a global censor by listening for Packet3Chat events:
Sending packets
Normally, you might have to do something ugly like the following:
But with ProtocolLib, you can turn that into something more manageable. Notice that you don’t have to create an ArrayList this version:
If you use PacketWrapper, you can get an even easier version. This is especially useful if you’re trying to send a entity spawn packet:
Remember to add AbstractPacket AND WrapperPlayServerExplosion to your project.
Cloning packets
Certain packets, such as Entity Equipment, Entity Metadata or Update Tile Entity, share the same instance when they are broadcasted to a group of players.
For instance, if you want to use armor color to designate hostile or friendly status, you might modify the armor color of every player individually before its sent to a player. But, for packets that are shared amongst players, this will only preserve the last written color, and thus every player will see what the last player written (or a random player) was supposed to see.
The solution is to clone each packet before writing to them (full code):
Raw packet data
You can also get a hold of the raw packet data, as seen in the network stream between the client and the server. Take a look at this write up for more information. You can even customize how the packet will be written to the output stream.
Bukkit
Bukkit Plugins
ProtocolLib
Table of Contents
ProtocolLib
ProtocolLib has, for the most part, moved over to Spigot! If you need support, head over there!
Certain tasks are impossible to perform with the standard Bukkit API, and may require working with and even modify Minecraft directly. A common technique is to modify incoming and outgoing packets, or inject custom packets into the stream. This is quite cumbersome to do, however, and most implementations will break as soon as a new version of Minecraft has been released, mostly due to obfuscation.
Critically, different plugins that use this approach may hook into the same classes, with unpredictable outcomes. More than often this causes plugins to crash, but it may also lead to more subtle bugs.
Links
Development builds of ProtocolLib can be found here: https://ci.dmulloy2.net/job/ProtocolLib/
These builds have not been approved by the BukkitDev staff. Use them at your own risk.
Support
Please create a issue with as much information as possible if you experience a problem that has not already been reported. Comments with a huge stack trace will be deleted.
If you need help with the API, please use the issue tracker. If your question cannot be made public for whatever reason (including security bugs), send me a personal message instead.
For server operators
Just download ProtocolLib from the link above. It doesn’t do anything on its own, it simply allows other plugins to function.
The reason for these exceptions is because ProtocolLib is not using the packet format as described on the Wiki, it’s using the in-memory representation of these packets. Often, the in-memory representation will use integers instead of shorts and bytes, and store more complex objects (like ItemStacks) directly.
You can figure out the in-memory representation from the Minecraft source code, or just use PacketWrapper where I’ve done all that work for you.
Examples
Source code for a bunch of example programs that use ProtocolLib can be found at this thread on the main support forum.
You may also be interested in PacketWrapper, a library that makes it possible to modify a packet without having to decompile the Minecraft source code.
Finally, for the more advanced users who want to use ProtocolLib if present, but still fall back on their own packet listening system, I recommend taking a look at this thread. I explain where and how to inject code into CraftBukkit in order to intercept sent and received packets yourself.
Maven repository
If you’re using Maven, you’ll be able to automatically download the JAR, JavaDoc and associated sources from the following repository:
You can add it as a dependency like so:
Commands
Protocol
Main administrative command. Supports the following sub-commands:
All of these commands require the permission protocol.admin.
Packet
Add or remove a debug packet listener. This is useful for plugin authors who just wants to see when a packet is sent, and with what content.
Parameters (in order):
For 3.0.0 and above, you should specify the protocol, sender and name instead:
In 3.4.0-SNAPSHOT and above, you can also display the packet before its modified by any packet listeners:
Remove all listeners:
Note that this command should rarely be used on a production server. Listening to too many packets may crash the server.
Filter
This should be much more convenient than having to compile a test plugin and reload the whole server. Note that this feature is disabled by default for security reasons. To enable it, add «debug: true» to config.yml.
Configuration
A small set of configuration options are available:
Global section
For more information, take a look at the default configuration file.
Tutorial for developers
See this page for more information.
Compatibility
One of the main goals of this project was to achieve maximum compatibility with Minecraft. And the end result is quite good, it should be resilient against future changes. It’s likely that I won’t have to update ProtocolLib for anything but bug and performance fixes.
(note that the below list hasn’t been updated in ages and ymmv)
Plugins that appear to be compatible
Plugins known to be compatible
Plugins using ProtocolLib
Inactive projects
Please let me know if you want me to add your plugin to this list. 🙂
Privacy
This plugin uses BStats to generate and publish anonymous aggregate usage statistics, but you can easily opt-out by setting metrics in config.yml to false.
If enabled, the following is sent every ten minutes:
Donating
If ProtocolLib has made your life significantly easier or you’re feeling particularly generous, consider donating! It’s a great way to support the many hours I’ve spent maintaining this plugin and keeps me motivated. Don’t donate if you can’t afford it.
I would like to thank everyone who has donated to ProtocoLib on BukkitDev. I really appreciate it. 🙂
Note: Create an issue if you’re having problems. I generally don’t check the BukkitDev comments.
ProtocolLib
Загрузка
Предыдущие версии
Название | Размер | Обновлено | Версия игры | Загрузок | |
ProtocolLib 4.5.1 release | 1.43 MB | Jun 4, 2020 | 1.15 | 64,151 | Скачать |
ProtocolLib 4.4.0 release | 1.41 MB | Sep 22, 2018 | 1.13 | 76,873 | Скачать |
ProtocolLib 4.2.1 release | 1.38 MB | Apr 11, 2017 | 1.11 | 162,537 | Скачать |
ProtocolLib 4.2.0 release | 1.37 MB | Dec 21, 2016 | 1.11 | 60,560 | Скачать |
ProtocolLib 4.1.0 release | 1.37 MB | Sep 18, 2016 | 1.10 | 58,225 | Скачать |
ProtocolLib 4.0.2 release | 1.36 MB | Jul 10, 2016 | 1.10 | 54,143 | Скачать |
ProtocolLib 4.0.1 release | 1.36 MB | May 22, 2016 | 1.9 | 60,663 | Скачать |
ProtocolLib 4.0.0 release | 1.35 MB | May 15, 2016 | 1.9 | 21,118 | Скачать |
ProtocolLib 3.6.5 release | 1.42 MB | Feb 17, 2016 | 1.8.1 | 122,152 | Скачать |
ProtocolLib 3.6.4 release | 1.38 MB | Jul 12, 2015 | 1.8.3 | 323,329 | Скачать |
ProtocolLib 3.4.0 release | 1.25 MB | Jun 15, 2014 | CB 1.7.9-R0.1 | 643,452 | Скачать |
ProtocolLib 3.3.1 release | 1.21 MB | Apr 17, 2014 | CB 1.7.2-R0.3 | 115,159 | Скачать |
ProtocolLib 3.2.0 release | 1.19 MB | Jan 29, 2014 | 1.7.2 | 177,385 | Скачать |
ProtocolLib 3.1.2 release | 1.19 MB | Jan 19, 2014 | 1.7.4 | 21,376 | Скачать |
ProtocolLib 3.1.0 release | 1.18 MB | Dec 27, 2013 | 1.7.4 | 26,818 | Скачать |
ProtocolLib 3.0.1 release | 1.16 MB | Dec 10, 2013 | 1.7.2 | 29,702 | Скачать |
ProtocolLib 2.7.3 release | 1,007.91 KB | Oct 6, 2013 | 1.6.4 | 70,492 | Скачать |
ProtocolLib 2.7.0 release | 995.20 KB | Sep 2, 2013 | CB 1.6.2-R0.1 | 51,336 | Скачать |
ProtocolLib 2.6.0 release | 983.74 KB | Jul 31, 2013 | 1.6.2 | 46,163 | Скачать |
ProtocolLib 2.5.0 release | 946.85 KB | Jul 22, 2013 | 1.6.2 | 12,214 | Скачать |
ProtocolLib 2.4.7 release | 877.75 KB | Jul 5, 2013 | 1.6.1 | 17,080 | Скачать |
ProtocolLib 2.4.5 release | 878.21 KB | Jun 20, 2013 | CB 1.5.2-R1.0 | 33,159 | Скачать |
ProtocolLib 2.4.3 release | 875.46 KB | May 13, 2013 | CB 1.5.2-R0.1 | 46,373 | Скачать |
ProtocolLib 2.4.1 release | 854.09 KB | Apr 9, 2013 | CB 1.5.1-R0.1 | 40,649 | Скачать |
ProtocolLib 2.3.0 release | 826.33 KB | Mar 5, 2013 | CB 1.4.7-R1.0 | 36,990 | Скачать |
ProtocolLib 2.2.0 release | 810.54 KB | Feb 5, 2013 | CB 1.4.7-R1.0 | 30,243 | Скачать |
ProtocolLib 2.1.0 release | 746.57 KB | Jan 22, 2013 | CB 1.4.7-R0.1 | 14,630 | Скачать |
ProtocolLib 2.0.0 release | 739.63 KB | Jan 10, 2013 | CB 1.4.6-R0.3 | 13,206 | Скачать |
ProtocolLib 1.9.0 release | 688.34 KB | Dec 27, 2012 | CB 1.4.6-R0.1 | 11,906 | Скачать |
ProtocolLib 1.8.1 release | 660.33 KB | Dec 19, 2012 | CB 1.4.5-R1.0 | 14,709 | Скачать |
ProtocolLib 1.8.0 release | 659.33 KB | Dec 10, 2012 | CB 1.4.5-R0.2 | 9,843 | Скачать |
ProtocolLib 1.7.1 release | 644.45 KB | Dec 3, 2012 | CB 1.4.5-R0.2 | 5,809 | Скачать |
ProtocolLib 1.7.0 release | 644.00 KB | Nov 21, 2012 | CB 1.4.5-R0.2 | 3,979 | Скачать |
ProtocolLib 1.6.0 release | 634.08 KB | Nov 13, 2012 | CB 1.4.2-R0.2 | 2,361 | Скачать |
ProtocolLib 1.5.1 release | 613.95 KB | Nov 4, 2012 | CB 1.4.2-R0.2 | 3,545 | Скачать |
ProtocolLib 1.5.0 release | 568.72 KB | Oct 29, 2012 | 1.4.2 | 1,708 | Скачать |
ProtocolLib 1.4.2 release | 557.11 KB | Oct 21, 2012 | CB 1.3.2-R2.0 | 1,391 | Скачать |
ProtocolLib 1.4.1 release | 506.25 KB | Oct 17, 2012 | CB 1.3.2-R2.0 | 704 | Скачать |
ProtocolLib 1.4.0 release | 506.12 KB | Oct 17, 2012 | CB 1.3.2-R1.0 | 445 | Скачать |
ProtocolLib 1.3.2 release | 476.46 KB | Oct 12, 2012 | CB 1.3.2-R1.0 | 557 | Скачать |
ProtocolLib 1.3.0 release | 464.03 KB | Oct 5, 2012 | CB 1.3.2-R1.0 | 826 | Скачать |
Описание
ProtocolLib
ПротоколЛиб, по большей части, перешел на Спигот! Если вам нужна поддержка, идите туда!
Некоторые задачи невозможно выполнить с помощью стандартного API Bukkit, и может потребоваться работать с Minecraft и даже изменять его напрямую. Распространенный метод заключается в изменении входящих и исходящих пакетов или внедрении пользовательских пакетов в поток. Однако это довольно громоздко сделать, и большинство реализаций сломаются, как только будет выпущена новая версия Minecraft, в основном из-за запутывания.
Критически важно, что различные плагины, использующие этот подход, могут подключаться к одним и тем же классам с непредсказуемыми результатами. Чаще всего это приводит к сбою плагинов, но может привести и к более тонким ошибкам.
Связи
Сборки разработки ProtocolLib можно найти здесь: https://ci.dmulloy2.net/job/ProtocolLib/
Эти сборки не были одобрены сотрудниками BukkitDev. Используйте их на свой страх и риск.
Поддержка
Пожалуйста, создайте проблему с как можно большим количеством информации, если вы столкнулись с проблемой, о которой еще не сообщалось. Комментарии с огромной трассировкой стека будут удалены.
Если вам нужна помощь с API, пожалуйста, используйте трекер проблем. Если ваш вопрос не может быть обнародован по какой-либо причине (включая ошибки безопасности), отправьте мне личное сообщение.
Для администраторов серверов
Просто скачайте ProtocolLib по ссылке выше. Он ничего не делает сам по себе, он просто позволяет другим плагинам функционировать.
ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ
Причина этих исключений заключается в том, что ProtocolLib не использует формат пакетов, как описано в Wiki, а использует представление этих пакетов в памяти. Часто представление в памяти будет использовать целые числа вместо коротких чисел и байтов и хранить более сложные объекты (например, ItemStacks) непосредственно.
Вы можете выяснить представление в памяти из исходного кода Minecraft или просто использовать PacketWrapper, где я сделал всю эту работу за вас.
Примеры
Исходный код для множества примеров программ, использующих ProtocolLib, можно найти в этой теме на главном форуме поддержки.
Вы также можете быть заинтересованы в PacketWrapper, библиотеке, которая позволяет изменять пакет без необходимости декомпилировать исходный код Minecraft.
Наконец, для более продвинутых пользователей, которые хотят использовать ProtocolLib, если таковой имеется, но все же возвращаются к своей собственной системе прослушивания пакетов, я рекомендую взглянуть на этот поток. Я объясняю, где и как вводить код в CraftBukkit, чтобы самостоятельно перехватывать отправленные и полученные пакеты.
Хранилище Maven
Если вы используете Maven, вы сможете автоматически загрузить JAR, JavaDoc и связанные с ними источники из следующего репозитория:
Вы можете добавить его как зависимость вот так:
Команды
Протокол
Главное административное командование. Поддерживает следующие субкоманды:
Все эти команды требуют разрешения protocol.admin.
Пакет
Добавьте или удалите прослушиватель отладочных пакетов. Это полезно для авторов плагинов, которые просто хотят видеть, когда отправляется пакет и с каким содержимым.
Параметры (по порядку):
Для версии 3.0.0 и выше вместо этого следует указать протокол, отправителя и имя:
В версии 3.4.0-SNAPSHOT и выше вы также можете отобразить пакет до его изменения любыми прослушивателями пакетов:
Удалить всех слушателей:
Обратите внимание, что эта команда редко должна использоваться на рабочем сервере. Прослушивание слишком большого количества пакетов может привести к сбою сервера.
Фильтр
Система фильтров (введенная в 2.4.1) использует встроенный интерпретатор JavaScript в JVM 6 (Rhino) для расширения пакетной команды возможностями фильтрации — теперь можно, скажем, печатать только события пакета метаданных сущностей (packet add server 40) для заданного идентификатора сущности:
Это должно быть гораздо удобнее, чем компилировать тестовый плагин и перезагружать весь сервер. Обратите внимание, что эта функция по умолчанию отключена по соображениям безопасности. Чтобы включить его, добавьте «debug: true» в файл config.yml.
Конфигурация
Имеется небольшой набор конфигурационных опций:
Общий раздел
Для получения дополнительной информации ознакомьтесь с файлом конфигурации по умолчанию.
Учебник для разработчиков
См.Эту страницу для получения дополнительной информации.
Совместимость
Одной из главных целей этого проекта было достижение максимальной совместимости с Minecraft. И конечный результат вполне хорош, он должен быть устойчив к будущим изменениям. Вполне вероятно, что мне не придется обновлять ProtocolLib ни для чего, кроме исправлений ошибок и производительности.
Как это возможно? В конце концов все сводится к размышлениям. По сути, ни одно имя не является жестко закодированным — каждое поле, метод и класс выводятся путем просмотра типов полей, имен пакетов или типов параметров. Он удивительно последователен в разных версиях.
(обратите внимание, что приведенный ниже список не обновлялся в течение веков и ymmv)
Плагины, которые кажутся совместимыми
Плагины, которые, как известно, совместимы
Плагины, использующие ProtocolLib
Неактивные проекты
Пожалуйста, дайте мне знать, если вы хотите, чтобы я добавил ваш плагин в этот список. 🙂
Конфиденциальность
Этот плагин использует BStats для создания и публикации анонимной агрегированной статистики использования, но вы можете легко отказаться от нее, установив метрики в config.yml в false.
Если эта функция включена, то каждые десять минут отправляется следующее сообщение:
Пожертвование
Если ПротоколЛиб значительно облегчил вашу жизнь или вы чувствуете себя особенно щедрым, подумайте о пожертвовании! Это отличный способ поддержать многие часы, которые я потратил на поддержание этого плагина, и поддерживает мою мотивацию. Не жертвуйте, если не можете себе этого позволить.
Я хотел бы поблагодарить всех, кто пожертвовал ПротокоЛиб на БуккитДев. Я действительно ценю это. 🙂
Примечание: Создайте проблему, если у вас возникли проблемы. Обычно я не проверяю комментарии Буккитдева.