更新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* *若上述時間與你閱讀的時間相距過遠,請自行斟酌是否採用本頁面的資訊*