基於FML的MinecraftMod製作教程(1) - MCP/FG和IDE的配置

首先需要強調,這個教程不是給沒有任何編程基礎的人準備的...你至少要懂得最基礎的編程知識和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

B1-5
根據自己的操作系統來選擇相應的版本,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")

B1-1n
圖:撰稿時Forge下載站1.9.4隻有Latest版,當你看的時候應該已經有Recommended版了.

(提示:Forge的默認下載鏈接是到adfoc,它是讓你先看5秒廣告,然後才能點右上角的鏈接繼續下載.如果你不喜歡看廣告,或者在你那裡adfoc被牆了的話,可以右鍵Mdk選複製鏈接(或者其他什麼的,取決於你用的瀏覽器,如果是IE那就是"複製快捷方式"),然後粘貼到瀏覽器地址欄里,手動刪掉前面的adfoc地址,只留下後半段真實下載位置)

將MDK的壓縮包解壓到一個文件夾,建議避免目錄中帶有非ASCII字符(比如漢字),也不推薦帶有空格,我們先來視奸一下MDK中都有什麼.

B1-2

除去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就會自動下載和配置操作環境了,很方便吧...

gradlew1

(提示:其實我還習慣加上-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也要分開對待...

5e419da8acb1e0b9

 

整個安裝過程需要"一段時間",最長可能多達一個小時,如果你採用了上文中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.

gradlew8

然後將工作目錄切換到你的MDK目錄下的eclipse目錄中.

gradlew9

於是便完了...沒錯,自動配置就是這麼屌炸,連配置啟動方案都省去了= =

Eclipse手動配置

有時因為各種各樣的原因,我們不想切換工作目錄,這時就只能將項目導入然後手動配置項目,第一步還是跟自動配置相同,.

在Eclipse中打開File - Import,選擇Existing Projects into Workspace.

B1-3

然後在Select root directory中將目錄設為MDK目錄,注意是MDK目錄而不是它下面的eclipse目錄.

B1-4

之後點Finish就可以導入了.現在你還需要自己配置啟動方案.右鍵你的項目,選擇Properties.

gradlew10

然後選擇Run/Debug Setting,點擊New添加一個啟動方案.

首先我們要創建一個客戶端啟動方案.名字就叫做Client吧.將主類(Main Class)選為GradleStart.

A1-2

然後打開Arguments頁,將Working directory選為Other,內容填上:

${workspace_loc}

如果你需要設置用戶名(用來顯示皮膚)的話在Program Arguments中加入:

--username [用戶名]

如果你有愛的話還可以在VM arguments里加入各種虛擬機優化參數

A1-3

於是你便配置完客戶端的啟動方案了.如果你需要的話還可以配置服務器的啟動方案,服務器的啟動方案設置和客戶端的相似,不同之處在於:

MainClass為:

GradleStartServer

Eclipse的收尾工作

無論你是手動配置Eclipse,還是自動配置Eclipse,都還剩下最後一步需要進行 - 更改文件編碼和JDK版本

依然是在Properties頁中,將Resource項中的Text file encoding設為UTF-8.否則你的Mod中的中文顯示出來的都是亂碼的.(如果默認是UTF-8的話那再好不過)

gradlew14

然後檢查Java Compiler項,將Compiler compliance level設為1.6 (已經是1.6?那更好)

gradlew15

IDEA配置

配置IDEA首先要編輯build.gradle,在其中加入(如果不知道該加在哪的話...就加在最後吧!):

idea { 
	module { 
		inheritOutputDirs = true 
	} 
}

然後在命令窗口中執行:

gradlew.bat idea genIntellijRuns

等它執行完畢後,打開IDEA,選Open,然後目錄設為MDK目錄.

B1-6

之後打開就行了,按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里重新導入項目.