Mineflayer originalmente fue hecho mayormemente por andrewrk pero ha sido arreglado y mejorado mucho por muchos contribuyentes. Por eso es importante saber cual es la mejor manera de contribuir a mineflayer.
Tenemos 3 etiquetas para 3 fases de organizar los problemas:
- Stage 1: (Fase 1) creado por alguien nuevo al proyecto, no sabemos si merece una implementación / solución
- Stage 2: (Fase 2) idea prometedora, pero se necesita pensar más sobre el tema antes de implementarlo
- Stage 3: (Fase 3) la idea es muy precisa, solo hace falta programarlo
Los links como https://github.com/PrismarineJS/mineflayer/issues?q=is%3Aopen+is%3Aissue+-label%3AStage1 se pueden usar como filtro para la fase 1 si estás buscando cosas que están listas para que sean contribuidas
Mineflayer tiene dos tipos de tests :
- tests internos : tests que se hacen con un servidor simple creado con node-minecraft-protocol
- tests externos : tests que se hacen con un servidor vanilla
El objectivo de estos tests es saber automáticamente qué funciona y qué no funciona en mineflayer, así es más fácil hacer funcionar mineflayer.
Para crear un test externo solo tienes que crear un archivo en test/externalTests
Un ejemplo : test/externalTests/digAndBuild.js
Ese archivo tiene que exportar una función que devuelve una función o un array de funciones que necesitan como parámetros el object de bot y un callback para cuando haya finalizado, debería contener asserts para saber si la función testeada ha fallado.
Mineflayer admite plugins; cualquiera puede crear un plugin que añade una API con un nivel más alto encima de Mineflayer.
Bastantes plugins de terceros han sido creados
Para crear un plugin nuevo tienes que :
- crear un repositorio nuevo
- en tu archivo index.js, exportar una función para inicializar el plugin con argumento mineflayer (ejemplo)
- esa función devuelve una función para introducir el plugin con argumento el object del bot (ejemplo)
- a partir de esa función se pueden añadir más funcionalidades al bot (ejemplo)
Como el object de mineflayer fue pasado como argumento, ese plugin de terceros no tiene que depender en mineflayer (no hay mineflayer en el package.json)
Mira un ejemplo completo here.
Mineflayer funciona bien para la mayoría de cosas, pero a veces sigue teniendo bugs.
Cuando encuentras uno es mejor que informes sobre el error proporcionando esta información :
- que quieres hacer (el objetivo en english)
- que es lo que has intentado (el código)
- que ha pasado
- que esperabas que pasara
Algunas cosas para pensar al crear un Pull Request (solicitud de pull) o hacer un commit :
En la mayoría de casos, mineflayer no debería romper/crashear el bot. Incluso si algo falla, el bot puede coger una ruta alternativa para coseguir el objetivo.
Con esto se refiere a que no deberíamos usar el throw new Error("error")
sino pasar el error junto al callback.
Por ejemplo :
function myfunction (param1, callback) {
// do stuff
let toDo = 1
toDo = 2
if (toDo === 2) { // everything worked (todo ha funcionado)
callback()
} else {
callback(new Error('something failed')) // (algo ha fallado)
}
}
Mira otro ejemplo en el código de mineflayer
La tabla de contenidos del docs/api.md está hecho con doctoc. Tras actualizar el archivo, deberías ejecutar doctoc docs/api.md para actualizar la tabla de contenidos.
Esta documentación no está mantenida oficialmente, si quiere ver las últimas novedades, por favor dirijase a la documentación original: unstable_api