前往
大廳
主題

【Mineflayer】從零開始寫 Minecraft Bot-Ep.0 Mineflayer 簡介、環境安裝

酷可 | 2024-01-31 09:12:05 | 巴幣 110 | 人氣 316

Hello 大家好,我是酷可。
我們這個系列會來教大家怎麼利用 Mineflayer,去寫一個 Minecraft 機器人。
其實更準確地說是我想記錄一下我自己的心得,讓未來的我有個參考可以看。

注意!本系列會涉及到許多程式領域相關的知識,但我盡量會用白話一點的方式來介紹。

什麼是 Mineflayer?

首先我們得先來了解這究竟是個什麼東西?
讓我們到 Mineflayer 的官方 GitHub 上面去看看。


Mineflayer 是一個強大、穩定,且高級的 JavaScript API,用來創造 Minecraft Bot,也就是 Minecraft 機器人,至於為什麼會需要機器人呢?當然是為了幫我們完成一些枯燥乏味的工作,就跟現實的機器人一樣。

什麼是 JavaScript?它是一門程式語言,而機器人需要靠我們寫程式來生出來,你可以暫時理解為它是讓我們用來創造機器人的工具之一就好了,但老實說我們的教學不會使用 JavaScript,而是另外一門跟它很像的語言——TypeScript。

老實說我覺得一般玩 MC 的人,其實幾乎不會有需要用到機器人的場合,因為能用在單人世界的機會並不多,而開放玩家能夠使用自製 Bot 的伺服器又很少,因此本次的教學並不是單純的介紹怎麼使用 Mineflayer 而已,而是會搭配某個可以使用自製 Bot 的伺服器——廢土伺服器,介紹一些能夠實際應用在伺服器中的例子,例如存錢、宣傳、掛塔、整地、交易等等。

在正式開始寫程式以前,我們得先來進行一連串的前置作業,安裝寫程式的軟體,安裝 Mineflayer 之類的,如果你是已經安裝完成的人,那也許可以跳過這一段。

安裝 Visual Studio Code

首先,要寫程式就得先有用來寫程式的工具(軟體),這裡我就直接推薦 Visual Studio Code 了。

如上圖,直接到 VS Code(簡稱)的 下載頁面,這裡可以根據自己電腦的作業系統來選擇,例如我就是 Windows,直接點那顆最大的下載按鈕就好了,也因為我是 Windows,所以接下來的教學都是以在 Windows 的前提下進行,畢竟我沒有試過其他作業系統跑起來會長怎樣。

下載完以後就會得到一個 .exe 的執行檔,接下來就打開,下一步,跟下一步,還有下一步,直到完成,原則上應該不會有什麼問題,之後在電腦的搜尋中,輸入 vscode 應該就會出現了。

安裝 Node.js


在 Mineflayer 的官方介紹中,有提到我們需要安裝 Node.js,且版本大於等於 18(日後可能會更新,請根據實際情況),因此讓我們到 nodejs.org 上面去看看。


如上圖,直接到 Node.js 的官網上面就可以看到下載按鈕,左邊 LTS 是長期支援版本,右邊 Current 就是當前版本,可以理解為穩定版與最新版,有穩定版而且又符合 >= 18 的條件,那就直接下載左邊的穩定板就好了。

下載之後會得到一個 .msi 的安裝檔, 同樣打開瘋狂下一步就好了。


想知道有沒有安裝成功的話,可以在電腦搜尋 cmd(命令提示字元),並輸入 node -v 看有沒有出現版本的訊息,有的話就代表安裝成功,就可以關掉視窗了。

安裝 Node.js 主要有兩件事情,第一是讓我們可以在電腦中執行 JavaScript,第二件事是順便安裝 npm,這是 Node.js 的套件管理器,可以讓我們更方便的管理某些東西,總之我們待會就會用到了。

安裝 TypeScript


記得我剛剛說過我們不是要用 JavaScript 來寫,而是要用 TypeScript,這裡簡單介紹一下,TypeScript 是由微軟(Microsoft)開發的一種程式語言,由 JavaScript 衍生而來,簡單的說就是讓 JavaScript 加上型別定義而已,讓我們在宣告變數的同時可以定義變數的型別,其中最大的好處就是這樣子寫出來的程式碼對於我們來說更容易閱讀,甚至你就算不定義也行,也可以完全使用 JavaScript 的語法去寫也可以。

總之由於我個人習慣的關係,加上教學所以我選擇使用 TypeScript,如果你是本來就已經使用 JavaScript 去寫的人也沒關係,對於理解上應該不會有太大的差異,也可以順便看看 TypeScript 寫出來的程式會長什麼樣子。


