Skip to content

Commit 7474564

Browse files
authored
Updating RU docs (#3178)
* Updating existing russian docs * Update api_ru.md to 4.14.0 * Update link * new docs files * upload index.html * Tutorial translate * upload contributing * Update links * Update links again
1 parent 167e271 commit 7474564

9 files changed

+2311
-774
lines changed

docs/ru/CONTRIBUTING_RU.md

+86
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
# Вклад в проект
2+
3+
Изначально 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+
function myfunction (param1, callback) {
72+
// что-то делаем
73+
let toDo = 1
74+
toDo = 2
75+
if (toDo === 2) { // всё работает
76+
callback()
77+
} else {
78+
callback(new Error('что-то не так'))
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.

docs/ru/FAQ_RU.md

+107-17
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,17 @@
22

33
Это документ с часто задаваемыми вопросами, предназначен для помощи людям в самых распространенных вещах.
44

5+
### Выдаёт ошибку при попытке войти в систему через аккаунт Microsoft.
6+
7+
Убедитесь, что адрес электронной почты, который вы ввели в поле username в createBot, можно использовать для входа на `minecraft.net` используя кнопку «Войти с помощью Microsoft».
8+
Убедитесь, что у вас прописана опция `auth: 'microsoft'` в настройках вашего createBot.
9+
10+
Когда вы получите сообщение об ошибке, в котором говорится что-то о недопустимых учетных данных или «Владеет ли эта учетная запись Minecraft?», попробуйте удалить поле пароля в параметрах `createBot` и повторите попытку.
11+
512
### Как скрыть ошибки?
613

7-
Используйте `hideErrors: true` в параметрах createBot. Вы также можете добавить эти слушатели:
14+
Используйте `hideErrors: true` в параметрах createBot.
15+
Вы также можете добавить эти слушатели:
816
```js
917
client.on('error', () => {})
1018
client.on('end', () => {})
@@ -13,12 +21,48 @@ client.on('end', () => {})
1321
### Я не получаю событие чата на сервере, как я могу это решить?
1422

1523
Сервера 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+
### Как я могу собрать информацию из плагина в чате?
1827

19-
### Как я могу отправлять команды серверу?
28+
Большинство майнкрафт серверов поддерживают плагины, и многие из этих плагинов выводят что-то в чат, когда что-то происходит. Если это всего лишь одно сообщение, лучше использовать решение, описанное выше, но когда эти сообщения разбиты на множество небольших сообщений, другим вариантом является использование события `"messagestr"`, поскольку оно позволяет легко анализировать многострочные сообщения.
2029

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+
const regex = {
40+
first: /\(!\) (.+) выйграл в \/jackpot и получил +/,
41+
second: /\$(.+)! Он купил (.+) \((.+)%\) билета\(ов\) из /,
42+
third: /(.+) проданных билета\(ов\)!/
43+
}
44+
45+
let jackpot = {}
46+
bot.on('messagestr', msg => {
47+
if (regex.first.test(msg)) {
48+
const username = msg.match(regex.first)[1]
49+
jackpot.username = username
50+
} else if (regex.second.test(msg)) {
51+
const [, moneyWon, boughtTickets, winPercent] = msg.match(regex.second)
52+
jackpot.moneyWon = parseInt(moneyWon.replace(/,/g, ''))
53+
jackpot.boughtTickets = parseInt(boughtTickets.replace(/,/g, ''))
54+
jackpot.winPercent = parseFloat(winPercent)
55+
} else if (regex.third.test(msg)) {
56+
const totalTickets = msg.match(regex.third)[1]
57+
jackpot.totalTickets = parseInt(totalTickets.replace(/,/g, ''))
58+
onDone(jackpot)
59+
jackpot = {}
60+
}
61+
})
62+
```
63+
### Как я могу отправлять команды?
64+
65+
Используйте `bot.chat()`.
2266

2367
Пример:
2468

@@ -32,42 +76,38 @@ bot.chat('/give @p diamond')
3276

3377
### Как заставить бота выбросить все вещи их инвентаря?
3478

35-
`bot.inventory.items()` возвращает массив элементов бота. Вы можете использовать рекурсивную функцию, чтобы перебрать их и выбросить каждый элемент используя `bot.toss()`. Нажмите [здесь](https://gist.github.com/dada513/3d88f772be4224b40f9e5d1787bd63e9), чтобы посмотреть пример
79+
`bot.inventory.items()` возвращает массив предметов в инвентаре бота. Вы можете использовать рекурсивную функцию, чтобы перебрать их и выбросить каждый элемент используя `bot.toss()`. Нажмите [здесь](https://gist.github.com/dada513/3d88f772be4224b40f9e5d1787bd63e9), чтобы посмотреть пример
3680

3781
### Как проверить отправленные/полученные пакеты?
3882

3983
Включите отладку https://github.com/PrismarineJS/mineflayer#debug
4084

4185
### Я хочу избежать отключения бота от сервера даже в случае задержки сервера, как мне этого добиться?
4286

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
4488

4589
### Как получить описание/текст предмета?
4690

4791
Вы можете использовать свойство `item.nbt`. Также рекомендуем использовать библиотеку `prismarine-nbt`. Метод `nbt.simplify()` может быть полезен.
4892

49-
Пример:
50-
93+
**Пример:**
5194
```js
5295
function getLore (item) {
5396
let message = ''
5497
if (item.nbt == null) return message
5598

5699
const nbt = require('prismarine-nbt')
57-
const ChatMessage = require('prismarine-chat')(bot.registry)
100+
const ChatMessage = require('prismarine-chat')(bot.version)
58101

59102
const data = nbt.simplify(item.nbt)
60103
const display = data.display
61104
if (display == null) return message
62105

63106
const lore = display.Lore
64107
if (lore == null) return message
65-
66108
for (const line of lore) {
67-
for (const group of JSON.parse(line)) {
68-
message += new ChatMessage(group).toString()
69-
message += '\n'
70-
}
109+
message += new ChatMessage(line).toString()
110+
message += '\n'
71111
}
72112

73113
return message
@@ -76,10 +116,60 @@ function getLore (item) {
76116

77117
### Как я могу отправить сообщение из консоли на сервер?
78118

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).
80120

81121
### Как я могу использовать другой плагин в качестве зависимости при создании своего плагина?
82122

83-
В функции `inject()` вашего плагина вы можете безопасно вызвать `bot.loadPlugin(другой плагин)`, чтобы убедиться, что плагин загружен. Если плагин уже был загружен ранее, ничего не произойдет.
123+
В функции `inject()` вашего плагина вы можете безопасно вызвать `bot.loadPlugin(anotherPlugin)`, чтобы убедиться, что плагин загружен. Если плагин уже был загружен ранее, ничего не произойдет.
84124

85125
Обратите внимание, что порядок в котором загружаются плагины является динамическим, поэтому вы никогда не должны вызывать другой плагин в своей функции `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+
### Бот не может ломать/ставить блоки или открывать сундуки
173+
174+
Убедитесь, что защита спавна не мешает боту
175+

0 commit comments

Comments
 (0)