Minecraft Fabric模組開發教學 #1 開發環境設定

Fabric是Java版Minecraft的模組載入器,近年來發展快速、相容性佳的特性,使其成為Forge的強勁對手,很多人開始用這個製作模組。


開發模組,你需要具備以下知識:

  • 熟悉Java語法
  • 電腦能正常執行Minecraft  1.17.1
  • 會安裝fabric模組
  • 有用英語google錯誤訊息的能力
第一篇教學是設定開發環境,和製作一個只有圖示的空白模組,放到遊戲中測試。

一、開發環境設定
二、設定專案 
三、測試模組 
四、參考資料/延伸閱讀
## 一、開發環境設定

1.安裝AdoptOpenJDK 16。
1.17開發模組必備,如果有裝其他版本的Java,請自行調整環境變數"JAVA_HOME",確保目前作業系統都是使用Java 16。(參考:[java 環境變數](https://ithelp.ithome.com.tw/articles/10213551))

這裡使用AdoptOpenJDK而非Oracle公司發行的JDK,功能一樣,只是授權條款不同。

![](https://i.imgur.com/gbjIABb.png)

2.選擇一款IDE

IDE是開發程式碼的環境,好的IDE會在你打錯字告訴你,並提供很多方便的功能。在此我們選擇JetBrains發行的IntelliJ IDEA。

到官網的[下載](https://www.jetbrains.com/idea/download/#section=windows)頁面,下載安裝右邊黑色的Community免費版。
![](https://i.imgur.com/9TRaKB1.png)

## 二、設定專案

1.從[Github](https://github.com/FabricMC/fabric-example-mod)將官方的"fabric mod"範本複製到電腦 (按Code→Download
ZIP),解壓縮,將"fabric-example-mod-1.17"放到桌面。
![](https://i.imgur.com/oXcpEx8.png)

2.開啟IDEA,點選右上角的"Open Project",選擇fabric範本的資料夾。
![](https://i.imgur.com/KXI0q5v.png)

3.開啟之後,下面的Gradle會開始工作,等待訊息出現"BUILD SUCCESS",就表示完成了。
Gradle是一個自動化工具,能夠自動處理一些開發上的繁瑣操作。
![](https://i.imgur.com/3nkdQFv.png)

4.從左邊的面板開啟"gradle.properties",設定模組名稱與JDK路徑。注意目前Minecraft版本的部分是1.17.1,其他版本請到fabric[網站](https://fabricmc.net/versions.html)查詢。
原本長這樣:

```java
# Done to increase the memory available to gradle.
org.gradle.jvmargs=-Xmx1G

# Fabric Properties
	# check these on https://fabricmc.net/versions.html
	minecraft_version=1.17.1
	yarn_mappings=1.17.1+build.39
	loader_version=0.11.6

# Mod Properties
	mod_version = 1.0.0
	maven_group = com.example
	archives_base_name = fabric-example-mod

# Dependencies
	fabric_version=0.39.2+1.17
```

修改之後 ("#"開頭的是註解,自行刪除):
```java
# Done to increase the memory available to gradle.
org.gradle.jvmargs=-Xmx1G
# 指定JDK路徑
org.gradle.java.home=C:/Program Files/Eclipse Foundation/jdk-16.0.2.7-hotspot

# Fabric Properties
	# check these on https://fabricmc.net/versions.html
	minecraft_version=1.17.1
	yarn_mappings=1.17.1+build.39
	loader_version=0.11.6

# Mod Properties
# 模組版本號取名:遊戲版本+模組版本
	mod_version = 1.17.1-0.0.1
# 以網站名稱命名,如果沒有就電子郵件倒著寫。例如"com.gmail.ivon"
	maven_group = net.mcbedev
# 模組ID。
	archives_base_name = mymod

# Dependencies
	fabric_version=0.39.2+1.17

```

5.調整完之後,按File -> Close Project,關閉這個專案,接著重新開啟專案。

6.展開src/main/java資料夾,會發現範本已經提供了一個範例"net.fabricmc.example"。這就是Java中所謂的"package",你可以保留參考用,因為我們要用的專案應該跟上面gradle.properties檔案裡寫的一致。

![](https://i.imgur.com/7JOZHdE.png)

7.對"java"資料夾按右鍵,New -> Package,輸入package的名稱,例如"net.mcbedev.mymod"
![](https://i.imgur.com/aWnuUjr.png)

8.展開"resources"資料夾,開啟"fabric.mod.json",這個檔案是我們模組檔案的資料。
修改內容如下 (//是註解,一定要刪除):

```json
{
  "schemaVersion": 1,
  //模組ID,必須獨一無二
  "id": "mymod",
  "version": "${version}",
  //模組名稱
  "name": "My Mod",
  //模組簡介
  "description": "My Fabric Mod.",
  //作者
  "authors": [
    "Ivon852"
  ],
  //聯絡資訊
  "contact": {
    "homepage": "https://twitter.com/ivon852",
    "sources": "https://github.com/FabricMC/fabric-example-mod"
  },
  //授權條款
  "license": "MIT",
  //模組圖示路徑
  "icon": "assets/mymod/icon.png",
  "environment": "*",
  //主程式路徑
  "entrypoints": {
    "main": [
      "net.mcbedev.mymod.Main"
    ]
  },
  //Mixin路徑
  "mixins": [
    "mymod.mixins.json"
  ],
  "depends": {
    "fabricloader": ">=0.11.3",
    "fabric": "*",
    "minecraft": "1.17.x",
    "java": ">=16"
  },
  "suggests": {
    "another-mod": "*"
  }
}

```

9.對"mixin.modid.json"按下右鍵,Refactor -> Rename,改名成"模組ID+mixins.json",在跳出的視窗按下Refactor。

![](https://i.imgur.com/ADc0FQ9.png)

10.開啟該檔案,輸入以下內容:

```json
{
  "required": true,
  "minVersion": "0.8",
  "package": "net.mcbedev.mymod.mixin",
  "compatibilityLevel": "JAVA_16",
  "mixins": [
  ],
  "client": [
    "MymodMixin"
  ],
  "injectors": {
    "defaultRequire": 1
  }
}
```

11.對"net.mcebedev.mymod"右鍵 -> New -> New Java Class,取名為"Main",這就是主程式的類別。

![](https://i.imgur.com/FYj96fY.png)

12.在Main裡面輸入以下內容。整個模組的程式會從這裡開始,也就是onInitialize()方法來初始化模組的東西。System.out.println則是會在模組啟動時,於終端機顯示該行文字。

```java
package net.mcbedev.mymod;

import net.fabricmc.api.ModInitializer;

public class Main implements ModInitializer {
    @Override
    public void onInitialize() {
        System.out.println("Hello Fabric world!");
    }
}
```

13.展開"net.fabricmc.example",拖曳"mixins"資料夾到"net.mcebedev.mymod"。會跳出視窗,按下Refactor。

![](https://i.imgur.com/ZEMYkL9.png) 


14.這樣這個資料夾就會跑到我們的package下面。展開"mixins",對"ExampleMixin"按下右鍵,同樣Refactorr -> Rename,重新命名成"MyModMixin"。

![](https://i.imgur.com/EBN3ZvR.png) 

15.接著來新增模組的圖示。模組的圖示要放在/resources/assests/mymod/裡面。因此將"assests"展開,對"assests.modid"按右鍵Refactor,改名成"mymod"。

![](https://i.imgur.com/0DofE7z.png)

16.可以看到裡面已經有一個"icon.png"的範例圖片了,這就是模組圖示。按右鍵 -> Open in -> Explorer,接著檔案總管就會開啟,跳出這個檔案的所在位置。你可以把這個圖片改成自己喜歡的,名字仍然叫做"icon.png"。

![](https://i.imgur.com/EoqOB9v.png)

17.到這邊為止,我們已經完成了一個空白模組!什麼都沒有,但至少fabric可以讀取到這個模組。

## 三、測試模組
要測試模組有以下二種方法:

### 以Minecraft實例測試模組
直接在IDEA中啟動Minecraft,fabric會自動載入目前開發中的模組。
這裡的Minecraft是獨立的,資料放在專案資料夾/run裡面,因此不用擔心會影響到Minecraft啟動器的資料。
1.點選右上角的綠色播放按鈕,啟動Minecraft Client。

![](https://i.imgur.com/8SwL67f.png)

2.終端機會開啟,開始啟動Minecraft。
如果你眼睛夠利的話,會看到這條訊息,就是剛剛在Main.java裡面寫的訊息成功顯示出來了。

![](https://i.imgur.com/INYRw3P.png)

3.成功開啟Minecraft後,毫無反應,因為fabric預設沒有介面顯示你裝了那些模組。
但為方便以後測試模組,你可以先創造一個世界。
退出遊戲後,終端機會顯示程式結束。接著來看如何將模組放到真正的Minecraft中測試。

![](https://i.imgur.com/VeTUGay.png)


### 實際放到Minecraft中測試
將你的模組打包成.jar檔,變成一般fabric模組,透過Minecraft啟動器來正式載入你的模組。

1.展開右邊的Gradle。展開"Task"-> "build",對build按二下,就會開始打包。

![](https://i.imgur.com/qn5GrrJ.png)

2.打包好的檔案會放在/build/libs/,後面沒有dev或sources的就是一個可以使用的模組檔案,也就是"mymod-1.17.1-0.0.1.jar"

![](https://i.imgur.com/5WPVGBj.png)

3.就像正常安裝fabric模組一樣,用檔案管理器將這個檔案移動到.minecraft/mods/資料夾。
在啟動Minecraft之前,請確定已經有安裝[Fabric API](https://www.curseforge.com/minecraft/mc-mods/fabric-api)和[Mod Menu](https://www.curseforge.com/minecraft/mc-mods/modmenu)這二個模組,前者為必須,因為這個範本需要依賴Fabric API才能運作。

4.啟動之後,就會看到我們的模組顯示在模組列表中了。

![](https://i.imgur.com/yf45eue.png)

## 參考資料/延伸閱讀
[Fabric WIKI](https://fabricmc.net/wiki/doku.php)

留言

此網誌的熱門文章

Minecraft基岩版多人連線教學: 方法一覽

【詳細解說】什麼是Minecraft基岩版,跟Java版有什麼差?

Minecraft基岩版安裝模組(Add-On)&資源包&光影教學