月度归档: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
老彼得·勃鲁盖尔的《通天塔》,在《黑客与画家》一书中被用作封面.传说中通天塔的建造由于人类的语言不通而最终以失败收场,软件开发中由于人员矛盾导致的残局也是数不胜数. 阅读全文 [...]