FAQ(全版本通用)
FAQ
介绍
这个专栏是用来解答一些常规问题的专栏。
由于遇到的问题实在是多,并且问题重复性也高,所以我决定编写这个专栏,以便大家能够更快地找到类似问题的解决方法。
专栏将定期更新,我会收集一些常见问题,然后进行解答。
如果你有任何问题,可以前往QQ群
提问,也可以前往QQ频道
留言(因为可以发帖子,相似的问题也能够查看,不需要重复提问)。之前也一直在找和Discord类似的平台,也只有频道能发帖了。
ps:不要直接来找我,我的专业很忙,没时间回答你的问题
频道链接:北山の频道
学会提问
在提问之前,你需要学会如何提问。
另外这里也有一篇文章,可以帮助你学会如何提问:提问的智慧
学会看日志
注意,为了避免产生歧义,此处所说的日志均为运行游戏时,在运行窗口输出的日志,并不是崩溃报告
以前,你玩游戏,游戏崩了,不会看日志也就算了。把日志发给别人看看,让别人帮你解决,那问题不大。
但是现在,你在开发模组,如果你还是不会看日志,甚至连Java的报错信息都不会看,那我建议你先学会看日志再学习模组开发。
我能说99%的问题你看日志就能解决,剩下的1%基本上是IDEA抽风了、gradle抽风了、jdk坏了等等非常规的问题。
当然还有写了bug,这个只能靠你自己测试出来,日志基本上不会报。
所以绝大多数问题都是可以通过日志解决的。日志能够详细地告诉你问题出在哪里,你只需要根据日志的提示来解决问题就好了。
虽然说我这里的教程并不会是最全面的,但是我会尽量让你们学会看日志,那么以下就是一些常见的日志信息:
INFO
1 | [16:54:14] [main/INFO] (FabricLoader/GameProvider) Loading Minecraft 1.20.1 with Fabric Loader 0.16.3 |
INFO类型的是一个非常常见的日志,它会告诉你一些信息
[16:54:14]
是时间戳
[main/INFO]
是日志的级别和线程信息,main
代表主线程,INFO
代表这是一个信息级别的日志(即非错误、警告,仅用于提供信息)
(FabricLoader/GameProvider)
是生成日志的模块或者组件
Loading Minecraft 1.20.1 with Fabric Loader 0.16.3
是日志的内容,表示Minecraft 正在使用 Fabric Loader 0.16.3 来加载 Minecraft 1.20.1 版本
我们自己的模组也会有,如果你留着主类中的日志输出的话
1 | [16:54:22] [Render thread/INFO] (arknights-furniture) Hello Fabric world! |
WARN
1 | [16:54:25] [Worker-Main-7/WARN] (Minecraft) Unable to load model: 'arknights-furniture:laterano_logo#inventory' referenced from: arknights-furniture:laterano_logo#inventory: java.io.FileNotFoundException: arknights-furniture:models/item/laterano_logo.json |
WARN类型的日志是一个警告,表示有一些问题,但是不会影响游戏的正常运行
前面的几项内容和INFO类型的日志一样,不再赘述
而我们需要注意的是它的内容,这里是一个警告,表示无法加载模型arknights-furniture:laterano_logo#inventory
(#inventory指物品在物品栏中的模型文件),
因为找不到arknights-furniture:models/item/laterano_logo.json
文件
游戏能够正常运行,但是这个物品的模型无法加载,你将得到一个紫黑块
不过,在你前去检查你的文件之前,也先检查这个信息中的内容是否有问题
检查日志中的命名空间
和物品名字
是否正确,如果没问题再去检查文件及其路径是否有问题
ERROR
1 | [17:56:44] [Render thread/ERROR] (Minecraft) No data fixer registered for polishing_machine_block_entity |
ERROR类型的日志是一个错误,表示有一些问题,可能会影响游戏的正常运行
前面的内容差不多,不过目前我自己的教程中的ERROR也就只有方块实体会报这玩意,然后实际情况是似乎能跑,就没管他
这里的内容表示没有为polishing_machine_block_entity
注册数据修复器,要修的话照原版写一下就好了
DEBUG
这一类信息一般不会在游戏中看到,但你在调试的时候会看到,我这里就不举例子了
直接崩
虽然但是,有些时候是直接崩溃的,而在崩溃之前并没有什么信息
不过此时它会连带这把崩溃报告一起给你,你可以查看这个报告,看看是什么问题
1 | ---- Minecraft Crash Report ---- |
此处的报告我只截取了一部分,但这是一个显然易见的问题,也是一个老生常谈的问题
在实际开发过程中,属于你项目的类是可以直接在这个输出窗口中点击跳转的,直接跳转到出问题的地方,比如这里的ArknightsFurniture.java:24
你可以直接点击跳转,那里的代码是
1 | ModItems.registerItems(); |
而ModItems.java:57
是
1 | return Registry.register(Registries.ITEM, new Identifier(ArknightsFurniture.MOD_ID, id),item); |
而ModItems.java:11
是
1 | public static final Item ABYSSAL_HUNTERS_LOGO = registerItem("abyssal_hunters_logo", new Item(new Item.Settings())); |
当然,其实后面两个不去跳转也没关系,因为我们看这个报错信息就知道问题出在哪里了
1 | Caused by: net.minecraft.util.InvalidIdentifierException: Non [a-z0-9_.-] character in namespace of location: Arknights-furniture:abyssal_hunters_logo |
知道什么意思了吗?Arknights
这个命名空间非法,所以报错了,而这个命名空间的规范性之前也在讲第一个物品中详细讲过了
总结
所以说,看日志解决问题是一个非常重要的技能,我强烈建议每一位开发者都能够学会这个技能
以后,说不定你就不需要向他人提问了,甚至你能够教别人如何解决问题,何乐而不为呢?
常见问题FAQ
现在开始正题(持续更新中)
Gradle下载卡住、下载慢、超时、下载失败等等
使用代理(IDEA需单独配置,或者你直接开TUN);或者使用国内镜像源(清华、阿里、腾讯等),具体方法请自行搜索
啥都不干的话,构建七八个小时也是有可能的
不支持发行版本21
这个是你Gradle使用的JDK版本与你项目结构和Gradle JVM版本不一致导致的
确保你的Gradle JVM版本和项目结构的JDK版本一致
build.gradle
中可以看到当前Gradle使用的JDK版本
1 | tasks.withType(JavaCompile).configureEach { |
那么21使用的就是JDK21,17使用的就是JDK17
类明明在,但IDEA报错找不到
IDEA日常抽风,我教程中也遇到过(当然你先看看导的路径对不对)
解决方法也很简单,在文件中,找到使缓存失效,移除项目的所有缓存和索引,重启IDEA,然后重新建构项目
方块、物品、实体等等显示为黑紫块
看日志,看日志,看日志
这种情况下基本上是你的资源文件(包括模型文件、材质文件等等)有问题,或者是你的命名空间有问题
Non [a-z0-9_.-] character in namespace of location
- 一样的,非法字符,检查你的命名空间
xxx在xxx中具有private访问权限
这个问题是因为你的类或者方法是私有的,而你在其他类中调用了这个类或者方法
如果你调用的是原版的类或者方法,检查是否配置了正确的源文件(就是genSource得到的那些)
如果不是源文件的问题,你可能需要考虑Mixin了
在ModItemTagProvider中super函数选择第一个三变量函数后面DataGenerator中我会报错,选择双变量的super函数不会报错
- 三个变量的最后一个是给blockTag的
Gradle无法正常运行
- 目前已知的除了网络问题无法下载之外,还有可能是你Gradle的缓存目录路径有中文
- Gradle的默认缓存目录是
C:\Users\用户名\.gradle
,如果你的用户名中有中文,那么Gradle可能会无法正常运行 - 用户名为中文的话,可以尝试更改Gradle的缓存目录
- 要改用户名的话我的建议是重装系统,这也是我自己专业中遇到的问题(毕竟建模的,渲染的软件大多是国外的,对中文并没有完全支持),当然也有其他方法改,重装系统虽然麻烦但风险小一点