總之安裝的方式很簡單,先讓我們 打開 VS Code,按下 Ctrl + `,會在下方打開一個終端機(Terminal),接著輸入以下指令

npm install -g typescript

npm 是安裝工具的名稱,就是要使用它就是要寫 npm 的意思,install 是安裝的意思,-g 是指全域安裝,代表在電腦的任何地方都可以使用,typescript 就是我們要安裝的目標。


安裝完成後,可以輸入 tsc -v 來檢查是否安裝成功,-v 就是版本的意思,就跟我們剛剛檢查 node.js 一樣。

建立專案

說是建立專案,其實就是新增一個資料夾,所以先在你的電腦裡面找一個風水寶地,然後新增一個資料夾,並一個酷酷的名字,例如我可以取成 CookBot,就看個人喜好了


接著點擊畫面中的 Open Folder(開啟資料夾),找到你剛剛新增的資料夾並選擇它,如果你已經關掉這個 Welcome 的頁面,也可以在左上角的 File(檔案)裡面開啟資料夾。


接著確定你的 VS Code 左邊跟我一樣,有顯示資料夾的名稱,就代表目前是在該資料夾內了,或是也可以從終端機的路徑看也可以。

有了專案資料夾以後,接下來就是要進行一些初始化配置,同樣再終端機內輸入下面的指令:
npm init -y

這是用來幫我們 初始化專案 的,它會生成一個叫做 package.json 的檔案,init 就是初始化(initialization)的縮寫,-y 是為了省略一些提問過程,不然系統會一行一行的問你專案名稱、版本、說明等等之類的。

接著由於我們是要使用 TypeScript 來撰寫專案,所以還要執行一條指令:

tsc --init

這是用來初始化 TypeScript 專案使用的,它會生成一個 tsconfig.json 檔案,用來設置許多跟 TypeScript 有關的設定。


到目前為止,資料夾內應該會有如上圖的兩個 json 檔案,都初始化完成之後,接下來就是要安裝 Mineflayer 拉~

安裝 Mineflayer

終於到今天的重頭戲了,也就是 Mineflayer 本體,根據官方介紹,在安裝完 node.js 之後,我們就可以輸入下列指令來進行安裝:

npm install mineflayer

跟剛剛安裝 TypeScript 一樣,只是名字不一樣,並且少了 -g,因為我們 Mineflayer 只是要在這個專案使用而已,所以不需要進行全域安裝,作法完全一樣,在我們使用 VS Code 打開我們的資料夾之後,點擊 Ctrl + ` 開啟終端機,並輸入上面的指令即可安裝完成。


完成後,資料夾內就會多出兩個檔案,node_modules 資料夾裡面包含了我們安裝的所有模組、套件,而 package-lock.json,則記錄著每個模組的各種資料,只要有這個檔案,當我們輸入 npm install 的時候,就會得到一個擁有相同模組的專案,不過這些都不是很重要,暫時不用管它。


完成專案的初始化以及安裝 Mineflayer 之後,把滑鼠移到左邊的檔案區,上面會顯示四個按鈕,讓我們點擊第一個的 New File(新增檔案)

輸入檔案名稱,且附檔名一定要是 .ts,這是 TypeScript 檔案的副檔名,我個人都是寫 app.ts,你也可以寫 index.ts、main.ts 之類的,不過我們要寫的 Minecraft Bot 比較像是一種工具、應用程式等,一般來說 app.ts 應該比較常使用。


接著就是最讓人興奮的時刻了,在 app.ts 裡面寫上下面這一段:

console.log('Hello World!');

接著在終端機輸入:

tsc


執行後應該會看到檔案區多了一個 app.js,副檔名 .js 的檔案就是 JavaScript 的檔案,至於為什麼要這麼做呢?這是因為 TS 的檔案沒有辦法直接執行,它需要先經過編譯,變成一個 JS 檔之後才能執行,打開之後你會發現,這不是跟 app.ts 長的一樣嗎?沒錯,目前是這樣,畢竟只有一行程式而已,而且是看不出差異的那種,總之先不管,接著再回到終端機輸入:

node app.js


可以看到它輸出了「Hello World!」的訊息,這就是 console.log() 的用途,能夠在終端機內顯示訊息,未來的路上我們會很常用到它的。

JavaScript vs TypeScript
(接下來這個是寫給只有寫過 JavaScript 的人看的)

最後,我簡單寫了個小範例,表示了一下 JavaScript 跟 TypeScript 的差異,可以看到我在 TS 內,能夠針對變數定義型別,包括函數的回傳值也可以定義,可以讓我們更清楚的知道,這個函數應該帶入什麼型別的參數,以及它會回傳什麼東西。

而且 TS 不同於 JS 是在執行時出錯你才知道有錯誤,TS 會隨時偵測你的型別,是否有誤,並且及時報錯,例如你明明定義 name 為 string,卻給它 number 時 ,IDE 就會告訴你寫錯了,這在之後專案越來越大,變數越來越多,檔案越來越長的時候,尤其重要,雖然看似要多寫一些東西,而且多了許多限制,但也大幅度的降低了我們程式出錯的機率,同時讓我們更容易讀懂程式碼。

而且由於我們已經明確的定義了變數的型別,所以 IDE 就能夠更好的提示我們該變數內有哪些屬性、函數可以使用,畢竟像我們這種懶人都只想打幾個字就按 TAB 補完,然而 JS 不能定義型別,尤其是在實作函數時,每個參數都是 any,要使用參數內的函數時就很麻煩了,除非使用一些類似註解的方式來賦予型別。

不過以上只是我個人的感想拉,我最一開始深入的就是 TS,那時我其實也不熟 JS,甚至到現在我也很少寫,但我第一次從 TS 轉到 JS 時,發現不能定義變數型別真的超怪,不然我原本也是要用 JS 來寫 Mineflayer 的,只是真的不習慣,只好改成 TS 拉~

結語

今天是一個我最不喜歡的環節,也就是軟體、環境安裝,搞了一堆還沒寫到什麼酷東西,但沒辦法,想要開始使用 Mineflayer 寫 Minecraft Bot 就一定要經歷過這些部分,雖然我們今天還沒正式踏入 Mineflayer 的世界,但下一次就會開始了,並且我們會再針對 TypeScript 做一些額外的設定,讓我們不用每次都要輸入兩次指令才能執行程式,順便把編譯出來的 .js 檔另外放,才不會讓整個專案看起來亂糟糟的。


最後給各位看看實際操作機器人時大概的樣子,影片主要只展示了丟東西、走至定點、切換工具、挖方塊,當然實際能做的不只有這些拉~


創作回應

更多創作