月度歸檔:2016年03月

關於新版ForgeGradle配置和FMM的一些事

半個月之前ForgeGradle更新了3月14號的2.1快照,FMM也自然抓取了更新,然而隨之而來的是在Blog上一陣井噴式的Bug報告,而且出錯原因都很奇怪,由於那段時間比較忙(lan)所以沒怎麼管,結果今天自己刷新工作環境的時候發現也中彩了,仔細調查下去沒有發現出錯根本原因但卻發現了另一個問題:FMM上緩存了一個損壞的快照...FMM在抓取3月14號的FG2.1快照(2.1-20160314.023449-32)時下載不完整,顯然用戶從FMM上下載到的該版本是無法正常使用的,如果你遇到形似"ClassNotFound net.minecraftforge.gradle.common.BasePlugin"之類的,那麼你就是遇到這個問題了,我已經手動更新了FMM上的緩存,但你可能仍需要手動刪掉本地緩存,具體位置是在"C:\Users\[用戶名]\.gradle\caches\modules-2\files-2.1\net.minecraftforge.gradle\ForgeGradle\2.1-SNAPSHOT"下的某一個文件中,損壞的文件是一個大小在11MB左右的.jar(正常的大小在13MB以上),如果懶得找的話可以把整個2.1-SNAPSHOT都刪了,反正它下載起來也快...
而剛才本來想調查的錯誤,則是在配置時在getVersionJson階段出現"xxx.json could not be parsed","FileNotFoundException: Inherited json file (null) not found"之類的,總而言之,就是在getVersionJson階段出錯的話,可能你需要使用一個較舊的FG版本,解決方法是把
classpath 'net.minecraftforge.gradle:ForgeGradle:2.1-SNAPSHOT'
改成
classpath 'net.minecraftforge.gradle:ForgeGradle:2.1-20160209.170057-21'
也就是手動指定一個老版本的FG2.1快照.另外,根據測試,這個問題只出現在Forge1.9之前(1.9沒有發現這個問題).如果你遇到了這個問題的話,可以在留言中報告遇到的版本(Forge版本,使用的FG的版本,有無使用FGOW),我也會繼續調查這個問題是Forge官方的鍋還是FGOW的鍋(畢竟這鍋太大我扛不動啊 233)

最後還有一個問題,就是FMM準備要遷站的事,此前FMM一直架設在SAE上,其質量嘛...差強人意,不過這個月SAE增加了噁心的固定扣費內容,每天都會扣除58(10基礎+48MySQL租費)雲豆的基礎費用,原本能用幾年的免費額度如今只夠幾周了...再加上最近抓取失敗的事,所以我準備把FMM遷到別處. 閱讀全文 [...]

FGOW1.2.2

前幾天Forge跟進到了MC1.9,新的ForgeGradle的2.1快照版沒有太大變化,只是多了一個version_manifest.json文件的下載,由於這個文件在某些地方下載起來並不容易,因此新版FGOW加上了它的下載地址修改功能.方法和修改MCP與Forge的版本json一樣,在apply plugin的之前加入:

百度網盤:http://pan.baidu.com/s/1bnPZt9P
SkyDrive:https://onedrive.live.com/redir?resid=856A4664427BE4F2!11485&authkey=!ANW9B0bWwk0BEsY&ithint=file%2cjar 閱讀全文 [...]

從1到100 - 模塊化的跨平台程序

前幾天完成了被當做作業的小程序,名字相當掩人耳目:Finite Digit Summator,一定程度上是向Digital Differential Analyzer致敬,項目被我扔到了Github上,本身並沒有太大應用價值,除了那兩幅從東方AA摘下來的字符畫,以及一黑黑了兩個遊戲的梗.

從設計上,它的項目結構很大程度上參考了我以前的項目,以一個核心模塊囊括主要功能,然後以多個針對不同平台的子模塊負責將功能封裝並展現給用戶,事實上,除了網頁版有一個功能是通過JS重新實現了一遍以外,幾乎所有的使用了兩遍以上的功能都被集成在了核心模塊中,因此可以說下一階段的目標"實現模塊化"我已經完成一半了(笑),剩下的看上去無非是將之前沒來得及上線的安卓端做完,修修Bug,刷刷單元測試之類的.

聽上去通過模塊化來實現跨平台就像當年老一輩眼中實現共產主義一樣簡單,然而一個實際的跨平台項目想要通過模塊化來實現在設計上卻是困難重重,最主要的問題在於硬件的局限性和需求的不同.還記得剛才說的"以前的項目"不? 2個月前的寒假時我開了一個新坑,用Java復刻(或者叫抄襲?取決於你怎麼看待"yet another alternative implementation"這種東西...)一個Era的開源跨平台版,什麼是Era?我放個截圖你大概就能知道是什麼東西了...

era 閱讀全文 [...]

在Gradle中集成Javacc

有時我們會希望在項目中使用一些腳本語言、DSL或特殊格式的配置文件什麼的,雖然已經有一些現成的方案,比如使用Java內置的JS引擎,或者使用LuaJ、Groovy之類的外部庫,但這些不是局限性略大,就是需要附帶龐大的庫,比如FML就附帶了一個Scala運行時庫(以及一個編譯器!),而實際上MC現在又有多少個用Scala寫的Mod呢?看Kotlin最近勢頭這麼火,估計過幾天他們就得附帶一個Kotlin庫了吧...言歸正題,這個時候我們就需要一個自行設計的腳本語言或者配置文件格式了,然而手寫一個Parser確實有一定難度,不過好在市面上有一類神奇的東西:"編譯器編譯器" 閱讀全文 [...]

嗯?軟件工程?

由於奇怪的課程要求,在接下來的小半年中每周我都會開一趟車-唔...是發一篇關於軟件工程的小短文.靠,我寫MCMod教程都沒這麼勤快過,這就是軟院對計院的復仇嗎?

大多數高等院校的信息類學科都被分為計算機科學和軟件工程兩個部分,關於科學與工程的區別,一個常見的解讀是"科學是在解決一個舊問題的同時提出兩個新問題,而工程是在不引發新問題的前提下解決掉舊問題".顯然客戶總是希望產品能夠準時準點地交付,而非一次又一次地次元突破Deadline.軟件工程就是為軟件的編寫提出一個章法,給世界上最桀驁不馴的一群人套上韁繩,讓他們製造出一個可靠的工程,而不是一個充滿了各種奇思妙想和奇技淫巧的垃圾堆.

The_Tower_of_Babel
老彼得·勃魯蓋爾的《通天塔》,在《黑客與畫家》一書中被用作封面.傳說中通天塔的建造由於人類的語言不通而最終以失敗收場,軟件開發中由於人員矛盾導致的殘局也是數不勝數. 閱讀全文 [...]