- 1,111
- 47
- 420
Pich
Добрый вечер. Я не обладаю даже зачатками красноречия, а потому буду краток. Я написал мод, который добавляет в обычный майнкрафт чат картинки. Видео.
Как это работает:
Т.к. использовать обычные майнкрафт пакеты было бы глупо, я использую свои собственные протоколы и сокеты.
Что он может:
Когда вы жмакаете 'P' открывается интерфейс отправки картинки. Картинку вы можете выбрать со своего компьютера. После нажатия кнопки 'отправить' и начнется магия. А именно: клиент запросит ключ у сервера через обычный майнкрафт пакет, клиент начинает запрос через сокет, где использует свой ключ, сервер проверяет может ли игрок отправлять картинку и не является ли это спамом, после чего получит файл и опубликует его. Протокол получения файла очень похож.
Так же после того, как вы сделаете скриншот и нажмете 'P' скриншот будет автоматически подгружен в интерфейс.
Для администраторов:
Итак, все просто. Как только вы поставите серверную часть мода на сервер, он создаст файл 'pich.json', который и является конфигурационым файлом пича. По дефолту он выглядит так:
Код:
{
"port": 3000,
"provider": {
"type": "hard drive",
"folder": "pich"
},
"permissions": {
"type": "general",
"spamDelay": 0,
"maxDim": 4096
},
"dispatcher": {
"type": "default",
"pattern": "[\"{player} {text} \",{\"text\": \"{picture}\",\"bold\": true,\"underlined\": true,\"clickEvent\": {\"action\": \"run_command\",\"value\": \"/pich {id}\"},\n\"hoverEvent\": {\"action\": \"show_text\",\"value\": {\n\"text\": \"\",\"extra\": [{\"text\": \"Нажмите чтобы просмотреть картинку\",\"color\": \"dark_green\"}]}}\n}\n]"
}
}
port - порт на котором будет сидеть пич.
[font=Monaco, Consolas, Courier, monospace]provider - тут сложнее. Провайдер - это способ хранения и получения картинок. Они есть 3 видов:[/font]
[font=Monaco, Consolas, Courier, monospace]1) 'hard drive' - хранение всех картинок в отдельных файлах. Вы можете указать 'folder' путь до папки в которой вы хотели бы хранить картинки, но можете и не указывать. Этот вариант побережет вашу оперативку но скажется на скорости. В демке я использовал именно его. [/font]
[font=Monaco, Consolas, Courier, monospace]2) 'buffered' - хранение всех файлов в оперативной памяти. Быстро, дешево и сердито.[/font]
[font=Monaco, Consolas, Courier, monospace]3) 'imgur' - в последнее время модно хранить там картинки, ну я и подумал, а чем я хуже? Вообщем он закидывает все файлы на имгур.[/font]
Во время отключения сервера все файлы удаляются.
permissions - Это провайдер пермишенов. Они бывают 2 видов:
1) 'general' - на сколько я знаю английский, это значит общий. Он дает всем одинаковые права не смотря на их расовую принадлежность. У него есть два параметра: 'spamDelay' - время передышки спамера и 'maxDim' - максимальная длина и ширина картинки.
2)'bukkit' - тут уже учитываются пермишены. Какие существуют пермишены:
a)pich.dimension.max - размер картинки без ограничений
б)pich.dimension.extra_large - 4096х4096
в)pich.dimension.large - 2048x2048
г)pich.dimension.medium - 1024x1024
д)pich.dimension.smal - 512x512
е)pich.dimension.tiny - 256x256
е)pich.can_send - возможность отправлять
ж)pich.can_receive - возможность получать
и)pich.spam_override - обход анти-спама
dispatcher - диспетчер событий мода. Событие пока только одно: получение и рассылка картинки.
Бывают 2 видов: deafault - диспетчер написаный мной, параметром берет формат сообщения в виде JSON элемента, custom - диспетчер написаный вами, параметром берет путь к вашему классу.
До кучи я написал плагин, который фигачит ивент AsyncPlayerChatEvent, ждет результата и потом уже выкидывает отформатированое всеми плагинами сообщение.
Код:
Спасибо, что используете Pich.
Далее идет инструкция по настройке.
"port" - port к которому будет привязан Pich
"provider" - способ сохранения файлов
"provider": {
"type": "hard drive",
"folder": "pich"
} - все файлы будут сохранятся на жестком диске в папке pich. Скорость весьма средняя.
"provider": {
"type": "imgur"
} - все файлы будут загружаться на Imgur. Скорость зависит от интернет соединения.
"provider": {
"type": "buffered"
} - все файлы будут сохраняться в оперативной памяти. Самый быстрый вариант.
"permissions": {
"type": "general",
"spamDelay": 20000,
"maxDim": 4096
} - обобщеный способ предоставления прав(У всех права одинаковы). "spamDelay" - время передышки спамера в милисекундах(1 / 1000 секунды),
"maxDim" - максимальная ширина и высота картинки в пикселях.
"permissions": {
"type": "bukkit",
"spamDelay": 20000,
} - Bukkit способ(зависит от Bukkit прав). "spamDelay" - время передышки спамера в милисекундах(1 / 1000 секунды).
Доступные пермишены:
pich.dimension.max - размер картинки без ограничений
pich.dimension.extra_large - 4096х4096
pich.dimension.large - 2048x2048
pich.dimension.medium - 1024x1024
pich.dimension.small - 512x512
pich.dimension.tiny - 256x256
pich.can_send - возможность отправлять
pich.can_receive - возможность получать
pich.spam_override - обход анти-спама
"dispatcher": {
"type": "default",
"pattern": "[\"{player} {text} \",{\"text\": \"{picture}\",\"bold\": true,\"underlined\": true,\"clickEvent\": {\"action\": \"run_command\",\"value\": \"/pich {id}\"},\n\"hoverEvent\": {\"action\": \"show_text\",\"value\": {\n\"text\": \"\",\"extra\": [{\"text\": \"Нажмите чтобы просмотреть картинку\",\"color\": \"dark_green\"}]}}\n}\n]"
} - стандартный диспетчер событий. "pattern" - как будет выглядить сообщение в чате
"dispatcher": {
"type": "custom",
"class": "ru.justagod.pich.api.EventDispatcher"
} - ваш собственный диспетчер.
Требования:
1) Наследование от ru.justagod.pich.api.EventDispatcher.
2) Наличие стандартного конструктора (без параметров)
3) Класс не должен быть интерфейсом, абстрактным классом, аннотацией и прочим, что неиьзя инстантилизировать.
Планы:
1)Отправлять картинки в лс
Далее все что будет в платной версии:
1)Сохранение в бд - пфф. Готово
2)Более умный интерфейс(возможность отменить отправку, менять места всплывающих интерфейсов и т.д.) - Готово
3)Возможность модераторов удалять картинки - готово
4)Добавление пользовательских комментариев - готово
5) Интеграция с Discord- Готово
6)Прочее, что я придумаю.
Выложу снапшот через недельку, ибо надо еще чуть-чуть доделать.