90 lines
4.6 KiB
Markdown
90 lines
4.6 KiB
Markdown
|
# Contribuir
|
||
|
|
||
|
Mineflayer originalmente fue hecho mayormemente por [andrewrk](http://github.com/andrewrk)
|
||
|
pero ha sido arreglado y mejorado mucho por muchos [contribuyentes](https://github.com/andrewrk/mineflayer/graphs/contributors).
|
||
|
Por eso es importante saber cual es la mejor manera de contribuir a mineflayer.
|
||
|
|
||
|
## Organización de problemas
|
||
|
|
||
|
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
|
||
|
|
||
|
## Creando tests
|
||
|
Mineflayer tiene dos tipos de tests :
|
||
|
|
||
|
* [tests internos](test/internalTest.js) : tests que se hacen con un servidor simple creado con node-minecraft-protocol
|
||
|
* [tests externos](test/externalTests/) : 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.
|
||
|
|
||
|
### Creando un text externo
|
||
|
|
||
|
Para crear un test externo solo tienes que crear un archivo en [test/externalTests](test/externalTests)
|
||
|
|
||
|
Un ejemplo : [test/externalTests/digAndBuild.js](https://github.com/PrismarineJS/mineflayer/blob/master/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.
|
||
|
|
||
|
|
||
|
## Creando un plugin de terceros
|
||
|
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](https://github.com/andrewrk/mineflayer#third-party-plugins)
|
||
|
|
||
|
Para crear un plugin nuevo tienes que :
|
||
|
|
||
|
1. crear un repositorio nuevo
|
||
|
2. en tu archivo index.js, exportar una función para inicializar el plugin con argumento mineflayer ([ejemplo](https://github.com/andrewrk/mineflayer-navigate/blob/e24cb6a868ce64ae43bea2d035832c15ed01d301/index.js#L18))
|
||
|
3. esa función devuelve una función para introducir el plugin con argumento el object del bot ([ejemplo](https://github.com/andrewrk/mineflayer-navigate/blob/e24cb6a868ce64ae43bea2d035832c15ed01d301/index.js#L23))
|
||
|
4. a partir de esa función se pueden añadir más funcionalidades al bot ([ejemplo](https://github.com/andrewrk/mineflayer-navigate/blob/e24cb6a868ce64ae43bea2d035832c15ed01d301/index.js#L32))
|
||
|
|
||
|
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](https://github.com/andrewrk/mineflayer-navigate/tree/e24cb6a868ce64ae43bea2d035832c15ed01d301) here.
|
||
|
|
||
|
## Reportando bugs
|
||
|
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
|
||
|
|
||
|
## Código de Mineflayer
|
||
|
Algunas cosas para pensar al crear un Pull Request (solicitud de pull) o hacer un commit :
|
||
|
|
||
|
### Gestión de errores
|
||
|
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 :
|
||
|
|
||
|
```js
|
||
|
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](https://github.com/andrewrk/mineflayer/blob/a8736c4ea473cf1a609c5a29046c0cdad006d429/lib/plugins/bed.js#L10)
|
||
|
|
||
|
### Actualizando la documentación
|
||
|
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](../CONTRIBUTING.md)
|