FAQ(全版本通用)
FAQ
介绍
这个专栏是用来解答一些常规问题的专栏。
由于遇到的问题实在是多,并且问题重复性也高,所以我决定编写这个专栏,以便大家能够更快地找到类似问题的解决方法。
专栏将定期更新,我会收集一些常见问题,然后进行解答。
如果你有任何问题,可以前往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);或者使用国内镜像源(清华、阿里、腾讯等),具体方法请自行搜索
啥都不干的话,构建七八个小时也是有可能的
不支持发行版本XXX
高版本的Gradle建构的时候可能会出现这个问题,比如
不支持发行版本21
这个是你Gradle使用的JDK版本与你项目结构和Gradle JVM版本不一致导致的
确保你的
Gradle JVM
版本和项目结构的JDK
版本与Gradle
使用的版本一致]
- 另外在
项目结构
的模块
中的源
和SDK
也要保持一致
build.gradle
中可以看到当前Gradle使用的JDK版本1
2
3
4
5
6
7
8
9
10
11
12
13tasks.withType(JavaCompile).configureEach {
it.options.release = 21
}
java {
// Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task
// if it is present.
// If you remove this line, sources will not be generated.
withSourcesJar()
sourceCompatibility = JavaVersion.VERSION_21
targetCompatibility = JavaVersion.VERSION_21
}- 那么21使用的就是JDK21,17使用的就是JDK17
类明明在,但IDEA报错找不到
IDEA日常抽风,我教程中也遇到过(当然你先看看导的路径对不对)
解决方法也很简单,在文件中,找到使缓存失效,移除项目的所有缓存和索引,重启IDEA,然后重新建构项目
方块、物品、实体等等显示为黑紫块
看日志,看日志,看日志
这种情况下基本上是你的资源文件(包括模型文件、材质文件等等)有问题,或者是你的命名空间有问题
另外,也检查你的贴图文件,除了
png
格式的贴图文件,其他格式的贴图文件都是不支持的
Non [a-z0-9_.-] character in namespace of location
- 一样的,非法字符,检查你的命名空间
xxx在xxx中具有private
/protected
访问权限
这个问题是因为你的类或者方法是私有的,而你在其他类中调用了这个类或者方法
如果你调用的是原版的类或者方法,检查是否配置了正确的源文件(就是
genSource
得到的那些)如果不是源文件的问题,你可能需要考虑Mixin了
在ModItemTagProvider中super函数选择第一个三变量函数后面DataGenerator中会报错,选择双变量的super函数不会报错
- 三个变量的最后一个是给blockTag的
Gradle无法正常运行
- 目前已知的除了网络问题无法下载之外,还有可能是你Gradle的缓存目录路径有中文
- Gradle的默认缓存目录是
C:\Users\用户名\.gradle
,如果你的用户名中有中文,那么Gradle可能会无法正常运行 - 用户名为中文的话,可以尝试更改Gradle的缓存目录
- 要改用户名的话我的建议是重装系统,这也是我自己专业中遇到的问题(毕竟建模的,渲染的软件大多是国外的,对中文并没有完全支持),当然也有其他方法改,重装系统虽然麻烦但风险小一点
在模块XXX中找不到类XXX
- 如图所示,主要是Gradle自带的那三个应用程序
Minecraft Client
、Minecraft Server
和Data Generation
这个也许是IDEA版本的问题,因为我的项目在IDEA 2024.3之后就出问题了,但在以前的版本中是没有问题的
解决方法简单粗暴,将各个应用程序的第二栏配置(
-cp
),改成带有你模组路径的模块,如图所示
关于环境变量
Java 17
以后的版本,其实不配环境变量也没关系,因为在JDK
安装的同时,已经将相关内容添加到了环境变量中而且IDEA可以为不同项目配置不同的
JDK
,所以不用担心当然,
Java8
还是得配
应用程序无法正常运行
- 这些应用程序包括
Minecraft Client
、Minecraft Server
和Data Generation
- 如果没法跑的话,可以直接使用
Gradle
任务里的runClient
、runServer
和runDatagen
,这样也能够正常运行 - 两个东西有一个能跑就行,不用担心
关于中文翻译
IDEA 2024.3
版本以后,IDEA内置中文语言,可在设置
中直接更改,而不用再安装插件(同时,控制台输出的中文乱码也解决了)
IDEA 2024.2
及其之前的版本,需要安装插件,插件名为Chinese Language Pack
,安装后重启IDEA即可
关于弃用的类/方法
- 有时候我们在在使用一些类或者方法的时候,IDEA会提示我们这个类或者方法已经被弃用了(也就是这些类或者方法被标记为
@Deprecated
) - 当然,这并不是说这些类或者方法不能用了,只是说这些类或者方法在未来的某个版本中可能会被移除,现在还可以用