You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Изначально Mineflayer создал [andrewrk](http://github.com/andrewrk), но с тех пор проект был улучшен и исправлен многими [помощниками](https://github.com/andrewrk/mineflayer/graphs/contributors).
4
+
Это то, почему важно знать, как внести свой вклад в mineflayer.
5
+
6
+
## Организация проблем
7
+
8
+
У нас есть метки трёх стадий для организаций проблем:
9
+
10
+
* Стадия 1: созданы каким-либо новичком, мы не знаем, нуждается ли это в реализации или исправлении
11
+
* Стадия 2: многообещающая идея, но требует дополнительного обдумывания перед реализацией
12
+
* Стадия 3: идея точно задана, осталось только сделать код
13
+
14
+
Ссылки по типу https://github.com/PrismarineJS/mineflayer/issues?q=is%3Aopen+is%3Aissue+-label%3AStage1 могут использоваться для показа только с меток первой стадии, если вы хотите развить какую-либо тему.
15
+
16
+
## Создание тестов
17
+
Mineflayer имеет 2 вида тестов :
18
+
19
+
*[Внутренние тесты](../../test/internalTest.js) : Тесты, которые выполняются на простом сервере, созданном с помощью node-minecraft-protocol.
20
+
*[Внешние тесты](../../test/externalTests/) : Тесты, который выполняются на ванильном сервере.
21
+
22
+
Цель этих тестов - автоматически определить, что работает, а что нет в mineflayer, чтобы было проще заставить mineflayer работать.
23
+
24
+
### Создание внешних тестов
25
+
26
+
Для внешних тестов вам просто нужно создать файл в [test/externalTests](../../test/externalTests)
27
+
28
+
Например : [test/externalTests/digAndBuild.js](https://github.com/PrismarineJS/mineflayer/blob/master/test/externalTests/digAndBuild.js)
29
+
30
+
Этот файл должен экспортировать функцию, возвращающую функцию или массив функций, принимающих в качестве параметра объект бота и выполненный обратный вызов,
31
+
он должен содержать утверждения для проверки, если тестируемая функциональность не сработала.
32
+
33
+
34
+
## Создание стороннего плагина
35
+
Mineflayer поддерживает плагины; любой желающий может создать плагин, который добавляет API еще более высокого уровня поверх Mineflayer.
36
+
37
+
Несколько сторонних плагинов, которые уже были сделаны вы можете найти [здесь](https://github.com/andrewrk/mineflayer#third-party-plugins).
38
+
39
+
Для того чтобы создать новый плагин, вам необходимо :
40
+
41
+
1. Создать новый репозиторий
42
+
2. В вашем файле index.js, экспортировать функцию init, которая будет принимать mineflayer в качестве аргумента. ([Пример](https://github.com/andrewrk/mineflayer-navigate/blob/e24cb6a868ce64ae43bea2d035832c15ed01d301/index.js#L18))
43
+
3. Эта функция возвращает функцию inject, которая принимает объект бота. ([Пример](https://github.com/andrewrk/mineflayer-navigate/blob/e24cb6a868ce64ae43bea2d035832c15ed01d301/index.js#L23))
44
+
4. С помощью этой inject функции можно добавить функционал объекту бота. ([Пример](https://github.com/andrewrk/mineflayer-navigate/blob/e24cb6a868ce64ae43bea2d035832c15ed01d301/index.js#L32))
45
+
46
+
Поскольку объект mineflayer передается в параметре, этот новый пакет не должен зависеть от mineflayer (в package.json не должно быть зависимости mineflayer)
47
+
48
+
Смотрите [полный пример здесь](https://github.com/andrewrk/mineflayer-navigate/tree/e24cb6a868ce64ae43bea2d035832c15ed01d301).
49
+
50
+
## Сообщения об ошибках
51
+
Mineflayer хорошо работает в большинстве случаев, но иногда в нем все еще есть ошибки.
52
+
53
+
При обнаружении ошибки лучше всего сообщить о проблеме, предоставив следующую информацию :
54
+
55
+
* что вы хотите сделать (цель на английском языке)
56
+
* что вы делаете (ваш код)
57
+
* что происходит
58
+
* что вы ожидали увидеть
59
+
60
+
## Код Mineflayer
61
+
Некоторые вещи, о которых следует подумать при отправке Pull Request или commit :
62
+
63
+
### Обработка ошибок
64
+
В большинстве случаев mineflayer не должен выводить бота из строя. Даже если что-то не сработает, бот может воспользоваться альтернативным маршрутом, чтобы добраться до своей цели.
65
+
66
+
Это означает, что мы не должны использовать `throw(new Error("error"))`, а вместо этого использовать соглашение node.js о передаче ошибки в обратном вызове.
67
+
+
68
+
Пример :
69
+
70
+
```js
71
+
functionmyfunction (param1, callback) {
72
+
// что-то делаем
73
+
let toDo =1
74
+
toDo =2
75
+
if (toDo ===2) { // всё работает
76
+
callback()
77
+
} else {
78
+
callback(newError('что-то не так'))
79
+
}
80
+
}
81
+
```
82
+
83
+
Вы можете посмотреть другие примеры в [коде mineflayer](https://github.com/andrewrk/mineflayer/blob/a8736c4ea473cf1a609c5a29046c0cdad006d429/lib/plugins/bed.js#L10)
84
+
85
+
### Обновление документации
86
+
Список содержимого документации docs/api.md is made with doctoc. After updating that file, you should run doctoc docs/api.md to update the table of content.
Copy file name to clipboardexpand all lines: docs/ru/FAQ_RU.md
+107-17
Original file line number
Diff line number
Diff line change
@@ -2,9 +2,17 @@
2
2
3
3
Это документ с часто задаваемыми вопросами, предназначен для помощи людям в самых распространенных вещах.
4
4
5
+
### Выдаёт ошибку при попытке войти в систему через аккаунт Microsoft.
6
+
7
+
Убедитесь, что адрес электронной почты, который вы ввели в поле username в createBot, можно использовать для входа на `minecraft.net` используя кнопку «Войти с помощью Microsoft».
8
+
Убедитесь, что у вас прописана опция `auth: 'microsoft'` в настройках вашего createBot.
9
+
10
+
Когда вы получите сообщение об ошибке, в котором говорится что-то о недопустимых учетных данных или «Владеет ли эта учетная запись Minecraft?», попробуйте удалить поле пароля в параметрах `createBot` и повторите попытку.
11
+
5
12
### Как скрыть ошибки?
6
13
7
-
Используйте `hideErrors: true` в параметрах createBot. Вы также можете добавить эти слушатели:
14
+
Используйте `hideErrors: true` в параметрах createBot.
15
+
Вы также можете добавить эти слушатели:
8
16
```js
9
17
client.on('error', () => {})
10
18
client.on('end', () => {})
@@ -13,12 +21,48 @@ client.on('end', () => {})
13
21
### Я не получаю событие чата на сервере, как я могу это решить?
14
22
15
23
Сервера Spigot, в частности некоторые плагины, используют разные форматы чата, вам необходимо проанализировать его с помощью регулярного выражения/парсера.
16
-
Посмотрите и измените скрипт [chatAddPattern.js](https://github.com/PrismarineJS/mineflayer/blob/master/examples/chatAddPattern.js), чтобы он работал для вашего плагина чата,
17
-
также прочтите http://prismarinejs.github.io/mineflayer/#/tutorial?id=custom-chat.
24
+
Посмотрите и измените скрипт [chat_parsing.js](https://github.com/PrismarineJS/mineflayer/blob/master/examples/chat_parsing.js), чтобы он работал для вашего плагина на чат, также прочтите http://prismarinejs.github.io/mineflayer/#/tutorial?id=custom-chat
25
+
26
+
### Как я могу собрать информацию из плагина в чате?
18
27
19
-
### Как я могу отправлять команды серверу?
28
+
Большинство майнкрафт серверов поддерживают плагины, и многие из этих плагинов выводят что-то в чат, когда что-то происходит. Если это всего лишь одно сообщение, лучше использовать решение, описанное выше, но когда эти сообщения разбиты на множество небольших сообщений, другим вариантом является использование события `"messagestr"`, поскольку оно позволяет легко анализировать многострочные сообщения.
20
29
21
-
Используйте метод `bot.chat()`.
30
+
**Пример:**
31
+
32
+
Сообщение в чате выглядит следующим образом:
33
+
```
34
+
(!) U9G выйграл в /jackpot и получил
35
+
$26,418,402,450! Он купил 2,350,000 (76.32%) билета(ов) из
36
+
3,079,185 проданных билета(ов)!
37
+
```
38
+
```js
39
+
constregex= {
40
+
first:/\(!\) (.+) выйграл в \/jackpot и получил +/,
41
+
second:/\$(.+)! Он купил (.+) \((.+)%\) билета\(ов\) из /,
### Как заставить бота выбросить все вещи их инвентаря?
34
78
35
-
`bot.inventory.items()` возвращает массив элементов бота. Вы можете использовать рекурсивную функцию, чтобы перебрать их и выбросить каждый элемент используя `bot.toss()`. Нажмите [здесь](https://gist.github.com/dada513/3d88f772be4224b40f9e5d1787bd63e9), чтобы посмотреть пример
79
+
`bot.inventory.items()` возвращает массив предметов в инвентаре бота. Вы можете использовать рекурсивную функцию, чтобы перебрать их и выбросить каждый элемент используя `bot.toss()`. Нажмите [здесь](https://gist.github.com/dada513/3d88f772be4224b40f9e5d1787bd63e9), чтобы посмотреть пример
### Я хочу избежать отключения бота от сервера даже в случае задержки сервера, как мне этого добиться?
42
86
43
-
Один из способов - увеличить параметр [checkTimeoutInterval](https://github.com/PrismarineJS/node-minecraft-protocol/blob/master/docs/API.md#mccreateclientoptions) (передаваемый в createBot) к более высокому значению (Например `300*1000`, что составляет 5 минут. Вместо значения по умолчанию в 30 сек.). Если вы все еще сталкиваетесь с данной проблемой, вы можете автоматически переподключиться, используя что-то вроде этого примера https://github.com/PrismarineJS/mineflayer/blob/master/examples/reconnector.js
87
+
Один из способов - увеличить параметр [checkTimeoutInterval](https://github.com/PrismarineJS/node-minecraft-protocol/blob/master/docs/API.md#mccreateclientoptions) (передаваемый в createBot) к более высокому значению (Например `300*1000`, что составляет 5 минут вместо обычных 30 сек.). Если вы всё ещё сталкиваетесь с данной проблемой, вы можете автоматически переподключиться, используя что-то вроде этого примера https://github.com/PrismarineJS/mineflayer/blob/master/examples/reconnector.js
44
88
45
89
### Как получить описание/текст предмета?
46
90
47
91
Вы можете использовать свойство `item.nbt`. Также рекомендуем использовать библиотеку `prismarine-nbt`. Метод `nbt.simplify()` может быть полезен.
### Как я могу отправить сообщение из консоли на сервер?
78
118
79
-
Вы можете использовать библиотеку, такую как `repl`, чтобы прочитать ввод консоли и использовать `bot.chat` для его отправки. Вы можете найти пример [здесь](https://github.com/PrismarineJS/mineflayer/blob/master/examples/repl.js).
119
+
Вы можете использовать библиотеку, такую как `repl`, чтобы прочитать ввод консоли и использовать `bot.chat()` для его отправки. Вы можете найти пример [здесь](https://github.com/PrismarineJS/mineflayer/blob/master/examples/repl.js).
80
120
81
121
### Как я могу использовать другой плагин в качестве зависимости при создании своего плагина?
82
122
83
-
В функции `inject()` вашего плагина вы можете безопасно вызвать `bot.loadPlugin(другой плагин)`, чтобы убедиться, что плагин загружен. Если плагин уже был загружен ранее, ничего не произойдет.
123
+
В функции `inject()` вашего плагина вы можете безопасно вызвать `bot.loadPlugin(anotherPlugin)`, чтобы убедиться, что плагин загружен. Если плагин уже был загружен ранее, ничего не произойдет.
84
124
85
125
Обратите внимание, что порядок в котором загружаются плагины является динамическим, поэтому вы никогда не должны вызывать другой плагин в своей функции `inject()`.
126
+
127
+
### Как я могу использовать прокси socks5?
128
+
129
+
В объекте с настройками для `mineflayer.createBot(options)` удалите опцию `host`, объявите переменные `PROXY_IP, PROXY_PORT, PROXY_USERNAME, PROXY_PASSWORD, MC_SERVER_ADDRESS, MC_SERVER_PORT`, затем добавьте это в свой объект с настройками:
130
+
```js
131
+
connect: (client) => {
132
+
socks.createConnection({
133
+
proxy: {
134
+
host:PROXY_IP,
135
+
port:PROXY_PORT,
136
+
type:5,
137
+
userId:PROXY_USERNAME,
138
+
password:PROXY_PASSWORD
139
+
},
140
+
command:'connect',
141
+
destination: {
142
+
host:MC_SERVER_ADDRESS,
143
+
port:MC_SERVER_PORT
144
+
}
145
+
}, (err, info) => {
146
+
if (err) {
147
+
console.log(err)
148
+
return
149
+
}
150
+
client.setSocket(info.socket)
151
+
client.emit('connect')
152
+
})
153
+
}
154
+
```
155
+
`socks` объявляется с помощью `const socks = require('socks').SocksClient` и использует [эту](https://www.npmjs.com/package/socks) библиотеку.
156
+
Некоторые серверы могут отклонить соединение. Если это произойдет, попробуйте добавить `fakeHost: MC_SERVER_ADDRESS` в настройки.
157
+
158
+
# Частые ошибки
159
+
160
+
### `UnhandledPromiseRejectionWarning: Error: Failed to read asymmetric key`
161
+
162
+
Эта ошибка означает, что вы ввели неправильную версию сервера, либо mineflayer обнаруживает её неправильно.
163
+
164
+
### `TypeError: Cannot read property '?' of undefined`
165
+
166
+
Возможно, вы пытаетесь использовать что-то в объекте бота, чего еще нет, попробуйте вызвать инструкцию после события `spawn`
167
+
168
+
### `SyntaxError: Unexpected token '?'`
169
+
170
+
Обновите node.js
171
+
172
+
### Бот не может ломать/ставить блоки или открывать сундуки
0 commit comments