[1.7.10]Pich - свои картинки в майнкрафт чат=)

Как вам?


  • Всего проголосовало
    26
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)Прочее, что я придумаю.

Выложу снапшот через недельку, ибо надо еще чуть-чуть доделать.
 
2,505
81
397
А зачем свой сокет? Почему не отправляешь массив байт через обычный пакет?
 
1,111
47
420
Если бы я так сделал:
1) Большой риск перегрузки соединения, и следовательно вылета игрока с сервера.
2) Я бы не смог следить за статусом передачи.
3) Внутренняя организация передачи через имгур или жесткий диск немного сложнее чем кажется.

В принципе, мне бы и второго пункта хватило.
 
1,111
47
420
Текс добавил диспетчер событий который форматирует комментарии к картинками согласно плагинам. Крч просто диспатчит команду через рефлекшн. В принципе мод готов. Занял 15к строчек кода. Щас выполню последний пункт плана и пойду его втюхивать.
 
1,200
37
237
Что имеется в виду под интеграцией с дискордом? Использование его как хост картинок?
 
1,111
47
420
MJaroslav написал(а):
Что имеется в виду под интеграцией с дискордом? Использование его как хост картинок?

Да, до такого бы я не додумался. 
Вообщем то чат и картинки с сервера транслируется в определенный канал дискорда. При написании в этот самый канал сообщение с него отправляется на сервер + я добавил возможность диспатчить команды, но как выяснилось пексы тупая палка поэтому пришлось от этого не то чтобы отказаться, но предупреждать о не безопасности.
 
1,200
37
237
JustAGod написал(а):
MJaroslav написал(а):
Что имеется в виду под интеграцией с дискордом? Использование его как хост картинок?

Да, до такого бы я не додумался. 
Вообщем то чат и картинки с сервера транслируется в определенный канал дискорда. При написании в этот самый канал сообщение с него отправляется на сервер + я добавил возможность диспатчить команды, но как выяснилось пексы тупая палка поэтому пришлось от этого не то чтобы отказаться, но предупреждать о не безопасности.

Проще говоря, ты сделал мост между чатом дискорда и майна, но ещё и с возможностью прикреплять картинки?
 
1,200
37
237
JustAGod написал(а):
Я даже не знаю что это.=)
https://imgur.com/a/DpiAc - фотачки

Я про vk.com


Кстати, у тебя выбор картинки через проводник есть (имеется в виду, выбрать любой файл с компутатора, ну и любого места на нём)?
 
1,111
47
420
Есть. Можно вообще файл скопировать и вставить. Чот я не вижу смысла делать трансляцию в вк. А опыт работы с вк у меня имеется.
 
JustAGod написал(а):
Я даже не знаю что это.=)
https://imgur.com/a/DpiAc - фотачки

Сейчас бы ночью делать фотки в майнкарфте.
 
1,200
37
237
JustAGod написал(а):
Есть. Можно вообще файл скопировать и вставить.

Ну про копипаст я уже видел)

Кстати, зачем оставлять в списке картинки, которые уже нельзя выбрать (я так понимаю, что их нельзя выбрать из-за удаления/перемещения)?
 
1,111
47
420
Там как раз все файлы. А нельзя выбрать .txt .exe и прочие файлы.
 
1,200
37
237
JustAGod написал(а):
Там как раз все файлы. А нельзя выбрать .txt .exe и прочие файлы.

А, то есть окно выбора из списка - текущая папка (я просто думал, что это папка аля mods в forge, только для частых картинок)?
 
Сверху