首先需要強調,這個教程不是給沒有任何編程基礎的人準備的...你至少要懂得最基礎的編程知識和OOP(面向對象編程)的基礎,如果你真的對編程一竅不通的話建議先讀讀Java教程.
胡來的前言
明明在索引貼不是已經有一個前言了嗎?那個是我在3月份寫的,在離死又近了7個月後,我又有些新的話想說.前言和教程內容沒有任何關係,懶得看文字的跳過就好了.
"當我們追求各種各樣的Mod的時候,還記得當初在Alpha時代拿着石鎬裸身下礦洞時的感動嗎?"這個是我在PD服務器管理組討論服務器Mod配置問題時說的,以現在的眼光看,Alpha版的MC無比簡陋,然而當初我們卻能孜孜不倦地下坑,挖礦,努力從礦洞中逃出生天,如此反覆直到被骷髏送去見四季映姬(早期版本的JJ怪真不是威脅)...
"一個遺世獨立的理想鄉"這是我對Alpha1.1的MC的評價,在那個時候,沒有Mod,沒有MCP,沒有作為新人的夢魘的HIM,沒有明爭暗鬥的ModLoader和Forge,沒有飛揚跋扈的Spout,沒有短命的MCP MF/MS,就連當時的服務器端都是沒有Mob的...MC就宛如一片生機盎然的凈土(對開局隨機到雪地地圖的人例外)而玩家作為這片世外桃源中唯一的人類,用雙手用工具,開拓出自己的家園.有人在樹林中建起一座木屋,有人建起了一座城堡,玩家們挖開了家周圍的泥土種上沙子和仙人掌作為護城溝,掏空了一座山建造自己心目中的Secret Base.MC猶如一片樂土,但是這又能維持多久呢...
一年半後,MC迎來了正式版,殺死Ender龍後的詩凝縮了Notch在3年間對Minecraft的所有感情,所有的辭藻匯聚成Notch眼中的MC的主題"A Dream",夢終了,Notch投身於0x10c中.不小心在自己名字中多打了一個e的JeB成了開發組的老大,MC也自然開始向"Jeb眼中的MC"發展,我倒並不是認為Jeb將MC搞砸了,但我感覺MC在慢慢變成一個RPG遊戲,而不是最初的沙盒.可又能批評什麼呢?"所有人都是如此愛着這個世界,以至於不允許它不向自己希望中的方向發展."誰都有權將MC改變成自己希望中的樣子,這正是MC的魅力,而Mod則是實現這一目的的工具.
我儘力將這篇教程寫好,我會竭力讓它通俗易懂,能夠讓更多的人明白MCMod的開發.如果有人將上面的前言看完的話,Vielen Dank.
-szszss
-2012.10.27 23:00
-聽着"八雲紫のタイムマシン" 寫下了這篇腎疼的前言
開發環境準備
首先你要準備JDK(Java開發工具包)和一個代碼編輯器,我習慣用Eclipse(曾經是最流行的Java代碼編輯器,現在嘛...至少是最流行的免費代碼編輯器.不過在IDEA推出免費的社區版之後,它或許連最流行的免費代碼編輯器都不是了 ?)
最新版本的JDK應該是JDK8,雖然MC要求Java6,但高版本JDK可以編譯出低版本的代碼.因此在版本的選擇上不用太在意.JDK可以在官網下載,網址是:
JDK8:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
根據自己的操作系統來選擇相應的版本,64位的Windows使用Windows x64版,32位Windows使用Windows x86版.
然後是準備一個Java編輯器,我使用的是Eclipse,這篇教程的代碼也是在Eclipse下編寫的,如果你喜歡的話,你也可以使用IDEA或NetBeans.現在很多人稱IDEA很好用,但我總是不習慣IDEA的界面(感覺像是兒童玩具(笑) 不過JetBrain能用Swing搭出這種界面也不容易了).具體兩者的對比可以上網搜一下,但不建議參考逼乎.
Eclipse可以在這裡下載,網址是:http://www.eclipse.org/downloads/
最新版Eclipse是4.5版(代號Mars),同時Eclipse還分很多個定製版本,每個定製版本都預裝了不同的插件,我因為個人需要所以使用的是"Eclipse for RCP and RAP Developers",你可以考慮"Eclipse IDE for Java Developers".同樣每個版本又細分為64位版和32位版,根據你的操作系統來選擇下載.這裡下載來的是英文版,安裝漢化的方法可以參照這個文章:http://www.cnblogs.com/yaotong/archive/2011/12/28/2305421.html.
IDEA可以從官網下載免費的社區版,開發MCMod足以了:https://www.jetbrains.com/idea/#chooseYourEdition
首先安裝JDK,通常來說如果安裝順利的話程序會自動配置環境變量,否則你需要按照這個的步驟來自行配置環境變量
http://zhidao.baidu.com/question/351018707.html
http://www.cnblogs.com/kevinlocn/archive/2009/10/12/1581855.html
之後安裝Eclipse或IDEA,Eclipse無需註冊表或任何安裝程序,直接將其解壓到一個目錄下就行了.IDEA則是通過安裝包來安裝.
然後便是MDK的安裝.首先要說明什麼是MCP和MDK,以及ForgeGradle、Forge和FML的區別.
MCP即Minecraft Coder Pack,它類似於其他軟件的SDK(Software Development Kit,軟件開發工具包),供開發者進行二次開發的源代碼與工具包,那為什麼MCP不直接叫MSDK(MC SDK)呢?因為MCP是個被官方默許的反向工程項目,Minecraft是個閉源的軟件,而MCP的工作組則是將MC反編譯並順帶反混淆(官方對源代碼進行了混淆操作,將原本有意義的變量,方法,類名變成了無意義的文字,反混淆則是分析其功能並附上合理的名字),同時附上了一些有用的開發工具.MCP是Mod開發的基礎,一定程度上說,沒有MCP的話,MC也就沒有如今的成就.
遺憾的是,MCP項目已經開始沒落了...這個將會在下面的FML部分說到.
Forge則是MinecraftModAPI庫,它實現了一些被大眾所需的最基本的功能,最初Forge只是一個使用ModLoader(簡稱ML)的Mod,因為它依賴一些ML的功能,同時依賴ML的Mod加載功能.後來在某個版本中Forge實現了自己的Mod加載,於是擺脫了對ModLoader的依賴,並且與ModLoader開始不兼容...後來Forge搞出了個ForgeModLoader.
ForgeModLoader(簡稱FML)是ModLoader的替代品.儘管ForgeModLoader和Forge從來都是捆綁發布和運行的,但從代碼的角度來看,兩者其實是獨立的,這一點你可以從FML和Forge的包結構中看出來.FML跟ModLoader相比有很多優點,首先它是開源的,這意味着任何人都可以對FML做出補充,這也是為什麼FML的功能越來越豐富,而ModLoader則始終是只有那幾樣而已.FML的開發維護者也很多,除去兩三位主力外,還有上百位開發者在或多或少貢獻代碼.更重要的是,如今FML已經掌起了MCMod界的大旗,毫不誇張的說,MC的最高版本不是由Mojang決定而是由FML決定...(就拿1.8來說,如果FML不更新的話,你會玩1.8嗎?)如今MCP基本已經棄坑了,其發起人Searge已被Mojang招安...FML已經接替了MCP的任務,並且從1.7開始,FML使用了一種新的代碼構建方式:ForgeGradle.
ForgeGradle是一個封裝好的Gradle插件,它能夠形式原本MCP的責任,反編譯MC並準備開發環境.Gradle是一個構建工具,它比Ant(一個很基本的Java構建工具)要高級,但比Maven(一個很高大上的Java構建工具)要簡化一些.雖然看上去低不成高不就,但它使用起來確實挺不錯,首先它比Ant的構建功能要強,正好適合MCMod複雜的發布方式,其次它支持使用Maven的代碼倉庫,Maven制定了一套代碼倉庫標準,一個程序庫發布後可以直接上傳到在線的倉庫中,使用者能直接從倉庫下載需要的庫,而無需自己手動尋找.最後,Gradle比Maven要簡單很多,開發者不必花費大量的時間來學習.
不過,有很長一段時間Forge官方對Mod開發環境一直沒有一個正式的稱呼,直到MC1.8的晚期版本,Forge開發組才給Mod開發環境起了個正式名字:MDK(Mod Development Kit?)
我們為什麼需要ModLoader和FML?最原始的Mod是直接修改遊戲文件,這意味着如果兩個Mod修改了同一個文件的話,就會發生可怕的沖♂突.ModLoader的出現一定程度上解決了這個問題,它封裝了最基本的一些操作,這讓大部分Mod無需修改MC原本的類就能實現各種功能.MCPModSystem(請為它點一支蠟燭,雖然沒有人記得它,但它確實曾在這個世界上存在過),Spout和ForgeModLoader則將這一特性發揚光大.
(關於Forge,FML和FG的更多的故事,可以看這個帖子的5L)
開發環境的配置
首先我們要下載MDK,MDK的下載地址在這裡
http://files.minecraftforge.net/
在某次網站改版之後,Forge下載站有了完善的界面,現在已經很直觀地能看出如何選擇要下載的版本.建議下載Recommended版(即穩定版,非穩定版有小概率遇到獵奇事件,例如某個非穩定版的Forge無法創建世界).如果沒有Recommended,那再考慮Latest.由於我們是開發者,這裡是點"Mdk"來下載開發工具.(如果是1.7或更早版本的話,是點"Src")
圖:撰稿時Forge下載站1.9.4隻有Latest版,當你看的時候應該已經有Recommended版了.
(提示:Forge的默認下載鏈接是到adfoc,它是讓你先看5秒廣告,然後才能點右上角的鏈接繼續下載.如果你不喜歡看廣告,或者在你那裡adfoc被牆了的話,可以右鍵Mdk選複製鏈接(或者其他什麼的,取決於你用的瀏覽器,如果是IE那就是"複製快捷方式"),然後粘貼到瀏覽器地址欄里,手動刪掉前面的adfoc地址,只留下後半段真實下載位置)
將MDK的壓縮包解壓到一個文件夾,建議避免目錄中帶有非ASCII字符(比如漢字),也不推薦帶有空格,我們先來視奸一下MDK中都有什麼.
除去txt文本和.gitignore,這裡主要分為四部分:
- Gradle的終端 - 用於在未安裝Gradle的機器上部署Gradle,以及運行Gradle指令.由文件夾gradle和文件gradle與gradle.bat組成,後兩者分別是Unix/OSX和Windows下的終端.
- build.gradle - 構建文件,這個文件用來告訴Gradle如何部署和構建一個項目.
- eclipse - 預置的Eclipse工作目錄,由於Eclipse的配置文件包含了不少二進制數據,想就地生成比較困難,因此MDK提供了一個已經預置了一些配置的Eclipse工作目錄,注意區分工作目錄和項目.此外,在老版本(1.7和早期的1.8)中這還是存放調試時的遊戲文件的地方,在新版中已經改到run目錄了.
- src - 源碼目錄,存放Mod的代碼和資源文件,這個之後會詳細介紹.
現在可以通過Gradle終端來着手配置環境了.打開命令窗口並切換到這個文件夾.
(Windows7及以上有個很方便的方式,就是按住Shift然後右鍵,就能選擇直接在當前目錄中打開命令窗口.這個是yuxuanchiadm教給我的...)
在控制台內輸入:
gradlew.bat setupDecompWorkspace
(注:其實即使在Windows下,"gradlew.bat"也可以簡寫成"gradlew",CMD會自動執行gradlew.bat文件的.我這裡是習慣了改不過來了?)
(再補充一條@HaozheJiang在評論中提到的Linux下的指令:"./gradlew setupDecompWorkspace",此外如果中途遇到權限不足的問題的話,可以嘗試"chmod +777 gradlew")
然後回車執行...之後ForgeGradle就會自動下載和配置操作環境了,很方便吧...
(提示:其實我還習慣加上-i,來讓控制台顯示當前的進度,否則卡住了的話連卡在哪都不知道...)
如果你真以為方便那你就輸了,你可能會在下載過程中遇到各種謎の卡死或下載不能,甚至會在gradle文件下載時就卡住,這和天朝的GFW有關.
如果你在下載Gradle(屏幕上顯示"Downloading https://services.gradle.org/distributions/gradle-2.X-bin.zip")時卡住的話,可以手動編輯gradle/wrapper/gradle-wrapper.properties文件(但不建議用記事本,隨便別的什麼文本編輯器都可以,哪怕寫字板都行),將:
distributionUrl=https\://services.gradle.org/distributions/gradle-X-bin.zip
改為:
distributionUrl=http://forgemavenmirror.sinaapp.com/gradle/gradle-X-bin.zip
其中X為具體的Gradle版本,比如2.7.
然而在配置ForgeGradle過程也經常會出現卡死,通常是發生在從網上下載代碼庫的時候,這就需要考慮使用ForgeGradle on Wall.
關於如何配置FGOW來加速有有篇專門的文章,不過我想各位應該不想在這上面花太多時間,因此這裡直接講最後配置的結果,還記得之前提到的build.gradle不?用文本編輯器將它打開,然後根據你使用的版本來修改它:
1.8.0
將'version = "1.0"'的前面的所有內容替換為:
buildscript { repositories { maven { name = "fmm" url = "http://forgemavenmirror.sinaapp.com/maven" } } dependencies { classpath 'net.minecraftforge.gradle:ForgeGradle:2.0-SNAPSHOT' classpath 'net.hakugyokurou.fgow:fgow:1.2.0' } } ext.mcpJsonUrl = "http://forgemavenmirror.sinaapp.com/versions.json" ext.forgeJsonUrl = "http://forgemavenmirror.sinaapp.com/maven/net/minecraftforge/forge/json" ext.skipFGVersionCheck = true apply plugin: 'fgow' repos { mcJsonUrl = "http://bmclapi2.bangbang93.com/versions/{MC_VERSION}/{MC_VERSION}.json" mcClientUrl = "http://bmclapi2.bangbang93.com/versions/{MC_VERSION}/{MC_VERSION}.jar"; mcServerUrl = "http://bmclapi2.bangbang93.com/versions/{MC_VERSION}/minecraft_server.{MC_VERSION}.jar";; assestIndexUrl = "http://bmclapi2.bangbang93.com/indexes/{ASSET_INDEX}.json"; assestUrl = "http://bmclapi2.bangbang93.com/assets" mcpUrl = "http://forgemavenmirror.sinaapp.com/fernflower-fix-1.0.zip" } repositories { flatDir { name "local"; dirs "/" } maven { name = "fmm" url = "http://forgemavenmirror.sinaapp.com/maven" } }
1.8.8/1.8.9/1.9
將'version = "1.0"'的前面的所有內容替換為:
buildscript { repositories { maven { name = "fmm" url = "http://forgemavenmirror.sinaapp.com/maven" } } dependencies { classpath 'net.minecraftforge.gradle:ForgeGradle:2.1-SNAPSHOT' classpath 'net.hakugyokurou.fgow:fgow:1.2.2' } } ext.mcpJsonUrl = "http://forgemavenmirror.sinaapp.com/versions.json" ext.forgeJsonUrl = "http://forgemavenmirror.sinaapp.com/maven/net/minecraftforge/forge/json" ext.skipFGVersionCheck = true apply plugin: 'fgow' repos { mcJsonUrl = "http://bmclapi2.bangbang93.com/versions/{MC_VERSION}/{MC_VERSION}.json" mcClientUrl = "http://bmclapi2.bangbang93.com/versions/{MC_VERSION}/{MC_VERSION}.jar"; mcServerUrl = "http://bmclapi2.bangbang93.com/versions/{MC_VERSION}/minecraft_server.{MC_VERSION}.jar";; assestIndexUrl = "http://bmclapi2.bangbang93.com/indexes/{ASSET_INDEX}.json"; assestUrl = "http://bmclapi2.bangbang93.com/assets" mcpUrl = "http://forgemavenmirror.sinaapp.com/fernflower-fix-1.0.zip" } repositories { flatDir { name "local"; dirs "/" } maven { name = "fmm" url = "http://forgemavenmirror.sinaapp.com/maven" } }
1.9.4
將'version = "1.0"'的前面的所有內容替換為:
buildscript { repositories { maven { name = "fmm" url = "http://forgemavenmirror.sinaapp.com/maven" } } dependencies { classpath 'net.minecraftforge.gradle:ForgeGradle:2.2-SNAPSHOT' classpath 'net.hakugyokurou.fgow:fgow:1.2.2' } } ext.mcpJsonUrl = "http://forgemavenmirror.sinaapp.com/versions.json" ext.forgeJsonUrl = "http://forgemavenmirror.sinaapp.com/maven/net/minecraftforge/forge/json" ext.skipFGVersionCheck = true apply plugin: 'fgow' repos { mcJsonUrl = "http://bmclapi2.bangbang93.com/versions/{MC_VERSION}/{MC_VERSION}.json" mcClientUrl = "http://bmclapi2.bangbang93.com/versions/{MC_VERSION}/{MC_VERSION}.jar"; mcServerUrl = "http://bmclapi2.bangbang93.com/versions/{MC_VERSION}/minecraft_server.{MC_VERSION}.jar";; assestIndexUrl = "http://bmclapi2.bangbang93.com/indexes/{ASSET_INDEX}.json"; assestUrl = "http://bmclapi2.bangbang93.com/assets" mcpUrl = "http://forgemavenmirror.sinaapp.com/fernflower-fix-1.0.zip" } repositories { flatDir { name "local"; dirs "/" } maven { name = "fmm" url = "http://forgemavenmirror.sinaapp.com/maven" } }
選讀:對上述代碼的解釋
哇,你還真是好奇心很強的類型啊,我喜歡?
之前已經提到了build.gradle是告訴Gradle如何部署和構建一個項目的,準確來說,它的學名是構建腳本,不同的軟件構建系統有不同的腳本,比如構建C/C++的CMake有CMakeList,之前提到的Maven也有pom,Gradle則採用的是build.gradle,它的一個特點是其本身其實是一段可執行的Groovy程序.Groovy是一個類Java的腳本語言,有着十分靈活的語法,Gradle便選用它作為構建腳本的語言.
由於構建腳本本身就是可編程的,理論上所有的操作都可以放在腳本中進行,但有些重複性的操作可以被提取出來做成一個公用庫,於是便有了Gradle插件,Gradle插件包含了一系列預置的操作,在腳本中可以通過apply plugin來載入一個插件.
不過有時候構建腳本會依賴一些第三方庫來啟動,於是便有了buildscript這個"用來構建'構建腳本'的腳本",buildscript用於描述構建腳本依賴的外部庫和它們的下載源,比如MDK默認的buildscript是:
buildscript { repositories { jcenter() maven { name = "forge" url = "http://files.minecraftforge.net/maven" } } dependencies { classpath 'net.minecraftforge.gradle:ForgeGradle:2.X-SNAPSHOT' } }
這個buildscript表示在構建腳本的準備階段,需要在JFrog的中央倉庫和Forge的倉庫下載ForgeGradle的插件和它的依賴庫.而前面我們修改的buildscript是:
buildscript { repositories { maven { name = "fmm" url = "http://forgemavenmirror.sinaapp.com/maven" } } dependencies { classpath 'net.minecraftforge.gradle:ForgeGradle:2.X-SNAPSHOT' classpath 'net.hakugyokurou.fgow:fgow:1.2.X' } }
它指定了從FMM(Forge的非官方倉庫鏡像)下載ForgeGradle和FGOW和它們的依賴庫.
再往後的代碼就是配置FGOW的各種下載源了,在FGOW的下載頁有詳細的介紹,這裡主要說明最後一段,最後一段你會發現又來了一個"repositories",而且在其下不遠處還有個自帶的"dependencies",那麼這裡的"repositories, dependencies"和buildscript中的"repositories, dependencies"有什麼關係?
它們的差別是:這裡的"repositories, dependencies"描述的是該項目的下載源和依賴的庫,buildscript中的"repositories, dependencies"描述的是此腳本的下載源和依賴的庫.比如如果我的項目額外使用了一種編譯型語言,需要在構建時編譯一遍,而運行時則不需要.顯然只有構建腳本在啟動時需要下載並加載該語言的編譯器,而我的項目發布後便不再需要它了.因此要將項目和構建腳本的dependencies分開對待,至於你問為何repositories也要分開對待...
整個安裝過程需要"一段時間",最長可能多達一個小時,如果你採用了上文中FGOW加速下載的話,中途應該不會有卡死的情況,但如果你發現在某一處地方真的停頓了超過10分鐘的話,果斷Ctrl+C中斷操作然後重來 ? Gradle卡死現象防不勝防,確實神煩.
對於Forge1.7.X/1.8.X,如果你在getVersionJson階段遇到形如"xxx.json could not be parsed","FileNotFoundException: Inherited json file (null) not found"之類的錯誤的話,嘗試將gradle.build中的
classpath 'net.minecraftforge.gradle:ForgeGradle:2.1-SNAPSHOT'
改成
classpath 'net.minecraftforge.gradle:ForgeGradle:2.1-20160209.170057-21'
當你安裝結束後(我忘了截圖了...總之如果你稍微懂一點英語的話,就能看出控制台明顯地提示已經安裝成功,而不是安裝未完或失敗.)就可以着手開始配置IDE了.
Eclipse自動配置
Gradle支持自動生成Eclipse項目,但願你現在還沒有關掉命令窗口(如果已經關掉了的話...就再打開吧),在命令窗口中執行:
gradlew.bat eclipse
然後等待其操作完成,然後運行Eclipse,首次運行時會讓你選擇工作目錄,直接將工作目錄設為MDK目錄下的eclipse目錄中.如果你已經運行過Eclipse,並且已經設置過工作目錄的話,打開Eclipse,點開左上角菜單File,選擇Switch Workspace.
然後將工作目錄切換到你的MDK目錄下的eclipse目錄中.
於是便完了...沒錯,自動配置就是這麼屌炸,連配置啟動方案都省去了= =
Eclipse手動配置
有時因為各種各樣的原因,我們不想切換工作目錄,這時就只能將項目導入然後手動配置項目,第一步還是跟自動配置相同,.
在Eclipse中打開File - Import,選擇Existing Projects into Workspace.
然後在Select root directory中將目錄設為MDK目錄,注意是MDK目錄而不是它下面的eclipse目錄.
之後點Finish就可以導入了.現在你還需要自己配置啟動方案.右鍵你的項目,選擇Properties.
然後選擇Run/Debug Setting,點擊New添加一個啟動方案.
首先我們要創建一個客戶端啟動方案.名字就叫做Client吧.將主類(Main Class)選為GradleStart.
然後打開Arguments頁,將Working directory選為Other,內容填上:
${workspace_loc}
如果你需要設置用戶名(用來顯示皮膚)的話在Program Arguments中加入:
--username [用戶名]
如果你有愛的話還可以在VM arguments里加入各種虛擬機優化參數
於是你便配置完客戶端的啟動方案了.如果你需要的話還可以配置服務器的啟動方案,服務器的啟動方案設置和客戶端的相似,不同之處在於:
MainClass為:
GradleStartServer
Eclipse的收尾工作
無論你是手動配置Eclipse,還是自動配置Eclipse,都還剩下最後一步需要進行 - 更改文件編碼和JDK版本
依然是在Properties頁中,將Resource項中的Text file encoding設為UTF-8.否則你的Mod中的中文顯示出來的都是亂碼的.(如果默認是UTF-8的話那再好不過)
然後檢查Java Compiler項,將Compiler compliance level設為1.6 (已經是1.6?那更好)
IDEA配置
配置IDEA首先要編輯build.gradle,在其中加入(如果不知道該加在哪的話...就加在最後吧!):
idea { module { inheritOutputDirs = true } }
然後在命令窗口中執行:
gradlew.bat idea genIntellijRuns
等它執行完畢後,打開IDEA,選Open,然後目錄設為MDK目錄.
之後打開就行了,按Alt-1來顯示項目目錄.
最後還要在項目目錄中選中Forge模塊,按F4(或者右鍵模塊,點Open Module Settings),在Project Settings - Project中,將Project Language Level改為6. (已經是6了?唔...也好)
無論你用的哪種IDE哪種配置方法,至此開發環境配置便完成了(\散花/) 快點擊Eclipse上方的Run按鍵或IDEA的Run菜單來運行一下試試吧.然而如果你發現運行不了,或者項目中少了很多東西...那很有可能是配置時哪裡出了問題,可以參考這篇文章:http://blog.hakugyokurou.net/?p=1298#gradleslow.
附錄 - 更換Gradle本地庫位置
Win7下,Gradle的本地庫位於C:\Users\[用戶名]\.gradle下. 在評論中@魏澎總結了一種更換本地庫位置的辦法:
將.gradlew複製到新位置後,在環境變量的系統變量里加個名稱為GRADLE_USER_HOME的變量,值填新的目錄位置,之後在Forge目錄內打開CMD,執行gradlew.bat inti修復Gradle,然後執行gradlew.bat eclipse/idea重新生成Eclipse/Idea文件,然後在Eclipse/Idea里重新導入項目.
為啥 我的SRC下沒有生成 common 文件夾?
你會不會運行的是decompile.bat,那個是MCP原版的反編譯,Forge的需要運行forge目錄下的install.bat.如果還不行的話就先用已配置完畢的Forge吧.
貌似運行forge目錄下的install.bat可以直接幫你下載好適合forge版本的MCP,不需要手動下載
好吧,新版Forge支持自動配置了...正在更新教程
請問
“failed = download_libraries or failed”
還有最後的
“UnicodeDecodeError: 'ascii' codec can't decode byte 0xd7 in position 40:ordinal not in range”
是什麼情況?我的mcp文件夾好像少了很多東西,包括lib文件夾(與1.4.6的相比缺少很多文件夾)。
關於第一個問題,我想是FML在下載必需的庫時遇到了網絡問題吧(比如GFW),我把一個已經安裝完,可以直接使用的FML+MCP打包好了.需要的話可以直接下載:http://pan.baidu.com/share/link?shareid=584508931&uk=3725755047.
至於第二個問題,我想也許是編碼問題...?試試在Eclipse里將項目屬性中的文件編碼改為UTF-8
第三個缺文件應該是第一個問題造成的.
我為啥是“不是內部和外部命令,也不是可運行的程序或批處理文件”/
有沒有加.bat? 無後綴的應該是給linux/mac用的,windows下執行不了
我在MSysGit的Shell下使用無.bat後綴也可正常使用。未測試cmd
屌,看起來你那個shell支持bash
我居然簡單有人和我一樣是半角符號黨...
話說用install自動生成的工程不行嗎?
可以用...導入後在項目屬性中將Resource-Linked Resources中的MCP_LOC的路徑改為你的mcp文件夾就可以直接使用了.
但我的Eclipse有問題,這樣改完後代碼文件夾就消失了...所以我是手動設定lib和jars的路徑然後手動link source.
forge安裝部分的圖掛了,難道我是一個人0 0?
最早我把圖穿到了圖床里,結果那圖床的服務器不定期被牆,之後我再傳圖就傳到自己的網站了...但我沒有把以前的圖倒過來.
阿門……
你加油……坐等修復
現在沒圖看得比較奇怪/w
為什麼我的MCP下沒有src和lib文件夾
也許是安裝時有什麼文件沒下載完導致安裝失敗吧...試試用這個已經配置好的MCP+FML?http://pan.baidu.com/share/link?shareid=584508931&uk=3725755047
掛了= =
直接 swtich workplace到mcp/eclipse是個懶人選擇
我常常同時期在做/研究很多mod
複製很多個forge src+mcp 然後用swtich workplace切換我正在研究的mod
我是1.52的738forge,裡面不自帶eclipse的項目,咋辦
好奇怪...那隻好自己新建一個項目了,主要的工作包括在Build path里用link source連接mcp下的源代碼,以及在libraries(應該沒拼錯...)中添加那些庫文件。可以參照一下舊教程的配置方法。
我還是沒明白,你加我Q 276879887 好么,謝謝您
先贊一個
http://files.minecraftforge.net/fmllibs/缺失的庫文件是哪些啊,這麼多= =要全下載么,還是只下載那5個帶lib的,下完要不要解壓
先贊一個(怕被和諧換了個名字)
http://files.minecraftforge.net/fmllibs/缺失的庫文件是哪些啊,這麼多= =要全下載么,還是只下載那5個帶lib的,下完要不要解壓
沒有被和諧,主機不在大陸:D
Minecraft1.6之後庫文件的位置改到了jars/libraries下...教程里寫的是1.6之前的補全庫方法= =我忘了改了,我加你Q然後給你傳一下文件吧...
萬分感謝~
博主大人 我在安裝時候出現這個問題 是什麼原因啊
== Decompiling client using fernflower ==
> Creating SRGs
> Applying SpecialSource
Stripping META-INF from jarsversions1.6.21.6.2.jar
Skipping: META-INF/MANIFEST.MF
Skipping: META-INF/MOJANGCS.SF
Skipping: META-INF/MOJANGCS.RSA
> Compiling AccessTransformer
D:forgefmlcommoncpwmodsfmlcommonasmtransformersAccessTransformer.java:
214: 錯誤: 不兼容的類型: Object無法轉換為FieldNode
for (FieldNode n : classNode.fields)
^
D:forgefmlcommoncpwmodsfmlcommonasmtransformersAccessTransformer.java:
233: 錯誤: 不兼容的類型: Object無法轉換為MethodNode
for (MethodNode n : classNode.methods)
^
注: D:forgefmlcommoncpwmodsfmlcommonasmtransformersdeobfFMLDeobfuscat
ingRemapper.java使用了未經檢查或不安全的操作。
注: 有關詳細信息, 請使用 -Xlint:unchecked 重新編譯。
2 個錯誤
Decompile Exception: 1