Skip to content

Информация о поддержке языков программирования

CORRUPTOR2037 edited this page Aug 8, 2018 · 2 revisions

Java

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 проекта.

Пример такого плагина можно увидеть здесь.

Kotlin

Инструкции полностью аналогичны разделу Java

Groovy

Groovy выгоден тем, что это скриптовый язык, выполнение которого полностью контролируемо вплоть до предварительного изменения текста скриптов.

Обычные скрипты

  • Создайте папку plugins/название_плагина
  • Создайте файл plugin.groovy в этой папке
  • Тело скрипта фактически является текстом функции initialize плагина
  • Функция unload заменена на addCleanupHandler
  • Скриптом является только файл plugin.groovy. Все остальные файлы с кодом в плагине обязаны иметь структуру класса, как и в случае Java/Kotlin. Кроме того, они являются отдельным классом от класса плагина, поэтому им изначально недоступен PluginProxyInterface. Им требуется передать объект прокси вручную.
  • Манифест можно задать, создав файл manifest.json в папке плагина. Манифест обязан быть заполнен в формате JSON.
  • Для использования ресурсов создайте подпапку resources в папке плагина. Добавьте в код плагина строчку:

setResourceBundle("resources")

Сценарии

Сценарии фактически являются groovy-скриптами, но с поддержкой синхронных операций и "сахаром" для более удобного управления действиями персонажа. Сценарии хранятся в папке assets/scenarios и вызываются по команде или из специального меню плагина Scenario support. После исполнения кода сценарии отключаются и выгружаются из памяти.

Прочтите статью Сценарии для изучения синтаксиса сценариев.

Python

Jython

Jython - специальный порт Python для JVM. Но не спешите радоваться: последняя поддерживаемая версия Python для Jython - 2.7.1. Стандартные библиотеки Python не работают, вместо этого необходимо использовать библиотеки Java. Многие дополнительные библиотеки не работают по неизвестным причинам. Поэтому мы не используем Jython и не поддерживаем его в официальной поставке. Тем не менее, такая возможность есть.

Здесь хранится модуль поддержки Jython плагинов для устаревшой версии DeskChan. Если вы готовы возобновить его поддержку и сделать удобнее - мы можем внедрить этот модуль в официальную поставку.

I/O взаимодействие

Поддержка 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

JavaScript на JVM

У нас нет данных о поддержке JavaScript ввиду отсутствия программистов на нём. Есть различные фреймворки: Rhino, Nashorn, Graal.js. Можете попробовать добавить их поддержку вручную.

Связь через HTTP

Смотреть раздел HTTP

С/C++

Native

У нас нет программистов, готовых добавить систему поддержки нативных модулей. Тем не менее, это возможно. Здесь вы можете найти пример системы, поддерживающий код на C++.

I/O взаимодействие

Нет никаких ограничений ввести поддержку плагинов на C++ через потоки ввода/вывода. Тем не менее, у нас нет программистов, готовых этим заняться. Мы можем оказать вам поддержку в написании прокси-кода для такого взаимодействия.

HTTP-сервер

HTTP-сервер, можно сказать, является отдельным плагином. Чтобы его открыть, требуется:

  • Создайте папку plugins/название_плагина
  • Создайте пустой файл plugin.http в этой папке

После этого сервер будет автоматически открыт. Вы можете прописать дополнительные опции к серверу в файле plugin.http следующим образом:

ip=192.168.0.1
port=8000
context=/

Дополнительную информацию о способах взаимодействия с сервером вы можете найти здесь.

Scala

У нас нет данных о поддержке Scala ввиду отсутствия программистов на нём. Главным программистом была предпринята попытка внедрить поддержку внутренных плагинов на Scala, но попытка не увенчалась успехом, впрочем он в данной области не авторитет. Компиляция проектов на Scala в Jar архивы должна сработать.

Ruby

У нас нет данных о поддержке Ruby ввиду отсутствия программистов на нём. Теоретически можно сделать загрузчик скриптов на Ruby, аналогичный groovy_loader, с использованием JRuby.

Clojure

У нас нет данных о поддержке Clojure ввиду отсутствия программистов на нём. Компиляция проектов на Clojure в Jar архивы должна сработать.

Go

jGo

Насколько нам известно, поддержка jGo прекращена.

Связь через HTTP

Смотреть раздел HTTP

PHP

jPHP

Мы не рекомендуем использовать jPHP по эстетическим соображениям.

Связь через HTTP

Смотреть раздел HTTP

Clone this wiki locally