94 lines
4.0 KiB
Markdown
94 lines
4.0 KiB
Markdown
# 贡献
|
||
|
||
Mineflayer 最初主要是由 [andrewrk](http://github.com/andrewrk) 制作的
|
||
但自那以后,许多[贡献者](https://github.com/andrewrk/mineflayer/graphs/contributors)对其进行了改进和修复
|
||
所以知道如何为mineflayer做出贡献的最佳方式很重要
|
||
|
||
## Issue organization
|
||
|
||
我们有3个阶段标签来尝试组织Issue:
|
||
|
||
* Stage 1: 只是由项目新手创建的,我们还不知道它是否值得实现/修复
|
||
* Stage 2: 有希望的想法,但在实施前需要更多思考
|
||
* Stage 3: 想法被精确地指定了,就剩写代码了
|
||
|
||
链接如 https://github.com/PrismarineJS/mineflayer/issues?q=is%3Aopen+is%3Aissue+-label%3AStage1 can be used to filter out stage 1 if you're looking for things that are ready for contribution
|
||
|
||
## 创建测试
|
||
Mineflayer 有两种测试 :
|
||
|
||
* [internal tests](test/internalTest.js) : 针对使用node-minecraft-protocol创建的简单服务器进行的测试
|
||
* [external tests](test/externalTests/) : 针对原版服务器进行的测试
|
||
|
||
The objective of these tests is to know automatically what works and what doesn't in mineflayer, so it's easier to make mineflayer work.
|
||
|
||
### 创建外部测试
|
||
|
||
In order to add an external test now you only need to create a file in [test/externalTests](test/externalTests)
|
||
|
||
一个例子 : [test/externalTests/digAndBuild.js](https://github.com/PrismarineJS/mineflayer/blob/master/test/externalTests/digAndBuild.js)
|
||
|
||
That file needs to export a function returning a function or an array of function taking as parameter the bot object and a done callback,
|
||
it should contain asserts to test if the tested functionality failed.
|
||
|
||
|
||
## 创建第三方插件
|
||
Mineflayer 是可扩展的插件化的; 任何人都可以创建一个插件,在 Mineflayer 之上添加更高级别的 API。
|
||
|
||
已经开发了几个这样的第三方插件 [查看](https://github.com/andrewrk/mineflayer#third-party-plugins)
|
||
|
||
为了创建一个新的,您需要 :
|
||
|
||
1. 创建一个新的 repo
|
||
2. 在你的 index.js 文件中, 导出一个接受参数 mineflayer 的 init 函数 ([查看例子](https://github.com/andrewrk/mineflayer-navigate/blob/e24cb6a868ce64ae43bea2d035832c15ed01d301/index.js#L18))
|
||
3. that function returns a inject function taking in argument the bot object ([example](https://github.com/andrewrk/mineflayer-navigate/blob/e24cb6a868ce64ae43bea2d035832c15ed01d301/index.js#L23))
|
||
4. that inject function add functionalities to the bot object ([example](https://github.com/andrewrk/mineflayer-navigate/blob/e24cb6a868ce64ae43bea2d035832c15ed01d301/index.js#L32))
|
||
|
||
Since the mineflayer object is passed in parameter, that new package doesn't need to depend on mineflayer (no mineflayer dependency in the package.json)
|
||
|
||
参考 [全部示例](https://github.com/andrewrk/mineflayer-navigate/tree/e24cb6a868ce64ae43bea2d035832c15ed01d301)
|
||
|
||
## 反馈Bug
|
||
Mineflayer 在大多数情况下都能很好地工作,但有时仍然存在bug.
|
||
|
||
找到一个问题时,最好报告一个提供这些信息的问题 :
|
||
|
||
* 你想做什么 (英语目标)
|
||
* 你尝试过什么 (代码)
|
||
* 发生了什么事
|
||
* 你期望会发生什么
|
||
|
||
## Mineflayer 代码
|
||
提交请求或提交提交时需要考虑的一些事情 :
|
||
|
||
### 错误处理
|
||
在大多数情况下,mineflayer不会让机器人崩溃。即使有些东西失败了,机器人也可以选择另一条路线来达到它的目标。
|
||
|
||
这意味着我们不应该使用 `throw(new Error("error"))` 而是使用node.js约定在回调中传递错误。
|
||
|
||
例如 :
|
||
|
||
```js
|
||
function myfunction (param1, callback) {
|
||
// do stuff
|
||
let toDo = 1
|
||
toDo = 2
|
||
if (toDo === 2) { // 一切正常
|
||
callback()
|
||
} else {
|
||
callback(new Error('什么东西出错了'))
|
||
}
|
||
}
|
||
```
|
||
|
||
请参考另一个例子 [mineflayer code](https://github.com/andrewrk/mineflayer/blob/a8736c4ea473cf1a609c5a29046c0cdad006d429/lib/plugins/bed.js#L10)
|
||
|
||
### 更新文档
|
||
docs/api.md 的内容是用doctoc制作的。更新该文件后,应运行 `doctoc docs/api.md` 以更新目录。
|
||
|
||
没有doctoc命令使用下面的命令安装
|
||
|
||
```
|
||
npm install -g doctoc
|
||
```
|