CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PrismarineJS

Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place. Commercial Alternative to JupyterHub.

GitHub Repository: PrismarineJS/mineflayer
Path: blob/master/docs/ru/FAQ_RU.md
Views: 788

FAQ

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

Выдаёт ошибку при попытке войти в систему через аккаунт Microsoft.

Убедитесь, что адрес электронной почты, который вы ввели в поле username в createBot, можно использовать для входа на minecraft.net используя кнопку «Войти с помощью Microsoft». Убедитесь, что у вас прописана опция auth: 'microsoft' в настройках вашего createBot.

Когда вы получите сообщение об ошибке, в котором говорится что-то о недопустимых учетных данных или «Владеет ли эта учетная запись Minecraft?», попробуйте удалить поле пароля в параметрах createBot и повторите попытку.

Как скрыть ошибки?

Используйте hideErrors: true в параметрах createBot. Вы также можете добавить эти слушатели:

client.on('error', () => {}) client.on('end', () => {})

Я не получаю событие чата на сервере, как я могу это решить?

Сервера Spigot, в частности некоторые плагины, используют разные форматы чата, вам необходимо проанализировать его с помощью регулярного выражения/парсера. Посмотрите и измените скрипт chat_parsing.js, чтобы он работал для вашего плагина на чат, также прочтите http://prismarinejs.github.io/mineflayer/#/tutorial?id=custom-chat

Как я могу собрать информацию из плагина в чате?

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

Пример:

Сообщение в чате выглядит следующим образом:

(!) U9G выйграл в /jackpot и получил $26,418,402,450! Он купил 2,350,000 (76.32%) билета(ов) из 3,079,185 проданных билета(ов)!
const regex = { first: /\(!\) (.+) выйграл в \/jackpot и получил +/, second: /\$(.+)! Он купил (.+) \((.+)%\) билета\(ов\) из /, third: /(.+) проданных билета\(ов\)!/ } let jackpot = {} bot.on('messagestr', msg => { if (regex.first.test(msg)) { const username = msg.match(regex.first)[1] jackpot.username = username } else if (regex.second.test(msg)) { const [, moneyWon, boughtTickets, winPercent] = msg.match(regex.second) jackpot.moneyWon = parseInt(moneyWon.replace(/,/g, '')) jackpot.boughtTickets = parseInt(boughtTickets.replace(/,/g, '')) jackpot.winPercent = parseFloat(winPercent) } else if (regex.third.test(msg)) { const totalTickets = msg.match(regex.third)[1] jackpot.totalTickets = parseInt(totalTickets.replace(/,/g, '')) onDone(jackpot) jackpot = {} } })

Как я могу отправлять команды?

Используйте bot.chat().

Пример:

bot.chat('/give @p diamond')

Можно ли войти в несколько учетных записей с помощью bot = mineflayer.createbot, контролируя их все по отдельности?

Создавайте разные экземпляры ботов, вызывая createBot, затем выполняйте разные действия для каждого. Пример.

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

bot.inventory.items() возвращает массив предметов в инвентаре бота. Вы можете использовать рекурсивную функцию, чтобы перебрать их и выбросить каждый элемент используя bot.toss(). Нажмите здесь, чтобы посмотреть пример

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

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

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

Один из способов - увеличить параметр checkTimeoutInterval (передаваемый в createBot) к более высокому значению (Например 300*1000, что составляет 5 минут вместо обычных 30 сек.). Если вы всё ещё сталкиваетесь с данной проблемой, вы можете автоматически переподключиться, используя что-то вроде этого примера https://github.com/PrismarineJS/mineflayer/blob/master/examples/reconnector.js

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

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

Пример:

function getLore (item) { let message = '' if (item.nbt == null) return message const nbt = require('prismarine-nbt') const ChatMessage = require('prismarine-chat')(bot.version) const data = nbt.simplify(item.nbt) const display = data.display if (display == null) return message const lore = display.Lore if (lore == null) return message for (const line of lore) { message += new ChatMessage(line).toString() message += '\n' } return message }

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

Вы можете использовать библиотеку, такую как repl, чтобы прочитать ввод консоли и использовать bot.chat() для его отправки. Вы можете найти пример здесь.

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

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

Обратите внимание, что порядок в котором загружаются плагины является динамическим, поэтому вы никогда не должны вызывать другой плагин в своей функции inject().

Как я могу использовать прокси socks5?

В объекте с настройками для mineflayer.createBot(options) удалите опцию host, объявите переменные PROXY_IP, PROXY_PORT, PROXY_USERNAME, PROXY_PASSWORD, MC_SERVER_ADDRESS, MC_SERVER_PORT, затем добавьте это в свой объект с настройками:

connect: (client) => { socks.createConnection({ proxy: { host: PROXY_IP, port: PROXY_PORT, type: 5, userId: PROXY_USERNAME, password: PROXY_PASSWORD }, command: 'connect', destination: { host: MC_SERVER_ADDRESS, port: MC_SERVER_PORT } }, (err, info) => { if (err) { console.log(err) return } client.setSocket(info.socket) client.emit('connect') }) }

socks объявляется с помощью const socks = require('socks').SocksClient и использует эту библиотеку. Некоторые серверы могут отклонить соединение. Если это произойдет, попробуйте добавить fakeHost: MC_SERVER_ADDRESS в настройки.

Частые ошибки

UnhandledPromiseRejectionWarning: Error: Failed to read asymmetric key

Эта ошибка означает, что вы ввели неправильную версию сервера, либо mineflayer обнаруживает её неправильно.

TypeError: Cannot read property '?' of undefined

Возможно, вы пытаетесь использовать что-то в объекте бота, чего еще нет, попробуйте вызвать инструкцию после события spawn

SyntaxError: Unexpected token '?'

Обновите node.js

Бот не может ломать/ставить блоки или открывать сундуки

Убедитесь, что защита спавна не мешает боту