- Баллы
- 6
Добрый вечер всем.
Прошу помощи в непонятном для меня вопросе. Назревала потребность организовать автоматический сбор мат. средств на сервере. По этому было решено пересобрать плагин PermissionsEx с надстройкой, которая позволяла бы ему удалённо принимать команды (например от php-скрипта).
Методом научного тыка было выяснено, что плагин обрабатывает команду терминала в методе onCommand, вызывая CommandManager.execute.
Не долго думая был дописан локальный сокет сервер, принимающий пакеты и вызывающий доп. метод RemoteCmd, который так же был дописан в основной класс PermissionsEx.
Схема очевидная:
Т.к. метод CommandManager.execute вторым параметром принимает объект Command, но в теле метода использует его исключительно как Command.getName(), то был сделан клон CommandManager.executeEx с отличием от оригинального тем, что принимает вторым аргументом сразу строку.
И всё вроде бы хорошо, сокет сервер принимает пакеты, обрабатывает и вызывает наш executeEx, о чём информирует командная строка сервера. Но с игроком ничего не происходит.
Прошу помощи в непонятном для меня вопросе. Назревала потребность организовать автоматический сбор мат. средств на сервере. По этому было решено пересобрать плагин PermissionsEx с надстройкой, которая позволяла бы ему удалённо принимать команды (например от php-скрипта).
Методом научного тыка было выяснено, что плагин обрабатывает команду терминала в методе onCommand, вызывая CommandManager.execute.
Не долго думая был дописан локальный сокет сервер, принимающий пакеты и вызывающий доп. метод RemoteCmd, который так же был дописан в основной класс PermissionsEx.
Схема очевидная:
- старт сервера
- вызов PermissionsEx.onEnable
- внутри onEnable аккуратно вешаем сокет сервер слушать какой-нибудь порт, передав ему инстанс плагина
- как сокет сервер примет нужный пакет, то вызвать переданный ранее инстанс.RemoteCmd, который выполнит CommandManager.execute
Т.к. метод CommandManager.execute вторым параметром принимает объект Command, но в теле метода использует его исключительно как Command.getName(), то был сделан клон CommandManager.executeEx с отличием от оригинального тем, что принимает вторым аргументом сразу строку.
И всё вроде бы хорошо, сокет сервер принимает пакеты, обрабатывает и вызывает наш executeEx, о чём информирует командная строка сервера. Но с игроком ничего не происходит.