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

MCMod教程开始恢复更新

MC1.9马上就要发布了,按照"总是差一个版本"的惯例(这是哪的惯例啊),教程准备从1.7更新到1.8了 ? 刚才看了眼第一篇教程,文中介绍的Eclipse居然还是4.3...现在第一篇教程已经更新了,最近那么多人抱怨没法配置开发环境,现在看来一点也不奇怪(捂脸,那篇实在太陈旧了).

想看看当初给MC1.2写ModLoader教程时的原始手稿,结果发现找不到了...这种东西还真能丢啊. 阅读全文 [...]

FGOW1.2.1和FMMv4

Forge在更新到1.8.8之后FGOW1.2.0就不能用了,于是自然而然地就有了FGOW1.2.1,新版本在功能上没有变化,只是支持了使用ForgeGradle2.1的Forge1.8.8和1.8.9.

下载地址:
SkyDrive:http://1drv.ms/21gcxy5
Dropbox:https://www.dropbox.com/s/ekig3gjx32uz3qp/fgow-1.2.1.jar?dl=0
百度网盘:http://pan.baidu.com/s/1geoIkin


此外,ForgeMavenMirror,也就是我们喜闻乐见的ForgeMaven仓库镜像,也更新到v4版本了.
更新内容包括:

  • 缓存了2.0、2.5和2.7的gradle文件,下载地址为"http://forgemavenmirror.sinaapp.com/gradle/gradle-[版本号]-bin.zip",启用它们的方式是修改Forge(其实现在应该叫MDK了)目录下的gradle/wrapper/gradle-wrapper.properties文件,将"distributionUrl="后面的下载地址改为镜像的地址.我之前没有弄这个是因为我不赞同这样做,Gradle的文件策略相当有问题,它是根据下载地址的Hash来识别版本的,这意味着不同下载地址的同一版本Gradle(甚至是同一个地址的https和http下载链接)会被识别为不同文件,你知道我的机器上已经有4个版本的Gradle-2.7-bin了吗?也许他们认为多版本并存很有意义,但我觉得仅凭下载地址来区分的多版本除了虐待硬盘以外毫无意义.不过现在考虑到Gradle已经成了GFW的重点关照对象之一,https链接几乎已经连不通了,这里还是提供了Gradle的缓存.
  • 增加了大量缓存,现在FMM已经可以代替所有的仓库了!对,你可以删掉除FMM以外的所有仓库,经过实测1.8.9可以在只有FMM仓库和本地Forge缓存目录的情况下配置.
  • 智能重定向,过去FMM在失败时只会重定向到Forge的仓库(files.minecraft.net),现在FMM会重定向到"最有可能"的仓库,此外,由于Oschina的Maven镜像复活了,对于Maven中央仓库的资源会重定向到Oschina的镜像.
  • 可选的快速失败,如果你不想要重定向功能的话,可以使用"http://forgemavenmirror.sinaapp.com/mavenff"这个仓库,它会在没找到缓存的情况下直接返回404,而不是重定向,这对于想要继续混合使用其他仓库的人来说很有用.
  • maven-metadata.xml缓存会在每天(北京时间凌晨1点)更新一次.因此,现在快照版本(Snapshot)又会被缓存了(之前由于maven-metadata.xml不会自动更新的问题,一度取消了快照版本的缓存).
  • 一些细微的优化.
阅读全文 [...]

写在《如何编写Shadersmod光影包》截稿之后

20160217032142

时间是早上6点30分.第一缕阳光透过天际线,将天空重新染回了深蓝色,宣告着一天生活的开始,而在此之前,这个城市第一批工作的人早已忙碌起来,楼下传来电动车轻微的嗡嗡声,如果那位送奶工稍有留意的话,一定会注意到在这个尚未醒来的社区中,总有一栋楼的一扇窗是通宵长明的,当一个人在沉睡的世界中醒来时,难免会对周围为数不多的同样清醒的人产生好奇,那间房间的住户在他眼中会是什么样的人?一个沉迷于电子游戏通宵达旦的少年?一个在半睡半醒中着衣准备扎入地下,沿着一条隧道前往城市的另一头上班的青年?还是一个见证了共和国的诞生与成长,在结束了自己几十年如一日的工作后,正在安享另一个十年如一日的生活的老(zhang)者(?)?又或是仅仅不经意地瞥一眼后便调整车头一甩而过,毕竟这个城市太大,而值得留意的人又太少.
对于房间的主人来说也是一样的道理,在被车声分心了眨眼的工夫后,便又重新将注意力集中在眼前的屏幕上,灰色背景的网页中,密密麻麻的象形文字平铺在纯白的框体中,对一个英语国家的人来说,这种文字几乎是不可思议的,难以想象这些远古的黑暗时代的涂鸦能伴随着文明一路成长延续至今,并深深地渗透入它的文化当中,而对信息学家而言,这种表述方式并无任何值得惊讶的地方,在卐字旗已经从国会大厦前降下而铁幕与高墙尚未筑起的时代,香农已经指出了信息的本质,世间万物,但凡实际存在可被度量者,皆可被表示为比特,原本无意义的涂抹被有机地组合后构成了文字,而数以万计意义不明的文字在被精心地排列后,构成了眼前的这一篇文章,在另一处看不见的地方,数以千万计的比特正以电或磁的形式存储在介质中,当它们以合适的形式显示出来时,在屏幕上就是一张张美轮美奂的截图或简洁而巧妙的图示.这些内容加起来不及一亿比特,倘若只是单纯地产生它们,在计算机中只需微秒计的时间,但要将他们排列成有意义的形态,却需要数以月记的时间.在安慰性地扫视了几眼后,鼠标指针停在发布按钮上,已经没有什么可等待的了. 阅读全文 [...]