Part 1 前系列教程总结

第一个部分来总结一下之前的模组开发教程。其实呢,在1.21的模组开发教程中,也做过这样的总结,不过现在我们一起看看之前的那些教程。从我制作模组开发教程以来,目前有三套模组开发教程,包括1.16.5 Forge、1.20 Fabric和1.21 Fabric。其实就目前而言,从我的角度来说,也就只有1.21 Fabric那个教程还算可以,至少在那一个系列的教程中,我把我要讲的,基本上都讲了。

最开头的那个1.16.5 Forge的教程本来也就没好好做,因为那个时候我自己的编程能力也就那样;1.20 Fabric的教程处于一个时间较短,但我自己的事情一堆的寒假,其实也没好好做,而后1.21 Fabric的教程折腾了好几个月,连带着图文教程一起给肝完了,这个系列能说是我唯一一个好好做的系列。

而现在呢,为什么我要重新回过头来重制1.20 Fabric的教程呢?这个我在我自己的2024年年度总结中写过。一方面,1.21.2以后的版本,你说它小版本更新吧,啊对,改的跟个大版本更新一样。有些东西是越来越抽象了,而就我目前的情况来说,我也暂时不想也没时间去研究那些新东西。而且现在Minecraft的更新还是挺频繁的,如果说每出一个新版本,我就来做一个新系列的教程的话,时间成本那是很大滴。另外,其实你们能够发现,每个系列讲来讲去其实东西都差不多的,额,不仅仅是因为我用的例子一样。就像注册这种,底层不动的话基本上都差不多,各种各样的数据文件也好,也都是差不多的。我相信大家更愿意听的,不是差别不大的、老生常谈的东西,而是想听更深入的,进阶的东西。所以与其去追Minecraft的版本,倒不如在一个版本上专精,一个版本会了,其实其他的版本,甚至另外两个模组开发端都是一样的。短期内的话,高版本的教程是没有了,不过,我也期待能有人接着做下去,那样我就不用干了,哈哈~

另一个方面呢,我自己就在开发1.20.1 Fabric的模组,所以对于其他版本而言,1.20.1肯定更加熟悉。而且明日方舟的家具模组是一个长线计划,只要方舟有新的家具出来,就会一路更新下去,所以顺带着我就将1.20.1 Fabric的模组开发教程也作为一个长线计划。其实这俩玩意是可以互补的,家具模组的一些东西可以作为教程,然后在教程中探索到的新点子也可以写到模组中去,双赢对吧。其实大家有什么新想法也可以交流,可以写出来,也可以做教程,一起来扩充国内的模组开发教程。我会做教程吗?其实我也不会,只是希望大家或多或少能学点东西吧。

我教给大家的,其实早就已经教了,这个在后面那部分也会讲到,那就是研究源代码。古人云,授人以鱼不如授人以渔,大家觉得,你是选择给你一条鱼,还是说我把捕鱼的技术教给你?从长远来看,大多数人应该会选择后者,毕竟给你一条鱼,吃完了,然后呢?显然,模组开发也是一样的,我要做的,是把如何写模组这件事教给大家,而不是简单地告诉你,这个东西这么写,那个东西这么写,然后就完了。当然,这种教程并不好做,因为要考虑的东西,要讲的东西要比一般的教程多得多。

Part 2 模组开发注意事项

这个部分吧,其实就是当时在《小白怎么做模组》那个视频里讲过的,差不多。那个视频咋说呢,发了一个礼拜之后莫名其妙的有流量了,于是乎,也为我的教程带来了流量。时至今日,它还在发挥着引流的作用,那就让它这么待着吧。我这里的话重新总结为三个关键词。

第一个,Java基础。还用我说什么吗?这是一个老生常谈的东西吧,不要问为什么要学Java,你觉得Java版是叫着好听的吗?为啥它不叫Python版?我知道某易的编辑器是用Python的吧,但那玩意开发的是什么,基岩版吧?Java版的模组,就拿Java写,或者Kotlin,当然后者不在我们的教程范围内。其他语言,可以起一个辅助作用,比如python来辅助编写一些重复性比较高的语句,或者编一些json文件。当你有成百上千个东西要加在模组里面的时候,你就会知道我为什么要这么干了。当然,这是后话,未来我们也可以讲讲。

回过头来,我还是得强调,不要不要不要,跳过Java的基础教程来学模组开发。即便你把我的教程抄会了,一到你自己写,那又寄了,这不白搭吗?对吧。所以,一开始,不用想你的想法能不能实现,那都是后话,没基础再天马行空的想法也是空想,所以,没基础的,就此打住,先去学Java。有句话怎么讲的,基础不牢,地动山摇。另外,如果说学了其他语言的,其实我也建议学学Java的基础,我自己是python过来的,这俩差别挺大,而C或者C++的话,可能还和Java像一点,但还是建议了解一下Java的基础。

第二个,日志。如果你们来问问题,我基本上都会提这个东西。因为99%的问题都可以通过日志来解决,或者崩溃报告。但相对而言,日志更加方便。以前呢,你自己加模组玩游戏,游戏崩溃了,你不会看,把崩溃报告发出来给别人看看,那没事。但是现在,你都干开发了,不要说还不会看日志。因为学编程的时候,总会有报错的时候吧,你会看报错信息,也就会看日志。只是日志会分得更加详细,其他的信息也有很多。一般在开发过程中,尤其要注意WARN、ERROR标识的日志信息,那些警告和错误可能会导致你的游戏崩溃。用IDEA开发的话,Fabric的话,那些不同日志标识的颜色也是不一样的,另外两个好像没这个特性,还得找找。即便崩溃了,你也可以根据日志中标识的有问题的位置进行跳转,快速定位你代码的问题。另外1%的问题,大多数是IDEA、Gradle、Java等等杂七杂八的问题导致的。

