IDF与MDK
IDF,Idealland Framework(理想境框架),是指基于理想境mod源码删减之后得出的一台框架。
IDL,Idealland,理想境的简称。
MDK,Mod Development Kit,模组开发包的简称。
最初,IDF只是为了我个人开发微型mod的时候,不浪费太多时间写重复代码而制作的。后来,随着“边睡觉”系列教程的发布而对外开放。
须知,它最初只是个我个人私用的东西,制作的时候我还只是初级水平,所以质量有限。里面有命名风格不妥(部分函数名用了大驼峰),以及一些bug。最典型的bug就是用它里面的NBT工具类获取物品堆nbt信息后,会给物品留下一个空的NBT标签({})。
一个物品具有空NBT标签,和完全没有NBT标签(null)是有区别的,这会造成调用Get之后的物品没法与同类物品堆叠,扔到副手再扔回来又好了。这个bug已经在理想境里修复了,但是IDF里并没有修复。
那么,既然有这么多问题,为什么还要用它呢?
因为瘦死的骆驼比马大。
IDF里面尽管藏了一些问题,但是它仍然有很多制作正确的部分。尽管都是些基础,但是据我目前的观察,这些东西相当够用了,而且很多新人连制作这些正确的基础部分都有困难。
举例来说,我们想制作一个钻石这种什么特殊功能都没有的材料物品,需要做什么呢?
我们需要构造一个Item对象,给他设置注册名、翻译名,用代码挂载物品栏模型,注册它。同时,要把lang里填写正确的内容,写好正确的json,放到正确的位置,然后在正确的位置放置尺寸合规的贴图。与此同时,确保IDE正确地执行了打包流程,把资源都扔进了build下面正确的目录——是的,由于ForgeGradle的种种原因,即使你所有操作都正确,打包时候也可能没打进去。
这里面任何一个步骤出错,都会导致物品的某些内容显示不正确,或者这个物品干脆就不出现在游戏里。很多人用过IDF之后,觉得很多东西不从头自己搞不爽,于是试图自己从空白MDK开始搞,然后在各种步骤上出错或者干脆忘掉,导致紫黑块等问题。
举例来说,只有贴图不对,会导致日志里报告贴图FileNotFound或者尺寸不合规,或者无法解析。与此同时,游戏内的物品呈现紫黑块,且紫黑块上没有一行青色小字标明文件名——但这个症状还有可能是另一个问题。
最常见的错误包括:试图使用尺寸不是2的整数幂的贴图(16x14之类);位置放错了;文件夹的名字带有空格导致不匹配;注册名和路径对不上,因为两边都是手敲的,有手滑的打字错误;资源路径和文件名含有大写字母(这个是mc不允许的,必须小写字母、数字、下划线);图片不是png格式。
说到格式,群里曾经有人试图把bmp的文件名直接改为png,以让模组加载它,这当然完全不好使。当时群里一群人都在找路径究竟哪里错了,幸亏我眼尖,看到他IDEA里把png文件识别为Bitmap,我才问出了他这个毫无常识的操作。
好,那么接下来就是模型不对。只有模型文件不对,会导致物品变为一个紫黑块,且上面有一行青色小字,标明模型的名字。
这种情况最常见的是忘了生成模型,或者生成的模型资源路径不对,这种日志里会报告FileNotFound。少数情况是自己手敲,把json给敲坏了,这种日志里会报告json解析失败。
还有一种高端的模型不对,那就是json对了,但是代码里没有给物品关联上json。你看IDF的物品类,全都是implement IHasModel,也就是用HarryTalks那个写法,在之后的某个事件里统一注册模型。如果你用IDF却不实现这个接口,或者自己写的时候忘了写对应的代码,那么就会出现代码丢失模型的错误。这种情况下,日志不会报告任何问题,游戏内的表现和模型正确、贴图丢失一样——只有紫黑块,没有青色小字。
你看,如果只给我截图一个没有紫黑块,那么可能的问题就有两类,每一类里又有许多种细分问题。每次问我,难道我就要长篇大论地给你把所有情况都讲一遍?想的美哦。这种会被归为无效提问。
总有人遇到基础问题,但我不可能一辈子都处理基础问题,我也有我的问题要研究。所以推广IDF在很大程度上就是为了消除这种基础问题,尽量把能写的都给写了。如果自己从MDK开始搞,那你最好能hold住你遇到的一堆基础问题——毕竟,如果选用idf,很多问题压根都不会出现。IDF就是我的答案,放弃IDF而寻求我的答案,无异于浪费我的时间。