---
# System prepended metadata

title: 更新Forge和MCP Mapping

---

更新Forge和MCP Mapping
===
Forge更新了！ (\*´▽\`\*)
MCP Mapping更新了！ (\*´▽\`\*)

......欸不對MCP每天都有snapshot釋出好嗎 (／‵Д′)／~ ╧╧
我們重來一下.....

Forge推薦版本更新了！ (\*ﾟ∀ﾟ\*)
MCP Mapping穩定版本更新了！ (\*ﾟ∀ﾟ\*)

那如果想要~~跟風~~的話要怎麼更新開發環境呢？
其實很簡單，恩，真的，相信我 (\*´艸\`\*)

在這邊我會示範以下的版本更新
- MinecraftForge **1.15.2-31.1.0** ~ **1.15.2-31.2.0**
- MCP Mapping **snapshot 20190719-1.14.3** ~ **snapshot 20200514-1.15.1**

在開始之前，請先確定你已經有一個可以運行基本模組的開發環境了
否則請移駕至[開發環境建置](https://hackmd.io/@immortalmice/Hkj9s-CvU/https%3A%2F%2Fhackmd.io%2F%40immortalmice%2FSkKzBry_L)這篇文章 (\*’ｰ’\*)

另外，如果你的Forge更新範圍跨了Minecraft版本，也請直接從頭，也就是[開發環境建置](https://hackmd.io/@immortalmice/Hkj9s-CvU/https%3A%2F%2Fhackmd.io%2F%40immortalmice%2FSkKzBry_L)開始

在本章節你會了解
---
- 更新你的Minecraft Forge版本
- 更新你的MCP Mapping版本

更新你的Minecraft Forge版本
---
首先打開你專案跟目錄的 build.gradle
找到原本的這一行
```json=
minecraft 'net.minecraftforge:forge:1.15.2-31.1.0'
```
把它改成你要的版本號就對了，這邊M鼠要更新到31.2.0 ヽ(✿ﾟ▽ﾟ)ノ
```json=
minecraft 'net.minecraftforge:forge:1.15.2-31.2.0'
```
關於Forge的所有版本號，你可以直接在[官方下載頁面](https://files.minecraftforge.net/)中點開 + Show all Versions 查看

接下來打開你的Eclipse，我們要執行幾個Gradle Task
如何執行Gradle Task在[這篇文](https://hackmd.io/@immortalmice/Hkj9s-CvU/https%3A%2F%2Fhackmd.io%2F%40immortalmice%2FSkKzBry_L)中已經說過了，這邊就不再贅述

請刷新專案，確定Eclipse有讀到新的build.gradle後，**依序** 執行下面幾個Task (･ω´･ )

- `ide > cleanEclipse`
- `ide > eclipse`
- `fg_runs > genEclipseRuns`

> 如果你的Eclipse下方的Gradle Tasks視窗不見了的話
> 你可以在 `Window -> Show View -> Other -> Gradle -> Gradle Tasks` 中重新打開這個視窗
> 如果打開發現Gradle沒有被載入的話，請自行手動import一次，方法和 [開發環境建置](https://hackmd.io/@immortalmice/Hkj9s-CvU/https%3A%2F%2Fhackmd.io%2F%40immortalmice%2FSkKzBry_L) 中一樣

在執行`ide > eclipse`時會需要一些時間，因為他要下載所有新的檔案 （¯﹃¯）

好了之後請務必刷新你的專案，確定Eclipse有讀到新的資料
之後就可以嘗試打開你的遊戲了，請注意 **務必要用新生成的runXXX.launch系列檔案執行**，而不是你之前用的舊的檔案 (っ´ω\`c)

進入遊戲，在標題畫面中的mods按鈕點進去查看
如果成功的話，你應該可以看到這裡的Forge版本是31.2.0了 ヾ(´ε\`ヾ)

![圖3-1-1 遊戲內載入模組列表畫面](https://i.imgur.com/FD2KPmJ.jpg)


不過，如果你要跨越的版本號過遠，這之中有所謂的[Breaking Change](https://bambielli.com/til/2018-01-12-what-is-a-breaking-change/)，並且影響範圍包含到你在前一個版本已經寫下的模組程式碼的話，更新版本號就不會是上面我所說的這們簡單的事了

而這通常你連編譯都不會過，甚至比較慘的是編譯過了，但是因為Breaking Change，程式行為和以前不一樣而導致Bug出現，然後你因為編譯很順利所以沒注意到這件事...之後...你懂得 (✘﹏✘ა)

關於如何修正Breaking Change，說真的範圍太廣了，無法概略的說明
出問題的原因有千千萬萬種，解決方式也都不一樣
這部分請各位自己動動自己的程式設計腦，試著自己修正吧
如果真的自己修正不了，你可以上[Forge官方論壇](https://www.minecraftforge.net/forum/forum/70-modder-support/)發問 （´-\`）.｡oO

另一個可能的問題，一樣是發生在你跨越的版本號過遠的時候，導致你的Gradle版本過舊，無法支援你要前往的Forge版本，這時候你就必須要更新你的ForgeGradle
ForgeGradle的所有版本號可以在[這裡](https://files.minecraftforge.net/maven/net/minecraftforge/gradle/ForgeGradle/)查看，然後修改你build.gradle的這個區段
```json=
classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '3.+', changing: true
```
但是這個動作M鼠沒有親自實做過，我無法向你保證能夠成功  (´∩ω∩｀) 
只是如果都到連Gradle都要更新，那你基本上是所有現有舊的東西都沒用，全部要換新了
所以在此會建議乾脆直接在[MinecraftForge官方下載頁面](https://files.minecraftforge.net/)整個重頭來一遍

更新你的MCP Mapping版本
---
一樣，不囉嗦，打開你專案跟目錄的 build.gradle
找到原本的這一行
```json=
mappings channel: 'snapshot', version: '20190719-1.14.3'
```
這次我們的目標是 snapshot-20200514-1.15.1，所以改成這樣 ヽ(✿ﾟ▽ﾟ)ノ
```json=
mappings channel: 'snapshot', version: '20200514-1.15.1'
```

這時候我們要執行兩個和剛才似曾相似的Gradle Tasks

- `ide > cleanEclipse`
- `ide > eclipse`
- `fg_runs > genEclipseRuns`

恩，沒錯，完全和Forge的更新步驟一樣 σ ﾟ∀ ﾟ) ﾟ∀ﾟ)σ 

MCP Mapping和Forge不一樣，無法在遊戲內確認版本
要確認的話還是要你親自確認開發環境中的檔案

*(你在遊戲中左下角看到的MCP Mapping版本是幌子
它是指Forge用的MCP Mapping，而不是你開發環境中用的)* (´～\`)

要確認的話，比如說，這是原本`snapshot-20190719-1.14.3`中`net.minecraft.inventory.container.Slot`的方法
```java=
public void onSlotChange(ItemStack p_75220_1_, ItemStack p_75220_2_){
    //...
}
```

如果你跟我一樣是更新到`snapshot-20200514-1.15.1`
你現在的方法應該要變成這樣，傳入參數的名字已經是MCP Name了 ( ｀∀｀)つt[ ]

```java=
public void onSlotChange(ItemStack oldStackIn, ItemStack newStackIn) {
    //...
}
```

如果你能成功執行遊戲，那恭喜你，你已經成功了 ヾ(●゜▽゜●)♡ 

當然，如果你之前寫下的程式碼用到了Searge Name，而在新版本Mapping已經變成MCP Name的話，那Eclipse應該會在你編譯之前就把你擋下來了，因為你呼叫的名字並不存在

比如說這是M鼠自己寫的模組在更新Mapping後的慘狀

![圖3-1-2 FoodPower模組更新MCP Mapping後的狀況](https://i.imgur.com/quiqvqy.jpg)

一片紅阿... (´_ゝ\`)
你能做的就是把你這些曾經用過的Searge Name手動改成你現在Mapping版本的MCP Name

全改完之後，能夠順利執行就沒問題囉~
這和Forge不一樣，因為MCP Mapping的版本跟程式的功能無關
不會說你更新了MCP Mapping，結果某個方法(Method)的功能產生了變化 (ㆆᴗㆆ)
除非你在改名的時候不小心改成另一個相似但功能不同的方法

---

*本頁面撰寫於2020/05/22，目前最後更新日期為2020/05/22*
*若上述時間與你閱讀的時間相距過遠，請自行斟酌是否採用本頁面的資訊*
