86 lines
6.5 KiB
Markdown
86 lines
6.5 KiB
Markdown
# Вклад в проект
|
||
|
||
Изначально Mineflayer создал [andrewrk](http://github.com/andrewrk), но с тех пор проект был улучшен и исправлен многими [помощниками](https://github.com/andrewrk/mineflayer/graphs/contributors).
|
||
Это то, почему важно знать, как внести свой вклад в mineflayer.
|
||
|
||
## Организация проблем
|
||
|
||
У нас есть метки трёх стадий для организаций проблем:
|
||
|
||
* Стадия 1: созданы каким-либо новичком, мы не знаем, нуждается ли это в реализации или исправлении
|
||
* Стадия 2: многообещающая идея, но требует дополнительного обдумывания перед реализацией
|
||
* Стадия 3: идея точно задана, осталось только сделать код
|
||
|
||
Ссылки по типу https://github.com/PrismarineJS/mineflayer/issues?q=is%3Aopen+is%3Aissue+-label%3AStage1 могут использоваться для показа только с меток первой стадии, если вы хотите развить какую-либо тему.
|
||
|
||
## Создание тестов
|
||
Mineflayer имеет 2 вида тестов :
|
||
|
||
* [Внутренние тесты](../../test/internalTest.js) : Тесты, которые выполняются на простом сервере, созданном с помощью node-minecraft-protocol.
|
||
* [Внешние тесты](../../test/externalTests/) : Тесты, который выполняются на ванильном сервере.
|
||
|
||
Цель этих тестов - автоматически определить, что работает, а что нет в mineflayer, чтобы было проще заставить mineflayer работать.
|
||
|
||
### Создание внешних тестов
|
||
|
||
Для внешних тестов вам просто нужно создать файл в [test/externalTests](../../test/externalTests)
|
||
|
||
Например : [test/externalTests/digAndBuild.js](https://github.com/PrismarineJS/mineflayer/blob/master/test/externalTests/digAndBuild.js)
|
||
|
||
Этот файл должен экспортировать функцию, возвращающую функцию или массив функций, принимающих в качестве параметра объект бота и выполненный обратный вызов,
|
||
он должен содержать утверждения для проверки, если тестируемая функциональность не сработала.
|
||
|
||
|
||
## Создание стороннего плагина
|
||
Mineflayer поддерживает плагины; любой желающий может создать плагин, который добавляет API еще более высокого уровня поверх Mineflayer.
|
||
|
||
Несколько сторонних плагинов, которые уже были сделаны вы можете найти [здесь](https://github.com/andrewrk/mineflayer#third-party-plugins).
|
||
|
||
Для того чтобы создать новый плагин, вам необходимо :
|
||
|
||
1. Создать новый репозиторий
|
||
2. В вашем файле index.js, экспортировать функцию init, которая будет принимать mineflayer в качестве аргумента. ([Пример](https://github.com/andrewrk/mineflayer-navigate/blob/e24cb6a868ce64ae43bea2d035832c15ed01d301/index.js#L18))
|
||
3. Эта функция возвращает функцию inject, которая принимает объект бота. ([Пример](https://github.com/andrewrk/mineflayer-navigate/blob/e24cb6a868ce64ae43bea2d035832c15ed01d301/index.js#L23))
|
||
4. С помощью этой inject функции можно добавить функционал объекту бота. ([Пример](https://github.com/andrewrk/mineflayer-navigate/blob/e24cb6a868ce64ae43bea2d035832c15ed01d301/index.js#L32))
|
||
|
||
Поскольку объект mineflayer передается в параметре, этот новый пакет не должен зависеть от mineflayer (в package.json не должно быть зависимости mineflayer)
|
||
|
||
Смотрите [полный пример здесь](https://github.com/andrewrk/mineflayer-navigate/tree/e24cb6a868ce64ae43bea2d035832c15ed01d301).
|
||
|
||
## Сообщения об ошибках
|
||
Mineflayer хорошо работает в большинстве случаев, но иногда в нем все еще есть ошибки.
|
||
|
||
При обнаружении ошибки лучше всего сообщить о проблеме, предоставив следующую информацию :
|
||
|
||
* что вы хотите сделать (цель на английском языке)
|
||
* что вы делаете (ваш код)
|
||
* что происходит
|
||
* что вы ожидали увидеть
|
||
|
||
## Код Mineflayer
|
||
Некоторые вещи, о которых следует подумать при отправке Pull Request или commit :
|
||
|
||
### Обработка ошибок
|
||
В большинстве случаев mineflayer не должен выводить бота из строя. Даже если что-то не сработает, бот может воспользоваться альтернативным маршрутом, чтобы добраться до своей цели.
|
||
|
||
Это означает, что мы не должны использовать `throw(new Error("error"))`, а вместо этого использовать соглашение node.js о передаче ошибки в обратном вызове.
|
||
+
|
||
Пример :
|
||
|
||
```js
|
||
function myfunction (param1, callback) {
|
||
// что-то делаем
|
||
let toDo = 1
|
||
toDo = 2
|
||
if (toDo === 2) { // всё работает
|
||
callback()
|
||
} else {
|
||
callback(new Error('что-то не так'))
|
||
}
|
||
}
|
||
```
|
||
|
||
Вы можете посмотреть другие примеры в [коде mineflayer](https://github.com/andrewrk/mineflayer/blob/a8736c4ea473cf1a609c5a29046c0cdad006d429/lib/plugins/bed.js#L10)
|
||
|
||
### Обновление документации
|
||
Список содержимого документации docs/api.md is made with doctoc. After updating that file, you should run doctoc docs/api.md to update the table of content.
|