Информация о поддержке языков программирования
Java - не самый удобный и не самый легкочитаемый язык. Поэтому мы воздерживаемся от написания новых плагинов на Java и стараемся по возможности переписывать код на Kotlin. Используйте Java, только если вы уже знаете этот язык и если ваш плагин достаточно большой, чтобы писать его на скриптах.
Кроме того, в целях будущей совместимости с Android мы рекомендуем использовать версию языка 1.6 и не использовать класс java.nio.
Под внутренним плагином мы понимаем плагин, который интегрирован в основной проект, а не является отдельным проектом. Такие плагины удобней писать и тестировать. Чтобы создать внутренний плагин, вам требуется:
- Скачать код DeskChan
- Создать папку src/main/java/info/deskchan/название_плагина
- Создать файл Main.java внутри этой папки
- Если вам требуется использовать ресурсы, создайте папку src/main/resources/info/deskchan/название_плагина. Они будут автоматически подключены.
- Манифесты не поддерживаются. Заполняйте необходимые поля для конфига плагина вручную через PluginProxyInterface.setConfigField при инициализации плагина
- Добавьте ваш плагин в список запускаемых:
- Добавьте имя вашего плагина в список ext.standardJarPlugins в файле build.gradle
- Или добавьте следующую строчку в файл src/main/kotlin/info/deskchan/core/Main.kt
pluginManager.tryLoadPluginByPackageName("info.deskchan.название_плагина")
- Создайте проект
- Обычный проект с компиляцией в JAR Artefact
- Или Gradle проект с Jar задачей
- Импортируйте библиотеку ProxyInterface.jar из папки libs стандартной сборки DeskChan
- Создать папку src/main/java/info/deskchan/название_плагина
- Создать файл Main.java внутри этой папки
- Если вам требуется использовать ресурсы, создайте папку src/main/resources. Вам требуется прописать поле внутри манифеста
'Resources': "info/deskchan/название_плагина/strings"
- Манифест создаётся вручную в случае обычного проекта или генерируется в случае Gradle проекта.
Пример такого плагина можно увидеть здесь.
Инструкции полностью аналогичны разделу Java
Groovy выгоден тем, что это скриптовый язык, выполнение которого полностью контролируемо вплоть до предварительного изменения текста скриптов.
- Создайте папку plugins/название_плагина
- Создайте файл plugin.groovy в этой папке
- Тело скрипта фактически является текстом функции initialize плагина
- Функция unload заменена на addCleanupHandler
- Скриптом является только файл plugin.groovy. Все остальные файлы с кодом в плагине обязаны иметь структуру класса, как и в случае Java/Kotlin. Кроме того, они являются отдельным классом от класса плагина, поэтому им изначально недоступен PluginProxyInterface. Им требуется передать объект прокси вручную.
- Манифест можно задать, создав файл manifest.json в папке плагина. Манифест обязан быть заполнен в формате JSON.
- Для использования ресурсов создайте подпапку resources в папке плагина. Добавьте в код плагина строчку:
setResourceBundle("resources")
Сценарии фактически являются groovy-скриптами, но с поддержкой синхронных операций и "сахаром" для более удобного управления действиями персонажа. Сценарии хранятся в папке assets/scenarios и вызываются по команде или из специального меню плагина Scenario support. После исполнения кода сценарии отключаются и выгружаются из памяти.
Прочтите статью Сценарии для изучения синтаксиса сценариев.
Jython - специальный порт Python для JVM. Но не спешите радоваться: последняя поддерживаемая версия Python для Jython - 2.7.1. Стандартные библиотеки Python не работают, вместо этого необходимо использовать библиотеки Java. Многие дополнительные библиотеки не работают по неизвестным причинам. Поэтому мы не используем Jython и не поддерживаем его в официальной поставке. Тем не менее, такая возможность есть.
Здесь хранится модуль поддержки Jython плагинов для устаревшой версии DeskChan. Если вы готовы возобновить его поддержку и сделать удобнее - мы можем внедрить этот модуль в официальную поставку.
Поддержка Python в официальной поставке происходит через I/O взаимодействие: DeskChan запускает скрипт как отдельный процесс и обменивается с ним информацией черезе стандартные потоки ввода-вывода.
- Создайте папку plugins/название_плагина
- Создайте файл plugin.py в этой папке
- Если вы работаете на Unix-системе и хотите принудить плагин работать с Python версии 2, то исправьте расширение файла на ".py2"
- Если вы работаете на Unix-системе и хотите принудить плагин работать с Python версии 3, то исправьте расширение файла на ".py3"
- Добавьте файлы proxy2.py или proxy3.py в зависимости от используемой версии Python. Эти файлы хранятся в папке libs стандартной сборки DeskChan.
- Тело скрипта фактически является текстом функции initialize плагина
- Тело скрипта обязано содержать следующую структуру:
# -*- coding: utf-8 -*- import sys if int(sys.version[0]) < 3: from proxy2 import * else: from proxy3 import * set_logging(True) init() # Здесь вы пишите код вашего плагина end_init()
- Манифест можно задать, создав файл manifest.json в папке плагина. Манифест обязан быть заполнен в формате JSON.
- Для использования ресурсов создайте подпапку resources в папке плагина. Добавьте в код плагина строчку:
setResourceBundle("resources")
- Узнайте больше о взаимодействии I\O плагинов здесь.
У нас нет данных о поддержке JavaScript ввиду отсутствия программистов на нём. Есть различные фреймворки: Rhino, Nashorn, Graal.js. Можете попробовать добавить их поддержку вручную.
Смотреть раздел HTTP
У нас нет программистов, готовых добавить систему поддержки нативных модулей. Тем не менее, это возможно. Здесь вы можете найти пример системы, поддерживающий код на C++.
Нет никаких ограничений ввести поддержку плагинов на C++ через потоки ввода/вывода. Тем не менее, у нас нет программистов, готовых этим заняться. Мы можем оказать вам поддержку в написании прокси-кода для такого взаимодействия.
HTTP-сервер, можно сказать, является отдельным плагином. Чтобы его открыть, требуется:
- Создайте папку plugins/название_плагина
- Создайте пустой файл plugin.http в этой папке
После этого сервер будет автоматически открыт. Вы можете прописать дополнительные опции к серверу в файле plugin.http следующим образом:
ip=192.168.0.1
port=8000
context=/
Дополнительную информацию о способах взаимодействия с сервером вы можете найти здесь.
У нас нет данных о поддержке Scala ввиду отсутствия программистов на нём. Главным программистом была предпринята попытка внедрить поддержку внутренных плагинов на Scala, но попытка не увенчалась успехом, впрочем он в данной области не авторитет. Компиляция проектов на Scala в Jar архивы должна сработать.
У нас нет данных о поддержке Ruby ввиду отсутствия программистов на нём. Теоретически можно сделать загрузчик скриптов на Ruby, аналогичный groovy_loader, с использованием JRuby.
У нас нет данных о поддержке Clojure ввиду отсутствия программистов на нём. Компиляция проектов на Clojure в Jar архивы должна сработать.
Насколько нам известно, поддержка jGo прекращена.
Смотреть раздел HTTP
Мы не рекомендуем использовать jPHP по эстетическим соображениям.
Смотреть раздел HTTP
Подробный гайд по написанию плагина
Основное
- Сборка и запуск
- Как пользоваться
- Принципы взаимодействия плагинов
- События и команды
- Обработка речи
- Создание отдельных модулей
- Сценарии
- Информация о поддержке языков программирования
API
- Интерфейс взаимодействия с ядром
- API плагинов
- Элементы управления
- Остальные плагины
- Внешние плагины | DeskChan как сервер
Характер
А как...