LookAtMySuitBot/js/node_modules/mineflayer/docs/zh/CONTRIBUTING.md

94 lines
4.0 KiB
Markdown
Raw Normal View History

2023-12-24 20:08:39 -05:00
# 贡献
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
```