第三个,源代码。这是我从1.20教程开始提出的一个核心方法论,在1.21的教程中进行了证明。开发一个模组是要消耗大量时间的,但其实大多数的时间并不是你在写代码,而是在研究代码。你想用Minecraft的某个物品、方块、效果等等某个部分,去看源代码;你觉得某个模组的某个东西很好,想看看如何实现的,去看它们的源代码。是的,源代码不仅仅指MC的源代码,还有发展了十几年的庞大的开源社区贡献的种类繁多的模组源代码,某些闭源的模组也可以通过反编译的手段获得源代码,虽然那样可能不太道德。当然,在这里我们也要知道,我在这里说的MC的源代码并不是真正意义上的源代码,因为MC是闭源的商业游戏,源代码是它的商业机密,可不会放出来。那么我们所能看到的,是各个模组开发组织他们依照一套映射表,进行反编译得到的。

映射是什么东西,这里我就简单解释一下,感兴趣的同学可以自己深入研究,大佬们也可以在评论区留下你的想法。我不知道大家有没有拆过MC的jar包,拆了之后去掉另外的数据文件,你会得到一堆class文件,那些是Java编译好的文件,因为Java的源文件是java后缀的。然后我们再往里面看看,除了Java常规的关键字外,就是一堆零零散散、甚至可以说是乱七八糟的变量名、方法名,而这些乱七八糟的名字,就是通过一套特定的映射表混淆成的。然后那些模组开发组织,人工猜测这些名字的含义,制成他们自己的映射表,那些名字通过这些映射表反编译之后,就成为了我们看到的源代码。Fabric的yarn映射,便是其中之一。当然现在Mojang也公开了一部分映射表,NeoForge和Forge就是用的Mojang映射,当然Fabric现在也有了。即便如此,我们能看到的源代码,也就只有一部分,翻源代码的时候,你可能还是会看到flied_xxx、method_xxx这样类似的字段,那是没完全反编译过来的名字,我们还没猜到它的意思。因为映射表的不同,所以我们会看到那些字段名、类名、方法名是不一样的。

第四个,静心。为什么说我不出Java的基础教程,而是直接讲模组开发的东西。因为我不是专业的,不是专门学Java的,网上现在Java的教程也很多,学那些就够了。当然,在学Java的过程中,我更看重你的,是你的耐心。编程一事,慢慢来,不要火急火燎的,我相信你学完Java基础之后,也能静下心来,耐心地来学模组开发。现在的人呢,包括我自己,其实不是说学不会,而是没能静下心来好好学。当然也有这个时代的原因,因为我们所处的时代发展异常迅速,刷视频越刷越焦虑,结果还刷得不亦乐乎,干嘛呢?放下手机,泡杯茶,慢慢喝,慢慢品,静下心来,慢慢学。人不能一口气吃成个胖子,胖子也不可能一口气瘦下来,凡事都有一个过程,对吧?咱们数学老师往往都会强调,过程!所以,把心静下来,我把这条放在最后,也看看你能不能看到这里。这一条,也许比前面的三条都要重要。

模组开发其实自由度相当高,只要你会,就没有写不出来的东西,写不出来也就目前能力不够,仅此而已。

话说,你们觉得我厉害吗?其实我能实话告诉你,不厉害。咱也就是一个平平无奇的大学生罢了,而且还是建筑学专业的,论专业性肯定比不上计算机专业的。你要说为什么我能在一些问题上快速响应,直接看出问题所在?其实就是看得多,量多了,质也就有了。其实编程,或者说模组开发这件事,看完我的教程是远远不够的,自己也得多看多写,也可以和别人多交流,甚至你可以自己出教程。而相对而言,我个人感觉,做教程的话进步是最快的。因为在教会别人之前,你自己得先搞清楚那堆东西,然后才能教别人。外加一大堆杂七杂八的问题,都连带着推动你进步。费曼学习法嘛,对吧。

Part 3 教程安排

那么关于教程安排的话,当然是先把我要讲的都讲了,然后再追加新内容。和往常一样,我们从基础教程开始,再往进阶拓展。案例方面的话,前面基础部分就延用曾经的案例,毕竟这个是对1.20教程的重制,然后内容上做到和1.21教程差不多一致。在此之后,我将进一步结合我自己的模组开发历程和大家的想法,去写一些新东西、新玩意出来。

这个系列的教程的话,大家有什么想法都可以提,我如果有能力实现这些想法的话,后面都会做成教程放出来。不过也不一定我来做,大家也可以来做。我建议,去我的频道。频道其实就像国外的那个Discord吧,因为在那里你能发帖子,人多了的话就可以一起交流。

本系列教程是一个长线计划,我自己也不知道会持续多长时间,一年两年,到我大学毕业或者一直到我工作可能还会接着做,只要能写得出来,那就出新教程。当然,更新频率的话就没有个定数了,有就出,没有就空着几个月。在本系列教程之外的教程,有时间的话可以研究研究,出一点,但终归不是重点。当然,这样的教程模式,也让我有更多的时间去搞点其他的新东西,未来可能会做点别的教程呢,哈,谁知道呢。